From 864d9b2d738df0f6234d67c8b3223a5d36b87317 Mon Sep 17 00:00:00 2001 From: X123M3-256 Date: Wed, 15 Jan 2025 12:25:29 +0000 Subject: [PATCH] Add large diagonal flat to steep and dive loop track pieces --- CMakeLists.txt | 4 +- data/language/en-GB.txt | 2 + distribution/changelog.txt | 1 + openrct2.proj | 4 +- resources/g2/sprites.json | 1344 +++++++++++++++ .../g2/track/bm/dive_loop_45_left_1_1.png | Bin 0 -> 1199 bytes .../g2/track/bm/dive_loop_45_left_1_2.png | Bin 0 -> 1348 bytes .../g2/track/bm/dive_loop_45_left_1_3.png | Bin 0 -> 1556 bytes .../g2/track/bm/dive_loop_45_left_1_4.png | Bin 0 -> 13047 bytes .../g2/track/bm/dive_loop_45_left_2_1.png | Bin 0 -> 1055 bytes .../g2/track/bm/dive_loop_45_left_2_2.png | Bin 0 -> 1230 bytes .../g2/track/bm/dive_loop_45_left_2_3.png | Bin 0 -> 1126 bytes .../g2/track/bm/dive_loop_45_left_2_4.png | Bin 0 -> 9898 bytes .../g2/track/bm/dive_loop_45_left_3_1.png | Bin 0 -> 1265 bytes .../g2/track/bm/dive_loop_45_left_3_2.png | Bin 0 -> 13377 bytes .../g2/track/bm/dive_loop_45_left_3_3.png | Bin 0 -> 10939 bytes .../g2/track/bm/dive_loop_45_left_3_4.png | Bin 0 -> 10050 bytes .../g2/track/bm/dive_loop_45_left_4_1.png | Bin 0 -> 1272 bytes .../g2/track/bm/dive_loop_45_left_4_2.png | Bin 0 -> 1533 bytes .../g2/track/bm/dive_loop_45_left_4_3.png | Bin 0 -> 1490 bytes .../g2/track/bm/dive_loop_45_left_4_4.png | Bin 0 -> 11783 bytes .../g2/track/bm/dive_loop_45_right_1_1.png | Bin 0 -> 1217 bytes .../g2/track/bm/dive_loop_45_right_1_2.png | Bin 0 -> 12544 bytes .../g2/track/bm/dive_loop_45_right_1_3.png | Bin 0 -> 11108 bytes .../g2/track/bm/dive_loop_45_right_1_4.png | Bin 0 -> 9451 bytes .../g2/track/bm/dive_loop_45_right_2_1.png | Bin 0 -> 1047 bytes .../g2/track/bm/dive_loop_45_right_2_2.png | Bin 0 -> 1238 bytes .../g2/track/bm/dive_loop_45_right_2_3.png | Bin 0 -> 1139 bytes .../g2/track/bm/dive_loop_45_right_2_4.png | Bin 0 -> 10309 bytes .../g2/track/bm/dive_loop_45_right_3_1.png | Bin 0 -> 1243 bytes .../g2/track/bm/dive_loop_45_right_3_2.png | Bin 0 -> 1486 bytes .../g2/track/bm/dive_loop_45_right_3_3.png | Bin 0 -> 1645 bytes .../g2/track/bm/dive_loop_45_right_3_4.png | Bin 0 -> 12573 bytes .../g2/track/bm/dive_loop_45_right_4_1.png | Bin 0 -> 1270 bytes .../g2/track/bm/dive_loop_45_right_4_2.png | Bin 0 -> 1559 bytes .../g2/track/bm/dive_loop_45_right_4_3.png | Bin 0 -> 1466 bytes .../g2/track/bm/dive_loop_45_right_4_4.png | Bin 0 -> 12186 bytes .../g2/track/bm/flat_to_steep_up_diag_1_1.png | Bin 0 -> 1181 bytes .../g2/track/bm/flat_to_steep_up_diag_1_2.png | Bin 0 -> 1303 bytes .../g2/track/bm/flat_to_steep_up_diag_1_3.png | Bin 0 -> 1413 bytes .../g2/track/bm/flat_to_steep_up_diag_2_1.png | Bin 0 -> 969 bytes .../g2/track/bm/flat_to_steep_up_diag_2_2.png | Bin 0 -> 860 bytes .../g2/track/bm/flat_to_steep_up_diag_2_3.png | Bin 0 -> 1095 bytes .../g2/track/bm/flat_to_steep_up_diag_3_1.png | Bin 0 -> 1204 bytes .../g2/track/bm/flat_to_steep_up_diag_3_2.png | Bin 0 -> 1384 bytes .../g2/track/bm/flat_to_steep_up_diag_3_3.png | Bin 0 -> 1495 bytes .../g2/track/bm/flat_to_steep_up_diag_4_1.png | Bin 0 -> 1127 bytes .../g2/track/bm/flat_to_steep_up_diag_4_2.png | Bin 0 -> 1165 bytes .../g2/track/bm/flat_to_steep_up_diag_4_3.png | Bin 0 -> 1132 bytes .../g2/track/bm/steep_to_flat_up_diag_1_1.png | Bin 0 -> 1418 bytes .../g2/track/bm/steep_to_flat_up_diag_1_2.png | Bin 0 -> 1315 bytes .../g2/track/bm/steep_to_flat_up_diag_1_3.png | Bin 0 -> 1194 bytes .../g2/track/bm/steep_to_flat_up_diag_2_1.png | Bin 0 -> 860 bytes .../g2/track/bm/steep_to_flat_up_diag_2_2.png | Bin 0 -> 860 bytes .../g2/track/bm/steep_to_flat_up_diag_2_3.png | Bin 0 -> 1140 bytes .../g2/track/bm/steep_to_flat_up_diag_3_1.png | Bin 0 -> 1515 bytes .../g2/track/bm/steep_to_flat_up_diag_3_2.png | Bin 0 -> 1403 bytes .../g2/track/bm/steep_to_flat_up_diag_3_3.png | Bin 0 -> 1211 bytes .../g2/track/bm/steep_to_flat_up_diag_4_1.png | Bin 0 -> 1069 bytes .../g2/track/bm/steep_to_flat_up_diag_4_2.png | Bin 0 -> 1148 bytes .../g2/track/bm/steep_to_flat_up_diag_4_3.png | Bin 0 -> 1156 bytes .../track/corkscrew/dive_loop_45_left_1_1.png | Bin 0 -> 1181 bytes .../track/corkscrew/dive_loop_45_left_1_2.png | Bin 0 -> 1382 bytes .../track/corkscrew/dive_loop_45_left_1_3.png | Bin 0 -> 1616 bytes .../track/corkscrew/dive_loop_45_left_1_4.png | Bin 0 -> 1266 bytes .../track/corkscrew/dive_loop_45_left_2_1.png | Bin 0 -> 1073 bytes .../track/corkscrew/dive_loop_45_left_2_2.png | Bin 0 -> 1345 bytes .../track/corkscrew/dive_loop_45_left_2_3.png | Bin 0 -> 1219 bytes .../track/corkscrew/dive_loop_45_left_2_4.png | Bin 0 -> 1159 bytes .../track/corkscrew/dive_loop_45_left_3_1.png | Bin 0 -> 1255 bytes .../track/corkscrew/dive_loop_45_left_3_2.png | Bin 0 -> 1587 bytes .../track/corkscrew/dive_loop_45_left_3_3.png | Bin 0 -> 1294 bytes .../track/corkscrew/dive_loop_45_left_3_4.png | Bin 0 -> 1214 bytes .../track/corkscrew/dive_loop_45_left_4_1.png | Bin 0 -> 1308 bytes .../track/corkscrew/dive_loop_45_left_4_2.png | Bin 0 -> 1538 bytes .../track/corkscrew/dive_loop_45_left_4_3.png | Bin 0 -> 1471 bytes .../track/corkscrew/dive_loop_45_left_4_4.png | Bin 0 -> 1167 bytes .../corkscrew/dive_loop_45_right_1_1.png | Bin 0 -> 1214 bytes .../corkscrew/dive_loop_45_right_1_2.png | Bin 0 -> 1484 bytes .../corkscrew/dive_loop_45_right_1_3.png | Bin 0 -> 1277 bytes .../corkscrew/dive_loop_45_right_1_4.png | Bin 0 -> 1151 bytes .../corkscrew/dive_loop_45_right_2_1.png | Bin 0 -> 1068 bytes .../corkscrew/dive_loop_45_right_2_2.png | Bin 0 -> 1306 bytes .../corkscrew/dive_loop_45_right_2_3.png | Bin 0 -> 1205 bytes .../corkscrew/dive_loop_45_right_2_4.png | Bin 0 -> 1206 bytes .../corkscrew/dive_loop_45_right_3_1.png | Bin 0 -> 1226 bytes .../corkscrew/dive_loop_45_right_3_2.png | Bin 0 -> 1463 bytes .../corkscrew/dive_loop_45_right_3_3.png | Bin 0 -> 1706 bytes .../corkscrew/dive_loop_45_right_3_4.png | Bin 0 -> 1213 bytes .../corkscrew/dive_loop_45_right_4_1.png | Bin 0 -> 1352 bytes .../corkscrew/dive_loop_45_right_4_2.png | Bin 0 -> 1521 bytes .../corkscrew/dive_loop_45_right_4_3.png | Bin 0 -> 1484 bytes .../corkscrew/dive_loop_45_right_4_4.png | Bin 0 -> 1229 bytes .../corkscrew/flat_to_steep_up_diag_1_1.png | Bin 0 -> 9698 bytes .../corkscrew/flat_to_steep_up_diag_1_2.png | Bin 0 -> 11282 bytes .../corkscrew/flat_to_steep_up_diag_1_3.png | Bin 0 -> 13301 bytes .../corkscrew/flat_to_steep_up_diag_2_1.png | Bin 0 -> 993 bytes .../corkscrew/flat_to_steep_up_diag_2_2.png | Bin 0 -> 860 bytes .../corkscrew/flat_to_steep_up_diag_2_3.png | Bin 0 -> 1099 bytes .../corkscrew/flat_to_steep_up_diag_3_1.png | Bin 0 -> 10364 bytes .../corkscrew/flat_to_steep_up_diag_3_2.png | Bin 0 -> 1395 bytes .../corkscrew/flat_to_steep_up_diag_3_3.png | Bin 0 -> 1508 bytes .../corkscrew/flat_to_steep_up_diag_4_1.png | Bin 0 -> 1176 bytes .../corkscrew/flat_to_steep_up_diag_4_2.png | Bin 0 -> 1198 bytes .../corkscrew/flat_to_steep_up_diag_4_3.png | Bin 0 -> 1219 bytes .../corkscrew/steep_to_flat_up_diag_1_1.png | Bin 0 -> 1435 bytes .../corkscrew/steep_to_flat_up_diag_1_2.png | Bin 0 -> 1301 bytes .../corkscrew/steep_to_flat_up_diag_1_3.png | Bin 0 -> 9934 bytes .../corkscrew/steep_to_flat_up_diag_2_1.png | Bin 0 -> 860 bytes .../corkscrew/steep_to_flat_up_diag_2_2.png | Bin 0 -> 860 bytes .../corkscrew/steep_to_flat_up_diag_2_3.png | Bin 0 -> 1186 bytes .../corkscrew/steep_to_flat_up_diag_3_1.png | Bin 0 -> 1494 bytes .../corkscrew/steep_to_flat_up_diag_3_2.png | Bin 0 -> 1376 bytes .../corkscrew/steep_to_flat_up_diag_3_3.png | Bin 0 -> 10150 bytes .../corkscrew/steep_to_flat_up_diag_4_1.png | Bin 0 -> 1138 bytes .../corkscrew/steep_to_flat_up_diag_4_2.png | Bin 0 -> 1258 bytes .../corkscrew/steep_to_flat_up_diag_4_3.png | Bin 0 -> 1210 bytes .../dive_loop_45_left_1_1.png | Bin 0 -> 12039 bytes .../dive_loop_45_left_1_2.png | Bin 0 -> 1445 bytes .../dive_loop_45_left_1_3.png | Bin 0 -> 1520 bytes .../dive_loop_45_left_1_4.png | Bin 0 -> 16320 bytes .../dive_loop_45_left_2_1.png | Bin 0 -> 1011 bytes .../dive_loop_45_left_2_2.png | Bin 0 -> 1201 bytes .../dive_loop_45_left_2_3.png | Bin 0 -> 1227 bytes .../dive_loop_45_left_2_4.png | Bin 0 -> 12056 bytes .../dive_loop_45_left_3_1.png | Bin 0 -> 12717 bytes .../dive_loop_45_left_3_2.png | Bin 0 -> 13853 bytes .../dive_loop_45_left_3_3.png | Bin 0 -> 12360 bytes .../dive_loop_45_left_3_4.png | Bin 0 -> 12880 bytes .../dive_loop_45_left_4_1.png | Bin 0 -> 1249 bytes .../dive_loop_45_left_4_2.png | Bin 0 -> 1482 bytes .../dive_loop_45_left_4_3.png | Bin 0 -> 1591 bytes .../dive_loop_45_left_4_4.png | Bin 0 -> 15133 bytes .../dive_loop_45_right_1_1.png | Bin 0 -> 12048 bytes .../dive_loop_45_right_1_2.png | Bin 0 -> 13045 bytes .../dive_loop_45_right_1_3.png | Bin 0 -> 11879 bytes .../dive_loop_45_right_1_4.png | Bin 0 -> 1272 bytes .../dive_loop_45_right_2_1.png | Bin 0 -> 1030 bytes .../dive_loop_45_right_2_2.png | Bin 0 -> 1201 bytes .../dive_loop_45_right_2_3.png | Bin 0 -> 1256 bytes .../dive_loop_45_right_2_4.png | Bin 0 -> 12990 bytes .../dive_loop_45_right_3_1.png | Bin 0 -> 12610 bytes .../dive_loop_45_right_3_2.png | Bin 0 -> 1534 bytes .../dive_loop_45_right_3_3.png | Bin 0 -> 1571 bytes .../dive_loop_45_right_3_4.png | Bin 0 -> 15733 bytes .../dive_loop_45_right_4_1.png | Bin 0 -> 1272 bytes .../dive_loop_45_right_4_2.png | Bin 0 -> 1468 bytes .../dive_loop_45_right_4_3.png | Bin 0 -> 1574 bytes .../dive_loop_45_right_4_4.png | Bin 0 -> 15477 bytes .../flat_to_steep_up_diag_1.png | Bin 0 -> 2614 bytes .../flat_to_steep_up_diag_1_1.png | Bin 0 -> 1313 bytes .../flat_to_steep_up_diag_1_2.png | Bin 0 -> 1447 bytes .../flat_to_steep_up_diag_1_3.png | Bin 0 -> 1549 bytes .../flat_to_steep_up_diag_2.png | Bin 0 -> 1141 bytes .../flat_to_steep_up_diag_2_1.png | Bin 0 -> 941 bytes .../flat_to_steep_up_diag_2_2.png | Bin 0 -> 860 bytes .../flat_to_steep_up_diag_2_3.png | Bin 0 -> 1114 bytes .../flat_to_steep_up_diag_3.png | Bin 0 -> 2755 bytes .../flat_to_steep_up_diag_3_1.png | Bin 0 -> 1357 bytes .../flat_to_steep_up_diag_3_2.png | Bin 0 -> 1480 bytes .../flat_to_steep_up_diag_3_3.png | Bin 0 -> 1607 bytes .../flat_to_steep_up_diag_4.png | Bin 0 -> 1966 bytes .../flat_to_steep_up_diag_4_1.png | Bin 0 -> 1197 bytes .../flat_to_steep_up_diag_4_2.png | Bin 0 -> 1261 bytes .../flat_to_steep_up_diag_4_3.png | Bin 0 -> 1333 bytes .../steep_to_flat_up_diag_1.png | Bin 0 -> 2743 bytes .../steep_to_flat_up_diag_1_1.png | Bin 0 -> 14184 bytes .../steep_to_flat_up_diag_1_2.png | Bin 0 -> 1471 bytes .../steep_to_flat_up_diag_1_3.png | Bin 0 -> 1342 bytes .../steep_to_flat_up_diag_2.png | Bin 0 -> 1112 bytes .../steep_to_flat_up_diag_2_1.png | Bin 0 -> 860 bytes .../steep_to_flat_up_diag_2_2.png | Bin 0 -> 860 bytes .../steep_to_flat_up_diag_2_3.png | Bin 0 -> 1108 bytes .../steep_to_flat_up_diag_3.png | Bin 0 -> 2854 bytes .../steep_to_flat_up_diag_3_1.png | Bin 0 -> 15161 bytes .../steep_to_flat_up_diag_3_2.png | Bin 0 -> 1500 bytes .../steep_to_flat_up_diag_3_3.png | Bin 0 -> 1359 bytes .../steep_to_flat_up_diag_4.png | Bin 0 -> 1990 bytes .../steep_to_flat_up_diag_4_1.png | Bin 0 -> 1223 bytes .../steep_to_flat_up_diag_4_2.png | Bin 0 -> 1295 bytes .../steep_to_flat_up_diag_4_3.png | Bin 0 -> 1228 bytes .../g2/track/raptor/dive_loop_45_left_1_1.png | Bin 0 -> 982 bytes .../g2/track/raptor/dive_loop_45_left_1_2.png | Bin 0 -> 1102 bytes .../g2/track/raptor/dive_loop_45_left_1_3.png | Bin 0 -> 1092 bytes .../g2/track/raptor/dive_loop_45_left_1_4.png | Bin 0 -> 983 bytes .../g2/track/raptor/dive_loop_45_left_2_1.png | Bin 0 -> 906 bytes .../g2/track/raptor/dive_loop_45_left_2_2.png | Bin 0 -> 1001 bytes .../g2/track/raptor/dive_loop_45_left_2_3.png | Bin 0 -> 974 bytes .../g2/track/raptor/dive_loop_45_left_2_4.png | Bin 0 -> 995 bytes .../g2/track/raptor/dive_loop_45_left_3_1.png | Bin 0 -> 998 bytes .../g2/track/raptor/dive_loop_45_left_3_2.png | Bin 0 -> 1057 bytes .../g2/track/raptor/dive_loop_45_left_3_3.png | Bin 0 -> 1016 bytes .../g2/track/raptor/dive_loop_45_left_3_4.png | Bin 0 -> 1000 bytes .../g2/track/raptor/dive_loop_45_left_4_1.png | Bin 0 -> 987 bytes .../g2/track/raptor/dive_loop_45_left_4_2.png | Bin 0 -> 1143 bytes .../g2/track/raptor/dive_loop_45_left_4_3.png | Bin 0 -> 1161 bytes .../g2/track/raptor/dive_loop_45_left_4_4.png | Bin 0 -> 1001 bytes .../track/raptor/dive_loop_45_right_1_1.png | Bin 0 -> 979 bytes .../track/raptor/dive_loop_45_right_1_2.png | Bin 0 -> 1033 bytes .../track/raptor/dive_loop_45_right_1_3.png | Bin 0 -> 1001 bytes .../track/raptor/dive_loop_45_right_1_4.png | Bin 0 -> 995 bytes .../track/raptor/dive_loop_45_right_2_1.png | Bin 0 -> 915 bytes .../track/raptor/dive_loop_45_right_2_2.png | Bin 0 -> 1007 bytes .../track/raptor/dive_loop_45_right_2_3.png | Bin 0 -> 1002 bytes .../track/raptor/dive_loop_45_right_2_4.png | Bin 0 -> 986 bytes .../track/raptor/dive_loop_45_right_3_1.png | Bin 0 -> 1027 bytes .../track/raptor/dive_loop_45_right_3_2.png | Bin 0 -> 1158 bytes .../track/raptor/dive_loop_45_right_3_3.png | Bin 0 -> 1144 bytes .../track/raptor/dive_loop_45_right_3_4.png | Bin 0 -> 994 bytes .../track/raptor/dive_loop_45_right_4_1.png | Bin 0 -> 993 bytes .../track/raptor/dive_loop_45_right_4_2.png | Bin 0 -> 1140 bytes .../track/raptor/dive_loop_45_right_4_3.png | Bin 0 -> 1144 bytes .../track/raptor/dive_loop_45_right_4_4.png | Bin 0 -> 1003 bytes .../raptor/flat_to_steep_up_diag_1_1.png | Bin 0 -> 1030 bytes .../raptor/flat_to_steep_up_diag_1_2.png | Bin 0 -> 1049 bytes .../raptor/flat_to_steep_up_diag_1_3.png | Bin 0 -> 1064 bytes .../raptor/flat_to_steep_up_diag_2_1.png | Bin 0 -> 870 bytes .../raptor/flat_to_steep_up_diag_2_2.png | Bin 0 -> 860 bytes .../raptor/flat_to_steep_up_diag_2_3.png | Bin 0 -> 899 bytes .../raptor/flat_to_steep_up_diag_3_1.png | Bin 0 -> 1047 bytes .../raptor/flat_to_steep_up_diag_3_2.png | Bin 0 -> 1087 bytes .../raptor/flat_to_steep_up_diag_3_3.png | Bin 0 -> 1121 bytes .../raptor/flat_to_steep_up_diag_4_1.png | Bin 0 -> 889 bytes .../raptor/flat_to_steep_up_diag_4_2.png | Bin 0 -> 869 bytes .../raptor/flat_to_steep_up_diag_4_3.png | Bin 0 -> 922 bytes .../raptor/steep_to_flat_up_diag_1_1.png | Bin 0 -> 1061 bytes .../raptor/steep_to_flat_up_diag_1_2.png | Bin 0 -> 1064 bytes .../raptor/steep_to_flat_up_diag_1_3.png | Bin 0 -> 1020 bytes .../raptor/steep_to_flat_up_diag_2_1.png | Bin 0 -> 860 bytes .../raptor/steep_to_flat_up_diag_2_2.png | Bin 0 -> 860 bytes .../raptor/steep_to_flat_up_diag_2_3.png | Bin 0 -> 894 bytes .../raptor/steep_to_flat_up_diag_3_1.png | Bin 0 -> 1125 bytes .../raptor/steep_to_flat_up_diag_3_2.png | Bin 0 -> 1088 bytes .../raptor/steep_to_flat_up_diag_3_3.png | Bin 0 -> 1028 bytes .../raptor/steep_to_flat_up_diag_4_1.png | Bin 0 -> 912 bytes .../raptor/steep_to_flat_up_diag_4_2.png | Bin 0 -> 869 bytes .../raptor/steep_to_flat_up_diag_4_3.png | Bin 0 -> 868 bytes src/openrct2-ui/ride/Construction.h | 6 +- src/openrct2-ui/windows/RideConstruction.cpp | 34 +- src/openrct2/localisation/StringIds.h | 3 + src/openrct2/network/NetworkBase.cpp | 2 +- src/openrct2/object/RideObject.cpp | 2 +- .../track/coaster/CorkscrewRollerCoaster.cpp | 1416 ++++++++++++++++ .../track/coaster/LatticeTriangleTrack.cpp | 1434 ++++++++++++++++ .../track/coaster/SingleRailRollerCoaster.cpp | 1469 +++++++++++++++++ .../track/coaster/TwisterRollerCoaster.cpp | 1388 ++++++++++++++++ src/openrct2/paint/vehicle/VehiclePaint.cpp | 356 +++- src/openrct2/park/ParkFile.h | 5 +- src/openrct2/ride/CarEntry.h | 35 +- src/openrct2/ride/Ride.cpp | 12 +- src/openrct2/ride/RideData.cpp | 3 + src/openrct2/ride/Track.h | 15 +- src/openrct2/ride/TrackData.cpp | 462 +++++- src/openrct2/ride/VehicleSubpositionData.cpp | 987 ++++++++++- .../ride/rtd/coaster/CorkscrewRollerCoaster.h | 4 +- .../ride/rtd/coaster/FlyingRollerCoaster.h | 2 +- src/openrct2/ride/rtd/coaster/GigaCoaster.h | 4 +- src/openrct2/ride/rtd/coaster/HyperTwister.h | 2 +- src/openrct2/ride/rtd/coaster/Hypercoaster.h | 2 +- .../rtd/coaster/LSMLaunchedRollerCoaster.h | 2 +- .../ride/rtd/coaster/LayDownRollerCoaster.h | 2 +- .../rtd/coaster/SingleRailRollerCoaster.h | 4 +- .../ride/rtd/coaster/TwisterRollerCoaster.h | 2 +- .../ride/rtd/coaster/VerticalDropCoaster.h | 4 +- src/openrct2/sprites.h | 17 +- 265 files changed, 8963 insertions(+), 66 deletions(-) create mode 100644 resources/g2/track/bm/dive_loop_45_left_1_1.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_1_2.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_1_3.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_1_4.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_2_1.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_2_2.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_2_3.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_2_4.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_3_1.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_3_2.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_3_3.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_3_4.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_4_1.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_4_2.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_4_3.png create mode 100644 resources/g2/track/bm/dive_loop_45_left_4_4.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_1_1.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_1_2.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_1_3.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_1_4.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_2_1.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_2_2.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_2_3.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_2_4.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_3_1.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_3_2.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_3_3.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_3_4.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_4_1.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_4_2.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_4_3.png create mode 100644 resources/g2/track/bm/dive_loop_45_right_4_4.png create mode 100644 resources/g2/track/bm/flat_to_steep_up_diag_1_1.png create mode 100644 resources/g2/track/bm/flat_to_steep_up_diag_1_2.png create mode 100644 resources/g2/track/bm/flat_to_steep_up_diag_1_3.png create mode 100644 resources/g2/track/bm/flat_to_steep_up_diag_2_1.png create mode 100644 resources/g2/track/bm/flat_to_steep_up_diag_2_2.png create mode 100644 resources/g2/track/bm/flat_to_steep_up_diag_2_3.png create mode 100644 resources/g2/track/bm/flat_to_steep_up_diag_3_1.png create mode 100644 resources/g2/track/bm/flat_to_steep_up_diag_3_2.png create mode 100644 resources/g2/track/bm/flat_to_steep_up_diag_3_3.png create mode 100644 resources/g2/track/bm/flat_to_steep_up_diag_4_1.png create mode 100644 resources/g2/track/bm/flat_to_steep_up_diag_4_2.png create mode 100644 resources/g2/track/bm/flat_to_steep_up_diag_4_3.png create mode 100644 resources/g2/track/bm/steep_to_flat_up_diag_1_1.png create mode 100644 resources/g2/track/bm/steep_to_flat_up_diag_1_2.png create mode 100644 resources/g2/track/bm/steep_to_flat_up_diag_1_3.png create mode 100644 resources/g2/track/bm/steep_to_flat_up_diag_2_1.png create mode 100644 resources/g2/track/bm/steep_to_flat_up_diag_2_2.png create mode 100644 resources/g2/track/bm/steep_to_flat_up_diag_2_3.png create mode 100644 resources/g2/track/bm/steep_to_flat_up_diag_3_1.png create mode 100644 resources/g2/track/bm/steep_to_flat_up_diag_3_2.png create mode 100644 resources/g2/track/bm/steep_to_flat_up_diag_3_3.png create mode 100644 resources/g2/track/bm/steep_to_flat_up_diag_4_1.png create mode 100644 resources/g2/track/bm/steep_to_flat_up_diag_4_2.png create mode 100644 resources/g2/track/bm/steep_to_flat_up_diag_4_3.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_1_1.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_1_2.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_1_3.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_1_4.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_2_1.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_2_2.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_2_3.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_2_4.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_3_1.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_3_2.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_3_3.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_3_4.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_4_1.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_4_2.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_4_3.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_left_4_4.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_1_1.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_1_2.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_1_3.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_1_4.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_2_1.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_2_2.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_2_3.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_2_4.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_3_1.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_3_2.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_3_3.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_3_4.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_4_1.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_4_2.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_4_3.png create mode 100644 resources/g2/track/corkscrew/dive_loop_45_right_4_4.png create mode 100644 resources/g2/track/corkscrew/flat_to_steep_up_diag_1_1.png create mode 100644 resources/g2/track/corkscrew/flat_to_steep_up_diag_1_2.png create mode 100644 resources/g2/track/corkscrew/flat_to_steep_up_diag_1_3.png create mode 100644 resources/g2/track/corkscrew/flat_to_steep_up_diag_2_1.png create mode 100644 resources/g2/track/corkscrew/flat_to_steep_up_diag_2_2.png create mode 100644 resources/g2/track/corkscrew/flat_to_steep_up_diag_2_3.png create mode 100644 resources/g2/track/corkscrew/flat_to_steep_up_diag_3_1.png create mode 100644 resources/g2/track/corkscrew/flat_to_steep_up_diag_3_2.png create mode 100644 resources/g2/track/corkscrew/flat_to_steep_up_diag_3_3.png create mode 100644 resources/g2/track/corkscrew/flat_to_steep_up_diag_4_1.png create mode 100644 resources/g2/track/corkscrew/flat_to_steep_up_diag_4_2.png create mode 100644 resources/g2/track/corkscrew/flat_to_steep_up_diag_4_3.png create mode 100644 resources/g2/track/corkscrew/steep_to_flat_up_diag_1_1.png create mode 100644 resources/g2/track/corkscrew/steep_to_flat_up_diag_1_2.png create mode 100644 resources/g2/track/corkscrew/steep_to_flat_up_diag_1_3.png create mode 100644 resources/g2/track/corkscrew/steep_to_flat_up_diag_2_1.png create mode 100644 resources/g2/track/corkscrew/steep_to_flat_up_diag_2_2.png create mode 100644 resources/g2/track/corkscrew/steep_to_flat_up_diag_2_3.png create mode 100644 resources/g2/track/corkscrew/steep_to_flat_up_diag_3_1.png create mode 100644 resources/g2/track/corkscrew/steep_to_flat_up_diag_3_2.png create mode 100644 resources/g2/track/corkscrew/steep_to_flat_up_diag_3_3.png create mode 100644 resources/g2/track/corkscrew/steep_to_flat_up_diag_4_1.png create mode 100644 resources/g2/track/corkscrew/steep_to_flat_up_diag_4_2.png create mode 100644 resources/g2/track/corkscrew/steep_to_flat_up_diag_4_3.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_1_1.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_1_2.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_1_3.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_1_4.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_2_1.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_2_2.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_2_3.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_2_4.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_3_1.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_3_2.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_3_3.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_3_4.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_4_1.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_4_2.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_4_3.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_left_4_4.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_1_1.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_1_2.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_1_3.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_1_4.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_2_1.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_2_2.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_2_3.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_2_4.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_3_1.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_3_2.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_3_3.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_3_4.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_4_1.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_4_2.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_4_3.png create mode 100644 resources/g2/track/lattice_triangle/dive_loop_45_right_4_4.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_1.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_1_1.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_1_2.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_1_3.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_2.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_2_1.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_2_2.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_2_3.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_3.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_3_1.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_3_2.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_3_3.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_4.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_4_1.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_4_2.png create mode 100644 resources/g2/track/lattice_triangle/flat_to_steep_up_diag_4_3.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_1.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_1_1.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_1_2.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_1_3.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_2.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_2_1.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_2_2.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_2_3.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_3.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_3_1.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_3_2.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_3_3.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_4.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_4_1.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_4_2.png create mode 100644 resources/g2/track/lattice_triangle/steep_to_flat_up_diag_4_3.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_1_1.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_1_2.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_1_3.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_1_4.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_2_1.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_2_2.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_2_3.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_2_4.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_3_1.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_3_2.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_3_3.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_3_4.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_4_1.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_4_2.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_4_3.png create mode 100644 resources/g2/track/raptor/dive_loop_45_left_4_4.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_1_1.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_1_2.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_1_3.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_1_4.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_2_1.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_2_2.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_2_3.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_2_4.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_3_1.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_3_2.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_3_3.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_3_4.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_4_1.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_4_2.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_4_3.png create mode 100644 resources/g2/track/raptor/dive_loop_45_right_4_4.png create mode 100644 resources/g2/track/raptor/flat_to_steep_up_diag_1_1.png create mode 100644 resources/g2/track/raptor/flat_to_steep_up_diag_1_2.png create mode 100644 resources/g2/track/raptor/flat_to_steep_up_diag_1_3.png create mode 100644 resources/g2/track/raptor/flat_to_steep_up_diag_2_1.png create mode 100644 resources/g2/track/raptor/flat_to_steep_up_diag_2_2.png create mode 100644 resources/g2/track/raptor/flat_to_steep_up_diag_2_3.png create mode 100644 resources/g2/track/raptor/flat_to_steep_up_diag_3_1.png create mode 100644 resources/g2/track/raptor/flat_to_steep_up_diag_3_2.png create mode 100644 resources/g2/track/raptor/flat_to_steep_up_diag_3_3.png create mode 100644 resources/g2/track/raptor/flat_to_steep_up_diag_4_1.png create mode 100644 resources/g2/track/raptor/flat_to_steep_up_diag_4_2.png create mode 100644 resources/g2/track/raptor/flat_to_steep_up_diag_4_3.png create mode 100644 resources/g2/track/raptor/steep_to_flat_up_diag_1_1.png create mode 100644 resources/g2/track/raptor/steep_to_flat_up_diag_1_2.png create mode 100644 resources/g2/track/raptor/steep_to_flat_up_diag_1_3.png create mode 100644 resources/g2/track/raptor/steep_to_flat_up_diag_2_1.png create mode 100644 resources/g2/track/raptor/steep_to_flat_up_diag_2_2.png create mode 100644 resources/g2/track/raptor/steep_to_flat_up_diag_2_3.png create mode 100644 resources/g2/track/raptor/steep_to_flat_up_diag_3_1.png create mode 100644 resources/g2/track/raptor/steep_to_flat_up_diag_3_2.png create mode 100644 resources/g2/track/raptor/steep_to_flat_up_diag_3_3.png create mode 100644 resources/g2/track/raptor/steep_to_flat_up_diag_4_1.png create mode 100644 resources/g2/track/raptor/steep_to_flat_up_diag_4_2.png create mode 100644 resources/g2/track/raptor/steep_to_flat_up_diag_4_3.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 014a32925c..1a20eed63d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,9 +69,9 @@ set(TITLE_SEQUENCE_VERSION "0.4.14") set(TITLE_SEQUENCE_URL "https://github.com/OpenRCT2/title-sequences/releases/download/v${TITLE_SEQUENCE_VERSION}/title-sequences.zip") set(TITLE_SEQUENCE_SHA1 "6c04781b959b468e1f65ec2d2f21f5aaa5e5724d") -set(OBJECTS_VERSION "1.5.0") +set(OBJECTS_VERSION "1.5.1") set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v${OBJECTS_VERSION}/objects.zip") -set(OBJECTS_SHA1 "90c26f416ddaeb0c35490b7af89f4c6f9d6351f3") +set(OBJECTS_SHA1 "e922b9fd779e7752176f1d0d8766c2ee6ad1e41b") set(OPENSFX_VERSION "1.0.5") set(OPENSFX_URL "https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v${OPENSFX_VERSION}/opensound.zip") diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index ceadec4d46..5ad819fc9c 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3790,3 +3790,5 @@ STR_6723 :At least one entertainer peep animations object must be selected STR_6724 :Scenario Texts STR_6725 :X: STR_6726 :Y: +STR_6727 :Dive Loop (left) +STR_6728 :Dive Loop (right) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 5a9c99692f..bdf92feac8 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,6 +1,7 @@ 0.4.19 (in development) ------------------------------------------------------------------------ - Feature: [#23328] Introducing peep animation objects, enabling custom entertainer costumes. +- Feature: [#23569] Add large diagonal flat to steep and dive loop track pieces. - Improved: [#23328] The costume list in the staff window is now ordered alphabetically. - Improved: [#23540] The file browser now optionally shows a file size column. - Change: [#23328] All RCT2 entertainer costumes are now available in legacy parks. diff --git a/openrct2.proj b/openrct2.proj index a8e1d0ac7f..179c9a9f12 100644 --- a/openrct2.proj +++ b/openrct2.proj @@ -45,8 +45,8 @@ 9984c1e317dcfb3aaf8e17f1db2ebb0f771e2373 https://github.com/OpenRCT2/title-sequences/releases/download/v0.4.14/title-sequences.zip 6c04781b959b468e1f65ec2d2f21f5aaa5e5724d - https://github.com/OpenRCT2/objects/releases/download/v1.5.0/objects.zip - 90c26f416ddaeb0c35490b7af89f4c6f9d6351f3 + https://github.com/OpenRCT2/objects/releases/download/v1.5.1/objects.zip + e922b9fd779e7752176f1d0d8766c2ee6ad1e41b https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v1.0.5/opensound.zip b1b1f1b241d2cbff63a1889c4dc5a09bdf769bfb https://github.com/OpenRCT2/OpenMusic/releases/download/v1.6/openmusic.zip diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 4137a78b68..b9842c0b7d 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -6597,6 +6597,342 @@ "y": -22, "palette": "keep" }, + { + "path": "track/lattice_triangle/flat_to_steep_up_diag_1_1.png", + "x": -32, + "y": -6, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/flat_to_steep_up_diag_1_2.png", + "x": -32, + "y": -25, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/flat_to_steep_up_diag_1_3.png", + "x": -32, + "y": -44, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/flat_to_steep_up_diag_2_1.png", + "x": -8, + "y": -10, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/flat_to_steep_up_diag_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/flat_to_steep_up_diag_2_3.png", + "x": -8, + "y": -26, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/flat_to_steep_up_diag_3_1.png", + "x": -32, + "y": -6, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/flat_to_steep_up_diag_3_2.png", + "x": -32, + "y": -25, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/flat_to_steep_up_diag_3_3.png", + "x": -32, + "y": -44, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/flat_to_steep_up_diag_4_1.png", + "x": -8, + "y": -16, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/flat_to_steep_up_diag_4_2.png", + "x": -8, + "y": -48, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/flat_to_steep_up_diag_4_3.png", + "x": -8, + "y": -89, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/steep_to_flat_up_diag_1_1.png", + "x": -32, + "y": -47, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/steep_to_flat_up_diag_1_2.png", + "x": -32, + "y": -20, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/steep_to_flat_up_diag_1_3.png", + "x": -32, + "y": -5, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/steep_to_flat_up_diag_2_1.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/steep_to_flat_up_diag_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/steep_to_flat_up_diag_2_3.png", + "x": -8, + "y": -14, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/steep_to_flat_up_diag_3_1.png", + "x": -32, + "y": -47, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/steep_to_flat_up_diag_3_2.png", + "x": -32, + "y": -20, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/steep_to_flat_up_diag_3_3.png", + "x": -32, + "y": -5, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/steep_to_flat_up_diag_4_1.png", + "x": -8, + "y": -32, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/steep_to_flat_up_diag_4_2.png", + "x": -8, + "y": -72, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/steep_to_flat_up_diag_4_3.png", + "x": -8, + "y": -42, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_1_1.png", + "x": -32, + "y": -31, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_1_2.png", + "x": -32, + "y": -41, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_1_3.png", + "x": -31, + "y": -41, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_1_4.png", + "x": -18, + "y": -23, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_2_1.png", + "x": -8, + "y": 12, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_2_2.png", + "x": -7, + "y": -27, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_2_3.png", + "x": -25, + "y": -25, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_2_4.png", + "x": -28, + "y": -13, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_3_1.png", + "x": 0, + "y": -33, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_3_2.png", + "x": -14, + "y": -27, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_3_3.png", + "x": -24, + "y": -21, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_3_4.png", + "x": -22, + "y": -14, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_4_1.png", + "x": -11, + "y": -32, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_4_2.png", + "x": -45, + "y": -83, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_4_3.png", + "x": -24, + "y": -40, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_left_4_4.png", + "x": -22, + "y": -23, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_1_1.png", + "x": -32, + "y": -33, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_1_2.png", + "x": -32, + "y": -27, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_1_3.png", + "x": -28, + "y": -21, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_1_4.png", + "x": -32, + "y": -14, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_2_1.png", + "x": -9, + "y": 12, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_2_2.png", + "x": -20, + "y": -27, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_2_3.png", + "x": -11, + "y": -25, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_2_4.png", + "x": -22, + "y": -13, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_3_1.png", + "x": 0, + "y": -31, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_3_2.png", + "x": -12, + "y": -41, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_3_3.png", + "x": -24, + "y": -41, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_3_4.png", + "x": -22, + "y": -23, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_4_1.png", + "x": -8, + "y": -32, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_4_2.png", + "x": -4, + "y": -83, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_4_3.png", + "x": -30, + "y": -40, + "palette": "keep" + }, + { + "path": "track/lattice_triangle/dive_loop_45_right_4_4.png", + "x": -23, + "y": -23, + "palette": "keep" + }, { "path": "track/mini/booster_1.png", "x": -22, @@ -8741,6 +9077,342 @@ "y": -29, "palette": "keep" }, + { + "path": "track/bm/flat_to_steep_up_diag_1_1.png", + "x": -32, + "y": -7, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_steep_up_diag_1_2.png", + "x": -32, + "y": -27, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_steep_up_diag_1_3.png", + "x": -32, + "y": -46, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_steep_up_diag_2_1.png", + "x": -13, + "y": -9, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_steep_up_diag_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_steep_up_diag_2_3.png", + "x": -13, + "y": -24, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_steep_up_diag_3_1.png", + "x": -32, + "y": -7, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_steep_up_diag_3_2.png", + "x": -32, + "y": -26, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_steep_up_diag_3_3.png", + "x": -32, + "y": -45, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_steep_up_diag_4_1.png", + "x": -13, + "y": -16, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_steep_up_diag_4_2.png", + "x": -13, + "y": -48, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_steep_up_diag_4_3.png", + "x": -13, + "y": -88, + "palette": "keep" + }, + { + "path": "track/bm/steep_to_flat_up_diag_1_1.png", + "x": -32, + "y": -49, + "palette": "keep" + }, + { + "path": "track/bm/steep_to_flat_up_diag_1_2.png", + "x": -32, + "y": -21, + "palette": "keep" + }, + { + "path": "track/bm/steep_to_flat_up_diag_1_3.png", + "x": -32, + "y": -7, + "palette": "keep" + }, + { + "path": "track/bm/steep_to_flat_up_diag_2_1.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/steep_to_flat_up_diag_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/steep_to_flat_up_diag_2_3.png", + "x": -13, + "y": -13, + "palette": "keep" + }, + { + "path": "track/bm/steep_to_flat_up_diag_3_1.png", + "x": -32, + "y": -48, + "palette": "keep" + }, + { + "path": "track/bm/steep_to_flat_up_diag_3_2.png", + "x": -32, + "y": -21, + "palette": "keep" + }, + { + "path": "track/bm/steep_to_flat_up_diag_3_3.png", + "x": -32, + "y": -7, + "palette": "keep" + }, + { + "path": "track/bm/steep_to_flat_up_diag_4_1.png", + "x": -13, + "y": -32, + "palette": "keep" + }, + { + "path": "track/bm/steep_to_flat_up_diag_4_2.png", + "x": -13, + "y": -72, + "palette": "keep" + }, + { + "path": "track/bm/steep_to_flat_up_diag_4_3.png", + "x": -13, + "y": -41, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_1_1.png", + "x": -32, + "y": -32, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_1_2.png", + "x": -32, + "y": -47, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_1_3.png", + "x": -32, + "y": -44, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_1_4.png", + "x": -20, + "y": -22, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_2_1.png", + "x": -13, + "y": 12, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_2_2.png", + "x": -12, + "y": -27, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_2_3.png", + "x": -26, + "y": -23, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_2_4.png", + "x": -27, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_3_1.png", + "x": 0, + "y": -36, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_3_2.png", + "x": -19, + "y": -29, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_3_3.png", + "x": -37, + "y": -20, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_3_4.png", + "x": -26, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_4_1.png", + "x": -16, + "y": -32, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_4_2.png", + "x": -60, + "y": -96, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_4_3.png", + "x": -28, + "y": -40, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_left_4_4.png", + "x": -25, + "y": -22, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_1_1.png", + "x": -32, + "y": -37, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_1_2.png", + "x": -32, + "y": -30, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_1_3.png", + "x": -30, + "y": -21, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_1_4.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_2_1.png", + "x": -15, + "y": 12, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_2_2.png", + "x": -25, + "y": -27, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_2_3.png", + "x": -13, + "y": -23, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_2_4.png", + "x": -26, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_3_1.png", + "x": 0, + "y": -31, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_3_2.png", + "x": -14, + "y": -45, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_3_3.png", + "x": -28, + "y": -43, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_3_4.png", + "x": -25, + "y": -22, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_4_1.png", + "x": -13, + "y": -32, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_4_2.png", + "x": -9, + "y": -89, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_4_3.png", + "x": -31, + "y": -40, + "palette": "keep" + }, + { + "path": "track/bm/dive_loop_45_right_4_4.png", + "x": -24, + "y": -22, + "palette": "keep" + }, { "path": "track/railway/quarter_turn_3_tiles_sw_se_part_3.png", "x": -8, @@ -19212,6 +19884,342 @@ "y": -25, "palette": "keep" }, + { + "path": "track/corkscrew/flat_to_steep_up_diag_1_1.png", + "x": -32, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_steep_up_diag_1_2.png", + "x": -32, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_steep_up_diag_1_3.png", + "x": -32, + "y": -44, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_steep_up_diag_2_1.png", + "x": -14, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_steep_up_diag_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_steep_up_diag_2_3.png", + "x": -14, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_steep_up_diag_3_1.png", + "x": -32, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_steep_up_diag_3_2.png", + "x": -32, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_steep_up_diag_3_3.png", + "x": -32, + "y": -44, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_steep_up_diag_4_1.png", + "x": -14, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_steep_up_diag_4_2.png", + "x": -14, + "y": -48, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_steep_up_diag_4_3.png", + "x": -14, + "y": -88, + "palette": "keep" + }, + { + "path": "track/corkscrew/steep_to_flat_up_diag_1_1.png", + "x": -32, + "y": -48, + "palette": "keep" + }, + { + "path": "track/corkscrew/steep_to_flat_up_diag_1_2.png", + "x": -32, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/steep_to_flat_up_diag_1_3.png", + "x": -32, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/steep_to_flat_up_diag_2_1.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/steep_to_flat_up_diag_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/steep_to_flat_up_diag_2_3.png", + "x": -14, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/steep_to_flat_up_diag_3_1.png", + "x": -32, + "y": -48, + "palette": "keep" + }, + { + "path": "track/corkscrew/steep_to_flat_up_diag_3_2.png", + "x": -32, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/steep_to_flat_up_diag_3_3.png", + "x": -32, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/steep_to_flat_up_diag_4_1.png", + "x": -14, + "y": -32, + "palette": "keep" + }, + { + "path": "track/corkscrew/steep_to_flat_up_diag_4_2.png", + "x": -14, + "y": -72, + "palette": "keep" + }, + { + "path": "track/corkscrew/steep_to_flat_up_diag_4_3.png", + "x": -14, + "y": -40, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_1_1.png", + "x": -32, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_1_2.png", + "x": -32, + "y": -46, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_1_3.png", + "x": -32, + "y": -44, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_1_4.png", + "x": -21, + "y": -17, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_2_1.png", + "x": -14, + "y": 12, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_2_2.png", + "x": -13, + "y": -27, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_2_3.png", + "x": -27, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_2_4.png", + "x": -26, + "y": -10, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_3_1.png", + "x": 0, + "y": -35, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_3_2.png", + "x": -19, + "y": -31, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_3_3.png", + "x": -40, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_3_4.png", + "x": -24, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_4_1.png", + "x": -17, + "y": -32, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_4_2.png", + "x": -55, + "y": -90, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_4_3.png", + "x": -28, + "y": -40, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_left_4_4.png", + "x": -24, + "y": -17, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_1_1.png", + "x": -32, + "y": -35, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_1_2.png", + "x": -32, + "y": -31, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_1_3.png", + "x": -31, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_1_4.png", + "x": -32, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_2_1.png", + "x": -15, + "y": 12, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_2_2.png", + "x": -24, + "y": -27, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_2_3.png", + "x": -13, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_2_4.png", + "x": -24, + "y": -10, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_3_1.png", + "x": 0, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_3_2.png", + "x": -14, + "y": -46, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_3_3.png", + "x": -28, + "y": -44, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_3_4.png", + "x": -24, + "y": -17, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_4_1.png", + "x": -14, + "y": -32, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_4_2.png", + "x": -10, + "y": -82, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_4_3.png", + "x": -27, + "y": -40, + "palette": "keep" + }, + { + "path": "track/corkscrew/dive_loop_45_right_4_4.png", + "x": -21, + "y": -17, + "palette": "keep" + }, { "path": "track/lim/barrel_roll_left_1_1.png", "x": -22, @@ -35479,6 +36487,342 @@ "y": -15, "palette": "keep" }, + { + "path": "track/raptor/flat_to_steep_up_diag_1_1.png", + "x": -32, + "y": 0, + "palette": "keep" + }, + { + "path": "track/raptor/flat_to_steep_up_diag_1_2.png", + "x": -32, + "y": -20, + "palette": "keep" + }, + { + "path": "track/raptor/flat_to_steep_up_diag_1_3.png", + "x": -32, + "y": -39, + "palette": "keep" + }, + { + "path": "track/raptor/flat_to_steep_up_diag_2_1.png", + "x": -3, + "y": -6, + "palette": "keep" + }, + { + "path": "track/raptor/flat_to_steep_up_diag_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/raptor/flat_to_steep_up_diag_2_3.png", + "x": -3, + "y": -22, + "palette": "keep" + }, + { + "path": "track/raptor/flat_to_steep_up_diag_3_1.png", + "x": -32, + "y": 0, + "palette": "keep" + }, + { + "path": "track/raptor/flat_to_steep_up_diag_3_2.png", + "x": -32, + "y": -20, + "palette": "keep" + }, + { + "path": "track/raptor/flat_to_steep_up_diag_3_3.png", + "x": -32, + "y": -39, + "palette": "keep" + }, + { + "path": "track/raptor/flat_to_steep_up_diag_4_1.png", + "x": -3, + "y": -16, + "palette": "keep" + }, + { + "path": "track/raptor/flat_to_steep_up_diag_4_2.png", + "x": -3, + "y": -48, + "palette": "keep" + }, + { + "path": "track/raptor/flat_to_steep_up_diag_4_3.png", + "x": -3, + "y": -85, + "palette": "keep" + }, + { + "path": "track/raptor/steep_to_flat_up_diag_1_1.png", + "x": -32, + "y": -42, + "palette": "keep" + }, + { + "path": "track/raptor/steep_to_flat_up_diag_1_2.png", + "x": -32, + "y": -14, + "palette": "keep" + }, + { + "path": "track/raptor/steep_to_flat_up_diag_1_3.png", + "x": -32, + "y": 1, + "palette": "keep" + }, + { + "path": "track/raptor/steep_to_flat_up_diag_2_1.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/raptor/steep_to_flat_up_diag_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/raptor/steep_to_flat_up_diag_2_3.png", + "x": -3, + "y": -10, + "palette": "keep" + }, + { + "path": "track/raptor/steep_to_flat_up_diag_3_1.png", + "x": -32, + "y": -42, + "palette": "keep" + }, + { + "path": "track/raptor/steep_to_flat_up_diag_3_2.png", + "x": -32, + "y": -14, + "palette": "keep" + }, + { + "path": "track/raptor/steep_to_flat_up_diag_3_3.png", + "x": -32, + "y": 1, + "palette": "keep" + }, + { + "path": "track/raptor/steep_to_flat_up_diag_4_1.png", + "x": -3, + "y": -32, + "palette": "keep" + }, + { + "path": "track/raptor/steep_to_flat_up_diag_4_2.png", + "x": -3, + "y": -72, + "palette": "keep" + }, + { + "path": "track/raptor/steep_to_flat_up_diag_4_3.png", + "x": -3, + "y": -37, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_1_1.png", + "x": -32, + "y": -26, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_1_2.png", + "x": -32, + "y": -37, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_1_3.png", + "x": -27, + "y": -38, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_1_4.png", + "x": -14, + "y": -13, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_2_1.png", + "x": -3, + "y": 12, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_2_2.png", + "x": -1, + "y": -24, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_2_3.png", + "x": -20, + "y": -16, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_2_4.png", + "x": -23, + "y": -4, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_3_1.png", + "x": 0, + "y": -26, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_3_2.png", + "x": -12, + "y": -23, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_3_3.png", + "x": -16, + "y": -12, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_3_4.png", + "x": -18, + "y": -3, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_4_1.png", + "x": -7, + "y": -32, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_4_2.png", + "x": -24, + "y": -46, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_4_3.png", + "x": -24, + "y": -38, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_left_4_4.png", + "x": -18, + "y": -13, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_1_1.png", + "x": -32, + "y": -26, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_1_2.png", + "x": -32, + "y": -23, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_1_3.png", + "x": -24, + "y": -12, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_1_4.png", + "x": -32, + "y": -3, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_2_1.png", + "x": -5, + "y": 12, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_2_2.png", + "x": -19, + "y": -24, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_2_3.png", + "x": -11, + "y": -16, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_2_4.png", + "x": -18, + "y": -4, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_3_1.png", + "x": 0, + "y": -26, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_3_2.png", + "x": -11, + "y": -37, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_3_3.png", + "x": -22, + "y": -38, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_3_4.png", + "x": -18, + "y": -13, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_4_1.png", + "x": -3, + "y": -32, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_4_2.png", + "x": -1, + "y": -80, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_4_3.png", + "x": -23, + "y": -38, + "palette": "keep" + }, + { + "path": "track/raptor/dive_loop_45_right_4_4.png", + "x": -14, + "y": -13, + "palette": "keep" + }, { "path": "track/raptor/flat_lift_1.png", "x": -18, diff --git a/resources/g2/track/bm/dive_loop_45_left_1_1.png b/resources/g2/track/bm/dive_loop_45_left_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..79f3cbe28c74a2fe1c16ef22a20754e70b8ac291 GIT binary patch literal 1199 zcmYLIacmQH6#i`;yNy{3Ht`}QyJ;g8FL3C^9B_maZcvs(4!LQGMY?ziMGHCLkfN0p z=#~zvIkiaDn$%cA)iWG%2^}fs(5eGVI7|)I97#8tt(yH&q%jR_$Vk$y&XZ2j*gDb&Q8?nbdn^&vWy^bqUe=nDH4e!5-Cl~=JQ3$aT$k5t z4+OAah=|7MM3T>FzML)>j99snW^u$rcS#%?_F#(WO3CDCgw+$Cf+m^c(W;ql)befz z@ZliH07XDD5~9a!rHs8^aKI`7>pnQEK$v#|zyshz5Xoi>I~EOZUGQa1KSntSx04odPNcjND@FNe%9qMY zStFb`<3=@8Zs;}!*ad+40Tu!-1))-?TXT7JMlw9HvYf6dc{s}Bc9C)f-FVDHXGAt9 z3r0jNCFF`4sp*M^p~6buW~W@Zhot-r8x(|?C?R=8OQ+O0YC;o0YC*{9DoV}U=utGLo!s; z&@AyTAdw)>fUFysJb(g#5(;A^O!F`sfQ2YD)8M}G6yR9k;gNudhJ$!qac9zEE*CKj zwOTb`Q_JB8WT=Z#P(F?MvM$M_m6}(r2Xl=?VK!TarJBnQC=78EHZOw(1Ty63lyD#& z59idlkyoo`9@fhg$H6RsCV;T%MYJjR0FFo~S*cLT!~@8M0_*h(fq)naNhA@Why+8b zEU9xuk;khZC-h-3?1D)WW*KO3&Euz*b^UYy2M%uAB7o6U+wE%*T3@p;gc_Z zIo#9H>xW+a=kHJMuFbUESXQ_-cxdCm#*3F4#LC52@QKckoIUOp8L6f37=b>s>Dav= z`rf)b@x&K*p6+?WzFb?gB)LMrJ$B;gX`p{z?VG=O`<<-|p89UXxfM#=kI%I}yLQ2d zzS}x9y)M?XgIKz2>h9$FYsGILOYE6je*NA$$JLMB$G@syIdyvbyOZVzhq@On)b@;_ zy|-T3%bj@{E*a?`n|nPn@bLTEkt5UJB(CbM7pjksuDWTxxoY_Qnff)lYwzGE`G|jK z_eJZz+yCywR$n@Fn;ZG8{N9nH2Oiotb@9*Hb0ap(JCnmRH>}s6+;qzL<=5h;69*Rl z^wQeD9<6aFXNOKK8F`K0jqX@EWH~?e;f1AR<|9)Rzn{I_w&w5)2M-KRzCEn%u=Ym{ zz1?VZFJ7B!k1parm3 E4;_>gmjD0& literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_left_1_2.png b/resources/g2/track/bm/dive_loop_45_left_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8859b18970504e0099c23148a05237cebb18ce21 GIT binary patch literal 1348 zcmX9-Z)_8F82*io-TnYgsH{Ra3O3pg=cwcu6{{RuH@c<3jU7;-O3{lJTJVw`tgsUr zsG}@(Tw-;_RBW~`RC>4)$2_4(Aq@ykzR&x9d7lr@ z^L93`)6OniPzC^)-PBm$lIQAtZ7M0u_nnKg0RRd?^O_9}`L&>+V8)CYg@uJhMMX1b z&MYo2Mi8W=q@=X8R3ewlF-)n^;3TP|C!p_GwT=uP&!`5}RJeQ3@}E4cIkdw>}!AlS7V7(l?on zXr;i20xJ$U67kbW*eOc*#kr^yW|S~zgwHq#BXR%;0E`Gii$pf5lv5~tYV`m?44F&` zo9&U;3&UY4CYIw8B_UHA676OYm*paGfI!8RN@~@j zPQBVsX+jJcvr`E-ljiN&uzNDb!*oO>Rw+AB27q2Mp08r<47BP8EYuZjpTxvXNgHzj*3Joi9{=tlc4; zMFw1EAu-mZ<7^h6%NF8Yu?U|@Mqn_rj5vdjYAP^`z4(kNX9fXjEe` zkQNKYvNWc&tCVgW<26`VryL>Bj9w0nGH6pk4+aGs#&r4ctE$VNJpX~+E$c|I>cQy8 z`T1#6eeH(E&Ovvy^~$1>)%&2<0>8`l_Wm~S*M^bOBgapAmbAA&AP>F^_Mg3$^`fUP z9_W~!gPsu`Xm~7XYZ~X~Pk(l=^}S~Khd=P0S1PM*tH$Z8quotw@!r|AdFxu^8uOOU zKep^LZyyib569P_Q)JhmdCGI{_W9oay3Rd&7RHBrn2x^wCFY$iY(GbKF@LWoifi`x z9D8rOYO8+wXt-1w-|t*rb8Jo@pIarp<(j*1qi){)y3uJv6*4&b z3UqJVBrG{%-*V@blkd!H{5(?gi>#<6-Mpx)Lby74hLZ-_P?>fvjSJ>(vx zR-gLUvh?))Pxd~Yu#jUnma^B*R>YBWnJt>h3X34u;S^8obe{NS(XAfIIyr1D!YvWMUU;sI;mP* zk?J~j#tElZtWdFJU98)HDn%M-M#T<_4A)`RiWQ1svo75aWrnXcCZG3S-aqe?Pd=ab zcJ(UFz4ttL4*=las^t}HvJ=Y|nJ38h+T|->06+k$SFEkft~oh5)22-m2n5roPoFVk zMs9AdP$-^^#=RXpC8{ zw_Pq649ZZ60+*^tIc8957({19X%1tZgw3n%2vF{b!5=ru)iRYvfl-K-R_hspv6FU} z!R2TCQEMpP5lwj#lR+^KBovSuf!qR=oKWqOYJ5t45NDz~M}l>yxe)9n5eco9nKg(* zhk0lsz*12g9pl-g*Om_QlTj~BhQt!J649Y*BTkqp%0bgkv)Six1YNGE-=7#5NT<^f z$QYpHg{VhN1Y}eMF(wFmQtwWg18Hs`<4aA&CZPxsi`7!8My{X`6^&u6mb4qP$1FZa zN7&BeJe)S^J=zl-3Yt1SOl;0fM z0>HF$RTa;zUH|6M_w`M;ADUVD0ld6D^UeBx#HyP;^wz_X*=O!<>;2&n`*3kZ4L!yg z{`!f$8i3{6SN1JUuX!ccw!QSmtl|ZdJ zf8_mU_YdN-1rx6?ll`_Z_3GnKe*F5UwSof6M&pZh-?jGLIXNfECyQIZ*1WV;G#>As zZ0w$kUAQ^Wo0puWygg#y;eFw;!Et2IMNj3d+M>OM!e?^MfARNwxi)&<`Qr<>Y+!%M z?`f?qo)f8)oaww))pxGB^yX08`r~trJ4<&s4)*oePdPi!OJ-gAvHNiOh4#Z8;az!` z)N{_$yFXd+V9%nqJLTQPJA4tjmHo%l@Z*}ZwX0W!f88|P?#m2BM_Q8fsl}!{f@@PZ zn#P-#JhszFbamYtdb2l76eNz-7N%F%v^5+&%CBykxxeM1k^;w(k;P@LjYW9%&}a)? zG_vo*cW3h~Z$OU}%$f41{LF;~&uIQr)s^zXL2 z2Nsk#=Q*loKJZBAYkbMcnuf){zB-}WaJucITZO)Nn!jxs=)K?^F05Y|-W7@ECf|Km z_w+@3y>P@K~?3diqDt5*zzxJ9K=`v literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_left_1_4.png b/resources/g2/track/bm/dive_loop_45_left_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..7e3a09d5636c3d78a20fed13fd567d1e3f56b670 GIT binary patch literal 13047 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 B`DFkA literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_left_2_1.png b/resources/g2/track/bm/dive_loop_45_left_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..54df52b8124e791bf45fe208d5ac9db191026913 GIT binary patch literal 1055 zcmX9-Z;0D;7=G_>?sm5o?P7DQnx7V{?( z!DNcc=Ga0}ELY@eO=~#0cE{jJEXq!)LLeOt>IzZP=+z8gD?}R=)vaf{uF?1G2o5p{ zNe*-gE2~&7=WCVyy#|iD6za)nTSv$a0f+!HhN(VZ8pm~lFj#g~6zlPLE1kYoDxq2p zr~M%=K#4(CCL$^sP1B0bYDGR{3i+yJG-S(-2N|4-gjk6b6egzfYF5mazEm@R_Hq>>exO%Ly%FLiF15Xl5&btOeQP2T&+}cEUVpYdY*>>SAi&CblJyOaj8MZ z+kCbYGrGyDr#E|*?slt>rbwTU2?Qd+kVH}n%W8s{l?TgGm0Z4FuDG_-YjYqAm?rts za!^l@#S~{|rD`!=H`A?JvD>nHy<3O_hyrK;I)DjK2k2mc1`v6a(vWE&wzgUKX?WN9-<Bnb#v_L#b9Xj$?Ma4jO3TaiCLE zoE{L3pllJU%j#at>?N!HLSx%%qn1bbfeB&}$`|8;35ia{1wEZG^69FXcWkrk+NjrN z1OZuqTtH}$MRp+f0C*-<>~xr7;Q_QpgOA0eL_$fWRGP{#RDq*So~{X0QzX055R!u^ zO`sx;EDkxs;P{zmr#A2Zz^TP~30}PM$B6;?b#C_1($nuP|Niod{lxU>_3zO7!+VpP zzEiDzlZW13{_&^PS2wSoo?iI!gWdL-SAwrUa`p(n_VtBljz4rXy!Q9mD_>lHOF-ucKeul@2I zvH#w&7wC`Ir$0>W`@DVm(OoRDd2H94|5eGu>%yI%-%Z3XWe-Ywx5K~96!(WWp2DPq zZ#{qe=B0ate3{z%;jb&^?I-QXzboROTkBi7yO}NV8?=Uha_0PjC1T^~z!=Ph=VwP;pSj+-fpWLcWy>~1&j_xr=)Xd)rW@`$PyOC{V4NDE--db?fcav42d zb0BC5N0@lRkxaQWN-&p?Q5a&g)bq67XEO>M8g=6Xekv8VWfHua4iwbbSW&hbfCB>_ z5(q33=aE!Un~m#A83QbsVaWl<1qkJ`1_l5Jg78|c&tMQxG-k03FihI%%=&y+qEVPi z8E~D6)SDTj#erIR%;v*6!Qzfkevu9(*;vLQsZJwdFk4L)7Na@B&QpAV2}B)HiI)_g ztcH|AJU5ool0e4-y%QL{02L4-s<$Rkdy3>0TQKL26$Kd%Fqn=b3?3^Mv{~XDm2|U; zpUZ~bdC^}?g~t>T=4GvpKrtImI7!OGvO$iEcsz+R0B{2!03ZU81|W|BSO!BuuN#Un zsAd@y@HhyOK(Ydr0gwfd*TWzVV+@pBFcW}k4BRuG05k<`4C3PSJ`WZWtnnC^O!^f? zEEE)2<}x?|?yV;UJrgrJB$QVzLeVakJjt`&ihO*mPmy7dydED$L%wZB2 zDLh4+M;NSNGeL(D`cN3bp+rK3E+0R!p#J*3AL#0AXTg$-zpX3xTUwi+S^4Dd?V;71 zu%p2y}tBsZ0*j;TOXF2VaMCMKS}j> z2{Vs+s()BG^xY%>99U1x-5Z#4*kBs+OzPNFbA+4q#!$NRMo;aDg)?Vl4{?(MO~)*Q z9Va^LHnd6Hy5pzYADz8u*3qu{8<+-lc>11K7F`ToTAosytS2@voD;vcZuK#&%+0D7ubmjE!OP?9kgBQ9VUz(nKt7jgyCp4|EtM=QUHGduG+kd(B zx%u0|ZI`E-cRXOBoY}JCR@>dODWJ8bz4_3yFTeXgq!1`d literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_left_2_3.png b/resources/g2/track/bm/dive_loop_45_left_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d3bf4977621b5cd77da41e045b61c30798e544c0 GIT binary patch literal 1126 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_left_3_2.png b/resources/g2/track/bm/dive_loop_45_left_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2bfc6b3957b276ef2e034edbbc20c21136cb1b62 GIT binary patch literal 13377 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_left_3_3.png b/resources/g2/track/bm/dive_loop_45_left_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b45bd199f42370321a3241c1dbe724e67f9b360e GIT binary patch literal 10939 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_left_3_4.png b/resources/g2/track/bm/dive_loop_45_left_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..67994bc37bc57538d14eb2f0f3d95acb291a38b7 GIT binary patch literal 10050 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 L+E;FLDCYkFk%x>q literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_left_4_1.png b/resources/g2/track/bm/dive_loop_45_left_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..756ce82f2b3a05ca9f22854a21ceeff5da2350a3 GIT binary patch literal 1272 zcmX9-e{2(F821{hbAf_07T2(&Rx)F8moT)1BdJiJ43L5)Okn1-gyeaD{qsIg^1SaC zYuhYSr_7oH0GQhHZgYF3&aMQZsHtSf?pX@~r~zwNuQON1s;a8$>gt-Bn%dghy1Kgh z`g#OG6bgk>sni+_1`IP%6v;4FmbLRd=kxi(;bj{U^!l5=V#s&#KLiq%1D83=<2sYYKrpD4#qAu$`DuUD5lwPQ z$(xZwQZb&N5Y;5mFhJ`BdJixL5j?83B#d^E>6U4U6mC7BpZZ;w+Wo z8Og`y!hAvSmBjFbB)~#Ot-+0`4a1!zn5`oZ2JRxVK za-IYZE5b8suR|Ynp%D)$_?cA1IU;y-Vx*YMl*@M^34jd%9)KVK0stcb6c7L_peg9# zp%8;|jy3`g10fP5EkLFLWB}x}Fo3}r4U;aI^+P!Zo*Rz?D+O#c;$pR4HyR3B;xRUr z@=20VEK0D#rE>zzqauS^I;M9djhsvbOLn2`PECZf&ysnVD;YHa*CQ5_+D__S4CZlK zgI-rGm{7tr}UkwO8FgkONqW+}U!ak*HJhr>)h z+!Q7;fx<+qX^cjTHUo6%q1Ol_7)+8-vQ~~Ce_i$P`44PwZ)3o!TbH*~`eQB4Z?9Ya z<%vscdVF(V0v-3gZ=PuA$J1cPve2r5(^rN!tX}qaL0Ia&vqcdr{MxXCQcF8;EKrn* z(Fc1Lwiy@Od*?pg`54@`UEix#SP5O#Br)w&?fLQU-eK@d-+|6$*VK#m|MchX#y=V? z>0Z@w^Zaef)4A(u=g@ZZ*>Pd5vR!rUT-5br<6p12`Wue+Y*_N@(dK=RB=Y2$=C{ub zjGphj*70@S_^q>M^8j0_?iat=x%bnzHZ8h;yZW5&*i5W>`i;XE`?jj);G4eN@8O8n zK%=9626M%o*1WROcJBb+Wou3^KeVF1`)U96cypvBzQeDa-+eg6X>m@)tW literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_left_4_2.png b/resources/g2/track/bm/dive_loop_45_left_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3628fce680857695468b74a287b457c0ba04a4f0 GIT binary patch literal 1533 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 I^z~2w1ymcQY5)KL literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_left_4_4.png b/resources/g2/track/bm/dive_loop_45_left_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..578e26e77f4880ad1df413b2deabada0d8fed5e9 GIT binary patch literal 11783 zcmeHtc|4R||Nmuc5J@3BQQ5ML!7#QW`)!vIqA|uaSq6i_Sc;p!1}J{WQT#}s0`Dm)sDQm% zpw0)f!c(b6-pFftrG$iQ*rC=&}0Cm$~l zCpS0$2?-&7fzyKA+`@2?(^60w85uqy1!Z|@B?*{}^d1NW9UUFRK?Zh4Mt14r+{dN= z_CkdZboKScFu!`xp_}YO3R*>S5#KLs;h5kY-(<4?dk379~gWyH2ijIdS-TR z{@we9kDt~)uWxLA+1lRYwa4@4^_|(j@nQyfQBqS=QA754QBV^1h%-~u9ETn_a@H7v zayu#@eT|kyEjGRQC7mG5=&`Wcnt##R21Og zQ85Fmz}9Y<@O{d?Q0`$%Z|nFJ@98N1L_ixYV1CIRP`$o2i>h8_cJ_KKNoU4h`lMa_^OqEdzK7b@LT)hwH5#V zX(u*&*s|H|nN*e&GX3}&`LB6Cho3{EL_Q-!Uat}s%}m0=lm^W|m}g6*`*@WM)6OJ~ zQZA>kod{&AAynl=x@B$Ikm|=>yteF9?<~eBI}T+()rn0A2mHm3T6`#o%AMKzG%A@` z&BdW*?Hl~wrhp-!6&oDhdep$|_Vef1IOB^h>2FD5+7hV>E_5N*g>yEphhPov=NHtj zTzU6FwELbAj)uk9%$~(q1Nff?-;H1yT-N)BWWY)*RrL*PX?)|f=n$W}^>{oP;CJNP z-i#&#XIay^+c_sG29*XwEW>Ukt8_A5XrzN(;*RJxJN_*8o>AWPd!(TIR)>6{Lhmi2 zBFb0~_1ReC?EOLN#uuLagRIlyOvZh?4I6rau(pZndEfrCOWb?eUW<5wZoGX@m&M@B+r#3#@W)3+C4P4r6WrtCL`P$ z+{(x4d!3)v#E;z@>X^61Z#ce5kBrnmS-Dp6EXQp9L3y$~LUb-4#}kz;UaApxO3Grb z8M57vSTJKG#Rk@NCw^s z6e8orht_ZH(!3Ks!5wsVBiAk|Q6aV#X4GxcL%Mrvpz%+nNafj>-LgyiTpswICoIbf ztOBEm&j+p7?x!}L6DzAMJfwN~p+G{CDZe|7p>+3)NMl!SV)8UBRt2VQUzGFzsNh^HvME!eLTo(&?|ydIHQ_L_&;j20MGQUcBK51<+se{ zA?A3m_Mw+l?9J;1Engus^0v$3LmXtlIQrY&+_PmKo;@!H3l4c}F7|UfvlyGW)9A7G z*VCJe%tq>TFgJ5N%*Shf*xV>f?%XI6a|)5$B2`nRW)9?-7$Y5Sy;W%K8eJ^)sC3j* zus_|}m3!hTA)&xGsDr7*V&r8tF@ZB@2`$gwj=()DsFfhB+Bl`jMCUwUHK3nKz9!!( zQ>H!Ud~yRjB6|WJ;IbOezM1}VMb;c%a=Kgl&>5Ms1J?|Y9vuUi&h!SkFrb>Inf}_0 zLZ?E@D)NXKAw)q{w+TYcr<*EPBogk_$-ZdaFFax9(Oclmk*lG_km{uSrIF;2RVepp zsiSnIFerEY{l=i{jhV7gBQC{@6g*pVg~kTbZbY?PED1^TDyKeVFKyp)&cSs*5;)AR zX?$QQb%>|fTA$R`^lVr1K9OVb~gdrAdKj@c7j8d4ChTcJ&5-VFs!L)nrgUP$&1vBw|Cz|H3^ zs1t$cu_T?&q^P>#DnVn|!s81Gi04ajhRp*N-Qs?sLpkcz5q6{4qMk|~qIQ+u4BNKH zOQqs8395*hZTin7f341YcAuWEbSjpNyf-y;oUd@+afSBEjI!Jg{Sv{5`0%86#>XWj z=e1`A+gz*qvGxi*=8;W9>uAf><%0W9BeJBlj>O-4cug~qKDM;Bqr_D5xH7rsY5&68&CGuNmA_<;2 z_jK$@3R(%Bnn1aLT-?OFX!V$r0nU64uTPnEo+rjuh`wG0Ohd~`%V*(E`a5$R9R~>U zR$b%6)-InU(i8C);|?^<+UQ&QY8HJa zUgD1kqTR@T6e(oBgGo8!!=>~}6F$!eWLKZ z)qx085p)v8^iF@Gf#w@R#K3uxTtQ1uZvB|E9MsIqdKW%U_*_2L)}cCFKtFX44#^#& z%PpY1`z}gq;gK?JJ0dLTwX>dXS!D&1M2k5NjG`DvcaZV=ITIuGJ?$6*w`2eKDInkk zveMk8>B@tZPIODtZ0Z<6-7}ymtlM%|unSbT zEbVeY_x$P&ooa_s``8HkZF3Eh(cKiY%n}vzYz5QgKl|^3TpnJ{2onbOLT*OYT^cd2 zW$O9+vWzUO9J&%8y%6GD^~j0gF8_>==90;77!5v;%?4ssKrv2B&&Xl6g$7b0?B2sWq|Mc#KHI7Ow`qrM$`9AF4U9sQXwmn7)F~a@`i8GawmcHZslhgs7x{a2cnc`n}|?Z zl{#KfQ1#4%v^z-Fhd7w}?3OtpVqR5{Pj|f~bInd91zUq1#qkDAOe{AB2CELlXT_Bo zcZR)Cd*WsJHJT4&Z}*7ylIvOSV4aI{#czvBYQ{Q;H|^BCw!9a{D>n;$y_N3O$`O_= z$qdTi%l%Sx8_Hz zbe>VBag%%OpYw?w?!0DiHWo20#8F5F)VgY)1a$Al&uvu)2D?Dh2#eP1TMC||pIv$T z`}El$r<+L-nj7&-Ppfs|#13#Pm*A|g} zS-Y!?7R-jTA{Q&?l^tEUq7_<~nm8710t9Yl=DqnWY!*>Uiu2L=HZhQL1{K_MJ8Y&J z@hFOD{b4pV*EfFjLTN|wp9~yL975cDzMtBybgG`zJQHZ060?}YATN(xzW9ba?N!ad zV?XtbKpYNf|h_}KzjaK(Te;D(-KU5L1p*t7*bdcu|%<}fQ(7@?w z=u4ksol&h@*VF1r<{B)$j%aQ3T*JwDn~2Zf1ncQspJvP(l}mI7^GjS^8HxWqSDyK- zELr8^Yssi;Yi?wOW$R<>tOz@awH};UQBjc5hyDJh}AxM$Z&n^v&kh5hwj0NrO z$pyp3b{0=!)VbZ#P#2}>pATgZquG^fMCr1PqZobMBQ!aXym`2ld?4`8=HVhe(9e)`%c4$##bU?>Y%>C`}9zSgoJ}}3qa$UCI9#5)7$bG zBov3AUwG#X{%33A9PfNqD;T+`{p5%}Rn+8pT~Q3{Ne46gsg=lwD{T^g54|j!HYIGK30jDT6DRT8VW5-tL=I%KffTv z-besfSQ0hwT68Y*os`!-G8cL=bLlAfk%70Jgi9Q{sefMT7fWE<@k=lF zB8*pj6KaryYN4-mTjS4i+lN@&U-BKqVf|TG$bh)DQzMaLf(-OqsaS?}n!bBCB{C(r zQX-0*Sz~wkMnecV*|&Q7dE181Q~X5rEJVKP;bzg9B!-ygU=9qwL&XI17Z>n}dE7dN zF}b8N+K)s+Dt+j#azke(D5J~th?^Fj%x4U5Rt+)AKQ>^3+l;ep zZSJ_!q8_`q{_#z=*s@Id+HUBaM@#mE-k~5kIZk(m%YCcw>4`W{k^(1xL*dbZQVjY+}tb_?Q_mke#9%QH=4Tb ziQp88Z9ZXr)h&f!SZLa3@YbY3>?Q@{wwaj;PS!zY*rC0&hrPq9HrvKDfqEM$AI0iQ z7$|kd3rcGyTgf*WUYRVoPRe{9=~*K4zA#*X#VtWugZ6EsCa%9B59<)gy<3xxD<=ck z9sQ@@lAnHEf~H{8H;Rt;rAJMie-?Ujgqu($+~G=fSZpHyD6;odW$$V?rxYgaO!dtb zCL6K7muMg5pJ45o3i@IfkyBrzg)^#@_3Gfc4|Q{_{2~IGKlAo?AQkobByE`x(xowG8;OZ*(n-!) zZ$Klt>isn!fySlot>V^bUYipw$87Rf(Gxv3A6ecis1gXoy1S8M18IWo5_3ml4t2@D z_{`dCE^#f(8fPv^y?PX;Yt3>Z;?ki>U-N#SerxNR-gh60@8(o)f-|!OL75WOU4fBD zjVEhxg*KKY)ECj69#X7<+%I5NFfz<0u;yZkyzesW>=`^Z3K=x{md~xG-`J6s72!}% zH|H>C7l`FnaZ6Rk_1EPodSGRzcn<1U@4(ZXYh9N7Ks)i}{B%+CM6hXfs4QqDh=<>; zWRcBZV9M&|31m3KY^cskK*Hjs;?eNifk|)YF4#Wx>-!v_{SjQD)lARqzg_zImg#3) z>QUn`t-Th|5erX_9KR%#<9jLEvLoZJm&83C(?l7bqy@yGG6D&8<X^6n*=JU3Mtx&+e|l>R`B6uZ7nyWrTcai z(IOu%_)cdZ(H69haZ7Qt(GcV1{BK^Y)5zUFiGw)^f#@Rtrud}?Xbiv+iXpHMxMc=#UerC~JtZA{T_n8*fGmu4u`)#uP=}c}) z|0{W@;eHO(#|4+3uJ;dfwD@D)DH`3{RVt%(6hl-L7)&76_PzrWxl>&Fr)Hg31n=F8 zk%vAMg2m2z;>wdUpp$)wN|583+J9c6jD4n?ng1P#NIcTqXlws-}eto@Za*J?9>Xn<4}A z)1diQMIHY6jQ#I%zHdOfM6zqI+QZjvkFQfl*z-0G=NX?hN=ZK{yh7Z@-dwdZxN)ao zhYZlItE>+Xh76M4w%fgwr8{VNZI*8mZ@g^v>Vc-egzcRjL-(9*&(Wn5rBN3S7CWV> zThCSci)Y8_aHgL+Q!AwsT6I|{YL4|T+ZY!XLQNv(Tx|SQ&w9XMsoyM{V(lgWa1-NgD$yt2Ox#K$HnfKZk93u;fG{@}yLJ{}0&tD;y zpUGWXnJKQ;yAzc7$E4JBZ1kd$u^u5-?q2uAJI)bL_gvSqKlLwgz+YOPx{B zhPOGFNpW*4op}dE(`J4`MzNV7sia^!@00KY$77!QCjOSQE)qv%JT?tcN!QVpKHpu`b-`6XV=jO6}l0p&kg*N9MZ9hIX z)?iJV`}aQwKJt+9g&WtvErLIB>gq;1>gxQi?sx~B69xdhQ~YBUwd;&nLdiM08e)gM z4!@5{M-07$Og%g=tQKMz4w?5PTRzqn`SU5IJzM(IJ~6rP+<`N7r^aU3d_Z; zdP2NfI6IT|N>gAbnXp=Uwd^#o zgGw+vhn}^1X1n4yFLfa$akQLRv#U4hLgSg!!;hM`Wag)CVo zS?FKvaQK@ZVt+>CJNT@!tix>^u)l1c%QZQ9m|fgtqpGu-gqYvJ8#)H4M)$ZssrIkR z1b6?uab^}C7W#i6(0FGFls(=KBjN4ry1y%;r0VU8LOWtS`0X%QoQtx+YIUsuKh9oR z04b|4rSGbaxs22Hb;p?c8knJd9nlK*0;($XO5O+%z!~F#;`erTav>nRl?C>35ny^R zTT+03U&O;vS-=9^!BfY(WB6qxWF(}-HN0_N(gG^<{7UZj4hWNTnm-`GJ7s~(9v-d; zNl7A+C_#it;N7v3Pz41ANhxVbX=!m#LY&~^;(_uOcOeMwL43zJhasTdajqUXybJ#x zCdv-)>7gtj0G9Lr?4Pr%zWy(G7s3xMfclX1M!8BtC8Q*soh5&-LGaM<0zrOs=s(sV znEAM3Buy{`yr(-Fqv3^d@euqSVsG#A7s4JTEY8_=pA@LPe`(Af{Y%c()7@!b#vUz+ zal$x*paigg(0`Hlz&ZS-tbgg-UdcY4-#Y>}_Y41Dq913m+gQ3M`r7=)(89S(yxPp{}oH)!5hE|Z0bwI=9Fuy?aQFlCzOW+-rZSQ;18UOr}tk4W;kbzsRwFLX;3&!PFhY5CMyet$v_q4{}M9C zxD!Bw+r!-7oZc_7MErYY$EzZ;x~E`ESyD zlZRgklm~}g8%F@!_u0?-KBG)AZr|^|-#X#;rxHK^{-i*l(BCN#P+pkt8V0ex7ojhs zT(B6>d;BohpZU1|U`#Sq2O}vcR8y-+$;!;p?DfquDO!5a|$vvO( zld+QI|D_Y9eSzPc3|Q}b9_YM4Unu#@8UD~2*n|Jg>&IC9Z#Kct|4$=-OTYi9>mPOf zEe-rF;eV{_A9ejL4g4+Pf2`~Oo4V-#T25hHz^5Q0xLC68yJrcWFa(VLFw+2+T;Q2B zN=iy9Dk^GfY8o1v1K`m>2!xiF7Chc}Oi)k|29s1*S2Z=&L!+$-1blFCaAIOwQBiqa zUGK=q>e?Di5>QnH4D}9LSsitB-lBv`#R5!qIRA8EQiKa#n*TBpSY*opx}RUq0F@&FI14QCpBaCEJWi##t$ zUb7|dM3c#Nf&gF$0Jabao{1@tiz`}4C{t0f#L%z_iyaIMTue(N*Vb~ujtZ(ClQiU0 zv=!3Aiy;GH=x9YkvU+g7UVOD_W}9vK2$m1dC8;H-Xey?MhFjs)@z)Knr`e{Jqg=`=O0XL)-tIAM@@laSb&cN2t`BSX~(pRgsf^+@tw%<2}0&-bRD_GQ0yog&PCJ` z3r8wGK&w|1Ogn?ogNcOc{NUBv#Ldop@^l^3QMiy85(dYrsuN93!_nwuBC#kuyf!VZ zv%Gwww|8}Ql?-s<0ii?)>;aQ{HJ53d7s*^q1#I;o1XHF!TfS&Vv1F2J{&mypWNcG@ z;9za?{9xVM+9FvM0FVGc0Dx!!$OnKX0GNgVWbkXKP9_n^`I+RAK|>(`4+G*=fpRTi z#1J5x0%ZI#ayX2fX-F=2B)45Bk7NRS0}luE)B&U+#1VZgkSG=(t@R)iU0ogA*_l5- z-$@4B;=%$j(m~beV}_Z0w&g9i0Ox~fNitcf@;REq zNLan-K*!AZ!0P`vRz}gGcuQ1#mZo9n6Gy=;&)e-cvvhGYA@v zIxT~B*mTaFHIr{EyQP05n4ck}lH8poK!kp+%%i){a=0#I$RlU%c?*fo_=fdyZ>aIx z)A*bjZNP9vO`@sCY7sUmu4jAXMUU0|P|l+Q+P0o!IoyVUN2ixxGFq4LxZvUNm-NL% zrAjyIUhjoJySTokSYCbAXG&YJ{xoj%MYI_Cu-cK>nc1vSb=uq**RBK6+k$<}hr4t) zp88*sMaNl%9e3Yg;PyY`_prgF1p*{xu*ryem)!azH)LjKtU;NwI3(Pi?W%|zO@A^E z5TtaI?otC=`}uSCcb>PzrvT?DSXL9R?zW(Alp)foKjXESuewtq!_lrzw8FPmk)am4!Dt9Jm8GCaU*3pvm+eX4@C}hN<&IGNud9nl!T?YAEp%nmF}@PHH&jlwyw9kP=VRVAX~!T1GVsO!-^FC-Z*qz2E!t zejk4Co!l}Sa4vXy0RX@`vUzxGyDx7i-D7LlFIH?g0e}r`d1>3G_Sn(U(b?H)v)Q`3 zy1Ki&?RGnYAU!=jy}i9|pU+1SIK$99&x&G5mZf++o=#^A1>Gt`*RdE!Ew{!a8*%e zvRPOvc?g$}cH^9v68r%P3o3-DQgVigYiz2>=gNX^g}tN)5BMk^V?{C~F;ap{WQD9Q z>84^>DYKEU&6Q9ZxOm_W18)rYRfNpC0|kGmL`!BcS(9^3)qoQm<`PLyG=L?8R9<9? zGH=GkYFe&q@n$JKXKJu+pf1vn1qm`tGf|#Tiee@jEhLkrY}VBETBXu#HX-mxz@J8l zJjxV3d>ISZm_$94Yeb7pwbCjy=BsnifuShrb_cvZ9>Yb7l36Yxw3o#S$<%bdU>Rns zMgxIGWFA!nuNuKJFvv*qiVETGmr)#2!ITL3V;T{Gyru3z&1Dr#$>4F zpjGAkKq5ej26_Nk9DqE4k{c!onB$-xf#n3Wa^R8iBw!g3&5EYtzC0EBHX5^cH1@Wf-8dY#OqA44venNWz2M8sH3BJengr)ffC zh!TreIII!$LBR_ZKg+ZB$CnSy?O9P?Wyj^E!t!Swz8`Kn`**Ip{mj@!HnnW=Dcjmt`_QAa;eU>e z2l~$FxYPdix7V|`!PTE?Lti2zf33G)JZL+yd)FUbSN5D=cK6WH$sd_trmD}^t~Kz< zfwzWdCp=R3#%uOBH|#rkZ};if9bfGo>$rMjrF!-N{A9=4k2B$i3;XQpzMeZvPh5HB za%FJI&fq9AaN(WncfO1NyjbaPtvov0zj+cvw{>rE?)zqB|GhS$J`7#@l)C@a4fF~6 z-r0BcWM#a#Dm^BDAKyOs@9E-fz5ney=TG?$yDlGka_~qaJbrh{K>hgYHO>dOK08<1 zf9a$2gV(0CWoA+v+CDjOaS?cVXzzjEbu;E0N6}{udDg6%?3q2cE*NSv(euy)0KlZH zqhSJ`;h<>IQh>j8CURx~z;^~~sq3h#dj_Bd(?ClyN`UN_9oa8k3%n*LqW})?3J2vF zs2|!K3J)38k8?Dr^ZwEkL0$Bh4LPX8$jAXE@SFh(9Msvs^8-+D5kJd%3hI5J(Ej-7 zfZ8GQpJ#1dgA0OiNf=ZTArIaUh07>FVG2-rL71!p9Ht-x2d&BO{aqvQR)7xp4*bME zMEaA{lSB0vr^6!tIyUCl+!UzZNP&#@JPA+bqlcz*PPoI&N zk(HB2DyVB{YH91}>Y18dG`Fy{vPNUDj!w=v7lMzkpMOALP}q%|;SrIyi17)DNy#a9 zQ`2(u@(T)!?iW9(ta@Diq^7p6zNNLT{YA&i&R6{dZwKEEy&oQ#nx2`Rn_u|2_-TD( zb8Gv{&hFmVLtbQHqyBmPWcDw-SU_Inl#~>dG>5#%$o&tAvrtl8Q6FfEPyJo z_njzukNm%qjJQrQ_uJe(h@0FwEcuu37u?+fFhl4mBWAjnSyPf|CSF1`<0?h%mj}@v z%f2XRWt-WY4fj`p8w1PypBAxZgt700X{kI;zRU<0DS!VY9Kmzo{(w7nsda{cLHNzFeXx@VgX&p1GeV z-T?%^;o-*W3~@WsBi8K7!yBbnZ+V>=m5=c>oJzPJws?`N4pBmPBMage^L(nDi9@!= z!aUU|n-G|NL7uuH(t+4dMU)xl+2R(NxR<;-(N0fGd=Nq}N^$5A@1SzxbcAUd)T1T( zvLvi8_+8c2p5vR0FTlO2z35IdX(4yGT?e(p($jUUMV`f+l`1UK^S zX>J*dQ}<;LNgCwAl@bG66|XF@?qZX?q*<>XpLLbZw=MRJ@7H)sRctr+UyuNviOR>J zJ%cB%%W9>LzzyMq$t8V5^XGgS=BA1H)%0e?1O7T`cNgQHEl7XxM(A5E`#es)7-v~5 zbTY^^9FFMEkMpbpE;FXhSFhkC7)FaTu>rc~hJc9R@#@E{S&{Q4^8L2`3h&D>G0=*q zY(89U7A%DUWej!-q8?8N#k(?lTb<&yg%=7%i<8+Wr)V9e_bi&w@wr5?0TpM_Tq5wd z)bmrcB)IA#y2O)-*Yyx;I(K9P`C`xQ4d~WjT(zQ?^yAYS#CJvXqKs>6lkFmw*LbO% zTb+^*>Me4YiSKA&8j<%nMy`p9uq_I7-A?BgJVsNBa&Z|+JeETZS?Aj0{=}@@)+c2McJ>>!2Vv5?6^5TnWnSj`@YR- zqgyp~_-db+$al?U@bR?J%atXIw3l`o z`RA#ZWntM%mSzv{eVfDJ4a4Gh?0SUS>br1Xx{hh++X~(H+}GnH%gWk*-lbGkiz^7^ zVkBSI?U*sl>YpFNk4Vf#`1$QcTBx3XE3<4`c<-@_1?weWr$F2++r`Mo`@=KGG;v;# zP%ritW8w9%{-YoSJQ8fRou_hbvQ|$W1dvYGAy9jMEtnLw_r*xNgFI1m7N{9~~ z|7hL!*l|$O3KR1|b1s>gXIt?45Y0rBy3vy;ql!?8SqB;W36?DCGiA4np6BD<&_umT zq&D5;_|*0_t#hb)@JX`FzG0u$vpvMX@xeE2_sV)pTBa616cY@V22)NBP3>vaaNK9+ zs}*>ctXL}1OD7>*DuI$(-@pl>WR6e@yv7d*D}KedhPHgaj>w z8vPX^Gsbo<`ds8P7lMG(gU62MFA$R}gEL`4RBR>)N|SC+suSU7SH&z0>YNg~+;c9< zt0n~|HRUs z>t^S~-uHYr%IygW7_J@P3~UbmPG*~&UG(}2f&L+@k^v-7$=MLD71+@fbhX0OsgyQ( zPic|W^9H7juA@+y#ya-=8%{&|3Y$ILJYMMP739*&rEqe1l5jy^%M+WGb;;bTOEqOL z({T~A^M-Rl)LQJ^9A04JKyfag?WIbKjh8NScDyR!w zV(aDS1e2q>sS+t-LX3LKD|h(9dfDf`Ud@qA_Z(2W-`({%f-)L&ykn$^S?jG;CD>p z{1wEgij!={CeG~2iJz+OQy#VQCJdy7#yP|cU)SmssoN@!H<0e&m=S&x(uSLN4vH#% z$q~P`uxk)_BsJgmlLbtxLa(ATdm=LG2pI`rw0PJhHjYb?ji&CL33z{hfw6Y_!N;%C zJnj!q^Xl(6y+5MueWhusT&&fC_>|tuaWcxS-u}ie^TCtNwRh!Xaj6+> zy-L|3LECdD*)d!X?UeXsXg!{sXl~y3PuVX`M;uu7c&)6Meax*(uiHpEqnBS-Pz(OS z9Az`s1lYwnHpc37EC^&7m?Nq@#0ETFfcwp7^$i>Op*B}uKIrB;W){7*lC^Cdi>Mg5 z(W=j4e9ryt@aNSe_rmwW3F>o=>ssCZthLvB)jOlLC5!7HY5Q zOepX9X>tY#NG&NtT77?}C`?NB_O$dzU4 zK2I8fo9cF_%BKn=eBMo%sPk#2>Q@LyCq(aC$eD7Vc8QHIrE9tLefCSTKWG2l(!7Z& zf0jG)2Un{<)*nyh$i&=4ZOkW2Z$5SKes;y{ZB|mm6hGvmka1idRG$@cU&K=};*#pH z@=`fC-}xw(z+$qNbo_~Z_*`st{9v3qyqlLPBiN+!sCV9VeLh%wW>oa{eBo{Nmk)xD zQ4wSl>Xk*?tDWk2j+wCFmQJIfek?#^Z|F}9~yebU6kd;BJw zu}=5TC(BYROQT>V;|{)?m(JcCWT5IK0ZV;m4znw)rmbme_Mc=Y&}Bp8NtiKtn#qxd zoj7-ie%d^`Ih348*B$E9X?FJp{!nC3(5;*4HGaG?yLI5oVDs)nb(otYGT+MYv8(9I z58Ld0@u4aYZYl(vq3hCi*ZUfKi|55uqD}J2yR7pwIbSVw@m^nUPo5e>KXrXoc5-tS zo6hTB=jJ5e`5Nb}khVBv>D($_mg=ytb}eXYr;KMSaqVQ?Y%9#8%6r#-`~8;g2VFE4 zYf_*iSayy*G>fa|`+H7oE|diHHpk0;8w;8#R~GZ=`NI1?I!*z~R5Rx}MgkH{WX%oU zPuJ$1*7~^RWSD8ATN1?x8*Qo3AVxN^a{^b{PeL+VrK{8B%=OQ4acBV_;-bHr*a)dv z_}uJSo*j5VhhgxH>X2VsGY~7Gdz=k>vno}%Aj~?s{!noNR)-XxC1kraxcaaOD_#lg zozW9)Urtec`gO)b!DnsP^x5UY`LUFG|JP?KH1(O_BS$wQ9VArvW0T2xMG_`U)yqGX z7Fxk9yAUsSPkc!dyrTT6uxWbq%5j~%n~+97@yauXWYJ~vf)t-Z&TOXdlYpAQkow^& z)%J{q;}e6cuk^%{j{8YL^CF^(4EDRet~eNIThzThd1RxT`t{B81(ir}*3+9yT<}=v zdRu%Zem=c{UNkrK&v`YK29DpDtqS(+0$g{iY`=xaKcS#gqQ8rA5sA^}^(HUoW67#c znz~J|D>)LJ?iP7mj;VQdLs#i|kOfYmxYkJMn+0#PO3*uEpY4Y7K^67l_wR*Sn*934 z&|8j+qnNve&tHde>p%kG+-`w|1R z#4BI9zG!os@$6o7V>z;OhJ8|<4ry)j=IY6oSe1PyeY2Qzf)a5{mQO|2Ilm}B_!h5k zC3(4!eR)mR<#dh9p2mzY>s$0{!X>Z3K(G6DO@nW< zFuk{5Uqf8K{%q!6xtfWwZH4?M;|pnv%7S(O6%s({KG-@w{+b|oVN<6cdg)q10+C1* zqnNjGKO7a#hW@s?!fXSX=s&H}!K=k>c#yHcuaK~28NbwpFCHDPNln$;GLErfm#qkZ z49t(%S+?zpy*MJ)Yd!6sgvI6KIC*U=gwcgeIP2Hm*#>vfcD!n$+Ygg%%h_MMs_+n3 zto5a16pIoYV^-e_E~qrEkEBmET@kUdQ!({A**TfYH+#Hv2)SsdcuJe=b>OA#)0Wxe z)5T*mKF##lBAe%oH+2}Q-=oW}D3?^~^ee4!y@sEpw*e?7`9E2wCGkxZOnv@bAmB@7 zx+$=)?ReGxeDK9rc_aX4zxi$C!qP`Oi<;tr#q3X+_nwdD>5|z}rLs{>+AXH0%<52` zKJ7;=$$PhYR0`|XSON-_m6{$pVAFKyv}p6my{WygXiDAsLzAgAB{ADs_f(9g)_F!g zM%Lb@z_uY)+uFeScykJ}%qYGf!llOx?kuy8$k4p~2R7f;%gPEHYlEXACdFn5ml;2x zYx;A*UaNwAGXD2t-*1aE6zXP!s*fAX$M&vX3W-AYC^wa;5HFhh(ci0Ly#{oi3SYI; zi!YYMxeUANC+qlf<%iQ`oy*Wl?ee@rR&H38(p`0}a{11Sf;?rjnLAgLx_4dGEpM0Q zKzb5x@0oKM4+f!?#fmMHgeB=Z%lI_jX2!Zo<;kn3ZnJu6c_^eMXMPDh$!$4a@on(+ zaT^lg)qG~YKKOWilsc}HRqwf{TK04Y8*M)POrm@Khm4DF=0=`x%A46wd(#AMJ*u^@ zQH^_}mtrpHTqR>auFCT88n#)g`DBGZ@ko?NX7YUnv7CuJtTuQ4h3Vrf;^Xx&Gd z%`mPW#K5Atxb*%NS?cf+RSE7Imf9>&nvepoM(w)!;GtARj_}Kw6I$+d~*A6HDpder(OlG2}Vi5Z(I{fxZZ12s;lr!?{0@-lS_$B zhm!HF6u;-!JGpYFQO9O7yN~oM@+`MtKi@9t*;(n^N^BZczIE%_YmBRZ@*CXdx7_m@ zva27y#_GkpZn|TY1~^bWh|GIVfMer=%{tSIBBe#P81dQB$Z@vgz^Zabsk=#4sid_> zr>|1?RR!rBY=hVmPsB*sajui&j``AP4`he3R#1XfqOo~WY+}aP?3`qdCY!17-%C<| zyYet?d-w=_n)f4AoVrFo`90QLq zG-^1FM^+{t`aAJz7Z^Lb7vwv<=boKUvm2zXn?%rv;9V7Nmw!uyxKv4GGvkKmiJpEnr^HguV#bjpEsztq~&^ne7TS|^)a{X=mm4_S3~7z z`sY!aY!~ky4v19$3pqZ=D0WN-$r}+AJ$fR}ULtAHRPmtT?q_Nj3SSnjk%O5SX6tBK zZdC4q@qWjo3|B70w{z}OahKyo>TMm4d3O|j4$I1T=Ue^YVc|**og;6i(ODyr*iyZB zkD3-6G2IKh8&_ZhMSA7ME>PT;CGq|}7kdxCgdXO5Uml80+u{9q`7V}75v_$ezebyD zQW(&4^iEz@KuAXQMvX|zH&awm+RW<8qB`;rNC_Ms;tdwCo-J`< z>$eEbR*h||>y4K>3odxx+x-2{=g-HHe?2o>hydAo^Ns4ISMD}t5AOu_31nY|WyIVq zZZs`6K)ds?h+{oWG`ye9GLm(u%-06ZhaPhq&7 zDF5yZTaMa&c57c~;G%#uPS?bik7_71Of~8v4X2YGzb)0d&opgzo+dtV$JX@eB^(+* z2M8>T69U#$&N^RAb^LM?FsO+>f9CZ3Mv21*b`?t44bf>hVu=u+818gs+*EGRF4`$@ z=bKfS%X7>%BVofw^(Yqn(Ox%e-=6(8lzH;SX~MK_n553ZOW*c6xt@~|R9W1zm8pT# z&sDcQq;l9YCTS5;CO`qN&Sj{!ITb0OKE@U0t%n5y3+3jmRql046zayx2j)L6` zbwaDbka&wRQ$+ay9b*qkQ7fb8LULRPqaI!lBRyXmPHW#yOlQ+0|0eb18w(YA!`TMh z=w!!}aTT(I-e*Y@+e6mRmPHm{mvJD;!)vZbEtM56lcgv=`)Fz>i_zW~I7Za`@Gbi3 zY3ArLathbgF@**BD?p`m$rh8RC++z}(ctl!@#hnD-$n;gCz-1Syq}BPU ?grq@ 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_right_1_4.png b/resources/g2/track/bm/dive_loop_45_right_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..633cfd3c558503e9c4210324057557908d7fcec2 GIT binary patch literal 9451 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_right_2_2.png b/resources/g2/track/bm/dive_loop_45_right_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a12088fe86e3d68403c419787830446f9aee0add GIT binary patch literal 1238 zcmX9-e{2(F82+|yyN)sHQnj#}6w~MtFQklf9Ma$+w^`=_2Ro!l4Tn8Kfy$0pNE17) zQlx`po~B_nR5{HN3)WEiWurxoq?3U~8>rBcBQ&JZItyt?ktHB}mXJK}uYcYrPoDSP zy?mLYeM;vP06=@+Yd!t-YOM#V*VXf}k%spH(1GPkR`%A%hK7d5#zvh^*VNS1+}zyK z(t;p}UaxO$Z8ce~Rvfoc6v?tQ&%1m+AruNlqjEBt%4G7IR;|@=8zAj~q1#+8qt|Qk z2W(-{9*r^aB$rlw*_>D`DHMh{?QH^W3OX$kkIFv$c!*M?&TLZ9#=>PynXG0UX24;< zPXdWW;sT^WH&0`_VHiy;DVl+><1WE`qVVRRtLMj)` zXpvkwUYt}7BrvkT4Nrms0kpt5Uv}EZ;9o!ZyrcAWSBQ#mZtf-fs8NOqi=L3nazJSUjm^ah9GB=yjUziCc%f$kb{TNCMylzz2W?Kmvd<07?jebubhR_+UbT zT7f}Sy`L(=LKQUv!h$$#1{Z1ZvUtElOF^#^ z38oW~TqaT0GO$)8Xd0#f)BuEaFT!=Y$1sNiu~LbMMIXbL%~CEG>-F-1fPmXVge^+q z2?|$fTb{wnPAlXrFo?n!4pSt|(e>jeX1Cpb^aI=am$6{cU*j9<{m#CgS60p+{y4JY zz0sNaoj=2i`)6J2ZOF$PJB>F#m@UNq%U%F|n{4;~U7xJ{^w4^G-wk!>%J}DGXLn*? zszq*n_u$bk(_qgF%()rA%hNXuNUO(|w%;E7^wsN!dQTcVo;hsm`sh&05OVU{17Cc0 zqf-~@5TA|Aa5t@J?@-s?4ts}w5P!UK2Y>jaIDBFI=0Tj_JN52Z%DZ~>%kQEawYRVp z@ygpn^g9RL2X0>VR!?;IcQLCfFaD9fyZe*5JD#&1>6!QS!1j?RZhhZ%?5Q_jx|DzZ zn_bg%Cw7m_r)GS$vunrf(^u}zIn}+OV-G@~-6{{e2hAr@uh=p2_nKd(bu0dDv8N9& zth%p;E}tLLAKmlk%vBrrSr<o-V&p8Mv`<^N0D#*GH9EwjMA%X*G1Ubo|avtuM4 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_right_2_3.png b/resources/g2/track/bm/dive_loop_45_right_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a3b7c671d0e177383129298d7f77534e713584b6 GIT binary patch literal 1139 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 LZRyC8w|f5vrcEdI literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_right_3_2.png b/resources/g2/track/bm/dive_loop_45_right_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a2dbc61cf7bd31114fafe8c53f6f815059010dcb GIT binary patch literal 1486 zcmXAoe{2$W7{$TSI;)uaYEG|sZkxJreNj%-Dr^AZ&x}FXd*VCax#qDCQ8&%Xx z#7P`>OmQQM%9L5+u#ycsHmS17Qk=|Ct;$w3*b+;Bm|>;btX03mn0(&%&HK;${P8^R z!J2Ay>A1<`005;`%a+vU=d66KE)wSZn0?a`0ED1s#j2&R)-huQ0)bE{EGQ@_EG!&5 zb}WJ*MMXu$#l>QoOom}fk|bzaqu1*=j4;~%so^k601*wu1|T&9xgAlt#cID?7be)a)|TQtS$hNqD1}I`l9<#An-=%# z$q+}!E&7C$OZzO@uyZ)>gXst=QppusOl2TQ6HVLndY8%Mx7osOcRUzOb#!F2SqLO7 zkUJ5~i;^J;9a9)mq&2PcWK5x~y(8z(j3$O*i2_AcVzF8(qZLX$j&mBy%H)rk{WeF` z>rY1FxfB5y4Z_hV&q(b?h09F%taQj_i2C?M*p*2{a=8IW0H6hc1HcY|4}d5DX#~JL z6ba27^m$-1LCFD&0S5tsYLKJ=qyc2b(1t+|1%pNyv%;hYyfR(|G$hbch*2-*O$vuy z?e*wGAxk{&%Vgp(uO%@6%v?g)#gs?N1m$cJw`X;}oGCQyjEx3UFp-sufJ%y}m8g!8 z8fnaI(AasS$H9kuj(EhENk(8UrP63%5WpmWFz1d-- zZ#J`-(xOs23Cu@gVU4nbQe?C;$VeeChb{~T2^iPp!>_6+8GQ8v^|jSBSlILT#{dX+ zS1nnzYT3bWoK;66Q^$kRgZjX!H?<56`SxSf)5|`vrX?T8%`Lyz6?%8Q~>5DTB8+T{hBRam-mZPN;z3a-Oq;%z!U1#i; z)T)92*Nt51<2|d*ceHKjuU6Xn^7n?#$G;3*8o|@(gP-f?sh=Jx?HAGRi$jO9RnoOB z@OFge2Zw57qdJJ2*H$dAe6j1?wEBUw-!>oJ_|umnw{6eurl5NAmI~?U^j+I7?wmWl zseh+qQ}^k{IW+p4?E8J67p@q%(Jn;T9UD$zv!5Q^QU2C4?b-|H&_moa)1`jLom?YjmpF8{$>d)3_YylvXam3KQEbn(9L&QDzaB;c&CtW#|0+V)<6 zdwa^!7D3B&R>&|lLo=Gw1Ki=4TV*%ymY|K9pfTKe_xO0(^71QngX=mTcK0*8&u!kg zwrA1C<7%eQ-86V<)1WF-uNZn{phpF-qe=Po{sr=b9+PGti}mf z7wkDC;0FJsLigJG#@AkYeEZl3!?|}WL)&u!Xq-A1Zv$Jd%(ye)I`c{S>{IL4-&*v> z*X#rp(AB(;KW@w1GkDSQ2hNhA$L$ZQL;qH6LmoveSMN7mTX&*v{#RYi$L}{xx_)x; oNE115Bf?i2wiq literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_right_3_3.png b/resources/g2/track/bm/dive_loop_45_right_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d1d342be7382990915e425b28eeb1ce302744af3 GIT binary patch literal 1645 zcmXAoaa2?H6~}*w5P@mhr6ptWm~JViGeV}18YGk0K4`=T3FD~|(nHi&4K%QM#M-%#YyG2^z@wXz4zRI z?)Q)H{rss`BwU^Q%Ul4!>Z%D${F5M#hR2D>5@P zSFT){m6es9olT)oR;^l&*)fv`Cj&BfM9$9MI)}sR3*wg=eJ;oouOBpbSb3Q5Bgq z`ru_Theq%iY9YrU;oAt*qr!taB5YR0?7F1ayco2@n2$>1u{jciCl{b<95)bzMXh!k z3|^}>=ypd#p=2@%0YeGcW(s1Xq8J|-pOYERM_N;%_8;YFCop;CEtx{%4j zIb4FzS7BnkEPYJlG?@H0XT%pwMFl{HQB*ipD`OfJ9E(O^*W(_G+;7*0y_R^`mrBh- z0RR#JQ~($Oumj)+AVvW&Eino;DrhHRBrIkFB?3$W;1+_27(g6AB^??NNQ$9b0Rws% zA;FKq^8khdiI}1w=vp<$WE9#+!sF2egZ6kl2-98+IY2ad0wY~aGG%VIGQu||rS_EC zvuF-1xuYm} zpI4MO|04s3>qI!%J~MGB4F;pC;-y`C+s~P+jyZn&vy*Q_^2L1xWxT7%#{O?JEaAMo zf8ISjD%jn94Lv!`Eu7}Qvv~MHGVxT~X>MXW<_(Ej9(>nz^o794`N2U~Z{0R>@T1Wy z<;O1G%xP&c9sPYdsg8Vg=(C~QnGNbO-I+p10E;zl1RQ<$^*C3yx>1PZy1iES|b^r1XB}iE77W&6fMk%_oXv`Xb5z&2n~T_UAXgYhAaersUGa z=4ZDw?*J4&T@0ujx!Ye66un zITkD37!owl_?`TnjEcQuGc7Nv{(619xU6U0A4Dbnwgazz0*EX8=dyi?g3)i^ROA}QU2FR{ zL>^6byg4zulhv?!nRjpU@7Iby_~W}rCOCmdQ<&$BzkNJ9PZOWEk5t9qxV5#sw?Fmu zCvb;Kbl@1ZXmJ1F>sKeA`%P0KcliB-Lu^rSrf2?%?N*x!afs?nWr-gipDEpn#u8am zZQTPO)!*cQS-;h^P&1W9y!V)a#g=wY50F>MiN7suStr?A{r%TNJGd37aG~^@=EhXv zT$84Up(PetL}N9kFMn0oJf>)D>-pc++K-PcAN%I{!U9=wVq%~mIqvG}nYJW<{p8k@ z*^g_-_=#HY%$26&mqrdxGnx4Y*RJtbLuG5$_tHmVAD&+uZ)Se===gs(9Pf`K&7bz! zOFpw{ULohFlqap1b{+l8QRC$1IoG;9eZ7ux?%uNxHTi*mJL@+rZ8IF4jTj-Q-NgLj U(!GuUN;3nhDn%6^zPzvP|J_LlxBvhE literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_right_3_4.png b/resources/g2/track/bm/dive_loop_45_right_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..122ab9dffa5ae9d6d93ed354a36859e05ff68c58 GIT binary patch literal 12573 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�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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_right_4_1.png b/resources/g2/track/bm/dive_loop_45_right_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d9e9be5bce4cdeee98de87a5b6134ef7553f75 GIT binary patch literal 1270 zcmXAoeQXnT7{`CxC^smxi8X7&EfmveNlqxs5j$w`z#Ei#xEma?uo@~mT^R*0;m|@V z9HEg$>$pLcMrtfrSS1%NFM|U*(m=t1MK0K3H>y-ATbV-}tT4#HpCu&U=k1^8`^V>b zK51#T)=Zu{830hzw4`x)xuWH;R9BVr+3t#E091jNr7ISd$BK%I%F4>Bs;UVSCa6@Z zi4!Lx2vS{LJ!#S;oxxzhaT7@r3`4Q3o##2P*BcCmV=+0IOlPyjQVBN!!UAYYZMSP( zF1_1h^7$>n5FL#<;t4*b_;dLPi6J(Nnxk}rO)s*>FpnSil8K-#72~pfzCt!KR!mw^ z;J|>J03w4#IV9oNWTM(q3WWs|EIHt~2w~Cy01bcxK{$;@KvB_Xj94tkX}Ztp%m~70 zI1CdB6xSLEor%_497ZdL*#w*wEqsXdN>m`uL{bhp>(rZ3lht5hFp4$XIg<0yzOW-K zbFv~NvjL?L&5b2A1kf@-=LC8WFp7vdth2_9_5{HxHh+$f6vZSwPGefujJmCu-)4!j zWSnOdFPjPSdC6N$1jiH!=93z&*@)S2vy&j*4C80nklP*e`xD`?BFnjSx>zhifO5bX zMDVDFjH65nbLL22-X1Bq<3%xDiWSB)V^EE0G-jR7sy8s0iM3dGiuO6m%RDiEpf4KB zCY4f-01gV_8I9o3i!LnWAtWCY4>|iJA(IFdGRabD6cPZ~0N?=-0gwRb10at8SQbq} z4-cgX%w}jK;BXKifNTX>8bAg>P6z!sjL=Ya!ITeXBj71`GoVOdqY)RY6Wmxpv_>Or zJnmH#sZda0*$Z_7+@mH$9Uaj-WFwcgh()_pa>vJlsc|_6Gex5onDvO&q_Gov7lV78 zlqk3&0U<60l%!P1CSfUOrYI-_m<14)S@_C!&xCqCp?uyP3O*B`N|AOu<8rYc4~Lt) zW>b*BB@$0irZkNeYzFAiL%|3`IFt#fQ03z{&s5)g`U9JmH#1Tt@;C>I*}LGd=;s#_iW!P@IB|5_x*!4 z{PuVwcYV0wR$KK@+vO=&p4YtAeP@68u4@1vZd8wKZ133DeQD?P(+|7OudH>y)V#BD zzpr=I8>)F1XJ6>(RUviXb?Wb~c&>hR?JK`tI;YHR=&E~k;`+3Dr2gW`y@6?i{ST5m z2GeuvEClLayS@UlkHa5)j%N)jQ}@tk?VFu*Jg@3E_8+_bL~}9J)wB2f{om*FtM&}s zEbQ4n!!vAc>*zVV?N}!LvG2kD3i{;X4L3TE{=DX`W5SKm zcO(6=_fDOdL5^&8J-YhOI&aI&H>JPY9O;8Kn{M4d!XEf`-L{Tp@}i*z%KtAT&pI+R zr}e_=E3+0HT03v*7<-=e8@(1$Z;myas`Nb(e^?rCN zasTS>Ij7rebOH6~oyxkGb+zb6Q@36_bSZjuVQ%GMt^Lo+)NYM?%gt7JbmU&|K<{nq ll3g3V9_3%?JhSwPYGn3U)8gT~i_7pp)1v0a?_Yms$Ny`&Kvw_& literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_right_4_2.png b/resources/g2/track/bm/dive_loop_45_right_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3a0436ffe4405612653dcc2efd3de62b721a70 GIT binary patch literal 1559 zcmX9-4{%a-9RKYPV;fB}EY4A4VUePdz8Ni=uZ>MyxV_D1v81BiOEJ-2g&rm0f`+UCb zO^w>J((+OOKw15Y+Euw)m5W!43v&77mLCrRPym`%uCB|qd3kyH`S}F}1%-u$JRYy8 zsEE(!7Z(?ol$3~NG8uv>H5wGhbp&CsSV)J%;r04Mp>Q-B=eSHZizorA2AED@Fo?`% zsnw=*y3}4D76=)ch$Y6lk||oF;Oo@_QYW_Sr4%9eTaW>VCgRn{LL@inOmp;9CaRSH zqXJk_K;irV$&a{%iGU~@lfbkRW{q%~f-our00Y3t=aWLAT_U06a$2n(z_3A+DPgxy z`28>vksu-&Dpq1rwNb7m6?!{DP-=@$;|S_J3{J<4Va_B~Nt9Zd8dvBDm4VcdPR!{y z`om+2PB0?pxY85WM zIzVU`3(h)-gx8V^Ix-RO6dQ!8s8FPmEA)uUgleof?ji`E)f#fSB7Q#`4kzRBOeO)N@ci0NvPEp9p*IVmf1os z&tM?LMcHf;1x6j;f(z|NDP>mpY-rGlGd|N`(4L6+(urs`I{{Gu^Z-}@pa2L0FbF`3 z4`2?M2HGqzNJB1x$pMJ~4+_Fsz+nL50Fq+pLLiO7uo=djkfXs3;Z;DV0eXyYCd78D z!b52TG{Gt55{J!~N~wI_o3O-U8iN5h zn+cnZM3fGd(u*QN4HD5QIUH9j~4qk@&vbjf3ZG4kX=_?^vtpKdlxXT{B_>O+xh4n z-}HYzUHVVwWapkmYkxboMIXp)ID0K2Xwu`?cTT)0h?pBMpYz&VtRG!hn}2`osXxvs z8&1~JhF*Om?@vMR{vB(%vk&}m`cvM}&i;Y;m30Sr_X-zv5e2qQCXNk}B)M57uZ;)ep^^ceZW*!*|xOTtizWy0+#1f0$1yqfh^ABm%bx zx_0$UJV@PBzNPE*uE9 z_t8_A{mfsT^ob^3=aT>WCli;QXKLNZ&K_xNGq2N^o!oXX-F|RJs@e77OWBTJn=REd zmttJck*`9_Q+1T_wX>*T`*0ub{bPv( z;KZ5x8+u#E_llkl8+vs2g{?y)o9XKDYa1(4?%e#}c+H09>fMiA amo9AEFH1eq@^#MLpuVoL_E^nxum2B%7|n_R literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/dive_loop_45_right_4_3.png b/resources/g2/track/bm/dive_loop_45_right_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..c35ad2b7f4d79c7e38b4fe036d3d78f1edab3c02 GIT binary patch literal 1466 zcmX9-e{hR;82`4_zWupuvI&hgEY3S}WW07!K{hF=3w=9pPn_uD7NlhLZkLg2%4>}- ztGI=x8WRLzX)hypN~40zf*@SDB5hw578SpG*&5T4w%^6M`#jI*o_p?|&mW)9(@<6_ z$;-~q1_0zOEGb@+jPhYz0TU(&eOv%=02By9G8hz_Z9-AIP}qj!ew8XjQO|8Q z==HKOCRfDb;~b#^m5@9cg(*!!ja967O3fa^9#FVx6-U74OSnRUCshjMq?k0|2Ajg> zCfz~GN1KCDM|i-?5CJ9uSSrBL0n~&DY%GZjm3u{GP-YBk>@kxMw&6UcQozf+!alP24D`4!4R-m5)PN(@s&cMMv5C0$zwW~ z(d>7)XkRcM76FA6(GUzu!7-_MR-MRcAUsx;-${kM)@aBVk3WYZ0Av7Y05AdI1i%kK z1OYG!Tnu#@=(IyRgrk7OfLR3G5c1xAmAVp zK0_|zs0mD`lA0*B-As9$=Ah3RrF}3S7D%Pg4Im95OnPBR%Dn?yud_xX0;}a6G=YFv zE+^D#rA|j;e7%5g5n)a-=9Th0ab8r$g$fR&P-w-VTLgpBWcUSBa{hVy1K%$xCBWy8 zyVd}ZTDh?Ji}Gdl`7wh zZ&|y*-AJa5K{t(^L-E;9S5K|kKDVZ)B)`7hju$SNe(%Ls^}~fN+aHsj%a7X&Z_N9Q zqU$P3Z_)DNfsQN9)pxI3uT+1uSHJCA&&O0l^RqjMdbs>#Q-)<6W5=Y!ODD1BgnHX| zRh(?fUGs3{jfH*d@6K~nmaYrUzBRGu>Z4wF$IZ#t_U}uX@#3(jvfxKkk>a_}2TA_x{`b`tH)-r=GItcV4J!tZA#T%^D*x z96A5G_s^aO8?R42I<4v0oB1!EC0eHpJsI0r@yu4VdzEY`wR?BL1T-|UD4yNK6ka{l zoW1K@d0*3J>`KS39Ss}3lWq^3f0}sAxz*0D{c%A}-kr{zu3W8m!}zM3C4R?7c?or} z3;*(XVmRy4fj8(Uns0b)W?t%a^TpxxhU~6lwQkpiva%DqvwI2-Z)kb2@~00k`gp>I zhgB}s#qkH%o^E_pFmunQ`+qS#(`F2f+IX|`fpZHzIE!7yWAQc22MgvypJWXrzul#pbJ zvP}pfA&IOpznglN&*%5up5N>D{qMPFuDP%Koa?;Ld0*!`_kGUX=eCKF&S6F_MgRZ~ z>*;EmfoB*fA`H~v@3iBY4FKSNj=7-ctfwadFo0>GB^3=o^~;Xxmo5TcAE2TJ_DbCZ zrO>Gwcg?3c{}P?w=P02~I-DWJ%LIxBd70tzntXI)L8-U|xD z{zn(o_K<%+>*yJp2*^swNK3($!1B_v@?t4k;rKT2npxvqfN0;2^LI z{KVcv`km7r?C+d9z~tXKodwgWf3=qmOsD&c&h|^+<4$$pC#EiFf8dwy&jn_H$IrG? zhA1C^qx#x<+F(U{G{7GU8PEV2=;-L_Xc_3~=?@-cU_8Wn_z)A*AbQ$jpEVv6FYq-Esf7RV7&!DY%^M9thRJg9i^W9pX5Am_zm?&q>+8 zeNcV_jxhioR3KSF;J`5|>SI)t7XUxlPFkw{<0q9pqSQ3Bbo2}d8JR$X%A)ah7EQS^eItg_ecW-thyEq%sj_U5ZF+>vcT~9v=hb|dl~0K^78ia_45x1y%BaZ{MPM= zxcGYsiAnb#Jj~3>&Uu`hm;a=!yrQzIx~8`7dCQB|w)U4DuloAmz8e@E8XlRLoccID zGy7@o^YXWq)$eQT8=G5uy!Lqhe*9$iZ@i9yybjRNP}9)w@uE85yGQ&O4ed!8y5s7m z^e9gjLD_2ztY`0Lls-Es1ULK2=16?QctTiiLS%W5+CH=Y8L{jCPt5)x_9w3q;1D$x z*m=~)05xE9H$v>uf&Y<6R#tz#nSSbXwERnYRnB0w(Y#bGS|2y<8}rI%W>-fK%v)CB zKE$zE5^o>`W`Q;OfjVBHXAh%uey|e_UC<_aj9qCKv0t_a^>QwssKXR!9Ez7MPZAko zNue4FJYScm$%v$iSSdjB^{OsNS<>8l0u4U*a&HaaaCjmJ4U!6c!&n z@G)%Snks#zi>Yl)VX|@Q+>Sj@u_{;TN9)1xFRL)2MYFTJK8sD}EKz90OTNkk`}!ik zEB$ugPQMfG`1pl9EzQ{tPYIp7z!iRNwbM}c^94d`SZ2iQ zA@MW9AG~w5udSpko1H=#smn{@ShI*Q=#H9osx~XLi?t*~v{S#GdKtEh3RxSZ08Yhp z^-H%yR+uP2Rr9uphx{rB|GM7~3ZM|=o0mh|y@gjjKTH=|hQ)&EpVv1n4>ImgP_ z*BJ;E{J_TsC${e0kNbE~8;P&gV#h^_>^s70)Wid3;7wN`a_%PW}H*~wlDEtk| zL+-M2LDe?-N0_E=+c8U>M;y7PTEw(lrdoy{OY-xH2A(-Y>8KU~i)VCi5;)s)B=StJ z8C=x2k~4jJm8zG@K#NTX;A`9h3mjSHY|;|hfzR`*P1@R#k93a2 z)A)`A*Vb}ZCuySBV-T}dl9|AftBlr?U8y>XK7p(G+V?CRSr6!FXh{@LMGZLTnKr~6 z{PDR@``Jw$)}f47>B-GGc79d)%H}M^@+_`YOMCF`jr-@Ct|LAYWyA@kaf& z+5!dmblQ1m{M#T$o7(Vt38JB9+wOa7_h_0|wCMX;PDC5NujLY=GC%jdU(Et}__VbG zp-XLpZZ_h3V6fFfnpUUb^wQ{^7Ebc~YB4cFa_|N#yTobtqKlTvDb*+~R!hz>R?{=I z|0ayL`jDC8Sag^rr|=fzf(j&?Wv!=r?!``5`sL7_g(;yq<31JMyQsXK=8_~ZaCf*l zN4Ex@ZMfddL^i0Tmr<3>Bzp=ia7n3 zVnEvUh%~XX_L;>wQ*q(QDBA}|qkA+7uPP?OG*Vt5eXRvU*U>XO5?!9}in=nD#Z9N* zMIU?gDMF3W6NozYP^>sG^@QYW!1F3S8?S-dIKO^avP-;;js+Upn*F{hYo*xX1)t3B z^JW8wr~ccM$K6+|ri7!=xYYumfI+h3O^5P@6_eA7vz(mm`kyaY$Eb8&_T2G_ReqdS z@b=S(5po@0Lia|MWXS^4cv<$CyA|Qyk)mM`KsHQA+G)uV2;l?p?X6Ri&*Eomm|XFV|!A(Gg0|2Zp-a`QdQxA zc?DGP_&Lpd+gMjL+b0EU`PiPBxvJ69I@1ORYQgAWIFl&-F6+!?;d ziM3tW7a^!VZ0)w_PVyB8IA%oc?n7Xsr9r@G}VFx9^2d z*1y(>=-Jz(Lt?t@E-JOSdB07Z{5<(ZUF7w**B{&t3ndB!I1MC*=XIUPcQ3csy(1>X zEY3*RACt?Ma97J$>2aa|v3#-4``-X3epWIgY&F^c&|0uCK!chj4u>y^nwVW_8#Hq2IAI zxP+7}I{j)JONK(fC}0Vx9Kp5oQ87ry!c@?3(b9R;k2=N_>kJGlqn?@C#_epXyItxBmNwYtvV3Jmby;7An&S?iv zT3U%|#2xWqz7&j8h^v=4dT%tdxcyU|X0>%fO>O!8ks9GrZAR@r9iefy_qZ*~wDg(a zhs>}mib1czftkOa@3oDsDyzEvDltantj@V>5!JSAF17Ga(lxq$(Ian>jFyg#heg<~ zji@Nc0SL%QA-PrZ%Q*LPRM6wdKyjuQ+wnA^166`&A9N#%k>B5X-5x$0nOG)xeMC*% z;N;;i#zjVXPl$BlZ>?yuKYr=nXcc*6s>LQkt0R2hA>k&;Fm76in603bqhZCNI-HXG zhGV3=ZX|e8li(OGb8}=`UFB{X=&(WS-P}OewRLvo$sl(JsI~`bDA3A#vYF8VUzcrl zzKkp=EGR4DOn>q|IGb$fZVIR7vQ3IEdAoUNr1+#|MR8V9<@lw{2+3ZROS!@X$s5s} zL#vjYqUmh)uX66?akk69`E-T5L2<2r^NuU#6x~#s#kRSr>s&@y{&_u-jCgFey>au- zf$6oWY{S-o*qar0S|iUP{q8?X#18qNQVWgow6}UCX$}vU_yT5m zqSlHO(_7X~EC@E1-!AG6qx*=_k3pslEnT!1ULH$=413bfa&KjBhg90D75X(BKm5FN zg8Po$M{0@24hrCsPi(z-*>)DwWo_G}lerPwUUqROc>y{7Xte&y!0kFTFKNl%p=4v- zq4u3rg1lB7I~B21Tb=uiN?5V;)|^yO-LSkYX{_MM%Ebox= zMcK_{c=a?j=X`IVrL|aL57O*jx?JjzsTS*TR#WQ}NY%CsY6F%RPq+!)x`^LSr>!Pe zO>0XTy>td=C&(1(*Y#O$!<<4JdW-gXC(?s37vxi+W93%p~J_^w(Oh@q3NeD9Wt!40gLvEN=7JxE{Vsu>1P zA=xI(=M`wqXQ+3Koz*!mAr*iDd6lNcl94*o6Yf#7KkIG56%a&yj?apw# zrnb#a{X>eEXq|yU z&E%~Dy6%OqlIrgTPau9^o{w1G z=m51_g(7dg8D_%nT4=H#(M5EqHdXe{jd3+9F7K`#p#U#}nJa^#OmD9z_svEg%Fy;D z)!EzZLZFZQ0u5?PeG>;s2X%Yyw?r`qEP2_{pSxIOVdKF6T!HPV11 zJkTG}fNy(_<3?!PmU}wNcjlSTm^rQ6tz3u)Ptd#mOjY3tBdE5x$l!OR*n}ZO4do!& zwf*BuH`2Q&zeIUCJ+gABqDx=6>A7%*g}>f!$C=mg_m&~i6{F~daqRWQprY-D7p8-} z((QdUxc3I0ry^6}iJa^5DUa*;d?4KV$AZ#Uf&)t6MpG}gS_j6FD?ab1)^*kH6z22h z+|4E>I$lUO!&RI&tgf9jD$-BqN&XH_5Y6B}*CItsynIt8*K%%8S{|;R73TTCZyaDq zCT6iioZx!bl~av4obBFJEkxb@A-q<+t>5n^P>G4*ePWy94tcs>aP(pa>#GGTYE|Y+ zyJCrVwG}$`H=aES=nPS3JDX?Pdx+6mtQg(P*!-BRp@H&EclQJFrN-PB*7=?n_~o|x$S7nzma`J|xzWZU zvDgXWT^a9d=x!`LL67VCcG_32%YvYvxNWC;dkH2b&s1Gk7ytUfa_v((4{0SHFE(0M zt1@sRyXo^jb!_7Nsik7C&8Vs}e|IaKviej>NRCxOz?F2V9FN}TFAEDAl7tUA9cdX$ zEy=KWn-X_(7B#VG^limB&fs=+&AmM3GgH*PfrEPZU{6otT?5gNt{>f~E75-V=e`tR z7z}>$4sKU;mG9kW1ukfJdLZxH9u`6D$%BwPI-W~L9M--KaUnvVpSpO>!7hJaz~bsG z6GrRxRFsDhCcaNW=s`V_+u_uD;{&dDJ#Tg>b+iZM=KDQqH>kM)iI{kBM@j67wyX|O zRkHOv1>l(5D!%QBp;0stPWG^~IKsjAI#@DuIijrBvh>(>VsbTR{N-Yh<)oc`r$vNv zVB;;+A)UnV)UMB}1)cK2f#yvQzi=m~E_X>ijot{q>>*U}D4+j}G4yC@8USH3aKdQs^sGAjl8)Zg(c>iTcEc0%v zRemcVRC-}J+~i;}tc_2!vF~*2nqLvQYrOuoS%BNzbya*`oR-MfU_8XMIxz&+X-6id zomnmZAuPn1E9bv4Y-I89F}QsDkYI-}x8b6$$A!?RJK*^N;Py?=G(w59*rd*j21I z*G1oXL}=_*Z|7WTRq#?V^=d6808nbS+m?W7;KjgOE6!0k8nE{7wjf+^ZuV_!|3rC2(RpKZ+IJFSx znb2Z2q56x^Yc|2(T71;NQ-Gjq3czMW0dA1ZC_vhY^!1jIWy`KN7q`WHkSC<-w$II} zO(?u=o(;?0`8xi?5)nko&-?9q|Lz81SEBZzI8tt0eTUe*0{`U3sWlUxJF3^x<;D}m z{zyb!>Bnc>)Ug^M1+6mJ?fr?5Zdo)w>r=eV_~@o=Wv7w@lq^}P?ML4`c>7kTh#{hN z{8fAJ2U3EWORCnZqWX}p%(|JSt|}KZU3^Q2hsQSKJ5uwfmAa`QaWcJJgZ^eJ1f?D$ z$?gP1>$eWMo&dJ|x3;};_>LHK7^L^SeMX@0Y5R8?Dc|WwYP$kojA&T9_&6@@2xOPi zd>dc76ouuOw|B6A%mSNP&)wt`Ra1ooV=>tQR*&cGIm&L%J;2lmXYiD5#kw@2FdnC}=uZ3Z zp8Sl@h?|7U1kJa9n?gV3Vd=3S*RcO_Dbw;0R7K8fT;0`cBcnV<9xH&&=gS?bp#Yp4 zkGGBAOeBgG4M+dxka{7?4L!eT5u`rp#)D7dp9>kK0EvX1H;eY><_NN;=TzzEd;XWc zjBfo9y;)jli}%HmhqUZxu{-| zckL#5$8Yz1n zo=lYmAB1`ADLZo0C~aeX+}7e33?uLIovau-wH$RVwreYK@$tmKr{EuANB;}||9jt1 zi8M56y*5Ytv>%R|QbH6zZfOHolq+hJ4ttBtDw!w>P`+fF!20&#(5H-u0*wv#anDsq zxO{BYh61nE%i-->hgak2b+2Vo0t2ihCzm+g`!e}2fl)NIYZFp7zA#W78uBqwg96w} zsjVs&Q@5snV~X6ZkKLgy@EM2pJW9Q|V>L29R)&?y8w+mQGDwGYj>je;+5p}V#sV$2 z?x5G%(-3j@=iop5cR*^uectIIOAL~0N|Grd{AhM7oKe7;2NXP3k2n%VNu4qgw9ZG93NSzdgk z_`1Lb;K`oCYM1?j6n{37gW2{=dq@w3v{ZYwH&43j^Fvy>QHB1F8~3}4A~LLKj-KUj zJC^VO^IFf0vFW?F@u-EbXWI1mI`(^ke&KD2UIti zTKt1C59TW}bsdix+z~jdei&nMNyw<)C?ZTQ6%zELrPx6*>1?qq2jYZD7~SyqP|CBV zVe7DtgD~+Fpw5A37EQyjc%Z9pDu`d%XoZI1G__R#*})Bfr)Lk6trr+LhUlb<$q&ou zZNC5-#y4GG6|-iGurmI(%^7Tdgrk8rV6dUKvfFbDaJqaxpZmjyqa0APwYr}AK;-Ni z!5Du!c|(uN)yn9Dfb03yabz{mm}fJY;o1l3M6s`w#605^;mO2E&} z)t!X&Qx)9DMS}WXGE7il-^2^ADtG~WbE-igVg%%*%W(mzM_;2J`jxmGXs45r|lr3<80GNz1}yWuc%2l;rR3h4O>ClZ5sleqv~1 zNN6I?!wW}n7udr@ITF0RR0RdWe1YHF=jLH(_y@c@>6aHkf57}u9xxdxX_%WE?5`zA zURpjN$gc+dhb2fB{vH^Z8HPmgCZaJ~J{Wf|p}#`xy)*s;VUH3P=jO3b3UuDTROW>K z!_LE-=(=y?goa^UF>W9z32dLtzu0@>od0yzzqD;HXP?er8v<7M2mZfU|IU5i7_>4p zL~0Vy-g}kmX{rkDwHN6`K;xW{`>F!mS;k2kfq}|Mqa2}fC?^Fd!r56C>g0?;DF5? z#lJup6LDZvqFn#lsy!$t5K2K-)=5@IP8JGBDS}YWN@%E~q8uFRC@X_fKw)H^&~V3n zsJ(tbs+;Jk3d%}J|CwUqit=(M5ZzP-&*9v?{r=3bz`0?}y-<5jlTm~#$SNpG%gf6v zD#4{?|1>&}A(Fs=+r!-76tJJ;ghpzEh$t{{aBe6p2Ik?8-Ot$T79>apbS!EwPC?}T zbdU>DgNQ+S5r`H9f~%_FANvgc$TkFrlM~7drHS&wfVKUx^T6Wwod=TA(n#r_y!PM> z2~Id?|NqW*7dY{r>w&KSz`~#`EXZ&r4U_{!kJS*dG)~6#6Fx63PeT zwBJq;>t`1FGRhr`0q-8a!u9ub+R8Z^ps&F2+~1QSAhzFw;{Vzf-^-Z2?g1SJm6m}@EB?E~ zV7~~%_U;+KGgg89Up`UUH~7m<1}yh84ZL}Q_d?hoH^W~(1Kaz*dHm{&|II1{1pcYy zZ~6Bhcm3n8zvY3yW&BTc{o}5`<$=Ft{7-cKe{&b(pUWwXJ2(sS1s6+0=O^>Qot=Qm zISVat$p!8OJaFIuH8nL24Gk?VEgiTelb)V|fdSlB$u1-$1c$>kG}O$^4bW&C5{VER z8k&@pUQ$xs($Y^RFRiS=VSt)4U~Ir-W5a^S^ZN$E!XuTFl8tjq9O|1%ojsA`Q&}34 z^j6AD1OxUEEB;tCB%K5=57lT+vg#}$klVv&$yw`5EjrwQgCyXq2E>}v=Mw0fBbf(t zSyno^DYG!jiUVakmO^O}0svzGaG<9rFf)g6bH_p;S<1@g#>VYf>|jX9e0n;ixtSZz zBBaI+Gv-%zfank;twP}FSY=YOMreUSe7$*Ar$aRv%df}{(-BfOmoz{t+7L7d;l|Yk7ma(vHh?)Z8$vl_r+4zObZ{y+c{ORt#Du2TZBX;vfjSVfMLvX)|7DCNeI zENDe;UmeLvE9G3YMm@>AClo!HM4BoHU20BR?_0ss;K!~#G80JHi}e9fMO0%2<((dI3>%NQjMo{hEvE{z+T5I0tOm@l`%aY%^u<_86T^Yn}x2g z5AEqGn4RsRfOTfEj#rwlGZSO7(SdL0!Pyr89IKV`DFFivo`Z+54 zqa4iUPX=wkGBSFa>K00!m2V9ap9>tNHCbzxLtmu{5V@9lJ-%4~46RUa=oNS@d(bzQ zO#WHZsCFT&Mg3KA4W6>LVE!WF=O*8_9X=n!?eg;s_Y`DVt$Is%ov}e zMIrk|kE?Mlc){-(4@gfx5kHEuQ&Lyqq_L{ilaqjT?qhisX25aw$YO_mJ89So8b}PvHDq^D6 zV9w>7eln&mfI%XLf!^W#Xw8S%_72r%cY%~e=ozXMR&;6uWmH+@X9>yk{`>Mi$@9GL z$9=u78PlJh4gi?pUf#W`QM(#3x2?I6$0pr_05pTX75&Q^V^dSplqpl1o10r&T3TCM zr%s)UAV^zV+q7xZP=~`o5Ke}nd7hOdK~dyTC=`n&(&EWaNwy z%$ZT6k}TDA3k|G1K)t{o0GNu93DlLw1f7-*Po$)1RW%3CaJW?>ZGIOX@lZ*L$tt`N zl8P~B?lW4%=~yg+x)8-NEBdiJ}yi3yY0qfpjFAPo~YBQ7h3v zWD$k81Vy{*!{Y%u73Q;XZ$1?)>hVf3SF4Rf8UPOf3IHkqDFE^Slo0?M;20QCU`m5# zk;8yYfG7`kjM`sU{B<-t!MEd2go`{{{P9nS3=sb9MI_0Jb}9l28N zI9=E~^2VA0z5})H-?I1YUr$`qmd@HKd^KY*dT4W#u-mcn<<z6O`|**hw{Okcw{6Y_;#l{3VeIw0dH2F!H$J&-&I0NE!^406^5*u= zT|aDGw07Xmu9ouBlM{t+Zk_L2C;t7N`-RGTT@Rj`dE?u4yMOZRIXAS{_S$&w5E?_| zMaO>!{hfz4m=6YbY}dm6;RR@-IUCLqP2e{p&?D2#lWJg@#aKlv;1m8d%iC83YE6@_j5&~XL~}wiAI{!S6`%~2%XLbnL9L-tjM3}uM#^O=E#ty&&pWM}%B-)Mp(C@u`?En-cT+5l8@F0>BP{06++U0RS=xfF)5R z#Q ziAJ4?L@1k0z>=5B3UE$F2udoTwnVh7q!)7LP~H(Oc;ojYX_(4s6+ov(44B+ZsBJXP zS&ag33wZcw$deF5SxJQXw9aUR5db9sVTpySWcOGqC+Ev#bUyE6+2e82Y^H5ChT~Wq zbLucJfrm&uX2g;dnl)*lMGbi^^x-f-G~Kwow$%48ZC=>6 zWY>W`?VEPYnz;Q6yfAO}QDw_0qbPr_n?Gmf?zODlx!N_H+%T*X#yw#Bl%wjxLLqmf ze``~5XJDki;Xxx4;l@7xBHOwuO4e_Sb*?I=pPjsfUvTHz;NCYsFSb0fY5co)>vrtU zPO%JsXuPAq7kpoAYg#|2({6uef05jF?DlUzwJck>;Sc16mG2y@T{c=bbNa6{#@4-c z{H1R{dARDx6c0D+q~hPFZ*~>`map7$c5dVRD>d(L#;DFVS(QP=Do=HJudkl_UfWe{ zI9#=^_oJb2zOG&~q-d{wb>nN(j2(t~`-I}<6R&UTJm069DeuZOyzy0c&qU4C{P;B2 z{=Txaw+_{PdTh(Nhz=Ku z^XrRE#8dlPrMn%s4xc`f4_=D@uHp^xyNgrhGj1>5FZ^77Wqn<-SuPS|FP=HG`S#eJ Q5?!!#QET&&msfxAKl}k!r~m)} literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/flat_to_steep_up_diag_1_3.png b/resources/g2/track/bm/flat_to_steep_up_diag_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..c0ad64d04b3e1a026340355da22ee330a8c3e3e2 GIT binary patch literal 1413 zcmXAoaZrfzIIIkBQ zFmc$j8E-XY)RcKHUEVr&N;+uC@WuhP?DeFYG`L|CmPayiC?cG{=6Uydp68x_p6?&u z?{j497S+7Di{}CW=9O+-U!Ix8ncA4g%k;{dygC4QU~5@LNoLK;%F52p=J9wrIXStx zxpU^s;q&=1nZ`60U?>J_FVVwjY{v<}X&5QZfHkO1iTd|Du|h{dc_>XFOaNV3;p zh*~UTZZ`~t#F$V*h-4%p*GW}0sZf$K4{8U#bleG^er0O`a4RhHWG&)Z=1C zh1xZ8uU;86QJhsDb(#`BYbxZN;(Ra>76@@Es=;srp=2n^uGhO5#&5TW+-@!qi1+uW zQYi?;G>|&^m{*_-im3={h%0RgttZI@Q*3|QpPY$K!2(nuz(pbzBB4;3UM@GONt-Tn z%O~d?b+9V0M;{DYInI|%axkMMHUP|AK(HdxgXjWMIwogRT3?z8PB|kpfjEq&q(Xor ze3eX~B@iQpnGI^zV)QsHL7#&Q`;xIROviDx8U_H20SGf**fMfY5L?ZzL;`m?pJ0ka zlv*uiH0sS}8k1RZnUlbLN-U(7^^<5)BY`>uTBOj0!2kg{bte3HVZp@XAJ|{Mg#yK+ z*FOLt8!KJEu43Ea(@pAA;TQ5shTyfu7W0wa4>t(rU-4Q$Te(NRT6A;iU(FZte6y#D zw=KxCXLr-;pQnto=lYU&cl=ZHd;ENtqpLc<+g0SLKXJM69zwj?)$^>Py!L4QY<+QZ z^BX&5!%s7tmv6YYO!uIy`t9@xTKar?Q{DVcn6Bys7_g<8tuOZ_m}6ZV5^Y(_yM94) zx)sNXJ}I$c_|SFs>S1Kzot2$E#ZUDGe-NI${nCBj#Hz8JWi>%&q9-M3|Dv<{ee+&? z$){BxBHNuM1)lx2-&b4SQDAF3l2>Ov#}mHc!ilCUvS2jbawetUJ-zE9$0+7C$;MM1 ze@tZMa!%D5gX~WQSadPIBd+*cQORpq*YdH-g16V?Za;b~H8WYEFjk2UOf?b@U%VZ? zQzQIQ=wI^#j8TXlF9ggAX4JUb?uZyhyRE>NPk# z;J0-k@KQ~~_;wh*JbtzTxq0KpCT2w(tr88aeWh+^tJmxwiH_2P(_fd>Ho{-2PdcV2 z_w9)UZtOFSj9hC^e)W-^m;3qo>Ot}8`thR1nV|zIMPWnd>-Wia#JrTRZ1|cWiQzy?vVB ZQ(ZE2_TX=8GFbwpC0o|FzVYs%{{eJnm^c6c literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/flat_to_steep_up_diag_2_1.png b/resources/g2/track/bm/flat_to_steep_up_diag_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..43ad8945e6d227e500951cf9bfd00d81acf275b9 GIT binary patch literal 969 zcmX9-Pl()f6n@+Nll{|n4x_{xXw*Sc2$Dk%p$5rnwvKDcrZg*am_saq4mgECQyfZ= zh(V^BLkgn|GTOkmkyDxu%8N09G6pSFbmSrwR{&%H6~pvW$s!1sqCB1-$?`#?F}18m{XU8!f-P4B zoRLXhrK&nzvslgLjh<-xQYTcru^OZek|UUEg;!`vy zDhW_l0B-{AFmFndL-yc&6ycq?#5^&(`Ah#T2A!|Z5!h_>ibiNo0t;5m>)sL5DU!>tzGajOGQ3qw0e{47gQp+z)+HMay8mpxJqC_Uxf zyzVbr;bC`t6wJ^xr^>*QSd}T&1+uBIW(9qOaO3ix0^2`7xLT0b?#`?G&wTox+dTdLb0_T<@~?an{&@DkZ0)aGulH_mN7wG` zoS)RMoIO9lAH>Hm9`ByK`|!iJ^cObIUHtlE@^_XP!IxkBar5^6@$(OFsW=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/flat_to_steep_up_diag_2_3.png b/resources/g2/track/bm/flat_to_steep_up_diag_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..0c089d227dec47dfe83c906fb59ba47e37847b92 GIT binary patch literal 1095 zcmX9-acCQL6n<^mUb|Yuh??nvSqXUJ*+sq3Q^UO3Yl-biugg^;3v#j>4I1^(+Xy4m zgGHA~)MEyWBaYzCHehhUbrQGyk-;srlEI->qZ~Cz%Azeac0pPw@-t)bz4!S3c^`b= zdmqkB`-k>Cv&T!}|OC2L=Y5ZnvAFJS@uy0w+l!MUmt2csiXe6pDtiVp*+roALnT1D+cUg&dKH zD;o18lD>3?&lSW{S*e=IdP8SPEa)4QIj0(QX%dlDsKq#2P6w+6*;-08Eq%LX_;C

4tLFc)_c98bLcQw-g9f&gRtuNE>HdA$r4-Edrb1S%!shVmCZYq zGf()6jhEB?Q@S1mi>sS1DUFAw9@HKk(;s=Sovd;n6Kx->@^@C^Uw{x+>wnTTV^7P* z-FqrkN%Hv3zoubN%PZDOZFg2*96T>d?GO8JyrP-Y+k`|P+KOl1jX3KIiz0h#t7nHg zviqbzwmA1)`?vY4yX0`HzwUJJ_dgRiyV}*=M%~(XOn+X#R=eTA`p3(M)t^^MH|6dr zb?vu1@}G%s5`E{o?+wl$IhQ;&dTmR6?wf(vygMRA^(XiGmvCE;?D#FwB%E5g?Q72o z{wlL6&_AGsg{h1nmc_v_BbRTqYx zoj)~=)>u`uyxD!kAn~AWoo2jd?d4Q`(7xp#lE8P*81@J?w*unw;a1n>Me za}1j=HlBSn=c8x8oE`9ScUxC%e!6r_zjtb9?FH@ri`cfKe@A}p{_^Gh0cu$KPMk@jtf7S+M{B literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/steep_to_flat_up_diag_1_3.png b/resources/g2/track/bm/steep_to_flat_up_diag_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..093080da19f5f0268ea31a4c00f321fc6e23b85b GIT binary patch literal 1194 zcmX9-e{2(V6o0H+uUnZV6e-eZhn-eAu;8ILQ_W3pSnyznyGaKnDe=IfHC)JH8fmb> zMk_S)h&5CwOO*p^(m@H+)KN%-r&dyulPpqVNp7)XBbXE{FyhRKka*-ex>%&^7bY^r0UCbg*vC;L7GWYu2ommKL2(*V@|J*4C!i z>oE*77!2+0?H0S;P7qF-rZ|q_d9Nr6kw_$wNM*A*MVY8n>Wv2B1j+?0WAu8>fq*R- zaz5}!x^6R3bYVqqbXl1C*;(y zQi-dzv^G^RQDEl4;s;v@91=#REbgqsTc8Bh6VpVwE-7e?#mziv4Z87|$Cc*kyvV5$ zzMK%NnMl2mm{K#Ss+i2A1NRW5pQ3{t7vuS4Fqn(WFcTbnLVAtP=wkrs>FX6JAx?{bL@8}&7pg|e}DF`ca_YD1&I z$6z973j1tQ08fUfOq9zf{l!eUTu9c+N~3WDQ2-tQ5kLaS02BeL7@#It8ihoZkx`}0 zIzS*GPC?EM6&4T&NU)$7fn*lt0;m*46&dauPXa@Ohs6TCB^<=#k~=N)`FuoGGqswE znp{>t5FsNaSy#%$uKAfr~(Kzy@)pH9>5w2C9733nRo!PRHD6JE)d{DA%Sp4NN0i~GBi$_Cu@tULNcj9*J*giFD2G z8%LM6G@coqdCu7N)b^2V$Jv8(1{Td6=-%D(&E=mq=I`!0|Mby?n>W1RpSjidyurYK zvHZ)!-$>YKGEH~qx-o2vn%rt4s5!+c9|il zpLg-=Z|9u(1oUq%yXnzC+~2NW>ab;-5 zlG*z41wGh;giQ}x(G`tkJ_i5+w2uQiVzeR0ORsOQ-5kof)Vxy#pdAKvx`op@-; z9&S5nII?16=aPB<_O93M^8Bh@dFM{YQoUC@Nsju*AHTF&zV_0qMRoDbt*27_$ewen z?n>JZYVTh+p8iy8|3H1L^FRN0#J#~g7bdfREUu^2tAAl%-HT2V%HG>e!D02v{=Sp1 HZ2s_nio*q3 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/steep_to_flat_up_diag_2_1.png b/resources/g2/track/bm/steep_to_flat_up_diag_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..251476d3532a8d2dc3c050cb22b09314a37e9ff8 GIT binary patch literal 860 zcmX9-F^HpR6n-=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/steep_to_flat_up_diag_2_2.png b/resources/g2/track/bm/steep_to_flat_up_diag_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..251476d3532a8d2dc3c050cb22b09314a37e9ff8 GIT binary patch literal 860 zcmX9-F^HpR6n-=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/steep_to_flat_up_diag_2_3.png b/resources/g2/track/bm/steep_to_flat_up_diag_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3cf5dfbf460cc59649faf22788a58d2fbd37de84 GIT binary patch literal 1140 zcmX9-Z)_8F7=FhFw=tn&F%7Hca8(XD^&ppU#xopnBXv34k=>HU6w>KMsy2F>f)z?~ zfd(5nw z`+l@zD7b8C-%RsU0sV8 zFJ7`_35H?a-Q7JsJ-$F7K+_b@bCM*;ayTAWQmIrnn=h5jN@d1zTCPh|z_B0-z2UGo z7Q+)sDy^~EoLDSH%2vE;YxPEfC$SLQs|Y?dgzGYqkJIBR-pYomCB>OeH=V+Ks}l4> zgoFeKx`Y)K%+fryqSvkZQIkS$1TE+YRRRDaKm@}Sk4N?Ub%H3c?6@dSN24`Wy_L@+ z%ktCS0OzAboQ)7cg$${*th4bPpE86@St?W`rW3^(KNSqH5-G?`SmBkln9fJ?refM^ z#mU&sVtwB7aNw1|7X>^CgpM(JU$8`kEl#mRT0LH9=@m3Cl3tndCxWCFVv90gj!Sk* zu4Us5Bh|99^R|H+6_1x8$Pmp$IX)ptnk?rMiIS#S`MhnK^_iJgtA)U?0FlM$qK7a0 zr79V%^XW#o&`gwD`ixs@F4X2xFX{0xK3@l{P` zEG~J}2(HJ-T#_@=QaKl$Hq@GxYt|~Rdkb*@A%Hl54qyOG12ix|ZHPQd#*tA#PE900 zp&`S883acJBmq)GNT8J1-V>K*|yPa+NjOt zj{=?S<#eA|z#}H1IIP|Z8*ZXJpRF#KbyRB+USM!6NO{5>9+T)~RM6E}A)}U!j9oFB zP6fGjMi7t*$N_}fUZmS}58zKFbBzX*%RWH7TIIuGDHfBHNrk3T43*_*gQqQlni0un zD1ah3QVEo!k;x%jXdgfGZ10`>Kd@(bNP^9CS9Z7i{=tDQBWpiBmU(6D!up2>_9ElN z)H!Y9rt;*$*H6#NC)XYMD?K|TL*Kolx#>Hr517Qso_9Yvc;VOl)Z34NzG37|+Wq;5 z?*9JEJ7+h!l^wOG4je|uigDkeSg#%{(NTcVq=$g3?4qEcMV>7=h3&0kJg>< zo+h5yeEIr|zkjbyPRP#9v;EiHGpnPmW%p(uUw&z4*U@jDxp1Rv|Gc2xI<({3jpC|x wS2yhu*I0eWO6rMS*N$EvTR1`ega3<7zV~hCzLDM8wsbJKZD`=jt)qwj2d7i^{r~^~ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/steep_to_flat_up_diag_3_1.png b/resources/g2/track/bm/steep_to_flat_up_diag_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c5812256ce9bb6c04b819c1560403ffec1d5c35c GIT binary patch literal 1515 zcmXAoe^8Tk9LK->kUb1>gLzGvIdI~_WeXqkQCIf}4>svB9_1k?O>gKCId@ zWa7k?Q!%DDW602% z%%)O!v_!x_vleZ{VHoyW;z7q4>xIK1o&b}|R4Asy2_sG0v|6Xp=(E{^E*ISh}#DezSz^q7|fFKc$iSA6iaBCT&qwRNXn{7 z9y9rDEj=DzG{h!`aG)VM2AXHqi0yir(}a7ibik?W@tPw+XDkv*Bt{?(fC>Nu0CoVp z0Q3Mb%mFY7ML?4QdfhM@p`?I8K?@H2N)V+0qyc1v(1t=c1^s#$w!)|zJU1Q#Bmq|fp{8A>Wu*cQjgfTGY2tV}?!AM*x z0GODgl=IZMSWlxS9cee~-7V&Tw}lOPW6=;y3}GY*{QyP*gh?-~Nx2t@EGFmhFy?f; zzz_}-YBjCbYfUBwm0K{m14q3C8YJZdlq{x_K#drhrO=5&KMq+k8GdY5)}PORU}I$k z4Hn+JSqnhw!Sb?_sufMwT34Oy%pc$M6YPKcS-P>K{d{%Pg{_cf^trZI|&+lkGOE>?~ z`?!HRtO)1q-hb79J-_#pv>BDRPZfVfV>M5j+DVc(2XU0qw2Up!opy=7MVp6>>is7K$(=9b3Q2hkN&EC1cRs=mVQ z`zDL?pd8F^Y@ah)TyP=hT(xRo-m^n|{uA!Xx-%vZw`4aTE2$ps>Z(KX(8z~Z=9cNneJ5`<6^GuqGH)m+hjEX={{!6Hoo@gD literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/steep_to_flat_up_diag_3_2.png b/resources/g2/track/bm/steep_to_flat_up_diag_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1f53d098cc443c614ad72a82b07212ba3f3e0fa3 GIT binary patch literal 1403 zcmXAoe{hm@9LK-=`Rs>_8JEmqf+J=5{>_NA449f;b&fTN8{sWedS`DwIu$xdu6E zRZBb+5n#xOnTk1>aj!WQbWBFPa6H6fi-o8f6YFroK$2F9avBUit2O9yMg0CmG@44K zAmGwK=s++JiwJPZFse%smT`?cX$Yij(X=l)9h-#3D2pZLaO6AziHazRgi)w0+RQPd z&uSm?_~M~RI)MYN0%1s&Nz1e8QKu32TF8J?H{>QwH+W>c7$^v!Rv~(d zV=|z2o80530s(U*;!P$aFr&rQ0nAv8+c+vWPwN-bafvOZ@um%dNk@3vpMbHHkPXB< zL@r`!aGsvTj5>wQq<7m*0k1t0@+RXUm`;cl3g`zg4j{~UVadonhHExD$H&D^$77gq zn9yiQy`C}}X-s4miyS!SC9t4E6jh-~wE${)&?JOT4Ek{xQDnj|UQ+zWqaWC{T1kT1 zyWhVGK=!ju(z@2hu9Lm%4w?C-vY+6$@7G6^!3Z9X4)IaR?r_bQf)tc z+19`G#wiZS1HQ8P{CofGJ5VsXuR^N-P0)}%YUyE*@BXM63^%vw`R`sRY@BGQ%sszt zOU~Bp&0cFS_w7&aKRGsXwR^kv+Q>m`_m*f*1-|dNw10YWiQ>S*g@qqe;HY4Y?8@hC zLf#n`bflVAt-mmPaYYZi1*u%t!4^Dd?ijYtI%|Kk?3RVqz}nP%vFlE4Uq64juXoc} zn^k^d|J+Sz0p35z@A&!Qa8A7akxI@je73#r!lWn;=pj^~3xO4Bj zJ901VJYBO}IY)ZuWuE->9Sho@wOd&i6cZX+!4m*Xv}BFG0?p9SmK1v*2mz z#a;i7Ev<0;_(p$cEY-K5T7LcH*MCpv-hSr6#H6yc!n5u7W44m|yOq^{O_uWH*63%w zM`r4!8+k!-7TnXSyIo#aGan4JEYIGvzdip!?ee_mYL4YBnk@pdODM3mBm7IeYo_Zr UL!Q*9nFN6*nNoVDe&aj;18kXIbN~PV literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/steep_to_flat_up_diag_3_3.png b/resources/g2/track/bm/steep_to_flat_up_diag_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..0c3ab55bb31b4fb18648776de68726b28b422d89 GIT binary patch literal 1211 zcmXAoZ)_8F7{{Nj+is&Q#TDqnQHxeRTf5W<=M(u5czFpPGJ@Hdl0aP%!ad>@WY-(z1Zf;hoR4pwnt*xzX zZEYBawYRr-bad#9Mk7U;7>4F~RuJrNx9Io#!{KNmk;-O^ic+iBDHG5Z;8?ZYu64N# z9~6pyg*2pIjXZJ2z!PW3$|d{9ji%Ml;lXQV8%UGGHA2J1t#t0 z3x1&#c2{J7Efbz8$f%OlXw3v^qs&g4@$h_55F#E=A{fj>qlHweTrAdVH3YZ_L>Qyu z8YYeNdD2;C0u_6#>Pgq6Vm(ovEzKY`snM8qI;+9RlP1ApakE^&(OBk91Vg!aLdh2D zWf~kT=H@j%he2|Y5iczV_;kdXlYOO3q*}_>>yHr)U;}UiNB}ZG4xoYoYKUWy*Nx;D zQc4^FA_XBDQdUqnKs+E(hk_J}aVX_N`2bR4@D#imSO#ny<`Q&14;hlI@tBZK`wIoR zS}mZ47w!bgtEMF#7c)3ggs51gnq97Y(lg=wY^sb(H9`w!17?%QUCMw2X+n(@X-74?)!~?d;hvOhhIN3S+t+O zyku_c;6r-V3%8H%w_Y!AYMy`l>>cmgA4b?+p;gOz-pV-f%0v=I)jP)z|M>RdyQf;l zCz6x%uWX&4=v%n(^9jw9Pu4vDbN7<_ckXo+_bj^NU%mqt>kb?|v0J{m$9a1HMDp}d zaBI^qqxhqf`R{*v8RIVfyJ7OOdR~43dGGj=bK}Oz?neYRGPrNX)Y~^V`}f|Zoja6U z?Kf68fA^`r?N4f2YdrSci34whM$TPad~MEO%dIOHtjOI@z$5Fi-6xc;8|vbV$8x=E zI!=wQU8xFRn!0rzTQ+u7e?8p6Sz@lk-%L-7-Q%0Kzj}3EwL|{!_*buu`nd;NjQW-J z*6x>9oW*Ac4vqEyzWIx5&eN->_UpgYFY8>NxZE{(Cf#>Xwea2Hi?3|h{Mpehp|5wJ z*Nt4@^uG@6>RYkr_(zXdy@%RAey1yygo&FEHlEyjX6m;OG#8dWSUbo*A#NWj?>+Qi ZQ_r?B;t$94y#@j3Uq7(!+rDl4{s&Ah3BdpW literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/steep_to_flat_up_diag_4_1.png b/resources/g2/track/bm/steep_to_flat_up_diag_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a24caad65b0f2875b2add4445fcbbfde7854dcab GIT binary patch literal 1069 zcmX9-acCQL6n<^eUb<3m5-@C;W|(aUJ2c2`oO;8nUTapa^vZ6UYS3%BZBZf|a+84h zfU?>W#+( ziDW39VT_zmEJ;>Ht=XAotH6<1gc((MpB4$|GLcuQr4&~&BDIp@ET`K}q1UN~{UDK$ zU_lqLqJmX2c%$g;*8Hd)LR|@M>j+hY00Mx7VG53Ge!or-1%_D?gymSQp=q1>JgQXu zlsCxwLPCI%h_FING)mSPHOHk)K5L1EnpAdT0oor52N{v%Wjd;GN?J(grF>Z_+gjDh z+U;VqSHW5Eir|YuAPIzy(Rp9EL_{mBVn;Gfwb0S4Xh|TwGVM=<$xMVP%ABQ&c1ms- zYRgP@Dn`#XQLBo3X@ZPUbd2Q^qL`88Tq04*WGeZ*T`o84^-iaQz^?#dU{n$3EWcPI zV@)pIiWb@ltE1PurS^8Chek;pr+vO~ASjX{nPF63NK5@?$xr00U`h@fDT{+ECaMKKz#@tN~*{#Ag3V^piq!y zp&SNB03-rZd?-Vqf`H0#R7)eL01twvf#)D1U~$=}CCIEEE*50VO4+vAZriA@<&OcC z9A$N%PzXq6LU9lO3@*MrA&^h@S(auwj)6# z1&~Id9EHj(vibh;(@%}wdGG_LkIjfMzW)2EK5?cdUOfKnXIIWfA4%=qIk|#vP9J>R z$}T){OTacR%uP*yedqqwXHKlI4b%TNZhhf8_~=c%cf0fBmorDNdB_3J%O|eyTR1h@ z#mCNl<k_fBe6n-a7E}nlbz7*lYBgr2hHeo7c~sx3>4}`-5G@chwfI9x?7-7&-gV`?m+I Yzjpqz^~2q*zD<~#oS9gBY5v3i0jN9Eb^rhX literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/steep_to_flat_up_diag_4_2.png b/resources/g2/track/bm/steep_to_flat_up_diag_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..19a700bfdf5cc1225c0770be546179ad58575525 GIT binary patch literal 1148 zcmX9-acmQH6nusuvic&I@a_;2D;sLPHiH^0S2Gd+&SipZ6v2 zd+*bABY`=y=gkIyIm4?4HnjNJR;=o3Z{?-8j~uIB7>0Fqb#-@lyS-j7N%~oq5d=;YL$WL-5{XPES1js=F>YCnW|Q;-Lj%wCghH-p z6pzLI$rPQ*^7&%8RF*4ds#e!n0t?bT66aQexGMT`GI=7wmNUUhQL@I8wx!K9jDQEi z1jHCn1uQRN<&?9UcQq>>WcyJwj2@~88D0P$AdF#>)2Vnos?Vp<^a-9Hi$to5GL_4r za@j+=yo}q=<8;^;kcgl{iYhH<*+hX$mjta6)~yImdHew{EfAbYg(Ox=^2uB{r%Sr2 z7*^V}^R=0>lL40i?g-#<@TnM;a|epPP??d;V5%l-4b?y=c)}%8o>+iL1?jxVmSn+9 zh}Dc-FC-e}%#2w;b;IeRd_<6>A`BZ7gp?>|W3gf?RnFy1U9XLgHyRBD9tnIIjLbXP zl1Hczks6zH6fH8nN2B-y|MR6GwG-OqI zA4nvm8PEe@@qh$Ck{hK+r140PqDm538ay_h0*-|sk3~hd5+l-TAg_s~Qo=L~wr!%8 zmL~#ayoXWUyoQH$pJdT$BUEU{N;8?tL%oKo4WA1r91HlJAqI~MWIV#DN>ocLr9#>? z3btjSW{u)Fqyw@5p_UiPmfRC~67g)kPGvJsAXh4EC?rIqVmvO9{siUEFl2!x%bb6l zC+wgXg>j_#P?khGgG{b<{M4eJJCA>0$A%FBUitg?t*yF$cwoioOM8F);>vbo{!@eZ zQF!X)d&B6bi;f3NvcGKJ@WkQ@x!+VI;s~Ie!Pil zUZlRuzj5fyBYMfs=FnGL-rRn(|LD-JrDs1|x8jUzoBhf9iRol`XY$!i<6pI`h&nP0td+425=hvmDS?<|}D_UhAevb91O9vm4s JwsP}_{{uZ9`cwb_ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/steep_to_flat_up_diag_4_3.png b/resources/g2/track/bm/steep_to_flat_up_diag_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..4136a1e253e67f1080f6208621b40b21d7b3dadf GIT binary patch literal 1156 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_left_1_3.png b/resources/g2/track/corkscrew/dive_loop_45_left_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..af3bf6b61684bf359745463cf985fe90cf8b3fb0 GIT binary patch literal 1616 zcmX9-adcDl75=peeXS|Pl1Zi!QyMU0bOByHkMXJxo7PC93GkFuVtvB14G_zdh7wp@ zGe}*U1&Lcr85w#p5~Oz4zRI z?svZP-Os*Jtz3A|1NQ&`7H)X9W^;a4kAO*-SQz$^n4` zjf$t!2@D3Y$t<@yaF<)-4^rWXF&1|uQ(lD((c(NtCA4V8PFm_QqWxAy#HEb|8Ft8) zX1%#gR4D?K444SuBoRM@L>&BtUyzN7U|J5d6r6KH7?tED06-xK!{=K>BBxa9#qoZP zW=OA3SS(W>4~#@as6avpgOxMA~Gh^Cl$7o&YL!cGtRMWFg=&ZL7t4y$Am(qSVGF=G>#ip z8XJ{AW)3$lU^M`e05U@8K%rLyLk1YLLDma?G9Cje z1<+~`11+?eWSvf>-%E$X)_6RSPRC)MOQZ*=nMXK<8n2iNNf{P*W^{q9DV%e~=0ZuB z$VdeM6C+AFUq^@yBx=^HoEC$((-IDJ#-o8W8->{9ceJoW;27zt(e?JpaBIMQOU)MO=f@uB-TEm5 zdpD~|u>OaMCIAZWZm4)kN!`m`S#~uFtMIJGy*D+l!yDJ-dG);=1pB`o}7*AbgGM*fGKThPZxM zxN@9ZJ$$=NAe=g2cdQo1T0iLbaVm-e_4b*ay{6|+-7Wg4X^8uYYEz3(*DHDWgLtE==mmj;IpsmD-T{CnZd5NJAAF> zr_NWYM`kZhZa$8_d1uAqDL3r6bai5M{DTdZ>T2KRKb42q z8Nb-rfv-*JtvQrpR?~D*xFnlZ+@U}{GT`K zq}$o8U+nmHa!uK$8WuU@eScMTY0HI0_K&S!HrKsW`L^I0-QG#2yKY!KYi$MG(tLp~Lt5U!;H5zxiBiQ+xg7{)cXlhD$4+J@HCc{psDcpBL}m^T^a& zeShotw9nb{{lRzVdtX{~QSo9ZR=Lyt&CY%IRo>fJHgIJBj*jrb$@#0luQ4^2tW&Rg z^f$Y{UA%pGu5sz&D?griZCF|L`km@&=_dQXWPjhKEx5{A9qV1VP0f9>ft))0Rl^DS zlYQ>{mo=?x=o(+Y_RJdf(p%r@yt!ZhW4@+pd_~(kK4}FbxOz;dEZouExO{zvF;!F4 zn!X4;(qOjhUVDj?LC8YnLBmEqQZ;O+Z^Ll=0s^EcM1FNFZbBCz1DNLDA_wO sdhN~Nl)sj024 zt*fg;5Tw4ozM-K(YcLov%tVp|!%!@1<9W{O^#+6CSWHSLGm26yl`s<^a6nUyHk-!j z)Vtg!pC1o~=xEFyPw;8kpUX!`6tUus9HsSG^#W@Q^Vpb|Oa!gz7^kFs1tn50CM`N( zM}dm~0)s?3B;i+Qqnc7$2MZ=xvcm@ggh>McGyrx4;nZr6PA3?R5gZ?*>6F8f^?0Vk zVVFqhFpYuGnrJ<4H(EH<>cLn6=R>4dqylj!lD12VLvPlZEC!rGDb{S`NX|$5!uGJl zNwO!Y1mr?AS5Bx2pkaX40rYNQ6cBS*Yl#_c34)WY{v01E3Q0IdqZ-z%b6HTo6_2uH zoM&V&n+@`L(OXOe%d!abNwvmoM6HzFj^$dSIhEmCmBi$bOpD?G@SVI!(mo3&bt-oT(H7RPyt_Sq}T+%bP36^$uL zxs)S-okDmBWT`X_2>`4B@Bjz^hybJj$Rhw&M3d0X zLoouCENuiF1_A_-EI^?FWB}x}(2v0g4J9W``=Am5kHMP(MFK00I9aX7g$4vmG{VN? zURf3k1sPVnbPj;I8wo*6NAz~d$SJr`w238Gyc|qFka93vG-`lZk627<8=-eHnA<@K z9%m%riHiX_DHfC@Eal7;1tkC#0AYoNuVVK^I&saLP zKWaa8dFh@XT%+B?zM+me<<^=FkNPHd?01}Qys@`ss_pJK+~H?8weuTJ#)OJ!*b{T)zE!mTWr^ho!#d1gH2)0Q@g(X zko)QRk)uQF`Kj!(PjZVky?b4KXz__T^B*q!e$Cp!gXec#n>f1tRB>ReYnWN1onEQk zyLz&`?yqFSr3>On+Ulq8+SYneN5`uFu1}tGP6p2|XwlVdB=#?#UManI?`XBcz4G+V zwcf$6*nf|sGkdNso?h^G>pJ~A1;e=)z?EOG4PQ*MZ>w}u#eJ6sW^KPYV)SN~UAf<~ zNM_Pvsa~Bp;=;xZ)5Yu@$HTsq`?)gn@o4NAj`ldIUPj398;A!vb8=R+H z@444h_s8tGdS|Wpa-ZsJ{Pw`&S#8tq_6w!9*m$jaD}-memK^$h%b#DKfo)yNFUsZH dZgI^&NV`}!-+kot#}#m(x2M1RyVu^_{XbMQFKqw- literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_left_2_1.png b/resources/g2/track/corkscrew/dive_loop_45_left_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..66250483287c20647179ea4e9c145e30ba89f7c4 GIT binary patch literal 1073 zcmX9-e`p(Z6n|ZRT+-4;$TaG028mmShekcu!v;CK>z3BjUfV0ABZaFTHk0TMyg|l- z9yDUq49^lVvIv14l3}cYm2q?t!#pKpk)4`JhBt_ixy%jB<_Z0y8(%X9pZ6Z0f8K`= zpZ7kRnGOvPJ~{{h!&8$JbKSY4TMs&VyZ!Ym?;Qr{g_&38_jhSePtUe(+j@I@`}+F& z`}+q51~3eBI2=x=)8q5`NHV}MG|#i57?EWunM`K0`BF(YjJjoYY?}-K9R!XYibUM8 zm^YpXq|(7`jw_Ueaz(D0>1In~2rL{Nl30%t_Nt;kFO%y@rjiZUN|IGgwJmM4V}x)J z2#C|5@>oH_Drr}v;I?ZxY6p-lpe+?4!w0|t2pA^0Tndh>e!mtBu5(;98f_@b&3qnJ zDmdx((VhV34GR8{M1&PmRD*JkNfy~mnb&H9ZbiKm9tin@Ji&@oL}H{Am&yxyUD8d( zurg-5(A=!JXmIo3iGnu)eiftgo>0jjsnC)cPB&$(qZ(+PBitf|$3sLq94v@TS?0~8 z*vQJQVzN`oZkk2ZGF)!TPlQP-N;7euPm5wM9xtWSm3-dR^=7@^>2wg_68N(iS#U9B zoUaklCX;GKw06AQQR{Z8z17%6Lxjskc|0Mnk0%0RFetNJO6V?2l+u}Mp=24R-K0Ta zF`0KMf>(_ZxddHI@#S2!T2va9T)Sb|_Dw_sgaKp#6`%-E1!!S_y5Ja;kWo=XR)h0{ zL_&rJJp>j9hzBHjP?|&1npiF;O|#f;o2aXW zM}bTX(W-~jyn^nRtf1P76zzCdq*xZ|fGj|$n?s z_=h+?x(^?@v~X(p>FdWPf4RI%{PB+qi^~h`51y}2M)rI*@WmTvsq)%~FU;$ooLkws z_lemDS{Ll|r(XT;^nn+@-Z*~k?!w~ELwB!E&Odf_TC1##AM)(J^uyTdLl@t9*>dh0 zJ7)jqa;zQv>m0uQ%HSfkG&?w6T^oD*`!njDkD0>1w+`O;>BiBMtG8Yg<}cnkaQI>L fXP|JsaNGIp>7ysiUmy9qYZa#UPfvWiZ)xR!QBKs4 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_left_2_2.png b/resources/g2/track/corkscrew/dive_loop_45_left_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5dcb878c5e208f7f00cacc03da3262d27e763bd5 GIT binary patch literal 1345 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 Wm5$lUs_v$mpnvUv@1r$44*w5hiT4En literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_left_3_1.png b/resources/g2/track/corkscrew/dive_loop_45_left_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..612d1f22df6869ce7e8f05c6ad90afbd8ed1d584 GIT binary patch literal 1255 zcmX9;acmNI6#h}9*UB6kqF2WjXvv1|RCE_T&FQZ5TG5>2I?qTf8fq?+D1Y1*wlKvG zCsS0cH)Rz!x?sx;ZZ}0&l{J_$hsrWkwlRkrCg@0IP9rfaL9NSg7?bb4@4bKC_s93% z+tXz>O`7<^L;%2~70WwT)mc}MMNRU0?&1ycyL}MogvyQF@XdZ$=KoryOz)xO?r~U7@n{SwBTcXVOuyZ z#Iv4MA&@Oci?yVR0%{JRcA#|wgNP7e)D$yVla!FP_>0a+MNGkA7E|+t#%03%7Bb4y z2`88J^7){%BzY^zU@a@bQc9&J444Hc>=frU5*0C5jg`mqHK@c?Dgs4KT0Msud6IN8tj|^-=8pLT>1eEw z%2taMurY{}Q+aG!(Se2Bl;qE(TBH*d<1Yl@jVG#$9dR$mQG({tP zBH_(urE)n7>slH+z}-qpMA?Ye7B>h5Qmj~|sw+_oX2#=1n6DVrfY2f)qsmHY9UShq zGor^433w7xAe)lPg%qq735J1j01E)Zx);8>+%ssr?og>jgo4lD%w%Y*m2)_Fw_CuC zUcwlpaEZo~j4{VzWs4r#w9sRKAsogjm}TnAPs~<6czOfxtuk|<{r2^Z^}2sW#~Z5` z_8t9g{UNXJIYmz`dFIqlMYFD1xAm1HW~_7D;nB5J>qrMOZ}F3TwO-woUy-GEUVk{{ z@!-DT+}P;hqj$XJ*Om>A@zZn3%qLs#HJEAN)!z0wr_n_XD_vXqcOJN}T>t3w7wKCI zVzYnQ-g+Q>Xe!tT2ZI@$auJvm1xNh{}sSfhwxv_1EX{8xM=IN79cb{M065RIr z7IcRs{7HotVXVTTehL{;Lp8^ccKg1UW%1BGB3{h^0WPyw_LqTv?@>B zU;NFTHJ63AR5Ne-PJXXhbD+EN-DzJv>D#_fns;{pP<2zkBHni9$-0#XGsCMdeK&1^ z>GsItv10?2$tfE^!PHwd*_3MoWO~;R|9;3N(>GfEm)7-Okcm6;M||@?XkRwiZTxGb z@$v2rBXG_~dSuhJS{plk_WNcO^w9q_{a89bRNcAc!jgp@$h{$C@83ISJ>Gs%-f|P| XmS0?O{Ftu(xd2$vY3?|&v}ecvwJR%v literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_left_3_2.png b/resources/g2/track/corkscrew/dive_loop_45_left_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..803a116aa9851e63c523acfca8179d35f4647ec1 GIT binary patch literal 1587 zcmXAoe{@oH7{P-C`Tt?&7*o$*wz?*deLwBO@a-Gjq(CF)S7f zL6EGhtnBP;4xi6QQ8A8VBq>*`RXQDQGMVglr`PKX1_v1?kxZgufJp%%&rzxJv|66t zAU0d1b_e11QvQH09I?cPT(}5PN^@vA$Ef64)k3EZ?KR;6yE5#hnUFcoxJD8|85d9@ zpvQofMBFqIu&|@KwSqBe(fUSD5lK8lHqJmhq*eNUoNsXq+|^W+&zJ z(Y}Z=$k-xrcWflU#y}nkI2yn+0HGC;I5{$}P!+)Fh|&_%xf0eO>?K5bY6({_6Iql} zw;K2B$cRZDwd;mFrbNI#67j&HAUjVY6e&@O2E+9vX;G^kdcD_T2{@e*pD#8zm`Efb z;L<>7M^HB#_jAdxNE5@&Ln>EX?@w3g0r(N*yzJ zEw+%`%LF6I7zQXgq9fTxif7e|90tr|CjAag$YYEK9Pwx{nY;!u0F(ge0I&k!0U!jx z5CUKd0*3}2^td1sC4_)Rfeiyb8DIziNdRdMw4l&MK%W+d&5&_{|BROaIS!NrqE&N@ zdXdd4bGy`jzbO*&#N!c|(&B0WYRJK?9Kyw;d_tO$S`#WyQtuzJhev%e7)=QCfP{z0 z#B3GD(~_t`Bexp0E}PNsu|nk1ia> zRVq@eRT~U6DmF>Pb`164Xh1F=Bt&r~A5uJM6ha3IeHe_$Q{k5s=G^}82i{lIlA!dj zpOyiT{zqlmEAuOww{*O{=E|hpjccK2wU3d<`Z_>bvb*nc?XqJ_)?Io20EX9BmPQ{- z&O&%J|N6Up;=aCf<%!5KnTDRSzUjjw1(ZNG;N-iG{bs->UZKJn<` z{E932lc#(4on1fGF#B9p@deGYnVEYg@9t}B{GjObj_8sPo3aK4PO5M~@ywz-vBxh4 z#GUnNy9#ScOZJT>evDl_@Dekpr{(%O&9P8=VIAGl%am=Dy}oAbhNGROrC&9OHV;d3 z3!W1=I_oD)Q6DF!jNf;yZv1F<)5O<;tvLnlzne>1D<_wK!+x@BaQlVaS&3&>^*q(~ zq+kppU~-dBZ0*mg$!_29l)q%#n&vG$ZkNZ@<)v;l{QTBd<15p9HVZ%9q%W!}Jv>kT z=5MSCAKz-wbT?M-sC2J^+Q%!avd`~WTGND_RaVFL!Ubf__rEN7B;9}M-PP2Ys=JdrkWl;6 zeCx568PiS|PTg{lx%z_U<8|Aqdc~ugEe|@b-?S|%zqw=Q!2?Zo2JXdK{m8lf+J{TM zt=tU3mipdLx^Ui|;*TCYTPUbpcxd}QMdLenXYYQw_3(}NIuvvH>Z)mb1^27w)+)}Q zyLNJs;uOoa`uJv_Sy0;9-u`vpivG}c5Z}@W6AB_t}Zp54Q zS8v^UFkKrvUAU;Cc&t6KSmUtb z)=OQx4=t_($M>>ltcX@v9`B1TFX_&%(W=&-9lz^4Yxmm~b6Q4odkXrfjKx(PL&0#? z+%n@@-LN9Q#6B>S_uAzZtByYJoV$K%;}=_t2c))**oqCq1I6hVy8f0-9J*)0Sl>20 zJX3QzJjod?Y-;?eF;c?1dimEQrk(7&xkpZv{PS#A{K_wvN@1HZt#0^(8^V+E?^4MJ NmF2Z%`{ym$@GmPk) z^qEbDnbmWu0RS_bo7S|Js-YAriMW&}rTMJ@h=F-sTVrVyi9}^(Wn!_oyu7@kqN1|0 z5HvqGap7^FB^hCbVRv2#P8AXc1)x!2 z*8`qJLM#&Z$TFdtVp0L~8d#*^G!J1y1pom6jUcQ{=2R$nwK}NNogs)}t2N_v-U|d^ zJg&fMRC>9FQ0i#4fkiD&jNx^hA9sa~-WVB7(ow;x)G9Ovm5xM>jFw_?)=jtrbRfz` zQ_h6oP31$`sklrJYDgfr0;L0}c|;qK8zO2du4hvgPnHW7_yjydpf!wEVK<;2i!Q|A zF^){Rn2e9hggrxrD4nt41xD)~d(tBY8ai4GZJpPw9FClc!xs~ zA(1L(^?)`a94T|sO5TS09s01FjQOp@VP_`p&u0?F;ytJbzybgV01rSIfMEb~2!JIK zICO9@9E3uKPy-eNUOk8!fIt990?5jt2ZKQZMr|ky^)XN(} zK_(V+rBdO1J_So&3M;@IQavvxf=W87W(6Hzpu$CaY|59Mj%Hz|psoR0C1TLXD814~ zVh*d3ciMtpXDsYZCBk_j0gG9!(Fmge3IM_q3wO!xnG`OEKbO<`eb2-tlQ>0@HXGw` zu$acB)%f&S7{}s9O`1US78RtG(5Z%g3`X@ZWh@=Pc8PTI=@0B`HIZP|-=iI+eyDlP z>b9o7Q%5!pBx)s%f5JZoKHS^_uzzx*7wORG**&vuraPVWm)a`7es$g*a||x9ekM%K zy}OX+hK_xpnxWjeBiA6=qFeorg){wp{TI=kt5olPlk@Dl&YSN$>wa^8Isf64fwXy1 zckaY-y!O^IbAUwG-&nd~xApjP`(@F|jmlQj$ng1o@c~^G)l$6h?O(r-99Z$Fo$h&K z2i_vx^}@WzkFPww+%PsYG}dpg-?ZIZSmeM0ebJC3 zmQe773n@@oXPQ{D0;e>xxHBnIOoJ7R9AU`{UP2cuG_r*XM>3La`B_5peg3_9zArw{ zbF90|**ay$6aYYL=ZfX4t95ZTUT>v2~sE#!?HMO<1b#-<1_4N%6 z4ULVB2!b>D#`-%P#or${gDM8PL%X(t0l66{v z2Lk~L$Q+Uskc?z1B+W+N3d=Y&JaAlwFlz^Z1;B$Kg2^OWtul%xNV1=0b6#&j6i4E5 zn8{cPvz@Zwtc~=bP62a?1TT~R7#&iWNSaIJJ*w`tIjp$TPI4H-JKO>-gxPT16ITUQ z6SI0mD<_L%850G}9I$wSEeKE&Nfk1!=1ym={SpYcz1q+l2m|&smgZVJj6W}Fy2ViL6Vi6y25d&C6b|w>iIvvt9 zrCiov)ywJyM6iXDEo{Q(QBgrB<%(M|0_m}6eq1fWLIpJghYfM!CO2jCaYWF|$f7S1 z5z|UU%PM6(3yq?KVW0}24j`*9M1N&BYabW4AdpoNAuFmBjtyz5hbfk6n z$jqsS4?^YSy+hwd>UW6OKMCyp?%LJ9o#d78e;-wemTf%`E)J=AeA-m$0(1D-f3&pn z8|3bW%J{Xh2X3QrV*1=|-Nf*L{@muvL%qVB=NmVj-8)fB?zjH6-h{55J-?XR^>p9$ zc_Z0e_Q(Cx4om|_)X{h0$L|k+z2(4pA5V>%Z?3u29GW|OYw`2Juy5A2q4c>K+o%7u zF+X#D>*(W!*pn+K!uI>SKNwJM+_*Y-?`OA`4u5&n-SKwwd0XH74bLZs){egT=j^QB z9l0Nl{&6tZ;hb{jQft?_p10Qj_V}G=OD1<7>%KLs_qKQ4uWj{){leeFeK)m(8&7P# z*kD?)ZpqM}r|w_>!d>V+)c52Cd~eUGUv4gWwBo$)c3Zn7tX$Rha93{5zYizd7TxO| z$ZtQs=&sR|>^u96*|Xrzg@u{TlU-X*Or1F0vuxGLnc}4V$j_Sw8s4CyA7Y*XJUv0S cXWAzK)?YL4&YQQjDg@Bk(Y5^YvQNMIAL&dWr~m)} literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_left_4_1.png b/resources/g2/track/corkscrew/dive_loop_45_left_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1a3dc4d0d73c369c4b6429befce65351d40037a9 GIT binary patch literal 1308 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_left_4_3.png b/resources/g2/track/corkscrew/dive_loop_45_left_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..aa78cfc363da1fefad123047facb47f14076bd77 GIT binary patch literal 1471 zcmXAoe^8Ql9LK-@d{lB&xX74?#We~lT3A%9V?~ZU$|rlgD6w!om*gm)wZ~+RHMYnx zBS*`UCN)aVxTIoPyC)^1WSbegxKkS~^w^@LvSP^^S6+Qb*WK&$`P}E9&-;(}`_r(t zSeBhNEeimUU9@WDy2MeZ2LZLt^m0*}0$CV^W7z_rB#pZHRUhhCK7>&h*0w56sR8CVW85#{+ zs}mSaVv7}ZxKwTr>GPXHVY`%%D8w{E&eSW|W}Isyh35@Yk452g5y4(#BxsLEy)qV1 z@qtzX%oySz5RZu-a4=#%7K{jBOa;fy5PCTPpa7^4grL*)ES8zewTs2)QM6aB4(Rox zHXHPKSV9Iz!W5uvv5G4r_zJxcH;YND)ZmmixiPy>MFrJt5lbNBh%vq#7byuTVML8K zm5m}Ozup^c@<$w@xQ8wQ3=A;UfUN^uGa|AvWiGDLBO&|>Q;4)j&0csO z6k-Q1b(5IifCnsO*lCD*EOEaRhP`x#h|5<9MQVvui(w`lw`#R6lgVSV`6((iFc6JK zAz%@JYe9q#y420We0+6CY78sw5v@CF9*DUjq5xt55=>|kLOTj64fGjd&<^5CbP_8$K7s&-|vh>{4k-#QUjrmCNVQnJ6lC@iJ;gVRXSr@ciiF|r$R6g9^^loR9-|LJ7y)YIM$>op&FbE(_cwtP)y@6%WS;JwG)$#_? z=aVXxm_~!^bc9e~5D6?2p;IdK$OQu^Kce736&vcg&?>4gidHT!-B5o_(bw$FpAd$g9h0w(aX-pDaJO;7g9VOrcNoU@DF+{|!(WwV zed8*dOy8$FTc1`xbpS6vHO?tN^E7i_p#8;Z>u-Ubrjog)mp#vGyQRC9jgE+(klipl z^+}}Bw=iOFZatngwEOzA#k_6JN8hg7nQa+MT3a3P@mNCz*3yzCwamAU>253^&$-k& zEUtOdfXB~uDvCEP##X$5>i8^o`Wc?8VpAMNx#aIoQIf*pX?BkWS z7~}^ysh)utkS*q4T$+VW^{=UHd# z=BV~sdPB|S!N=*;m$x4f@z$!o+T%->RUs`4Xw~x0oYqbD+^?>dac_TJNhA9jx`yeK z^Ineh1^Y%0{qob6|F(A>-Vs=>r41JkzT@~|hjIOsIn*NUO82CKzugzaf;-)N_WxNo zb|&xX={>xTrH1{Zr;H7}{D;AdJVm9WbHn|f&-2?Wnu-?tO?CDahxhi(n%{b4dUDQz zZN)hgkFLI3m|2~-_1je?6+I8v(BFObi6!&)MRw}!hD!AMuUBrr2p2v`@trTI{jo5o zf9b~AjWZYCJsCA3bE4B78(XR-(P|I2?cD0moqurVjAK0`Rn4`z&&yj+9v-gfUe6!! zcI-W3-Z1U=QAYE&_};dS$XMX7;qU6!?EYEz>5>aL^VV>6sIReKbEB;t=6}KS;kLY# rQeIWKq_XJWe=c-9n$Z=!+Nm0Pl*eKo`d*hvAt)*=UU_y!#h(8GYQv>m literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_left_4_4.png b/resources/g2/track/corkscrew/dive_loop_45_left_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..7d26dd6729c3941caeabaa48356293a67bf8f2cd GIT binary patch literal 1167 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 C8<+6_ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_right_1_3.png b/resources/g2/track/corkscrew/dive_loop_45_right_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2622af83ff44bc3feaee04df87a2cbf797c209ee GIT binary patch literal 1277 zcmXAoZ)_8F7{`BGH*SAm6{_i=ab+p7>V?#Kfpc_v$aQqHa|axuk^*HMP^63#4y~-w zCUj7-zzr%X(rCew6+Bp9R8vQZC01;flAJi8gTgwkSs4VnQOriB`B_5peg3_9zArw{ zb8tnwepc1IDgeN&))w8WV$~NzRUs+niRxSj01~jGZFO^TEGa1|EiIKuBxPk~<>low zX3Rhkq@tptva(XHQmHUZLy`nd8yLpKajetn^m_fFP$V87OsDgO0;U0k7Ep$2lSyW^ zDs6U+%dPeLs9?w(jd4lQoyi7B6ftV6S%chRRPv14&tYLF8S@&GAvT?G<6z|%;OMPhDgDkv)?6)>lP1v8xHA&jd4pa3u<2rHF36bfFg4rsMuib_~4DTm{M z-w$Ik1twDwat)=_n$>z1H99bc*K$76DHuFaI*>F+(iSDI(CAfK8Z|Jui6vPVK06_}=%~+<5FDwPFPDlJ3J)LwfDr%=03HAVfCK2kfs2n0c7RSjllo~BUYGn!E^vT1CIj(35*nCW#kSU>f!al z027TmMN!D*L|F7vSO8|PCU`j&P?{rZHm&9JCZS-9PI{Bmkqk`b)iQu95xqugB9vAd zvs(suA<#@DV%m+HjDeb&&4H^q{&2Et&H8y zVj3r|@e-IoVljhekV11t6*McMLk)cxj1W*X6ptTYSUvIV2llLLr@_+Ep{>PUXw|*D zy5-=7uht%m&!4I5hc^x##*7VfIxZXqnniV*`bYjVE5_Dtuk4;OFBxjBxa=J7Je@cn zYCOB>vgDsrz1ufuPV|wFk4tvfCU(`-DmT5i?AprAfb|HcJM}p@x@!3in|0>groZ9f zg7%J{`XS-k$XhMlojqT!yt{Jri0aoK^yr~G-CaA!>h?GGPwiUTch#c`-^H>gmOF4WLq)f&!tLY*fbc+Nv_P{)}a?pPYANg)?0NkcB|l!}d9 zVj*?ZPAF2fk|75)VKWPSEg|{5U;n&M^7*_s zyr$nfXZC{G05GTT)!uG8U0f#5{SFR@aLkEH|Yyp-3K zl9A9G+1g~$#(-S_M-W^Qz*US&JG?pEUt}cR7q7_~Q!SwrJYg3pXV^=`eRNi23$ma` z#cEQnYf-b9oYXZ`FWKxAPWVVF$gp8Sh>Kz>9L~k##dKQF=WFBRrfDK@N`NOZGHYWC zPN6~sYiz9U&osgXQyp*S8q?KDWF>4i%Hi<3+ydbdX7Xk z93~4kCE!v+L@L5)F`;8^hSSV(jzVIrY=vl+2ai0Zo5Xy~ZL zGNi_mMb0zM z6Ahmm1zbqMQHn%)2I*Yu_^HL#Tlat9t$}_4R{Z_zrdGeWulMD(%SJ}`whirkrgP9KQ4Lnq3{r(DKa(2lrpS ze04VOU(19 zPc0wo8A}}dY0vhD-h1@+lh)MIPw$Pq``x@%&U4R=Ja%^7g|4jm+oAA8+m|nV{NbBc z_1hKw*KRyZ#1^vr*HgBA@%765TixHge_t@%gIylT^$iX-o5%6;_5){bMl6@7H!Rw_ zD9ISRHfeKjE(z{`{Nji_Mc+RB#_Uz|YAd#mZTfFv*Y0auuTL&zjuv6;`rVgC+aBp| QsR(^5`+JYQvf=&z0d61toB#j- literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_right_2_1.png b/resources/g2/track/corkscrew/dive_loop_45_right_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e315319b6a4b18ae21e5aaae69dca44538291db0 GIT binary patch literal 1068 zcmX9-e`p(Z6o37ZUb{FC&0OXpJGK-e-ZazuKBa|DYS~188b*Aj9Q34CBLa65mSoLeh;Pc+&^UwS6 z;q%`6(^KKSdk*dafW4E)$4_+UW8HdWu&>+CY%R_K^uhE?CnvhJr>Cd4x3{maufMoH01UB{S*~sSw;{zNfH%BPN&oPe6d_Ms?`nKZaWSY1SSML=N3gz zJWeE%!Av%kFYu*uv|=hXE8A#lEQv)zZkh9@B7`ahiVC%oX3c!0R+jDcOv~0f?P}Nu zQ4$gir~+1!F*A$TOCG1@L#-fkqG(q|sOksc0iqZt<9N#FQv(4l6k6f=^;oQ)N^KX5 z$TWSF$Ip0!JQ0cp!ZI02QIZ-`3T#^Eauq?VMGZSf(7s^U9}-ATqD7gNGkm5PEgG_6 zrK)z$YLyxt6KB99fHww25&|kl7ro(fKr|WIiewv#)>f-%g(p1{?MsBoY$Q~Y*oq=p zX{nx9ntHlz<~x>-npNCG2gnFT#~3yt2w6!gBogIp)+`n+!)R=5wA*b2J{baej4I)5 z#V6FrScAokekGD+UpGyet`^1p^(DynP_)evYgGWm&$h4avBUo zIZP4oRFqKTWFg7u8KF{$t?Q|}S!mU(ji|s*P!~Llk_yr_WY_rs z$Q0xlFv4K-fCNCY7iB4=@yLjyS_at~+zXxtj)e%1#U*blLFUwONs}s-v}Nh7mW8@n zz8FwRH=}xajfffn*$$~~QFjuRPQJElG*G=A@BmF<;UF$DL|mYfF-}dzwOp#A=d7yU zva85x&>V*hKsF%M%_7s4yANMFS!g!tLjFFKT8$M&As&~KNtp_!>0q9rbe1x?;08~& zB7PJlP%3~56fziOaoyvmpLFls`+@T(rUV$hy*b+@wcYOc)!yR=j*MPC{5n~ic=Nlp;e%7I!_Oq=eG^AteAWrBem(osHRbfq#nL=` zW&7t}&W+424K1IY-S_>+Bc1bi4Ehs78QS@5`H$bk`5U)>+<#>F;gKunw9`NApMCq? z)knwfUR=H4i0@4=-dOtRdFA>WgPr+9V;ugpJ9cPHB8eTB`@hLw$L^AU;|u@x6mC2J ZxMt8>Pc4|QKG1aulM_?pUyjYZ^FOA8%w+%o literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_right_2_2.png b/resources/g2/track/corkscrew/dive_loop_45_right_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d7d8c5cd83e41862c7c807184759f16377e91ee0 GIT binary patch literal 1306 zcmX9-e{2$G82;MY(uxKh8mbs^qFxqMbmvALv1fZ2TF-jb>&6r(o7c%EX>Q#$Wr`bH znWYZ(teBy)1S9KEnNqDOjclWa&32{n)^&>M>Cj+BW0Wa#{L#&C7?bDy_0Rj{$@9K@ z>(}e2PM$p(05G+-Mz=9vmH9wQi}LyW*9D&fPz37NHLS^x1qB6#g@r{$MUy5?DlRTA zDJc<&M5U#rWo2bDrBaEaY8=NXilAvD%Q6m!!{hOVLg83!R1h-REUE^W7LbJ4Xp~wk z3ad@+bZI?aG7vIFqHLUZB~yM}B{FEm3?Z`{6daBCShUB1M?Hpkh!F;yX~Cb%#Po7t zQUNOlI7$>?L{XO{5s+r%a+p@btO-tV5XSNvNB~SC5hIb<<#G-|{90`fNe-CJ3A_D) z&j+JXIVx3RGBv5tnh-ssGT2d?)3RRN5hUCZ${#m{1+zjUSL>BpN=48bBZD(e(&;n# z!c3UA#{@T@4kU9?2?nGTkePwP1`tl9@yYZd#2CdG-r!2I{tOp`J)}xXYvfkF%4N_7 zXgtDFyn{}7*i_JwiF$H;5T;@hsRmIQP>mVGtrX>=X|L59a=D^DA0G}UM@KW63&6;H<}HlClWa*R!JlpnM|)xQYtmA)v^TXH077sLN50} zASA^2Y!U+|Lc~%MyGg-WR9+hvbW#zoc_3&{M7`-mESr4*F#rqzumErX1OXTTASD7Y z4-$tq76$!LNRS9%P~gTuSPujeKng%c23;uhlQ3+7aVHe~;JNV{K;XbYiY&CuZdJKC zeZWsgA`YGprqevkbIHvBwTUrKM*0<|Fv190E@KR4t&yB3J`qmBL=Vc^RZxBh{0@9Ll7_wpa3Aud*RH}y@1?d^QKZ7ujd8WcpNtxDT{@+ z*%(yq(5O8a8pP2kp&lhwX@e4)6wr=9FABpLr{D3?JI>dR!#qY$8cq7`Pmba`-gSLZI`X?Eko3<%lhG$3cjo=YwYD# z{&ghST&?)Kmg#L(4vnw7^Y4P?gZ(YJg)5O)f01;Se>*m$ZMuA`Vg4JAK(6{uC@NmOn23#IkWc4FNJ2_Io&z`(be}9#7;@=&Cg7as}Ag(`6sJu)c27$ z9;Oxvb6>mDT%qh79O-U+GPXio-&8T>YWK;dALE_(#w!Q=_w9TA;_WF1$9_E+Nq>Mg zUE8voZ>h-E5t&1@>!-Yx5E=ZufBBHOy|^xW_|$>T6IZUFnsN zmLetheeWD?sd_fR56_>|wsv0iKm7|xj8v7X9hTi5#bUt4S}8EN)*RA1<`jbHt= zaa2)8-<|fD{ZUs}J$~$dTj6<6$Auj$cYSm7ZQbpR^XS17czQyF(q!+;rzHaKF{iWQopXpIGWIIx%NNlB)Rq$JgwFr>jAOs~S= zrc5)>VkRy+!r%&yIAkJ*1_vxSaL6!=Ig_0>W`;!;IB~g5bK;qNj*vX>uYcYrd7k%u zudmnBIdlF@06^#3HQno)6>r8uTT3&)wrJIS09rs_&-&HPaoV(L)2B~wX=#};V@7Lh zYg=0zf*>}Vt-Zb7<#xL%isU#}6nRU5aP#l6LhVih7a%b2X^Jt&X} z5M+TaA}IyQMIGgovr$B0jf4#ePU#Tl-2eyxNC=`h93d3daok{-(}Ga&`^%xwcrpod zIh1m`Sr;i_jD&j>!W*Jwolz59IL*hhqEVDg%a740>2Wh6!OOHy;gpCFNlHmmF-xJm z6)V+JmC2lg1x^vT`~cGct|N5P<;mc_9IKSP(TZx+^*lT+5Kfs!gB~L4Wl}PiRmDtO zMa3fFuW*s7&!`2nb$zsvsZEt9p`CCzXqU@_xkZAM8Aj!Wh}2xBWumb{Dr4nKjS34S z9#KU{NW%00kxEBSXlYOB@$D{HjKoU-*@nA=a%DxfA1C_B^T`b_u`R`J)fT0%S+v@yYl^eowNEr z|MmSP{yz@v8+H_4`3X7}j{Mkl^UHp7o4Me^$8T-G4hN-Mb2lD;Jk_xkJhu6g?ZWoM z#aE;IT-UD}J0FhTX8MOe5T6@5a_v?T@0hi9jeT)-`;ukYk<`;0-&KyCT6urZz#Gy; z3XQdEXD%O_`0Ivq@tCbKwIexU`(fULJDz{%YIQg}^vtzePb~Z9!kxDLJ=c%Q(3;!S P9;{v6+kJA?rlJ1bo>IyVcq{tahQ{jvU*5rWOEb9SBxFrQE9Oj0_ba>(ssx+av z5}VoK5gM&huyLpMk2>LOsaOHBnx&>pz4C3B_z-L>!0^Yp67l0 z)~t3;n>u?c0AO0@iuSejx~Lv)&4zkD{u?O+U;t}Yc6HRphK7bolO`DqhRKsBH#Rml zH8mj!(%jrUWy%z@&1S=KJ4KN!OY^)(6opVI6pJO&>5Qu8b-hxp;&wnf07JKUJSLyd z>JQk%5l1Y}B-3105p!CkSdu9WaXVTB+8lISB_2(P_|Xuh#N4^Gpbv-3x?HQMP7B~L z;3t8^B1r*JBE~|}RLxmn*$%55oRA7FSnN)lgT-i`@CcL;X2JQP8Rb4QAzT#;0Gl)+3qVevb$h})6msjSFq zA-)h3OQ}#riPf|eEU88lfnsi)@RF3DWg|Qv_xsb4h>}QXnM^UCuT&}!SOkE^5Ikw5 zvKBUnd5cuIgf)8&am4YpuLBVjf>tu_|3^A3kdGhwd2ERc>whm&bt)v84j za5N&a#vo^vd{{g{rowDC?j24A3rf6PP^;B3NCMynKmtf1{a93TCS^XG4QX1c zT-IQn%i;xipoNsojBMpHsGvKfiYHa|XKS(CM5YJ}71RU>E8?^pJ*3sg;sGx$1$}Zf zm`z1BHC5JCSS=DX4Ko1h0K&Q#;X2(zSVDn#sYJwM4*0!1lGPS+Ml_l{e~rcW3*uuEl%zvN!ji zo!ffnKDP?{p?_I+jv zFG+NDk9@sz-Y5Mt&h+7#c5DC8@|E+}-|hR4n5)`LnZy=$i7X)pJOXV1brPwW_ht?PD8m~I=| X)e&|}^QE12@j++D>h{CSH}(Dx$M+r; literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_right_3_1.png b/resources/g2/track/corkscrew/dive_loop_45_right_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5215a11f801499009e743d51af67eb0febfaaebf GIT binary patch literal 1226 zcmXAoe{2(V7{=dj-L9p~ItweIngWGXypXELyvZSlyN!-icEBw((rF17s9Nzbw^3qA z4yjnN;u#xkv@SJkq-d3zpj0f-nW|IjEXfvXa%u<7tT;n8r!JAe*AkM?`|F?g`QyoR zWOKi>ZQkN}0MNFvuV-sxE@{+iU2~)VRK4H=Xok&?4fHlnjYiYd)YRPEtkr5;T3T9L zTQLmN>2!L%-fXkk2*SZIG{?Dk-Xn@aC=`mt5}8c4P?%Jdx~dWmpebNo29L+&_ge!& zM>s;o;%qA8&E>^nDN?B>860y{2Ek>P+*X;lCq&{@h{?y?#f+eghigi5u3m6jz>7nG z2ARWB0+x>$%PEsuw4j;;sa|wlMyOx|U;(@sCK!#9#Uk77Ns2nfvg1BqS(0WG36#%U z2$PLAJ6J2_wL1meEfKs-iE$>Bc13esvgpk!J}YT)IBgV%yLi$gFhZCOC%lQQkS$3C zC0eSbDsy=w4JHoEKClMCE@NcE?9A9bd0HsBBNZ`Omka0=i<@}T5^&-XHu9&D5@!=a2z68cDO+X|-{2#RO#eL&xshp43$^})OMKpjLKm?Eh(g5QCRSZxAmO()grISc0 zvvv>&h|-XCg2Dpg010LkAyAS^srt)Oz*U`gMdtQHO z$^6zG*QCy2?JjoNrw4qVk&$ONyn2&Zw{m9HXvaT){vofY;l{wuiJ4CA8_I(VmM-!; z;oL71n@{vA6BnM>{w^xynGG$SSDz@3E^Kk^*|lYR>r{NucImAvJu8;K_`zr2M((|D zvU&Yz>&-Q@=j_n^gMRl2?*)1({?w-7!|Jr=jTonz`?_e_*o^|Slou`TVaZ-2FY-+y~oce)q1 zeZ6Fe8Xh>*lstRsV!e9L%9&#)`?JBjr7H(Uu9b__-(P0-z5L|yo9#%ao0{HpLu$I; z;eTLsdfni2+s-ttop9)T9aNsnA^Q#&iQ?7VMfwuKCUb}`jF;C!w}fm+uw7td&i;w0XGZ}MF0Q* literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_right_3_2.png b/resources/g2/track/corkscrew/dive_loop_45_right_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..97aa99080f002b51e34640ffb92f8e24173a4044 GIT binary patch literal 1463 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 UXHwhPK!- zC5{&8~2|NRLk!2pYo?dpyArGQLJp$f!gXjhLmSZX?=bC4x>(*vG{BZOIrnk_ssi zppyX;4p@rsVfaD2AnFmO!w5{uVOj@ASqMWC07w9Id_E%(SP+DjN;!q1ha~&;`l!Wn z-|dFMAc6`dxJXWl6*{Ssk!dU_%_@v8!s=By0u&e4`D1!9hRBr?1tn9_n3f?J8)bBk`Iuwq(%aDVrY><7YhA2jHoi<$KEY`{PG7j)~G2^_SemI znR&Qs;m5V}J34k5Hf)_Xe(NoG<6-ZXQ^J)+4W6o&nQgJA7Z;vY?KEc3nlX2GMKO|n zCu^|d>ixj%y?Z)}H{#_U`RbzSbxEZC-tv9>gx$=!U6ZP@n%gD!J}Bbf-FrGAIHP$Jtl{HpWlLIp_bRuJG@l$=EU1lYmd7;Q z;p!VLPuF&~eP26p;<02-vq>U@gef-vf-D<+4<$BGN-a`6r)*YL54XQ7OA9XfN zkIp#q@c7;%n^!KX?HyaB8Yy4>`r)IVq6_s;{(M~7{$(q-&U$7}-D~^Xc=>0i?^%=n zdichNk&^S}gT%qsU*9>*4Nfe5|4>_Lebbcjry7NSL!vpj*)y-;%?E*jzFQ;P%00;| z^NT+k`mKJnGJIub3HJQCpjkZRt=`Z+_wKP?UVYcmp_G4i`=+(!WiaQNdM7KV5%&^o z(WM7-YWsiaUUPX>@lV~oi3JDNe_CJs^uQmj)!ij8D%k%z*FAg^Xj}VydE;3V@_EZs Z-lp4A+pjN$eVI6bstWbO?($Vz{s$K@X5s(< literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_right_4_2.png b/resources/g2/track/corkscrew/dive_loop_45_right_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0c58e41a72620cdd9283d6985ec860a0302836f3 GIT binary patch literal 1521 zcmXAoe{@oH7{z$r>Y(|VR=Y&M(Q?e+Tu;czUG$Yisq65tphHRXDJrO6~U zTaEWq68RWW$SIEdDzgy;rj;;jfMXnlVHp4<00xnW5sR$|!pY@4h7FM9h|w6gTCaJ% zFcd=2N*OLul2XhdS2GHo6{R_h^$<2e;|fxI#1Kdrr7A?JmSL1aL#y-*!PrT=*We8> zfv7c{a7EL;S5NJS;BLdfW; zKAsK+ZPBQZPDf$R3o!!JQjT*Hl9w6+awdUs8NHA-2S?qJu|N{WGxAEHl8V$yu^yM2 zDAZ!qa8?uVvIYfLG%TbOVVF&-G#VHHFaaRUWns_R{V&93@uX5JkNbbIkqDvJQzjE_ zu`sC8rc%0bR3OlhMj0a&X`Kujq|hpd9ux*}7}ez9S3OdG{nm2SC1e zSesKko7z*4j_ce8g|GVCex5nlV{KVhTYt{C^Ve3}tX|*TtH!rb;+uU{*VmrB zWbeCuf9>M3J4M*}pRVFf#6kb)Z%d9Y+!T}!zH(~Y=l?+0Me_~!!V3J;gY&BABh?#E zA@dqF{abIEV!em^6TLFkrd1zJ>{<26w2eO&9nO~>Y44r2YtiyO>xJXzch@pU8%x(} z*E0>0aC7}+BH@3&Ylv5O4Gl6{+4Elr{DjSV>SpI#Me}BVIH^N7WAC|f3p+ku(~);> z`?cZUx>n4YB%518KN$ZmFOR+JFJrfA>JPhKgtKlIuk=)Vd%i~Yb_x8deJbowqA|Rv z@7eb8lQzsw$*ZjG$C7e#dc~eXwg6143ck}l@k!g~Yq<3<-_~xp!fWqwX*cfpTio5( zQ`i65?!&T&ACKLAU!bAϔWfypbnnp&(gRzK(H`1|PmQ`3H*{chu=s)JO^*74G& zKF96t-9x9F<;NQqzxLBBDcKv-^)H0Z^p;i6?z9gb(2tJ{)wZmgehk0!+Ll*$Uc0w| zUK7%d9jguu#gM^1^{XeJ7A{}>ZpQD$Z6EdRnN!u&s<>7BkZxFiqj}EN)kRA$Y`?zF zFy(v0mKA^0o_^xkS+;qeZr{u&OTYH``VjNlinYY~_aMi$zJ0LlfP~rX*n4%{z-GMp zsayL~|CDU|w(EfjtB1pFm;Q9@Zwz(csc8{n3nru`hZf^I!mi1kgR#b~rz1yF!C=TxpZ#WvHy@vkJfLRGBewDp&Y}OocLfGxux#-V}_GG$6ts(Q#W<_ zBY#c}d*&~162}(U7q(6>6E<->LRWU)|6$wyIPZ1bvc3O9)fd%A9SiEBdYj|cS#9Uf nCof?q#>MW`NF_Vy`;=Djdf}IEzPa1HH^(i=0a??(q^09uV3TsqwKsZliQ30P$dXUSW1@9Wi1=TwGjye0)MeLSka#$dMx{ z6bh9}O-f2)q@<*vD2LC-2tp{6Nt8-btJRuJ7Kg*>@pJ_Ok!Td<0E`E4VX{O*S14F2 zHAkoCnasG&A$7TxUY|Y~vhop%h?h(X85$AGAY)sUXuX#2Hi^6rGSH?A2dsk;kAMlJ z2vA|bKu~NX#jU6LZS<&@3Bw#1mBL{Igq{=tZ~&wf3Q41Bm`nqkZRPRmalB0~_iHo{ zEf(l@Gf{d9#^B&Ao|G*h5s?O!8F)%FUuzc{U4+#ubq3@tE|Vij;Sq>X#+8tKQitm- zQj3#x`ZS(^(HFJ_2i-Ib&fW5d%&E2;cw`0Fn%-N1+vmP6hPpV89CA7|#VlJ`mv) zg^Zz5Ax4A1W|g^ITA$Az4*OtCizx@FIvF!Ca4SpdWRn4&AtJFyRjxskci0(({s@~6 zxGai*Lz7@E1%ayNLW4$OHELXTqt9ax2RtwuK1aka3m~Bfl?OKu%Q`+P7L~lvG8+0NbZ0016x-X z5Fq2;jZy&OcI0Md78ZSTxG3}Zqv_Ov*CO+wa~mqhXLin6`crAitNiItN>(*BZJIKW zPi-(>9J&iBsaWf}x!0z(cI^K#HDlK*&YX2MJ63ZEM9-2<;1B2 zj@|>0UAHs-JaYbzcGjc%ugJc!D=LseNAK0s- zt9@X?A;}(B(t-563f}l@-T(B&b#-hzSiPgVrgm%<^^1Fow8{kgY3TK%f(C9RaLAINYWVG{6&>NZ0|Nt9BEp%^p^#p1OD#6Z)#78Ih0F`{HE&-&8-L1 zTS~66#d=wK-@>xClJ1Uu{kv{$>b`QLu`~YizpvImxmC8PZ;(`fez>v;>8xAXx3l3s zF}bulsrY@~)Ie@w@0Q0yKWjr7Gk%@hRGgboeyx4U9f3%kefE6Wn2HWV-j(*7;vrZDZJlHa!vH3QB|CG9}d1(i>xbU5uqje3eSR_Gi Mc0pF%vbDSa1F~(f-~a#s literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/dive_loop_45_right_4_4.png b/resources/g2/track/corkscrew/dive_loop_45_right_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..43d6268eaa2924855e36ddc34d3e21c2a562892d GIT binary patch literal 1229 zcmXAoeQXnT7{`Bmp|??>k;YZ%$Z0w$@my}nNp4#8fE%mJ!4A01G7EHafr5=5@rXs5 zP_(i_3Ok@A)zz%TYRas!$O3g#tWCv=C0w9eIy_^MR!TCV!3Gz^sj0cSS!Xa92m+^RisKlbw~C_R@puA(P%IWtr*n!@sa6RbP$s}KYO7W2 zaG*{X?)8}hK{gVzC6Z!R_7#d@8bd55wZQ1y7F6PmA(0sO(8+)$8xxd_x2%L`D`~SH z*f8LvfW#pY0ZIBa`G~ff)x$Clt2X#hf-r3WfCa#YAc98Y*6SssF>Er8vuwt0&%50- zp%6?a^@P?y>2MY`*^FiZv$zRfGKoRj6J`7fE}XT+6+24makIh1VGK`N1zPa3-jFR6 z7vi!zt@!0~q%fP*P(aH8ogJVqV3ZItq%+5i)+8m!7GFUOSEMu?XE7~L>YZlHXE8;1 zIw5khhtCJZV$@Sf24>|bET%PD(ui3I(oWG%j`Q(+(CLi%e92Hqj>ikRT%}ThKraAe z03jk8I-%#Xn7u%Ii`H=2nW#v)YOMS)KMU2EMnmd!X4Jr8IBznE4C}Skmbqd+e`=hM~d45R?C03ZS&0T2Zs13(c0uqKv< zE)hn(Q;XaH7~s#5H2+(>DVx8iyH;SBvq`@sxvVg$Ucl0V7_A10un{cxW-DM4vuiy z8OiMk``wACUrtBMN*Y!RB*VZsfC_-H#=={(dn~=j6)YCXVBoRDY?iiKIfsLHxda0D zka&P1qBN0Y@EnVkEe2>qq1y<91dLNqW@^VzwyWWz`*Tw6Dzlru!8=dG?2wP@%NzLPu%S zo@Al_l`}18n#;PO=uOqpruEayzH;_2PVIkYre2Mw)=!;N?eFjG46L0xEIPNG_qFzH zp1AbQv)aZL&d#Nots5OFNAc>STWuX=>iuh169a6U`W<}V{2eC$l$z@$-*jSdHspV=}(@zHTL%9=AkFM+pXK$m;SNyE?Yu|M_;%8IJKZUy*afV$<}S8wy4R8 z)W&nerPu*-x;T5P|Msx$gXi~!*ZwkbIyJEDK#OMgNa$Ge(31Za|9j=OA9;G;erNhv z`{457J74@c)VSdI^glNvBR`dwU%t3x@6pQ3_?_|4kb7XPse9?iU*3t#oRBVR_CV~@ uO$Sci9Xoseins9QXwQA}y^?HrFp2hklue}1mQ*z+pl5Y&*Vn5CKl~r0UL=hG literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_steep_up_diag_1_1.png b/resources/g2/track/corkscrew/flat_to_steep_up_diag_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..561925a0d32d0b00c06b64f912abb649334d9d55 GIT binary patch literal 9698 zcmeHNdt6Lg-(QukI3a{+QjU}JjW?X`aEyMDLzTWhar z+wx`Jqm8B*0RTq(EcOh5_xZ3)G0=hE_W8%t0T?%mwbCcb$7c>OfOU{lYXs1O)O=X9 zKGIVlt*xa4G`+UKG7i!j9!;5|r8{)bhP2s7dJm*$edN)GG(k%njE46^un-|V9^Q|` z!pR&S>msD@z+y1;w-{0yOQHFfGN^6a_x1P2EPoVAO)GtteCYns(ACp7FfweaMn2?2NC&mcu4ZZb5Q zXgX=~l<#L+&ze2Q!O@BA>_YMI^jhS-*k?&#(2C%Ym7zZ{BUw@GHJr7)q;<*sl+^W` zfBJb#=GJZ7cjxTcyDxYDfrI%4e;helc&zC7sq)hmXT)dEoxfalR5GC(mCrx4e9%c>U(>hmOv!?w;Ph{sE0%8a+QqV~kebQ|&CzNx4PcPsPENeWAfqkiH#oK*7=ptoaa$E9MQ&aOr^4#RM-m7bh>pmo;L*#9fkrfw>U4JjBN|)9nHVjwq;IG7N}3FIshcK(`&jKphRO z;PK7pb@pK3N_pH<4AgGGK-+2cwLA=*c%~Ay)+yg5?D6;F31^P?_X6LP;4|Cuk(g8r zyfLTk759#2f>Woz%%wTGeUl7t2qQFQ*+<-0SwL>;c-eqPrdx>_$nt+&I(D^+Gc7EGAJ_PjO+v3 zrAAy4of3wIW8fKX&~a(;1JiU>bZRWLB(Syq(IpyY_2Bsh1euCE2&(S zuT#5BC5EG{4zp|HZSRMcCRDs}9wbN0#k(ZCTK&K%<>v7HqAz8LqJ>Vp+(FUU?sh0+dV46wXa(=pJc#=tMg;GCL= zs!+9{1v#AB6sPQu7Eh`<*WAm%Ut5)U(_9H+EK<>^;3@J?`fUM64F|nup&K)*Mps#T8L0 zt>`Lhdm)V4jmS$3ppRid+*g_(m9?QfAw+;`N-{pN4@Sk+ui7>%V$1>GOLpzv`VHP7S}bYGDdF1F8EU7+_-HamY;bwd8Ye zUpcTta(B^@J1>uwU3b%!Qa=!(!Jv0oVGjkbxXqKUu3J<{ec$cEVeKva!0Dyl?-+O+ zcuCTU3bT$?EG(;>aLq4Izx)!t4}wg-m2F<+#Vzq?J{jC)uSblk^IpmcrR za-H1nh*r|f^S95&xlL#tpsCJ4k)hE$jJnm(&kM55OSk6Mb}aB3A6zqRgfibJ7j{^zIREi;Sslgqt+3+ z&O4cEX#xgfsDpEEJ>2v*Y3>C6X=J?XpVAHtz-kQitaV$50Xtj|oZzfdk#Qd~h-=5a z3FqgD(a`p4(z|p{VZb0wb*e$EF2TT(%j93#v!b~j?rRuF-*4Y@8hIa=S~;P0Ozp2v zGfu1j)r_m-cLcXJv))FW;#B-0HSV*XfB}O{H5F;Wqc=+M8++O4OlN2koO`lf_mV4iuu;~kvXPcrVJ)wd*w ziLf$kOcR^`4tnBs@!Uprai3Fr?`@uca5kszmGA=ET*Tnq5lBu>JOY!_npFCmdEqed zYuyyiy*)*xT>>kG`pA6q8fJ+R)j0!<}Fn;o!B?Cq-m!-LFVRhrVu7dgAlbR^;7zy zcaOoqHL7~=dgv-+wHwShRJ0QJh}zW&vl_HgS7{bXzd998hW*^P7gb}c*4>hZJZ^b=e{Y;DCV0};7w&oMtO}1)>>p8rShtooS2T_sjBbM&X&x;{ z0+)4XxU37HRCu)~(xDH7BwX~}u2=8WC;^2^haW*N4`oH@G*NhVe9rb$!e@S~^vn|z zf5QN^(@lVmp$}|@VjH731bqvTw^mSY7>(Vjrv)}#Wv8%*I?!#}!&f_EpavP}rUw_n zb#tT5oXeE~khs|)|Ed%9xh@8d3DEg4vlQQZXN$_jibje1$>sjtYlX7D3F=*$?fn=y zAbT2?F67GKLKz|Kk@ir3cW1%H#?<|)oU;R zdQKTaJxzU+i@Iar;W4BFS|AgpLb^y4*#QBRG4#)3XeFwsA@MuQpIsdrlWq3 zRBaC>hn{%AZWngRx{Kng{CDTvRn@BRFOfgSb;&URz0-PM4%1;*JqD&}HYRj@QxOt{ z)NxgOXg6AGQW_e0{+BSTU{X&E1|}*mm#kWqYL>COp=yKtXC6%-Xi3LyCqcyYiBquM#;Y z#V^&-K1}xaYl`jn%?x{bF2PzT-XY=19dqn(idL*Ib8If?;SVQhQ)v zXypz)zJD7O%W7X4Wh`=m9ocL40SeS5CpUDLS)=2i?l8q%ld5+(x`m3VuR~=TXSN1M zkGl8hRq75`r8>Qa?l3P-o;RtdjES1iKP{Z+Z*;6bPY93_b~=^3ad_6wD?%o7zpOah zRG|{w>yv+JbbRlkLdsAOoG-@Im$V6HYw7O`;mD-ikYulKIeU}L6t=C#xPRRvLOk7(X zwOsl}gu245Y#Hqf|G_5bMnPXL6K#MK*rESqIYxkUVr?;@@-pKj^?h$q#bVhIe z#*b6YX>e*w*!}|UsPS+*;#661XHm}zT@g_E@@&ABMWy|r)_Ls%cV7)=RJ0@o3sAP;JagreUx(kGI>H%U)l<^ZjknFgA~t&+ftbH*eUhsDnzp@2&K#vs|5-e zo&8O5^5%wY_M?HjrL9PVx%U7y=Vct~{`j_g=8=U*ANU?QTym1I&uo`84K>X18XvMi zp*!AxzNSo}lohKBUuGz3J33XNw-egiL+|_h*sR&U=g_Z@;4b32(X9L*hl;Xm8htRN z9e1|lLZ!4u;vzfImA}3E)G||7d(!UX`Dc)po5IQSFmN&5}m3@y%J~W#5%;vgp%!Vdp&i{NioB-~T+35T0^D z(D}~g0w4E`8+>4G&kV4lJbUS!*)1K#3*S$e*EN09m@PA+-tzMIZ(*l529h7FKEzJ# zRfmo}@(<#l)?=*q$F00#c7>F;?{=!t`Noai3pXrtW8Bf*hC62`QB|L7IU!^(+7T1= zoAZ*nd(N+X7ZL0f^n&wZfBxD%O4+%R_@);n!L23fH1u-(g0Rq6lv4jcPHg>t>lllI zokqt`j451gb=7mr?HqG-Yz=<5@5~V0?5QJ>m?-KT`H|Exh`+ww(U#4A&Kcgn- zjo@z#t~w(X#7fp_kN9n)O=+{papPm!J+o=H$s$Yjk|PL3Zw}w8rK}bt7+3T<9*vSsEp7QBX%E z!SlNmPSDDvm3~VpOm3_lBa$1zvP+4LA3E1?qo%|&n9-~xiwG8*6X$NJlt?WtIFas_ zA&!3be(@fxHJruk6Ip@lmjyA`M>Aa_EvfU2+)^kIAeNQHutk?yzcp{m2Rtzf^ zg7Tnzgm3thI8k4W^^I(rmLYY%76cCW8UGvZPr45=LoPo*iYJ%3PBW;Fr@N&_UP>gF z$%&*4lO)FoMwEk-tqY4uvUMQ3MA$||lALX$NDPua+1|w^l1cmu$|sJO#E4_EG*A%S zjstPXP7x%h2**fUCnCYo)`1ZjVasrdV%j>8oXJj6kxWPXD8g3|v_uY!N=D4rQfZ(f zArzDB97$l2>}?q=GQrk?MJC!hN5L?Oh$1@>h)gGE7J)egrSSu0!EzsWOQN0qmzw1< zjHD=TVywI6Qcm2ulrIfIoLE+15<_D&0+|E_bt2e1IXXL$om{>!1+x-)FyJ(pL&wWQ zEs;#hB8bRY)s2=J<@knGblDLUMTyBiJ<>wRY z&&_^tIz=*)7@mwI798#K8FtX8Gi)1sdy4(AUK%(*ZX_ov^*?cICXa<1i;J3I-X$o=7AUS)^~#dEBTZJ|mH}fDP>kZ3V+~ z=ycy=){qBhf6L8Z!_v418qC(7U~5nQXM^ECDva0Uj87W7;s3=ZZbJ-TB^lUnxDF;S zm<#crli^33Y0}Pr@%reC|KbP``tL#hl70U+*Wc#)OBVP`%zsDM-{$&D7Whlde@EB< zo4Jg>yiT#=;4X*{UzRHEL_GLE0$};lATRjJ1%Fl6*4Eb1(HSvfgs!fx9{h1%U*EvM z0RBL4YGq|bBH=wesDXjLOlBC5$KAYnb8fCsBobFu)ipFIJ3C2uKy?K)-;rTqCehJ2 zei}YA%QZKTRw$xNr0`rhOWs`IVWS`7I+E*aiiF?jqeHZ$vUdCkR}mD1c^SuxgJWo$yWwh1AT z*;EgHU|<%LnaAggva+N?p-e26*VQSN@DR$33#@bXNrlE960^Ws8@AjdvpK9l!Ivln zb)6!`V0|w((#F`BY-;L_vkJ7qGhJPIzO+m_1WOZT<hl7P5jsu~ zZIhQqEzS&-%oLTLKYOjCq!lOymhEMQ6` zn`N?Mg+hkGvCPnU zWr1M+t4C4r!7zStD74Q=6HUFQkjoJu8t+`VMh=jExPrO zuBLOv*D?&wW=96;9=J?E%|nf~e9oVK^sL|W(0Bcj7WO!sQhDQ~Q6>hy(KZoj6N&07 z;BdCoQO~=vKPH|)Dh>9G*lajfIci4G@*T0YqdoPkE@yDS@{HVa=btR{u2*g?X)BA# ztXO|QZ}!oD+={&CRO+5`!Q-*Rx>=n;*7?&6W7j-l5c}pl=?I=z5_sUWe?HT47OD5J zwNCBff}iIU?S1v;tke6QoxwF(^s|eXy_|Cx_)Xl7xJhHJ(_KKkPW6)ospa{vI`WmzkKwl0cZyOYp7p|G0uk)t=1L$vk10#P1qp$>81+ICZnSs6r zxLyJ+ByDl6deHwJv}Fr__$AN+#M`T*lgoZRGZT!d3Dy!kZ)#?4Ws0#f#p_`RR;FfF zW(2Ul!cTut1Q0>XAsMuYTTbI!p5%nS<*5P;zvXEs7*~8l?@}P;4SS)H}V)-vv;@CZm^JCK;R!Dfb5}VOP8uFRbHl|qOyGXvK1>eR;^T3 zUAg{)wQ3r=8&I2cH*DOf_mPRAp8m%M8#ivnZ~NF3gTvuah6GznGaC~u&PI#bL3dn5;1?W^(Sokcm0`8Y6Dk(2j zS+;zIDgdZlBbSuo5+y}tWhEsrn+)b5C3WQwKE&);y7mB7ML$Zz?8_5BFEiL#c2m>! z{>zWB{?SL4uUMz0y?(>yErwgSZO55g;4KMO_PZQ*JMMAX>*ns^N&f7h7cGDu7!({5 z%8WT2%ZiInNd4;Q*Jo=-zHQc__ z$ouW?y|(rT9i3g>J-z);2A&QM4L^JSVq$XY)$8e**|~W+UvfU*eik|V7rxX1UrUsf z6qQuud?_qp$r)EyQvMLL^n)D-RH#vF_07Iqrm^$H&t*548(>{uYWhdtU$O2ZT>s_? zIcp1?{r4C<@;~D29b5_Rr3bd>a7D5d3>Y*{8v@TlsTx$ePNmOdrgtg-FZGS0UHKOAsia!fQ1I6(jX=C#2uM|yrp zCT^OXkPup#qOqN1lYD~v_g}5MkeslT{S!=&7e2RRoT`!?9BagmCx>?CJQj`$@ls;* z6b6Alj>-&@mL|L?B7HtMaVUAU;`Ydy5r#lC+MHplHkyk-ZTNBCOPaPMZ0D1K-vpE6 zeP?DbII{+6Pg|2mS|z^cV0topM#ebBowXRyN#+-C&Nw&v)9aMN6oa)JZ4E7ry3Zg` zBLYQCBG3~`c_2J^jhP3RkNIS4xZl9vm^?gT9#-+fx_j%{^xX;$8vFl!)9iM5Ou`c< z%o>T$(-4S$!0N=2+EbMqG>xp?$d>arsMKi@cBaOHHp|Q#7WUS-7~Izj(`JKkOLO&f#Rb?fP5Y<9Q}_wj{jFUPNJ*w#|(*jS*(jR^=;>3g2J zftP_mS8F-1Q23TU1Tu~t&_l533^_H^>d(GGLc7}{vYj*`Q9(#m8rLiuN}{_v2k zrun1iZD0KObo*4h(+I7}(xU74ZMIF5h*EsY z7s?@Xn3IEhoLhO83PFS_pG#ZGtElFg}dKun` z8BY#N*S_N!p|df*uv6DAOw7J;I=qV&OS|u&SvJ-0pxGOj=p-ig!f;Kj@G-BnZXJVG zp!Risyq8jnG6LlwkT?i|%E|Pz59iLncQeC9uP+|@*sftHWhO-euf}AG#rI)&8ik(m zo*7<@3~8x_Tl!qw?21&6&R1GqwB@>nCBg=*mYP^=|6EPsDNdI5%;m%u;#eZkYy_M} z;17_)tY$l!LP>rI^m6EGX`3M%koWV%Uwf0!l`CS_DREyeW-(&;+H${0k_soVf-2Nx z15s@5nvtj*6KOu;csehl?!dP{2U7%;U<7iSOv>lptRe8PzbZbJw0v+tw&fsSY6@(y z=tf0_*aU$%v7@n#7}E9YlNOSis-XJq*~^(sLP)RhqR92$*4?VTp|Y^oSR4YWNmH8< zXs?iqn&bm3l#c9s7hOu$4e%bN2xm`*3pjHOj`ZY>3^4*##lzJ-<-|LA!ZMRluOE3liHm;o6vu(S?Z&1p zMyAEzR5SX<3Wq;Go4$SZ+MY2%#5lI?I$IZRN|RO~P*2#E%S83(TmdCeD$05~F4OI4 zwdI|UzaGpDEtUo+?>70MXh-{TAZe0yu`S9`)-lC}2jjir)L14b>bc)f^L~;PF^CaB z@1>q4CN{^oCSyIK^w<3^mGQw;$IVU`J+iyP;G2IXh!@RSbF*`?1446GU1zZyYrM7; zEiLZhKepZGE6I$iVfFj`*yEOcHoI4%w(tC&-4@4h-CZh4>gH9(sP~Ha{LDnMwXgD1 zZa`0?v`3WbUwb)xZ{@?l&x$1>T}=LfT&xixq{v5Tz_=xfv3+p;RT71vec^fXlt2Z&~LfkjKq_V*KX7x_xbB5$1rVF$CJ(S3{g^ zN43>QDxs4lt3BoKi*MnH zqS({${OgqR@JdQWgtWEqy37W6))5`z)d=a3^ig-?Hop4aBTtV@D{a{!%g`}r1Rmnu zqK9Jw_5lCYB?}9p{}eHvn?g(jGHxt!SBok~nJ`5@=24p4`(g-%2e{v6J#cdw44-3i z5(X%Z-V?GfGvRiItno%@WCMO;lZVee)yHI6-D(8d(E&1M%6&20s7WA6EYB0G?JX~v zEf5n&5$IV;pcKSl?MBnPVTHJXesw&IXHK9PFG|>BYn6fGp;MI3wPk zGKHxb_%=V{A>6c5o?82SeByOde1XAfwuYWDleJ88f4AXdiIW0tpqQDW$gfz|L0{b5 z&o=ic?_7xm`VXqyF_=fj}afhQ0c2?2D2)qr&TbHLQt&_TFj%X+UC>IdN-DtU^GbgP;uQ z%6DAr={A^kBW~2e!~Tqk@a3?9g9iD)WWT(4@@oi@z(=D@XVLOXW$jAZqAB%s7xvn; z#*Xp0#nBz9CB-D~P16U{ik3b+34++C@R|^cfEy&8Iq@#m1BsP5SYk49w?e%h3B6F6)gp+BSivI2e9=*vgQhwvu8|V@D4AX zwe}a`&5>IX@zVx@VQ&VC}xv zGc1{FeI)eC_23Gh%0$}yiRA4@TLeQeL`F}+D(;9W>6PxCLKiwhyTB}c1sRyrT z@aC5S8eF*I4THa&tqZ>CNE-_E%%>cC2+XrU?`-;32sA}O_?YCF&|<86EZyW?c%L+O zbCvq7V}-INpX9Bc*?Xoo?ZczKIToaBY^%li1Q1~pDW{}6oXCDzV$GvW z_9IX@aoTHiVSsXHniDEU@v9iz9W6k+N6azwEuRzR?ny0GUN93YgP;KmYDwRr=6c_9zJ@9>@={PMIdoKQzB#irkQ z$?BO#pu+J!&K!*`Jze8mr#9wIY>OS^zYHQs!gjw)=$B6RmiFRPhJjaYg3nVv+Ex;J zeELPg4_D%nY)7kJ>uOLw=eKa-YZx{H`Fh;o%I*rprT7;9M0g`nab(Z8PlNIW+!b){ z*nC&+it@q(cddmfAln#ej2wLC6r0jfJ{vnMBwQ#D=dCY-Cq`tQqFXm?$+w9;XUOwt zu-%e*(X@G0bvrM*t$E$qXnFeH>Dr#^mYR+JWtEgQa6mleSv@0{GZ#{&%`1Cd;z*VU zu_VsJct1bUKwsWKcY-H9#(s7E{Q=Kr-`+wH-+wK8z|E{0kSc;mbU`RR7X9FWcjF4{ zjhaULN*l*xgf9Vg?QEF?h#+C7&ZZk^>K=8ic;TIYRO5hq;QL!U%~1;uZHo>PJa;;|a0WWB7iUHd^qt5rg7 z!K=rcASd*AK<#!XO=hvg}G#)g(SiP({18Er)Y+ zw(TORr#(7%2-F^g@D0RTXO9sXJu%;C%oC}e{$^@EOhlyF`gRRU* z`C+K;swr-YZJAudbVv0K?jL~gbkoYfD=&6e>PE3%Eek#~EnE%({*9d#}N(ABu;~ zQ9$D$^Bm)%M-JG~osz89^VbMnjhsnW7;`fs-XR)FR$VzHPN_UvG$QQrBhBM;hay0J z$c@TOM0q`ZolFsv?@D>ugX1z=P{F0054^ayVCcj!nYS~)O<48n`1sT;aYLma$*Xru zm6Q$Qa>3lA2;qPrGpKvM<6i3E{k$J0CYUqXS+W`(1X@EJ(gi*SPkTKnBK?(-gza9v z=0MOUlgpu<%;S8?k@T&_`#_1g5HjRpE_1D3~j?Ml#wdp z^FT6!z3QUH787|xXPxs;&0#qSLs^9z>RT^yITEGhV>Y(i(I*bo?S2%(4eJq)0k*e_ z#zye8FS}6uQdgj72EADh@FHv56!l3x%fa3EEsNZr>;t-Jb9^6`Y zIs;qk_eysU@x@c(zj)YarhBZ7S9YQ6!%=yhHvJc2zc2W=eZ>dHpfW6HB|Qo{b-cTg zC_QX^8x9t<_T88%agorusAt+dsfFBwFFOj)VAA{Z0y(%UyW`s5cvfdrt0ez8K)9U$ z7tG_qZv}&VnTkABW4+wYo_5Kz%sce6;j-eye7s~csBs4n=mad@Fcf^Y8bk)R)%lPI zRn{xEp8ciyzus^E^Bln=h5w2xR5=rJ{y(0j-;~hTuRL-FIio3L~j;~(#q5DJ$IX#wKGFo&1akk^AV=# z#uvZ;V%qZJv@)*GqW$hyKeiO7|4dd|vlG>*o_&hm?Bu$l{`Fx}pF1n+%%E^4=yg$i zhJwP0xRdKIxYX{jsSDA`oB7t@@<&Cthi}ui_PmNTZ-Q%zB{GHy;9joZ>pBwC} z*_VD4mv5LPX(*xS=j<#o(r~{XsK@K*-R0VYJb z^}Z>kWp;|>1OX)+!g9`a3A{#^X?HI*DG{8$s^T*a*^|CLbgx9?+-8jxzlzr$y2m}J!)C_HAW(**Vneh=Z)Hve^rhy#AB92{jCM`N7GA4u(p(n>l^=BN8vDMcH z^LlUT3y*Yhd51oN`9=yr9_Tn~BpPF4iVhD)zyAa?#vv9Uc|*`&KEZU4kEEkr=}gAq zXd2ximL3sf@IDIpIm$Z>a+ZQZ!Xp=$0>b;#Vga;waFK_j4=un1(9rZl^l*Tb3FyQ8 z2|gwy@DE}Ai8lGn0z2;$0+xG+|4-0wd0zkqP%bW3yBM^?@^(~6^q4Mfb)|8|3KV(sGK60G1LeeU5*MMHwgiF zEG;ce{R40qV+%Yrz!+y?=5I{J`&$}Q&2R)N))Z@QiZ_1`1t~fNSS9t)`&7wM1prh8 zsz1RDOQjj(@cw4TI7@=Lu_YkP7_2~}5(4QK7*qNJD!Cr4cIQAkqQhaB%B&VM@L2kElkMOVg;B1f~Css6kuK$2fSF>N7Jb>jA(ZT;Uq^Gyw6joH)A`47vEInX>PJnB1iWW?b2%>}N@y1-=j)(k( zDG>b42~?b=nK6cd!5QNSz$gd-I8$Rwe=OY+XMwW-w(@7}Oh#Y~iyBSe5d`E2WChG~ z;ha)$>w*Ti{TZ4SOqZ(%2+Y_NV{D3d$Cz1};;hWDZv=+^&$DP@iM6l{45S)cm<9qC zEln+qsiss*V;lw#IJB^!VMrvwmP7bHEw5p+@T_6xmO<~ax(HbH-t9pB{ z4GTlD647ZH);YPP!cs~Nm)XS65DpaB8>x`3RT<7&Fd4F|n4!Nn6A>gGA z3kqgL4URex#Ry^%A-0=JAwz|mq1IKncB)AS8Ac;h6hzEMkOl(?B0&&EMTMcJ2J7gs z4Gjydt;t(nfGGzvhLSelW=D=ZZ>@TY`Ch~lim zbW?*VD0Y}pZX&TL&8;Rkh*t!6adU^e8m6X35F!MTA&3bC4W&6L4YpOz;cUUoz%qK zfdPDO&f=HZ)MW4N?G_eBOH5>7(W!WJ4iQ^qkL5a}+et>lWCMhPLSREA7mHL85xz4p ze!Q{jgxm*WT=%&_pA2;ef}7=$dkzBmsIHYa1?Y61HW*ZiadL4`d9I+cc8Tr>aZgTw zXShzgcDV21ozFgSEmd#ju0EtwBMSYI;`GSTHQBxO+nsY>|Hl{z~ zV1m*XwB*$fTkiA?yvU0Z;w5I&{U_SpMC)|zKEFd7>8NpBlFlDwsR!Tvl6ExXlk|gE z?pM!US1GNhuI+Pt`CGc(HTU7|H-4H`dT1TpDWN7USG@kA={%j1@KJZU60tDG7&3oU zBVE^dLMtZO;rC;Yq*4A~T1KWkTi-mgx67Gnwn z)@E?b`bg)CI|=TgDx%3`pf1Q-&mp>OD9mZ&BdvzuByMTHz}TC4V+kAecDUc_(luu!uh%RzPpvl z-bM;{4ekoof1UBTN?~6~_>v#ki90JE!B2<2o@t!aEh~0iZ7aRacN^&oE()kWI>O#; zcPPi>UY*KN+;CV%`aX|PmnH6@ijVHxyIwTs^2N1Q2fg6%vjSn_mj!~>HQGv{Khf30 zkF{J&s+9H_V}^d)UGVK`<$GEeeh+mj_yV_SgRgb`C$<$!TONLyv(Z|4rxv23zW>M1 Vc79*#3A772Iqch2vh(vJ{|}}0ac=+s literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_steep_up_diag_1_3.png b/resources/g2/track/corkscrew/flat_to_steep_up_diag_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..541356ccd97a060725892c961084face403f1e83 GIT binary patch literal 13301 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_steep_up_diag_2_3.png b/resources/g2/track/corkscrew/flat_to_steep_up_diag_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..bc433a3f1425f89abfaad9768a9b91d038d8dbe4 GIT binary patch literal 1099 zcmX9-acCQL6n<^mUfXO$jF@gw4$0UFhs(B84-DPuuJu}P^lGm(LYOBzXmn8zca^Y) z5im$92OcheWF^wb0?QvamO*Dv2{z6Hi$r$Nf)Q^RB+@wN3^k0>R`)Yw@V)o={&^pK z-+P}-PH_7N4-Nvr{_(Mqsm}Cw3h#Gy`ZKv#KLBvShA7#xm-OxJ-xlX zeSLixhV}RN4-5?W0)YTU1zDC6MP8O8s;ZjfGq-m9W-Zstp#zw2vLf}_`$YNB{!*{zqg`t5)wYqF^mu5WkHZ5Z8I(gIl^4=dXIY}8W!8!%$FkdX1|%L+ zMNd+~^%$8;Fh*J|=b~#yvR278YgW5`7cl@~02M$7FaXv78W^As1QsP!WE7B769`Z! z$S`1X;0S<3K#C7(6e8*&-j+eKy)jhM0YAwPGG>&mWPlUl^B9(~pdNNkXB+Ev|wv47@ zp?00-d1L}|0HID6>5kkZ_*02oqe17gkDykoY$PJaVsav(P{9-(%rcb0QWZY9A&|{* z07*DX5-3L@lR-A$Iez*%_twK7n46jq;pNSrXFFtPeB_nsXFvNm!=JN`?qkm*zh;ehkq$8tRLOo?TboRPw%_J zU3u?*X6v-Fw0PmQiJ6`kUb3#8dONzp-n%5mXIHbAubw%wd3Um?JKR$zK3$yKePi_) z@l!Z`{>Ytb&J>PQ>kBt-KNuSPbNIlo?JbYAHU9hc7ccI0On~vxiIHn3-}>l(32@{o literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_steep_up_diag_3_1.png b/resources/g2/track/corkscrew/flat_to_steep_up_diag_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6b6b25fdb25d77ff694a4afb5b9d0916d9b80f50 GIT binary patch literal 10364 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_steep_up_diag_3_2.png b/resources/g2/track/corkscrew/flat_to_steep_up_diag_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ee37da31e1f1b1785f059520a9f4424f6d2ed099 GIT binary patch literal 1395 zcmXAoVQf-o6ox-27PO_*(FPq=s&qkzmFZ1HMZMKai`{j-O|J_v%u>B7D#@5)WR)pI zTxmxabVRYCm87)N_BOIwSDeIPhT1j6Fk2%!bR=VwPTiPdY+W_qFecAAC+E+3f4uK$ ztFKdW=e$1$0Kl!?tZc~5s$5la@^XFY!>+vmA#8`xn7FYf1Oqe7UL!K@a}I3bLP0U!X-ve^b6&mt5$B@&-PF-#DnI$hji zdE)iLa9D`&#i&3=h!k3h${bQ#+DIU&a}M!-SMi$%Q7B z)S*`RDJ*0pV>T-8Hl}D>ChVSy(J&R^@#PY!8j)oNz9(o_|m3O#yOD%R z8pSjkQm?1XW&+j>vmK0}umR=XM#0(YxOORzp3NExss9cOGDWb4M&DGv~#V+Cwr&2ePX{oRD#lf6;ChTzoF)f z`^z6a-!aYDSakSU-eBvC>vIqOa+B9oJ$a;R{AtsM-^MF+>zP!b_850&0cS^(vbUe{ z(Z$z?J$m+_wS1tvbh4`K#q*J)jHdYoyW6|&n%$%PMUP&Oj10CsoT%GZ({srA@14W> z3;S0rT>tlx?eR9>;xc-yrE^^=-q-HAp#u9)+$4isZO-@HK=POxaYyL12sx-vPIS75AN8o3~%W8 z_Uf5PbAPwHu?K?)7)5o2sEHd6Gw@O>p^IKo^Gp>!Dp1<|y zv(VF!#>FRED>}E={P5{q^4_^$=Os0BEBjoRmX-J_Ufw7xBECQGK7LSgcKqV`H9v{K z)$UOAvNpSI{DJ=vi&dx%ziMv%U^kK9c5SSrt+}*{RlVF+vfyPGxBqv+{V}|Ue|$;T zO75H$n<|^wr>$2y9p>xcD`s(vYN5L0!=00zdgbZ`_jWeUyW2POb@SRwKdxHSSXSNe z$5Jai)BYZ7^C_M6P3!qdYH<4DcH0KlZW+G(^@#jK*&k}pa9S!h>6d)iA0Q4>Qg9AP*lIc5VP6t zd%Z9c5upMJE|gPZg;uIG$<#Jf&nV0u!X6-9VcHkfhT;Y>CXy>93R*_$F^!2ZIVgu$ z>kXMgoQ;jUxTHTZ8sXzWKm(xxh^;`%AedLE3`#W-+{CG!39~Q7upmXTl6; zI$iz#V4UUB2^?ri#7y&TS}|jkd8~NAL5Dqt{(vnO@g!qxI(;AF0H^^l1Hb?f0H7a$ zVFbVoC<0o|FyMpn7$pTJ6u58@Qi3=IAPt~N2%RYOQ7~kLQ3s6s!2iZ$fFyvLLX3K$ z%_4I#O21DZ4%;~{kW6wg!zD5R)LMu$LdqxBhNPyrf=OutX-jz29UTiLU@RpS08ET1 z<$Mh;HqxloKr%L?&t(e-TpSxn##xw7U?d4c0LB4?87~|ex+f6Xt)Agw%;SCnb2Lh5 zG_=vEw^~i8+>XiJI2s_(2q_<=WJ$FIYQ@kdg&q`!aLAFF@MH4|AN~IW8&peaPZ)H^_D1_L_q`oGN2-WxV&b~lxc~EjG&^oIm{^sg-_HO^ckh5<}x}%y{|fw(ukWG5GlGT;^`&+^DZk)i{1{>o zFInDGTYa6sa7Fd+O;aYl{m2&xU$z<|kSJ$^6-N@a4@zl># zB1lp4)st=MXWlEQ{A=4?X7n7{Q9e1VXXYvN*iL#r{>{Xun?I;_6}@@<^r;O+GahqN z982y#sq6eeg;g9LxcoG4(TgWHAJCL8zw(-HPIx{3>yh$3XD)wtHJWp6*9AbQe=I(@ zpZ#!VnPBsID*M)g=)He8y?vNhv0zf$$jRJ!^&{&<+@aIUo6C#e-}+1F*uuSi&BP=j zxt6sby^@El>FnNGx@=3Iyk!0PhC8L}DBeqZZeD7w$a$xx+<-L>wdEh&wtB~qHZgX+ z0d0b|K0tsHtW4p~a1IV%B!iNNZVt zPQ{BogNd3l!D{rDuGc=5`T}cCUwFK5Q|RiKS9I44N;E5>*r=;o(|474d*4V#=751W a=aI;Dd!l)Pw8)Z)DyXYjTHRaKxaB|Mn4lj3 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_steep_up_diag_4_1.png b/resources/g2/track/corkscrew/flat_to_steep_up_diag_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a41f1609f9e7d3f010107190dd11f616855393bc GIT binary patch literal 1176 zcmX9-e~i;)82;|YT@NNMy6Dgmstm7z9!#yK7b{li&T%QZUarI;LkgC=X@;p#U|yy! zTH@46N*KDpgvCslriA@*3FDmDVAWFxHs(S`QgI0*G;rh=vrEpfkk1j4=l%81`y|iv zzMl>c1s5-Rd=UU(@!*EQNV|I5@l21SotLg%P6FTn!y7jZw8xH)j?T_bhr_X8!Gf-? zuI}z`1VMUwdKNBR=<)e{1mR~Gn&(+j49l{lC`u-iD;7(JF>P6mW|Qy(ngSf_42Rv( zC>o3VlPM~b{wv+|7y?+J4v+U`vJ2@BzR9ARvh3awWW86~porHNkOHkw`U>n91d! zu6qf$kM{UEloGI@gohG@s8Vv4Q8YGP=JOSyWJOTY>ks-U9%n@|EHP4&OXh@JNh+BM z!%CZWp*F9(XyE37Cj!toz*L0Hd4feOtkaSiO4a0iLp9(8hr3168w=v85LFPFvdo)` zSk1_FO=;+vc~gUR!{sJ1JVcNYnu+mzN))rPSTU8-b2+nAs!dNf8Vv}%62LMDQE)M3 zFJHkUH6~dP=j~Xzp-wl8cB?uMow&)1VXt76%{?pyYum0_Hhbio!|~T6u8KcoMJ-2ysYM^dw?ROEfgu_VJUeo&VnZfxRO`Jb3xWm9cjJ%3xsKrv8Hmj|?6*o_Jtj zAJit5CqwHTJ1?)_xa^%(Th49Rw&Pu4mE*69&aWPO^ve~?TXC#Y97zRNik*Sc4JU64 z;jfK4-)#2vU+TMd_K&{)%IO!jkN$LE|B2SMd8d>6eERU{>qoY}+IMo-F}Bh z-~4uC;Nrd;5ARt$d410nQhuv-%(4H}rozoz$?lQ&_S$LcrT+%U`7N{BY~lUqu1?;$ zdK8^~yZ7f~*56cgEV*?T8W`Puef?JZmvaBzH^lG$OciH;__1=np`7fi{`25jen+Bq zcMH6DVfMwN^tqTGx>-J9M`|;ledU=cAHUo>^FiRDHIH}={LMpm);2DFJon)j-;V!2 hm)^YX`>{pbb#&S86?!_?-`kcK3=Rwh&aB`5(f>7Y2*3aU literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_steep_up_diag_4_2.png b/resources/g2/track/corkscrew/flat_to_steep_up_diag_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2faff9e99e32108a81e7462f65469408dd704364 GIT binary patch literal 1198 zcmX9-Z)_8F82)XA-Nr_WX|g7q@i6^x(Hl0~#g%x$0}oR1mL1`MY6=|W;x6$97dcG> z%~E0wg;aCF3Y8tCz@a4+dnA0QvtTh5rmJ#sL%Uc^VKtOw%c>R_FteW}B+vWr%ljnH z^S*~S_IsBuS-u1Suyn(l>ozqi+K4r+wno0i{Ko@e0~`A`uWyV^O-;?s%{H5D(V|6* z7cXvUX+aRAwY9aat0k4VI~*%6-=cx8mX3yxmwWkT+&QO4eY2KtEX0u_- zN>!^CY;d6xAcO6+=Hv`a$lywe(rW%xJ&>J?7v?i%Sghd=;K2~D+wP|^nJ0r1tA%7E z7Rsh#Rz6iNXnK|k3WN2C@_9MFUw*usF3ck#~r81 z6hr1%_XI~&eJ&_qFoZ*$gc%xIY~%PnE8G8h`U4+q>gU0lyORTre%pq1Yd5d@^xEgs z>F|n<1N)#vbzHmBcICjHpH8n-)gJ5Bci`k-jxPoMwX@4cyVforzI$ip$cdixu0vhu z4XpLX$TEWkhxT_ow_;@MgxuHs@#(LIdXvSOx1jY3GWfXH^#V0GHTC@7*^~O%hwmRs zcAq);d;jp*$jG-3#jY(w`|jCv`Rdrcmo|PeS>GGK`DEwrx8=XJxgWlsUh2Pn;8*JS zs_92RUq}bLjzu5cx_|CM^{y_rq5F?@*<)tfe1G~QMd|#g~@5auKji+1QOXE4y zyxL?0dd60F)-S6=68qrr>DutW;pyJVGf$4nJ;kK0xU2HV}2{FUE| zv!C6MPR@>t_ieok2e(M8w+)mI$&NX+=e}C%uk%s7C!}|Vp={I(M F^glfwBlG|O literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_steep_up_diag_4_3.png b/resources/g2/track/corkscrew/flat_to_steep_up_diag_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..1cbc517eb432600f82f4fa90d18e317c4ed9f8fa GIT binary patch literal 1219 zcmXAoe{2(F7{_1e*p1Dln1Y>Lph%4;IZ2tPTu3LU-mr|DyM+T9QlY@%8tmjShpDDB zja;-sVFy$wSWG1yR4v$;q7A9gXn{>@IHh2RCp4tU0oy20$&>-FB_!YH*FVqqkI(aL z?(DEN)=#Ym05rBOY+YQfXf-)Ya8ZoH)^FHk%2;Lemt-F+A@OMM09JP$-f}q_Ww(s+KDi!U8BOV3`Jo!{BzC zJYI`GU=4-YSi+gkh&d%tEJbM?v0EDi#^|$~WFCu%L{g$NA$u+%sQrFTjgFSHHWWB< z;GuxbAu$2T1oVZNp^`(PW`Pwa9Frl;ngL(|a3YAH*ZWXZ#;~Z>nq=92m#g6O4Mid_ zlR*iCnKD{flhujY1l;Z;c-bn3X(`SG(_A#?OsOstiCS!CD~B^Y=@4ka&-x?INJ>a4 zzN{Klv{-R8qo;s@14b7xc>yLPWW;DoV2%tWDE2^6jF#mrOtQFvCsB_L57@0So=%IL zBJqWgSc*&KOlVYz!%|jnATiudkS>b$a9n`r!yZo}5XeL#N-9;%=gZ|X1gHS85JJTC zbQ)Q=Ly!W%4uA-N3_u)!egH}cfK{$2mBFrR|4v)$D@zt`KDTRV zeRjrUue}fL%y(}Lgqx%f`#x*lzi#T5uiM<@gPLn~YmOTX2hN6WoGUe5xi@@gJNCz) zLo<^%c3krA`HE;i`S`UTo4~^EZO?35zvt@pqZ_&|cTewKJ4cLbpTDPU>fW$!@CbJC z+)VFEUCZI%&HtY4mQLQh*ivx1u6}vyh-0p8AF}AV=0%so=8ZpKQ`$&dvazrIcJG@j zwzu!t+kABQw>z}cr>C#vwIpolx_;=NUsiN|^!ofe^<(I~yN93Jg3LblQ}6V>Oz))0 zfB<~!;+q2_$giMdd0uJx_hWT%;P3MDJy%vQJumfKo%Muoc#6vYoZY|tgtYXNV~6l9 zPoKR%KYV8F_O!N@e+|Fe(Wv)q?OADKVE}fa$<^Oc=z4p1!=2sv8;{02)j;+y+*7w1;51bypbYg4IqeG+FmKX@WmOWOZ9zxtH?OYR^govHCp7>7 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/steep_to_flat_up_diag_1_1.png b/resources/g2/track/corkscrew/steep_to_flat_up_diag_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1623eae7942170e32582de5b7758490025ff349b GIT binary patch literal 1435 zcmXAoe^8Ql9LK-@1f%3OrfB?ujoZkhVhfEG)#G|BGIl<$#~V$Sc(RQ;YEL^X>@Xh} zD^ga>(TycdR?jxhQE{6YyU?(aM?1XHrbQPnW>##~1f`-v{f=FCug~XmpMO5@Ki=<8 zdrh@;!Mug@000ZBHdby<&x&+ypl7AKY_f3*fGkk+R_*%qnvs!_nVFfDm6e^Hos*N3 zo106c(dcw~US1xX$K#1aLKH=CT&7Yfv|7SoFj%d2m&@(*jfBIoL_#D4hy-9VhC;#8 zXt+AP&}foaZJ5KQ^mw&_peZszp#qv*!XRX9QqDE2_;#(R*MNGh@_>s7`;E~sm5lkM z9H0~c9Rkca%|Xz-CT7UNN(4ACDuf9oOqn6{@c_U8P||1wlSy(oWrWtp;2@;G1b;J6r1FE4&C1l$#=2DrWY1l8fVNu{#sbS{(0Yqtm8?#ReU zEEa=+Ljb;&CUP)Q4+jqj)DhG;p`fBVPs}`$a79z0BxDGfOfj1+EPjV8>??WK_wTGd}tFvHv)sQboj+f8R=gD8BLq3 zaZqvh`iB5yR#jELS-a)Hck-2umrCZ}hM0*t!{&W*u47q$bwPI7ilM)|I@^w3yLRpn z;wotB3H3EL1U^IVPSJdcb$OR&^J@ynv=7@}`?sDF9%4*ht=PKDmHSKS;v`d-LzT^K zo3byJEjk!EkRnE&D#=^$phl^S02mA-yQ z!|E0xSA1qx8{cB=OZ~OG>ChKtslgXUuljS($)nQvTFInPU;6FM)?LSgw~HQk$IJCg zW{c`)SZkZ#S=TUK)Ln`*Qti9ZXARlp;(b@TW~Rr^PoWu)C9{nct&7T5&38RSsWaW1 zSj{Uw*T=A5v14VA4j;+)ds~Q;oa!#T$oKx!)AH$D=0(QY$V(Tew!{EQ zW_~<#J8STcdp{v){>^>|k4|m8Jbhx-)BWcw$?G?U?+?Y%g2(&URq6q4@SXWZ&sqWJXspN7}m6dODpjP_@3g^31x1{r>@rOqu%t literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/steep_to_flat_up_diag_1_2.png b/resources/g2/track/corkscrew/steep_to_flat_up_diag_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..988fe0305a991501f6fef78581e42cb8864c1a6c GIT binary patch literal 1301 zcmXAoZ)_8F7{`C?-*qjsN)2bIrjUwtlzCY$a6p4MIc8Z3JFNsc4oSK@N+S=N>y1M%M z`i6!E1VJ96&wSk4bTpq%VqF* zOkN)r2-?Cj9ZRsOw2)PTg<_PlB2Jr*cc6Z!N#ZOK0Ur{nbl90q@akxwq(*1T8M_g% zR^TOp#2_&qNeA`$n4yw2!V(56ES!}f%$Nb70bmh?*X#X8qhzr}ZMGqr9(B9(e*bhN z0@GqRf=r2VM<~Tavusjzn+PLjH`^GigCkr##Rup>gpDNm zq~g!0A*B>6%%t@sFfagh1CtL}B!q~d_JqZiCV9mfEC|uElz~IE)xZ%(uiYAS+F~4) z5*S6~@?oJE7t87Jj1q^%jNU+4tWKP8la!ZXf*dD%y@_Bj9f>H(WFeO;m&*_sd0+`6 zcuY^Fj7-+*E>MA@D_ZiV%2KY9D9z?)pw6n-6DVponHej_*=&M?4zSf_zCp%oX?`KVt$13~Ccz{XC?$NkEpO#DcOr;ebg1RRCd?MWAZ;SVqw&7mI`(ek>uIrCct?+ui z3zK-9!qW~cM_WryGh|KBZ-FunlO$9e)#E2xbbmkkf!?l82DIIrc(dAPI@Z3jY2CrE zH>*cZESy_}WY5$C?C0-_$69u-)+OKnl*o6k%UyV;Qor~I{qAXQE4rtDqIC+}%{NWD z-dgi^=Uwf7Yqz)~bRqTB_YX(`5D4IoUHZ+;RBK@_(@YmS=~&{dZP#gD*Mmj9=?3 z7vjIjpr^$=R!~NEUEXu>Q2p!16;!FvFz#vFBBSMK&#sGqg#!b(yUzA*xuiKdRJ*rz z#S`i~gudovlmF#q!%w%H@_*KyE9Jk@UCo`lYq->U=volSiJ9Ib+n>8X{_%TD#o5np z-qLm~DI^|xhJO`bC3H2{k8jwg?E~ybr)BA$)-Knc_ZR!b;MVfifziuPTvrdfdig2# z!RdGB-8#YI-RH+{pL*>N`NsI(rAnW6|H`9v!&iPHLyL}FxiPYBtjZR2w0EvOxu$#I Ee-{-;Q2+n{ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/steep_to_flat_up_diag_1_3.png b/resources/g2/track/corkscrew/steep_to_flat_up_diag_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fa3c5cf89c00a9067bacb828c1f8986899888745 GIT binary patch literal 9934 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/steep_to_flat_up_diag_2_1.png b/resources/g2/track/corkscrew/steep_to_flat_up_diag_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..251476d3532a8d2dc3c050cb22b09314a37e9ff8 GIT binary patch literal 860 zcmX9-F^HpR6n-=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/steep_to_flat_up_diag_2_2.png b/resources/g2/track/corkscrew/steep_to_flat_up_diag_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..251476d3532a8d2dc3c050cb22b09314a37e9ff8 GIT binary patch literal 860 zcmX9-F^HpR6n-=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/steep_to_flat_up_diag_2_3.png b/resources/g2/track/corkscrew/steep_to_flat_up_diag_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a067ad3ab1ae82a423dc41be0ab6ac07b0cae573 GIT binary patch literal 1186 zcmX9-Z;aD)7=G{HdT@}DOtR=qhAhwz^BA!S#T2dDBl9d!q?n;2?z9IBj!Q8`hfb(4 zWWb`08OcH>4BUrB1~+o2SE1@+CN6O#C7dv&!I8{kk%OzG#N#;4&k>U6{rBa4lIMBf zL+jW1=g)m&E&$B$f4Of%tGZgTw7a8~+ou*h2G9ZP*KAzf8r$01+S}VZIyyQ#JG;8N zY&IK)Vcp%`bLPx(dORM2@G%U{^Q<5QB}t6O$tWyrS6#>sm#Auu;r32NXXjBqSBR6f9{VoW3 zAxeY7V|fuPCGEAm!>YPa(}%1OnpF@gdjL3q5Qd3%yXjo141+rcxPp;cr@x2?OSGs5l65I(DrGdvc^v}jiu%3D0F@UQP2%;q zP)kdVLfkB+r}YAAlaa}Jon>uQ7 zxxzridT7PT<=i0^7Y#}=g9R(9O{c4~Y8}-~+ySH;^ZV>U+8yDESeRAhNG>I7g_K?{ zG>tN{>Lkk|6_5c4wY*5Q=pMlpk7XJSGLwD;saj=%K|T@@Vlk2M#Ytb9CJGEuVtwPB zw;AxDkQ>Q3$`DAUk;--@o>_M3k#b06Ot zS~mFp*Mr!N>B&p^f%$bMJe;|?-tXy)mvNE{&LBxObtKn3@mZ&(NFEL zby}N`zKcc9Z(fr+_H6u*RYOni&)=z*tv_Eo5jH0--y8jS=H8_JpfN1%H3y!V`Dpgl p-qcBSRy{mV(=OK^e`=~&`d9sF(8-8hE-~UB37ry`i literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/steep_to_flat_up_diag_3_1.png b/resources/g2/track/corkscrew/steep_to_flat_up_diag_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7fc02542b0b035c77f95a28d2d8efa72a61b2c89 GIT binary patch literal 1494 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/steep_to_flat_up_diag_4_2.png b/resources/g2/track/corkscrew/steep_to_flat_up_diag_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7799b7031ee750b7cf890d12cd4bd30e5742e2be GIT binary patch literal 1258 zcmX9-e{2(F82(0Kw;v@Xsiv?4YHZ>K4>|CJPOBbpo28!N2shHO6006tV~QT+m>o2s zy2CVBzy5ijiWU*LClAvjd;~1WIiJ~A$lA=VDNi~zn6$+JVl_UUV11!_*av8l| zv(HZiLpCMC#*^+;TFh#pVkt)Bh||_AFs6XhEb~}YB!?tAtvItup)eLK7h=;mo#ki2XYBeaxY!YMA6b*lxB*@_Z&i;cq>-s%!)A;<=!?x-rL zS|C#hYvp)xI&GkUkpm_VF#7=}Bi5+Np2S>fO3<94q8O{l892n^M&640?0Cp&i}Q3! zGv>l zz#9t(Qi-sZNt6p2SS?x^2C4uS0E9I!f;GBFKqY^qRI)~tM-a1F+U4TBUf%B)NJ6p_ z3PmPpGR+V<7B4$3&~1hR3`R((Qcz=R$8UY6dFtU0Y+t{Y11oP#bl3WWjfF&bp}ni$o!zYaa_-drR=uZ)@t|+?39`HE^oxh}^CuVo_vGY1s&nH7Y~;kLMftt2 zAK10Tv#r1P)T#5o_MSbYe9m4O7{Qj6ACE4acg(x|(7HFj4c;6+_nT`;QzY|zR`}|6 z--5L1i%aXD$~*WK`D@^gpJ*T1s~)^P?m=1o<-51|o&^h)rQe4~#R&V{M>mJ-w;l+M zcEi38;bv?wcKVx^Z1b5>_+Y%}=S@oA3AO*u(TP`-)l+}gX)hhGe`~XFGL>4{AuQM5 z`|0in8v^6~ejPi6oa>JAo&3~s_k+VV P!+@iGZQJ1LH~RhuR4_S@ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/steep_to_flat_up_diag_4_3.png b/resources/g2/track/corkscrew/steep_to_flat_up_diag_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f477d80e44ea0f7eff269b2e7ff86191efa3e8a7 GIT binary patch literal 1210 zcmXAoeQXnT7{`C??KTP&XtW6@soIcBETnOV9&m<}-DVw!yJfdfNQuQ9tVl7ZJFr4C zF4&l&1r9Axpy)xG*q91+F4~zx8&h>ijR%ZS;6{oz<8(MGDa(|iKWj+7&)YxG_m9u> zyxZO7nmu#DOaQ>_&KKKzY89=;vgZ0)CR;@aKt1SQ)7w!SXUv#US65eGU*FKs(Ae16 z)YOC^NON;@OG}H@ZnxvOlcp(-V|d;pib5z9ip7+4I+M$d>Uz0S!JU920n3;?9*f^^ z3k03v2pNmB$+TC^ig_(kEG1|M;wDW3W0l-Cna30n9}3agm^+^q^pUWkC#K6e7Ye)% z5TJm}AxQzrM$CnzrIJUX;e-`0tjZAP>;SL;co9S}nPAFTq5ty=sp{PI$d^>b1*#N5ojUIh83@p5i**T z)1#V^EKX<56tHl>>I1eQz+{9_tgbZX$x?#mjugd2SocRgu#| zd?6;5QlWA-Hm#*#DQC72n8S?|K8g--T!iQ2fj~ME$tsGL$rMLN%jGfzr~t4Sf+x+i zigI~}uSkbWo`exl%kpR?ZBz@>(Bv?i39Hp*vvUq7Pm&_ThP}0A!E_`#l1%G4tx}|b zmqA3%EO~9R-w_W|sW7L;eIqHUkc}IKT%~dwQUJIC5CM<@NC7YcKnVe`CYFXl5vCGQ zFR&O8a1f^6LVW-ankd=ICT!jeCg`MG_M|ESbvl->W{R*-#w>uaAugxcL)rWs9`rG?oDAQ=(Rx!gK->YD5x>D<0qDw?*9J++k3h=@cgZ-eYJi|XZxz&W&2Mb^7Q8( zpVe^w?v1Q>wzYj{Dy_ZjzqW64chi<}sov2M=TqD>utbUxPlesSy>eAlPd?>{_64i{fOyL(s}Fs^*L zQoOojT2)sK|24U%+B&G8C?CBwf3WAd*xt_N6VQ|Tz? literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_left_1_1.png b/resources/g2/track/lattice_triangle/dive_loop_45_left_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8f478d8ef68e68796bf61e5a3cee72ca5a9396b5 GIT binary patch literal 12039 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 Wiv^hr0-QwFKtX;{-uWeKtNsV642k;y literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_left_1_3.png b/resources/g2/track/lattice_triangle/dive_loop_45_left_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..1c684f226070a0a7d7717f583f2f09ed36d9fea7 GIT binary patch literal 1520 zcmXAoe^8Ql9LK+@g+KDB*`(r%l`|@qczZGqv8Wy$Gs?$&Ds*I&Pf3d{s;3K;7HwEu zk+Mbk)Uc>AMoP&o+pxICI=ZxQJu8;FuvlSXKWWism+iiz>+bdWeD3ql=l#d~^WIZh zB1uo3mveZ2p@<=0F$Q4ZN3Umpa&Khy-mzQJ;hj z6g;320~5}0s2N@(v)7Rk^Rr=u4`T{AY=Y321po$sg27NTnL0Mx#O2yVqIL}HR4RLQ zx<^(k^m^GyMwXbx$2cMdSEA<0bO>P*krq_%l$t%b&986=l^g+^FUb<&JSicNt5LN9 zGguW?x7tnXd_glEafF7vOfks70ZR!uTEI0i1Xh;B#g%)-YFcItk+!JG2iq}T1|eW; zBs`-`iJAg2S7f+%2&VCvOaY4};bh@FJ|Pm3Qp}); zAJe*w=1zwz=%ZsHF;GYuB+k?+I3^X(q7^$0xW}UGbn1G&mPoHJ7JCH60LTC!0WbmJ z1fUauFay9i7z(u{blPCB7vlmo0?cCImVh7zAP%6K1&s)_VbHCDegh2Jz#HQQK#Bqx z#!wL~orY&NNgOu9C?Y0K&KzhPd2Y*m|uc92Qup zw~&56DwpFb6`|Ft5x!o)r^JX8MZ8je0OLhuSx~`&Ixe&z&@G0v^i3*erTzUT16#{V za4`RVUo`*;M~e#=EGyr2gsN-|=8mqfh3$DwYdP896_%|!hSs^Kzbc!#V^88s|7hL4 zF`utI^`ziG*0xpF)je&_$Hco^8fsZ2#ohQSbH#;9nY}W1ptY~5PteodGkHbP&Dx)b zfAQX3)MU%sM$OsX^k<`?T`7IoU2Q)iJoyl;sCZ^?zcbH}g0@v`x`<3zdGPAdaqQ=Zu2!|KKR9Puv!5ZW z`KT~(wxBxu%DUN?`Zu-wkd&TD<}@s?yf&kMQn#o6=tbXoW8=4S<*$3|4&RbT@jwo* zVmRE8*Koee7I=B?lOFp`bB%4+3~xX<;qJ9OkN2s)On!ZxFyGU^Fy+Syr_29o*mQY1KPXm>cTiXkdhfdZ~%eiD>#Ir#D@WsNCX3CGz@}~w(C58J=lsD{tjGrD~-Q09DP|^8~nWSFkHp_FAnwxf3bN9W}TW-7F zvg26Q+%p@7_O3SPY_7M^OFX9r$OnX8pH?K_-(B35&Q#ZJeLho2EzNJ7lqS59Ey}(w9>edRO%nBxBO z#=W!KdzK!#+}zQhFgW-A7KA^vm!)j3`8u2~ye`@(?dz_Ze)gm_(_clG9Pg?g>Av$$ zL-D!EpGx88x`~R7wbP~;7hIWJw{yp{C$BNw)!}W4t{IbfLd7;t_U*qN`JH%`lF41Q o#rB#!Xc`!FG+L)WEqKlD{Gxh5Q2$|D{B1#TQAuIj!qs2>59)TnU;qFB literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_left_1_4.png b/resources/g2/track/lattice_triangle/dive_loop_45_left_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f8a81dd2e5e635f3574ae5ecdf66581a4bd8b046 GIT binary patch literal 16320 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 GzVbhb4Y3*k literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_left_2_2.png b/resources/g2/track/lattice_triangle/dive_loop_45_left_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..42264ab4a334840b59e939da7dd6c0014fe1c157 GIT binary patch literal 1201 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 Xp>5S~|B;W~asa~2=2*qiGZ+6CU!~%f literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_left_3_1.png b/resources/g2/track/lattice_triangle/dive_loop_45_left_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f8f78fe7f1e063c643b7b6559721864828d711 GIT binary patch literal 12717 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_left_3_2.png b/resources/g2/track/lattice_triangle/dive_loop_45_left_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a8eef697af1355864454a1aa8afd657ca5497849 GIT binary patch literal 13853 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 F{}-0&m?r=L literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_left_4_1.png b/resources/g2/track/lattice_triangle/dive_loop_45_left_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a1d06ce79d33355ebc49c38014f2053d863d85bc GIT binary patch literal 1249 zcmX9-e{2(V6#s4=yZvA(P^4icG}uTDCl)xi0~$P_#X3v4Wj8IMfesJWXwd_T6w;7_ zhg7WO7$tP1#G+?X^j#TKXhXN02Sz5*1fd4*3{J0*4C<2s=B(mF=NKm z*ViKm($LV**x0Bw7z`L@vRDX;veUHF>t$G$jYMLJgeXbFic%_F}Jg2Goyl1&F( zDDV-0qmVd*q(bU!TvN{IV8H~-E;!0TC>a1C0dOG*qgDrWI?ib1&E`RpOuOCLK%f|l z!Bk3zX$*wcMC#2hqm4lw0gUF%-l&BY?BOKEXI!G<*5f*p&0wZbJB>RT3lk)RF;`4v zL^&WSVYv{`RZ?mKXegj{1HB&@IRuYsZ3&|@MKH1>l=Jc>PJ)9Zs-bb6&xVE^<~VIh zdMTNuvk`AzU`we;MHXOQQfqJ{>cDU}VewH^h^C`HUm_Gr#bUB3=7xt$r4j@>1{fm< z7FS!6Ix2&@bCzJ<$rpUd5;t5<6h^ZZ*o>;xxK?Y^8z|I7o6TN38FW>T`4gdVI-XD@ zxtt?_%Z_*{b-<=`bcmd!55CBM5^MC+Y1!;kP zFBEvFWJx1nFc2nyXafofAO#?!g&_>`BosX`6NCy6o*Rz?y9GE%#6xQXJ~YhP;yj&9 zva&1`3Nox}>D&PGHxrze~6KGHL*>M{FjwlhAu8%##2Fp0{_^ ze&>K{TEn7i@cKaMueAq)Plt}=?;MzW=z+Bs*|D!nXg$_8_K9lJw3qrvUin6U_Sa{@ zJ+pQ{o*Y>6+P0U26EmUNCwKgK;pXXyJ3~J;r4J)r2i5K4wyqO4JZthbj}Oe5Zao@N zT7D^R$zQ!OVdLVhZT)Yjwy$gZcG7$JhJKj*pW4^yW*6RZ|w&wiVsEWrpX^2AAhcQ_@c3ICN7>a%^%%-srCMQ zD-XUid&+m@0n$AUfKYyt1qE!KNO7W8r5BR#i| zT)VgFRP^+z*U{_yTfZJUezE8L-SwrB^w2zQ_|fCuB`a%JukZd;JNVUviu=&{H$5js z_S%f?mzA3r=gM2^b`*QQ*#0nn3FnPpvcFyVZ1SJ=*;{*O(T^LMk8S^{w*AvLPip&a RYt<*vv2?k0U`fv>{{zFIGoJte literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_left_4_2.png b/resources/g2/track/lattice_triangle/dive_loop_45_left_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d464f23ca19b2374c8c247e5952efd15b7985117 GIT binary patch literal 1482 zcmXAoe{hR;9LK-?`IP8_(m1Jwro@7HHnX^AL( z`1s)ffb?SV!t(f>6)#mIp6{XYZ%x0_8>GFCzgTZJlhVlR=00d5xN;8y7mRiHp z8w6$xVRy>h9+l5;2!(AzE+P@oD4d~{u#9q!RfRU`gdVfR=cIyd`bf|=81;&nK*j}X z3>ZnoP9YuxJz&p>`Is=mgE1K#GD7HO13&;ELlBBi*D{$#4#y@CG!aCbLJ`nvd#zUJ z@i5U0Hpbu)EP;$8qPP+*DmMyL7NO38o7|+$CvycAEIyMbVhczvF6T=rA*CnuR+-gB zx%^sh(BzNULxUbV1~N#%Pym(&aEu7w$`Cm@QV&M?C5Dj77BzZd6T!`p^On6(ONMEVV_{?x?Xd=8Oyl1|f}0r}G&M5sOW7d2)e3g%f&N{FugR zFtyp8L9ag+!hj4%R3u$1V;PlPiw1M(Nw-DO=FkQ_mPo)Gi}gYb07;w#0E_@Q0B8ds zi~txHA%q$gbl6}pKyUzs0uu&YA`m11Bmtxt(11c40bNSy)5D+*ybqoaa3PQoh*Hkb zs<|ek$ZnIn-8#SD5sCO=+>5CIsD_3a8H9}`b8)Dkz!;S}VruuG**D}0!9bLg0r)IL z#G^|wmXbs@3f!nw+Duxv!{qlmB0(>Vh4?rQT>u6Fgz+r&ak~#<>NJ*cm~SzEkjm#1 zN~NSyDc5Kyl&9nK%oyqrq8^;rNpK?)Hk7fTmIEy)bYaks$KmHsr}e-8feqy)B$)s7 z?rH!MHy1BlP_b;sGs%MeS(8SDAw?V4^R9h%?v1>KzpA74pSB1Nq?>>C{#J#bt}GaV zy=#bm`;a;e^IIRi8C|xu`K9c%8}6-%e(|;J%G>PzxrR$WsYfm8ZWNE{nl^ee{y^7o zIM&HWd<>+TG!CeBTN5Z!Yos}a>Ky1w}4!Tz+{y*s+rs0+*JzaKf%P-(BY zmN)B%Rbu>D%`d0qDLI+-d9NEjS=xAXZFikLk9|8J#BedH*}Q$S^lAaCY0oL)U@x)xtE?kJqgzLj9nY(Z8;do4}4x5iJizD zm%Qv{UrXw!wcT0ETbru$n>RAXuf#8XPt%F_mOh*CUw3W6h2?ju&i0u$I?bh#LG|OD z6X!RodcNx@zG*32^@=kwf5%9b^-IRRYaKf`r@PwOnpGnWUmf17d?oHE**1;7|5W)= z)6BrE=PzF1UCGt!|1Mpjo0(Sq?2lV{wR;f#g`S>aWq%c|9JO=KmMv9Fp0*YYiu_}b@u4m_1dcS=d$a1&fb>wO4V%{)%$uy+$-Hn%dsO*9QdSCvmTa4{A$N3fW<6u>^+)q2wI6@o5=m-6mTN&?#oeujUjCvukf6A*WZ}tz%I*IH DDodZ_ literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_left_4_3.png b/resources/g2/track/lattice_triangle/dive_loop_45_left_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8ae8b59d8e4988516c98119b8136950e34cfad82 GIT binary patch literal 1591 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_right_1_1.png b/resources/g2/track/lattice_triangle/dive_loop_45_right_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4ca2ebb0d77230d1f3bb27db1922deff6dbf36bf GIT binary patch literal 12048 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_right_1_2.png b/resources/g2/track/lattice_triangle/dive_loop_45_right_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..72c3c7da5cb126770d9466f87ad70085914f4e2f GIT binary patch literal 13045 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 YHG4@qVx;nK^r^7Go9!0|@Q=FoP9F82vjf6rl znbcq^9j-P|T9X|$vwACsF}%qYB)m~Fkf6h9yC^xdMvcL&GtqjIG1^#y^-;c%JtVSX zhD%9-OfixlODb`oqJi20v>t%+h%ux#$52}mXERoR-W4wKDHx~pD#oaBoArLHDZ&s5 z7oG7kIl)zkdP_-REE9!=lu~6x^;XR2zzH`^`xz$acE|kwWGIvo#e6nfDwQD6umBYh zETSY58al0a#$-p(M~7h@vxY| zYcvQr7A3GGX~ zJ`}KhEX|(Sd=B=nKC!%?oYRHkbH6w<|D$^k<=Wo&3mrB0_x|?n0sLw2(?`(o`+`NM zE?g{~d64_+4{_pMXJfymeK5Y}SM=|fc3(Si^Tx5Rp4B_|W?yYOKECVm&e+qZ%Iw3;prhypY}Prd2_d>cSq-_V0kiGWjlJzSEr0mUb#I!{l>P-KkVtg zvnA?2-Mjd5&yG3kIv3RRJsOnH_*dTeSl8>Q)(AtRLL;r1H>-2q#@WsLgDvcE&-R~# zYsD*l-@UQF)&AGDLiVkOqaVKaO?CFx<*6H1e{kV=ccI~Y|CP_aU$3~c<;c}fwhnAq zv-#bd>rY)8=onEp6!abKj%oOsdndmfJ92pWr{=qxhNnDO#skO8+6(ykW2f)Ea!^+8 zA2_sj&y06|={h=P_`hXe_h3Jcw(V}WE!5SU+UCac`#KIb#1*o7On@MC?d-_-L-bGi oGvDpkx^gF;9VY5WdK;DrI!ohdfl4hoG6{AYjn!%$?m`J6 zzwbM@x{^3};Nb%RaB%7P!kRxH@+%q)`2EK2`mX>1SbcVV(Wes=6O)sZfk0qtYHE6V zdS+$@!?0j5I6FHVjmP6OP4PS@NrIxJG)>Lt^W}22UbkDVj^_ioEREVXe6V31EE$NKm?F6Obv(iSj->@lV!I>v7JtLb^Ug=iki(B z9f@;MO2k>2NT_5|rxk)OtLkFZ)lR6SGr}b zZ{>&0^4PUdzZH%!1ev6nG{%8$o{fiy;y43>R!to^*E3POq0U8 zj2juUlH;s`)TpG}mfmev2HnY!j--8pD(|$~MMjXW#Cj?vRK8gJTIQoZ|3|MCa0ip=ZpJ-mpq;%NlqsH0m*e zfNVe>AmnFJ@a66!md{oCeWp^r56yA-R7%QZlw3}wsXRlKIojgsra*N>a*&K88Am#S zDm1b=9utn=QB zhkyBG`BmzR&D~q{M`!ouLPtL{f1k&ov~lv0(!!DD(AKFJF8`<8{P=-O&s;x#m4*ke zZv0z(<-|Xtv%$wV?a%MrN-fu4e)6}UE^M9rdhv?$=J(nUS3dab)S>6t{EhRct6zO6 zT(~3--VeTU={-KIR9;U`R=^E`{N$|#CP;~=jb)&rm=PR f+W4u3@y@I>-dP=8oV)1zho!}pg)g6e>8<|(J(IzG literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_right_2_2.png b/resources/g2/track/lattice_triangle/dive_loop_45_right_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4e00758aeb4a02c98ce3449434c2ffa7c7b62d68 GIT binary patch literal 1201 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 XxS=>4u0JuoiVJkKt!^D`>Dlo=HfJn; literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_right_2_4.png b/resources/g2/track/lattice_triangle/dive_loop_45_right_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ad075d87fc7d4169093f467d4a0ba052d318e568 GIT binary patch literal 12990 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 JVx7x3{uk!P>}LP~ literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_right_3_1.png b/resources/g2/track/lattice_triangle/dive_loop_45_right_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..885e484993dd315d1b909d00fdaf107055495e22 GIT binary patch literal 12610 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

C|%QBG1zS_x0Axl$M z?J3&{6iTxw02l#)Jp_VfVZrn9C5VaTsHjvJ8MV2%4B+we+1V5Vfe*?qir|tq5>l}j z)5VHg;Gw7l6@)Ju;`$zJ}x?1mly|6;(ls8=zp;SWRq{QB<~lb`7?Mh;Jq( z6Ulkw8w3^vz>WmCTmYdEKr8_Q%jVK85wj*Butba4aa_()LNlepNSqx7;|tIgkF`+A zLuuCIki-boKpJkUFk*?2wm~eUOf|Ex!^FfbpfDGNW&jcyi$Y}t1eCy{jeU?STynqc{r-jEhTGNE9h9 zjZ#s;85l*`gJ2;gvB_NojN1UK=F5JX`VvOdG5tq?yz$RH0i zuddEh5CC8S061`aFaQ*STS5U~3Ib5TpOGdd1V<^%p^yfQ!~iT5NJaoPx&X-tpdbMX zmWvV#rQ{e@XHhPW6c;N5bP z@%4qt#O6XWshP4m4l^*I)a>uDrcl6GM1kG?`0+)AWK2!LGSYthaGjl+*49WjH&jRn z7AhS9lTJfG3pJqx1L?76yA9&#UM3Om`S^W zQmoM4W_4i(qV|c#t;h0?C~^6M-B>KEU1@Fgi(1i@`Ow3TLq|WtVOk>`n7T9J9NDq? z1zcCyB{a;Z1N7;R-pYAKyn1T-9ucQ~^pLn!VqL$(xjWy?`psyLKVJPJu2IB9GhZbM z=o~UUm9tS2Sw;0IXTW?(OF_u^*PBssDkhA_qqn0ygKAl8@0+~R%(K4!R!buM;?n#W z`qN{1etOp7=O3IJhKoe`b6wqDZ8nX30+;b;VtISd4YtL)7@*GbL_g?h)_AW7;lfF# zp$FVuiIiwBR*}Vm?LMpf(U%u$0}1kxw@Ey?gQO+d^NabU$c-Dp5ckJAy&+Yy*wtZOd)hBmm4Z+cFaZ%MkQc=hp8*folNZ+Uym z&G#iRl9`zBDS1}W-6@d?9anP!cK;!7lAdgAp0eCdoz)kn5WE(4C{5a6gnT2|C7c1m|xp{&%CN8Sqv3;y3T2N>6ovrwQ#Aj&wQ1nnkY@cq)rZ j^hme>m5SpAk_qp+u7DGaU2X+~3g~NJ(t4(GHT?eo7Qd~| literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_right_3_2.png b/resources/g2/track/lattice_triangle/dive_loop_45_right_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8bb2351a9266077617ea004d21358bd73f215bbb GIT binary patch literal 1534 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_right_3_4.png b/resources/g2/track/lattice_triangle/dive_loop_45_right_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..fe27833ff39b387a05e8811304428d5c0bcbd4ce GIT binary patch literal 15733 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/dive_loop_45_right_4_4.png b/resources/g2/track/lattice_triangle/dive_loop_45_right_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f36c5971350afe6f247b968af52f4007442b464a GIT binary patch literal 15477 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_1.png b/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2baabe084f87c370bb9b055a73ff7214a18c5bde GIT binary patch literal 2614 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 Qo*!7ZCN}bXL~`N(0b%vNxBvhE literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_1_1.png b/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d669dd9f97a98c20021830a3a9b387409bfb5836 GIT binary patch literal 1313 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 UHPUf1nl@0lw7B4h{Pny31J4STRR910 literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_1_3.png b/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3f5b5456fe4db7b6a674b56b516a956fb62e2c70 GIT binary patch literal 1549 zcmX9-e{hm@9R6<8G2MBuwTg-*85-@-WA<94OkWlnPHM01wJ=GkxQ%&qz1nLBj?GuY zBBDh}iN!T4N^0DVd1hERxk5+!=DpRNxUt5axZ#fqCKKjhe#7(b`Fx&x{`owAJkQ6v zp;0k!?t^my0P`Bwt!XN3I;YKkJwX0y}j_WJ|j@IWk<%4AS6z@z|IR;txi zdOhD@5?gFirwjM`HNg_VYODm{YZ5uGkd z)7RW?7z**wDgnk7<9w+`s31iu8r9mRluK^*DIGz=!)O9A9bdu|D+E$Pq|{2(q@1+i z7PrP7AOkENjyc$*H=YY27^oruR|oheAhdHNZmz;FREIE{BoI0|s27n3c?2WU#pRZS+LJT{Q}%(3Kbeo_V5JB_BwVh7FCau>tyD@Waf_yS z%;dK@B3^$i%x2;k&?q?+fzTShT`zK(FrS48x^xjA9SymX(Qqbn4PpSO0H6S{1KTe~#Oz$$!`B3aWK3#LseKtkFz00QfjEq&gjGPo z=P1O88sqB;)TC3|X}!lm2Yn7U>`TVNFcX(3l`sHc3_w`S!cw%m1D@IBN+cvM=N(WC zBUh^ly<|Jxq2#dAj}sglTRGbnkj%-seqS zFVXLl_(Yy4Wbc8~LsNd?lF388w+@@Pc3Ouc%drFeR+Y2?-#;NA^U<|=F$u9jq_+uAM zEh(2C%=ZoC(tg#e8)*#CcfCAcY>AGa-7leB@xE zI!Et%WpKG6-noeRTcT_n4W)HM`Rcmg7G#&y{j>0Rp?u4yf6G?(U$zxH4I0)quIYLD HmAC%~gxKu9 literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_2.png b/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba5517dfcb55ad5118dcbd7e885802f4e4df774 GIT binary patch literal 1141 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_2_3.png b/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e5ab43092784cb52d2f0b6421fdd36bfefc968 GIT binary patch literal 1114 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 G-~I(>8yyA! literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_3_1.png b/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba55b01cb414a5102680fe55a098da71e5104e4 GIT binary patch literal 1357 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 Bn6dx> literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_3_3.png b/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5b93eac8cb0bd8c96a6735458603cce623a2bc30 GIT binary patch literal 1607 zcmXAoaa2?H6~})NBtc|BV+|TTYxm+%f$IHvh6G|i!1d(Hyk|c48(l88dHk%y|m(S-9g`zB*N~aMyP@;gq z^EDcQUN1Hns5zxwjK?!Um*F$rIR({MQNQXr*DTiq-oV7t1k^n#epyhIDKHnq~*`!i8iVhRR zm`)cnnI5=YFc=ge0*O*6C&Z{$s-k6T6GGWg#)+A|xII9+!&*P96Dve=l>{YaIHl0g z7;PaeF0IQ?`y-|hYmX#7@tGiB2?Qh%>VVh?q&BX?B~Nmw5DHad2`Q6PD9Yf3 zMVmQh^jYm=9v>Tuq~l7U#kma0H)+K-z07G;dM#wYsT=c}VnJsz7D}fdKqUZb02lyl z0C)iy10cZ#Fav=>BLlr|$i@gMpb=nK0>28d1b`%fv=CYm=q8|F55pG7y1|deD*%oG zHNn+WLX$yex2ZgCDiAP7BHm;&0yA179YBovN}G^yi?x0!&7!uH#+x<-W*p&Je;meA zQUOqixhgqdqZI2&#Hhn+ZLS!~N6A6XW z@e@oqjA=BaUQZc~G$J=EsB|vbztCw`s24s=GC2p6W?Ve?v(E;#No0!%@ZZdr%Mbf|P6x{lKkZT#4Tya_&m_GUJA38Y?BnkCR$Xz;^Dz?iKK~cXv%cFL zp1ZfBdVHC^y?5f+3ol3x7U!tPhF|>LUfV6}GL@|dbyO|yPF|_?)v=1t8mH+r{`u-P}{(gDt%EnK-Cq@O! z7w%sn#|mo(%LmpCz4?9T*6B(L?YhN(wy3)7qn%|MRJwoq#T)dgMPF~(I8gSsODwad2nz(~?~=|7STPf-@rvvtOy|&D*zXs=>0kru5$3I_I6Q zuIyORqvHH5`*y>2q~UB@H{AAKPU*gH4p$B7ivtG=XP&OSd1X*=+%4Mv)-|4{;@s6G zeN8LQ`)#*&_e@^{?P+N`f?mJfR&horI^@(px4*Oe7ti9Y+F!d3_)Cew z1O4Z!qv!oQ-^r!>|Cn5r6 z)qB1AcEPyj!|3$myQi@7sipc=FZ1T%T|bPk-}b1T`RiJse@&KkzV*Tvn=cl7_qBwL zh9f9%lv>=*>bd>n*Et)P?k)lbYsd(n%%eh{MI(r?me3)bFZGT6`rcYPXIo(>*a?E95o{W2^ ksf($~*@Cx?TyR&6_dh95yr)@^Ndu@~+fetXHQT!X4^Fqur~m)} literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_4.png b/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e8c0ec08954603111dee93e9ac1ced5e24d900 GIT binary patch literal 1966 zcmXApe^kN*noMS!&FOY~eLgY?KvckFAUPbgP>7RANeU%Z ztzjBWT#Hp~cPM-NbTlG@O+|_r7#SO<;uExDa+929RkQ6Tk-JUdaqGssHaZq?i9iAY z6$@byA*@Q2%YgRTv9N~(`?&Cg3WjZX0GI%95eN|qCBtG>1cHuAZDKOp1Ok^#_Cl+L ztyU}mMdHDXZHICb!Mu>xBT9fe^D$GA>RfBxI6E+KBy8?FWz(2-Q z0D}hDOoWh+kx7WvD!M_(w^-y3htcD4zP0Fb3fNQGhQa9lG%Aw!yw$3WEWg0qh1a?Ds<9m-`p2 zT&n5oqiEFsBDULU91cq;qx-~42(%-!WfZ&|;)D`Pjm4By3);*gOw(kbK;+yErJ6p~sZfY;qJRH~% z9{wCv-&6ef?711PuHub&MMAVKQm!h$puhQ5(yzR&o`kPiuS#u5))EgG_R{PD;%_Hp89!M)p4?_MsL(HdXj&filrdpcYS zZMn4U-L6SJs{1|t+Xv4C4fn?vlr%UB(_*u-Si7S;dNRgib5R5Ob5XBO?TFUrB)?~T z2raxO8kE?Ot;gpsuzmjK<2syvxZ}|YWJ5JIQr;2ES>BOhxkHL%TuT}M@-*?uoCj~W zHn-vieWy-DpProfIJ$s2NSxn_d`&B9*DPsymaU}U{Ev`f*fw&wV(;c3un#7PFA0w< zo%pf(HTfI(=_OxPkEY~pnsjHP;X#!ryHkzWt%Zt`7l;!syiQpcWh(%|B&aYIm5&-$b} zxlLUg#R2@O)L{oEQIFNn?yS5Iqh^M_N%Dl(4kIsSEotY$rO8m0?-$7ocAo3Qy0m=k z*KTfOZmryaSQeI`Io7vno4#n}iI7@V&MeDcFG^<}<2|esHB^3m`0S#JvA8?Oui}zF zy|{z7uj2M~d(2u~ru68oc_`<+(4p4FMJWp#%g?W9w~uaI{btWB_IXCFx|H!#6BZvSYeF?t z){oSZ(!zIMzPt3s&ff!GAGrH*+NEIU--%iK9(%9sQWyS`7at*T$2I2gD(X4;8#6Pr zk9Kz#Sc4{l3r?;VF0}LFH6f?b;v8pE!uEqxi|4d__ut(NUgC7w`Xtt=;pR`i$#JFJ6m16WM@#0ur?po?MPdB5 za975pYsKEbtYO3}x~KCAOaW2@#|c=u8o<7hy>m>(xb$Bc)cp3J;JR&bzBgOE*eN2iQiu(hHjPZG;MV}JKx3UHS;z^RV~>3{ME)Y z1)2Rz-K3wpBaUahsw2*S&`Q?)7))+{C|I;?O5W>WujARF8Og1byxbS!g{grTs61yX zo4$0(^tUsk?`;_WA6F}yl6b_hVCs&N+iPbn-c{7yyQJmn&(|jxZ!K#jnw{p|o{{yQ@j<)~+ literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_4_1.png b/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..38cdae0ad1d7c4060c17583d6c3e885aa75ec5ca GIT binary patch literal 1197 zcmX9-e~i;)82(^)*ZUz1vv@;?&SRP#HabbgCX`UP4l7o#Ck1A*NY7MQ$bdq6GQuir(J+Y zL4*V{hvY>>OWI3$N8ND2st?wAI4wh{djMbo;1NW$+hZ=5?DggdVuWSKLZMPDb~BrW zn&!eB9@6P!-30HYMKln@1euUBR9so-!3!(d`c0iv}<}L{brsOA10J5-B8;S~hE{YI$<9R;xka5`j03V0k-L zba4h6DpQF{FjtKfYw~2hP@OJK!4A}J$DK~v?cq?LKoAncCiup(Xd#&z%NH!&td~i^ zGl<05W4v1qqnRkFB)DQGG^WH#TBcgk>-C$E1Rwx_1b_^H0>Bsm6$HQrSPDiZsN|qk zV!c4bK#Bw^4J;Nw4nWZflNijgPz^&P0j(T(Xgm%W3ItdrEI4BkG$qsdoKP&rO;f2> zP1xXag#Z@qAY~_;bMvZKvooJ+-u zO3Kugs-?qv8D|)%0%!pU8(t(DbdTVQM>CZQo=HD~WEfO1$c4i~G%8}gIPOc6m_lJ1 z;qYtk1FJIlg@7?`vCp=w` z`9Fdq`?fqwKY6xiaKUJoLGRmtZ0@>WmYrD|AC%wQJGdm!b;i~^hr^w<;)N^H_Y>Bfg{EWN_-bg|u8nVZUqlBNUAuT7{o8B)f%ngsBC|WM zKmF_Jg>~|aZ%-YZ*w(rA+}YHZ;DbNb4;)%G0ToAAW8LOXBsnsEZ@TYnyrj799&f+0 z-M3{Y9=Md)&m5uOn38%v?EQQBg6C~(cdb9v^0<;bHr~-W+DSavbo%s>J`nhfZw}x1d45B4uyRGO|3pv! GC;tQKzZRna literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_4_2.png b/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3e7a847eef09ca34556b94fe892fd8cf38e21c66 GIT binary patch literal 1261 zcmXAoZ)_8F7{`D6du4MeQf75cC|RACam*rTIFh0VyFoWQd&_RDWF;xCLSGa-!U07Z zI9vH0yu^ z10E6x3=(A#IiOBQHN}(;=8drEfRh4*Ndo{h01gCU)oNa+6Hqi_GL6#on9G&s`McpT zlw}>RF_2m#tv5MPGmF`H+$oqik@CeX!2}aYIi!qBPw0$hgNeZ`PQuPote^IW9bt); z6h4^=D*0%3LROPN!vL)d=)C|H5F)HK$5FdXvWhK`i3b95IIKugc6_{0C_tcN0UAQ^ zsG3UXm=xy9QvRGhlJ_JE!gw*BpG;4{T1>4bv|6*?z+gtF$;4S`zoWFw8xI7>qVY^p zDP~FFupk_x<{f&$jfq||=4TS3Yb?g6Wig*l7K?Ww34jd%4gdjw7yx4c6(TFpV z@F_|xpI2bXOXmW(x0V#NbVTovP&Q){3iephlb8slCZ#M)7f=l#^oZH0wv&1{gL_>T zfpqd6}c>9H2)0ei~ z(zO1wW#r&DjU$)-Q$=TO*|m2tkD~Rb4a1wnw-3Df^~YD&_x7~zB+$?6dz;Vp4z0BA z+2IzX`#m=rm~9WApZnR?*0*M#-M%rLZZ6*cA$I53E1N3^=ZS}PuV1~l_he)D9Cz=# z!`2OD18Yr9*XmCY=ZuFQ?)dV2)%tPz;*nn-$esAU8NOpz9u1vYG`RNs=H!Vb=w8}af2wX<_vGAa z-KsaQud8UFC#mBD%bMetz0?(XaKnP(N$ihH_u4-l*xT1ke%pVz?sw}uoomRIE&uW# c?b&mhzdY1-w4cF}C1#*wv9;}F>xzN@0Wi8Nm;e9( literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_4_3.png b/resources/g2/track/lattice_triangle/flat_to_steep_up_diag_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3fbe6d2fdc8fe584524d9169e7b8071ef31900c3 GIT binary patch literal 1333 zcmXAoZ)_8F7{`BG*L7nV1q(FTK{3s!&_I<7RJbh%99w}SySXEl>;gA9wJc>Gu3&YI z7T3&5ik8@gf(uCBMIvG>mQ1Jfg#uy(7z#+Dil$XI zo7Ukpdc0^LNQNU!RI5!D5E!X28#<}eW*Q%y9L4@rT91_rmb3&#%R`|l!0JPG>3B@(i37r zA}1zXv9v#t3uh)IB?eR!P+Ni43G_aNDWo<>^t6O=35z#l=kvZ893%}Y)}(Qm4PFZx zX7Q+9;YT?l|iXAsnuq!jxrco6txqihbb;|M!f#v za3mc|6fziK2!)+ex)`m`W(Ybl!9zuZ)?vYwl7hKZtWX$(7yuRk>;U)x5C9kkAgchd zC=!QGI}~`BPLX=RA;6CT(G1cgfE0k78hR1PlTft5xCf?r@Ep7e5IC@q3LC3-IShWE zIn1-ss5_Ama=8R7dTFcxaaLhIHOXrkQO~7OU!E2Uj_5=n{#eYwR9>$FCauD3RMME% zMj=is;d9w|zbh*E6EPu|j=@64L=aE}FbyCqvhWn`UP$A12D4dHFz`b5cpRr`%4TDo zP7X1;O~wF*2sk1U#w2OTS#*%mLYE!}5h!9XK@^YQw4myr=RdHcrHKN|Z(V)2*k{+Q zTCx6(FM4|EFSB!|H2emC|Ff;%vE_D;>(-20H)fA-9X(dNP+rrtw(|AR<~>7N^YXTj zTRY^LdbX*43f?TVeAMl(eONc`-ikTB;dRp*cir4i-I#j$;!A_Q{oU4)gW0`HA7rvn*L`2J>Di^F{Y@>88p{f& zn*M0aUWK2YoL~L)&ggmLj=-6YcGzA&S9~IlfASeU@$d5FGUHe-zN~u8y14Psr7mIg zy5rzzU87z;wEdO&PgXj{S_8?uD((GEQ;#f(OB=BFt4am2{z_=U*^v_>u=54{FONM{waT|V?W*~u59c6A7IB-vH$=8 literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_1.png b/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9d9a5293b3f63d50152cdbddbabb2dd1e426a48e GIT binary patch literal 2743 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_1_1.png b/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b6a5e1edfef64745cf278d4e90237e07472868 GIT binary patch literal 14184 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 QAP00b^sf|MzJBNb0Mj9YlK=n! literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_1_2.png b/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..794989b338620267a85376638360d4b8d2e293dc GIT binary patch literal 1471 zcmXAoe^AnQ7{@>U#2*<~HhOH!6t*yuv<>x~%}I_zj-_5+hUz0UG8y6#@j^W5{#^Zw)geohwT z^HY)*B>@0Za&xv9M&{N?u@Yh;{b1@Q2>>ymU`J7QWQ~f7ijIzsiHV7gjg5OIh`J#FBA?VEWqUeRFEtZQDic@ zLdnu-IR+!zVinsRayOy%2h2PsNytgY1yq%gu9GlKa->boa~OnfEADe?f@>{Hl=^v^fXEzF*h4x`*czPiPQzp-narkA`Sf&*$&zq5asjFl zM~*42TD_~q>T?odKNpAvBsoS_iRn5S)2QTHG??8eby-wihcW1NhQlu)7XTpuasYGy zSO9PV5Fh~<0p&rZ99qoK=S3L+M}VFSY<%ED0mJ~rsZfhRGYV}o=+;1=8GJCF4Fo(O zL`gCURi$9+b^I2y#BNs;ge4dxU_^^11&A`4tD~Z3y4c3ReH>j#WC<(m(+2m9%@4gH z1_iL`BtDBQ;?iXpqLd1BDw$cYvRm|o(-QPKVc5?W2%rr>AAm68g(f2R5t>?Q3*(Mi0HVutw`UdQoV>iN_)K8QoM*FqLHA(S!{b}~=~zPrG5JKa3ijmYt-PA_ zbjbXbmp>Nw=Hk?i-pX;h_d@N|mYRm{{<{uw$8BHYg1!{;zK5@3wNtM;<_$b5S=~C! zcZgf7j;t`WuX$0GdVF*Ps6QQhI?LCwucqu5cO*ySH>N03oG9hZ*+Ap9X>I)=hWnisJG#<^VekV{fkR3J$$>sdTX1tKW)Q; z&5|-l!O-PPiK8*8zYV&pzI>l~MUy@FEQ$8d`DGK8yl+eHUH7+QX3C0Y{!!GEQ_X+bTwim%wEHK1kg^=>!_Jvk z)$P5xb2jB#@6~IyPJ4koqxgJbeIga(**s}Sww0mFgu|6uJ zebVz>Px}5leC*wv!|k#=a~}^_mu*}}b`7P3%6FA3>n0kyGybaXta{mVqa!~f)O0RB zE%w-hz0rNP#>|0c&iJ0X_5VFjdtEYdS>87=nzLiHvHEIf?4Na>Qf*Q_MVQAP$v-o2 zw&`WbH=Sjz9Z4Eo+SD{S*S2$Y$Hi&c%sz8zSl>A}%3E+dO8BXoSl-UOA|5|iK1*Jh zUC!`UZQ`uuW>1uHhKi4jyuNNL@c(ekGhmvWCutWnYCd-RO;!@FJ0 qT{HWqRE+9^#q%!Qy`Mu&IHF2X(Z8uVt(lP&g52!Xt!>3u_IN=EZRwxGKyT}Hme+?gKl)}#%`>^s)wFgl{#)&$%-k` zU`L7;IG{0IR!4!V%~rCyEU{w+novp6nq9U9svOYCl*V*emWov;`&vTsdGGVyKkxI$ z=kq>oY1WjLEH427lr=Wgx8`_Lu9oxjbA8>pp^pK`2Q5u)TXJh&Ufz-=OY-yc3knJf z3k!>iig-L8pU*EYE*8sVG6Yeo)fho&DN1iL(KegSjf8VMGQ14gksH(L$kBB4OlmuSzwF<57bl zZndU79vBWw5RnWMD{-lclxt{(&Wccs%H&qt{90#-@W#j>XON;2rADSA6j}<^(`wp| z+dZTwNC#PKgmbbnXeK+f<`k606s>%$n$>KqA^H_b%gD6SAusKl&M zICLr>r4E@0)<(r$rdhu&9d>0|Kb(ySMW|e%Lr?>zHWP${qTFV4z~KmcJZvzSn4V6j z(-25#Ab0T)pHLl=5HW=zp|;QJy-9N@%}i$k$%S|p3KT*iDi&*`GD4xGR4S7ex0AVJ zmVm<<^#!;Hn@M1R)bdP(&`L@fqrz>${B|PbHbni_c-WncM>3fd!~oC%U;=;vzz;wa zfLR`ZIpAt&F+sla_B~25QD5X7k;!_F#q@m_O&(>VAH*y zI&$+|V|`s)&9MQZvpco2e0EVIxaXbNQ6gAlU0vOCs+mJSYVTOV)G6+le6c{^%8G9# zsxEbJJo2#Mj;z}-F;x3i1yx!%fBBik?XQ$khrhX6+ZHM7+B;Nwb@ z+Vso*ANjYZ%(~?VicjVh_15hV|5H7abVSBBu*M;f{dr^W^E*J3#6ukPq+*|SvSU)ga!I@S5#_HO?b z^uTNEv)2x$=58GQye@c-kd=HVLq}%jHoQJ_yh2vF)ZEkFFDvXhE1v$We8;-dba>$4 znyRO20zFL%!{7%4%e0HU-Fc&uQmGsS;%rT);x56S06Rf)Buhf-4lQvVMBLGL|gBo_kExTU#% Jc=PU0{s(lLScd=r literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_2.png b/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..89adb42c83dd54e26f1dfc506a3fe59ce264b665 GIT binary patch literal 1112 zcmX9-e~8<36n}TOUGA>VY*toWWL0|*OVEnZ%O4fvOwW2|F57ZjPO4T6vv?IU$e?3I zJIuB^t7fx8k;*FM?m7%Cjwx|e=%C6Ct44Ra9z-o(&viJoj-od`#@CL)=l%NUecW!bgbg6np=T{;A87zExEi+Pht ze<~fy=E8-dP`2Wgs#Z_>kA3~aGZ=Pl$4=mJ**Zv&E)eH(Wu95H{oZ9P&5!0DPCq`3a4a+Y$;x{72Cq)AZX3eZvDJJI4Oru(CH)`GP6~qEa04jhEU;@kov@k$D2pmeQ$TX1K5J*sH z$g^Na!4&|BfD|9f(Z~>xokaC4at*j)JOexjl7J;;UnWK6^=R3UD;3Rg%y!#BJuV^v zblSt}KEd$EZBlW=dM9RfQQJjVKyBArg~dM0V)GZi!M)XcV9 zL)|9B^T-C|0zy46vOT(+AhdL`)nbZ;n^5a@E*2A$NjaTX=#a*Q3M_4Mbd?V+2vl1N zptv7pNK~Ye%_4{I9Y1rQ=jx3g*tc_=2#;M_e5uzDPDHj$-g|t{&WU%m2X6TRRmUdI zT?%Tusa*l<*ju;W{_{znICy?<5z^o8dHSofw_Q9~X%1VT%^2RXAtKUF2DA+WONQr#~P4bK}U5!PB8(bvg3X`^4<{$la%2oI5^Kh+aGT#DzEC zc4j}ic4^0Zmw(?ed6*kD4-l0D+pphAJ{#P0|MUC*{%eQl<+-U3=FZNvE`NE?>~(F| z*8Qu>^eYdI&iZ!!F&F%_b|icL#DkA4o(j62&0idv^nb4{Z;%dtvKwEDOsD!Mj?FG@ zITze};a|@i-CsU@)PB`C+&8{5BYr3Svv2<4qgUVgb=f(5GHT)dubpW9hL3&x-yKW4 SN00R6fr;^LkyDSq@cRE=>E$Z` literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_2_1.png b/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..251476d3532a8d2dc3c050cb22b09314a37e9ff8 GIT binary patch literal 860 zcmX9-F^HpR6n-=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_2_2.png b/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..251476d3532a8d2dc3c050cb22b09314a37e9ff8 GIT binary patch literal 860 zcmX9-F^HpR6n-=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_2_3.png b/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..65e0af16ce09d61a4b8fd38569ae6d99840e4016 GIT binary patch literal 1108 zcmX9-Z)h8J7=GKdy>{8iBuMD;;Wjgy+FOZu*i%lq*~_@r>w0synbqKKcxseL&v_mB z5a*4h5;U-LM#)CRd^j*}2Mbu_K7=k~nT;6aJ`~Busd0-lN|7)Et61=7#^8DXeR&^v zp7;Ie&^)(e+pcW@uw!;6e7IM4_Tq_QS1-GdEldHp;LzNW1HG}Yudlzq-{o=*3=9ko z4h{_sVHh?%JUlWo;tK=2}EwFf<6fI~w)I z<9H$&N@wU?UMQBNaz(A%nP$si2`oap72c;sa9s`-RB|Q7R&tSgNpWiFwqtB|s+=Dr z0ul`9B34weO2*SDdb@Q$YKKr)LR&gQ)c}A1AYqu|@o0X(9t;{Zy&?#;SgfIG8-)U@ zRQ#kj!1zJ}PD?>fAtD+n>$I9@QzoA+i$-0toET2|LtKCs30|h63ag}rbU`Xuie+n6 zCu_Hh&CQC30j~(Y7~n|=>KIk%o_VH2X5k>z|MQOaa0g@SEa&Gq$8r-Q(+Krn}qMGsr{ zi*+K_WYevv(N2^*`g*t2-fC#^;d-3NCmAy>mh-WisWmG3cB9(uZXgCA0-yru046{UpoIbIL10l*MW%tAh7bgW zge(IV2aW(p1f=*-hD3&dtT?Ktkz>FE<0;@-hzM9*_Gt+st8+y|E|*ibZMNGs>T&sF zKqlRc?h_1LvVw|3>z%0CO_Vot^)0K38l9jQC>-NLo+yLIMKT%VbuDgWwX&JDt7hA& zqHdGod1L`{0HK~2=^ouf_*2Pzt3~B=524oUY&0sy<8m^okf9V6$}yzLk`+F*E)eZV z07*E~f+$ZSi$ONuJAP`?eeb~!EFGQ~VgDaD-|Y4Mv*8zxjGuq?ynAu^$?f6O$ozbA z`S};+T4DE3WB3$36aL_v8hd8x%c)aeD9^n7?$Du?S2m8CUnN{uO6PVx)w0i(+i&d; z|8nQ@*lJ*G?&#|<^4&!K+H03)|Jpsae6exb)sH8ivu^w_J>$CYwursY7rx#1 zBU^8sytwn=Z|4%*?>^2Aj6OU5=|77LR}b)Ow{Jh{z2lv`dv(XX6PwD;``lx4FVyz8Br(%?1wYt*-}icwo_oa#vfvj^tG JSEf&#{U2uC*I57n literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_3.png b/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_3.png new file mode 100644 index 0000000000000000000000000000000000000000..902291d2d112b8dca0d3ac91fa6556fa7e897f97 GIT binary patch literal 2854 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_3_2.png b/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..74fe35a864ffb5466b4fc599d1998e352e60a02a GIT binary patch literal 1500 zcmXAoad47#7{`CW+zVq9l_?q}E4p5bEy}kjfwoqT|-NYmh^<86=)7OhRns}m8 zqN35oEi77SZ;O%|xtXY#j?`bwL=F0)PWxKoCkGu!+Sk6s48QZXEA38WT3#sLux@ z5iur|szh>JqBNiyN~W`6q)Tb`s_g--J510qLx?d-6k@qXsw8AuQlY2RlmmD8489N* zirb=$JD&C@a}j|G2nirE0*Mu%E=1uIX@aOeqN3tDXVOe(Tv6DK%Y>vtY|+S^I;Edf zhs{LXP9{9&RKT8zcyjRoOhpAk1uD~F3ZqJGAqXc)dM%cq(;4yk;-OG-U?7vpKp>_7 z>OnBSKphqnF_|%`cBJ%l+7iyV2C~8Q-9!%ZWdeahB+^KvgiKBw1}Ay*bEYvN#?bx0uCbVHTDH;iHJ9yh-R~+Pz8Vv05bqC00IE?0gyrf z%!8|;)eHkPWD+2(l`v6V9Ws-8ayyw0kmqM!x0lHvRPzq zm&Q+%;jld(52Vv^nAZ{;0cPc^Tq2y77(yt;C|wzSAZrQdJh8i>Bur#bAy7yVja;Bt zNlXN0HELZp6YaKz1MYYaEK5msm9f6>naK+&!a}kS+laQ0IW7qHF_zqw?(4zK z^uyzdGXZ`QukZR zziF-!bsTIty>rH@0^8O-Oxv^DR?#!ZFMXm$mhAmX`eXQ|E&}d98fl;M@S`8ha+9U^ z>Wd=9{*{&Zrjg!xW#W#ObcLpDYulwyN-O%lIQ+g>dLbs@{5o>v_k+(gGw&W)!P_+V zpW)W(bz4$nbL-yiFD#rqdbf@D-fpt^#5!Gv?H1u$s(-5X#n(nwvvxkx6rFzI^0$xw znJS%obH>RP=a?VB@cBEww~saroP8w`Uo`DY!alJVne+U=n>jCTPCZ_Za=p=Ol?Rp_ zJH27nk*fB!OHMAI^79ir7WOP?I<~l^uAq}!)T!bE3dW~Plp1QJp}q6RR|#V-MZ`ZgT6SGyM&NCC36&q_vkz zDKs;r7}^%+?Pz`WRNMPMb?$%1;cd*7{+4j=;%kqe7<_I{vi!Htj1~32_pd(aZU25nyJ!Ab4uXvZd2X0g5LsiQ!+vcdM7l6ytT`L`BCG zl{u<7QJG;YDppjYnAAy9>@bpw8)i(IGQDi*=t>rKY_i!cb$*92`Mmde@1OVi>k+utK2)K^!ufSE=kJ$*5kRv{>$Y zJTM$aP>~cDD@ciwmT6eI)`Bt)rO~aj`Uz)<^2X>Orqz7RnUUl$ERzd`m{_clNGZ93Q7VlDX`}PU%mKSI z>I-m@crJwlnh+Q%p@o(>405*__uHtDTOajXl3{ly8Oi1DLmU7t07d{D0Qdoj0+1E} zmwA6Mq* z|C-bd?bG*s>C_!cSG}OV4R2I3=bSyoyQA>~ukLS+x3u24uIVc2t39ZmKDBnZIK0=} z#SCnEdZfSP^MzL$xeGnhhNm^x_Kb^esp{ty{xavooiuOF$fpa3YSUK-+WRk61)GtL zZwyql+*vU&`C;#0n_j;r0$&~7bk=)eh8mn)fz%TZ(d@(raP*q)e+*qSeA&B+NhdbE z#QS)jrlDiip?bLO3(Max&brt=>U8~yiVNiz6?OX_71z8bZLZ6){ZCf@w7%hx_*UlS z;A|2`_yqi6pcbn@fi6)!b zw0QPV%kuBqD1(rHspsd-XO{UIdyWwMmvBSl1}6SmdR0B+*1Dx`W<6*%Rd0EF$7j0T zTgg)!g{wNMhE^ZAcdPYyui5ohUYTE4BbIel`3nx$1SjocZrJur zbRI0KU))(Up>53I=HE^(*h(LLtW%+Zk#Dw_uD#qM{@{Lf?I-mg?R~E+W-);6O{MxIHFUpIFCF{7$+ctM((&k+J3IOR*4#w~$A8~9W!br19Vch<^$4pdFts$_ zUOQObtthvD%kq97ee?1U`>xHbej@*vI)Chy{b#Pv!8~)f)YjEW3dZrOcXCl6ezX9g b8=itw>Qd#lvOP!hsQ^v$Th(Xhy}SK?8~{!_ literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_4.png b/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..25ef9abfc14b82c112a4a62f9e82fb914db68fd5 GIT binary patch literal 1990 zcmXApVN{ZN7RLW%3MxuROG->MW~CxUqm~Ml5)B0t^>w47q@fG0Z}iZ+)ywqIzWIztLUDuJM0Ds5G%EPB1e zWEve9@OV5hz=;7-hom%P7-k$~CkaOx$}yh7Ej4@81Kw8moO1>aCSfpCES8BUKqRt& zMw75PO1^KHtW~A4HMhE~4(})(@YzTSgpu>{Y7wbkMmH)UbG^`Jlshf;Zl~4jorLKC zZ~>42pa#GQfDM2#B!GQz7_dwN8x63_$sqzU1!(BN!~`x5fFS^jv9O8)8#u5@1lyIc z%K&~io(k9uz~vxC0<2t0(x{ou27%eEa5#)^w*&TR;e>!93#O~F90Q(jB8pu!wTEZ) zO3gDm`0-7YKa9i_6_unE8}0K+~n zls>sXz$s+)V`J2M-5*Hob_S0Ji9`aKOiUpwsAL_TVq{P(Z1Mnykv>$-^C0Xg43Np_Y>q2T@#h}h~!QbBu-!dCFg{did zmRhjpPUrK%!HNYZPA=P!j!e0qwNNcdEqs@}BIp$eHB69#xg2=s#3T!UD%KE+X*pkfrPLg{KO`^7JDZ-(?6WGu zq)Qv)FNAJvm|!pye#wSxcdwTW4Ga0}-^9#%hpF1*e_h()Nh&m98}^PcRIfCVDd{_s z7mh4Cc`|?RseP;tu-(69Wisc2pe2~_wz~J|(#}Kca{nZqK6a&@nSTDqWAbtw z{go$rZ+hw)#Jze`%9H8EJ;RFw2B#Olm=3t;jF|2V3)sl~>`o-nk*=7cx|d>rzwBo-o7OKyLSO?PMD(!qwMeh*0)ZPgid%jM%sAcH8qefUAvp0oPWK_pDZ7kHY zt_9Hsj%03otI*|N|MgVSt_2Bb@%Ug;10jM zb`RZj;BachK)dJbM_KG1c1KKO_O%3PE3b_Ck8$QzZ(ioc(b?s zw4T*>eBoK<_LKu@o5^U}V?XX8+?$%6=M&eIz0r4$)I|VsjICt!N z3@@&{O3>dV>K(51|7aP1Vp}tmRQ;Mx^v{1^iJ4R!oc)wGQn*PTW2e{TVb+D3_fVU@ zi8|C!(_cng7F7Is%)8w)gx44BVrko-tEYO`-HbkC_W$>PQ3xppF5|br|QK0#YcK zZ9B|gg<8dMTibzqzf_5Bc%1!hNrPy!)^4#xW6r_D*bZb0qL{cPa5c7B~irN zm!v=K%j42>ej}ztKdW{XeK+%wGk3srm73IW3zZc)tR(~M$q{asZ?53^TlGdR>K^CBmhIVyWJ+A z&*~32LSZ5rW0EOPMiFvaxKvJ1cEm-r^R!uXStSmQ3)pCoQlhS0iZ5nEm11JHsyZ#e zV+Vc`NGy`%5hZLaBu%xP1y&re=7DtyLe&NU1AqrXc%xCYSR@op5X30MWWC;kD9*&= zP*E(H$wrzTjFs@9PTuYkF-{_c7!{Q1NQO=1Jn5p>id!5`8^PLX4tMhuA7VmrPdv@1 zHBl`_v`Vrxs~AaOVu9HUtO0;Z2p%^(Q>a@ZdCe6r35lwt!coR<;&6-KX%D-IBu8Zg zRts{4s8E)JRV6yB$*`;%O*m?IVYrv1{45*hxR~Fc3Wt?=TuY}*`Fyong}}lCG>TwJ zBbBkRIlH$+h05+k#hu}VIBEI`U3HWTw^WwD^dDh0Jxn}H+%E&v1oBmiUpvH+A302^W`7!aVG zfW-oX0v-bq5~Q7=$Nw(Of-Uf`uw-0=N}%I*e}8>SM8hmzG3d zA|htwh^ESwq6%vzoTgzKz#@RK!6MYKdnQXT5G$AQSoE2MT#jPoFwc~2{#=dQb=U*Ec{J2luc5!KS)9~I? zCpN8lVdaK=aKd)*`CBiazSlYNXxXK}Np*VP&F^k3`0K5<(*<0edv*)+-lBzdL;f|_ zNJMVA_oQQFGB~k+%aL8%zrV8L+)Uff@E~(~<`dhKyP4e7+Wm`u%=AQ7+&FW7{kc0= znUAjcR{Le}%=EHLi+4^AoHgkm4?d8%s{{9A^X`1OM2IyYf+jVZu)`R~8tA8fz literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_4_2.png b/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..03774bfe055aacec8fd03979ea508a0ad153c815 GIT binary patch literal 1295 zcmXAoeQXnT7{`Bmy}dz|L24*?NRc`&SmYeXsB%KLbmQi3+cAnOaD+oER=r7y7cHYg zGa4vZOl3`|p$i9=QM87^PEt)_6$UiqoFmrc0u>vm0-?haCa*tBNWRb8KhO7%&-3hP zZ81%#m|6hKn3VXHOiblwaG zVJxP>tF@$BPooA_XW}ul6X(1Jd%)-lQ@$u8CRjrijiGBYD~EN!i7$Hx37AtePVjuC&$AXB@S~bf})@VpaLMwvvB9_o=M|!1k!0D;D082B4M;x7@LiAICxy| zBJ_R|4;%3qr5~lSj9Cj=6gqV`jO5D*Jg1I;-|GQ^|pzt{h{6U!5OFiU9)Bh z&mR4K|EW#8HhK7D)t=b0drEyr)vRUs3{`7qLF2~#r$^>} zw+{RJ^0bDFZwAMA)|I|sZj(Cimk+Jn_FDJtjW?1j@Ac2yb*O6o{(_EX&7JNG8|I#y zbiQlO828GBMT2)+fAsv?eXBr_PT#xKrQx=9C>7M*YnrlY-~O_Wxr&shkA6~jfNmC? zHS71x8CkV8bX6KMfbGW~RCNmXn`SO}FzMpQ#6RK~QSlzwbF!*2SMlXBt z#mg)D#wr$M-+yw;lR6katPf?_7I|%PKiwYW`r_AnkIbXnr<@5j_n=)J$A!9{t~CRJthqLAALSC>xAfEOAo!;UCW-#Qw2>8E%o0o HUAygnJcK*U literal 0 HcmV?d00001 diff --git a/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_4_3.png b/resources/g2/track/lattice_triangle/steep_to_flat_up_diag_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f86d6d448e2dfb8f6a411ae8df00c6a661875e8f GIT binary patch literal 1228 zcmX9-VQdp+82-lCZd(I~HhN?Qj?hSf8(zo>g&lC<4a>a2%^g^=vLeUqSdC{mv}(yJ zc37lwr)feHOIG!=RA_8NwotT_Vk-1Uh5lGVB_}qdvHby3U4U3EbLTcS zH8nRkBM8#c($d=6iW!YYiXvH-5d=;YZL%zRz20Cj9FHf`>1j=?RI3yT7#i@L&Suj) zow&*5{Q-7NgU>};)-Yr%hZIIO$DvlxTIx#WlgPB(iQ`- z6Trm)ML;4FlJcYZh`yRNz%mJ|cKA?%Fl_{Y2f&UX5{h~Z2E}AjX?lX^GY&`I5U9V@;GfbStP>hp+tq2L##K-1(JfAwI?(OZZ?n>BP|e|XtqhLkLu3K<*m1>4gxpNjCnQ6TOw^N4h06JKwR#IO09XN#0Z;&l0+0cqhyYjz&qB8h zqbk($ya`AY2rwXF0U8gW0HB0HKLu4DCY&(qgPIB+1#bo%3#>fi6fuvB2q>0_DkhWO zTrOHJ=V0B--~g0c$0!)D;`W3|(rBe(i&kC9S}^-CQGof1Ne|38Vj)o*gF6Mv?cfxT zQw?~M(LgR8Eo*65EtokDCIHj`g!L?Zb-Twfc-^65(HsgshMdi^Hk;sdif*?=kzO+y zWT+@hr8sh$C(2eMwByiYf*}ef7?|Vg$8TP(`|HsU9PZmGfGwq8-l*#jy1TaSTJiZn zpDwm&O-u1Vm(zEB(fG~K#?x1)K6`&?&mS+o*Lu16YjpPb3x_@Z2Y&tb34Gsh!~Kq> z;oHvhcTRM5P9JYuD3_`$)-5>x8eo zjQ8K(P$owIY3A4NzSP4UTv3~d}s&0wU{O3MeftlI35;hmTF$rlI7S9RYE6k>^i-kDFY?cVxl+rewA z40qT1?)4Al2hRU(-F)UIG8!BEH#IxD`0&V#>zID_!4>TH@7AcdzLzG?EV=RQl8Mpz zptW?OKXT*9jdi8Y;V;|A)Qk55XHU*_e9R4BioN|#35_B_ynSl^kwbe1U+KB}dImjP p*?LdE%=U8}ANg?#9>wq1Nc#G0*0%$DvmOcP-nO$V_WZt&{s+oU8M6QY literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_left_1_1.png b/resources/g2/track/raptor/dive_loop_45_left_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5d2f718d29fd973d268191022a0bc61086bb68d1 GIT binary patch literal 982 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_left_1_4.png b/resources/g2/track/raptor/dive_loop_45_left_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..0e11cee76e360d80037ba20209a7183a07a22ced GIT binary patch literal 983 zcmX9-Ux?du9RJ?m^sdf|MLNwiN*^+aE=V3S2wc?Ms7L1ISSCdZW*9U=kuWmsq)1?$ zR_#L=6$>kxhaeS#7VeO+64Rwpwp=DE zRl45bT5YM*Rs6u{MUBDG5h$$4rFAi9770rwZG+jV2|=sa>+11teH1&>aah1Xp`gNp zC1V{O3mTbzCp+okXhfrlf@T&%VIDvNP%uo-WK0~lNYdfB9ZA~Nw7zK`+BOOToXO_- z94!%?LKbwYXfmqB8Ev8FicMd3dWsio1dG#!JSS74%9eCNuS<1Xu|3_3%rI_7qt0L& zWO&HRkkf#u0%>8aohx+7Qo!p`u`w{5u@#~niOQ-hUMWzGBG*v`-;kr4+HV;{w>A!1 z)5t}`Fq36Ts>rY!FH~f?p{nglrQ2u(wjFuiV1Iu+9wWeYAX^yI$p}6!_b6>3)Q2T! zRPo2w{-isa^`|IJWio6oS0M5-MXMZVh*Diio>jYz=5D7OhtXufgCb&voG}%`DpTz$ z@786%t?jyIKWLBo;bd}%cz_~+0bl{R0J{J~3{V0|Kve^|4vPB{2|5E!9=rm?5+E6n zog^14qHLAPP{Fu(FynD^$}ebR5<9YfiI!P*nx^kIqtG42A({+WQA8e~7!XRb zs3&rdf!C_-;gD^&9>eJMgi=W^m(^-jXXqMBw|K@Cm_VfWC2Ca6BZWXFiP{YEcod08 zU3ew^;HU$a&TY!@+Wos9B;>P=_1Djzy!LbS>eIqYsl~0oP4@j8XMa6){83ihzVOUF zEd9mRw{O4q@XFrmJA2!oZ$Eqed#=29>)YA!gO5M_NPT$ng&%%oPMyA`1n=6H*Vg*c z)#x;O@|Ul);rz?f%iEvMZhrTm|H*#`fBk;x(ZSb*b!X-u{`1G$jeq}4q4@dhH|>iT cuiYMegWvyc?TI^7VhA?QY_9+G#)T{Y15rh-S^xk5 literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_left_2_1.png b/resources/g2/track/raptor/dive_loop_45_left_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4a0e419411eb97272c18862635f02840bd11c7a4 GIT binary patch literal 906 zcmX9-F^Jn{82#>iXZg+q4<2->pelIKAc_hqD4;<}biq9oP9X}YMFoYb)Po06RPZ2* zLNvI=1yMYh)&)^Cm?Ef$qi9e-1<^Cba2hnmmaD7%n)Ns$y{SSv9_UGB$Is>qHWr0 za}=$zTu%@OiZU{c>0mG)jS}C_qG+>P6-9x7FoBw2?5rimgtDZ28*#YRg54l4yj3~h z-LChjNw-=Yj(5q9LNf->TarA~D=~XM8ZTz^Jk83D0J?-(O3TqnuTM{HAsj04w6_SI zbu!(p)3SVx1OOGl0`LGrfCa!715`m4k!_(cK>1pxz+_=8K-7g?2BZKoaWrC4Afu>{ zmP3>W@FsW;BoR~@>l?T;pvPW!78r5tW?8t~WvKEZdcfLE!NcW%)FaBwd9TpIauDw) z%iCy!)&Ni5OB2Yx!rDE_bNa#9iNkT0hPymP<%W|a6amTsp(=}EW%m|@YfraZ zZaR4jYq=CPP3iXy+csIo<(P@Uh9a9t%u1$rY6s~gaws%qQ6!*Ds>;v3-~8{*4}A6X zQi1#b{`Eyg?p>Tec-HvAcz*BecaP4_&Td}b^?&}(y8pfP-t{M+*FXOA?%DRk+C%QA pFYAB2vd%xa`RupTn-{+vfcwp-|2)3F&MOVLcyxLG>%-?S{|Be@eT@JB literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_left_2_2.png b/resources/g2/track/raptor/dive_loop_45_left_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..02e1c54b82fcb20b368435fc6aa2fac6847de409 GIT binary patch literal 1001 zcmX9-QHa}g82|2icez^~WmYV%NQ63a5RQ(85g`vzbGz=0T*h)*B@a0WTChrFk?TW| zj78{n9mcydvZJ`d@=!3ast0CJSj0?k*oVm7LmYYNLvck1)>+4)_wYAk@cX`x-^=&= z!SDO7oLeazJ#zdA032ODyLdjH&&BofY$EP=7XH`*NWi%_SI@+BVq#))ax#%fOifKq zPfyRx%wQNcJ3Bi!HE^|W44?+S#RUk}^Ze9Rv;<_^C8akVT3vv0OzI>x$B>R66y#*J=f>+uz?GjYbHvDi9V%wNqR-EB44z zpQ{Zddsyj?%>8j^co-g_B$-OlnM?uCiDX`37>yTda=fhCsW*1poyZTyeHLUM)5Mf6 z<7Sy`R#~SecAKSLM-RQ`F!aachlm9z0%!mxfCI1#Fu(xC5I9uTkYl4L6bMi$Xt3ZG zAQAwHfYc1CQ^*#OTSmPaifniiJPkYtMFA@-8NEU_%tG5%x?Lj(oZ&D)u~xPOR5i(( z8NtS7mrx_d97)c&(mk+xhi)H*BO(nnjurALiN(tzRW0$RUbY*0*J%X4GmLyR?$bPv zTtE>Z6lYP3<(?vIRGWhV-L#%U>-9KE63blp- zl@$!bvf1qF>T01_EHVr&2)rzdx~`h0QLEKlx83aqQFNRn)7gxnf#*OH*HtxNsSs6* zt~WThC3U)5FEj^nV>I>z3RAdsLoC<|;pk-BWR7Y==qiJ*k@V}6#G6l}5)K*#RURA} z>lj$r$PGLB*#Jiq8qG9x>L3&q0VDto!;D*zwyl;fH{bj`6}n}+T@ z_R%=Xb>XTIV=Zl+p$ZdnFH*I3%+8DC&Rkv^8FiBd!wfou}B7!>d*7SrQr zx7PoB`~x@k_hfka_aCpN_wKon7U@1ONUnXXbDIbN=G_?=Sxx zFDZBa{owjrhyUHW(7$iKzV$^E|McF0`^>x7za=&vntxaq@15N|ym|Iq;j0Bz{b6HY SiCU=-*txW~eecyb-v1w2u%S`_ literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_left_2_4.png b/resources/g2/track/raptor/dive_loop_45_left_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..3db7ea3e7c543b08314553b44f1c50c4c700bbce GIT binary patch literal 995 zcmX9-QE20I82`3z%XVcKq+r3ydQc=DVe}!ohg;VPhj-o^UW*q$Zec$ip`+e~H zzW2Ac3d?66I|BgAn-|x2;(GqHUrfZDsJg$#4BMA3Z^UwDW@dJFHjzlo&CSiv&o3-2 zU>LTzxVW^ml+NXH6qV;VRup+fku*)MR;!IhtJ86PzaNH^D5CPfG9d6tNlKN=S-q04 znM|W8v^#Rw(|Un99N8R+6`7>Ur;TFPQizsD9aK55QS5cp@US)x?dilXWI!fCXTcJ& zwu*TsK4_<+UIvZxD3Z~Mg^-^E5CCKhQ*qqLWGsTP8RkF`4ojthVccuAkmqHnRE|yO zg)Acz1(hrslwvVjldC#>y(`*1*$qosI+HKt7?I=^T2eW+Ce&JT%T?XL@WXmAZV#s( z&O%CrbP2K*AS{e-r3)QG@>n$}nnTT=SUx%s$dp27^a5!XnYO}pH8H3vgN8P8suQm< z4IDJ`@f1yvMT#!5oGyx{qBM2AW13#86}axO-=9n-2r?=V4UB5zTsI^3$kLFjjU;=l zcPCaq>WohYQ=L(W=dvRPrB zn%HfY4jp6QHOB)#itZs6pa`G=SO5;dA;1U&6hq)pMMI8_!ht}5Nz})~!O@R=VA45IEy;fMTyq38+evwbFu}m0dy& z8EYark=~s)dMEA>4JJei=qy&q;}V-Ki&Uk=TSnQg8(pU!_|7==Q8c7^9=U)*Kq$_l z7TY~Urdnx^Ms&0B5L&OtNs?GDE0u~$<*RhQ!BP%Kd3?SvkmF(w$ysC&s7WE0MFAfl zKfRi~fBFO0cD6*g@Y|2C#$s=C{kh9e?%n)eI(zrr;{5j1TYKbZ^OsL$-+tkzw~wub z2iN;ozFYnBSbur$i}zNJ&aGW{9)0nRTQ7b1))O~g?;S7cE^~6>_U!M=Z?1g(fpqoS z!o@$nN$$UP`;xh}ySo41o%4Iq$E*8CPd{_Ed~5fs(Z7!?@9H-``F5@Sca2`T^AWdu pQ~3;kcK2xK%Afb~r^SVo134X zUszbcFf5r&E-o(O*=&|&8Br8eRo3;qX&RMErO{}0I-c(j!Z4anSq20i6gid8XNpC# zRA#C*zR^_L9j)6l`$26qc0?M>@hL;btsH6VRLf)!D`Kya>vxRss5%Lq)5wtfebgNiW#W2Tz6G}128 z&9dND)o!zJfjgN5DApnhz?M^jjVlhR zd6W_Ic9eIgrS55?f98$QFrqTRk(k7!^8#5^*>XX)t)f%6x^6x2-AU-9>4=kMz5ex(e26y637MpDmY}zJ9}crCruZ|e=R8RdkNW%HC9-XOYs z2pBNbfH#RQ&IlRYFdvRJu%ZV>JuyO+zz&IBR*o87z&N`Z%84CR{h2a&-uLDC@;*E~ zJS#_*Vv}Q2V*oI@xG=xmzmN5Y9vSTKS^l^JFbGGUJ9fBFeLmm7z`)?(;Ly;J-|rtD z9>y?iWMpJ?bTk+ahbbz`ajYovvYgN~HJi;Ai{)z7s@I#Y+w(js3M>NxKb}Yg6op8o zqq#g&ED4pWRI{~)lW%tnj>O{3xXK4JaYC0PWsO?Pa&|G^sH*OIuIn1Ry?QJJ5(z05 zbP=nln4QO4m4Md>p>7m;657)ds)qpt013lX9M6P8dL&{n%$gvqCzGvAX1iQQwjH7Z zVKx{Q2u6y;R5G5SWS!AUT-M|ZHPL8DmYXE#P&5{1M3R^3gvzNoAy<~lmTEbfx?6C% zmG-WUvk(v=m;@pX5gnt;!B{ntuvyiK=i8dm)9YwWAOkWTO2x>0oTp5Nk&Ma=qwzvc>OV_Y^M&S}D11W?FWs+p2rsHevzd02+V}U;?ZIbTB}D2pmdl$TX1K5+a~dP+-A| zfhzzK0jWWhr;s5aOF@ksat+uIo(7(SxPU2gFq0w+daPo|wOZD3%x>2~eXURusPs6i z2L*$WtcdC|dM{ymsoHL_v1heWs}~6XO<=Joo?r<@q|!-V&nQMAQ!@)r-R!z`&x9kD4Q;II&`Uc4_c$aB@&{d$mz67MYD9Y$WkUp*?hDqkllC~Nd(G7 zP>DhoiyVHx5i{dE`yDvDyd=WxZ#Pc%iL*FAcWhy0tI1sW?vV-q(ZB5{54`ob?D50C zYy5qsyThN{e1G}bnH^EVkFRchKCE7yZiR~HSM4hy>|V}?Q-85EFNB(Uw!)J GxBmy8^UAOQ literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_left_3_3.png b/resources/g2/track/raptor/dive_loop_45_left_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..1f6f88495209f4ebb5f44811f023d853a3917031 GIT binary patch literal 1016 zcmX9-QHa}g82|2icez^`g>_OiLX~o6ENlS-MhPr8b4NWRmw6c$>_!{``_P9la!?^+ zrWJ}SGf2UR6{}|09bp!BNZ9&NSY$U=Fk|=7v7mkEyfE(}9ChBqsedyDzwi6_y?nnP z{J!tAQ!Dv{2cA0s00)=fSX_aQ0#3bkdMTz86BCn@lZixPYHDhF zdU|GN2E(w~+1a_dxlAsXqiKrgIY|-}rKo9YwOX~TR;S~7-c}Gq<1tME$ATy%i^X)g zoUQ0otzY^g^W?inhMd<=#47hvkLu=8f@0Wz}}0zJPtAm z6%I@ZYpYnVo*J~%<35f;3XNs7ZzAO707L*8!_-vDz;TlxY?j>+#m!P_U>G~C7V7nI zI-TP(l$d2@BCnDKgH}vdYw}e`XmlmJFS|i0%ivT#$4aE2Fh!MDYhtY>w_Mfr4KHZ; zVSBjOOL35vAX9>@4upv@txUc{6nmWN7wSXJj!X}2h-6w}@JgPn7udGKcQwhcDg#R! zIn}6V?fDKGd8sr*kOi74aePIR>Wb2=R66x~uhsHhceu3`MG*pA1;WDUc8c%fQlBgh z`P!&xhm~$*ZjC$P{$LL!$yAETWb)aZL{bXNYJymk<7IlM-q>t+0?!{0IgkZRlTwD9 zHOpjE=bW0W>zQlo z5Be9i+w0|93xi{Ca_fI_JpBBcUb+9u%SYB$cCPNuJ$|r+w-0Y$JyW6PZ|vUv{iqr~ zy14rI-)q+J-V#3k=-Y?Cb>_cNAAK!8{6Lu3ulUJD;?CdSouH1N`|{4j?pNnu>RkBY z`sMu1KfgcBAC0bj`r`G{KOa6ny!Y$J#JivWalW+u&dS-_Irp-0BGHe|+`18-iyg!A M(#qmbufO-n|8}3fY5)KL literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_left_3_4.png b/resources/g2/track/raptor/dive_loop_45_left_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..5de1d636389eebeda0220691e7c93e5cedc53d2a GIT binary patch literal 1000 zcmX9-Ux?du9RJ?m+^sw7?6A1Na?nABQ3{I?U6kC+je5(toR?uAD$BOu`jCe_WKf|< zbOp;U5AjyEA{7eDLtz069vHPk)$%sx&OiWHrPEAcsPfyRx z%*@WtVi-0zH#a{&pG>7vG@a&oPLc#g$?3XQDwV3$db8=a+ua}-g&~~=js;PO<#GvC zB?`rK*<`CVvC))Up5F1z{=nubEX&3;A!%d@OCjqzy;b79YPQqVf}Qd(u*aiz1_zmf z0tc3aH8jjKFtV9V4lhb&uESBqX-PK&*Xa^O4 z*yxYFI0p#{l6fGCKw216PiC5A&f_#cYxZ?}WVO+jNF@{oFJve)%Qh6grAvNE=~eZC zQyO{IvG1TkJDy-jDoZnYjxR`(sVKEVp=p|4z3#hizuO&+MhI{X$SOuR;(QC2I#j;T zmj^j}SZIx`ZrB{|^~NYh#p6senITdVl~!0*7sRq0Eh{$7%1)yhwEeKpfh=IU6gOnT zQmI;zbIMYymfvxVo>v?8+F`hhIDjmG4qyQ|06PE!3{V7-M@1buHVS$o2^tL*4%`d` zA|MHnmP96vY!SIC>XcDn!=vCC5O~Onn5ra=0#&gx4O?loO1|$5hdzq5@I27P7-uC# zn~+^n3s`HEbHYMvTj&5GtJn{7Q;{KV>(GN%F55NE97x$TW z*B)H??ndmmG`Vo+)WOw-^Bd=}yT#Nie?N8gvpb)_?0@GDJoiU#F?7D&{qv{aZ$JC> zM;9(!e8>Ip!N%Et*T4B~`*rouftzm~{q^_}>Lve~W4E8Uq#nE#U)m_V@mF~7?dx~H zTzY}o9^ZO+Py6chiyvJ5baC|Xy_-LZ_?tJ-Wy}};Ib~jZ`RB+Xtejk3{`l2%m;VPf C)v#dz literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_left_4_1.png b/resources/g2/track/raptor/dive_loop_45_left_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..abc870d0561fbd1b4f452190b07c9da96c847963 GIT binary patch literal 987 zcmX9-Ux?du9RJ?+?s9+F1*vD<3X51FN{}EagqeqI=0D_AsOrhUjm zzzT8pA)H0~P>(8c^dW3{I5A2GRSF)ix(KIs5@*5Uin~D_eW-8`KXVK|e81n%%lGqv z&-Z)n!lrm^`NT2+9NRdzelh7sGq;#Z>N~d&9Do#DIDhGELT6@XW@l$psnp!u-2D9f z!omWEVT+54OG`_cTrS5jv>@<`BI&wnnntBksn?r95O%x!aXg+(7#esEWNAfJ)1?wo zwrHoy)f;jv(Apid7gYyCPoS^@w_->cyFj=)*)*BmiqNSSdVvw|IiuK{j=N$OGz!W* zxC+)Xuuc{4x6+ed7L8~$(a@obP&Wr4185j#;JBU5x+Ljw+^#I|6^nh_K4>;kr;}yU zIX*+n1gDXrK^1I9cR8~mRD7w{R=l1T#zlh7(qfKNC`o5kLogiKX==^T2qU{2*P>Bt zFzw(xq!q{%fv|vdF}9fz15)kqMpUQ{OmFOV(XLFTbv9cTscM01=|bC7qKe+Hn?t`c z?$oD|kA_`5&5~4sVT-&_R+Or)H_GLpTJ1EOQ5X*P_s8Qgf~)~#9b;O!(9SA7syGmw zq3Vsw?XkN*2}XzgDO#a$oXuoJBBxNa&T*zBJ6f{L3aYieRuFfi$$$q;8~CaD9Bhz&)8+E=87#(Z?`K^?V5}A1&Bz|1 zg`^R4?pXCF<@U7RI}8V?KPJ<_5|~KiDo>OY#wtp#UGi#n+pk4ke-wAoWWY)i3IWA{ zP?Cj{$UR23Vl{?Cwo!i!v)2<;RVkHp%Q6_c!qRn~@dc(M(fcwrD&&wxAe%%D28BF| zq~!S77grt~{lL|Wn+lx1e|IY(*EZJATzY={Ms#NN{b!y`{cI!eg%6$MpA9}1*53G_ z_Vv?uZ{<((pFDciy8P2a<)4@G&;ItyIql`|zWn#KhjaL+!Hu0esf}AFpZa|D$G^VV z`t{x^UqAlf`>j7N=jEGu@gDij33d5;F8KY2Z|~pU@z&mcaP|6~{Py45SI(#2eD36x jKc5Kx8&2)vSEp9jr>Dg9H5|R$OY?P^ZoEzh8do2>=@mzqn-em6!LtG)l>dTK{m_rhMApfmV8bS z2?#Tw3Rq6Y^aNhb*;^GSYIspgMDr>_B{u*MAYzz|<58zm^?0&0eV*sb!C*BSoy}yB zt~*J)n{jw~7cF{xGU1Psl1eLSHkRj-MIl=eH8bdq&KT$ zld37Do{u&4)SQt=^%8EUJcOU5f(#oLgoGre!{I_Ap=UCNrqyO965TCG{c0QdnE02Lq)PzI=DfGqGViYO?bMP`-v zfJ{P?0nG;{4@dwcJ5Yi|SsrO2REZ-q3-^VmfMdbWV&R8T}uT$yN11OaW8wd!YkQ9l?q&G%+Qw*7BNuBe~ z@I=G!MxqNvJt$2gjX?%y9Y6I<&z<`}uxDgQfc1a;^oEtM8tmV&<=LaBCN_+f);?tW z4{0~vIjIdix#`}LBX8|~pFCTjVe65n(!0?=ADy_$UY+f5A3ZVs^!3rx__B4&uHPBm zdv)XVfkP9|e_kFOzx&y-m4AQ#;rQr}^6i~{Ye!C9K6Y^XFNY^r_U`L_`#87y#ET6Zam!)jl%*?Vav*ul{Ro4+b|4^`F}~ Gdfr| zlWH0)^G2%F*k~mU>F@}JAl6t(V@}z$=$TBd=7n2j?T``uCA^n zOO{|5*4^E`bm>x;$KxSMAIma=z)4b2QRG-GmP%#v`GR3ASXQ&uB7MNnz;nI9pfeoC zBT-*GL8sDuE-w~KO4&?QYgv}S0(7s;xzqrzN#2Y?o{h1kRG^%ft+{yJ$}TnyzZ*mX zA`EB(mXonk!coaNTV*$@`%p_nH#LL|4*(A!Vwmi3sBX9B^=4`MEYHt{LKRhQWHP8! za+6LE zl{D+Q>SD>kfKvch2=FL)HH^x*{CRJ%#K>kKQB|@{%|K^)!YNVih@VIV=$ynB6~T;2 zm6TG`W6e@((bQ4Ra5yP15g@4$!$t%lAxY^-B%er>G8wZ_s4grtn@t368N4Zs%sJSi zTPPEuDjTl_v-L=^sV%hf^_!JN)Jr%Vl*{GEJp$pAXj%+0q@#=;7mDf7oUT?%>3YRzwHk;42mmMm8h{Qk2T;QRwZXF}svtd!tP1Z1 znS>+*1wU9kAOVosC4Q!lyaF328D1~ibiG97o&VBhSXWI#Q7F@ zq8{)d5l5;QrAbs^kjb@=pIX=Z_pKk;J31`D=0AVk+3u;K!7XFk4xM}N;pImE9i7)v zX~pF)9~c;R*;ZeFdFRJRcP_3v{r!d4?|Cf0adO|9^$o|F8(%a>-`PF;99!H!uwmDp z<;RZqy>zwD{`{sW+tqh~9i6@~Gj-&gdGX}LbV+8-BQR_O3niV(QW> zjo>df^XMOw4XE~fzGnR57GuN-h62M@TZ$$dC%&1r^Y?Yo@8LvnP)e5 zenP#!;jR9D=gfzfzy2)vpnIMk&`0LiZhz|7%(c58Sv$Dtn)CFI`B!^){AWLL{zT>H TzdqR4))R)d4iBDseEi`5Ox*Lc literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_left_4_4.png b/resources/g2/track/raptor/dive_loop_45_left_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..3054197c87b8e3cb08fb380bedbee9bd9d710153 GIT binary patch literal 1001 zcmX9-QHa}g82|3tUV3+)Wp+?m*y^m1K{$d07BFbM<&NHwc{wkGpnZs5#6A>>5TQzu zh@F;EA)7_=P_RNC3JZ6AxQ7fYbP}PA3Q-Go7+5z8>%;KES>zt>;cv#^_kAC~m+$w3 z-}l|v+0L&lom&Ecm95S7-DtiP)wyIW>W?-KRsdqKbM@LrMCaz_=I7^Qu~1ua74-Phv8=tO*%I&YCLG(&@u0-?QXFM+^G3X<(m(ULFU9gfa)F zgtaxSS5J-F>Dd5BQwq%#bZR2x_pYc;XfQd+L&`i2)Y{Aqi9 z(o1oWmLOAvYy}7tV_KPfhbZ(o&6n$A-40C;9g1XHW$<#Itjla$<-5A%SJjcFPn>Gl zvrc>mO}tc^AxN2KiX2~-q`Im$%jHhJ-fOjd*BuXsVHhI7H6SdEZm0MzE)B@yn6FI= z_O#p$&Ec#wJsq8(WipjwGMRifCy|uOvbrGFlxSI{Q*ZR!oxt;FV-6Gn)1{Q5WX%%U ztZ+_E>Nbmg#~AgR(~&ouJwY6R44?y;01iMOV1faPAo8f9BgaO;NF+d`p}~Qhhd=}* z0n#$4P9s}HZV3%)D6rva@C*n%$Rbu!Ge((gnEAG?cDq&IccxPxMOt_f=*lu@W<)!y zxP%t4W>|1$Rb?oPqaB{^3Di&|r*aM{S!58XNh6m- zz7QQhv$}lz^anoK-In0Z$M-*sh_$u8cJ0!wuYO}+h+j;`caDt9$KE@C{`_%be}CnN z{x5gsk78$jfAQ+W=h*W%FF(Jv_DFbl{?6H>+V$}Ek6Ve0!+VRj?%cD5*Vos-y}=yc zTz%!}wbkoR{ey@2-pk*A{li0Xr$K;K1Vb@X*8k%^3W?@8kFK{eJNK zzAM{Xh2zIg9s_{mo3F0#r1Ml-YuQZNxr?uT2atj7*UxRFbZ%~Lettfa$t)}^EG{lC zEiGXfmd$3DmzRlrKF@KiB#Ejj>w3vFje5P_YIS-&KZ*uPGM&vh7DNFQd8Jg!RVq}q z#@Y>`)mFMaEeOqi+!&2riNT7(iXjtLk#cmpV{*H7DQp${JtNt(Cy9GFjS3`a3{*vM zRIF=YVFMp_bF)5)CM=q1=*U4R$^$3>8ipA-Zjq!z)2<-wD#~8DJhZI4oel~^lFQ{q zf>kI%qYDO8v^d=n%(hhb2+yr43&&X)|yuob(bb$r8*tte^6lkVs+ z#6`%dK$L;10qtOXhbZ*uQYad6u`x2;sS}}Hg~{nWSuHS)qR`c)z*OV9K5Us|uRaZ1 zhp~so5uW2|rpWPSQL3tHL)Y8YYOm1PlK({cii%S8i_L=fXvd1NN zQVpigVAh))4G+-@gX26w6sWw)u(}|avSMrLvRbdv-0Sv|D4vZ(&}7V1aZ96|3e&EM zo~;J$@}6f6!}eqt&1QFz2v7tt0UQ7iU=Lu70ZO4rsAeM1MafX1!Qh}Nf?t3{0i*&l z2-M(^t02FE`Zh{jxF0+ZvIIp1tLTJPWtvW*>*_&Jk7I8#iBYOWmVv9Shz_B+l;+b$ zA~@5MH>(DRt^SceLc=MY1D?VPEM5|+iptf>vSU@;rWJV2IPxY*gk~dNmXQxA0ff>l z>{RXn$a<|k9`o(i1DO53R4S>Jie9T399!qvmdJS$7s~8FVJ5{q(kNunsLdf?M6sM6 zKmXjyU-y6D{hcipUcPhlVoEM=uAe#g{HH(uEU$iW>Y;_7uAv)i{?*$%XKvkk^s6s^ z`1_6a{xWE%AKSQ=J@N1}PkxS%KH6RV^~I0B|MCg!H2?cq`)%#dm#X;Fj~twM_v+)@ zpJ4~@kYB&Y{ulhSzh+&!eh>36-FwTpEFBngdE$KL$_sxSU06MffAa6i+pGKb`MKYO ZH=lhf>;7`*+tdtfZfvc8^U8$}{|9T^pn?DZ literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_right_1_2.png b/resources/g2/track/raptor/dive_loop_45_right_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6ebae3dff6f768c645f8d828de6e568c5cee9542 GIT binary patch literal 1033 zcmX9-Z;0D;7=G_>?ylQ%u8e{`jIKzAxlvfuO!6V~az}T>UAE;|4+@K0&~El5V8)8{ zL)g`$j^ct;)(;(aBd~%|>v>>=GAd-FA9@n-z#fa*u?~YwDN?-qaIl{}2G9GxJYU|2 zhll6->4n(-i5DjTVE_Ed*|YsS-5+LbsJ~ALODTXMIQ`DzT%QgM3=9qq4h;ElANt0#QMX`}gwsiezxs2-d zFdd9=p{Pi(G8t2;xK1kutCjeyB@}9s*_3TBNigAPEW%2ZpfCxQS94;nESGK7c6G-q zxPGO*Q^z?7N)So{kpa@cm~tpqB@=Z{b>sQAW_Aq+t&3DpVZ!Mcm5;L(g|BInn^jsx ztz%`o_2Q0ep^k$G8Ip?AOp@c%l9X4JQaWAD=j-LNYuoM3&2G1gAglse#OMmn*TPbh zO1Al2Ct>>OTG!a@RsG%84hm2>&V)iSA|g>yg=IBC%*p*{nQFe!s8l`2?X@|O1x%B0 zT_%haRmyNyPO6oX4NGs;OMc7g^`0UQAP%4b7yuSP1E7Ne>OoRmu506TO1jz)_ zNmQbd%^_FVYsAsOzk40Ha&|$26Mt^K-zWC`?AwbcumAH4d(e4#-zOJ-M;{CcDWp3`s z_SB6pu6pkJJsg{v%6vYV-+patdgb@ub!|#t?dtf~}|LHf1N)T&zw{HJ&;quxW z(?=dJE#5bl5B+`M*6QJ7)Ww&~OE>R*dHKu>y*qDB&wO`xNm{&L}*Q=|qY#ci< jb^OrssV(-+z;@tC?AAwL9l!l?-vZ3fEzEv9^X|(3H~+pV literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_right_1_3.png b/resources/g2/track/raptor/dive_loop_45_right_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..138b7647bc2ab8a6ca23b83d3d579a5e4d5c372d GIT binary patch literal 1001 zcmX9-QE20I82`3zOSiJiLy@xeByxp|60{yUh!`+xcGMAFw#zVRClMp|p%3BALE(x7 z>_gQ$^3cP|^`u}P3g%daAyJ~_Fq}iH@8kFK{eJNK zz7Myz3acyYD*&*%`O?PKcs?H2S~3y$>r1y~fCOy6yn7|4b8~a^^Ye*BVqsxnadB~J zX$ixyWHPzDyqwA9ax|Uic}|i9RW0heR;$%otxm7!`2HXar%^=bfnz}wQpIArTqY{j ze7(W8+G4k-xSrk*8l$nrQ<%)AG$CWigsGApoj$DbUQ6!xwD71t39Z@GFJwWXpu&ME zVO|Q9LS@hK6z4=^)R`(&-$R z$%_Q5kOhsB4O%r>z0KEbq3KFiUva_`!DRD=94k?R$`mzTtBduH(s48=F#NC?OuD0) zhjWmYAX5UO3Z#iKolK!e7ClZ2aeAc?b_69 z%>o;ZeLT&OluR=vj;}~kLsi?AO0UuII-S6AMuWk0Iz^DxfNWuO7w6rq)Tc@#zCJEm zlZrbv2T^ZwHk_dph2u;nQy_8@l~-9-7sR>}FRS(%&7*EF^n+-`fg)hKgc}NBmZ^4? zv+I)EE*;s%&}&bIeiWS|4j@in2QUF_fFpo01}KKeqpFT<3xz|G1dWC!2TlP(5s(B( z%b*60ED&6{=|#x|Zs?wIHx3lK{n9*%Hvz6lZ2ci%=X= z3t4kow4;hUYxU2Z5gJa(G%y5K$m2zhC`)v;B$!6oY8tNH419YM`Y0MPf`A-AAs`fI zQIF*wB3rAr$7815dI-JW=Zi(DTvn@9jn3DYe2b%Pp7w``6z6w!AO=^o9H0-g@eT!?gR&f5`=|MfpfpFE8}aWK8GbM0?8wg{V7wl)r4eDnSP0r^C$;{X5v literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_right_1_4.png b/resources/g2/track/raptor/dive_loop_45_right_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..5cdf7ef0bed19e0587843363e28e67b4cec877a6 GIT binary patch literal 995 zcmX9-QHa}g82|2ice%T|73o9SB4*IB=mm`!Fb_eZ=8o))T;{UbLBI@y7A+Da!wN+r z7AZ#=*;zFY1q%i#7_bkg2C0xihDG|2xdS`NLv@8!IWgwv++FGGlEHVr&2)v?5x~`h0QLon>r_<~CVR#V7$!x~Zz;hr=SyjzfDnzwL zH=3N&mb*QzADF|aIi9!zg_XFhAr-6=Ve4eaWcKSq;FN|vBOWxSu{%#f5eJQeDi5}T zbqy?N=0@H8Y>1;Njb<7;vJnc405X7vVMZ=z;kZqbF30W5@}OKES=M2vgMt8O@@;ZxGMXFiiy1LLem8hhI7pHN0d4^4U`#hB^l@cKmB&J3qPo*+ zKd}#Hz3I_tjhfl07zl*#Nw7>4$-0&9P7B=EHIQ;bC zRpPUcPP}*H)~WAbKmGGlr(PM%YT`Q&Vpp!O{Ih%3VZYg07yr0QA2PXXCxnaY=dDjJ zuO~8*Ir-_Ex4qxae0BZB{qKGf;>x9mo`2N;@6N`>uhlcVn?E>x?#H|M1h5yzssX5r*+S&Z_xy$eW4-Da|lmGw# literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_right_2_1.png b/resources/g2/track/raptor/dive_loop_45_right_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3af1196042d661ac695ef3d4296b90eac02153 GIT binary patch literal 915 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 D^`Nfw literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_right_2_4.png b/resources/g2/track/raptor/dive_loop_45_right_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..d9eeeb49570f61ae6b8b2ed23137c66b4587409b GIT binary patch literal 986 zcmX9-QHa}g82|2ice&enRxMI64;ibHNsu66L=BqF+~}Rr%efr%AxOreE36Me>RWhj9X~7MPRP5kje{&3e{J!t^^8G&e zecz|sTgA0wPaOk*watz7b7_6{s9(;coUwvCDZ}>bJ7-flH#avwKcC5D78Vv37Z;b7 zmM{!kUS3{VS;-d)1%{yoftO`b(-gzdEz5G8w(kc~bdV&I>6D>?=Rguy6(v`x5Y-x8 zZ*Wda>iB9mH2QI4IC2FFD{-s3m^Vv=t&wem*|&tyDfN9l>D9-HJDWsB98?ObJlHbU z(Xp_R9dvTjK90sTnyTo~Mkp!(NB}B^>DjD_<2FgU9Jen?y>fYAns?i66oxpHEAV+* zA~=;S>Qu>OG@CP8g5`JASn|pP8SQDOoTR_h=s|2oNi!aIhO;os zLr#W#8HgH?HpaH|MW0kcUXM$Sq2W&K2<=N$PGj+Ek!qB5vCi#0)uWs)SvkS~cFQ z%iUJF=b3}BH6BFM>0QJFlmH9>8^8nT0gNy}DI@{a4CJ{e8Av4P3^aKNijYWvWI%cz zH5lYdD5#)*9VIRt1T&wqP=SNYYMRov*%r=ia~9zxS=5oa54^C$C()a^m*yZ*aG6 zz~h@QpIECrvwQJ1Ny>e*xAXVgSKkwMFKoQv!|f-BgEAQAh} zhv-%5W|1HjI;_x#FbYPj;~s*PEwUW+p$`%2>>y&riWN2uvk!+H+uw}A@B2P}FW>J6 zzwf)cxsg45=-ER6aCrT~+Ey@61a&GJ4mx%D;!S`sY`%W!TtGvi(9FzCI2@jxot>MT zi$o$AhDD>%`T6-|CX=BklH*uWrE1ccP^*f5!t4=&)-*>VpkO(NT zpo>^r!R%Um*iKCQDKsI`R6++jLQV!i0FW?DiO026O2=`7VRi+fS11fM?Ov;eY&%6I zGHj9*(u{;>6(Xlmvd*YYu43}_u4wcn%PXYm6q(I1BEidaUg4CgP;E&qOR-$d@#^lR zJ=(Y9EF?ro79d>)T*v5EGTXuPHmkU~+DJ8g-9ftok&x+BDNEFHOk3uNsyqN?l(cOgoc<;XaBH@i?7KX44swAZ3P8d7&x=%gUWvz1Qw|jyoN(An}+g#x*Ie z7l~$>HLGH`S?HPC&~8qK&UAVYu>d&$6+j0t0eS#q3{U`pLuD122J(gi4hjWz7OX6I z0w58Pl0-EM83MA3s9!~%0gr>Hf#)D6U`08pm592YZ5wj8TX9`;GI3F$l_~&Lj`IIj=ezUopF8BUS6DrzLTGO{ucJ(Cz0i6uJ1*5-Z`>W{OWC?vbueDW%2v- z(Z!Wtd%1WWrUwP0h;S@nn~Ht`&{rOZQ)aZ3uR>^6?9gaU`2q)Lg6 zt4jkHa?v8EHd5q5iYZ#df;X(@U?tg-8c#AwF$WaV#1dv`OvOov`B_5pz4yNN&-;@1 zy?0>4`oNNo$2$OEN&nj3jm?TTV@+F2Gv9r$G7QiH8`cf>HQNOX7A#!2u%)G?wY7E8 zqD6}rFUByet*x!Sz1`{YcnHEr(-g-sf)J7n$(p6j*NXuc z@Hj*%P&h0rVuoxlXB~}_3)Ot6!J~T$LPZY%3&3NTXt&2*F2(EB{Qe1+oeqb~@%UUO zgABt(I6Rco$GZKzHz4A{I3Xy0DNQGGOsc?XC0@6}Zqnroc>EmB2xLg4#Uz`|@EKjy z&3MsDnYC1x58z6~($y-NRv$nrmFQ52i$sK2OeA~>(x*~HjwTGo zH_PI+pa=186!)SufpiL)O!N53Zrfk?f8gDX>p6J+kISP?zN){sXK?L-PmlB*8Go{~ z^(?xy^pid6z^}$--@Z1c{M@Hq-Q96}%bk%Mx2KOr$F?6jb*mDX z>^^^b!%s5@ueR-9xyk*=wd=K&U3(Ls_x+Z7%C=(Sd^?YemJbfxR1 z$0m2#{^_>aKI}Rpcbu8LvgYJCE{Bcu{{si5`(OY7 literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_right_3_3.png b/resources/g2/track/raptor/dive_loop_45_right_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..13a4d7fd7e56da86ffb8768336f452b6fe45a4fa GIT binary patch literal 1144 zcmX9-eTdU`82(+`yWGcIH@mH{4yv}dutis0Hu6Uf;w`5=&F&%>rDAVZ$Xt=KWiCRM zZVRk~;wp=0r!6Seo0m}@;(m0U6@i@uT$CX+LjbSM$s}!o?+S9WU?+v_ev#b z7y;ZDqWlpyNG8yzfW;)7mr1cmXH}-4bLCn>vy(w05Q&CJ4r6#CF3>`b&6N@*P0%dK zvF|xwby2x2s zzOIN(HQP3n1xtlZ)9WKpEQS+FicWJ}p683{bTywhN+nCv8gp~)b{m3#08j1NT0-ytyh8Yp6WoXw~ z6bLvdP(X_Un+1>qQ1HV%4$CamQm~eTb{RY}o&XFDVl0y4{Zbk$$k9rf*Y&JrsjZd; z9j-tU;F$qR_Os<+LPG_cl-qH&lhzlM+M?Eg^)~7QL=cHaym2a+;_yt8k)>3*An9ts zGS!xC!cK!=7^neg0|*^2at_^N1hSc8vq=<{#}I2ZIv(dzDL#`C@JN=3C={;JxWPo` zSgaKb!9);BC@kVoqoBn&$4{&p`0LRR?3oznz}oqr-f{XDH;fE#9^HRVVcs)WKheDp zs+XU8sWkZTHFfG}@!XZQyO!zS&7e1XR@~uTt&3l{{(jkWTw%K}-P-n+>)@JqpI*G0 zc~V`oi2OLeb>vq8t~=lN`^_WEZywpQJ3RQ?pYY&EN5>BA*?z1sB?fPA@d){|fv)yO z=^(S~mD?A7xiqEs-`E*e9-MzbhsWG&N43{?7&D&@UyJ*PzrDO_aMqZg3ST|;!sM&( z@4KzsUl!ZS?H_kO?p)IUF?H=a#R{kLuG8~3$S z;VaiGZ^McEpPu}KJUz5XJmYa49db{e{#fd29=kz`Z|wNwe@tlf Ar~m)} literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_right_3_4.png b/resources/g2/track/raptor/dive_loop_45_right_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..5fa7251e3a6788d806424613caa5f08986083396 GIT binary patch literal 994 zcmX9-VTjvg7=G`1ce%T|>uJHT%Z_?h$TUjEA_mNl%;jcxWOq51VbT7G5Vc~(aAZIh8f%qyOF{D=pbN`!c`bjq#lRdkIx>1=Y3zEKkxIv z!}HbVM()J?(mVj1Si87-d3>K6&#BqOc(bS07XcEmdFjf9F`by0n4FwUBob3oQ`6Ja zGcz+7hRx2-&dtr?*=&|!XhGm*Sya`6u4|P_#kQNC=ZE2591lk$h6bJkNlX?B=~5|E zHt1@Nvl~*&Q`&*viE6#RBT!hLOKKu+<};Q`Hg#sFA_R86<7x43br3s;!!SpHLP41a zOU7Cn7SvMRR(jMS(11oG1sz!kg;@XzK*2CAl`;v!B1wnib|h)HSnQhS<7N{D0l}oR zJWfj)P9bv|l{XpH;`D}4am9LDb~=h57c(qD=dzqki7H#r1g$Dnn@ZEy{KyRBdNgSD z4ucdAX&LY$WDFoJjBVmMk1Pbd7UgR_-5FXT+L5TV$`a)qRm*cNRcPySR8hOO-ghg* zz&?yz)DKf>mZb6wTjYhZEZ0=EQ7(J6TF`7pzTey18xDsE2n|RZV_GSpO~@Up*b}P# zf-@+$ht}T68ys~HQIblfSRBt~vNA=h9H)y?RT)1syjp#?<;7t%>hYk6m@cPGC1aJS zhQYg4x!ox4x@I?M47%ZH^ce8~c>o>20&oF#0s0uAF(d&QI&vKpcO?=u2I@TcIfx}d zG9V2{H3m5n@=K^wMX>|N!LuL=ke9HMikoGsZsl5z+HO~($Q=wKG}a=Dz!*v1!X+o8 z_@owd*0A7?%I!nDbL96>cSxpz&0sk?Rp2uvnK6o@WtN<}*>>wu=nmo#je4voA|Fr; z2#vF-j^&Y q_1nU^58wYZz}{LpkRQJOIr_!L_iz7B_wJ0n!PtP4^d8D6+&$dp&mMyh-|zSH^8I|^ z^Zk}CtP88lN0$L$b?sbcW7-dAb}=@s*M8b90>t3L`OULaIx{mfJ3AYT#pdSb=I7@Z z78WoJTU=aRT3Sk`QYo5F^E@ZZqNZg{(SvTpe0^hDG-KG(BilfNg9|r;sDg}8C z92sjESi2nWHxiRBjz(!TQPF{eP>=$U08|V!;&B_t9g=iec1w~vy56_#-Fh9h+c=#_ zamlnquqr7Slw#AG!~>W@(g_An3n^BnM2*QByit^jb+zsrerN|#B^)&d z`|UUf2^o?)5EhUQ#?+HSlgzd`BUH)*(;Yhj+LEY*#^8B@Dl2S5<6EX27PNlV9D0Ru zySg8GXc)v33`r?8qjP*-mdlz}%jcWra=Ts+eSgsFjmKjIxB+ApqZ@I)h09$^AMnLt z)*an>HOrMwqZtL^WWa$cVx}CoRl>

CrjVXzI6J9JIkftKiMn&cWwL5{i|<3cK!J)-(41tgl|22|A(7j temz4!sQ>%hU+3`BC{{yOctm6Ox literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_right_4_2.png b/resources/g2/track/raptor/dive_loop_45_right_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8898578c762a91f5f5bca41dbf721d0d4eb1d10d GIT binary patch literal 1140 zcmX9-Z)h8J7=HWrvelYurh#5r+=2^u+oGK9O%J`b*O8W!UfFevGlg?KwhY5|8z+Ps z#?7WBlrT@sT!gUYLtqhaG-YLEnh&Q-S_vpy*{$?ebanjb-%!}Vm-vDTX@wX=SHOH2gme$tRwzjtR_V$jB zj?T_b48v?T+onyMoNl+9B)u%l2m&Wb0Y#Cc(P%Q6&gJsO;+kdE8x7J63=KTj6$m&& zAy+u!jm7C?iqGc6f}xbmc%_-9&Yb5=poNTScYF1{WUi9H0 z5)fuU6R@m|8F70#>u8j4RP&;Sh#qPP72Njp|&YAY@8n-U_-X-0O4G0>MdCKxX9_A4`kryqq`H zqLnaf*~*4tXTTwVGYGB-cr=VkJAFA%z+hz4AFn8xx>iI>JmHWiJnSRlemX0$1w}BU zQaPzq^=RElZkRf%7VQqoL-_l-AWq6bip;8Q48F*|w1sn^09t%lMHB2NlUp6BZ3Q^P4Yc&%! zx$q#6kuFAa@)?(y_sABl)dPAXT-ZpK9_A~kT=zJDa$!ENJ;1m^0vQQ%ni|R^)PkNc zi+ar}qDF<{IFtuu0YXhLVokayz@w2=wMwOuPoR`aY#<7u!2A2h1larMFGrjG_R-%a-26q!+VxRjXJO!(PdoJK1?BKnV*2XY_?6t@Z4;JleQ03!t;H{n zPu~A|<{&-y-oOWr^?_G+|9CTXrg!M($1|Oi_xiu;ow#(&cKMr#V>~K#zjHpcXJyN| xj)VUu9w|q5AG_v#ed0!cU%3DCu=?Lfks53@0Nc6srKWT+x^HZFVd&kN{{deu>yrQg literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/dive_loop_45_right_4_3.png b/resources/g2/track/raptor/dive_loop_45_right_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8a834884b8c71ba9a5b9109d975beb479f8ae097 GIT binary patch literal 1144 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/flat_to_steep_up_diag_1_2.png b/resources/g2/track/raptor/flat_to_steep_up_diag_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f7e40fe3f9cfbd5eb6066c2d8092d7314a4e1590 GIT binary patch literal 1049 zcmX9-e~8<36o26;Bu!I1&qc#t4a2Z3yIyyj%}x-6!y!!p$ATzCGMQK|hvy4a zvBX*xu~wHGp4RqDy?&J^u{0Y|g}9!^O@**EddJ{BE8VWEL8~|js{3Ixl>nK9JO`$P z)l|$YMZ2}wu$@2y3Jqm+U?S8^0*C-IhN;o0o=BJkQDxa3QEX+iU0vU^ZRB|gI+o<( zl!&u3ky6RDPAev>Rd~Y@$_=U7mfawWGYKk{WF=Bin2gG+MX_khwyV0n-VDnApw`>> zq8!8|h-U#W0AXT`9Z%JXjK`^dy42IEq1i+`A{kSdL_S59(riuP8=B-BO4ri*juCp+ zzVD!ZGa6$EGEFmCj?YU{Nl_~Ke7#iiY}Ai~US> zkZ*)$XILK`boWt&j7FJwJcTDEl2TY!6U3rCT2`o+%B@;GX!^q*2eN=^QdF05Ge=em zoKutMNKm;TK zQsbyZqpFD99BLO)P=yDBh8bs=Z|qy`1Gk5|ArS)x$5K=@!{IrJE@TB$&sEEM!zuesXAm^eu*V1jasdT^ z&?t-INbVsLMxoO0GZpJ0w04`%WTae9DHK$iG8oF@Xosggf$E6lAe}@qj&uT5XykIp z7e>d=JRSM_!4JH>z9zxaAGcl`k=E++iH%cR-~D)E+<10oatWc`k9tphoOx`aa_5Uk z@q)ei{2RBw`T6`d{`gU9{p_XPtI%F}`2rdKclz4YJDoqb&bBY!y!p$!!re;*W50gx z@Tu_d%5NvXKYrUj`rhT%wYATll=}zUMmB$gd%?Q6Ar5olU32kw_x$D5@Jc`9U0>+j z5DIsmd-PXn@7S@c_dh@W>DPbNUi$Xc``VsY%!T+OGk@=g#=UU!pD#c8>8;IwS9Z6_ rXRJlqf3f!F^xEF7vBSbEgZU43ufP9DWA4bv60EMQEq`_L+=u@IKwQtr literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/flat_to_steep_up_diag_1_3.png b/resources/g2/track/raptor/flat_to_steep_up_diag_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3c78b4c5ba53147494c21e8bc9a00649255d53e8 GIT binary patch literal 1064 zcmX9-Ux?du9RJ?m-0e1t77f^kJ`{`+v|x~k;mpn4$Q|)6$K{|89cCI>nH}UIa}|0T zwX$+660x#8^q~)VC=#{c;YF;jgY2wWW*9{)3tOjUmh-mdyo$Hu)Sn%L&-eS~^YZ=h z;q(2jEiLj#4n2Md0FKPh%`Ok-%%GTwkwO1wdG#*92rRw4a%@0{hK7cRhet+6Mn^}- z#>U3S$1x0>n3$NHoWx_X7)8Z7j+G=qQIeXb=5jgHELW?J>$ZG9==Z5OundU8R5BS( zr=yu{JYQhUl31zAwYt{y3Z1USkywJ6QUzR3L=A-~Yt(vFuIKMRU%nuRWDKKXjWjjXk8@33LVMtWFf&+6t1R8UQTJ7 zTG!46b#u?NQP&NHX@X2pbc*FNl2lNXQYKR^6zb)&=Qy2KD+mGv5fum%qbeb;7Ll4{ zs>9{GNvoHs1xBl1?H#oD&=eU8(KyaWV-gux7)BGsygXQztrm)nO4WD0euo8Fz%(hO z%TXguma?p!mujU{!`9pNQm^gy``d^GNC0R627nFF0O(?X1`s)v)sSr=zbz7=Qcz^U z;lURHNq|%w6)0qh$VsDS9{CpB51s~rgM^5s6NUIQxpvQYQNKeA z0&)QPfY2a|{6OvjBDrj-+oen918B`AmrP3Ow35xLR6Iw=O_s7bsxHJ^BH2sCkQ_xi zfl3r|SmX(V^V0Km)J*EetbdDYi&IOzLdAAjEq19H zjhPqDt_qH)L}D;q7}*Np=~QUZvBN$1QW5F9ja_dSO`SZorA&g!z+8k-!`3!d1o&Y+ z?sg<ahS@mokz`2Ii6A_v>UKIkc-~_iqoN?W@kAt8l@d%^wi(^y ztWa=PlAkKeTuXLlR!=FOWaWvVF^a_-wq!5VMQp~IomF00FRNyKd@67e#u^Y)pj@Cs zjE@OSgUXC8o}9}}pbKkD${nrptwZFTQok*trz%CK5+Cz4qjUUJ zl;)ZiSk`Jj-vmJs$5oac_xrYO5s)^}5yq`?DJQiZGd)U+laVy@ybbr=rg=U*p%H`Q zJVD6RL}OS>5FABanEf($6D+suO!295N zP$bY*Y-SPOoLPqQIv>a$q%b{|0c?&@^nSJ4MJyPaeh z+H7XIuFbJN&qgAbN?f6^dzESQ2{I|<(P+h?OhlE^A3y)u==wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/flat_to_steep_up_diag_2_3.png b/resources/g2/track/raptor/flat_to_steep_up_diag_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3f240a661b47e686247db1644a58c71959428a7b GIT binary patch literal 899 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/flat_to_steep_up_diag_3_3.png b/resources/g2/track/raptor/flat_to_steep_up_diag_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..76d7fcb7a212ba7ccb56a5e14c469e6c2e461a65 GIT binary patch literal 1121 zcmX9-Z)h8J7=F8?y>?wq+i0VUF2y)Qz157KdTcj$v)7n*r@h&$hMM7Z9GI~B#0WBh81vq8=C_xS(YO2^hAURLJBQoy+h(#F1TA)&u7jT$gXjJC<$d6J z-uL*vNq^7A%^LxrXJUM8s#W*2g6g!i^6jake*#!w-*eNx*4Wn8wqe5ti^XEKTHD*( zJ32Zr4D0Od?CR=rxZQ4o@G=a|^Qx^t!WI71*mR`b;JTLRrF+JVp(BIsX#d|nJe+SsjW41zY_!; zA~dKxmX)wl!dA)Jn`I}edr?zB>ncLJ8-N24Fif)9Vos;(@n{sa%yBEBP$d?-k;$M^ z$w}DVw8P7}D8b{G@IZ_ZRZ31XN{&qyd95rI%#e$8di`#S$61jKN{kfe;u#@RkP1dj zHqm(NKrD&#f8?gXg-l#$>vSnXjW+u zSWM<^F~OyV@pP2V#ra}7w33TeO6htHwfE9om2B-y&K~WjyG-Osd z4@d+gX(;%?B9V8Tab2zc_JEO)mT_d#)`S5 zq37zRj+#}HWl;f;2?({kh_~qO!l^{lwHldD-Gy8(Gr=Gq4vW#KM0gd_o1%#vLzGzW zDu>qtZX~!+%!ASdD$vMaTgOihcmH+g2i}^Ra3E?H5hg{Nd`)^3?f>E^Osp$hC4C1_u5v=v2Wb-J;dHm z9^bZq*Q3|0n@`wpeq|X=JlK2S#_r7E_u9=Z%3R+l>b*YW_+Zn#{b=9ykzJwZ|2Q#I z8N57l#;@BZ$opMIS9IuMd3Mx3s9-p191OLBALWKDRxzPk#cw*xomL fY{&hxx8^L_m;ZVH)}_2$l@i;IiP%S#Ny zdcEG&)fF)u4mpmMBvI28%Q76t_I*E!7OPcS6x*t5jz^9KQ2~ujJDW1tA7Y8YbfIr6gr`%XMK2ug-k0)7->mFvJ*}(w)D$uaCIb@@LJeEmSRUZJ z<>0s>QO%;Gi5^0PiXngsU}Bh!;~q(dG#v}Vy{fK9qn+oyUMx_aliXk^60AxICN0~H z?r~NqICIHQlv$?58#Ap&6i>49P|z5~;tgA}r|NWJE>b%!y`q|x^>Tm8aS;X@5F?;m zphJvb5b}yPa?vjJVDH3DSfG2A8CX0yk(odjmX?$`TIpN6$T=i_lSijAL5Bh#@HC@y z{7950nig2rd@@-DLB3d&X}aHTo2EfP+CWDbx5TB4)Hcj$FHH|dTu-tl+#Xl;!|sIo z436^zAyY$*VJ$&$6m@F0%iL8kTQ65tQ6BdqmoRXddin}eAMsSK40NCRXODBw`6qI8TlQ&h$9 zCU_nc33L@3TZA`ZW}&={tt|7)GO6nlwO-^1IJYl`gc?(3O52qXHb!!sWT$BJknYj0 zp$EWIn9SmaNR2hl9VwwVj%Qw$%*rCEs{$SOyrQ5KPz4CJSxj5Iw;+9YemL;+=q;Sh zMluX-Jhoid=2)L+BauraE?3yC%GCN0nH2J9H0Mw%qEcy(pMS6a&zm3k>h4y9r+@wN zMJwo=>yKVM`O*6KzkctV4}Q4&`WGsH|FiDh{`YVH{QK4Y({6nG^M_a$e!9VD@4iA` Qwj*%!?DqQCk3awJe~@N(c>n+a literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/flat_to_steep_up_diag_4_2.png b/resources/g2/track/raptor/flat_to_steep_up_diag_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..89da8414eb5f12722106992a3e9977247dc50932 GIT binary patch literal 869 zcmX9-F^HsQ6n?w2yUyNlv6#Xm78X-jNDyLSVc}ie!z_mNSPv{L3<#NG3JXJ~5F(t# za2W7lI4q`^!eR;`Q*2>jVd23PQ&>zf2NqKdM8Xv&2$_T}{&*aG?|pnccwh0o_x9DD z{PfA!PXOTQ?e{nL9ba|zyx;5kSHph>06lp1!|RuwJUcr(KR@sFdKVWLmzS4US63K@ z_51zn>uX{(8gU#eNus7HmSs4O?fZTdE!XR`D0WrVv@OSiD1fRA3}ZN%P*azk1wyn? zS8FrNooyK$jkNOq-C4Y zJ2^ynVykSfBOr0&wWooCTS5)(|UL8(3F2Ya)VhofE zbcpdwLSEBGF50CY9Gtib3-q8eLyIS;G85>+%91iiD}8GpImg6r^5|41=vd%Go@R88 zAB)md(*ny{OsDH0$d}79O%JuJ`6yLMea?oVjI z;5bhZGBwf|))E9qQD%FLwOZjS>~5zQr9KwyvQ+d?m!F)HKxpzwksiQjHI1rr)c|_9?-s_ zhrm;q%;JVfO*GCOE1@@u=U$e~%Oa_(0<{NTQBVq~0))COW}V#^kiNS(9{EM|13>|^AG%df2YCoKR*7{ uiQ(PidZ}-yt96tQ{%e%k4XGJ%L+n0AYzkm1RoBshbp>5az literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/flat_to_steep_up_diag_4_3.png b/resources/g2/track/raptor/flat_to_steep_up_diag_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..cafb7476511886eec68b96ba2dc2723332412e7f GIT binary patch literal 922 zcmX9-L5SmI82x5CGnr{!awu%U9HLanV2~g=WFd#RX4cFYovf3EA~|FsU=KOukcBD% z16Bx9mLLTy^ibF=RtQ*dz#su5M(CkRScj!Tz#htOg*_ArYh~x~n`PmB-^aVWcX;pn z;^wJzrTTIe0Ir-IADxwVublVyE9L(F?xTkQ6}b7{ts5oX+S=OQ-mX+CJ3BkOySsaP zdl-i8@9!TR95kBECd)FSD5$Dz7@BQc-EMa<7)>TonqK7jx+qu%1RfN*rfGH4Bs&h{ z_4vV18Bg>$v1eItu?$2SYwi=#o_ED$(3(xGeCn<8V6#po0(2TW0{AL6 zwy>m!&&Ty*MxYgg3LRbg2&GK`1wh9z3&&l8@F^peKH!MBq7*(Q)n;> z$?KG4(JhxXeBK_4-B9kwYB1BIyiIZhBQ<%ImJLp`M9WjWkv@v7D09=ipRLA=O@a$h zSE11c(gDiHxKTrzP+B5bS*y3OgSDTcbA_%O9MO^JUW*?aVr;8f*O(9NW!POOgH0Bq zWs281if*x7TM#>{+B1w{r!(pGlF=xOqQ%9`LiCneuFygqIW#MX-q0)$GLxHG{qzhy5%KS9ywx1t-fW0+a(nWfop(_X0%M z87`OHaPR{5Y$j@&YMO@QSS-`!n1R5CBAdv}g+i}dO{9~^rO=Q?k$^I}EI;=~?VsmA zaOdn)g|{C6`B6!ZPmZqNI{fnC?{8M&m6yZ^f1zKWD);W5-M{wZ-?u;h;ksFTE&Y}= ze|)1o;GZ5IwvS)?;Prb~<&rTQ=Dy<2L+$&J&a J@7})s+5b*Diwgh% literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/steep_to_flat_up_diag_1_1.png b/resources/g2/track/raptor/steep_to_flat_up_diag_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4f3d08defc7ed85b2393f95a6dd300af214eb986 GIT binary patch literal 1061 zcmX9-Ux?du9RK!uce&en6jrogzznJe45MPyJmfH&xzRhayNt`RJXEPH!#)(rAWBcF z7g!nP$V0@+suZcvhdu<>LD4?cUXYBdtPgpp(n%)Wtga8o=()n3t~-Bb3_jmKpO^24 zFQ4ys=fZk?@x+TK0AO)-WqHG|XZ%>23;OxKeEuRp5H6hGJm=FuATTvG6$}Qar>AFT zW@cw+F$|lVo134Xk3^$UnvU^2CrN^$Bs5LU<#NShxmIg9PS^8B<1rlrjs;OzNF>7P zG?B^1@&;QhiPc)NX=@$V=npD9g~{xKDnxXdFcq?_(e)f}7v)Y(_1gKNS2-FvaU7Bq zWH>M-tg2$R5$aXL;|`97F*Hu1iHVRC1rPy}7^a3oI*ywpSz+0_D7I6np04kg%gDBI zIvnL9F_B=CWL%|WomNa%EAcr?C^V%?C)w~)1cS%oQC6Y^g-NKqniuosWVxX>T;1^s z?y%ZFvO^q%C5WVe$O36%OgR#-kqMhqUD@bsm67S7x=4i;2G7JPLuRWA-_#^Gr}T>2 zz{-v6;*o2iffEWdBqh^KisLhqWGG50lc^boT`s$gM!(w~jYbG?704n+S3`UgmpW9c z&*uk;$}rO$ncZ=1IO!ds1u7I`B9S-|m8h7)vYH^~lm4)5%_y|1HP3O!eGZZWrb!_^ zNtkJ>l;y0v)GVdimfo{V!=5u9?;{RC2G9UZ01KcEFu(x$5P6idMM(nb zBr4IU!68@hkDocc@b}Xn_;_Pof-?{9eCU(z>hjsmm7U+OvoG8_^<40CWSzb{>wR?R z3p2f_8f)B_H=jRAA5J^*SL@=-_r6)VcdKq~z4zm5R|c)XwzzOs9X`>tglZhWe&)pmaUp4yH){B}*1p4`|YUf*^8`RTfPbLm>~ z;FBkNTdmLVHhDj>bzC3+ATI54a&hy&H@4^d&i+HM{!XjqKAx}j-@n$oay#_%#6I}r zvHH^S+l6C1d%Pa_lbboEUfveq(cUB7Z@=OI{dMr>gUjV#{Pke<-1_p3cR#rLKiGuX A3IG5A literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/steep_to_flat_up_diag_1_2.png b/resources/g2/track/raptor/steep_to_flat_up_diag_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5a26edb65a9ec9ef12e860c123e517e61945109c GIT binary patch literal 1064 zcmX9-Z)h8J7=HWr(#0Afx`QQpAEJ$L%u`N0@z&nzwPfYAS9X=P@H@?6grbmSNFY^C7xcer61w_kDT3ybll0 z`>rj_hsO6E*araPb4O;5_UGY#-R~Oe_d9?1?jwL9Sa@o2woeBJ1_lQQhlYlRhlfW- zMn*?RF${CLTw`Nncpwm)C9+R4P}ib;s#+yEFwH3!>nTM7*&W z5l>L5G@H$dg_3Mlw3?l6woIPH!mL{r@MM@Ulwe+?*LA*<4cAJlvzcl;X0KBX`9LNi z&VeCe1r@8LJ&l65Tl1kdg}O4@H4v%>07L*8!&Hwa>GK)Epvki9qPQ82Hj>Hhd>&OQ zKH3}La7rXtIT%vOaFSLGR?G2vQOH=5S(D37lwf>RD8NdjpfC}YS5smtFXzi@*-loS zjNL9Ydle4{UJ39h5D5qx7?a0CrC_AOsdhNs)Xa`iMe8EzRTy79M5e=RLE$Y;vUR1A z)mlZpQ_1%1B5GAVUM5I}X(r0?aY;%mN-iERrPGys-Y%D$^?Ik%LEuv%n8oOVhqruE zjf^(=R4Zb(<5tJ0cT4TvMi043kB7nW5D}0_N?}<|5L0r0S)!EAY!*sR)$TSqkOfSW zJV}`_Vq`AC6;qOxi*6Q^jY_WFsCK*Chyw@%XaEL45nvObg#qeAWbNa3h5h=&uGw|;={+Zv z>F5KePx;xMfp@5me)ZWGF0Sl9ak)0}bpEmIj=V`b0=JAP%)upj3C-k+u zu(RwX=2B_g|M}%>SNE0=PMwaaZy)o0`%wDB?*~@au>ZFH{U-kMjTisE8#B&({GUzz zXr5d=^w*gl=Qr^`DgT2PfBWFZ*50G?*U#O{IjjYpyzQ=h!| SsBN}(2DsGC2CG{N39u`W4TdBk%)oov`BPO`=Mgc z2xSxrUO!amuwa}8<1Bh((M5<7-J#tPVQz5_02Z>3Egy^KQdGCbrlS7V1E&dqDOfwYz7o-iiHXU{$*HNS>FMd2nVCa} z4q+G;i^XPVXYo`jMbl}X=Ojr`l)R>?hGEp}&34=I{oODejz)AEI2J@RRPy?NmC)48og!kUOm@otKoKK5L)A*pCLe|pu~YG zVJ#K&s_||sG3pR#kVYdJ9heCDDF6{b#xOM=*9pQTNsDE-L~*-N=<53QW)pcHK_^li zo)(j=OlDLnr_+kbY7O47g_xcu$0cZdwfDNz>(8mBp5P4MAkZqx`E0UnnP~*VKKqvx| z0I4{t(#R5#Q$(E#3N5%1JOcs`IT0%=xL%@aW~OB+u4@E=Js1Qi(jp2#m*+VX7pM??V96%u; z6lGC~vZ^hUMd!qa#^L*29vIHw9V6=klq!kK`w>lB+^OLppnC& zK!}c?xqJSv8$a;ku~i9{e%;@Q$OqZwN7nCu^X%q#w;1=vR{ljY@l!9h*ShVVbNkP3 zIJJ{Myy4IEKRNp4AAIjZV)4UGY;XBKeDB+X%Xcw*G-}!v}w2}JsVz9ned-9!A3)v_3f5~=Fdeb}Z&sXCo{(0v2FR;I_v_96) SU1~(GA-l4={L!ONz5YLSO~4BP literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/steep_to_flat_up_diag_2_1.png b/resources/g2/track/raptor/steep_to_flat_up_diag_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..251476d3532a8d2dc3c050cb22b09314a37e9ff8 GIT binary patch literal 860 zcmX9-F^HpR6n-=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/steep_to_flat_up_diag_2_2.png b/resources/g2/track/raptor/steep_to_flat_up_diag_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..251476d3532a8d2dc3c050cb22b09314a37e9ff8 GIT binary patch literal 860 zcmX9-F^HpR6n-=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/steep_to_flat_up_diag_2_3.png b/resources/g2/track/raptor/steep_to_flat_up_diag_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..66f30a8b96db1bdc55241532c9ff037fda9b5e6b GIT binary patch literal 894 zcmX9-F^HsQ6n?w2yUyOQSPW#2SV)*chzTxONRVI>_b`iLJe(aTwH&7^`x0+O?}XAHT{qD!+!x<@c65zj~aS(baZ@t+-kK>PEJlwPtVTI zFbr$A+vn%!y?(#XvWzGSsw$hNZrj#qGzx-nu}JcKU6%X0W*HE8P~?uTcZWmLahdUi z4`#}IVWgS8Dkj@qB+{71cPzQ*X{2vbq0Qco#4ONO3#(j?t1>$5bBO?h21fv2#pV{4 zP4LaUTdxRIF{n1sy^m1d2T%YE46|_DBM6_OBA&lhl;vQs@w~e*L|I0#-M-Lc6p}Y6 z$)YunHGSTmiKAGarfRe@l5#+D1S9o%m6lCTw?u2Kj6)+#tfcVra#~dL?IFVj=&H~g z0O54ckyVS1&1O=yBzOw z6s@t`KoA{OotWm#aTb$F7KTNVY}f1kevg2#fC?~nj*BUwuIRy59Pjj~a?-uOt{2t) z=72ghj&r@9MD|shF?rsWm9fz*a~G58a=s|@qTUK%$e69-o4nf>Hsb0d7Eff%{7-Hw|D z?_jT1qOPmMq3OC7%ZxZC5ZG8`GnrW{bfxu?K_ZVrGZrNRD&*$)xsN;ly#0Z1pWLYM z+24PD(~ys@uRed;{=t0x=A!*O``_#H6XD@^Z;qdbqJRABPk-?bFMs^hdGE!uSD#!0 Z-2MF9tFJG=Z(Ieqespv7%NNg{{|{PXd0_wm literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/steep_to_flat_up_diag_3_1.png b/resources/g2/track/raptor/steep_to_flat_up_diag_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..374d1edd6b928591395ca8b4fa2db93aef9fc950 GIT binary patch literal 1125 zcmX9-Z)h8J7=GKPyJYQ1+iYfAz#EO@#8a|)lbd94bGMmxH+x-gGj3sK?y8yIhZAoY zM+OH=XI6tA7+8e3Wf*F}P$Le!K`JTUT%7rEg(8_A5=Ul(3_K;ng2nyJ7(DO4FYg1- z^S-l_6QK?3x2^|(4dY|`r@D1-H}*LDy7^A{(8~aQFnQ?6f$rGT)6?7A+t=6Ua5(z= z``4{ohhdo0>2$eVUccW@Q2~}^1c4L9h@!~JWHOu0m&>|gEL)b{=}-Y+g1~bFk%&i< z@OUDSN(Zw!zF3Y{s!H8VH(Ldk#KOS=ne(b)ToZ}BLS0L;)oi$4maST%RcB?+0Mi7Ny@EXt8VzGv*-pl7v zwd$ihe#RT%@nDn)$z)iiL@lV~*kp;zRD?o3s#`If_60)zpg?jW9g$f%#i#Poye{je zYFHVwU2Lva-3)jH@Wud70HI-Y-Ww_tkt!pb;dE0e*qVW^@uWwjeen>P4hM@OTTuiv zDK@f7tCX~>*;TWIT87(06J(g8V+6 z0GWae19}K79*_V?_M$X}3Ov#!R8JwR01u6)fny=eW0L4q<77q)6$@gek~GayyKSN_ zmoElXVt~=Sd;yQ@glq*hJ5uVzE34W1n%+bWoA3aQW1)aM!r+oXC1RYWN`;JCDP>Hf z)V2)NY0?~rbU+p$)b%3OrF#TlGLdVw=v?*@lzN?wL-7#y&c~ttSlaVZg_EScE_0;)X)=G?|!t~ z{xSVS|BmsQKSn1{3XUzIe=lA?JA8X|pL65c*=^qr4!?Tnn_r$!>`Z0vejGVm+dTU8 z!gTGE`7h3Gy>)r0w)px!j%h- i&5jLAuF>BX-P6Bz{#yGf^=wxw7(Xzv|I2+R&;JivWZc34 literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/steep_to_flat_up_diag_3_2.png b/resources/g2/track/raptor/steep_to_flat_up_diag_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..07931052a530db4b3272494df34d434a45db6051 GIT binary patch literal 1088 zcmX9;Z)h8J7=HWr`qxDz7 zYinz7Z^tmKqobpry9vTe(-g-sf)JD>F&2xZQki_dpzGVFS+^|03zQF7raKt4 zhr_N&)EiIuQfW4q=Zl(DG7^<)md3GwuUljsa=@hso{U7S#Aq!QDCI?SGhQ>Zdv)FK z1RjS71qz4dL`+NA$~n7La-y0SSv=ZT5YpWMEC7#TqRl2dor=ek_4!sG zFl60K8ns+yPqR^A=fDvHR}?%7MrIuTyeFtpq7g_`q-JL$m#1R0{}2*)J^Asvb26A3MoF$#ss_IABqN8l8}lfsCc zjV?O55+171@oF$zixlh1ww15#m-kRNZnKdNhu`JqaIfI=Nemn38_S~kL~=8iH+93R zP{1>o#MxxtrG)Wxlv3kdF&)}e<+7Hpm37P7MHD~)Kmt$zRDex@Dh8+lmPSztsaa%} zSr3Q=Bq=EP!DIn(fJ6sM5Gc!{LKv0e$jril@gy)b1XwIAIOGVPRQ$QDP%Op_L#@>e z)X;K#3*t&o0N-c z($LkKsUxdGG7KsJG6A867x9MN6F6hhbhS#RQ%@k3N^~&Dg~LKLDiYop=}l3DN)sC6 z-DdGxz>Rnpl07I*paO*qrV)Pf#qP%kH}Jv47zcwpzrE8Sk4A@HyEJlb&C*Z_ZG zdVOquYTUorzg+pR|BsEq_q&d2Pyc*Kp7^z0UA*I#rJ2|;LdyJnqji9_0Kog;XxHUx1pUMaCIO23K$(88@m1a^ws|Xb63yO literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/steep_to_flat_up_diag_3_3.png b/resources/g2/track/raptor/steep_to_flat_up_diag_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5c67bcb43d084296aedfea7a45b6413e4cbfb78b GIT binary patch literal 1028 zcmX9-afsV=6n?i}FTFdDx>YDFx}Fw^N091;5jA3NmpgK|Xmc#5l~sr=%!(EAM;!g5 zLZ(%_t-2r`gsn=EAQd8Zc+7%TGN@3nj=*(TF+wM0mTitQ`bUxb<7dX;d++i6^S%$h z_s(u5`GvWIa{#cgxv_T4pDTVn918gT^XJdv00G!~d3)WbQ&Us>_U#J<0@Kse!C-J^ zW(LEsP$)DzI~$G1;}n(PI98GbMM-O#S|}7uvs$k=TCJ|iBYvM*Tkg`ndx)I zLE0MTnj@n-t`GNm6EshT!*n#t$Kn#1P#8uN#G>pk%hyZgcCGHU+;N`;S->sk-L{}t-sW_5jNGDK* zLJbzVf`9z<)ART4|G<04k`k=^^T%60`F?Zl$o6xeeZ8AL&{_-yw3!wsOF!Sh`SwGvVvs_Lhq{u=C+aaPQChomh)M+LkO zqytodaWh<6P3vVED;bEP!o)ux5Xu)uIc_x^!IvL43}lFsTRfE z_JCS+yUpRaM0Qo0F?rsW72l}EoW*FonlJJ+t9AkyGG?o7*C2xdJ#~c0SC`ZNDss2U zwAiLq^$ZCB8h{ND07L*QfISANh9V-zMp20JtwMpt!dQS zyhGcP>HtS#64TZNa-gzKUk=_uu&7d8haP(_ikMcYgLRUi5y&&K^Ixe&_9r?~mU- rw8s7qCqH@L-T&$@?DrpAg8KsCv!|bje~fQ#Y9+XQaMioH|M;7i?Jt5c literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/steep_to_flat_up_diag_4_2.png b/resources/g2/track/raptor/steep_to_flat_up_diag_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..39de02f4ae53d66e0c557ef7474ba0af2bcb9baf GIT binary patch literal 869 zcmX9-F^HpR6n-6z@8j{{eZ}{_kMHi} z=g+=>1^~}*-`?DJeAU(4ey{6)zkK)!pa<`MeE+5!&(6-y&(C|k-o?em<>lqo)fI+e z{eJ)Y`kEMxMjXdVlBj8lWf_iR`@SDV%k?@fid|JTZOgGB3ZNns9`G`%L9DB z8n#;!)hudF^b{ggi~v*s6T@sA_ee6N=~xgRRdq8S?>+DHa*6VsO5fT?&N14 zIL;G#wFJRY)S1~GbJxLqvszb0*&akN70l6a&!oZ$vv9>^re%xqCh_+9qTUy6 z`x%J+@_Ra*4#{3cFL8S|1^kLLQA497;u0D&6z*F9u(}X5iuePJ@@9{_27O t!`quz@4x%a`sd$4|K}fmy&nbV@aKQOe|Yh5v+CAx`{wTEkJlf5`5z2qZS(*D literal 0 HcmV?d00001 diff --git a/resources/g2/track/raptor/steep_to_flat_up_diag_4_3.png b/resources/g2/track/raptor/steep_to_flat_up_diag_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..4d57c5bf00ed5bb7c65e1d355437645ecbb47322 GIT binary patch literal 868 zcmX9-F^HsQ6n?w2yUyNl2${kVAr@0uNDxkP5-d#O9%eDD$9loS!hn#0Okv@{a0n4% zF$4n^L$H`)3X3U(OtFQ9g@wfgrm&b|0v1yY#NrAG7L#KS{&*aG?|pnccwh0o_uI=m z`RS9-o&dnp+wX4fJHG1b%YLuxKfM3>4L}cGe*fx4C(q8#&d<+#z23#e#pUJY)zuY- zVf}vp`uds}jYb^DN|LB)ie(v&WBa}zMa%U%Es9-LHEqkWAPS%=1H%|jCe+krXMqqc z)YaO|a%Woxhhr=;m@W)#h46GLwCJV7J@`@{>D#qkZDw^9pPE7@!DL`6La1RY8_NTH zzZ$k%64fkfP4pNdREz*r029M(9QQ~vr0G}?9#nNR9`8Nx?Q)6ooaBZhkziFyFlpIl zbdR$_!C6RtqRcZb-kNDOrg)N-M}o#E7H`;+JyT~(bD7#{=@r$ytXGFqj*BqVfEWYi z0v%%fl91Q5k&AYz2L~r^!U8?0%+TV=smuhru(G7g(MsRiN6s;#|2|5<|kf#}) zj)wIB}7SriE2=e8!Ow+?|*E9_R(gr%hxD_sCq_$I^H5&JR+jl?nbdWOIxlhzoI4OhLX9airR_=x8zX6_*(usSrU$fd z=ppbFCbPI9QWK4H$4cl;;<=Y4^Rh_lszB|5R}_>2ssN!bi&cl6vH{ZPa^bhO5cZ2>f&wjsu9m8MGpFjJYzx=A3!tIN@n?Jw(@z?(W{>5w= literal 0 HcmV?d00001 diff --git a/src/openrct2-ui/ride/Construction.h b/src/openrct2-ui/ride/Construction.h index 14a732369c..519704e59f 100644 --- a/src/openrct2-ui/ride/Construction.h +++ b/src/openrct2-ui/ride/Construction.h @@ -132,6 +132,10 @@ namespace OpenRCT2 TrackElemType::LeftLargeZeroGRollDown, TrackElemType::RightLargeZeroGRollUp, TrackElemType::RightLargeZeroGRollDown, + TrackElemType::LeftEighthDiveLoopUpToOrthogonal, + TrackElemType::LeftEighthDiveLoopDownToDiag, + TrackElemType::RightEighthDiveLoopUpToOrthogonal, + TrackElemType::RightEighthDiveLoopDownToDiag, TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp, TrackElemType::LeftFlyerLargeHalfLoopInvertedDown, TrackElemType::LeftFlyerLargeHalfLoopInvertedUp, @@ -144,7 +148,7 @@ namespace OpenRCT2 constexpr size_t DropdownLength = DropdownOrder.size(); // Update the magic number with the current number of track elements to silence - static_assert(EnumValue(TrackElemType::Count) == 341, "Reminder to add new track element to special dropdown list"); + static_assert(EnumValue(TrackElemType::Count) == 349, "Reminder to add new track element to special dropdown list"); constexpr bool TrackPieceDirectionIsDiagonal(const uint8_t direction) { diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 4e77ccb561..518e05e6c5 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -527,7 +527,7 @@ namespace OpenRCT2::Ui::Windows { case TrackPitch::None: if (_currentlySelectedTrack != TrackCurve::None - || (IsTrackEnabled(TrackGroup::slopeSteepLong) + || (IsTrackEnabled(TrackGroup::slopeSteepLong) && !IsTrackEnabled(TrackGroup::diagSlopeSteepLong) && TrackPieceDirectionIsDiagonal(_currentTrackPieceDirection))) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP) | (1uLL << WIDX_SLOPE_UP_STEEP); @@ -541,7 +541,9 @@ namespace OpenRCT2::Ui::Windows if (!IsTrackEnabled(TrackGroup::flatToSteepSlope) && !( IsTrackEnabled(TrackGroup::slopeSteepLong) - && !TrackPieceDirectionIsDiagonal(_currentTrackPieceDirection))) + && !( + TrackPieceDirectionIsDiagonal(_currentTrackPieceDirection) + && !IsTrackEnabled(TrackGroup::diagSlopeSteepLong)))) { disabledWidgets |= (1uLL << WIDX_LEVEL); } @@ -554,7 +556,9 @@ namespace OpenRCT2::Ui::Windows if (!IsTrackEnabled(TrackGroup::flatToSteepSlope) && !( IsTrackEnabled(TrackGroup::slopeSteepLong) - && !TrackPieceDirectionIsDiagonal(_currentTrackPieceDirection))) + && !( + TrackPieceDirectionIsDiagonal(_currentTrackPieceDirection) + && !IsTrackEnabled(TrackGroup::diagSlopeSteepLong)))) { disabledWidgets |= (1uLL << WIDX_LEVEL); } @@ -566,7 +570,8 @@ namespace OpenRCT2::Ui::Windows } if (_previousTrackPitchEnd == TrackPitch::None) { - if (!IsTrackEnabled(TrackGroup::flatToSteepSlope) && !IsTrackEnabled(TrackGroup::slopeSteepLong)) + if (!IsTrackEnabled(TrackGroup::flatToSteepSlope) && !IsTrackEnabled(TrackGroup::slopeSteepLong) + && !IsTrackEnabled(TrackGroup::diagSlopeSteepLong)) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP) | (1uLL << WIDX_SLOPE_UP_STEEP); } @@ -4929,11 +4934,30 @@ namespace OpenRCT2::Ui::Windows trackType = TrackElemType::Down60ToFlatLongBase; break; + default: + break; + } + } + + if (IsTrackEnabled(TrackGroup::diagSlopeSteepLong)) + { + switch (trackType) + { case TrackElemType::DiagFlatToUp60: + trackType = TrackElemType::DiagFlatToUp60LongBase; + break; + case TrackElemType::DiagUp60ToFlat: + trackType = TrackElemType::DiagUp60ToFlatLongBase; + break; + case TrackElemType::DiagFlatToDown60: + trackType = TrackElemType::DiagFlatToDown60LongBase; + break; + case TrackElemType::DiagDown60ToFlat: - return true; + trackType = TrackElemType::DiagDown60ToFlatLongBase; + break; default: break; diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index 181130dcad..d2f48602e5 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -1721,6 +1721,9 @@ enum : StringId STR_AT_LEAST_ONE_ENTERTAINER_PEEP_ANIMATIONS_OBJECT_MUST_BE_SELECTED = 6723, STR_OBJECT_SELECTION_SCENARIO_TEXTS = 6724, + STR_DIVE_LOOP_LEFT = 6727, + STR_DIVE_LOOP_RIGHT = 6728, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings }; diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index 02bc11ad11..f7ef26be86 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -50,7 +50,7 @@ using namespace OpenRCT2; // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -constexpr uint8_t kNetworkStreamVersion = 1; +constexpr uint8_t kNetworkStreamVersion = 2; const std::string kNetworkStreamID = std::string(OPENRCT2_VERSION) + "-" + std::to_string(kNetworkStreamVersion); diff --git a/src/openrct2/object/RideObject.cpp b/src/openrct2/object/RideObject.cpp index 98855a6cba..3c2fc8eb21 100644 --- a/src/openrct2/object/RideObject.cpp +++ b/src/openrct2/object/RideObject.cpp @@ -55,7 +55,7 @@ using namespace OpenRCT2::Numerics; * - curvedLiftHillUp and curvedLiftHillDown are 1 (normally would be combined, but aren't due to RCT2) */ static const uint8_t SpriteGroupMultiplier[EnumValue(SpriteGroupType::Count)] = { - 1, 2, 2, 2, 2, 2, 2, 10, 1, 2, 2, 2, 2, 2, 2, 2, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 12, 4, 4, 4, 4, 4, 20, 3, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 10, 1, 2, 2, 2, 2, 2, 2, 2, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 12, 4, 4, 4, 4, 4, 4, 4, 4, 20, 3, 1, 1, }; static_assert(std::size(SpriteGroupMultiplier) == EnumValue(SpriteGroupType::Count)); diff --git a/src/openrct2/paint/track/coaster/CorkscrewRollerCoaster.cpp b/src/openrct2/paint/track/coaster/CorkscrewRollerCoaster.cpp index 82dc2b7f63..0fcb05bf18 100644 --- a/src/openrct2/paint/track/coaster/CorkscrewRollerCoaster.cpp +++ b/src/openrct2/paint/track/coaster/CorkscrewRollerCoaster.cpp @@ -19382,6 +19382,1402 @@ static void CorkscrewRCTrackRightLargeZeroGRollDown( session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); } +static void CorkscrewRCTrackDiagFlatTo60DegUpLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 9)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 32); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 0)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 6)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 3)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 10)), + { -16, -16, height }, { { -20, -20, height + 8 }, { 24, 24, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 1)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 7)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 13, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 4)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 13, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 13, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 11)), + { -16, -16, height }, { { -16, -16, height + 32 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 13, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 2)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 8)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 21, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 5)), + { -16, -16, height }, { { -16, -16, height + 80 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 21, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 21, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 21, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 136); + break; + } +} + +static void CorkscrewRCTrackDiag60DegUpToFlatLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 21)), + { -16, -16, height }, { { -8, -8, height + 0 }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 12)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 18)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 30, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 15)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 30, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 30, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 22)), + { -16, -16, height }, { { -8, -8, height + 56 }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 30, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 13)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 19)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 12, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 16)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 12, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 12, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 23)), + { -16, -16, height }, { { -16, -16, height + 24 }, { 24, 24, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 12, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 14)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 20)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 5, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 17)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 5, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 5, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 5, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void CorkscrewRCTrackDiagFlatTo60DegDownLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 17)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 20)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 14)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 26, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 23)), + { -16, -16, height }, { { -16, -16, height + 24 }, { 24, 24, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 26, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 26, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 16)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 26, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 19)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 13)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 60, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 22)), + { -16, -16, height }, { { -8, -8, height + 56 }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 60, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 60, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 15)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 60, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 18)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 12)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 16, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 21)), + { -16, -16, height }, { { -8, -8, height + 0 }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 16, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 16, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 16, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + } +} + +static void CorkscrewRCTrackDiag60DegDownToFlatLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 5)), + { -16, -16, height }, { { -16, -16, height + 80 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 136); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 8)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 2)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 40, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 11)), + { -16, -16, height }, { { -16, -16, height + 32 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 40, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 40, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 4)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 40, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 7)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 1)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 14, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 10)), + { -16, -16, height }, { { -8, -8, height + 8 }, { 24, 24, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 14, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 14, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 3)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 14, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 6)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 0)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 9)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 32); + break; + } +} + +static void CorkscrewRCTrackLeftEighthDiveLoopUpToOrthogonal( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 4)), + { -16, -16, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 12)), + { -16, -16, height }, { { 0, 0, height + -8 }, { 32, 32, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 0)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 8)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 1)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 6, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 5)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 6, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 9)), + { -16, -16, height }, { { 2, 2, height + 6 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 6, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 13)), + { -16, -16, height }, { { 2, 2, height + 12 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 6, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 2)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 6)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 10)), + { -16, -16, height }, { { 0, 0, height + 0 }, { 32, 1, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 14)), + { -16, -16, height }, { { 0, 6, height + 58 }, { 32, 20, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 80); + break; + case 5: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 3)), + { -16, -16, height }, { { 0, 6, height + 28 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 37, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 7)), + { -16, -16, height }, { { 0, 6, height + 28 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 37, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 11)), + { -16, -16, height }, { { 0, 6, height + 28 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 37, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 15)), + { -16, -16, height }, { { 0, 6, height + 28 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 37, session.SupportColours); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackRightEighthDiveLoopUpToOrthogonal( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 20)), + { -16, -16, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 28)), + { -16, -16, height }, { { 0, 0, height + -8 }, { 32, 32, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 24)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 16)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 17)), + { -16, -16, height }, { { 2, 2, height + 6 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 6, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 21)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 6, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 25)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 6, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 29)), + { -16, -16, height }, { { 2, 2, height + 12 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 6, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 18)), + { -16, -16, height }, { { 0, 0, height + 0 }, { 1, 32, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 22)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 26)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 30)), + { -16, -16, height }, { { 6, 0, height + 58 }, { 20, 32, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 80); + break; + case 5: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 19)), + { -16, -16, height }, { { 6, 0, height + 28 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 37, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 23)), + { -16, -16, height }, { { 6, 0, height + 28 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 37, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 27)), + { -16, -16, height }, { { 6, 0, height + 28 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 37, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 31)), + { -16, -16, height }, { { 6, 0, height + 28 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 37, session.SupportColours); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackLeftEighthDiveLoopDownToDiag( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightEighthDiveLoopUpToOrthogonal( + session, ride, 5 - trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightEighthDiveLoopToDownOrthogonal( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftEighthDiveLoopUpToOrthogonal( + session, ride, 5 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + TrackPaintFunction GetTrackPaintFunctionCorkscrewRC(OpenRCT2::TrackElemType trackType) { switch (trackType) @@ -19654,6 +21050,16 @@ TrackPaintFunction GetTrackPaintFunctionCorkscrewRC(OpenRCT2::TrackElemType trac case TrackElemType::DiagDown60ToFlat: return CorkscrewRCTrackDiag60DegDownToFlat; + // Diagonal large flat to steep + case TrackElemType::DiagFlatToUp60LongBase: + return CorkscrewRCTrackDiagFlatTo60DegUpLongBase; + case TrackElemType::DiagUp60ToFlatLongBase: + return CorkscrewRCTrackDiag60DegUpToFlatLongBase; + case TrackElemType::DiagFlatToDown60LongBase: + return CorkscrewRCTrackDiagFlatTo60DegDownLongBase; + case TrackElemType::DiagDown60ToFlatLongBase: + return CorkscrewRCTrackDiag60DegDownToFlatLongBase; + // Vertical slopes case TrackElemType::Up90: return CorkscrewRCTrack90DegUp; @@ -19926,6 +21332,16 @@ TrackPaintFunction GetTrackPaintFunctionCorkscrewRC(OpenRCT2::TrackElemType trac case TrackElemType::RightLargeZeroGRollDown: return CorkscrewRCTrackRightLargeZeroGRollDown; + // Dive loops + case TrackElemType::LeftEighthDiveLoopUpToOrthogonal: + return CorkscrewRCTrackLeftEighthDiveLoopUpToOrthogonal; + case TrackElemType::RightEighthDiveLoopUpToOrthogonal: + return CorkscrewRCTrackRightEighthDiveLoopUpToOrthogonal; + case TrackElemType::LeftEighthDiveLoopDownToDiag: + return CorkscrewRCTrackLeftEighthDiveLoopDownToDiag; + case TrackElemType::RightEighthDiveLoopDownToDiag: + return CorkscrewRCTrackRightEighthDiveLoopToDownOrthogonal; + default: return TrackPaintFunctionDummy; } diff --git a/src/openrct2/paint/track/coaster/LatticeTriangleTrack.cpp b/src/openrct2/paint/track/coaster/LatticeTriangleTrack.cpp index 17df6164f0..4a7ee96143 100644 --- a/src/openrct2/paint/track/coaster/LatticeTriangleTrack.cpp +++ b/src/openrct2/paint/track/coaster/LatticeTriangleTrack.cpp @@ -18433,6 +18433,1422 @@ static void LatticeTriangleTrackDiagBooster( TrackPaintUtilDiagTilesPaintExtra(session, 3, height, direction, trackSequence, images, supportType.metal); } +static void LatticeTriangleTrackDiagFlatTo60DegUpLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 9)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 32); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 0)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 6)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 3)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 10)), + { -16, -16, height }, { { -20, -20, height + 8 }, { 24, 24, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 1)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 7)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 11, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 4)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 11, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 11, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 11)), + { -16, -16, height }, { { -16, -16, height + 32 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 11, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 2)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 8)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 19, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 5)), + { -16, -16, height }, { { -16, -16, height + 80 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 19, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 19, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 19, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 136); + break; + } +} + +static void LatticeTriangleTrackDiag60DegUpToFlatLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 21)), + { -16, -16, height }, { { -8, -8, height + 0 }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 12)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 18)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 28, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 15)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 28, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 28, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 22)), + { -16, -16, height }, { { -8, -8, height + 56 }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 28, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 13)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 19)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 10, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 16)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 10, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 10, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 23)), + { -16, -16, height }, { { -16, -16, height + 24 }, { 24, 24, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 10, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 14)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 20)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 3, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 17)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 3, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 3, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 3, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void LatticeTriangleTrackDiagFlatTo60DegDownLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 17)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 20)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 14)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 24, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 23)), + { -16, -16, height }, { { -16, -16, height + 24 }, { 24, 24, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 24, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 24, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 16)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 24, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 19)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 13)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 58, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 22)), + { -16, -16, height }, { { -8, -8, height + 56 }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 58, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 58, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 15)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 58, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 18)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 12)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 14, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 21)), + { -16, -16, height }, { { -8, -8, height + 0 }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 14, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 14, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 14, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + } +} + +static void LatticeTriangleTrackDiag60DegDownToFlatLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 5)), + { -16, -16, height }, { { -16, -16, height + 80 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 136); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 8)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 2)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 38, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 11)), + { -16, -16, height }, { { -16, -16, height + 32 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 38, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 38, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 4)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 38, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 7)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 1)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 12, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 10)), + { -16, -16, height }, { { -8, -8, height + 8 }, { 24, 24, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 12, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 12, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 3)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 12, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 6)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 0)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 9)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 32); + break; + } +} + +static void LatticeTriangleTrackLeftEighthDiveLoopUpToOrthogonal( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 4)), + { -16, -16, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 12)), + { -16, -16, height }, { { 0, 0, height + -8 }, { 32, 32, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 0)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 8)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 1)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 4, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 5)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 4, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 9)), + { -16, -16, height }, { { 2, 2, height + 4 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 4, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 13)), + { -16, -16, height }, { { 2, 2, height + 12 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 4, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 2)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 6)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 10)), + { -16, -16, height }, { { 0, 0, height + 0 }, { 32, 1, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 14)), + { -16, -16, height }, { { 0, 6, height + 58 }, { 32, 20, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 80); + break; + case 5: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 3)), + { -16, -16, height }, { { 0, 6, height + 36 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 44, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 7)), + { -16, -16, height }, { { 0, 6, height + 36 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 44, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 11)), + { -16, -16, height }, { { 0, 6, height + 36 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 44, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 15)), + { -16, -16, height }, { { 0, 6, height + 36 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 44, session.SupportColours); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void LatticeTriangleTrackRightEighthDiveLoopUpToOrthogonal( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 20)), + { -16, -16, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 28)), + { -16, -16, height }, { { 0, 0, height + -8 }, { 32, 32, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 24)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 16)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 17)), + { -16, -16, height }, { { 2, 2, height + 4 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 4, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 21)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 4, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 25)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 4, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 29)), + { -16, -16, height }, { { 2, 2, height + 12 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 4, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 18)), + { -16, -16, height }, { { 0, 0, height + 0 }, { 1, 32, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 22)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 26)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 30)), + { -16, -16, height }, { { 6, 0, height + 58 }, { 20, 32, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 80); + break; + case 5: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 19)), + { -16, -16, height }, { { 6, 0, height + 36 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 44, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 23)), + { -16, -16, height }, { { 6, 0, height + 36 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 44, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 27)), + { -16, -16, height }, { { 6, 0, height + 36 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 44, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 31)), + { -16, -16, height }, { { 6, 0, height + 36 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 44, session.SupportColours); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void LatticeTriangleTrackLeftEighthDiveLoopDownToDiag( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + LatticeTriangleTrackRightEighthDiveLoopUpToOrthogonal( + session, ride, 5 - trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void LatticeTriangleTrackRightEighthDiveLoopToDownOrthogonal( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + LatticeTriangleTrackLeftEighthDiveLoopUpToOrthogonal( + session, ride, 5 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + TrackPaintFunction GetTrackPaintFunctionLatticeTriangleTrack(OpenRCT2::TrackElemType trackType) { switch (trackType) @@ -18787,6 +20203,16 @@ TrackPaintFunction GetTrackPaintFunctionLatticeTriangleTrack(OpenRCT2::TrackElem return LatticeTriangleTrackLeftLargeZeroGRollDown; case TrackElemType::RightLargeZeroGRollDown: return LatticeTriangleTrackRightLargeZeroGRollDown; + + case TrackElemType::LeftEighthDiveLoopUpToOrthogonal: + return LatticeTriangleTrackLeftEighthDiveLoopUpToOrthogonal; + case TrackElemType::RightEighthDiveLoopUpToOrthogonal: + return LatticeTriangleTrackRightEighthDiveLoopUpToOrthogonal; + case TrackElemType::LeftEighthDiveLoopDownToDiag: + return LatticeTriangleTrackLeftEighthDiveLoopDownToDiag; + case TrackElemType::RightEighthDiveLoopDownToDiag: + return LatticeTriangleTrackRightEighthDiveLoopToDownOrthogonal; + case TrackElemType::Up90ToInvertedFlatQuarterLoop: return LatticeTriangleTrack90DegToInvertedFlatQuarterLoopUp; case TrackElemType::InvertedFlatToDown90QuarterLoop: @@ -18831,6 +20257,14 @@ TrackPaintFunction GetTrackPaintFunctionLatticeTriangleTrack(OpenRCT2::TrackElem return LatticeTriangleTrackDiagFlatTo60DegDown; case TrackElemType::DiagDown60ToFlat: return LatticeTriangleTrackDiag60DegDownToFlat; + case TrackElemType::DiagFlatToUp60LongBase: + return LatticeTriangleTrackDiagFlatTo60DegUpLongBase; + case TrackElemType::DiagUp60ToFlatLongBase: + return LatticeTriangleTrackDiag60DegUpToFlatLongBase; + case TrackElemType::DiagFlatToDown60LongBase: + return LatticeTriangleTrackDiagFlatTo60DegDownLongBase; + case TrackElemType::DiagDown60ToFlatLongBase: + return LatticeTriangleTrackDiag60DegDownToFlatLongBase; case TrackElemType::LeftEighthToDiagUp25: return LatticeTriangleTrackLeftEighthToDiagUp25; case TrackElemType::RightEighthToDiagUp25: diff --git a/src/openrct2/paint/track/coaster/SingleRailRollerCoaster.cpp b/src/openrct2/paint/track/coaster/SingleRailRollerCoaster.cpp index 10d45b6963..be17785b14 100644 --- a/src/openrct2/paint/track/coaster/SingleRailRollerCoaster.cpp +++ b/src/openrct2/paint/track/coaster/SingleRailRollerCoaster.cpp @@ -18531,6 +18531,1459 @@ namespace OpenRCT2::SingleRailRC PaintUtilSetGeneralSupportHeight(session, height + 56); } + static void TrackDiagFlatTo60DegUpLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 9)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 32); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 0)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 6)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 3)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 10)), + { -16, -16, height }, { { -20, -20, height + 8 }, { 24, 24, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 1)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 7)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 16, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 4)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 16, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 16, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 11)), + { -16, -16, height }, { { -16, -16, height + 32 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 16, height + 0, + session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 2)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 8)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 24, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 5)), + { -16, -16, height }, { { -16, -16, height + 80 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 24, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 24, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 24, height + 0, + session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 136); + break; + } + } + + static void TrackDiag60DegUpToFlatLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 21)), + { -16, -16, height }, { { -8, -8, height + 0 }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 12)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 18)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 33, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 15)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 33, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 33, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 22)), + { -16, -16, height }, { { -8, -8, height + 56 }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 33, height + 0, + session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 13)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 19)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 15, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 16)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 15, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 15, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 23)), + { -16, -16, height }, { { -16, -16, height + 24 }, { 24, 24, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 15, height + 0, + session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 14)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 20)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 8, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 17)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 8, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 8, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 8, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } + } + + static void TrackDiagFlatTo60DegDownLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 17)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 20)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 14)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 29, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 23)), + { -16, -16, height }, { { -16, -16, height + 24 }, { 24, 24, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 29, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 29, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 16)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 29, height + 0, + session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 19)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 13)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 63, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 22)), + { -16, -16, height }, { { -8, -8, height + 56 }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 63, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 63, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 15)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 63, height + 0, + session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 18)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 12)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 19, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 21)), + { -16, -16, height }, { { -8, -8, height + 0 }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 19, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 19, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 19, height + 0, + session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + } + } + + static void TrackDiag60DegDownToFlatLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 5)), + { -16, -16, height }, { { -16, -16, height + 80 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 136); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 8)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 2)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 43, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 11)), + { -16, -16, height }, { { -16, -16, height + 32 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 43, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 43, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 4)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 43, height + 0, + session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 7)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 1)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 17, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 10)), + { -16, -16, height }, { { -8, -8, height + 8 }, { 24, 24, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 17, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 17, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 3)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 17, height + 0, + session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 6)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 0)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 9)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 32); + break; + } + } + + static void TrackLeftEighthDiveLoopUpToOrthogonal( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 4)), + { -16, -16, height }, { { 0, 0, height + 44 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 12)), + { -16, -16, height }, { { 0, 0, height + -8 }, { 32, 32, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 0)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 8)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 1)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 14, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 5)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 9, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 9)), + { -16, -16, height }, { { 2, 2, height + 8 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 9, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 13)), + { -16, -16, height }, { { 2, 2, height + 12 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 9, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 2)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 6)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 10)), + { -16, -16, height }, { { 0, 0, height + 0 }, { 32, 1, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 14)), + { -16, -16, height }, { { 0, 6, height + 58 }, { 32, 20, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 80); + break; + case 5: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 3)), + { -16, -16, height }, { { 0, 6, height + 26 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 33, + session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 7)), + { -16, -16, height }, { { 0, 6, height + 26 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 33, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 11)), + { -16, -16, height }, { { 0, 6, height + 26 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 33, + session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 15)), + { -16, -16, height }, { { 0, 6, height + 26 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 33, + session.SupportColours); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } + } + + static void TrackRightEighthDiveLoopUpToOrthogonal( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 20)), + { -16, -16, height }, { { 0, 0, height + 44 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 28)), + { -16, -16, height }, { { 0, 0, height + -8 }, { 32, 32, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 24)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 16)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 17)), + { -16, -16, height }, { { 2, 2, height + 8 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 9, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 21)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 9, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 25)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 14, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 29)), + { -16, -16, height }, { { 2, 2, height + 12 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 9, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre, PaintSegment::bottomCorner, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 18)), + { -16, -16, height }, { { 0, 0, height + 0 }, { 1, 32, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 22)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 26)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 30)), + { -16, -16, height }, { { 6, 0, height + 58 }, { 20, 32, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre, PaintSegment::bottomCorner, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 80); + break; + case 5: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre, PaintSegment::bottomCorner, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 19)), + { -16, -16, height }, { { 6, 0, height + 26 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 33, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 23)), + { -16, -16, height }, { { 6, 0, height + 26 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 33, + session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 27)), + { -16, -16, height }, { { 6, 0, height + 26 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 33, + session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 31)), + { -16, -16, height }, { { 6, 0, height + 26 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 33, + session.SupportColours); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } + } + + static void TrackLeftEighthDiveLoopDownToDiag( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) + { + TrackRightEighthDiveLoopUpToOrthogonal( + session, ride, 5 - trackSequence, (direction + 1) & 3, height, trackElement, supportType); + } + + static void TrackRightEighthDiveLoopToDownOrthogonal( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) + { + TrackLeftEighthDiveLoopUpToOrthogonal( + session, ride, 5 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); + } + TrackPaintFunction GetTrackPaintFunction(OpenRCT2::TrackElemType trackType) { switch (trackType) @@ -18877,6 +20330,14 @@ namespace OpenRCT2::SingleRailRC return TrackLeftLargeZeroGRollDown; case TrackElemType::RightLargeZeroGRollDown: return TrackRightLargeZeroGRollDown; + case TrackElemType::LeftEighthDiveLoopUpToOrthogonal: + return TrackLeftEighthDiveLoopUpToOrthogonal; + case TrackElemType::RightEighthDiveLoopUpToOrthogonal: + return TrackRightEighthDiveLoopUpToOrthogonal; + case TrackElemType::LeftEighthDiveLoopDownToDiag: + return TrackLeftEighthDiveLoopDownToDiag; + case TrackElemType::RightEighthDiveLoopDownToDiag: + return TrackRightEighthDiveLoopToDownOrthogonal; case TrackElemType::Up90ToInvertedFlatQuarterLoop: return Track90DegToInvertedFlatQuarterLoopUp; case TrackElemType::InvertedFlatToDown90QuarterLoop: @@ -18921,6 +20382,14 @@ namespace OpenRCT2::SingleRailRC return TrackDiagFlatTo60DegDown; case TrackElemType::DiagDown60ToFlat: return TrackDiag60DegDownToFlat; + case TrackElemType::DiagFlatToUp60LongBase: + return TrackDiagFlatTo60DegUpLongBase; + case TrackElemType::DiagUp60ToFlatLongBase: + return TrackDiag60DegUpToFlatLongBase; + case TrackElemType::DiagFlatToDown60LongBase: + return TrackDiagFlatTo60DegDownLongBase; + case TrackElemType::DiagDown60ToFlatLongBase: + return TrackDiag60DegDownToFlatLongBase; case TrackElemType::LeftEighthToDiagUp25: return TrackLeftEighthToDiagUp25; diff --git a/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp b/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp index e34431361f..8b48e2c18e 100644 --- a/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp +++ b/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp @@ -19009,6 +19009,1374 @@ static void TwisterRCTrackRightLargeZeroGRollDown( session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); } +static void TwisterRCTrackDiagFlatTo60DegUpLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 9)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 32); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 0)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 6)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 3)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 10)), + { -16, -16, height }, { { -20, -20, height + 8 }, { 24, 24, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 1)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 7)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 11, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 4)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 11, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 11, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 11)), + { -16, -16, height }, { { -16, -16, height + 32 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 11, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 2)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 8)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 19, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 5)), + { -16, -16, height }, { { -16, -16, height + 80 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 19, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 19, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 19, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 136); + break; + } +} + +static void TwisterRCTrackDiag60DegUpToFlatLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 21)), + { -16, -16, height }, { { -8, -8, height + 0 }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 12)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 18)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 28, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 15)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 28, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 28, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 22)), + { -16, -16, height }, { { -8, -8, height + 56 }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 28, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 13)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 19)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 10, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 16)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 10, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 10, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 23)), + { -16, -16, height }, { { -16, -16, height + 24 }, { 24, 24, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 10, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 14)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 20)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 3, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 17)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 3, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 3, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 3, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void TwisterRCTrackDiagFlatTo60DegDownLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 17)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 20)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 14)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 24, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 23)), + { -16, -16, height }, { { -16, -16, height + 24 }, { 24, 24, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 24, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 24, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 16)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 24, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 19)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 13)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 58, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 22)), + { -16, -16, height }, { { -8, -8, height + 56 }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 58, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 58, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 15)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 58, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 18)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 12)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 104); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 14, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 21)), + { -16, -16, height }, { { -8, -8, height + 0 }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 14, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 14, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 14, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + } +} + +static void TwisterRCTrackDiag60DegDownToFlatLongBase( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 5)), + { -16, -16, height }, { { -16, -16, height + 80 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 136); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 8)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 2)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 3: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 38, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 11)), + { -16, -16, height }, { { -16, -16, height + 32 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 38, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 38, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 4)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 38, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 7)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 5: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 1)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 6: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 12, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 10)), + { -16, -16, height }, { { -8, -8, height + 8 }, { 24, 24, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 12, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 12, height + 0, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 3)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 12, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::topRightSide, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 6)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 8: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 0)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 9: + switch (direction) + { + case 0: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 0, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 9)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 0, session.SupportColours); + break; + case 2: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 0, session.SupportColours); + break; + case 3: + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 0, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::centre), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 32); + break; + } +} + +static void TwisterRCTrackLeftEighthDiveLoopUpToOrthogonal( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 4)), + { -16, -16, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 12)), + { -16, -16, height }, { { 0, 0, height + -8 }, { 32, 32, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 0)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 8)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 1)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 4, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 5)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 4, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 9)), + { -16, -16, height }, { { 2, 2, height + 4 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 4, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 13)), + { -16, -16, height }, { { 2, 2, height + 12 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 4, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 2)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 6)), + { -16, -16, height }, { { 0, 31, height + 0 }, { 32, 1, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 10)), + { -16, -16, height }, { { 0, 0, height + 0 }, { 32, 1, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 14)), + { -16, -16, height }, { { 0, 6, height + 58 }, { 32, 20, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 80); + break; + case 5: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 3)), + { -16, -16, height }, { { 0, 6, height + 32 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 41, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 7)), + { -16, -16, height }, { { 0, 6, height + 32 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 41, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 11)), + { -16, -16, height }, { { 0, 6, height + 32 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 41, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 15)), + { -16, -16, height }, { { 0, 6, height + 32 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 41, session.SupportColours); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void TwisterRCTrackRightEighthDiveLoopUpToOrthogonal( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 20)), + { -16, -16, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 28)), + { -16, -16, height }, { { 0, 0, height + -8 }, { 32, 32, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomRightSide, + PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 24)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 16)), + { -16, -16, height }, { { -16, -16, height + 0 }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topLeftSide, PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 120); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 17)), + { -16, -16, height }, { { 2, 2, height + 4 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height + 4, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 21)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 0, height + 4, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 25)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height + 4, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 29)), + { -16, -16, height }, { { 2, 2, height + 12 }, { 28, 28, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 0, height + 4, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 112); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 18)), + { -16, -16, height }, { { 0, 0, height + 0 }, { 1, 32, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 22)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 26)), + { -16, -16, height }, { { 31, 0, height + 0 }, { 1, 32, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 30)), + { -16, -16, height }, { { 6, 0, height + 58 }, { 20, 32, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 80); + break; + case 5: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, PaintSegment::centre, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 19)), + { -16, -16, height }, { { 6, 0, height + 32 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 41, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 23)), + { -16, -16, height }, { { 6, 0, height + 32 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 41, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 27)), + { -16, -16, height }, { { 6, 0, height + 32 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 41, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_DIVE_LOOP + 31)), + { -16, -16, height }, { { 6, 0, height + 32 }, { 20, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 41, session.SupportColours); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void TwisterRCTrackLeftEighthDiveLoopDownToDiag( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackRightEighthDiveLoopUpToOrthogonal( + session, ride, 5 - trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackRightEighthDiveLoopToDownOrthogonal( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackLeftEighthDiveLoopUpToOrthogonal( + session, ride, 5 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + TrackPaintFunction GetTrackPaintFunctionTwisterRC(OpenRCT2::TrackElemType trackType) { switch (trackType) @@ -19530,6 +20898,26 @@ TrackPaintFunction GetTrackPaintFunctionTwisterRC(OpenRCT2::TrackElemType trackT case TrackElemType::RightLargeZeroGRollDown: return TwisterRCTrackRightLargeZeroGRollDown; + // Diagonal flat to steep + case TrackElemType::DiagFlatToUp60LongBase: + return TwisterRCTrackDiagFlatTo60DegUpLongBase; + case TrackElemType::DiagUp60ToFlatLongBase: + return TwisterRCTrackDiag60DegUpToFlatLongBase; + case TrackElemType::DiagFlatToDown60LongBase: + return TwisterRCTrackDiagFlatTo60DegDownLongBase; + case TrackElemType::DiagDown60ToFlatLongBase: + return TwisterRCTrackDiag60DegDownToFlatLongBase; + case TrackElemType::LeftEighthDiveLoopUpToOrthogonal: + return TwisterRCTrackLeftEighthDiveLoopUpToOrthogonal; + + // Dive loops + case TrackElemType::RightEighthDiveLoopUpToOrthogonal: + return TwisterRCTrackRightEighthDiveLoopUpToOrthogonal; + case TrackElemType::LeftEighthDiveLoopDownToDiag: + return TwisterRCTrackLeftEighthDiveLoopDownToDiag; + case TrackElemType::RightEighthDiveLoopDownToDiag: + return TwisterRCTrackRightEighthDiveLoopToDownOrthogonal; + default: return TrackPaintFunctionDummy; } diff --git a/src/openrct2/paint/vehicle/VehiclePaint.cpp b/src/openrct2/paint/vehicle/VehiclePaint.cpp index 88a760bb3a..953b8da286 100644 --- a/src/openrct2/paint/vehicle/VehiclePaint.cpp +++ b/src/openrct2/paint/vehicle/VehiclePaint.cpp @@ -2018,6 +2018,37 @@ static void VehiclePitchUp42BankedRight90( } } +static void VehiclePitchUp42BankedLeft135( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Corkscrews)) + { + imageDirection = (imageDirection + 8) % 32; + int32_t boundingBoxNum = YawTo4(imageDirection) + 13 * 4 + 144; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Corkscrews, imageDirection, 13); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchUp42Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchUp42BankedRight135( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Corkscrews)) + { + int32_t boundingBoxNum = YawTo4(imageDirection) + 3 * 4 + 144; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Corkscrews, imageDirection, 3); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchUp42Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + // 6D49DC static void VehiclePitchUp42( PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) @@ -2045,12 +2076,18 @@ static void VehiclePitchUp42( case 6: VehiclePitchUp42BankedLeft90(session, vehicle, imageDirection, z, carEntry); break; + case 8: + VehiclePitchUp42BankedLeft135(session, vehicle, imageDirection, z, carEntry); + break; case 10: VehiclePitchUp42BankedRight67(session, vehicle, imageDirection, z, carEntry); break; case 11: VehiclePitchUp42BankedRight90(session, vehicle, imageDirection, z, carEntry); break; + case 13: + VehiclePitchUp42BankedRight135(session, vehicle, imageDirection, z, carEntry); + break; default: VehiclePitchUp42Unbanked(session, vehicle, imageDirection, z, carEntry); } @@ -2736,6 +2773,37 @@ static void VehiclePitchDown42BankedRight90( } } +static void VehiclePitchDown42BankedLeft135( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Corkscrews)) + { + int32_t boundingBoxNum = YawTo4(imageDirection) + 8 * 4 + 144; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Corkscrews, imageDirection, 8); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchDown42Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchDown42BankedRight135( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Corkscrews)) + { + imageDirection = (imageDirection + 8) % 32; + int32_t boundingBoxNum = YawTo4(imageDirection) + 18 * 4 + 144; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Corkscrews, imageDirection, 18); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchDown42Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + static void VehiclePitchDown42( PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) { @@ -2762,12 +2830,18 @@ static void VehiclePitchDown42( case 6: VehiclePitchDown42BankedLeft90(session, vehicle, imageDirection, z, carEntry); break; + case 8: + VehiclePitchDown42BankedLeft135(session, vehicle, imageDirection, z, carEntry); + break; case 10: VehiclePitchDown42BankedRight67(session, vehicle, imageDirection, z, carEntry); break; case 11: VehiclePitchDown42BankedRight90(session, vehicle, imageDirection, z, carEntry); break; + case 13: + VehiclePitchDown42BankedRight135(session, vehicle, imageDirection, z, carEntry); + break; default: VehiclePitchDown42Unbanked(session, vehicle, imageDirection, z, carEntry); } @@ -3384,7 +3458,7 @@ static void VehiclePitchUp16( #pragma region SlopeUp50 // 6D4E8F -static void VehiclePitchUp50( +static void VehiclePitchUp50Unbanked( PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) { if (carEntry->GroupEnabled(SpriteGroupType::Slopes50)) @@ -3399,6 +3473,127 @@ static void VehiclePitchUp50( } } +static void VehiclePitchUp50BankedLeft45( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Slopes50Banked45)) + { + int32_t boundingBoxNum = (YawTo16(imageDirection)) + 40; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Slopes50Banked45, imageDirection, 0); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchUp60Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchUp50BankedRight45( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Slopes50Banked45)) + { + int32_t boundingBoxNum = (YawTo16(imageDirection)) + 40; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Slopes50Banked45, imageDirection, 1); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchUp60Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchUp50BankedLeft67( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Slopes50Banked67)) + { + int32_t boundingBoxNum = (YawTo16(imageDirection)) + 40; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Slopes50Banked67, imageDirection, 0); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchUp60Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchUp50BankedRight67( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Slopes50Banked67)) + { + int32_t boundingBoxNum = (YawTo16(imageDirection)) + 40; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Slopes50Banked67, imageDirection, 1); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchUp60Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchUp50BankedLeft90( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Slopes50Banked90)) + { + int32_t boundingBoxNum = (YawTo16(imageDirection)) + 40; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Slopes50Banked90, imageDirection, 0); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchUp60Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchUp50BankedRight90( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Slopes50Banked90)) + { + int32_t boundingBoxNum = (YawTo16(imageDirection)) + 40; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Slopes50Banked90, imageDirection, 1); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchUp60Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchUp50( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + switch (GetPaintBankRotation(vehicle)) + { + case 0: + VehiclePitchUp50Unbanked(session, vehicle, imageDirection, z, carEntry); + break; + case 2: + VehiclePitchUp50BankedLeft45(session, vehicle, imageDirection, z, carEntry); + break; + case 4: + VehiclePitchUp50BankedRight45(session, vehicle, imageDirection, z, carEntry); + break; + case 5: + VehiclePitchUp50BankedLeft67(session, vehicle, imageDirection, z, carEntry); + break; + case 6: + VehiclePitchUp50BankedLeft90(session, vehicle, imageDirection, z, carEntry); + break; + case 10: + VehiclePitchUp50BankedRight67(session, vehicle, imageDirection, z, carEntry); + break; + case 11: + VehiclePitchUp50BankedRight90(session, vehicle, imageDirection, z, carEntry); + break; + default: + VehiclePitchUp50Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + #pragma endregion #pragma endregion @@ -3626,7 +3821,7 @@ static void VehiclePitchDown16( #pragma region SlopeDown50 // 6D4EB8 -static void VehiclePitchDown50( +static void VehiclePitchDown50Unbanked( PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) { if (carEntry->GroupEnabled(SpriteGroupType::Slopes50)) @@ -3641,6 +3836,163 @@ static void VehiclePitchDown50( } } +static void VehiclePitchDown50BankedLeft45( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Slopes50Banked45)) + { + int32_t boundingBoxNum = (YawTo16(imageDirection)) + 40; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Slopes50Banked45, imageDirection, 2); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchDown50Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchDown50BankedRight45( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Slopes50Banked45)) + { + int32_t boundingBoxNum = (YawTo16(imageDirection)) + 40; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Slopes50Banked45, imageDirection, 3); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchDown50Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchDown50BankedLeft67( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Slopes50Banked67)) + { + int32_t boundingBoxNum = (YawTo16(imageDirection)) + 40; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Slopes50Banked67, imageDirection, 2); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchDown50Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchDown50BankedRight67( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Slopes50Banked67)) + { + int32_t boundingBoxNum = (YawTo16(imageDirection)) + 40; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Slopes50Banked67, imageDirection, 3); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchDown50Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchDown50BankedLeft90( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Slopes50Banked90)) + { + int32_t boundingBoxNum = (YawTo16(imageDirection)) + 40; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Slopes50Banked90, imageDirection, 2); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchDown50Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchDown50BankedRight90( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Slopes50Banked90)) + { + int32_t boundingBoxNum = (YawTo16(imageDirection)) + 40; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Slopes50Banked90, imageDirection, 3); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchDown50Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchDown50BankedLeft135( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Corkscrews)) + { + int32_t boundingBoxNum = (YawTo4(imageDirection)) + 4 * 4 + 144; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Corkscrews, imageDirection, 4); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchDown60Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchDown50BankedRight135( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + if (carEntry->GroupEnabled(SpriteGroupType::Corkscrews)) + { + int32_t boundingBoxNum = (YawTo4(imageDirection)) + 4 * 4 + 144; + int32_t spriteNum = carEntry->SpriteOffset(SpriteGroupType::Corkscrews, imageDirection, 4); + VehicleSpritePaintWithSwinging(session, vehicle, spriteNum, boundingBoxNum, z, carEntry); + } + else + { + VehiclePitchDown60Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + +static void VehiclePitchDown50( + PaintSession& session, const Vehicle* vehicle, int32_t imageDirection, int32_t z, const CarEntry* carEntry) +{ + switch (GetPaintBankRotation(vehicle)) + { + case 0: + VehiclePitchDown50Unbanked(session, vehicle, imageDirection, z, carEntry); + break; + case 2: + VehiclePitchDown50BankedLeft45(session, vehicle, imageDirection, z, carEntry); + break; + case 4: + VehiclePitchDown50BankedRight45(session, vehicle, imageDirection, z, carEntry); + break; + case 5: + VehiclePitchDown50BankedLeft67(session, vehicle, imageDirection, z, carEntry); + break; + case 6: + VehiclePitchDown50BankedLeft90(session, vehicle, imageDirection, z, carEntry); + break; + case 8: + VehiclePitchDown50BankedLeft135(session, vehicle, imageDirection, z, carEntry); + break; + case 10: + VehiclePitchDown50BankedRight67(session, vehicle, imageDirection, z, carEntry); + break; + case 11: + VehiclePitchDown50BankedRight90(session, vehicle, imageDirection, z, carEntry); + break; + case 13: + VehiclePitchDown50BankedRight135(session, vehicle, imageDirection, z, carEntry); + break; + default: + VehiclePitchDown60Unbanked(session, vehicle, imageDirection, z, carEntry); + } +} + #pragma endregion #pragma endregion diff --git a/src/openrct2/park/ParkFile.h b/src/openrct2/park/ParkFile.h index 31450afea3..e4ed437652 100644 --- a/src/openrct2/park/ParkFile.h +++ b/src/openrct2/park/ParkFile.h @@ -11,10 +11,10 @@ namespace OpenRCT2 struct GameState_t; // Current version that is saved. - constexpr uint32_t PARK_FILE_CURRENT_VERSION = 49; + constexpr uint32_t PARK_FILE_CURRENT_VERSION = 50; // The minimum version that is forwards compatible with the current version. - constexpr uint32_t PARK_FILE_MIN_VERSION = 49; + constexpr uint32_t PARK_FILE_MIN_VERSION = 50; // The minimum version that is backwards compatible with the current version. // If this is increased beyond 0, uncomment the checks in ParkFile.cpp and Context.cpp! @@ -38,6 +38,7 @@ namespace OpenRCT2 constexpr uint16_t kParkEntranceObjectLimitIncreased = 47; constexpr uint16_t kExtendedStandUpRollerCoasterVersion = 48; constexpr uint16_t kPeepAnimationObjectsVersion = 49; + constexpr uint16_t kDiagonalLongFlatToSteepAndDiveLoopVersion = 50; } // namespace OpenRCT2 class ParkFileExporter diff --git a/src/openrct2/ride/CarEntry.h b/src/openrct2/ride/CarEntry.h index ea830cff8a..5413825f9c 100644 --- a/src/openrct2/ride/CarEntry.h +++ b/src/openrct2/ride/CarEntry.h @@ -146,6 +146,9 @@ enum class SpriteGroupType : uint8_t Slopes42Banked67, Slopes42Banked90, Slopes60Banked22, + Slopes50Banked45, + Slopes50Banked67, + Slopes50Banked90, Corkscrews, RestraintAnimation, CurvedLiftHillUp, @@ -153,18 +156,26 @@ enum class SpriteGroupType : uint8_t Count }; -static constexpr const char* SpriteGroupNames[] = { - "slopeFlat", "slopes12", "slopes25", "slopes42", - "slopes60", "slopes75", "slopes90", "slopesLoop", - "slopeInverted", "slopes8", "slopes16", "slopes50", - "flatBanked22", "flatBanked45", "flatBanked67", "flatBanked90", - "inlineTwists", "slopes12Banked22", "slopes8Banked22", "slopes25Banked22", - "slopes8Banked45", "slopes16Banked22", "slopes16Banked45", "slopes25Banked45", - "slopes12Banked45", "slopes25Banked67", "slopes25Banked90", "slopes25InlineTwists", - "slopes42Banked22", "slopes42Banked45", "slopes42Banked67", "slopes42Banked90", - "slopes60Banked22", "corkscrews", "restraintAnimation", "curvedLiftHillUp", - "curvedLiftHillDown", -}; +static constexpr const char* SpriteGroupNames[] = { "slopeFlat", "slopes12", + "slopes25", "slopes42", + "slopes60", "slopes75", + "slopes90", "slopesLoop", + "slopeInverted", "slopes8", + "slopes16", "slopes50", + "flatBanked22", "flatBanked45", + "flatBanked67", "flatBanked90", + "inlineTwists", "slopes12Banked22", + "slopes8Banked22", "slopes25Banked22", + "slopes8Banked45", "slopes16Banked22", + "slopes16Banked45", "slopes25Banked45", + "slopes12Banked45", "slopes25Banked67", + "slopes25Banked90", "slopes25InlineTwists", + "slopes42Banked22", "slopes42Banked45", + "slopes42Banked67", "slopes42Banked90", + "slopes60Banked22", "slopes50Banked45", + "slopes50Banked67", "slopes50Banked90", + "corkscrews", "restraintAnimation", + "curvedLiftHillUp", "curvedLiftHillDown" }; static_assert(std::size(SpriteGroupNames) == EnumValue(SpriteGroupType::Count)); struct VehicleSpriteGroup diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index 333d49c524..77b41badd0 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -4791,7 +4791,7 @@ struct NecessarySpriteGroup OpenRCT2::BitSet RideEntryGetSupportedTrackPieces(const RideObjectEntry& rideEntry) { // TODO: Use a std::span when C++20 available as 6 is due to jagged array - static const std::array trackPieceRequiredSprites[] = { + static const std::array trackPieceRequiredSprites[] = { { SpriteGroupType::SlopeFlat, SpritePrecision::None }, // TrackGroup::flat { SpriteGroupType::SlopeFlat, SpritePrecision::Sprites4 }, // TrackGroup::straight { SpriteGroupType::SlopeFlat, SpritePrecision::Sprites4 }, // TrackGroup::stationEnd @@ -4946,7 +4946,17 @@ OpenRCT2::BitSet RideEntryGetSupportedTrackPieces( { SpriteGroupType::SlopeFlat, SpritePrecision::Sprites8 }, // TrackGroup::diagBlockBrakes { SpriteGroupType::Slopes25, SpritePrecision::Sprites4 }, // TrackGroup::inclinedBrakes { SpriteGroupType::SlopeFlat, SpritePrecision::Sprites8 }, // TrackGroup::diagBooster + { SpriteGroupType::Slopes8, SpritePrecision::Sprites4, SpriteGroupType::Slopes16, SpritePrecision::Sprites4, + SpriteGroupType::Slopes25, SpritePrecision::Sprites8, SpriteGroupType::Slopes42, SpritePrecision::Sprites8, + SpriteGroupType::Slopes50, SpritePrecision::Sprites4 }, // TrackGroup::slopeSteepLong + { SpriteGroupType::Slopes50, SpritePrecision::Sprites4, SpriteGroupType::Slopes60Banked22, SpritePrecision::Sprites8, + SpriteGroupType::Slopes50Banked45, SpritePrecision::Sprites8, SpriteGroupType::Slopes50Banked67, + SpritePrecision::Sprites8, SpriteGroupType::Slopes50Banked90, SpritePrecision::Sprites8, SpriteGroupType::Corkscrews, + SpritePrecision::Sprites4, SpriteGroupType::Slopes25InlineTwists, SpritePrecision::Sprites4, + SpriteGroupType::SlopesLoop, SpritePrecision::Sprites4, SpriteGroupType::SlopeInverted, + SpritePrecision::Sprites4 }, // TrackGroup::diveLoop }; + static_assert(std::size(trackPieceRequiredSprites) == EnumValue(TrackGroup::count)); // Only check default vehicle; it's assumed the others will have correct sprites if this one does (I've yet to find an diff --git a/src/openrct2/ride/RideData.cpp b/src/openrct2/ride/RideData.cpp index 388e0c1b3e..e1b828e58a 100644 --- a/src/openrct2/ride/RideData.cpp +++ b/src/openrct2/ride/RideData.cpp @@ -176,6 +176,9 @@ const CarEntry CableLiftVehicle = { /* SpriteGroupType::Slopes42Banked67 */ { 0, SpritePrecision::None}, /* SpriteGroupType::Slopes42Banked90 */ { 0, SpritePrecision::None}, /* SpriteGroupType::Slopes60Banked22 */ { 0, SpritePrecision::None}, + /* SpriteGroupType::Slopes60Banked45 */ { 0, SpritePrecision::None}, + /* SpriteGroupType::Slopes60Banked67 */ { 0, SpritePrecision::None}, + /* SpriteGroupType::Slopes60Banked90 */ { 0, SpritePrecision::None}, /* SpriteGroupType::Corkscrews */ { 0, SpritePrecision::None}, /* SpriteGroupType::RestraintAnimation */ { 0, SpritePrecision::None}, /* SpriteGroupType::CurvedLiftHillUp */ { 0, SpritePrecision::None}, diff --git a/src/openrct2/ride/Track.h b/src/openrct2/ride/Track.h index 1ca131e13d..7efff55289 100644 --- a/src/openrct2/ride/Track.h +++ b/src/openrct2/ride/Track.h @@ -148,6 +148,9 @@ enum class TrackGroup : uint8_t inclinedBrakes, diagBooster, + diagSlopeSteepLong, + diveLoop, + count, }; @@ -603,7 +606,17 @@ namespace OpenRCT2 Down25Brakes = 339, DiagBooster = 340, - Count = 341, + DiagFlatToUp60LongBase = 341, + DiagUp60ToFlatLongBase = 342, + DiagFlatToDown60LongBase = 343, + DiagDown60ToFlatLongBase = 344, + LeftEighthDiveLoopUpToOrthogonal = 345, + RightEighthDiveLoopUpToOrthogonal = 346, + LeftEighthDiveLoopDownToDiag = 347, + RightEighthDiveLoopDownToDiag = 348, + + Count = 349, + None = 65535, }; } diff --git a/src/openrct2/ride/TrackData.cpp b/src/openrct2/ride/TrackData.cpp index 0743101054..a20fd4d171 100644 --- a/src/openrct2/ride/TrackData.cpp +++ b/src/openrct2/ride/TrackData.cpp @@ -358,18 +358,26 @@ namespace OpenRCT2::TrackMetaData { 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 - { 0, 0, 16, 0, 0, 0 }, // TrackElemType::Down25Brakes - { 4, 4, 0, 0, -32, 32 }, // TrackElemType::DiagBooster + { 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 + { 0, 0, 16, 0, 0, 0 }, // TrackElemType::Down25Brakes + { 4, 4, 0, 0, -32, 32 }, // TrackElemType::DiagBooster + { 4, 4, 0, 88, -96, 96 }, // TrackElemType::DiagFlatToUp60LongBase, + { 4, 4, 0, 88, -96, 96 }, // TrackElemType::DiagUp60ToFlatLongBase, + { 4, 4, 88, 0, -96, 96 }, // TrackElemType::DiagFlatToDown60LongBase, + { 4, 4, 88, 0, -96, 96 }, // TrackElemType::DiagDown60ToFlatLongBase, + { 4, 0, 0,152, -96, 32 }, // TrackElemType::LeftEighthDiveLoopUpToOrthogonal + { 4, 1, 0,152, -32, 96 }, // TrackElemType::RightEighthDiveLoopUpToOrthogonal + { 0, 7,152, 0, -96, -32 }, // TrackElemType::LeftEighthDiveLoopDownToDiag + { 0, 4,152, 0, -96, 32 }, // TrackElemType::RightEighthDiveLoopDownToDiag }; static_assert(std::size(_trackCoordinates) == EnumValue(TrackElemType::Count)); @@ -715,7 +723,16 @@ namespace OpenRCT2::TrackMetaData 45, // TrackElemType::DiagBlockBrakes 33, // TrackElemType::Down25Brakes 45, // TrackElemType::DiagBooster + 165, // TrackElemType::DiagFlatToUp60LongBase, + 165, // TrackElemType::DiagUp60ToFlatLongBase, + 165, // TrackElemType::DiagFlatToDown60LongBase, + 165, // TrackElemType::DiagDown60ToFlatLongBase, + 165, // TrackElemType::LeftEighthDiveLoopUpToOrthogonal + 165, // TrackElemType::RightEighthDiveLoopUpToOrthogonal + 165, // TrackElemType::LeftEighthDiveLoopDownToDiag + 165, // TrackElemType::RightEighthDiveLoopDownToDiag }; + static_assert(std::size(TrackPieceLengths) == EnumValue(TrackElemType::Count)); // rct2: 0x00998C95 @@ -1058,9 +1075,17 @@ namespace OpenRCT2::TrackMetaData { TrackCurve::LeftLarge, TrackCurve::LeftLarge }, // TrackElemType::LeftEighthBankToOrthogonalDown25 { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::RightEighthBankToOrthogonalDown25 { TrackElemType::DiagBrakes, TrackElemType::DiagBrakes }, // TrackElemType::DiagBrakes - { TrackCurve::None, TrackCurve::None }, // TrackElemType::DiagBlockBrakes + { TrackCurve::None, TrackCurve::None }, // TrackElemType::DiagBlockBrakes { TrackElemType::Down25Brakes, TrackElemType::Down25Brakes }, // TrackElemType::Down25Brakes { TrackElemType::DiagBooster, TrackElemType::DiagBooster }, // TrackElemType::DiagBooster + { TrackCurve::None, TrackCurve::None }, // TrackElemType::DiagFlatToUp60LongBase, + { TrackCurve::None, TrackCurve::None }, // TrackElemType::DiagUp60ToFlatLongBase, + { TrackCurve::None, TrackCurve::None }, // TrackElemType::DiagFlatToDown60LongBase, + { TrackCurve::None, TrackCurve::None }, // TrackElemType::DiagDown60ToFlatLongBase, + { TrackElemType::RightEighthDiveLoopDownToDiag , TrackCurve::None }, // TrackElemType::LeftEighthDiveLoopUpToOrthogonal + { TrackElemType::LeftEighthDiveLoopDownToDiag, TrackCurve::None }, // TrackElemType::RightEighthDiveLoopUpToOrthogonal + { TrackCurve::None, TrackElemType::RightEighthDiveLoopUpToOrthogonal }, // TrackElemType::LeftEighthDiveLoopDownToDiag + { TrackCurve::None, TrackElemType::LeftEighthDiveLoopUpToOrthogonal }, // TrackElemType::RightEighthDiveLoopDownToDiag }; static_assert(std::size(gTrackCurveChain) == EnumValue(TrackElemType::Count)); @@ -1596,6 +1621,14 @@ namespace OpenRCT2::TrackMetaData TrackElemType::None, // TrackElemType::DiagBlockBrakes TrackElemType::None, // TrackElemType::Down25Brakes TrackElemType::None, // TrackElemType::DiagBooster + TrackElemType::None, // TrackElemType::DiagFlatToUp60LongBase, + TrackElemType::None, // TrackElemType::DiagUp60ToFlatLongBase, + TrackElemType::None, // TrackElemType::DiagFlatToDown60LongBase, + TrackElemType::None, // TrackElemType::DiagDown60ToFlatLongBase, + TrackElemType::None, // TrackElemType::LeftEighthDiveLoopUpToOrthogonal + TrackElemType::None, // TrackElemType::RightEighthDiveLoopUpToOrthogonal + TrackElemType::None, // TrackElemType::LeftEighthDiveLoopDownToDiag + TrackElemType::None, // TrackElemType::RightEighthDiveLoopDownToDiag }; static_assert(std::size(AlternativeTrackTypes) == EnumValue(TrackElemType::Count)); @@ -1942,6 +1975,14 @@ namespace OpenRCT2::TrackMetaData 123456, // TrackElemType::DiagBlockBrakes 109824, // TrackElemType::Down25Brakes 123456, // TrackElemType::DiagBooster + 399690 , // TrackElemType::DiagFlatToUp60LongBase, + 399690, // TrackElemType::DiagUp60ToFlatLongBase, + 399690, // TrackElemType::DiagFlatToDown60LongBase, + 399690, // TrackElemType::DiagDown60ToFlatLongBase, + 458752, // TrackElemType::LeftEighthDiveLoopUpToOrthogonal + 458752, // TrackElemType::RightEighthDiveLoopUpToOrthogonal + 458752, // TrackElemType::LeftEighthDiveLoopDownToDiag + 458752, // TrackElemType::RightEighthDiveLoopDownToDiag }; static_assert(std::size(TrackPricing) == EnumValue(TrackElemType::Count)); @@ -2288,6 +2329,14 @@ namespace OpenRCT2::TrackMetaData TrackElemType::DiagBlockBrakes, TrackElemType::Down25Brakes, TrackElemType::DiagBooster, + TrackElemType::DiagFlatToUp60LongBase, // TrackElemType::DiagFlatToUp60LongBase, + TrackElemType::DiagUp60ToFlatLongBase, // TrackElemType::DiagUp60ToFlatLongBase, + TrackElemType::DiagFlatToDown60LongBase, // TrackElemType::DiagFlatToDown60LongBase, + TrackElemType::DiagDown60ToFlatLongBase, // TrackElemType::DiagDown60ToFlatLongBase, + TrackElemType::RightEighthDiveLoopUpToOrthogonal, // TrackElemType::LeftEighthDiveLoopUpToOrthogonal + TrackElemType::LeftEighthDiveLoopUpToOrthogonal, // TrackElemType::RightEighthDiveLoopUpToOrthogonal + TrackElemType::RightEighthDiveLoopDownToDiag, // TrackElemType::LeftEighthDiveLoopDownToDiag + TrackElemType::LeftEighthDiveLoopDownToDiag, // TrackElemType::RightEighthDiveLoopDownToDiag }; static_assert(std::size(TrackElementMirrorMap) == EnumValue(TrackElemType::Count)); @@ -2634,6 +2683,14 @@ namespace OpenRCT2::TrackMetaData (1 << 0), // TrackElemType::DiagBlockBrakes (1 << 0), // TrackElemType::Down25Brakes (1 << 0), // TrackElemType::DiagBooster + (1 << 0), // TrackElemType::DiagFlatToUp60LongBase, + (1 << 0), // TrackElemType::DiagUp60ToFlatLongBase, + (1 << 9), // TrackElemType::DiagFlatToDown60LongBase, + (1 << 9), // TrackElemType::DiagDown60ToFlatLongBase, + (1 << 0) | (1 << 5), // TrackElemType::LeftEighthDiveLoopUpToOrthogonal + (1 << 0) | (1 << 5), // TrackElemType::RightEighthDiveLoopUpToOrthogonal + (1 << 0) | (1 << 5), // TrackElemType::LeftEighthDiveLoopDownToDiag + (1 << 0) | (1 << 5), // TrackElemType::RightEighthDiveLoopDownToDiag }; static_assert(std::size(TrackHeightMarkerPositions) == EnumValue(TrackElemType::Count)); @@ -2983,6 +3040,14 @@ namespace OpenRCT2::TrackMetaData /* TrackElemType::DiagBlockBrakes */ 0, /* TrackElemType::Down25Brakes */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagBooster */ 0, + /* TrackElemType::DiagFlatToUp60LongBase */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_IS_STEEP_UP, + /* TrackElemType::DiagUp60ToFlatLongBase */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP, + /* TrackElemType::DiagFlatToDown60LongBase */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, + /* TrackElemType::DiagDown60ToFlatLongBase */ TRACK_ELEM_FLAG_DOWN, + /* TrackElemType::LeftEighthDiveLoopUpToOrthogonal */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, + /* TrackElemType::RightEighthDiveLoopUpToOrthogonal */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, + /* TrackElemType::LeftEighthDiveLoopDownToDiag */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, + /* TrackElemType::RightEighthDiveLoopDownToDiag */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, }; static_assert(std::size(TrackFlags) == EnumValue(TrackElemType::Count)); // clang-format on @@ -3333,6 +3398,14 @@ namespace OpenRCT2::TrackMetaData { TrackGroup::diagBlockBrakes, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::DiagBlockBrakes { TrackGroup::inclinedBrakes, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::Down25Brakes { TrackGroup::diagBooster, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::DiagBooster + { TrackGroup::slopeSteepLong, TrackPitch::Up60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 16 }, // TrackElemType::DiagFlatToUp60LongBase, + { TrackGroup::slopeSteepLong, TrackPitch::None, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 48 }, // TrackElemType::DiagUp60ToFlatLongBase, + { TrackGroup::slopeSteepLong, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::None, -32 }, // TrackElemType::DiagFlatToDown60LongBase, + { TrackGroup::slopeSteepLong, TrackPitch::None, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, -24 }, // TrackElemType::DiagDown60ToFlatLongBase, + { TrackGroup::diveLoop, TrackPitch::None, TrackPitch::Up60, TrackRoll::UpsideDown, TrackRoll::None, 56 }, // TrackElemType::LeftEighthDiveLoopUpToOrthogonal + { TrackGroup::diveLoop, TrackPitch::None, TrackPitch::Up60, TrackRoll::UpsideDown, TrackRoll::None, 56 }, // TrackElemType::RightEighthDiveLoopUpToOrthogonal + { TrackGroup::diveLoop, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -56 }, // TrackElemType::LeftEighthDiveLoopDownToDiag + { TrackGroup::diveLoop, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -56 }, // TrackElemType::RightEighthDiveLoopDownToDiag }; static_assert(std::size(TrackDefinitions) == EnumValue(TrackElemType::Count)); @@ -3395,7 +3468,9 @@ namespace OpenRCT2::TrackMetaData SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::L9, SpinFunction::R9, SpinFunction::L9, SpinFunction::R9, SpinFunction::L9, SpinFunction::R9, SpinFunction::L9, - SpinFunction::R9, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None + SpinFunction::R9, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, + SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::L9, SpinFunction::R9, SpinFunction::L9, + SpinFunction::R9 }; static_assert(std::size(TrackTypeToSpinFunction) == EnumValue(TrackElemType::Count)); @@ -3474,6 +3549,36 @@ namespace OpenRCT2::TrackMetaData return -(73 + progress); } + static int32_t EvaluatorDiveLoopUp(const int16_t progress) + { + return 385 - 2 * progress; + } + + static int32_t EvaluatorDiveLoopDown(const int16_t progress) + { + return 67 + 2 * progress; + } + + static int32_t EvaluatorDiveLoopUpLeft(const int16_t progress) + { + return 380 - 2 * progress; + } + + static int32_t EvaluatorDiveLoopUpRight(const int16_t progress) + { + return 2 * progress - 380; + } + + static int32_t EvaluatorDiveLoopDownLeft(const int16_t progress) + { + return -(62 + 2 * progress); + } + + static int32_t EvaluatorDiveLoopDownRight(const int16_t progress) + { + return 62 + 2 * progress; + } + static int32_t EvaluatorWaterSplash(const int16_t progress) { if (progress < 32) @@ -3816,9 +3921,13 @@ namespace OpenRCT2::TrackMetaData return EvaluatorConst<0>; case TrackElemType::FlatToUp60LongBase: case TrackElemType::Down60ToFlatLongBase: + case TrackElemType::DiagFlatToUp60LongBase: + case TrackElemType::DiagDown60ToFlatLongBase: return EvaluatorConst<0>; case TrackElemType::Up60ToFlatLongBase: case TrackElemType::FlatToDown60LongBase: + case TrackElemType::DiagUp60ToFlatLongBase: + case TrackElemType::DiagFlatToDown60LongBase: return EvaluatorConst<0>; case TrackElemType::ReverseFreefallSlope: case TrackElemType::AirThrustVerticalDownToLevel: @@ -3905,6 +4014,14 @@ namespace OpenRCT2::TrackMetaData return EvaluatorLargeZeroGRollDownLeft; case TrackElemType::RightLargeZeroGRollDown: return EvaluatorLargeZeroGRollDownRight; + case TrackElemType::LeftEighthDiveLoopUpToOrthogonal: + return EvaluatorDiveLoopUpLeft; + case TrackElemType::RightEighthDiveLoopUpToOrthogonal: + return EvaluatorDiveLoopUpRight; + case TrackElemType::LeftEighthDiveLoopDownToDiag: + return EvaluatorDiveLoopDownLeft; + case TrackElemType::RightEighthDiveLoopDownToDiag: + return EvaluatorDiveLoopDownRight; case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25: return EvaluatorConst<90>; case TrackElemType::RightBankToRightQuarterTurn3TilesUp25: @@ -4204,6 +4321,12 @@ namespace OpenRCT2::TrackMetaData case TrackElemType::Up60ToFlatLongBase: case TrackElemType::FlatToDown60LongBase: return EvaluatorConst<-160>; + case TrackElemType::DiagFlatToUp60LongBase: + case TrackElemType::DiagDown60ToFlatLongBase: + return EvaluatorConst<180>; + case TrackElemType::DiagUp60ToFlatLongBase: + case TrackElemType::DiagFlatToDown60LongBase: + return EvaluatorConst<-180>; case TrackElemType::ReverseFreefallSlope: case TrackElemType::AirThrustVerticalDownToLevel: return EvaluatorConst<120>; @@ -4293,6 +4416,12 @@ namespace OpenRCT2::TrackMetaData case TrackElemType::LeftLargeZeroGRollDown: case TrackElemType::RightLargeZeroGRollDown: return EvaluatorLargeZeroGRollDown; + case TrackElemType::LeftEighthDiveLoopUpToOrthogonal: + case TrackElemType::RightEighthDiveLoopUpToOrthogonal: + return EvaluatorDiveLoopUp; + case TrackElemType::LeftEighthDiveLoopDownToDiag: + case TrackElemType::RightEighthDiveLoopDownToDiag: + return EvaluatorDiveLoopDown; case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25: case TrackElemType::RightBankToRightQuarterTurn3TilesUp25: case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank: @@ -4691,6 +4820,14 @@ namespace OpenRCT2::TrackMetaData STR_BLOCK_BRAKES, // TrackElemType::DiagBlockBrakes STR_BRAKES, // TrackElemType::Down25Brakes STR_BOOSTER, // TrackElemType::DiagBooster + STR_EMPTY, // TrackElemType::DiagFlatToUp60LongBase, + STR_EMPTY, // TrackElemType::DiagUp60ToFlatLongBase, + STR_EMPTY, // TrackElemType::DiagFlatToDown60LongBase, + STR_EMPTY, // TrackElemType::DiagDown60ToFlatLongBase, + STR_DIVE_LOOP_LEFT, // TrackElemType::LeftEighthDiveLoopUpToOrthogonal + STR_DIVE_LOOP_RIGHT, // TrackElemType::RightEighthDiveLoopUpToOrthogonal + STR_DIVE_LOOP_LEFT, // TrackElemType::LeftEighthDiveLoopDownToDiag + STR_DIVE_LOOP_RIGHT, // TrackElemType::RightEighthDiveLoopDownToDiag }; static_assert(std::size(RideConfigurationStringIds) == EnumValue(TrackElemType::Count)); @@ -11713,6 +11850,263 @@ namespace OpenRCT2::TrackMetaData .clearance = { -32, 32, 0, 0, { 0b0010, 0 }, 0 }, }; + static constexpr SequenceDescriptor kDiagFlatToUp60LongBaseSeq0 = { + .clearance = { 0, 0, 0, 0, { 0b1101, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagFlatToUp60LongBaseSeq1 = { + .clearance = { 0, 32, 0, 16, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kDiagFlatToUp60LongBaseSeq2 = { + .clearance = { -32, 0, 0, 16, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kDiagFlatToUp60LongBaseSeq3 = { + .clearance = { -32, 32, 0, 32, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagFlatToUp60LongBaseSeq4 = { + .clearance = { -32, 64, 8, 40, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kDiagFlatToUp60LongBaseSeq5 = { + .clearance = { -64, 32, 8, 40, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kDiagFlatToUp60LongBaseSeq6 = { + .clearance = { -64, 64, 8, 64, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagFlatToUp60LongBaseSeq7 = { + .clearance = { -64, 96, 40, 88, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kDiagFlatToUp60LongBaseSeq8 = { + .clearance = { -96, 64, 40, 88, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kDiagFlatToUp60LongBaseSeq9 = { + .clearance = { -96, 96, 40, 104, { 0b0010, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagUp60ToFlatLongBaseSeq0 = { + .clearance = { 0, 0, 0, 64, { 0b1101, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagUp60ToFlatLongBaseSeq1 = { + .clearance = { 0, 32, 0, 72, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kDiagUp60ToFlatLongBaseSeq2 = { + .clearance = { -32, 0, 0, 72, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kDiagUp60ToFlatLongBaseSeq3 = { + .clearance = { -32, 32, 0, 80, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagUp60ToFlatLongBaseSeq4 = { + .clearance = { -32, 64, 56, 32, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kDiagUp60ToFlatLongBaseSeq5 = { + .clearance = { -64, 32, 56, 32, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kDiagUp60ToFlatLongBaseSeq6 = { + .clearance = { -64, 64, 56, 8, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagUp60ToFlatLongBaseSeq7 = { + .clearance = { -64, 96, 80, 8, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kDiagUp60ToFlatLongBaseSeq8 = { + .clearance = { -96, 64, 80, 8, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kDiagUp60ToFlatLongBaseSeq9 = { + .clearance = { -96, 96, 80, 8, { 0b0010, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagFlatToDown60LongBaseSeq0 = { + .clearance = { 0, 0, 80, 8, { 0b1101, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagFlatToDown60LongBaseSeq1 = { + .clearance = { 0, 32, 80, 8, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kDiagFlatToDown60LongBaseSeq2 = { + .clearance = { -32, 0, 80, 8, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kDiagFlatToDown60LongBaseSeq3 = { + .clearance = { -32, 32, 56, 8, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagFlatToDown60LongBaseSeq4 = { + .clearance = { -32, 64, 56, 32, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kDiagFlatToDown60LongBaseSeq5 = { + .clearance = { -64, 32, 56, 32, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kDiagFlatToDown60LongBaseSeq6 = { + .clearance = { -64, 64, 0, 80, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagFlatToDown60LongBaseSeq7 = { + .clearance = { -64, 96, 0, 72, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kDiagFlatToDown60LongBaseSeq8 = { + .clearance = { -96, 64, 0, 72, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kDiagFlatToDown60LongBaseSeq9 = { + .clearance = { -96, 96, 0, 64, { 0b0010, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagDown60ToFlatLongBaseSeq0 = { + .clearance = { 0, 0, 40, 104, { 0b1101, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagDown60ToFlatLongBaseSeq1 = { + .clearance = { 0, 32, 40, 88, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kDiagDown60ToFlatLongBaseSeq2 = { + .clearance = { -32, 0, 40, 88, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kDiagDown60ToFlatLongBaseSeq3 = { + .clearance = { -32, 32, 8, 64, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagDown60ToFlatLongBaseSeq4 = { + .clearance = { -32, 64, 8, 40, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kDiagDown60ToFlatLongBaseSeq5 = { + .clearance = { -64, 32, 8, 40, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kDiagDown60ToFlatLongBaseSeq6 = { + .clearance = { -64, 64, 0, 32, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kDiagDown60ToFlatLongBaseSeq7 = { + .clearance = { -64, 96, 0, 16, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kDiagDown60ToFlatLongBaseSeq8 = { + .clearance = { -96, 64, 0, 16, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kDiagDown60ToFlatLongBaseSeq9 = { + .clearance = { -96, 96, 0, 0, { 0b0010, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kLeftEighthDiveLoopUpToOrthogonalSeq0 = { + .clearance = { 0, 0, 0, 64, { 0b1101, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kLeftEighthDiveLoopUpToOrthogonalSeq1 = { + .clearance = { 0, 32, 0, 88, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kLeftEighthDiveLoopUpToOrthogonalSeq2 = { + .clearance = { -32, 0, 0, 88, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kLeftEighthDiveLoopUpToOrthogonalSeq3 = { + .clearance = { -32, 32, 32, 80, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b0010, + }; + static constexpr SequenceDescriptor kLeftEighthDiveLoopUpToOrthogonalSeq4 = { + .clearance = { -64, 32, 80, 48, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b1010, + }; + static constexpr SequenceDescriptor kLeftEighthDiveLoopUpToOrthogonalSeq5 = { + .clearance = { -96, 32, 112, 24, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b1010, + }; + static constexpr SequenceDescriptor kRightEighthDiveLoopUpToOrthogonalSeq0 = { + .clearance = { 0, 0, 0, 64, { 0b1101, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kRightEighthDiveLoopUpToOrthogonalSeq1 = { + .clearance = { -32, 0, 0, 88, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kRightEighthDiveLoopUpToOrthogonalSeq2 = { + .clearance = { 0, 32, 0, 88, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kRightEighthDiveLoopUpToOrthogonalSeq3 = { + .clearance = { -32, 32, 32, 80, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b0001, + }; + static constexpr SequenceDescriptor kRightEighthDiveLoopUpToOrthogonalSeq4 = { + .clearance = { -32, 64, 80, 48, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b0101, + }; + static constexpr SequenceDescriptor kRightEighthDiveLoopUpToOrthogonalSeq5 = { + .clearance = { -32, 96, 112, 24, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b0101, + }; + static constexpr SequenceDescriptor kLeftEighthDiveLoopDownToDiagSeq0 = { + .clearance = { 0, 0, 112, 24, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b1010, + }; + static constexpr SequenceDescriptor kLeftEighthDiveLoopDownToDiagSeq1 = { + .clearance = { -32, 0, 80, 48, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b1010, + }; + static constexpr SequenceDescriptor kLeftEighthDiveLoopDownToDiagSeq2 = { + .clearance = { -64, 0, 32, 80, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b0010, + }; + static constexpr SequenceDescriptor kLeftEighthDiveLoopDownToDiagSeq3 = { + .clearance = { -64, -32, 0, 88, { 0b1000, 0 }, 0 }, + .allowedWallEdges = 0b1100, + }; + static constexpr SequenceDescriptor kLeftEighthDiveLoopDownToDiagSeq4 = { + .clearance = { -96, 0, 0, 88, { 0b0010, 0 }, 0 }, + .allowedWallEdges = 0b0011, + }; + static constexpr SequenceDescriptor kLeftEighthDiveLoopDownToDiagSeq5 = { + .clearance = { -96, -32, 0, 64, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceDescriptor kRightEighthDiveLoopDownToDiagSeq0 = { + .clearance = { 0, 0, 112, 24, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b1010, + }; + static constexpr SequenceDescriptor kRightEighthDiveLoopDownToDiagSeq1 = { + .clearance = { -32, 0, 80, 48, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b1010, + }; + static constexpr SequenceDescriptor kRightEighthDiveLoopDownToDiagSeq2 = { + .clearance = { -64, 0, 32, 80, { 0b1111, 0 }, 0 }, + .allowedWallEdges = 0b1000, + }; + static constexpr SequenceDescriptor kRightEighthDiveLoopDownToDiagSeq3 = { + .clearance = { -64, 32, 0, 88, { 0b0100, 0 }, 0 }, + .allowedWallEdges = 0b0110, + }; + static constexpr SequenceDescriptor kRightEighthDiveLoopDownToDiagSeq4 = { + .clearance = { -96, 0, 0, 88, { 0b0001, 0 }, 0 }, + .allowedWallEdges = 0b1001, + }; + static constexpr SequenceDescriptor kRightEighthDiveLoopDownToDiagSeq5 = { + .clearance = { -96, 32, 0, 64, { 0b0010, 0 }, 0 }, + .allowedWallEdges = 0b0000, + }; + static constexpr SequenceData kSequenceDescriptorsByElement[] = { /* TrackElemType::Flat */ { 1, { kFlatSeq0 } }, /* TrackElemType::EndStation */ { 1, { kEndStationSeq0 } }, @@ -12609,6 +13003,46 @@ namespace OpenRCT2::TrackMetaData /* TrackElemType::InclinedBrakes */ { 1, { kDown25Seq0 } }, /* TrackElemType::DiagBooster */ { 4, { kDiagFlatSeq0, kDiagFlatSeq1, kDiagFlatSeq2, kDiagFlatSeq3 } }, + /* TrackElemType::DiagFlatToUp60LongBase */ + { 10, + { kDiagFlatToUp60LongBaseSeq0, kDiagFlatToUp60LongBaseSeq1, kDiagFlatToUp60LongBaseSeq2, kDiagFlatToUp60LongBaseSeq3, + kDiagFlatToUp60LongBaseSeq4, kDiagFlatToUp60LongBaseSeq5, kDiagFlatToUp60LongBaseSeq6, kDiagFlatToUp60LongBaseSeq7, + kDiagFlatToUp60LongBaseSeq8, kDiagFlatToUp60LongBaseSeq9 } }, + /* TrackElemType::DiagUp60ToFlatLongBase */ + { 10, + { kDiagUp60ToFlatLongBaseSeq0, kDiagUp60ToFlatLongBaseSeq1, kDiagUp60ToFlatLongBaseSeq2, kDiagUp60ToFlatLongBaseSeq3, + kDiagUp60ToFlatLongBaseSeq4, kDiagUp60ToFlatLongBaseSeq5, kDiagUp60ToFlatLongBaseSeq6, kDiagUp60ToFlatLongBaseSeq7, + kDiagUp60ToFlatLongBaseSeq8, kDiagUp60ToFlatLongBaseSeq9 } }, + /* TrackElemType::DiagFlatToDown60LongBase */ + { 10, + { kDiagFlatToDown60LongBaseSeq0, kDiagFlatToDown60LongBaseSeq1, kDiagFlatToDown60LongBaseSeq2, + kDiagFlatToDown60LongBaseSeq3, kDiagFlatToDown60LongBaseSeq4, kDiagFlatToDown60LongBaseSeq5, + kDiagFlatToDown60LongBaseSeq6, kDiagFlatToDown60LongBaseSeq7, kDiagFlatToDown60LongBaseSeq8, + kDiagFlatToDown60LongBaseSeq9 } }, + /* TrackElemType::DiagDown60ToFlatLongBase */ + { 10, + { kDiagDown60ToFlatLongBaseSeq0, kDiagDown60ToFlatLongBaseSeq1, kDiagDown60ToFlatLongBaseSeq2, + kDiagDown60ToFlatLongBaseSeq3, kDiagDown60ToFlatLongBaseSeq4, kDiagDown60ToFlatLongBaseSeq5, + kDiagDown60ToFlatLongBaseSeq6, kDiagDown60ToFlatLongBaseSeq7, kDiagDown60ToFlatLongBaseSeq8, + kDiagDown60ToFlatLongBaseSeq9 } }, + /* TrackElemType::LeftEighthDiveLoopUpToOrthogonal */ + { 6, + { kLeftEighthDiveLoopUpToOrthogonalSeq0, kLeftEighthDiveLoopUpToOrthogonalSeq1, kLeftEighthDiveLoopUpToOrthogonalSeq2, + kLeftEighthDiveLoopUpToOrthogonalSeq3, kLeftEighthDiveLoopUpToOrthogonalSeq4, + kLeftEighthDiveLoopUpToOrthogonalSeq5 } }, + /* TrackElemType::RightEighthDiveLoopUpToOrthogonal */ + { 6, + { kRightEighthDiveLoopUpToOrthogonalSeq0, kRightEighthDiveLoopUpToOrthogonalSeq1, + kRightEighthDiveLoopUpToOrthogonalSeq2, kRightEighthDiveLoopUpToOrthogonalSeq3, + kRightEighthDiveLoopUpToOrthogonalSeq4, kRightEighthDiveLoopUpToOrthogonalSeq5 } }, + /* TrackElemType::LeftEighthDiveLoopDownToDiag */ + { 6, + { kLeftEighthDiveLoopDownToDiagSeq0, kLeftEighthDiveLoopDownToDiagSeq1, kLeftEighthDiveLoopDownToDiagSeq2, + kLeftEighthDiveLoopDownToDiagSeq3, kLeftEighthDiveLoopDownToDiagSeq4, kLeftEighthDiveLoopDownToDiagSeq5 } }, + /* TrackElemType::RightEighthDiveLoopDownToDiag */ + { 6, + { kRightEighthDiveLoopDownToDiagSeq0, kRightEighthDiveLoopDownToDiagSeq1, kRightEighthDiveLoopDownToDiagSeq2, + kRightEighthDiveLoopDownToDiagSeq3, kRightEighthDiveLoopDownToDiagSeq4, kRightEighthDiveLoopDownToDiagSeq5 } }, }; static constexpr auto BuildDescriptorTable() diff --git a/src/openrct2/ride/VehicleSubpositionData.cpp b/src/openrct2/ride/VehicleSubpositionData.cpp index 6056080f71..79313ae97e 100644 --- a/src/openrct2/ride/VehicleSubpositionData.cpp +++ b/src/openrct2/ride/VehicleSubpositionData.cpp @@ -27265,11 +27265,981 @@ CREATE_VEHICLE_INFO(TrackVehicleInfoRightEighthBankToOrthogonalDown253, { }) +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagFlatToUp60LongBase0,{ + { 15, 16, 0, 4, 0, 0 },{ 14, 17, 0, 4, 0, 0 },{ 13, 18, 0, 4, 0, 0 },{ 12, 19, 0, 4, 0, 0 },{ 11, 20, 0, 4, 0, 0 }, + { 10, 21, 0, 4, 0, 0 },{ 9, 22, 0, 4, 50, 0 },{ 8, 23, 1, 4, 50, 0 },{ 7, 24, 1, 4, 50, 0 },{ 6, 25, 1, 4, 50, 0 }, + { 5, 26, 1, 4, 50, 0 },{ 4, 27, 1, 4, 50, 0 },{ 3, 28, 2, 4, 50, 0 },{ 2, 29, 2, 4, 50, 0 },{ 1, 30, 2, 4, 50, 0 }, + { 0, 31, 2, 4, 50, 0 },{ -1, 32, 3, 4, 50, 0 },{ -2, 33, 3, 4, 50, 0 },{ -3, 34, 3, 4, 50, 0 },{ -4, 35, 4, 4, 50, 0 }, + { -5, 36, 4, 4, 50, 0 },{ -6, 37, 4, 4, 51, 0 },{ -7, 38, 5, 4, 51, 0 },{ -8, 39, 5, 4, 51, 0 },{ -9, 40, 6, 4, 51, 0 }, + { -10, 41, 6, 4, 51, 0 },{ -11, 42, 6, 4, 51, 0 },{ -12, 43, 7, 4, 51, 0 },{ -13, 44, 7, 4, 51, 0 },{ -14, 45, 8, 4, 51, 0 }, + { -15, 46, 9, 4, 51, 0 },{ -16, 47, 9, 4, 51, 0 },{ -17, 48, 10, 4, 51, 0 },{ -18, 49, 10, 4, 2, 0 },{ -19, 50, 11, 4, 2, 0 }, + { -20, 51, 12, 4, 2, 0 },{ -21, 52, 12, 4, 2, 0 },{ -22, 53, 13, 4, 2, 0 },{ -23, 54, 14, 4, 2, 0 },{ -24, 55, 14, 4, 2, 0 }, + { -25, 56, 15, 4, 2, 0 },{ -26, 57, 16, 4, 2, 0 },{ -27, 58, 17, 4, 2, 0 },{ -28, 59, 17, 4, 2, 0 },{ -29, 60, 18, 4, 2, 0 }, + { -30, 61, 19, 4, 2, 0 },{ -31, 62, 20, 4, 2, 0 },{ -32, 63, 21, 4, 2, 0 },{ -33, 64, 22, 4, 2, 0 },{ -34, 65, 23, 4, 2, 0 }, + { -35, 66, 24, 4, 2, 0 },{ -36, 67, 24, 4, 2, 0 },{ -37, 68, 25, 4, 2, 0 },{ -38, 69, 26, 4, 2, 0 },{ -39, 70, 27, 4, 2, 0 }, + { -40, 71, 28, 4, 2, 0 },{ -41, 72, 29, 4, 3, 0 },{ -42, 73, 30, 4, 3, 0 },{ -43, 74, 31, 4, 3, 0 },{ -44, 75, 32, 4, 3, 0 }, + { -45, 76, 33, 4, 3, 0 },{ -46, 77, 34, 4, 3, 0 },{ -47, 78, 35, 4, 3, 0 },{ -48, 79, 36, 4, 3, 0 },{ -48, 79, 37, 4, 3, 0 }, + { -49, 80, 38, 4, 3, 0 },{ -50, 81, 39, 4, 3, 0 },{ -51, 82, 40, 4, 3, 0 },{ -52, 83, 41, 4, 3, 0 },{ -52, 83, 42, 4, 3, 0 }, + { -53, 84, 43, 4, 3, 0 },{ -54, 85, 44, 4, 3, 0 },{ -55, 86, 45, 4, 3, 0 },{ -55, 86, 46, 4, 3, 0 },{ -56, 87, 47, 4, 3, 0 }, + { -57, 88, 48, 4, 3, 0 },{ -57, 88, 49, 4, 3, 0 },{ -58, 89, 50, 4, 3, 0 },{ -59, 90, 51, 4, 3, 0 },{ -59, 90, 52, 4, 3, 0 }, + { -60, 91, 53, 4, 3, 0 },{ -61, 92, 54, 4, 3, 0 },{ -61, 92, 55, 4, 3, 0 },{ -62, 93, 56, 4, 3, 0 },{ -63, 94, 57, 4, 3, 0 }, + { -63, 94, 58, 4, 3, 0 },{ -64, 95, 59, 4, 3, 0 },{ -65, 96, 60, 4, 3, 0 },{ -65, 96, 61, 4, 3, 0 },{ -66, 97, 62, 4, 3, 0 }, + { -67, 98, 63, 4, 3, 0 },{ -67, 98, 64, 4, 3, 0 },{ -68, 99, 65, 4, 3, 0 },{ -68, 99, 66, 4, 3, 0 },{ -69, 100, 67, 4, 3, 0 }, + { -70, 101, 68, 4, 52, 0 },{ -70, 101, 69, 4, 52, 0 },{ -71, 102, 70, 4, 52, 0 },{ -71, 102, 71, 4, 52, 0 },{ -72, 103, 72, 4, 52, 0 }, + { -72, 103, 73, 4, 52, 0 },{ -73, 104, 74, 4, 52, 0 },{ -73, 104, 75, 4, 52, 0 },{ -74, 105, 76, 4, 52, 0 },{ -75, 106, 77, 4, 52, 0 }, + { -75, 106, 78, 4, 52, 0 },{ -76, 107, 79, 4, 52, 0 },{ -76, 107, 80, 4, 52, 0 },{ -77, 108, 81, 4, 52, 0 },{ -77, 108, 82, 4, 52, 0 }, + { -78, 109, 83, 4, 52, 0 },{ -78, 109, 84, 4, 52, 0 },{ -79, 110, 85, 4, 52, 0 },{ -79, 110, 86, 4, 52, 0 },{ -80, 111, 87, 4, 52, 0 }, + { -80, 111, 88, 4, 52, 0 },}) +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagFlatToUp60LongBase1,{ + { 16, 16, 0, 12, 0, 0 },{ 17, 17, 0, 12, 0, 0 },{ 18, 18, 0, 12, 0, 0 },{ 19, 19, 0, 12, 0, 0 },{ 20, 20, 0, 12, 0, 0 }, + { 21, 21, 0, 12, 0, 0 },{ 22, 22, 0, 12, 0, 0 },{ 23, 23, 0, 12, 50, 0 },{ 24, 24, 1, 12, 50, 0 },{ 25, 25, 1, 12, 50, 0 }, + { 26, 26, 1, 12, 50, 0 },{ 27, 27, 1, 12, 50, 0 },{ 28, 28, 1, 12, 50, 0 },{ 29, 29, 2, 12, 50, 0 },{ 30, 30, 2, 12, 50, 0 }, + { 31, 31, 2, 12, 50, 0 },{ 32, 32, 2, 12, 50, 0 },{ 33, 33, 3, 12, 50, 0 },{ 34, 34, 3, 12, 50, 0 },{ 35, 35, 3, 12, 50, 0 }, + { 36, 36, 4, 12, 50, 0 },{ 37, 37, 4, 12, 50, 0 },{ 38, 38, 4, 12, 51, 0 },{ 39, 39, 5, 12, 51, 0 },{ 40, 40, 5, 12, 51, 0 }, + { 41, 41, 6, 12, 51, 0 },{ 42, 42, 6, 12, 51, 0 },{ 43, 43, 6, 12, 51, 0 },{ 44, 44, 7, 12, 51, 0 },{ 45, 45, 7, 12, 51, 0 }, + { 46, 46, 8, 12, 51, 0 },{ 47, 47, 9, 12, 51, 0 },{ 48, 48, 9, 12, 51, 0 },{ 49, 49, 10, 12, 51, 0 },{ 50, 50, 10, 12, 2, 0 }, + { 51, 51, 11, 12, 2, 0 },{ 52, 52, 12, 12, 2, 0 },{ 53, 53, 12, 12, 2, 0 },{ 54, 54, 13, 12, 2, 0 },{ 55, 55, 14, 12, 2, 0 }, + { 56, 56, 14, 12, 2, 0 },{ 57, 57, 15, 12, 2, 0 },{ 58, 58, 16, 12, 2, 0 },{ 59, 59, 17, 12, 2, 0 },{ 60, 60, 17, 12, 2, 0 }, + { 61, 61, 18, 12, 2, 0 },{ 62, 62, 19, 12, 2, 0 },{ 63, 63, 20, 12, 2, 0 },{ 64, 64, 21, 12, 2, 0 },{ 65, 65, 22, 12, 2, 0 }, + { 66, 66, 23, 12, 2, 0 },{ 67, 67, 24, 12, 2, 0 },{ 68, 68, 24, 12, 2, 0 },{ 69, 69, 25, 12, 2, 0 },{ 70, 70, 26, 12, 2, 0 }, + { 71, 71, 27, 12, 2, 0 },{ 72, 72, 28, 12, 2, 0 },{ 73, 73, 29, 12, 3, 0 },{ 74, 74, 30, 12, 3, 0 },{ 75, 75, 31, 12, 3, 0 }, + { 76, 76, 32, 12, 3, 0 },{ 77, 77, 33, 12, 3, 0 },{ 78, 78, 34, 12, 3, 0 },{ 79, 79, 35, 12, 3, 0 },{ 80, 80, 36, 12, 3, 0 }, + { 80, 80, 37, 12, 3, 0 },{ 81, 81, 38, 12, 3, 0 },{ 82, 82, 39, 12, 3, 0 },{ 83, 83, 40, 12, 3, 0 },{ 84, 84, 41, 12, 3, 0 }, + { 84, 84, 42, 12, 3, 0 },{ 85, 85, 43, 12, 3, 0 },{ 86, 86, 44, 12, 3, 0 },{ 87, 87, 45, 12, 3, 0 },{ 87, 87, 46, 12, 3, 0 }, + { 88, 88, 47, 12, 3, 0 },{ 89, 89, 48, 12, 3, 0 },{ 89, 89, 49, 12, 3, 0 },{ 90, 90, 50, 12, 3, 0 },{ 91, 91, 51, 12, 3, 0 }, + { 91, 91, 52, 12, 3, 0 },{ 92, 92, 53, 12, 3, 0 },{ 93, 93, 54, 12, 3, 0 },{ 93, 93, 55, 12, 3, 0 },{ 94, 94, 56, 12, 3, 0 }, + { 95, 95, 57, 12, 3, 0 },{ 95, 95, 58, 12, 3, 0 },{ 96, 96, 59, 12, 3, 0 },{ 97, 97, 60, 12, 3, 0 },{ 97, 97, 61, 12, 3, 0 }, + { 98, 98, 62, 12, 3, 0 },{ 99, 99, 63, 12, 3, 0 },{ 99, 99, 64, 12, 3, 0 },{ 100, 100, 65, 12, 3, 0 },{ 100, 100, 66, 12, 3, 0 }, + { 101, 101, 67, 12, 3, 0 },{ 102, 102, 68, 12, 52, 0 },{ 102, 102, 69, 12, 52, 0 },{ 103, 103, 70, 12, 52, 0 },{ 103, 103, 71, 12, 52, 0 }, + { 104, 104, 72, 12, 52, 0 },{ 104, 104, 73, 12, 52, 0 },{ 105, 105, 74, 12, 52, 0 },{ 105, 105, 75, 12, 52, 0 },{ 106, 106, 76, 12, 52, 0 }, + { 107, 107, 77, 12, 52, 0 },{ 107, 107, 78, 12, 52, 0 },{ 108, 108, 79, 12, 52, 0 },{ 108, 108, 80, 12, 52, 0 },{ 109, 109, 81, 12, 52, 0 }, + { 109, 109, 82, 12, 52, 0 },{ 110, 110, 83, 12, 52, 0 },{ 110, 110, 84, 12, 52, 0 },{ 111, 111, 85, 12, 52, 0 },{ 111, 111, 86, 12, 52, 0 }, + { 112, 112, 87, 12, 52, 0 },}) +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagFlatToUp60LongBase2,{ + { 16, 15, 0, 20, 0, 0 },{ 17, 14, 0, 20, 0, 0 },{ 18, 13, 0, 20, 0, 0 },{ 19, 12, 0, 20, 0, 0 },{ 20, 11, 0, 20, 0, 0 }, + { 21, 10, 0, 20, 0, 0 },{ 22, 9, 0, 20, 0, 0 },{ 23, 8, 0, 20, 50, 0 },{ 24, 7, 1, 20, 50, 0 },{ 25, 6, 1, 20, 50, 0 }, + { 26, 5, 1, 20, 50, 0 },{ 27, 4, 1, 20, 50, 0 },{ 28, 3, 1, 20, 50, 0 },{ 29, 2, 2, 20, 50, 0 },{ 30, 1, 2, 20, 50, 0 }, + { 31, 0, 2, 20, 50, 0 },{ 32, -1, 2, 20, 50, 0 },{ 33, -2, 3, 20, 50, 0 },{ 34, -3, 3, 20, 50, 0 },{ 35, -4, 3, 20, 50, 0 }, + { 36, -5, 4, 20, 50, 0 },{ 37, -6, 4, 20, 50, 0 },{ 38, -7, 4, 20, 51, 0 },{ 39, -8, 5, 20, 51, 0 },{ 40, -9, 5, 20, 51, 0 }, + { 41, -10, 6, 20, 51, 0 },{ 42, -11, 6, 20, 51, 0 },{ 43, -12, 6, 20, 51, 0 },{ 44, -13, 7, 20, 51, 0 },{ 45, -14, 7, 20, 51, 0 }, + { 46, -15, 8, 20, 51, 0 },{ 47, -16, 9, 20, 51, 0 },{ 48, -17, 9, 20, 51, 0 },{ 49, -18, 10, 20, 51, 0 },{ 50, -19, 10, 20, 2, 0 }, + { 51, -20, 11, 20, 2, 0 },{ 52, -21, 12, 20, 2, 0 },{ 53, -22, 12, 20, 2, 0 },{ 54, -23, 13, 20, 2, 0 },{ 55, -24, 14, 20, 2, 0 }, + { 56, -25, 14, 20, 2, 0 },{ 57, -26, 15, 20, 2, 0 },{ 58, -27, 16, 20, 2, 0 },{ 59, -28, 17, 20, 2, 0 },{ 60, -29, 17, 20, 2, 0 }, + { 61, -30, 18, 20, 2, 0 },{ 62, -31, 19, 20, 2, 0 },{ 63, -32, 20, 20, 2, 0 },{ 64, -33, 21, 20, 2, 0 },{ 65, -34, 22, 20, 2, 0 }, + { 66, -35, 23, 20, 2, 0 },{ 67, -36, 24, 20, 2, 0 },{ 68, -37, 24, 20, 2, 0 },{ 69, -38, 25, 20, 2, 0 },{ 70, -39, 26, 20, 2, 0 }, + { 71, -40, 27, 20, 2, 0 },{ 72, -41, 28, 20, 2, 0 },{ 73, -42, 29, 20, 3, 0 },{ 74, -43, 30, 20, 3, 0 },{ 75, -44, 31, 20, 3, 0 }, + { 76, -45, 32, 20, 3, 0 },{ 77, -46, 33, 20, 3, 0 },{ 78, -47, 34, 20, 3, 0 },{ 79, -48, 35, 20, 3, 0 },{ 80, -49, 36, 20, 3, 0 }, + { 80, -49, 37, 20, 3, 0 },{ 81, -50, 38, 20, 3, 0 },{ 82, -51, 39, 20, 3, 0 },{ 83, -52, 40, 20, 3, 0 },{ 84, -53, 41, 20, 3, 0 }, + { 84, -53, 42, 20, 3, 0 },{ 85, -54, 43, 20, 3, 0 },{ 86, -55, 44, 20, 3, 0 },{ 87, -56, 45, 20, 3, 0 },{ 87, -56, 46, 20, 3, 0 }, + { 88, -57, 47, 20, 3, 0 },{ 89, -58, 48, 20, 3, 0 },{ 89, -58, 49, 20, 3, 0 },{ 90, -59, 50, 20, 3, 0 },{ 91, -60, 51, 20, 3, 0 }, + { 91, -60, 52, 20, 3, 0 },{ 92, -61, 53, 20, 3, 0 },{ 93, -62, 54, 20, 3, 0 },{ 93, -62, 55, 20, 3, 0 },{ 94, -63, 56, 20, 3, 0 }, + { 95, -64, 57, 20, 3, 0 },{ 95, -64, 58, 20, 3, 0 },{ 96, -65, 59, 20, 3, 0 },{ 97, -66, 60, 20, 3, 0 },{ 97, -66, 61, 20, 3, 0 }, + { 98, -67, 62, 20, 3, 0 },{ 99, -68, 63, 20, 3, 0 },{ 99, -68, 64, 20, 3, 0 },{ 100, -69, 65, 20, 3, 0 },{ 100, -69, 66, 20, 3, 0 }, + { 101, -70, 67, 20, 3, 0 },{ 102, -71, 68, 20, 52, 0 },{ 102, -71, 69, 20, 52, 0 },{ 103, -72, 70, 20, 52, 0 },{ 103, -72, 71, 20, 52, 0 }, + { 104, -73, 72, 20, 52, 0 },{ 104, -73, 73, 20, 52, 0 },{ 105, -74, 74, 20, 52, 0 },{ 105, -74, 75, 20, 52, 0 },{ 106, -75, 76, 20, 52, 0 }, + { 107, -76, 77, 20, 52, 0 },{ 107, -76, 78, 20, 52, 0 },{ 108, -77, 79, 20, 52, 0 },{ 108, -77, 80, 20, 52, 0 },{ 109, -78, 81, 20, 52, 0 }, + { 109, -78, 82, 20, 52, 0 },{ 110, -79, 83, 20, 52, 0 },{ 110, -79, 84, 20, 52, 0 },{ 111, -80, 85, 20, 52, 0 },{ 111, -80, 86, 20, 52, 0 }, + { 112, -81, 87, 20, 52, 0 },}) +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagFlatToUp60LongBase3,{ + { 15, 15, 0, 28, 0, 0 },{ 14, 14, 0, 28, 0, 0 },{ 13, 13, 0, 28, 0, 0 },{ 12, 12, 0, 28, 0, 0 },{ 11, 11, 0, 28, 0, 0 }, + { 10, 10, 0, 28, 0, 0 },{ 9, 9, 0, 28, 50, 0 },{ 8, 8, 1, 28, 50, 0 },{ 7, 7, 1, 28, 50, 0 },{ 6, 6, 1, 28, 50, 0 }, + { 5, 5, 1, 28, 50, 0 },{ 4, 4, 1, 28, 50, 0 },{ 3, 3, 2, 28, 50, 0 },{ 2, 2, 2, 28, 50, 0 },{ 1, 1, 2, 28, 50, 0 }, + { 0, 0, 2, 28, 50, 0 },{ -1, -1, 3, 28, 50, 0 },{ -2, -2, 3, 28, 50, 0 },{ -3, -3, 3, 28, 50, 0 },{ -4, -4, 4, 28, 50, 0 }, + { -5, -5, 4, 28, 50, 0 },{ -6, -6, 4, 28, 51, 0 },{ -7, -7, 5, 28, 51, 0 },{ -8, -8, 5, 28, 51, 0 },{ -9, -9, 6, 28, 51, 0 }, + { -10, -10, 6, 28, 51, 0 },{ -11, -11, 6, 28, 51, 0 },{ -12, -12, 7, 28, 51, 0 },{ -13, -13, 7, 28, 51, 0 },{ -14, -14, 8, 28, 51, 0 }, + { -15, -15, 9, 28, 51, 0 },{ -16, -16, 9, 28, 51, 0 },{ -17, -17, 10, 28, 51, 0 },{ -18, -18, 10, 28, 2, 0 },{ -19, -19, 11, 28, 2, 0 }, + { -20, -20, 12, 28, 2, 0 },{ -21, -21, 12, 28, 2, 0 },{ -22, -22, 13, 28, 2, 0 },{ -23, -23, 14, 28, 2, 0 },{ -24, -24, 14, 28, 2, 0 }, + { -25, -25, 15, 28, 2, 0 },{ -26, -26, 16, 28, 2, 0 },{ -27, -27, 17, 28, 2, 0 },{ -28, -28, 17, 28, 2, 0 },{ -29, -29, 18, 28, 2, 0 }, + { -30, -30, 19, 28, 2, 0 },{ -31, -31, 20, 28, 2, 0 },{ -32, -32, 21, 28, 2, 0 },{ -33, -33, 22, 28, 2, 0 },{ -34, -34, 23, 28, 2, 0 }, + { -35, -35, 24, 28, 2, 0 },{ -36, -36, 24, 28, 2, 0 },{ -37, -37, 25, 28, 2, 0 },{ -38, -38, 26, 28, 2, 0 },{ -39, -39, 27, 28, 2, 0 }, + { -40, -40, 28, 28, 2, 0 },{ -41, -41, 29, 28, 3, 0 },{ -42, -42, 30, 28, 3, 0 },{ -43, -43, 31, 28, 3, 0 },{ -44, -44, 32, 28, 3, 0 }, + { -45, -45, 33, 28, 3, 0 },{ -46, -46, 34, 28, 3, 0 },{ -47, -47, 35, 28, 3, 0 },{ -48, -48, 36, 28, 3, 0 },{ -48, -48, 37, 28, 3, 0 }, + { -49, -49, 38, 28, 3, 0 },{ -50, -50, 39, 28, 3, 0 },{ -51, -51, 40, 28, 3, 0 },{ -52, -52, 41, 28, 3, 0 },{ -52, -52, 42, 28, 3, 0 }, + { -53, -53, 43, 28, 3, 0 },{ -54, -54, 44, 28, 3, 0 },{ -55, -55, 45, 28, 3, 0 },{ -55, -55, 46, 28, 3, 0 },{ -56, -56, 47, 28, 3, 0 }, + { -57, -57, 48, 28, 3, 0 },{ -57, -57, 49, 28, 3, 0 },{ -58, -58, 50, 28, 3, 0 },{ -59, -59, 51, 28, 3, 0 },{ -59, -59, 52, 28, 3, 0 }, + { -60, -60, 53, 28, 3, 0 },{ -61, -61, 54, 28, 3, 0 },{ -61, -61, 55, 28, 3, 0 },{ -62, -62, 56, 28, 3, 0 },{ -63, -63, 57, 28, 3, 0 }, + { -63, -63, 58, 28, 3, 0 },{ -64, -64, 59, 28, 3, 0 },{ -65, -65, 60, 28, 3, 0 },{ -65, -65, 61, 28, 3, 0 },{ -66, -66, 62, 28, 3, 0 }, + { -67, -67, 63, 28, 3, 0 },{ -67, -67, 64, 28, 3, 0 },{ -68, -68, 65, 28, 3, 0 },{ -68, -68, 66, 28, 3, 0 },{ -69, -69, 67, 28, 3, 0 }, + { -70, -70, 68, 28, 52, 0 },{ -70, -70, 69, 28, 52, 0 },{ -71, -71, 70, 28, 52, 0 },{ -71, -71, 71, 28, 52, 0 },{ -72, -72, 72, 28, 52, 0 }, + { -72, -72, 73, 28, 52, 0 },{ -73, -73, 74, 28, 52, 0 },{ -73, -73, 75, 28, 52, 0 },{ -74, -74, 76, 28, 52, 0 },{ -75, -75, 77, 28, 52, 0 }, + { -75, -75, 78, 28, 52, 0 },{ -76, -76, 79, 28, 52, 0 },{ -76, -76, 80, 28, 52, 0 },{ -77, -77, 81, 28, 52, 0 },{ -77, -77, 82, 28, 52, 0 }, + { -78, -78, 83, 28, 52, 0 },{ -78, -78, 84, 28, 52, 0 },{ -79, -79, 85, 28, 52, 0 },{ -79, -79, 86, 28, 52, 0 },{ -80, -80, 87, 28, 52, 0 }, + { -80, -80, 88, 28, 52, 0 },}) +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagUp60ToFlatLongBase0,{ + { 15, 16, 1, 4, 52, 0 },{ 15, 16, 2, 4, 52, 0 },{ 14, 17, 3, 4, 52, 0 },{ 14, 17, 4, 4, 52, 0 },{ 13, 18, 5, 4, 52, 0 }, + { 13, 18, 6, 4, 52, 0 },{ 12, 19, 7, 4, 52, 0 },{ 12, 19, 8, 4, 52, 0 },{ 11, 20, 9, 4, 52, 0 },{ 11, 20, 10, 4, 52, 0 }, + { 10, 21, 11, 4, 52, 0 },{ 9, 22, 12, 4, 52, 0 },{ 9, 22, 13, 4, 52, 0 },{ 8, 23, 14, 4, 52, 0 },{ 8, 23, 15, 4, 52, 0 }, + { 7, 24, 16, 4, 52, 0 },{ 7, 24, 17, 4, 52, 0 },{ 6, 25, 18, 4, 52, 0 },{ 6, 25, 19, 4, 52, 0 },{ 5, 26, 20, 4, 3, 0 }, + { 4, 27, 21, 4, 3, 0 },{ 4, 27, 22, 4, 3, 0 },{ 3, 28, 23, 4, 3, 0 },{ 3, 28, 24, 4, 3, 0 },{ 2, 29, 25, 4, 3, 0 }, + { 1, 30, 26, 4, 3, 0 },{ 1, 30, 27, 4, 3, 0 },{ 0, 31, 28, 4, 3, 0 },{ -1, 32, 29, 4, 3, 0 },{ -1, 32, 30, 4, 3, 0 }, + { -2, 33, 31, 4, 3, 0 },{ -2, 33, 32, 4, 3, 0 },{ -3, 34, 33, 4, 3, 0 },{ -4, 35, 34, 4, 3, 0 },{ -4, 35, 35, 4, 3, 0 }, + { -5, 36, 36, 4, 3, 0 },{ -6, 37, 37, 4, 3, 0 },{ -7, 38, 38, 4, 3, 0 },{ -7, 38, 39, 4, 3, 0 },{ -8, 39, 40, 4, 3, 0 }, + { -9, 40, 41, 4, 3, 0 },{ -9, 40, 42, 4, 3, 0 },{ -10, 41, 43, 4, 3, 0 },{ -11, 42, 44, 4, 3, 0 },{ -12, 43, 45, 4, 3, 0 }, + { -12, 43, 46, 4, 3, 0 },{ -13, 44, 47, 4, 3, 0 },{ -14, 45, 48, 4, 3, 0 },{ -15, 46, 49, 4, 3, 0 },{ -16, 47, 50, 4, 3, 0 }, + { -16, 47, 51, 4, 3, 0 },{ -17, 48, 52, 4, 3, 0 },{ -18, 49, 53, 4, 3, 0 },{ -19, 50, 54, 4, 3, 0 },{ -20, 51, 55, 4, 3, 0 }, + { -21, 52, 56, 4, 3, 0 },{ -22, 53, 57, 4, 3, 0 },{ -23, 54, 58, 4, 3, 0 },{ -23, 54, 59, 4, 3, 0 },{ -24, 55, 60, 4, 2, 0 }, + { -25, 56, 61, 4, 2, 0 },{ -26, 57, 62, 4, 2, 0 },{ -27, 58, 63, 4, 2, 0 },{ -28, 59, 64, 4, 2, 0 },{ -29, 60, 65, 4, 2, 0 }, + { -30, 61, 66, 4, 2, 0 },{ -31, 62, 67, 4, 2, 0 },{ -32, 63, 68, 4, 2, 0 },{ -33, 64, 69, 4, 2, 0 },{ -34, 65, 70, 4, 2, 0 }, + { -35, 66, 71, 4, 2, 0 },{ -36, 67, 71, 4, 2, 0 },{ -37, 68, 72, 4, 2, 0 },{ -38, 69, 73, 4, 2, 0 },{ -39, 70, 74, 4, 2, 0 }, + { -40, 71, 74, 4, 2, 0 },{ -41, 72, 75, 4, 2, 0 },{ -42, 73, 76, 4, 2, 0 },{ -43, 74, 76, 4, 2, 0 },{ -44, 75, 77, 4, 2, 0 }, + { -45, 76, 78, 4, 2, 0 },{ -46, 77, 78, 4, 51, 0 },{ -47, 78, 79, 4, 51, 0 },{ -48, 79, 79, 4, 51, 0 },{ -49, 80, 80, 4, 51, 0 }, + { -50, 81, 80, 4, 51, 0 },{ -51, 82, 81, 4, 51, 0 },{ -52, 83, 81, 4, 51, 0 },{ -53, 84, 82, 4, 51, 0 },{ -54, 85, 82, 4, 51, 0 }, + { -55, 86, 83, 4, 51, 0 },{ -56, 87, 83, 4, 51, 0 },{ -57, 88, 84, 4, 51, 0 },{ -58, 89, 84, 4, 51, 0 },{ -59, 90, 84, 4, 50, 0 }, + { -60, 91, 85, 4, 50, 0 },{ -61, 92, 85, 4, 50, 0 },{ -62, 93, 85, 4, 50, 0 },{ -63, 94, 86, 4, 50, 0 },{ -64, 95, 86, 4, 50, 0 }, + { -65, 96, 86, 4, 50, 0 },{ -66, 97, 86, 4, 50, 0 },{ -67, 98, 87, 4, 50, 0 },{ -68, 99, 87, 4, 50, 0 },{ -69, 100, 87, 4, 50, 0 }, + { -70, 101, 87, 4, 50, 0 },{ -71, 102, 87, 4, 50, 0 },{ -72, 103, 88, 4, 50, 0 },{ -73, 104, 88, 4, 0, 0 },{ -74, 105, 88, 4, 0, 0 }, + { -75, 106, 88, 4, 0, 0 },{ -76, 107, 88, 4, 0, 0 },{ -77, 108, 88, 4, 0, 0 },{ -78, 109, 88, 4, 0, 0 },{ -79, 110, 88, 4, 0, 0 }, + { -80, 111, 88, 4, 0, 0 },}) +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagUp60ToFlatLongBase1,{ + { 16, 16, 0, 12, 52, 0 },{ 17, 17, 1, 12, 52, 0 },{ 17, 17, 2, 12, 52, 0 },{ 18, 18, 3, 12, 52, 0 },{ 18, 18, 4, 12, 52, 0 }, + { 19, 19, 5, 12, 52, 0 },{ 19, 19, 6, 12, 52, 0 },{ 20, 20, 7, 12, 52, 0 },{ 20, 20, 8, 12, 52, 0 },{ 21, 21, 9, 12, 52, 0 }, + { 21, 21, 10, 12, 52, 0 },{ 22, 22, 11, 12, 52, 0 },{ 23, 23, 12, 12, 52, 0 },{ 23, 23, 13, 12, 52, 0 },{ 24, 24, 14, 12, 52, 0 }, + { 24, 24, 15, 12, 52, 0 },{ 25, 25, 16, 12, 52, 0 },{ 25, 25, 17, 12, 52, 0 },{ 26, 26, 18, 12, 52, 0 },{ 26, 26, 19, 12, 52, 0 }, + { 27, 27, 20, 12, 3, 0 },{ 28, 28, 21, 12, 3, 0 },{ 28, 28, 22, 12, 3, 0 },{ 29, 29, 23, 12, 3, 0 },{ 29, 29, 24, 12, 3, 0 }, + { 30, 30, 25, 12, 3, 0 },{ 31, 31, 26, 12, 3, 0 },{ 31, 31, 27, 12, 3, 0 },{ 32, 32, 28, 12, 3, 0 },{ 33, 33, 29, 12, 3, 0 }, + { 33, 33, 30, 12, 3, 0 },{ 34, 34, 31, 12, 3, 0 },{ 34, 34, 32, 12, 3, 0 },{ 35, 35, 33, 12, 3, 0 },{ 36, 36, 34, 12, 3, 0 }, + { 36, 36, 35, 12, 3, 0 },{ 37, 37, 36, 12, 3, 0 },{ 38, 38, 37, 12, 3, 0 },{ 39, 39, 38, 12, 3, 0 },{ 39, 39, 39, 12, 3, 0 }, + { 40, 40, 40, 12, 3, 0 },{ 41, 41, 41, 12, 3, 0 },{ 41, 41, 42, 12, 3, 0 },{ 42, 42, 43, 12, 3, 0 },{ 43, 43, 44, 12, 3, 0 }, + { 44, 44, 45, 12, 3, 0 },{ 44, 44, 46, 12, 3, 0 },{ 45, 45, 47, 12, 3, 0 },{ 46, 46, 48, 12, 3, 0 },{ 47, 47, 49, 12, 3, 0 }, + { 48, 48, 50, 12, 3, 0 },{ 48, 48, 51, 12, 3, 0 },{ 49, 49, 52, 12, 3, 0 },{ 50, 50, 53, 12, 3, 0 },{ 51, 51, 54, 12, 3, 0 }, + { 52, 52, 55, 12, 3, 0 },{ 53, 53, 56, 12, 3, 0 },{ 54, 54, 57, 12, 3, 0 },{ 55, 55, 58, 12, 3, 0 },{ 55, 55, 59, 12, 3, 0 }, + { 56, 56, 60, 12, 2, 0 },{ 57, 57, 61, 12, 2, 0 },{ 58, 58, 62, 12, 2, 0 },{ 59, 59, 63, 12, 2, 0 },{ 60, 60, 64, 12, 2, 0 }, + { 61, 61, 65, 12, 2, 0 },{ 62, 62, 66, 12, 2, 0 },{ 63, 63, 67, 12, 2, 0 },{ 64, 64, 68, 12, 2, 0 },{ 65, 65, 69, 12, 2, 0 }, + { 66, 66, 70, 12, 2, 0 },{ 67, 67, 71, 12, 2, 0 },{ 68, 68, 71, 12, 2, 0 },{ 69, 69, 72, 12, 2, 0 },{ 70, 70, 73, 12, 2, 0 }, + { 71, 71, 74, 12, 2, 0 },{ 72, 72, 74, 12, 2, 0 },{ 73, 73, 75, 12, 2, 0 },{ 74, 74, 76, 12, 2, 0 },{ 75, 75, 76, 12, 2, 0 }, + { 76, 76, 77, 12, 2, 0 },{ 77, 77, 78, 12, 2, 0 },{ 78, 78, 78, 12, 51, 0 },{ 79, 79, 79, 12, 51, 0 },{ 80, 80, 79, 12, 51, 0 }, + { 81, 81, 80, 12, 51, 0 },{ 82, 82, 80, 12, 51, 0 },{ 83, 83, 81, 12, 51, 0 },{ 84, 84, 81, 12, 51, 0 },{ 85, 85, 82, 12, 51, 0 }, + { 86, 86, 82, 12, 51, 0 },{ 87, 87, 83, 12, 51, 0 },{ 88, 88, 83, 12, 51, 0 },{ 89, 89, 84, 12, 51, 0 },{ 90, 90, 84, 12, 51, 0 }, + { 91, 91, 84, 12, 50, 0 },{ 92, 92, 85, 12, 50, 0 },{ 93, 93, 85, 12, 50, 0 },{ 94, 94, 85, 12, 50, 0 },{ 95, 95, 86, 12, 50, 0 }, + { 96, 96, 86, 12, 50, 0 },{ 97, 97, 86, 12, 50, 0 },{ 98, 98, 86, 12, 50, 0 },{ 99, 99, 87, 12, 50, 0 },{ 100, 100, 87, 12, 50, 0 }, + { 101, 101, 87, 12, 50, 0 },{ 102, 102, 87, 12, 50, 0 },{ 103, 103, 87, 12, 50, 0 },{ 104, 104, 88, 12, 50, 0 },{ 105, 105, 88, 12, 0, 0 }, + { 106, 106, 88, 12, 0, 0 },{ 107, 107, 88, 12, 0, 0 },{ 108, 108, 88, 12, 0, 0 },{ 109, 109, 88, 12, 0, 0 },{ 110, 110, 88, 12, 0, 0 }, + { 111, 111, 88, 12, 0, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagUp60ToFlatLongBase2,{ + { 16, 15, 0, 20, 52, 0 },{ 17, 14, 1, 20, 52, 0 },{ 17, 14, 2, 20, 52, 0 },{ 18, 13, 3, 20, 52, 0 },{ 18, 13, 4, 20, 52, 0 }, + { 19, 12, 5, 20, 52, 0 },{ 19, 12, 6, 20, 52, 0 },{ 20, 11, 7, 20, 52, 0 },{ 20, 11, 8, 20, 52, 0 },{ 21, 10, 9, 20, 52, 0 }, + { 21, 10, 10, 20, 52, 0 },{ 22, 9, 11, 20, 52, 0 },{ 23, 8, 12, 20, 52, 0 },{ 23, 8, 13, 20, 52, 0 },{ 24, 7, 14, 20, 52, 0 }, + { 24, 7, 15, 20, 52, 0 },{ 25, 6, 16, 20, 52, 0 },{ 25, 6, 17, 20, 52, 0 },{ 26, 5, 18, 20, 52, 0 },{ 26, 5, 19, 20, 52, 0 }, + { 27, 4, 20, 20, 3, 0 },{ 28, 3, 21, 20, 3, 0 },{ 28, 3, 22, 20, 3, 0 },{ 29, 2, 23, 20, 3, 0 },{ 29, 2, 24, 20, 3, 0 }, + { 30, 1, 25, 20, 3, 0 },{ 31, 0, 26, 20, 3, 0 },{ 31, 0, 27, 20, 3, 0 },{ 32, -1, 28, 20, 3, 0 },{ 33, -2, 29, 20, 3, 0 }, + { 33, -2, 30, 20, 3, 0 },{ 34, -3, 31, 20, 3, 0 },{ 34, -3, 32, 20, 3, 0 },{ 35, -4, 33, 20, 3, 0 },{ 36, -5, 34, 20, 3, 0 }, + { 36, -5, 35, 20, 3, 0 },{ 37, -6, 36, 20, 3, 0 },{ 38, -7, 37, 20, 3, 0 },{ 39, -8, 38, 20, 3, 0 },{ 39, -8, 39, 20, 3, 0 }, + { 40, -9, 40, 20, 3, 0 },{ 41, -10, 41, 20, 3, 0 },{ 41, -10, 42, 20, 3, 0 },{ 42, -11, 43, 20, 3, 0 },{ 43, -12, 44, 20, 3, 0 }, + { 44, -13, 45, 20, 3, 0 },{ 44, -13, 46, 20, 3, 0 },{ 45, -14, 47, 20, 3, 0 },{ 46, -15, 48, 20, 3, 0 },{ 47, -16, 49, 20, 3, 0 }, + { 48, -17, 50, 20, 3, 0 },{ 48, -17, 51, 20, 3, 0 },{ 49, -18, 52, 20, 3, 0 },{ 50, -19, 53, 20, 3, 0 },{ 51, -20, 54, 20, 3, 0 }, + { 52, -21, 55, 20, 3, 0 },{ 53, -22, 56, 20, 3, 0 },{ 54, -23, 57, 20, 3, 0 },{ 55, -24, 58, 20, 3, 0 },{ 55, -24, 59, 20, 3, 0 }, + { 56, -25, 60, 20, 2, 0 },{ 57, -26, 61, 20, 2, 0 },{ 58, -27, 62, 20, 2, 0 },{ 59, -28, 63, 20, 2, 0 },{ 60, -29, 64, 20, 2, 0 }, + { 61, -30, 65, 20, 2, 0 },{ 62, -31, 66, 20, 2, 0 },{ 63, -32, 67, 20, 2, 0 },{ 64, -33, 68, 20, 2, 0 },{ 65, -34, 69, 20, 2, 0 }, + { 66, -35, 70, 20, 2, 0 },{ 67, -36, 71, 20, 2, 0 },{ 68, -37, 71, 20, 2, 0 },{ 69, -38, 72, 20, 2, 0 },{ 70, -39, 73, 20, 2, 0 }, + { 71, -40, 74, 20, 2, 0 },{ 72, -41, 74, 20, 2, 0 },{ 73, -42, 75, 20, 2, 0 },{ 74, -43, 76, 20, 2, 0 },{ 75, -44, 76, 20, 2, 0 }, + { 76, -45, 77, 20, 2, 0 },{ 77, -46, 78, 20, 2, 0 },{ 78, -47, 78, 20, 51, 0 },{ 79, -48, 79, 20, 51, 0 },{ 80, -49, 79, 20, 51, 0 }, + { 81, -50, 80, 20, 51, 0 },{ 82, -51, 80, 20, 51, 0 },{ 83, -52, 81, 20, 51, 0 },{ 84, -53, 81, 20, 51, 0 },{ 85, -54, 82, 20, 51, 0 }, + { 86, -55, 82, 20, 51, 0 },{ 87, -56, 83, 20, 51, 0 },{ 88, -57, 83, 20, 51, 0 },{ 89, -58, 84, 20, 51, 0 },{ 90, -59, 84, 20, 51, 0 }, + { 91, -60, 84, 20, 50, 0 },{ 92, -61, 85, 20, 50, 0 },{ 93, -62, 85, 20, 50, 0 },{ 94, -63, 85, 20, 50, 0 },{ 95, -64, 86, 20, 50, 0 }, + { 96, -65, 86, 20, 50, 0 },{ 97, -66, 86, 20, 50, 0 },{ 98, -67, 86, 20, 50, 0 },{ 99, -68, 87, 20, 50, 0 },{ 100, -69, 87, 20, 50, 0 }, + { 101, -70, 87, 20, 50, 0 },{ 102, -71, 87, 20, 50, 0 },{ 103, -72, 87, 20, 50, 0 },{ 104, -73, 88, 20, 50, 0 },{ 105, -74, 88, 20, 0, 0 }, + { 106, -75, 88, 20, 0, 0 },{ 107, -76, 88, 20, 0, 0 },{ 108, -77, 88, 20, 0, 0 },{ 109, -78, 88, 20, 0, 0 },{ 110, -79, 88, 20, 0, 0 }, + { 111, -80, 88, 20, 0, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagUp60ToFlatLongBase3,{ + { 15, 15, 1, 28, 52, 0 },{ 15, 15, 2, 28, 52, 0 },{ 14, 14, 3, 28, 52, 0 },{ 14, 14, 4, 28, 52, 0 },{ 13, 13, 5, 28, 52, 0 }, + { 13, 13, 6, 28, 52, 0 },{ 12, 12, 7, 28, 52, 0 },{ 12, 12, 8, 28, 52, 0 },{ 11, 11, 9, 28, 52, 0 },{ 11, 11, 10, 28, 52, 0 }, + { 10, 10, 11, 28, 52, 0 },{ 9, 9, 12, 28, 52, 0 },{ 9, 9, 13, 28, 52, 0 },{ 8, 8, 14, 28, 52, 0 },{ 8, 8, 15, 28, 52, 0 }, + { 7, 7, 16, 28, 52, 0 },{ 7, 7, 17, 28, 52, 0 },{ 6, 6, 18, 28, 52, 0 },{ 6, 6, 19, 28, 52, 0 },{ 5, 5, 20, 28, 3, 0 }, + { 4, 4, 21, 28, 3, 0 },{ 4, 4, 22, 28, 3, 0 },{ 3, 3, 23, 28, 3, 0 },{ 3, 3, 24, 28, 3, 0 },{ 2, 2, 25, 28, 3, 0 }, + { 1, 1, 26, 28, 3, 0 },{ 1, 1, 27, 28, 3, 0 },{ 0, 0, 28, 28, 3, 0 },{ -1, -1, 29, 28, 3, 0 },{ -1, -1, 30, 28, 3, 0 }, + { -2, -2, 31, 28, 3, 0 },{ -2, -2, 32, 28, 3, 0 },{ -3, -3, 33, 28, 3, 0 },{ -4, -4, 34, 28, 3, 0 },{ -4, -4, 35, 28, 3, 0 }, + { -5, -5, 36, 28, 3, 0 },{ -6, -6, 37, 28, 3, 0 },{ -7, -7, 38, 28, 3, 0 },{ -7, -7, 39, 28, 3, 0 },{ -8, -8, 40, 28, 3, 0 }, + { -9, -9, 41, 28, 3, 0 },{ -9, -9, 42, 28, 3, 0 },{ -10, -10, 43, 28, 3, 0 },{ -11, -11, 44, 28, 3, 0 },{ -12, -12, 45, 28, 3, 0 }, + { -12, -12, 46, 28, 3, 0 },{ -13, -13, 47, 28, 3, 0 },{ -14, -14, 48, 28, 3, 0 },{ -15, -15, 49, 28, 3, 0 },{ -16, -16, 50, 28, 3, 0 }, + { -16, -16, 51, 28, 3, 0 },{ -17, -17, 52, 28, 3, 0 },{ -18, -18, 53, 28, 3, 0 },{ -19, -19, 54, 28, 3, 0 },{ -20, -20, 55, 28, 3, 0 }, + { -21, -21, 56, 28, 3, 0 },{ -22, -22, 57, 28, 3, 0 },{ -23, -23, 58, 28, 3, 0 },{ -23, -23, 59, 28, 3, 0 },{ -24, -24, 60, 28, 2, 0 }, + { -25, -25, 61, 28, 2, 0 },{ -26, -26, 62, 28, 2, 0 },{ -27, -27, 63, 28, 2, 0 },{ -28, -28, 64, 28, 2, 0 },{ -29, -29, 65, 28, 2, 0 }, + { -30, -30, 66, 28, 2, 0 },{ -31, -31, 67, 28, 2, 0 },{ -32, -32, 68, 28, 2, 0 },{ -33, -33, 69, 28, 2, 0 },{ -34, -34, 70, 28, 2, 0 }, + { -35, -35, 71, 28, 2, 0 },{ -36, -36, 71, 28, 2, 0 },{ -37, -37, 72, 28, 2, 0 },{ -38, -38, 73, 28, 2, 0 },{ -39, -39, 74, 28, 2, 0 }, + { -40, -40, 74, 28, 2, 0 },{ -41, -41, 75, 28, 2, 0 },{ -42, -42, 76, 28, 2, 0 },{ -43, -43, 76, 28, 2, 0 },{ -44, -44, 77, 28, 2, 0 }, + { -45, -45, 78, 28, 2, 0 },{ -46, -46, 78, 28, 51, 0 },{ -47, -47, 79, 28, 51, 0 },{ -48, -48, 79, 28, 51, 0 },{ -49, -49, 80, 28, 51, 0 }, + { -50, -50, 80, 28, 51, 0 },{ -51, -51, 81, 28, 51, 0 },{ -52, -52, 81, 28, 51, 0 },{ -53, -53, 82, 28, 51, 0 },{ -54, -54, 82, 28, 51, 0 }, + { -55, -55, 83, 28, 51, 0 },{ -56, -56, 83, 28, 51, 0 },{ -57, -57, 84, 28, 51, 0 },{ -58, -58, 84, 28, 51, 0 },{ -59, -59, 84, 28, 50, 0 }, + { -60, -60, 85, 28, 50, 0 },{ -61, -61, 85, 28, 50, 0 },{ -62, -62, 85, 28, 50, 0 },{ -63, -63, 86, 28, 50, 0 },{ -64, -64, 86, 28, 50, 0 }, + { -65, -65, 86, 28, 50, 0 },{ -66, -66, 86, 28, 50, 0 },{ -67, -67, 87, 28, 50, 0 },{ -68, -68, 87, 28, 50, 0 },{ -69, -69, 87, 28, 50, 0 }, + { -70, -70, 87, 28, 50, 0 },{ -71, -71, 87, 28, 50, 0 },{ -72, -72, 88, 28, 50, 0 },{ -73, -73, 88, 28, 0, 0 },{ -74, -74, 88, 28, 0, 0 }, + { -75, -75, 88, 28, 0, 0 },{ -76, -76, 88, 28, 0, 0 },{ -77, -77, 88, 28, 0, 0 },{ -78, -78, 88, 28, 0, 0 },{ -79, -79, 88, 28, 0, 0 }, + { -80, -80, 88, 28, 0, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagFlatToDown60LongBase0,{ + { 15, 16, 8, 4, 0, 0 },{ 14, 17, 8, 4, 0, 0 },{ 13, 18, 8, 4, 0, 0 },{ 12, 19, 8, 4, 0, 0 },{ 11, 20, 8, 4, 0, 0 }, + { 10, 21, 8, 4, 0, 0 },{ 9, 22, 8, 4, 53, 0 },{ 8, 23, 7, 4, 53, 0 },{ 7, 24, 7, 4, 53, 0 },{ 6, 25, 7, 4, 53, 0 }, + { 5, 26, 7, 4, 53, 0 },{ 4, 27, 7, 4, 53, 0 },{ 3, 28, 6, 4, 53, 0 },{ 2, 29, 6, 4, 53, 0 },{ 1, 30, 6, 4, 53, 0 }, + { 0, 31, 6, 4, 53, 0 },{ -1, 32, 5, 4, 53, 0 },{ -2, 33, 5, 4, 53, 0 },{ -3, 34, 5, 4, 53, 0 },{ -4, 35, 4, 4, 53, 0 }, + { -5, 36, 4, 4, 53, 0 },{ -6, 37, 4, 4, 54, 0 },{ -7, 38, 3, 4, 54, 0 },{ -8, 39, 3, 4, 54, 0 },{ -9, 40, 2, 4, 54, 0 }, + { -10, 41, 2, 4, 54, 0 },{ -11, 42, 2, 4, 54, 0 },{ -12, 43, 1, 4, 54, 0 },{ -13, 44, 1, 4, 54, 0 },{ -14, 45, 0, 4, 54, 0 }, + { -15, 46, -1, 4, 54, 0 },{ -16, 47, -1, 4, 54, 0 },{ -17, 48, -2, 4, 54, 0 },{ -18, 49, -2, 4, 6, 0 },{ -19, 50, -3, 4, 6, 0 }, + { -20, 51, -4, 4, 6, 0 },{ -21, 52, -4, 4, 6, 0 },{ -22, 53, -5, 4, 6, 0 },{ -23, 54, -6, 4, 6, 0 },{ -24, 55, -6, 4, 6, 0 }, + { -25, 56, -7, 4, 6, 0 },{ -26, 57, -8, 4, 6, 0 },{ -27, 58, -9, 4, 6, 0 },{ -28, 59, -9, 4, 6, 0 },{ -29, 60, -10, 4, 6, 0 }, + { -30, 61, -11, 4, 6, 0 },{ -31, 62, -12, 4, 6, 0 },{ -32, 63, -13, 4, 6, 0 },{ -33, 64, -14, 4, 6, 0 },{ -34, 65, -15, 4, 6, 0 }, + { -35, 66, -16, 4, 6, 0 },{ -36, 67, -16, 4, 6, 0 },{ -37, 68, -17, 4, 6, 0 },{ -38, 69, -18, 4, 6, 0 },{ -39, 70, -19, 4, 6, 0 }, + { -40, 71, -20, 4, 6, 0 },{ -41, 72, -21, 4, 7, 0 },{ -42, 73, -22, 4, 7, 0 },{ -43, 74, -23, 4, 7, 0 },{ -44, 75, -24, 4, 7, 0 }, + { -45, 76, -25, 4, 7, 0 },{ -46, 77, -26, 4, 7, 0 },{ -47, 78, -27, 4, 7, 0 },{ -48, 79, -28, 4, 7, 0 },{ -48, 79, -29, 4, 7, 0 }, + { -49, 80, -30, 4, 7, 0 },{ -50, 81, -31, 4, 7, 0 },{ -51, 82, -32, 4, 7, 0 },{ -52, 83, -33, 4, 7, 0 },{ -52, 83, -34, 4, 7, 0 }, + { -53, 84, -35, 4, 7, 0 },{ -54, 85, -36, 4, 7, 0 },{ -55, 86, -37, 4, 7, 0 },{ -55, 86, -38, 4, 7, 0 },{ -56, 87, -39, 4, 7, 0 }, + { -57, 88, -40, 4, 7, 0 },{ -57, 88, -41, 4, 7, 0 },{ -58, 89, -42, 4, 7, 0 },{ -59, 90, -43, 4, 7, 0 },{ -59, 90, -44, 4, 7, 0 }, + { -60, 91, -45, 4, 7, 0 },{ -61, 92, -46, 4, 7, 0 },{ -61, 92, -47, 4, 7, 0 },{ -62, 93, -48, 4, 7, 0 },{ -63, 94, -49, 4, 7, 0 }, + { -63, 94, -50, 4, 7, 0 },{ -64, 95, -51, 4, 7, 0 },{ -65, 96, -52, 4, 7, 0 },{ -65, 96, -53, 4, 7, 0 },{ -66, 97, -54, 4, 7, 0 }, + { -67, 98, -55, 4, 7, 0 },{ -67, 98, -56, 4, 7, 0 },{ -68, 99, -57, 4, 7, 0 },{ -68, 99, -58, 4, 7, 0 },{ -69, 100, -59, 4, 7, 0 }, + { -70, 101, -60, 4, 55, 0 },{ -70, 101, -61, 4, 55, 0 },{ -71, 102, -62, 4, 55, 0 },{ -71, 102, -63, 4, 55, 0 },{ -72, 103, -64, 4, 55, 0 }, + { -72, 103, -65, 4, 55, 0 },{ -73, 104, -66, 4, 55, 0 },{ -73, 104, -67, 4, 55, 0 },{ -74, 105, -68, 4, 55, 0 },{ -75, 106, -69, 4, 55, 0 }, + { -75, 106, -70, 4, 55, 0 },{ -76, 107, -71, 4, 55, 0 },{ -76, 107, -72, 4, 55, 0 },{ -77, 108, -73, 4, 55, 0 },{ -77, 108, -74, 4, 55, 0 }, + { -78, 109, -75, 4, 55, 0 },{ -78, 109, -76, 4, 55, 0 },{ -79, 110, -77, 4, 55, 0 },{ -79, 110, -78, 4, 55, 0 },{ -80, 111, -79, 4, 55, 0 }, +}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagFlatToDown60LongBase1,{ + { 16, 16, 8, 12, 0, 0 },{ 17, 17, 8, 12, 0, 0 },{ 18, 18, 8, 12, 0, 0 },{ 19, 19, 8, 12, 0, 0 },{ 20, 20, 8, 12, 0, 0 }, + { 21, 21, 8, 12, 0, 0 },{ 22, 22, 8, 12, 0, 0 },{ 23, 23, 8, 12, 53, 0 },{ 24, 24, 7, 12, 53, 0 },{ 25, 25, 7, 12, 53, 0 }, + { 26, 26, 7, 12, 53, 0 },{ 27, 27, 7, 12, 53, 0 },{ 28, 28, 7, 12, 53, 0 },{ 29, 29, 6, 12, 53, 0 },{ 30, 30, 6, 12, 53, 0 }, + { 31, 31, 6, 12, 53, 0 },{ 32, 32, 6, 12, 53, 0 },{ 33, 33, 5, 12, 53, 0 },{ 34, 34, 5, 12, 53, 0 },{ 35, 35, 5, 12, 53, 0 }, + { 36, 36, 4, 12, 53, 0 },{ 37, 37, 4, 12, 53, 0 },{ 38, 38, 4, 12, 54, 0 },{ 39, 39, 3, 12, 54, 0 },{ 40, 40, 3, 12, 54, 0 }, + { 41, 41, 2, 12, 54, 0 },{ 42, 42, 2, 12, 54, 0 },{ 43, 43, 2, 12, 54, 0 },{ 44, 44, 1, 12, 54, 0 },{ 45, 45, 1, 12, 54, 0 }, + { 46, 46, 0, 12, 54, 0 },{ 47, 47, -1, 12, 54, 0 },{ 48, 48, -1, 12, 54, 0 },{ 49, 49, -2, 12, 54, 0 },{ 50, 50, -2, 12, 6, 0 }, + { 51, 51, -3, 12, 6, 0 },{ 52, 52, -4, 12, 6, 0 },{ 53, 53, -4, 12, 6, 0 },{ 54, 54, -5, 12, 6, 0 },{ 55, 55, -6, 12, 6, 0 }, + { 56, 56, -6, 12, 6, 0 },{ 57, 57, -7, 12, 6, 0 },{ 58, 58, -8, 12, 6, 0 },{ 59, 59, -9, 12, 6, 0 },{ 60, 60, -9, 12, 6, 0 }, + { 61, 61, -10, 12, 6, 0 },{ 62, 62, -11, 12, 6, 0 },{ 63, 63, -12, 12, 6, 0 },{ 64, 64, -13, 12, 6, 0 },{ 65, 65, -14, 12, 6, 0 }, + { 66, 66, -15, 12, 6, 0 },{ 67, 67, -16, 12, 6, 0 },{ 68, 68, -16, 12, 6, 0 },{ 69, 69, -17, 12, 6, 0 },{ 70, 70, -18, 12, 6, 0 }, + { 71, 71, -19, 12, 6, 0 },{ 72, 72, -20, 12, 6, 0 },{ 73, 73, -21, 12, 7, 0 },{ 74, 74, -22, 12, 7, 0 },{ 75, 75, -23, 12, 7, 0 }, + { 76, 76, -24, 12, 7, 0 },{ 77, 77, -25, 12, 7, 0 },{ 78, 78, -26, 12, 7, 0 },{ 79, 79, -27, 12, 7, 0 },{ 80, 80, -28, 12, 7, 0 }, + { 80, 80, -29, 12, 7, 0 },{ 81, 81, -30, 12, 7, 0 },{ 82, 82, -31, 12, 7, 0 },{ 83, 83, -32, 12, 7, 0 },{ 84, 84, -33, 12, 7, 0 }, + { 84, 84, -34, 12, 7, 0 },{ 85, 85, -35, 12, 7, 0 },{ 86, 86, -36, 12, 7, 0 },{ 87, 87, -37, 12, 7, 0 },{ 87, 87, -38, 12, 7, 0 }, + { 88, 88, -39, 12, 7, 0 },{ 89, 89, -40, 12, 7, 0 },{ 89, 89, -41, 12, 7, 0 },{ 90, 90, -42, 12, 7, 0 },{ 91, 91, -43, 12, 7, 0 }, + { 91, 91, -44, 12, 7, 0 },{ 92, 92, -45, 12, 7, 0 },{ 93, 93, -46, 12, 7, 0 },{ 93, 93, -47, 12, 7, 0 },{ 94, 94, -48, 12, 7, 0 }, + { 95, 95, -49, 12, 7, 0 },{ 95, 95, -50, 12, 7, 0 },{ 96, 96, -51, 12, 7, 0 },{ 97, 97, -52, 12, 7, 0 },{ 97, 97, -53, 12, 7, 0 }, + { 98, 98, -54, 12, 7, 0 },{ 99, 99, -55, 12, 7, 0 },{ 99, 99, -56, 12, 7, 0 },{ 100, 100, -57, 12, 7, 0 },{ 100, 100, -58, 12, 7, 0 }, + { 101, 101, -59, 12, 7, 0 },{ 102, 102, -60, 12, 55, 0 },{ 102, 102, -61, 12, 55, 0 },{ 103, 103, -62, 12, 55, 0 },{ 103, 103, -63, 12, 55, 0 }, + { 104, 104, -64, 12, 55, 0 },{ 104, 104, -65, 12, 55, 0 },{ 105, 105, -66, 12, 55, 0 },{ 105, 105, -67, 12, 55, 0 },{ 106, 106, -68, 12, 55, 0 }, + { 107, 107, -69, 12, 55, 0 },{ 107, 107, -70, 12, 55, 0 },{ 108, 108, -71, 12, 55, 0 },{ 108, 108, -72, 12, 55, 0 },{ 109, 109, -73, 12, 55, 0 }, + { 109, 109, -74, 12, 55, 0 },{ 110, 110, -75, 12, 55, 0 },{ 110, 110, -76, 12, 55, 0 },{ 111, 111, -77, 12, 55, 0 },{ 111, 111, -78, 12, 55, 0 }, + { 112, 112, -79, 12, 55, 0 },{ 112, 112, -80, 12, 55, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagFlatToDown60LongBase2,{ + { 16, 15, 8, 20, 0, 0 },{ 17, 14, 8, 20, 0, 0 },{ 18, 13, 8, 20, 0, 0 },{ 19, 12, 8, 20, 0, 0 },{ 20, 11, 8, 20, 0, 0 }, + { 21, 10, 8, 20, 0, 0 },{ 22, 9, 8, 20, 0, 0 },{ 23, 8, 8, 20, 53, 0 },{ 24, 7, 7, 20, 53, 0 },{ 25, 6, 7, 20, 53, 0 }, + { 26, 5, 7, 20, 53, 0 },{ 27, 4, 7, 20, 53, 0 },{ 28, 3, 7, 20, 53, 0 },{ 29, 2, 6, 20, 53, 0 },{ 30, 1, 6, 20, 53, 0 }, + { 31, 0, 6, 20, 53, 0 },{ 32, -1, 6, 20, 53, 0 },{ 33, -2, 5, 20, 53, 0 },{ 34, -3, 5, 20, 53, 0 },{ 35, -4, 5, 20, 53, 0 }, + { 36, -5, 4, 20, 53, 0 },{ 37, -6, 4, 20, 53, 0 },{ 38, -7, 4, 20, 54, 0 },{ 39, -8, 3, 20, 54, 0 },{ 40, -9, 3, 20, 54, 0 }, + { 41, -10, 2, 20, 54, 0 },{ 42, -11, 2, 20, 54, 0 },{ 43, -12, 2, 20, 54, 0 },{ 44, -13, 1, 20, 54, 0 },{ 45, -14, 1, 20, 54, 0 }, + { 46, -15, 0, 20, 54, 0 },{ 47, -16, -1, 20, 54, 0 },{ 48, -17, -1, 20, 54, 0 },{ 49, -18, -2, 20, 54, 0 },{ 50, -19, -2, 20, 6, 0 }, + { 51, -20, -3, 20, 6, 0 },{ 52, -21, -4, 20, 6, 0 },{ 53, -22, -4, 20, 6, 0 },{ 54, -23, -5, 20, 6, 0 },{ 55, -24, -6, 20, 6, 0 }, + { 56, -25, -6, 20, 6, 0 },{ 57, -26, -7, 20, 6, 0 },{ 58, -27, -8, 20, 6, 0 },{ 59, -28, -9, 20, 6, 0 },{ 60, -29, -9, 20, 6, 0 }, + { 61, -30, -10, 20, 6, 0 },{ 62, -31, -11, 20, 6, 0 },{ 63, -32, -12, 20, 6, 0 },{ 64, -33, -13, 20, 6, 0 },{ 65, -34, -14, 20, 6, 0 }, + { 66, -35, -15, 20, 6, 0 },{ 67, -36, -16, 20, 6, 0 },{ 68, -37, -16, 20, 6, 0 },{ 69, -38, -17, 20, 6, 0 },{ 70, -39, -18, 20, 6, 0 }, + { 71, -40, -19, 20, 6, 0 },{ 72, -41, -20, 20, 6, 0 },{ 73, -42, -21, 20, 7, 0 },{ 74, -43, -22, 20, 7, 0 },{ 75, -44, -23, 20, 7, 0 }, + { 76, -45, -24, 20, 7, 0 },{ 77, -46, -25, 20, 7, 0 },{ 78, -47, -26, 20, 7, 0 },{ 79, -48, -27, 20, 7, 0 },{ 80, -49, -28, 20, 7, 0 }, + { 80, -49, -29, 20, 7, 0 },{ 81, -50, -30, 20, 7, 0 },{ 82, -51, -31, 20, 7, 0 },{ 83, -52, -32, 20, 7, 0 },{ 84, -53, -33, 20, 7, 0 }, + { 84, -53, -34, 20, 7, 0 },{ 85, -54, -35, 20, 7, 0 },{ 86, -55, -36, 20, 7, 0 },{ 87, -56, -37, 20, 7, 0 },{ 87, -56, -38, 20, 7, 0 }, + { 88, -57, -39, 20, 7, 0 },{ 89, -58, -40, 20, 7, 0 },{ 89, -58, -41, 20, 7, 0 },{ 90, -59, -42, 20, 7, 0 },{ 91, -60, -43, 20, 7, 0 }, + { 91, -60, -44, 20, 7, 0 },{ 92, -61, -45, 20, 7, 0 },{ 93, -62, -46, 20, 7, 0 },{ 93, -62, -47, 20, 7, 0 },{ 94, -63, -48, 20, 7, 0 }, + { 95, -64, -49, 20, 7, 0 },{ 95, -64, -50, 20, 7, 0 },{ 96, -65, -51, 20, 7, 0 },{ 97, -66, -52, 20, 7, 0 },{ 97, -66, -53, 20, 7, 0 }, + { 98, -67, -54, 20, 7, 0 },{ 99, -68, -55, 20, 7, 0 },{ 99, -68, -56, 20, 7, 0 },{ 100, -69, -57, 20, 7, 0 },{ 100, -69, -58, 20, 7, 0 }, + { 101, -70, -59, 20, 7, 0 },{ 102, -71, -60, 20, 55, 0 },{ 102, -71, -61, 20, 55, 0 },{ 103, -72, -62, 20, 55, 0 },{ 103, -72, -63, 20, 55, 0 }, + { 104, -73, -64, 20, 55, 0 },{ 104, -73, -65, 20, 55, 0 },{ 105, -74, -66, 20, 55, 0 },{ 105, -74, -67, 20, 55, 0 },{ 106, -75, -68, 20, 55, 0 }, + { 107, -76, -69, 20, 55, 0 },{ 107, -76, -70, 20, 55, 0 },{ 108, -77, -71, 20, 55, 0 },{ 108, -77, -72, 20, 55, 0 },{ 109, -78, -73, 20, 55, 0 }, + { 109, -78, -74, 20, 55, 0 },{ 110, -79, -75, 20, 55, 0 },{ 110, -79, -76, 20, 55, 0 },{ 111, -80, -77, 20, 55, 0 },{ 111, -80, -78, 20, 55, 0 }, + { 112, -81, -79, 20, 55, 0 },{ 112, -81, -80, 20, 55, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagFlatToDown60LongBase3,{ + { 15, 15, 8, 28, 0, 0 },{ 14, 14, 8, 28, 0, 0 },{ 13, 13, 8, 28, 0, 0 },{ 12, 12, 8, 28, 0, 0 },{ 11, 11, 8, 28, 0, 0 }, + { 10, 10, 8, 28, 0, 0 },{ 9, 9, 8, 28, 53, 0 },{ 8, 8, 7, 28, 53, 0 },{ 7, 7, 7, 28, 53, 0 },{ 6, 6, 7, 28, 53, 0 }, + { 5, 5, 7, 28, 53, 0 },{ 4, 4, 7, 28, 53, 0 },{ 3, 3, 6, 28, 53, 0 },{ 2, 2, 6, 28, 53, 0 },{ 1, 1, 6, 28, 53, 0 }, + { 0, 0, 6, 28, 53, 0 },{ -1, -1, 5, 28, 53, 0 },{ -2, -2, 5, 28, 53, 0 },{ -3, -3, 5, 28, 53, 0 },{ -4, -4, 4, 28, 53, 0 }, + { -5, -5, 4, 28, 53, 0 },{ -6, -6, 4, 28, 54, 0 },{ -7, -7, 3, 28, 54, 0 },{ -8, -8, 3, 28, 54, 0 },{ -9, -9, 2, 28, 54, 0 }, + { -10, -10, 2, 28, 54, 0 },{ -11, -11, 2, 28, 54, 0 },{ -12, -12, 1, 28, 54, 0 },{ -13, -13, 1, 28, 54, 0 },{ -14, -14, 0, 28, 54, 0 }, + { -15, -15, -1, 28, 54, 0 },{ -16, -16, -1, 28, 54, 0 },{ -17, -17, -2, 28, 54, 0 },{ -18, -18, -2, 28, 6, 0 },{ -19, -19, -3, 28, 6, 0 }, + { -20, -20, -4, 28, 6, 0 },{ -21, -21, -4, 28, 6, 0 },{ -22, -22, -5, 28, 6, 0 },{ -23, -23, -6, 28, 6, 0 },{ -24, -24, -6, 28, 6, 0 }, + { -25, -25, -7, 28, 6, 0 },{ -26, -26, -8, 28, 6, 0 },{ -27, -27, -9, 28, 6, 0 },{ -28, -28, -9, 28, 6, 0 },{ -29, -29, -10, 28, 6, 0 }, + { -30, -30, -11, 28, 6, 0 },{ -31, -31, -12, 28, 6, 0 },{ -32, -32, -13, 28, 6, 0 },{ -33, -33, -14, 28, 6, 0 },{ -34, -34, -15, 28, 6, 0 }, + { -35, -35, -16, 28, 6, 0 },{ -36, -36, -16, 28, 6, 0 },{ -37, -37, -17, 28, 6, 0 },{ -38, -38, -18, 28, 6, 0 },{ -39, -39, -19, 28, 6, 0 }, + { -40, -40, -20, 28, 6, 0 },{ -41, -41, -21, 28, 7, 0 },{ -42, -42, -22, 28, 7, 0 },{ -43, -43, -23, 28, 7, 0 },{ -44, -44, -24, 28, 7, 0 }, + { -45, -45, -25, 28, 7, 0 },{ -46, -46, -26, 28, 7, 0 },{ -47, -47, -27, 28, 7, 0 },{ -48, -48, -28, 28, 7, 0 },{ -48, -48, -29, 28, 7, 0 }, + { -49, -49, -30, 28, 7, 0 },{ -50, -50, -31, 28, 7, 0 },{ -51, -51, -32, 28, 7, 0 },{ -52, -52, -33, 28, 7, 0 },{ -52, -52, -34, 28, 7, 0 }, + { -53, -53, -35, 28, 7, 0 },{ -54, -54, -36, 28, 7, 0 },{ -55, -55, -37, 28, 7, 0 },{ -55, -55, -38, 28, 7, 0 },{ -56, -56, -39, 28, 7, 0 }, + { -57, -57, -40, 28, 7, 0 },{ -57, -57, -41, 28, 7, 0 },{ -58, -58, -42, 28, 7, 0 },{ -59, -59, -43, 28, 7, 0 },{ -59, -59, -44, 28, 7, 0 }, + { -60, -60, -45, 28, 7, 0 },{ -61, -61, -46, 28, 7, 0 },{ -61, -61, -47, 28, 7, 0 },{ -62, -62, -48, 28, 7, 0 },{ -63, -63, -49, 28, 7, 0 }, + { -63, -63, -50, 28, 7, 0 },{ -64, -64, -51, 28, 7, 0 },{ -65, -65, -52, 28, 7, 0 },{ -65, -65, -53, 28, 7, 0 },{ -66, -66, -54, 28, 7, 0 }, + { -67, -67, -55, 28, 7, 0 },{ -67, -67, -56, 28, 7, 0 },{ -68, -68, -57, 28, 7, 0 },{ -68, -68, -58, 28, 7, 0 },{ -69, -69, -59, 28, 7, 0 }, + { -70, -70, -60, 28, 55, 0 },{ -70, -70, -61, 28, 55, 0 },{ -71, -71, -62, 28, 55, 0 },{ -71, -71, -63, 28, 55, 0 },{ -72, -72, -64, 28, 55, 0 }, + { -72, -72, -65, 28, 55, 0 },{ -73, -73, -66, 28, 55, 0 },{ -73, -73, -67, 28, 55, 0 },{ -74, -74, -68, 28, 55, 0 },{ -75, -75, -69, 28, 55, 0 }, + { -75, -75, -70, 28, 55, 0 },{ -76, -76, -71, 28, 55, 0 },{ -76, -76, -72, 28, 55, 0 },{ -77, -77, -73, 28, 55, 0 },{ -77, -77, -74, 28, 55, 0 }, + { -78, -78, -75, 28, 55, 0 },{ -78, -78, -76, 28, 55, 0 },{ -79, -79, -77, 28, 55, 0 },{ -79, -79, -78, 28, 55, 0 },{ -80, -80, -79, 28, 55, 0 }, +}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagDown60ToFlatLongBase0,{ + { 15, 16, 47, 4, 55, 0 },{ 15, 16, 46, 4, 55, 0 },{ 14, 17, 45, 4, 55, 0 },{ 14, 17, 44, 4, 55, 0 },{ 13, 18, 43, 4, 55, 0 }, + { 13, 18, 42, 4, 55, 0 },{ 12, 19, 41, 4, 55, 0 },{ 12, 19, 40, 4, 55, 0 },{ 11, 20, 39, 4, 55, 0 },{ 11, 20, 38, 4, 55, 0 }, + { 10, 21, 37, 4, 55, 0 },{ 9, 22, 36, 4, 55, 0 },{ 9, 22, 35, 4, 55, 0 },{ 8, 23, 34, 4, 55, 0 },{ 8, 23, 33, 4, 55, 0 }, + { 7, 24, 32, 4, 55, 0 },{ 7, 24, 31, 4, 55, 0 },{ 6, 25, 30, 4, 55, 0 },{ 6, 25, 29, 4, 55, 0 },{ 5, 26, 28, 4, 7, 0 }, + { 4, 27, 27, 4, 7, 0 },{ 4, 27, 26, 4, 7, 0 },{ 3, 28, 25, 4, 7, 0 },{ 3, 28, 24, 4, 7, 0 },{ 2, 29, 23, 4, 7, 0 }, + { 1, 30, 22, 4, 7, 0 },{ 1, 30, 21, 4, 7, 0 },{ 0, 31, 20, 4, 7, 0 },{ -1, 32, 19, 4, 7, 0 },{ -1, 32, 18, 4, 7, 0 }, + { -2, 33, 17, 4, 7, 0 },{ -2, 33, 16, 4, 7, 0 },{ -3, 34, 15, 4, 7, 0 },{ -4, 35, 14, 4, 7, 0 },{ -4, 35, 13, 4, 7, 0 }, + { -5, 36, 12, 4, 7, 0 },{ -6, 37, 11, 4, 7, 0 },{ -7, 38, 10, 4, 7, 0 },{ -7, 38, 9, 4, 7, 0 },{ -8, 39, 8, 4, 7, 0 }, + { -9, 40, 7, 4, 7, 0 },{ -9, 40, 6, 4, 7, 0 },{ -10, 41, 5, 4, 7, 0 },{ -11, 42, 4, 4, 7, 0 },{ -12, 43, 3, 4, 7, 0 }, + { -12, 43, 2, 4, 7, 0 },{ -13, 44, 1, 4, 7, 0 },{ -14, 45, 0, 4, 7, 0 },{ -15, 46, -1, 4, 7, 0 },{ -16, 47, -2, 4, 7, 0 }, + { -16, 47, -3, 4, 7, 0 },{ -17, 48, -4, 4, 7, 0 },{ -18, 49, -5, 4, 7, 0 },{ -19, 50, -6, 4, 7, 0 },{ -20, 51, -7, 4, 7, 0 }, + { -21, 52, -8, 4, 7, 0 },{ -22, 53, -9, 4, 7, 0 },{ -23, 54, -10, 4, 7, 0 },{ -23, 54, -11, 4, 7, 0 },{ -24, 55, -12, 4, 6, 0 }, + { -25, 56, -13, 4, 6, 0 },{ -26, 57, -14, 4, 6, 0 },{ -27, 58, -15, 4, 6, 0 },{ -28, 59, -16, 4, 6, 0 },{ -29, 60, -17, 4, 6, 0 }, + { -30, 61, -18, 4, 6, 0 },{ -31, 62, -19, 4, 6, 0 },{ -32, 63, -20, 4, 6, 0 },{ -33, 64, -21, 4, 6, 0 },{ -34, 65, -22, 4, 6, 0 }, + { -35, 66, -23, 4, 6, 0 },{ -36, 67, -23, 4, 6, 0 },{ -37, 68, -24, 4, 6, 0 },{ -38, 69, -25, 4, 6, 0 },{ -39, 70, -26, 4, 6, 0 }, + { -40, 71, -26, 4, 6, 0 },{ -41, 72, -27, 4, 6, 0 },{ -42, 73, -28, 4, 6, 0 },{ -43, 74, -28, 4, 6, 0 },{ -44, 75, -29, 4, 6, 0 }, + { -45, 76, -30, 4, 6, 0 },{ -46, 77, -30, 4, 54, 0 },{ -47, 78, -31, 4, 54, 0 },{ -48, 79, -31, 4, 54, 0 },{ -49, 80, -32, 4, 54, 0 }, + { -50, 81, -32, 4, 54, 0 },{ -51, 82, -33, 4, 54, 0 },{ -52, 83, -33, 4, 54, 0 },{ -53, 84, -34, 4, 54, 0 },{ -54, 85, -34, 4, 54, 0 }, + { -55, 86, -35, 4, 54, 0 },{ -56, 87, -35, 4, 54, 0 },{ -57, 88, -36, 4, 54, 0 },{ -58, 89, -36, 4, 54, 0 },{ -59, 90, -36, 4, 53, 0 }, + { -60, 91, -37, 4, 53, 0 },{ -61, 92, -37, 4, 53, 0 },{ -62, 93, -37, 4, 53, 0 },{ -63, 94, -38, 4, 53, 0 },{ -64, 95, -38, 4, 53, 0 }, + { -65, 96, -38, 4, 53, 0 },{ -66, 97, -38, 4, 53, 0 },{ -67, 98, -39, 4, 53, 0 },{ -68, 99, -39, 4, 53, 0 },{ -69, 100, -39, 4, 53, 0 }, + { -70, 101, -39, 4, 53, 0 },{ -71, 102, -39, 4, 53, 0 },{ -72, 103, -40, 4, 53, 0 },{ -73, 104, -40, 4, 0, 0 },{ -74, 105, -40, 4, 0, 0 }, + { -75, 106, -40, 4, 0, 0 },{ -76, 107, -40, 4, 0, 0 },{ -77, 108, -40, 4, 0, 0 },{ -78, 109, -40, 4, 0, 0 },{ -79, 110, -40, 4, 0, 0 }, +}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagDown60ToFlatLongBase1,{ + { 16, 16, 48, 12, 55, 0 },{ 17, 17, 47, 12, 55, 0 },{ 17, 17, 46, 12, 55, 0 },{ 18, 18, 45, 12, 55, 0 },{ 18, 18, 44, 12, 55, 0 }, + { 19, 19, 43, 12, 55, 0 },{ 19, 19, 42, 12, 55, 0 },{ 20, 20, 41, 12, 55, 0 },{ 20, 20, 40, 12, 55, 0 },{ 21, 21, 39, 12, 55, 0 }, + { 21, 21, 38, 12, 55, 0 },{ 22, 22, 37, 12, 55, 0 },{ 23, 23, 36, 12, 55, 0 },{ 23, 23, 35, 12, 55, 0 },{ 24, 24, 34, 12, 55, 0 }, + { 24, 24, 33, 12, 55, 0 },{ 25, 25, 32, 12, 55, 0 },{ 25, 25, 31, 12, 55, 0 },{ 26, 26, 30, 12, 55, 0 },{ 26, 26, 29, 12, 55, 0 }, + { 27, 27, 28, 12, 7, 0 },{ 28, 28, 27, 12, 7, 0 },{ 28, 28, 26, 12, 7, 0 },{ 29, 29, 25, 12, 7, 0 },{ 29, 29, 24, 12, 7, 0 }, + { 30, 30, 23, 12, 7, 0 },{ 31, 31, 22, 12, 7, 0 },{ 31, 31, 21, 12, 7, 0 },{ 32, 32, 20, 12, 7, 0 },{ 33, 33, 19, 12, 7, 0 }, + { 33, 33, 18, 12, 7, 0 },{ 34, 34, 17, 12, 7, 0 },{ 34, 34, 16, 12, 7, 0 },{ 35, 35, 15, 12, 7, 0 },{ 36, 36, 14, 12, 7, 0 }, + { 36, 36, 13, 12, 7, 0 },{ 37, 37, 12, 12, 7, 0 },{ 38, 38, 11, 12, 7, 0 },{ 39, 39, 10, 12, 7, 0 },{ 39, 39, 9, 12, 7, 0 }, + { 40, 40, 8, 12, 7, 0 },{ 41, 41, 7, 12, 7, 0 },{ 41, 41, 6, 12, 7, 0 },{ 42, 42, 5, 12, 7, 0 },{ 43, 43, 4, 12, 7, 0 }, + { 44, 44, 3, 12, 7, 0 },{ 44, 44, 2, 12, 7, 0 },{ 45, 45, 1, 12, 7, 0 },{ 46, 46, 0, 12, 7, 0 },{ 47, 47, -1, 12, 7, 0 }, + { 48, 48, -2, 12, 7, 0 },{ 48, 48, -3, 12, 7, 0 },{ 49, 49, -4, 12, 7, 0 },{ 50, 50, -5, 12, 7, 0 },{ 51, 51, -6, 12, 7, 0 }, + { 52, 52, -7, 12, 7, 0 },{ 53, 53, -8, 12, 7, 0 },{ 54, 54, -9, 12, 7, 0 },{ 55, 55, -10, 12, 7, 0 },{ 55, 55, -11, 12, 7, 0 }, + { 56, 56, -12, 12, 6, 0 },{ 57, 57, -13, 12, 6, 0 },{ 58, 58, -14, 12, 6, 0 },{ 59, 59, -15, 12, 6, 0 },{ 60, 60, -16, 12, 6, 0 }, + { 61, 61, -17, 12, 6, 0 },{ 62, 62, -18, 12, 6, 0 },{ 63, 63, -19, 12, 6, 0 },{ 64, 64, -20, 12, 6, 0 },{ 65, 65, -21, 12, 6, 0 }, + { 66, 66, -22, 12, 6, 0 },{ 67, 67, -23, 12, 6, 0 },{ 68, 68, -23, 12, 6, 0 },{ 69, 69, -24, 12, 6, 0 },{ 70, 70, -25, 12, 6, 0 }, + { 71, 71, -26, 12, 6, 0 },{ 72, 72, -26, 12, 6, 0 },{ 73, 73, -27, 12, 6, 0 },{ 74, 74, -28, 12, 6, 0 },{ 75, 75, -28, 12, 6, 0 }, + { 76, 76, -29, 12, 6, 0 },{ 77, 77, -30, 12, 6, 0 },{ 78, 78, -30, 12, 54, 0 },{ 79, 79, -31, 12, 54, 0 },{ 80, 80, -31, 12, 54, 0 }, + { 81, 81, -32, 12, 54, 0 },{ 82, 82, -32, 12, 54, 0 },{ 83, 83, -33, 12, 54, 0 },{ 84, 84, -33, 12, 54, 0 },{ 85, 85, -34, 12, 54, 0 }, + { 86, 86, -34, 12, 54, 0 },{ 87, 87, -35, 12, 54, 0 },{ 88, 88, -35, 12, 54, 0 },{ 89, 89, -36, 12, 54, 0 },{ 90, 90, -36, 12, 54, 0 }, + { 91, 91, -36, 12, 53, 0 },{ 92, 92, -37, 12, 53, 0 },{ 93, 93, -37, 12, 53, 0 },{ 94, 94, -37, 12, 53, 0 },{ 95, 95, -38, 12, 53, 0 }, + { 96, 96, -38, 12, 53, 0 },{ 97, 97, -38, 12, 53, 0 },{ 98, 98, -38, 12, 53, 0 },{ 99, 99, -39, 12, 53, 0 },{ 100, 100, -39, 12, 53, 0 }, + { 101, 101, -39, 12, 53, 0 },{ 102, 102, -39, 12, 53, 0 },{ 103, 103, -39, 12, 53, 0 },{ 104, 104, -40, 12, 53, 0 },{ 105, 105, -40, 12, 0, 0 }, + { 106, 106, -40, 12, 0, 0 },{ 107, 107, -40, 12, 0, 0 },{ 108, 108, -40, 12, 0, 0 },{ 109, 109, -40, 12, 0, 0 },{ 110, 110, -40, 12, 0, 0 }, + { 111, 111, -40, 12, 0, 0 },{ 112, 112, -40, 12, 0, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagDown60ToFlatLongBase2,{ + { 16, 15, 48, 20, 55, 0 },{ 17, 14, 47, 20, 55, 0 },{ 17, 14, 46, 20, 55, 0 },{ 18, 13, 45, 20, 55, 0 },{ 18, 13, 44, 20, 55, 0 }, + { 19, 12, 43, 20, 55, 0 },{ 19, 12, 42, 20, 55, 0 },{ 20, 11, 41, 20, 55, 0 },{ 20, 11, 40, 20, 55, 0 },{ 21, 10, 39, 20, 55, 0 }, + { 21, 10, 38, 20, 55, 0 },{ 22, 9, 37, 20, 55, 0 },{ 23, 8, 36, 20, 55, 0 },{ 23, 8, 35, 20, 55, 0 },{ 24, 7, 34, 20, 55, 0 }, + { 24, 7, 33, 20, 55, 0 },{ 25, 6, 32, 20, 55, 0 },{ 25, 6, 31, 20, 55, 0 },{ 26, 5, 30, 20, 55, 0 },{ 26, 5, 29, 20, 55, 0 }, + { 27, 4, 28, 20, 7, 0 },{ 28, 3, 27, 20, 7, 0 },{ 28, 3, 26, 20, 7, 0 },{ 29, 2, 25, 20, 7, 0 },{ 29, 2, 24, 20, 7, 0 }, + { 30, 1, 23, 20, 7, 0 },{ 31, 0, 22, 20, 7, 0 },{ 31, 0, 21, 20, 7, 0 },{ 32, -1, 20, 20, 7, 0 },{ 33, -2, 19, 20, 7, 0 }, + { 33, -2, 18, 20, 7, 0 },{ 34, -3, 17, 20, 7, 0 },{ 34, -3, 16, 20, 7, 0 },{ 35, -4, 15, 20, 7, 0 },{ 36, -5, 14, 20, 7, 0 }, + { 36, -5, 13, 20, 7, 0 },{ 37, -6, 12, 20, 7, 0 },{ 38, -7, 11, 20, 7, 0 },{ 39, -8, 10, 20, 7, 0 },{ 39, -8, 9, 20, 7, 0 }, + { 40, -9, 8, 20, 7, 0 },{ 41, -10, 7, 20, 7, 0 },{ 41, -10, 6, 20, 7, 0 },{ 42, -11, 5, 20, 7, 0 },{ 43, -12, 4, 20, 7, 0 }, + { 44, -13, 3, 20, 7, 0 },{ 44, -13, 2, 20, 7, 0 },{ 45, -14, 1, 20, 7, 0 },{ 46, -15, 0, 20, 7, 0 },{ 47, -16, -1, 20, 7, 0 }, + { 48, -17, -2, 20, 7, 0 },{ 48, -17, -3, 20, 7, 0 },{ 49, -18, -4, 20, 7, 0 },{ 50, -19, -5, 20, 7, 0 },{ 51, -20, -6, 20, 7, 0 }, + { 52, -21, -7, 20, 7, 0 },{ 53, -22, -8, 20, 7, 0 },{ 54, -23, -9, 20, 7, 0 },{ 55, -24, -10, 20, 7, 0 },{ 55, -24, -11, 20, 7, 0 }, + { 56, -25, -12, 20, 6, 0 },{ 57, -26, -13, 20, 6, 0 },{ 58, -27, -14, 20, 6, 0 },{ 59, -28, -15, 20, 6, 0 },{ 60, -29, -16, 20, 6, 0 }, + { 61, -30, -17, 20, 6, 0 },{ 62, -31, -18, 20, 6, 0 },{ 63, -32, -19, 20, 6, 0 },{ 64, -33, -20, 20, 6, 0 },{ 65, -34, -21, 20, 6, 0 }, + { 66, -35, -22, 20, 6, 0 },{ 67, -36, -23, 20, 6, 0 },{ 68, -37, -23, 20, 6, 0 },{ 69, -38, -24, 20, 6, 0 },{ 70, -39, -25, 20, 6, 0 }, + { 71, -40, -26, 20, 6, 0 },{ 72, -41, -26, 20, 6, 0 },{ 73, -42, -27, 20, 6, 0 },{ 74, -43, -28, 20, 6, 0 },{ 75, -44, -28, 20, 6, 0 }, + { 76, -45, -29, 20, 6, 0 },{ 77, -46, -30, 20, 6, 0 },{ 78, -47, -30, 20, 54, 0 },{ 79, -48, -31, 20, 54, 0 },{ 80, -49, -31, 20, 54, 0 }, + { 81, -50, -32, 20, 54, 0 },{ 82, -51, -32, 20, 54, 0 },{ 83, -52, -33, 20, 54, 0 },{ 84, -53, -33, 20, 54, 0 },{ 85, -54, -34, 20, 54, 0 }, + { 86, -55, -34, 20, 54, 0 },{ 87, -56, -35, 20, 54, 0 },{ 88, -57, -35, 20, 54, 0 },{ 89, -58, -36, 20, 54, 0 },{ 90, -59, -36, 20, 54, 0 }, + { 91, -60, -36, 20, 53, 0 },{ 92, -61, -37, 20, 53, 0 },{ 93, -62, -37, 20, 53, 0 },{ 94, -63, -37, 20, 53, 0 },{ 95, -64, -38, 20, 53, 0 }, + { 96, -65, -38, 20, 53, 0 },{ 97, -66, -38, 20, 53, 0 },{ 98, -67, -38, 20, 53, 0 },{ 99, -68, -39, 20, 53, 0 },{ 100, -69, -39, 20, 53, 0 }, + { 101, -70, -39, 20, 53, 0 },{ 102, -71, -39, 20, 53, 0 },{ 103, -72, -39, 20, 53, 0 },{ 104, -73, -40, 20, 53, 0 },{ 105, -74, -40, 20, 0, 0 }, + { 106, -75, -40, 20, 0, 0 },{ 107, -76, -40, 20, 0, 0 },{ 108, -77, -40, 20, 0, 0 },{ 109, -78, -40, 20, 0, 0 },{ 110, -79, -40, 20, 0, 0 }, + { 111, -80, -40, 20, 0, 0 },{ 112, -81, -40, 20, 0, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoDiagDown60ToFlatLongBase3,{ + { 15, 15, 47, 28, 55, 0 },{ 15, 15, 46, 28, 55, 0 },{ 14, 14, 45, 28, 55, 0 },{ 14, 14, 44, 28, 55, 0 },{ 13, 13, 43, 28, 55, 0 }, + { 13, 13, 42, 28, 55, 0 },{ 12, 12, 41, 28, 55, 0 },{ 12, 12, 40, 28, 55, 0 },{ 11, 11, 39, 28, 55, 0 },{ 11, 11, 38, 28, 55, 0 }, + { 10, 10, 37, 28, 55, 0 },{ 9, 9, 36, 28, 55, 0 },{ 9, 9, 35, 28, 55, 0 },{ 8, 8, 34, 28, 55, 0 },{ 8, 8, 33, 28, 55, 0 }, + { 7, 7, 32, 28, 55, 0 },{ 7, 7, 31, 28, 55, 0 },{ 6, 6, 30, 28, 55, 0 },{ 6, 6, 29, 28, 55, 0 },{ 5, 5, 28, 28, 7, 0 }, + { 4, 4, 27, 28, 7, 0 },{ 4, 4, 26, 28, 7, 0 },{ 3, 3, 25, 28, 7, 0 },{ 3, 3, 24, 28, 7, 0 },{ 2, 2, 23, 28, 7, 0 }, + { 1, 1, 22, 28, 7, 0 },{ 1, 1, 21, 28, 7, 0 },{ 0, 0, 20, 28, 7, 0 },{ -1, -1, 19, 28, 7, 0 },{ -1, -1, 18, 28, 7, 0 }, + { -2, -2, 17, 28, 7, 0 },{ -2, -2, 16, 28, 7, 0 },{ -3, -3, 15, 28, 7, 0 },{ -4, -4, 14, 28, 7, 0 },{ -4, -4, 13, 28, 7, 0 }, + { -5, -5, 12, 28, 7, 0 },{ -6, -6, 11, 28, 7, 0 },{ -7, -7, 10, 28, 7, 0 },{ -7, -7, 9, 28, 7, 0 },{ -8, -8, 8, 28, 7, 0 }, + { -9, -9, 7, 28, 7, 0 },{ -9, -9, 6, 28, 7, 0 },{ -10, -10, 5, 28, 7, 0 },{ -11, -11, 4, 28, 7, 0 },{ -12, -12, 3, 28, 7, 0 }, + { -12, -12, 2, 28, 7, 0 },{ -13, -13, 1, 28, 7, 0 },{ -14, -14, 0, 28, 7, 0 },{ -15, -15, -1, 28, 7, 0 },{ -16, -16, -2, 28, 7, 0 }, + { -16, -16, -3, 28, 7, 0 },{ -17, -17, -4, 28, 7, 0 },{ -18, -18, -5, 28, 7, 0 },{ -19, -19, -6, 28, 7, 0 },{ -20, -20, -7, 28, 7, 0 }, + { -21, -21, -8, 28, 7, 0 },{ -22, -22, -9, 28, 7, 0 },{ -23, -23, -10, 28, 7, 0 },{ -23, -23, -11, 28, 7, 0 },{ -24, -24, -12, 28, 6, 0 }, + { -25, -25, -13, 28, 6, 0 },{ -26, -26, -14, 28, 6, 0 },{ -27, -27, -15, 28, 6, 0 },{ -28, -28, -16, 28, 6, 0 },{ -29, -29, -17, 28, 6, 0 }, + { -30, -30, -18, 28, 6, 0 },{ -31, -31, -19, 28, 6, 0 },{ -32, -32, -20, 28, 6, 0 },{ -33, -33, -21, 28, 6, 0 },{ -34, -34, -22, 28, 6, 0 }, + { -35, -35, -23, 28, 6, 0 },{ -36, -36, -23, 28, 6, 0 },{ -37, -37, -24, 28, 6, 0 },{ -38, -38, -25, 28, 6, 0 },{ -39, -39, -26, 28, 6, 0 }, + { -40, -40, -26, 28, 6, 0 },{ -41, -41, -27, 28, 6, 0 },{ -42, -42, -28, 28, 6, 0 },{ -43, -43, -28, 28, 6, 0 },{ -44, -44, -29, 28, 6, 0 }, + { -45, -45, -30, 28, 6, 0 },{ -46, -46, -30, 28, 54, 0 },{ -47, -47, -31, 28, 54, 0 },{ -48, -48, -31, 28, 54, 0 },{ -49, -49, -32, 28, 54, 0 }, + { -50, -50, -32, 28, 54, 0 },{ -51, -51, -33, 28, 54, 0 },{ -52, -52, -33, 28, 54, 0 },{ -53, -53, -34, 28, 54, 0 },{ -54, -54, -34, 28, 54, 0 }, + { -55, -55, -35, 28, 54, 0 },{ -56, -56, -35, 28, 54, 0 },{ -57, -57, -36, 28, 54, 0 },{ -58, -58, -36, 28, 54, 0 },{ -59, -59, -36, 28, 53, 0 }, + { -60, -60, -37, 28, 53, 0 },{ -61, -61, -37, 28, 53, 0 },{ -62, -62, -37, 28, 53, 0 },{ -63, -63, -38, 28, 53, 0 },{ -64, -64, -38, 28, 53, 0 }, + { -65, -65, -38, 28, 53, 0 },{ -66, -66, -38, 28, 53, 0 },{ -67, -67, -39, 28, 53, 0 },{ -68, -68, -39, 28, 53, 0 },{ -69, -69, -39, 28, 53, 0 }, + { -70, -70, -39, 28, 53, 0 },{ -71, -71, -39, 28, 53, 0 },{ -72, -72, -40, 28, 53, 0 },{ -73, -73, -40, 28, 0, 0 },{ -74, -74, -40, 28, 0, 0 }, + { -75, -75, -40, 28, 0, 0 },{ -76, -76, -40, 28, 0, 0 },{ -77, -77, -40, 28, 0, 0 },{ -78, -78, -40, 28, 0, 0 },{ -79, -79, -40, 28, 0, 0 }, +}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoLeftEighthDiveLoopUpToOrthogonal0,{ + { 15, 16, 1, 4, 52, 0 },{ 15, 16, 2, 4, 52, 0 },{ 14, 17, 3, 4, 52, 0 },{ 14, 17, 4, 4, 52, 0 },{ 13, 18, 5, 4, 52, 0 }, + { 13, 18, 6, 4, 52, 0 },{ 12, 19, 7, 4, 52, 0 },{ 12, 19, 8, 4, 52, 0 },{ 11, 19, 9, 4, 52, 0 },{ 11, 20, 10, 4, 52, 0 }, + { 10, 20, 11, 4, 52, 0 },{ 10, 21, 12, 4, 52, 0 },{ 9, 21, 13, 4, 52, 0 },{ 9, 22, 14, 4, 52, 0 },{ 8, 22, 15, 4, 52, 0 }, + { 8, 22, 16, 4, 52, 0 },{ 7, 23, 17, 4, 52, 0 },{ 7, 23, 18, 4, 52, 0 },{ 6, 24, 19, 4, 52, 0 },{ 6, 24, 20, 4, 52, 0 }, + { 5, 24, 21, 4, 52, 0 },{ 5, 25, 22, 4, 52, 0 },{ 4, 25, 23, 4, 52, 0 },{ 4, 26, 24, 4, 52, 0 },{ 3, 26, 25, 4, 52, 0 }, + { 3, 26, 26, 4, 4, 1 },{ 2, 27, 27, 4, 4, 1 },{ 2, 27, 28, 4, 4, 1 },{ 1, 27, 29, 4, 4, 1 },{ 1, 28, 30, 4, 4, 1 }, + { 0, 28, 31, 4, 4, 1 },{ 0, 28, 32, 4, 4, 1 },{ -1, 29, 33, 4, 4, 1 },{ -1, 29, 34, 4, 4, 1 },{ -2, 29, 35, 4, 4, 1 }, + { -2, 30, 36, 4, 4, 1 },{ -3, 30, 37, 4, 4, 1 },{ -3, 30, 38, 4, 4, 1 },{ -4, 31, 39, 4, 4, 1 },{ -4, 31, 40, 4, 4, 1 }, + { -5, 31, 41, 2, 52, 2 },{ -5, 32, 42, 2, 52, 2 },{ -6, 32, 43, 2, 52, 2 },{ -6, 32, 44, 2, 52, 2 },{ -7, 33, 45, 2, 52, 2 }, + { -7, 33, 46, 2, 52, 2 },{ -8, 33, 47, 2, 52, 2 },{ -8, 33, 48, 2, 52, 2 },{ -9, 34, 49, 2, 52, 2 },{ -9, 34, 50, 2, 52, 2 }, + { -10, 34, 51, 2, 52, 2 },{ -10, 35, 52, 2, 52, 2 },{ -11, 35, 53, 2, 52, 2 },{ -11, 35, 54, 2, 52, 2 },{ -12, 35, 55, 2, 52, 5 }, + { -12, 36, 56, 2, 52, 5 },{ -13, 36, 57, 2, 52, 5 },{ -13, 36, 58, 2, 52, 5 },{ -14, 36, 59, 2, 52, 5 },{ -14, 37, 60, 2, 52, 5 }, + { -15, 37, 61, 2, 52, 5 },{ -16, 37, 62, 2, 52, 5 },{ -16, 37, 63, 2, 52, 5 },{ -17, 38, 64, 2, 52, 5 },{ -17, 38, 65, 2, 52, 5 }, + { -18, 38, 66, 2, 52, 5 },{ -18, 38, 67, 2, 52, 5 },{ -19, 38, 68, 2, 52, 5 },{ -19, 39, 69, 2, 52, 5 },{ -20, 39, 70, 2, 52, 5 }, + { -21, 39, 71, 2, 52, 5 },{ -21, 39, 72, 2, 52, 5 },{ -22, 39, 73, 2, 52, 6 },{ -22, 40, 74, 2, 52, 6 },{ -23, 40, 75, 2, 52, 6 }, + { -23, 40, 76, 2, 52, 6 },{ -24, 40, 77, 2, 52, 6 },{ -25, 40, 78, 2, 52, 6 },{ -25, 41, 79, 2, 52, 6 },{ -26, 41, 80, 2, 52, 6 }, + { -26, 41, 81, 2, 52, 6 },{ -27, 41, 82, 2, 52, 6 },{ -28, 41, 83, 2, 52, 6 },{ -28, 42, 84, 2, 52, 6 },{ -29, 42, 85, 2, 52, 6 }, + { -30, 42, 86, 2, 52, 6 },{ -30, 42, 87, 2, 52, 6 },{ -31, 42, 88, 2, 52, 6 },{ -31, 42, 89, 2, 52, 6 },{ -32, 43, 90, 2, 52, 6 }, + { -33, 43, 91, 2, 52, 6 },{ -33, 43, 92, 2, 52, 6 },{ -34, 43, 93, 2, 52, 6 },{ -35, 43, 94, 2, 52, 6 },{ -35, 43, 95, 2, 52, 6 }, + { -36, 43, 96, 2, 52, 6 },{ -37, 44, 97, 2, 52, 6 },{ -38, 44, 98, 2, 52, 6 },{ -38, 44, 99, 2, 3, 8 },{ -39, 44, 100, 2, 3, 8 }, + { -40, 44, 101, 2, 3, 8 },{ -41, 44, 102, 2, 3, 8 },{ -41, 44, 103, 2, 3, 8 },{ -42, 45, 104, 2, 3, 8 },{ -43, 45, 105, 2, 3, 8 }, + { -44, 45, 106, 2, 3, 8 },{ -44, 45, 107, 2, 3, 8 },{ -45, 45, 108, 2, 3, 8 },{ -46, 45, 109, 2, 3, 8 },{ -47, 45, 110, 2, 3, 8 }, + { -48, 45, 111, 2, 3, 8 },{ -49, 45, 112, 2, 3, 8 },{ -49, 45, 113, 2, 3, 8 },{ -50, 46, 114, 2, 3, 8 },{ -51, 46, 115, 2, 3, 8 }, + { -52, 46, 116, 2, 3, 8 },{ -53, 46, 117, 2, 3, 8 },{ -54, 46, 118, 2, 3, 8 },{ -55, 46, 119, 2, 3, 8 },{ -56, 46, 120, 0, 2, 9 }, + { -57, 46, 121, 0, 2, 9 },{ -58, 46, 122, 0, 2, 9 },{ -59, 46, 123, 0, 2, 9 },{ -60, 46, 124, 0, 2, 9 },{ -61, 46, 125, 0, 2, 9 }, + { -62, 46, 126, 0, 2, 9 },{ -63, 47, 127, 0, 2, 9 },{ -64, 47, 127, 0, 2, 9 },{ -65, 47, 128, 0, 2, 9 },{ -66, 47, 129, 0, 2, 9 }, + { -67, 47, 129, 0, 2, 9 },{ -68, 47, 130, 0, 2, 9 },{ -69, 47, 131, 0, 2, 9 },{ -70, 47, 131, 0, 2, 9 },{ -71, 47, 132, 16, 14, 0 }, + { -72, 47, 132, 16, 14, 0 },{ -73, 47, 133, 16, 14, 0 },{ -74, 47, 133, 16, 15, 0 },{ -75, 47, 134, 16, 15, 0 },{ -76, 47, 134, 16, 15, 0 }, + { -77, 47, 135, 16, 15, 0 },{ -78, 47, 135, 16, 15, 0 },{ -79, 47, 136, 16, 15, 0 },{ -80, 47, 136, 16, 15, 0 },{ -81, 47, 136, 16, 15, 0 }, + { -82, 47, 137, 16, 15, 0 },{ -83, 47, 137, 16, 15, 0 },{ -84, 47, 137, 16, 15, 0 },{ -85, 47, 137, 16, 15, 0 },{ -86, 47, 138, 16, 15, 0 }, + { -87, 47, 138, 16, 15, 0 },{ -88, 47, 138, 16, 15, 0 },{ -89, 47, 138, 16, 16, 0 },{ -90, 47, 138, 16, 16, 0 },{ -91, 47, 138, 16, 16, 0 }, + { -92, 47, 139, 16, 16, 0 },{ -93, 47, 139, 16, 16, 0 },{ -94, 47, 139, 16, 16, 0 },{ -95, 47, 139, 16, 16, 0 },{ -96, 47, 139, 16, 16, 0 }, +}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoLeftEighthDiveLoopUpToOrthogonal1,{ + { 16, 16, 0, 12, 52, 0 },{ 17, 17, 1, 12, 52, 0 },{ 17, 17, 2, 12, 52, 0 },{ 18, 18, 3, 12, 52, 0 },{ 18, 18, 4, 12, 52, 0 }, + { 19, 19, 5, 12, 52, 0 },{ 19, 19, 6, 12, 52, 0 },{ 20, 20, 7, 12, 52, 0 },{ 20, 20, 8, 12, 52, 0 },{ 20, 21, 9, 12, 52, 0 }, + { 21, 21, 10, 12, 52, 0 },{ 21, 22, 11, 12, 52, 0 },{ 22, 22, 12, 12, 52, 0 },{ 22, 23, 13, 12, 52, 0 },{ 23, 23, 14, 12, 52, 0 }, + { 23, 24, 15, 12, 52, 0 },{ 23, 24, 16, 12, 52, 0 },{ 24, 25, 17, 12, 52, 0 },{ 24, 25, 18, 12, 52, 0 },{ 25, 26, 19, 12, 52, 0 }, + { 25, 26, 20, 12, 52, 0 },{ 25, 27, 21, 12, 52, 0 },{ 26, 27, 22, 12, 52, 0 },{ 26, 28, 23, 12, 52, 0 },{ 27, 28, 24, 12, 52, 0 }, + { 27, 29, 25, 12, 52, 0 },{ 27, 29, 26, 12, 4, 1 },{ 28, 30, 27, 12, 4, 1 },{ 28, 30, 28, 12, 4, 1 },{ 28, 31, 29, 12, 4, 1 }, + { 29, 31, 30, 12, 4, 1 },{ 29, 32, 31, 12, 4, 1 },{ 29, 32, 32, 12, 4, 1 },{ 30, 33, 33, 12, 4, 1 },{ 30, 33, 34, 12, 4, 1 }, + { 30, 34, 35, 12, 4, 1 },{ 31, 34, 36, 12, 4, 1 },{ 31, 35, 37, 12, 4, 1 },{ 31, 35, 38, 12, 4, 1 },{ 32, 36, 39, 12, 4, 1 }, + { 32, 36, 40, 12, 4, 1 },{ 32, 37, 41, 10, 52, 2 },{ 33, 37, 42, 10, 52, 2 },{ 33, 38, 43, 10, 52, 2 },{ 33, 38, 44, 10, 52, 2 }, + { 34, 39, 45, 10, 52, 2 },{ 34, 39, 46, 10, 52, 2 },{ 34, 40, 47, 10, 52, 2 },{ 34, 40, 48, 10, 52, 2 },{ 35, 41, 49, 10, 52, 2 }, + { 35, 41, 50, 10, 52, 2 },{ 35, 42, 51, 10, 52, 2 },{ 36, 42, 52, 10, 52, 2 },{ 36, 43, 53, 10, 52, 2 },{ 36, 43, 54, 10, 52, 2 }, + { 36, 44, 55, 10, 52, 5 },{ 37, 44, 56, 10, 52, 5 },{ 37, 45, 57, 10, 52, 5 },{ 37, 45, 58, 10, 52, 5 },{ 37, 46, 59, 10, 52, 5 }, + { 38, 46, 60, 10, 52, 5 },{ 38, 47, 61, 10, 52, 5 },{ 38, 48, 62, 10, 52, 5 },{ 38, 48, 63, 10, 52, 5 },{ 39, 49, 64, 10, 52, 5 }, + { 39, 49, 65, 10, 52, 5 },{ 39, 50, 66, 10, 52, 5 },{ 39, 50, 67, 10, 52, 5 },{ 39, 51, 68, 10, 52, 5 },{ 40, 51, 69, 10, 52, 5 }, + { 40, 52, 70, 10, 52, 5 },{ 40, 53, 71, 10, 52, 5 },{ 40, 53, 72, 10, 52, 5 },{ 40, 54, 73, 10, 52, 6 },{ 41, 54, 74, 10, 52, 6 }, + { 41, 55, 75, 10, 52, 6 },{ 41, 55, 76, 10, 52, 6 },{ 41, 56, 77, 10, 52, 6 },{ 41, 57, 78, 10, 52, 6 },{ 42, 57, 79, 10, 52, 6 }, + { 42, 58, 80, 10, 52, 6 },{ 42, 58, 81, 10, 52, 6 },{ 42, 59, 82, 10, 52, 6 },{ 42, 60, 83, 10, 52, 6 },{ 43, 60, 84, 10, 52, 6 }, + { 43, 61, 85, 10, 52, 6 },{ 43, 62, 86, 10, 52, 6 },{ 43, 62, 87, 10, 52, 6 },{ 43, 63, 88, 10, 52, 6 },{ 43, 63, 89, 10, 52, 6 }, + { 44, 64, 90, 10, 52, 6 },{ 44, 65, 91, 10, 52, 6 },{ 44, 65, 92, 10, 52, 6 },{ 44, 66, 93, 10, 52, 6 },{ 44, 67, 94, 10, 52, 6 }, + { 44, 67, 95, 10, 52, 6 },{ 44, 68, 96, 10, 52, 6 },{ 45, 69, 97, 10, 52, 6 },{ 45, 70, 98, 10, 52, 6 },{ 45, 70, 99, 10, 3, 8 }, + { 45, 71, 100, 10, 3, 8 },{ 45, 72, 101, 10, 3, 8 },{ 45, 73, 102, 10, 3, 8 },{ 45, 73, 103, 10, 3, 8 },{ 46, 74, 104, 10, 3, 8 }, + { 46, 75, 105, 10, 3, 8 },{ 46, 76, 106, 10, 3, 8 },{ 46, 76, 107, 10, 3, 8 },{ 46, 77, 108, 10, 3, 8 },{ 46, 78, 109, 10, 3, 8 }, + { 46, 79, 110, 10, 3, 8 },{ 46, 80, 111, 10, 3, 8 },{ 46, 81, 112, 10, 3, 8 },{ 46, 81, 113, 10, 3, 8 },{ 47, 82, 114, 10, 3, 8 }, + { 47, 83, 115, 10, 3, 8 },{ 47, 84, 116, 10, 3, 8 },{ 47, 85, 117, 10, 3, 8 },{ 47, 86, 118, 10, 3, 8 },{ 47, 87, 119, 10, 3, 8 }, + { 47, 88, 120, 8, 2, 9 },{ 47, 89, 121, 8, 2, 9 },{ 47, 90, 122, 8, 2, 9 },{ 47, 91, 123, 8, 2, 9 },{ 47, 92, 124, 8, 2, 9 }, + { 47, 93, 125, 8, 2, 9 },{ 47, 94, 126, 8, 2, 9 },{ 48, 95, 127, 8, 2, 9 },{ 48, 96, 127, 8, 2, 9 },{ 48, 97, 128, 8, 2, 9 }, + { 48, 98, 129, 8, 2, 9 },{ 48, 99, 129, 8, 2, 9 },{ 48, 100, 130, 8, 2, 9 },{ 48, 101, 131, 8, 2, 9 },{ 48, 102, 131, 8, 2, 9 }, + { 48, 103, 132, 24, 14, 0 },{ 48, 104, 132, 24, 14, 0 },{ 48, 105, 133, 24, 14, 0 },{ 48, 106, 133, 24, 15, 0 },{ 48, 107, 134, 24, 15, 0 }, + { 48, 108, 134, 24, 15, 0 },{ 48, 109, 135, 24, 15, 0 },{ 48, 110, 135, 24, 15, 0 },{ 48, 111, 136, 24, 15, 0 },{ 48, 112, 136, 24, 15, 0 }, + { 48, 113, 136, 24, 15, 0 },{ 48, 114, 137, 24, 15, 0 },{ 48, 115, 137, 24, 15, 0 },{ 48, 116, 137, 24, 15, 0 },{ 48, 117, 137, 24, 15, 0 }, + { 48, 118, 138, 24, 15, 0 },{ 48, 119, 138, 24, 15, 0 },{ 48, 120, 138, 24, 15, 0 },{ 48, 121, 138, 24, 16, 0 },{ 48, 122, 138, 24, 16, 0 }, + { 48, 123, 138, 24, 16, 0 },{ 48, 124, 139, 24, 16, 0 },{ 48, 125, 139, 24, 16, 0 },{ 48, 126, 139, 24, 16, 0 },{ 48, 127, 139, 24, 16, 0 }, + { 48, 128, 139, 24, 16, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoLeftEighthDiveLoopUpToOrthogonal2,{ + { 16, 15, 0, 20, 52, 0 },{ 17, 14, 1, 20, 52, 0 },{ 17, 14, 2, 20, 52, 0 },{ 18, 13, 3, 20, 52, 0 },{ 18, 13, 4, 20, 52, 0 }, + { 19, 12, 5, 20, 52, 0 },{ 19, 12, 6, 20, 52, 0 },{ 20, 11, 7, 20, 52, 0 },{ 20, 11, 8, 20, 52, 0 },{ 21, 11, 9, 20, 52, 0 }, + { 21, 10, 10, 20, 52, 0 },{ 22, 10, 11, 20, 52, 0 },{ 22, 9, 12, 20, 52, 0 },{ 23, 9, 13, 20, 52, 0 },{ 23, 8, 14, 20, 52, 0 }, + { 24, 8, 15, 20, 52, 0 },{ 24, 8, 16, 20, 52, 0 },{ 25, 7, 17, 20, 52, 0 },{ 25, 7, 18, 20, 52, 0 },{ 26, 6, 19, 20, 52, 0 }, + { 26, 6, 20, 20, 52, 0 },{ 27, 6, 21, 20, 52, 0 },{ 27, 5, 22, 20, 52, 0 },{ 28, 5, 23, 20, 52, 0 },{ 28, 4, 24, 20, 52, 0 }, + { 29, 4, 25, 20, 52, 0 },{ 29, 4, 26, 20, 4, 1 },{ 30, 3, 27, 20, 4, 1 },{ 30, 3, 28, 20, 4, 1 },{ 31, 3, 29, 20, 4, 1 }, + { 31, 2, 30, 20, 4, 1 },{ 32, 2, 31, 20, 4, 1 },{ 32, 2, 32, 20, 4, 1 },{ 33, 1, 33, 20, 4, 1 },{ 33, 1, 34, 20, 4, 1 }, + { 34, 1, 35, 20, 4, 1 },{ 34, 0, 36, 20, 4, 1 },{ 35, 0, 37, 20, 4, 1 },{ 35, 0, 38, 20, 4, 1 },{ 36, -1, 39, 20, 4, 1 }, + { 36, -1, 40, 20, 4, 1 },{ 37, -1, 41, 18, 52, 2 },{ 37, -2, 42, 18, 52, 2 },{ 38, -2, 43, 18, 52, 2 },{ 38, -2, 44, 18, 52, 2 }, + { 39, -3, 45, 18, 52, 2 },{ 39, -3, 46, 18, 52, 2 },{ 40, -3, 47, 18, 52, 2 },{ 40, -3, 48, 18, 52, 2 },{ 41, -4, 49, 18, 52, 2 }, + { 41, -4, 50, 18, 52, 2 },{ 42, -4, 51, 18, 52, 2 },{ 42, -5, 52, 18, 52, 2 },{ 43, -5, 53, 18, 52, 2 },{ 43, -5, 54, 18, 52, 2 }, + { 44, -5, 55, 18, 52, 5 },{ 44, -6, 56, 18, 52, 5 },{ 45, -6, 57, 18, 52, 5 },{ 45, -6, 58, 18, 52, 5 },{ 46, -6, 59, 18, 52, 5 }, + { 46, -7, 60, 18, 52, 5 },{ 47, -7, 61, 18, 52, 5 },{ 48, -7, 62, 18, 52, 5 },{ 48, -7, 63, 18, 52, 5 },{ 49, -8, 64, 18, 52, 5 }, + { 49, -8, 65, 18, 52, 5 },{ 50, -8, 66, 18, 52, 5 },{ 50, -8, 67, 18, 52, 5 },{ 51, -8, 68, 18, 52, 5 },{ 51, -9, 69, 18, 52, 5 }, + { 52, -9, 70, 18, 52, 5 },{ 53, -9, 71, 18, 52, 5 },{ 53, -9, 72, 18, 52, 5 },{ 54, -9, 73, 18, 52, 6 },{ 54, -10, 74, 18, 52, 6 }, + { 55, -10, 75, 18, 52, 6 },{ 55, -10, 76, 18, 52, 6 },{ 56, -10, 77, 18, 52, 6 },{ 57, -10, 78, 18, 52, 6 },{ 57, -11, 79, 18, 52, 6 }, + { 58, -11, 80, 18, 52, 6 },{ 58, -11, 81, 18, 52, 6 },{ 59, -11, 82, 18, 52, 6 },{ 60, -11, 83, 18, 52, 6 },{ 60, -12, 84, 18, 52, 6 }, + { 61, -12, 85, 18, 52, 6 },{ 62, -12, 86, 18, 52, 6 },{ 62, -12, 87, 18, 52, 6 },{ 63, -12, 88, 18, 52, 6 },{ 63, -12, 89, 18, 52, 6 }, + { 64, -13, 90, 18, 52, 6 },{ 65, -13, 91, 18, 52, 6 },{ 65, -13, 92, 18, 52, 6 },{ 66, -13, 93, 18, 52, 6 },{ 67, -13, 94, 18, 52, 6 }, + { 67, -13, 95, 18, 52, 6 },{ 68, -13, 96, 18, 52, 6 },{ 69, -14, 97, 18, 52, 6 },{ 70, -14, 98, 18, 52, 6 },{ 70, -14, 99, 18, 3, 8 }, + { 71, -14, 100, 18, 3, 8 },{ 72, -14, 101, 18, 3, 8 },{ 73, -14, 102, 18, 3, 8 },{ 73, -14, 103, 18, 3, 8 },{ 74, -15, 104, 18, 3, 8 }, + { 75, -15, 105, 18, 3, 8 },{ 76, -15, 106, 18, 3, 8 },{ 76, -15, 107, 18, 3, 8 },{ 77, -15, 108, 18, 3, 8 },{ 78, -15, 109, 18, 3, 8 }, + { 79, -15, 110, 18, 3, 8 },{ 80, -15, 111, 18, 3, 8 },{ 81, -15, 112, 18, 3, 8 },{ 81, -15, 113, 18, 3, 8 },{ 82, -16, 114, 18, 3, 8 }, + { 83, -16, 115, 18, 3, 8 },{ 84, -16, 116, 18, 3, 8 },{ 85, -16, 117, 18, 3, 8 },{ 86, -16, 118, 18, 3, 8 },{ 87, -16, 119, 18, 3, 8 }, + { 88, -16, 120, 16, 2, 9 },{ 89, -16, 121, 16, 2, 9 },{ 90, -16, 122, 16, 2, 9 },{ 91, -16, 123, 16, 2, 9 },{ 92, -16, 124, 16, 2, 9 }, + { 93, -16, 125, 16, 2, 9 },{ 94, -16, 126, 16, 2, 9 },{ 95, -17, 127, 16, 2, 9 },{ 96, -17, 127, 16, 2, 9 },{ 97, -17, 128, 16, 2, 9 }, + { 98, -17, 129, 16, 2, 9 },{ 99, -17, 129, 16, 2, 9 },{ 100, -17, 130, 16, 2, 9 },{ 101, -17, 131, 16, 2, 9 },{ 102, -17, 131, 16, 2, 9 }, + { 103, -17, 132, 0, 14, 0 },{ 104, -17, 132, 0, 14, 0 },{ 105, -17, 133, 0, 14, 0 },{ 106, -17, 133, 0, 15, 0 },{ 107, -17, 134, 0, 15, 0 }, + { 108, -17, 134, 0, 15, 0 },{ 109, -17, 135, 0, 15, 0 },{ 110, -17, 135, 0, 15, 0 },{ 111, -17, 136, 0, 15, 0 },{ 112, -17, 136, 0, 15, 0 }, + { 113, -17, 136, 0, 15, 0 },{ 114, -17, 137, 0, 15, 0 },{ 115, -17, 137, 0, 15, 0 },{ 116, -17, 137, 0, 15, 0 },{ 117, -17, 137, 0, 15, 0 }, + { 118, -17, 138, 0, 15, 0 },{ 119, -17, 138, 0, 15, 0 },{ 120, -17, 138, 0, 15, 0 },{ 121, -17, 138, 0, 16, 0 },{ 122, -17, 138, 0, 16, 0 }, + { 123, -17, 138, 0, 16, 0 },{ 124, -17, 139, 0, 16, 0 },{ 125, -17, 139, 0, 16, 0 },{ 126, -17, 139, 0, 16, 0 },{ 127, -17, 139, 0, 16, 0 }, + { 128, -17, 139, 0, 16, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoLeftEighthDiveLoopUpToOrthogonal3,{ + { 15, 15, 1, 28, 52, 0 },{ 15, 15, 2, 28, 52, 0 },{ 14, 14, 3, 28, 52, 0 },{ 14, 14, 4, 28, 52, 0 },{ 13, 13, 5, 28, 52, 0 }, + { 13, 13, 6, 28, 52, 0 },{ 12, 12, 7, 28, 52, 0 },{ 12, 12, 8, 28, 52, 0 },{ 12, 11, 9, 28, 52, 0 },{ 11, 11, 10, 28, 52, 0 }, + { 11, 10, 11, 28, 52, 0 },{ 10, 10, 12, 28, 52, 0 },{ 10, 9, 13, 28, 52, 0 },{ 9, 9, 14, 28, 52, 0 },{ 9, 8, 15, 28, 52, 0 }, + { 9, 8, 16, 28, 52, 0 },{ 8, 7, 17, 28, 52, 0 },{ 8, 7, 18, 28, 52, 0 },{ 7, 6, 19, 28, 52, 0 },{ 7, 6, 20, 28, 52, 0 }, + { 7, 5, 21, 28, 52, 0 },{ 6, 5, 22, 28, 52, 0 },{ 6, 4, 23, 28, 52, 0 },{ 5, 4, 24, 28, 52, 0 },{ 5, 3, 25, 28, 52, 0 }, + { 5, 3, 26, 28, 4, 1 },{ 4, 2, 27, 28, 4, 1 },{ 4, 2, 28, 28, 4, 1 },{ 4, 1, 29, 28, 4, 1 },{ 3, 1, 30, 28, 4, 1 }, + { 3, 0, 31, 28, 4, 1 },{ 3, 0, 32, 28, 4, 1 },{ 2, -1, 33, 28, 4, 1 },{ 2, -1, 34, 28, 4, 1 },{ 2, -2, 35, 28, 4, 1 }, + { 1, -2, 36, 28, 4, 1 },{ 1, -3, 37, 28, 4, 1 },{ 1, -3, 38, 28, 4, 1 },{ 0, -4, 39, 28, 4, 1 },{ 0, -4, 40, 28, 4, 1 }, + { 0, -5, 41, 26, 52, 2 },{ -1, -5, 42, 26, 52, 2 },{ -1, -6, 43, 26, 52, 2 },{ -1, -6, 44, 26, 52, 2 },{ -2, -7, 45, 26, 52, 2 }, + { -2, -7, 46, 26, 52, 2 },{ -2, -8, 47, 26, 52, 2 },{ -2, -8, 48, 26, 52, 2 },{ -3, -9, 49, 26, 52, 2 },{ -3, -9, 50, 26, 52, 2 }, + { -3, -10, 51, 26, 52, 2 },{ -4, -10, 52, 26, 52, 2 },{ -4, -11, 53, 26, 52, 2 },{ -4, -11, 54, 26, 52, 2 },{ -4, -12, 55, 26, 52, 5 }, + { -5, -12, 56, 26, 52, 5 },{ -5, -13, 57, 26, 52, 5 },{ -5, -13, 58, 26, 52, 5 },{ -5, -14, 59, 26, 52, 5 },{ -6, -14, 60, 26, 52, 5 }, + { -6, -15, 61, 26, 52, 5 },{ -6, -16, 62, 26, 52, 5 },{ -6, -16, 63, 26, 52, 5 },{ -7, -17, 64, 26, 52, 5 },{ -7, -17, 65, 26, 52, 5 }, + { -7, -18, 66, 26, 52, 5 },{ -7, -18, 67, 26, 52, 5 },{ -7, -19, 68, 26, 52, 5 },{ -8, -19, 69, 26, 52, 5 },{ -8, -20, 70, 26, 52, 5 }, + { -8, -21, 71, 26, 52, 5 },{ -8, -21, 72, 26, 52, 5 },{ -8, -22, 73, 26, 52, 6 },{ -9, -22, 74, 26, 52, 6 },{ -9, -23, 75, 26, 52, 6 }, + { -9, -23, 76, 26, 52, 6 },{ -9, -24, 77, 26, 52, 6 },{ -9, -25, 78, 26, 52, 6 },{ -10, -25, 79, 26, 52, 6 },{ -10, -26, 80, 26, 52, 6 }, + { -10, -26, 81, 26, 52, 6 },{ -10, -27, 82, 26, 52, 6 },{ -10, -28, 83, 26, 52, 6 },{ -11, -28, 84, 26, 52, 6 },{ -11, -29, 85, 26, 52, 6 }, + { -11, -30, 86, 26, 52, 6 },{ -11, -30, 87, 26, 52, 6 },{ -11, -31, 88, 26, 52, 6 },{ -11, -31, 89, 26, 52, 6 },{ -12, -32, 90, 26, 52, 6 }, + { -12, -33, 91, 26, 52, 6 },{ -12, -33, 92, 26, 52, 6 },{ -12, -34, 93, 26, 52, 6 },{ -12, -35, 94, 26, 52, 6 },{ -12, -35, 95, 26, 52, 6 }, + { -12, -36, 96, 26, 52, 6 },{ -13, -37, 97, 26, 52, 6 },{ -13, -38, 98, 26, 52, 6 },{ -13, -38, 99, 26, 3, 8 },{ -13, -39, 100, 26, 3, 8 }, + { -13, -40, 101, 26, 3, 8 },{ -13, -41, 102, 26, 3, 8 },{ -13, -41, 103, 26, 3, 8 },{ -14, -42, 104, 26, 3, 8 },{ -14, -43, 105, 26, 3, 8 }, + { -14, -44, 106, 26, 3, 8 },{ -14, -44, 107, 26, 3, 8 },{ -14, -45, 108, 26, 3, 8 },{ -14, -46, 109, 26, 3, 8 },{ -14, -47, 110, 26, 3, 8 }, + { -14, -48, 111, 26, 3, 8 },{ -14, -49, 112, 26, 3, 8 },{ -14, -49, 113, 26, 3, 8 },{ -15, -50, 114, 26, 3, 8 },{ -15, -51, 115, 26, 3, 8 }, + { -15, -52, 116, 26, 3, 8 },{ -15, -53, 117, 26, 3, 8 },{ -15, -54, 118, 26, 3, 8 },{ -15, -55, 119, 26, 3, 8 },{ -15, -56, 120, 24, 2, 9 }, + { -15, -57, 121, 24, 2, 9 },{ -15, -58, 122, 24, 2, 9 },{ -15, -59, 123, 24, 2, 9 },{ -15, -60, 124, 24, 2, 9 },{ -15, -61, 125, 24, 2, 9 }, + { -15, -62, 126, 24, 2, 9 },{ -16, -63, 127, 24, 2, 9 },{ -16, -64, 127, 24, 2, 9 },{ -16, -65, 128, 24, 2, 9 },{ -16, -66, 129, 24, 2, 9 }, + { -16, -67, 129, 24, 2, 9 },{ -16, -68, 130, 24, 2, 9 },{ -16, -69, 131, 24, 2, 9 },{ -16, -70, 131, 24, 2, 9 },{ -16, -71, 132, 8, 14, 0 }, + { -16, -72, 132, 8, 14, 0 },{ -16, -73, 133, 8, 14, 0 },{ -16, -74, 133, 8, 15, 0 },{ -16, -75, 134, 8, 15, 0 },{ -16, -76, 134, 8, 15, 0 }, + { -16, -77, 135, 8, 15, 0 },{ -16, -78, 135, 8, 15, 0 },{ -16, -79, 136, 8, 15, 0 },{ -16, -80, 136, 8, 15, 0 },{ -16, -81, 136, 8, 15, 0 }, + { -16, -82, 137, 8, 15, 0 },{ -16, -83, 137, 8, 15, 0 },{ -16, -84, 137, 8, 15, 0 },{ -16, -85, 137, 8, 15, 0 },{ -16, -86, 138, 8, 15, 0 }, + { -16, -87, 138, 8, 15, 0 },{ -16, -88, 138, 8, 15, 0 },{ -16, -89, 138, 8, 16, 0 },{ -16, -90, 138, 8, 16, 0 },{ -16, -91, 138, 8, 16, 0 }, + { -16, -92, 139, 8, 16, 0 },{ -16, -93, 139, 8, 16, 0 },{ -16, -94, 139, 8, 16, 0 },{ -16, -95, 139, 8, 16, 0 },{ -16, -96, 139, 8, 16, 0 }, +}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoRightEighthDiveLoopUpToOrthogonal0,{ + { 15, 16, 1, 4, 52, 0 },{ 15, 16, 2, 4, 52, 0 },{ 14, 17, 3, 4, 52, 0 },{ 14, 17, 4, 4, 52, 0 },{ 13, 18, 5, 4, 52, 0 }, + { 13, 18, 6, 4, 52, 0 },{ 12, 19, 7, 4, 52, 0 },{ 12, 19, 8, 4, 52, 0 },{ 12, 20, 9, 4, 52, 0 },{ 11, 20, 10, 4, 52, 0 }, + { 11, 21, 11, 4, 52, 0 },{ 10, 21, 12, 4, 52, 0 },{ 10, 22, 13, 4, 52, 0 },{ 9, 22, 14, 4, 52, 0 },{ 9, 23, 15, 4, 52, 0 }, + { 9, 23, 16, 4, 52, 0 },{ 8, 24, 17, 4, 52, 0 },{ 8, 24, 18, 4, 52, 0 },{ 7, 25, 19, 4, 52, 0 },{ 7, 25, 20, 4, 52, 0 }, + { 7, 26, 21, 4, 52, 0 },{ 6, 26, 22, 4, 52, 0 },{ 6, 27, 23, 4, 52, 0 },{ 5, 27, 24, 4, 52, 0 },{ 5, 28, 25, 4, 52, 0 }, + { 5, 28, 26, 4, 4, 3 },{ 4, 29, 27, 4, 4, 3 },{ 4, 29, 28, 4, 4, 3 },{ 4, 30, 29, 4, 4, 3 },{ 3, 30, 30, 4, 4, 3 }, + { 3, 31, 31, 4, 4, 3 },{ 3, 31, 32, 4, 4, 3 },{ 2, 32, 33, 4, 4, 3 },{ 2, 32, 34, 4, 4, 3 },{ 2, 33, 35, 4, 4, 3 }, + { 1, 33, 36, 4, 4, 3 },{ 1, 34, 37, 4, 4, 3 },{ 1, 34, 38, 4, 4, 3 },{ 0, 35, 39, 4, 4, 3 },{ 0, 35, 40, 4, 4, 3 }, + { 0, 36, 41, 6, 52, 4 },{ -1, 36, 42, 6, 52, 4 },{ -1, 37, 43, 6, 52, 4 },{ -1, 37, 44, 6, 52, 4 },{ -2, 38, 45, 6, 52, 4 }, + { -2, 38, 46, 6, 52, 4 },{ -2, 39, 47, 6, 52, 4 },{ -2, 39, 48, 6, 52, 4 },{ -3, 40, 49, 6, 52, 4 },{ -3, 40, 50, 6, 52, 4 }, + { -3, 41, 51, 6, 52, 4 },{ -4, 41, 52, 6, 52, 4 },{ -4, 42, 53, 6, 52, 4 },{ -4, 42, 54, 6, 52, 4 },{ -4, 43, 55, 6, 52, 10 }, + { -5, 43, 56, 6, 52, 10 },{ -5, 44, 57, 6, 52, 10 },{ -5, 44, 58, 6, 52, 10 },{ -5, 45, 59, 6, 52, 10 },{ -6, 45, 60, 6, 52, 10 }, + { -6, 46, 61, 6, 52, 10 },{ -6, 47, 62, 6, 52, 10 },{ -6, 47, 63, 6, 52, 10 },{ -7, 48, 64, 6, 52, 10 },{ -7, 48, 65, 6, 52, 10 }, + { -7, 49, 66, 6, 52, 10 },{ -7, 49, 67, 6, 52, 10 },{ -7, 50, 68, 6, 52, 10 },{ -8, 50, 69, 6, 52, 10 },{ -8, 51, 70, 6, 52, 10 }, + { -8, 52, 71, 6, 52, 10 },{ -8, 52, 72, 6, 52, 10 },{ -8, 53, 73, 6, 52, 11 },{ -9, 53, 74, 6, 52, 11 },{ -9, 54, 75, 6, 52, 11 }, + { -9, 54, 76, 6, 52, 11 },{ -9, 55, 77, 6, 52, 11 },{ -9, 56, 78, 6, 52, 11 },{ -10, 56, 79, 6, 52, 11 },{ -10, 57, 80, 6, 52, 11 }, + { -10, 57, 81, 6, 52, 11 },{ -10, 58, 82, 6, 52, 11 },{ -10, 59, 83, 6, 52, 11 },{ -11, 59, 84, 6, 52, 11 },{ -11, 60, 85, 6, 52, 11 }, + { -11, 61, 86, 6, 52, 11 },{ -11, 61, 87, 6, 52, 11 },{ -11, 62, 88, 6, 52, 11 },{ -11, 62, 89, 6, 52, 11 },{ -12, 63, 90, 6, 52, 11 }, + { -12, 64, 91, 6, 52, 11 },{ -12, 64, 92, 6, 52, 11 },{ -12, 65, 93, 6, 52, 11 },{ -12, 66, 94, 6, 52, 11 },{ -12, 66, 95, 6, 52, 11 }, + { -12, 67, 96, 6, 52, 11 },{ -13, 68, 97, 6, 52, 11 },{ -13, 69, 98, 6, 52, 11 },{ -13, 69, 99, 6, 3, 13 },{ -13, 70, 100, 6, 3, 13 }, + { -13, 71, 101, 6, 3, 13 },{ -13, 72, 102, 6, 3, 13 },{ -13, 72, 103, 6, 3, 13 },{ -14, 73, 104, 6, 3, 13 },{ -14, 74, 105, 6, 3, 13 }, + { -14, 75, 106, 6, 3, 13 },{ -14, 75, 107, 6, 3, 13 },{ -14, 76, 108, 6, 3, 13 },{ -14, 77, 109, 6, 3, 13 },{ -14, 78, 110, 6, 3, 13 }, + { -14, 79, 111, 6, 3, 13 },{ -14, 80, 112, 6, 3, 13 },{ -14, 80, 113, 6, 3, 13 },{ -15, 81, 114, 6, 3, 13 },{ -15, 82, 115, 6, 3, 13 }, + { -15, 83, 116, 6, 3, 13 },{ -15, 84, 117, 6, 3, 13 },{ -15, 85, 118, 6, 3, 13 },{ -15, 86, 119, 6, 3, 13 },{ -15, 87, 120, 8, 2, 14 }, + { -15, 88, 121, 8, 2, 14 },{ -15, 89, 122, 8, 2, 14 },{ -15, 90, 123, 8, 2, 14 },{ -15, 91, 124, 8, 2, 14 },{ -15, 92, 125, 8, 2, 14 }, + { -15, 93, 126, 8, 2, 14 },{ -16, 94, 127, 8, 2, 14 },{ -16, 95, 127, 8, 2, 14 },{ -16, 96, 128, 8, 2, 14 },{ -16, 97, 129, 8, 2, 14 }, + { -16, 98, 129, 8, 2, 14 },{ -16, 99, 130, 8, 2, 14 },{ -16, 100, 131, 8, 2, 14 },{ -16, 101, 131, 8, 2, 14 },{ -16, 102, 132, 24, 14, 0 }, + { -16, 103, 132, 24, 14, 0 },{ -16, 104, 133, 24, 14, 0 },{ -16, 105, 133, 24, 15, 0 },{ -16, 106, 134, 24, 15, 0 },{ -16, 107, 134, 24, 15, 0 }, + { -16, 108, 135, 24, 15, 0 },{ -16, 109, 135, 24, 15, 0 },{ -16, 110, 136, 24, 15, 0 },{ -16, 111, 136, 24, 15, 0 },{ -16, 112, 136, 24, 15, 0 }, + { -16, 113, 137, 24, 15, 0 },{ -16, 114, 137, 24, 15, 0 },{ -16, 115, 137, 24, 15, 0 },{ -16, 116, 137, 24, 15, 0 },{ -16, 117, 138, 24, 15, 0 }, + { -16, 118, 138, 24, 15, 0 },{ -16, 119, 138, 24, 15, 0 },{ -16, 120, 138, 24, 16, 0 },{ -16, 121, 138, 24, 16, 0 },{ -16, 122, 138, 24, 16, 0 }, + { -16, 123, 139, 24, 16, 0 },{ -16, 124, 139, 24, 16, 0 },{ -16, 125, 139, 24, 16, 0 },{ -16, 126, 139, 24, 16, 0 },{ -16, 127, 139, 24, 16, 0 }, +}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoRightEighthDiveLoopUpToOrthogonal1,{ + { 16, 16, 0, 12, 52, 0 },{ 17, 17, 1, 12, 52, 0 },{ 17, 17, 2, 12, 52, 0 },{ 18, 18, 3, 12, 52, 0 },{ 18, 18, 4, 12, 52, 0 }, + { 19, 19, 5, 12, 52, 0 },{ 19, 19, 6, 12, 52, 0 },{ 20, 20, 7, 12, 52, 0 },{ 20, 20, 8, 12, 52, 0 },{ 21, 20, 9, 12, 52, 0 }, + { 21, 21, 10, 12, 52, 0 },{ 22, 21, 11, 12, 52, 0 },{ 22, 22, 12, 12, 52, 0 },{ 23, 22, 13, 12, 52, 0 },{ 23, 23, 14, 12, 52, 0 }, + { 24, 23, 15, 12, 52, 0 },{ 24, 23, 16, 12, 52, 0 },{ 25, 24, 17, 12, 52, 0 },{ 25, 24, 18, 12, 52, 0 },{ 26, 25, 19, 12, 52, 0 }, + { 26, 25, 20, 12, 52, 0 },{ 27, 25, 21, 12, 52, 0 },{ 27, 26, 22, 12, 52, 0 },{ 28, 26, 23, 12, 52, 0 },{ 28, 27, 24, 12, 52, 0 }, + { 29, 27, 25, 12, 52, 0 },{ 29, 27, 26, 12, 4, 3 },{ 30, 28, 27, 12, 4, 3 },{ 30, 28, 28, 12, 4, 3 },{ 31, 28, 29, 12, 4, 3 }, + { 31, 29, 30, 12, 4, 3 },{ 32, 29, 31, 12, 4, 3 },{ 32, 29, 32, 12, 4, 3 },{ 33, 30, 33, 12, 4, 3 },{ 33, 30, 34, 12, 4, 3 }, + { 34, 30, 35, 12, 4, 3 },{ 34, 31, 36, 12, 4, 3 },{ 35, 31, 37, 12, 4, 3 },{ 35, 31, 38, 12, 4, 3 },{ 36, 32, 39, 12, 4, 3 }, + { 36, 32, 40, 12, 4, 3 },{ 37, 32, 41, 14, 52, 4 },{ 37, 33, 42, 14, 52, 4 },{ 38, 33, 43, 14, 52, 4 },{ 38, 33, 44, 14, 52, 4 }, + { 39, 34, 45, 14, 52, 4 },{ 39, 34, 46, 14, 52, 4 },{ 40, 34, 47, 14, 52, 4 },{ 40, 34, 48, 14, 52, 4 },{ 41, 35, 49, 14, 52, 4 }, + { 41, 35, 50, 14, 52, 4 },{ 42, 35, 51, 14, 52, 4 },{ 42, 36, 52, 14, 52, 4 },{ 43, 36, 53, 14, 52, 4 },{ 43, 36, 54, 14, 52, 4 }, + { 44, 36, 55, 14, 52, 10 },{ 44, 37, 56, 14, 52, 10 },{ 45, 37, 57, 14, 52, 10 },{ 45, 37, 58, 14, 52, 10 },{ 46, 37, 59, 14, 52, 10 }, + { 46, 38, 60, 14, 52, 10 },{ 47, 38, 61, 14, 52, 10 },{ 48, 38, 62, 14, 52, 10 },{ 48, 38, 63, 14, 52, 10 },{ 49, 39, 64, 14, 52, 10 }, + { 49, 39, 65, 14, 52, 10 },{ 50, 39, 66, 14, 52, 10 },{ 50, 39, 67, 14, 52, 10 },{ 51, 39, 68, 14, 52, 10 },{ 51, 40, 69, 14, 52, 10 }, + { 52, 40, 70, 14, 52, 10 },{ 53, 40, 71, 14, 52, 10 },{ 53, 40, 72, 14, 52, 10 },{ 54, 40, 73, 14, 52, 11 },{ 54, 41, 74, 14, 52, 11 }, + { 55, 41, 75, 14, 52, 11 },{ 55, 41, 76, 14, 52, 11 },{ 56, 41, 77, 14, 52, 11 },{ 57, 41, 78, 14, 52, 11 },{ 57, 42, 79, 14, 52, 11 }, + { 58, 42, 80, 14, 52, 11 },{ 58, 42, 81, 14, 52, 11 },{ 59, 42, 82, 14, 52, 11 },{ 60, 42, 83, 14, 52, 11 },{ 60, 43, 84, 14, 52, 11 }, + { 61, 43, 85, 14, 52, 11 },{ 62, 43, 86, 14, 52, 11 },{ 62, 43, 87, 14, 52, 11 },{ 63, 43, 88, 14, 52, 11 },{ 63, 43, 89, 14, 52, 11 }, + { 64, 44, 90, 14, 52, 11 },{ 65, 44, 91, 14, 52, 11 },{ 65, 44, 92, 14, 52, 11 },{ 66, 44, 93, 14, 52, 11 },{ 67, 44, 94, 14, 52, 11 }, + { 67, 44, 95, 14, 52, 11 },{ 68, 44, 96, 14, 52, 11 },{ 69, 45, 97, 14, 52, 11 },{ 70, 45, 98, 14, 52, 11 },{ 70, 45, 99, 14, 3, 13 }, + { 71, 45, 100, 14, 3, 13 },{ 72, 45, 101, 14, 3, 13 },{ 73, 45, 102, 14, 3, 13 },{ 73, 45, 103, 14, 3, 13 },{ 74, 46, 104, 14, 3, 13 }, + { 75, 46, 105, 14, 3, 13 },{ 76, 46, 106, 14, 3, 13 },{ 76, 46, 107, 14, 3, 13 },{ 77, 46, 108, 14, 3, 13 },{ 78, 46, 109, 14, 3, 13 }, + { 79, 46, 110, 14, 3, 13 },{ 80, 46, 111, 14, 3, 13 },{ 81, 46, 112, 14, 3, 13 },{ 81, 46, 113, 14, 3, 13 },{ 82, 47, 114, 14, 3, 13 }, + { 83, 47, 115, 14, 3, 13 },{ 84, 47, 116, 14, 3, 13 },{ 85, 47, 117, 14, 3, 13 },{ 86, 47, 118, 14, 3, 13 },{ 87, 47, 119, 14, 3, 13 }, + { 88, 47, 120, 16, 2, 14 },{ 89, 47, 121, 16, 2, 14 },{ 90, 47, 122, 16, 2, 14 },{ 91, 47, 123, 16, 2, 14 },{ 92, 47, 124, 16, 2, 14 }, + { 93, 47, 125, 16, 2, 14 },{ 94, 47, 126, 16, 2, 14 },{ 95, 48, 127, 16, 2, 14 },{ 96, 48, 127, 16, 2, 14 },{ 97, 48, 128, 16, 2, 14 }, + { 98, 48, 129, 16, 2, 14 },{ 99, 48, 129, 16, 2, 14 },{ 100, 48, 130, 16, 2, 14 },{ 101, 48, 131, 16, 2, 14 },{ 102, 48, 131, 16, 2, 14 }, + { 103, 48, 132, 0, 14, 0 },{ 104, 48, 132, 0, 14, 0 },{ 105, 48, 133, 0, 14, 0 },{ 106, 48, 133, 0, 15, 0 },{ 107, 48, 134, 0, 15, 0 }, + { 108, 48, 134, 0, 15, 0 },{ 109, 48, 135, 0, 15, 0 },{ 110, 48, 135, 0, 15, 0 },{ 111, 48, 136, 0, 15, 0 },{ 112, 48, 136, 0, 15, 0 }, + { 113, 48, 136, 0, 15, 0 },{ 114, 48, 137, 0, 15, 0 },{ 115, 48, 137, 0, 15, 0 },{ 116, 48, 137, 0, 15, 0 },{ 117, 48, 137, 0, 15, 0 }, + { 118, 48, 138, 0, 15, 0 },{ 119, 48, 138, 0, 15, 0 },{ 120, 48, 138, 0, 15, 0 },{ 121, 48, 138, 0, 16, 0 },{ 122, 48, 138, 0, 16, 0 }, + { 123, 48, 138, 0, 16, 0 },{ 124, 48, 139, 0, 16, 0 },{ 125, 48, 139, 0, 16, 0 },{ 126, 48, 139, 0, 16, 0 },{ 127, 48, 139, 0, 16, 0 }, + { 128, 48, 139, 0, 16, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoRightEighthDiveLoopUpToOrthogonal2,{ + { 16, 15, 0, 20, 52, 0 },{ 17, 14, 1, 20, 52, 0 },{ 17, 14, 2, 20, 52, 0 },{ 18, 13, 3, 20, 52, 0 },{ 18, 13, 4, 20, 52, 0 }, + { 19, 12, 5, 20, 52, 0 },{ 19, 12, 6, 20, 52, 0 },{ 20, 11, 7, 20, 52, 0 },{ 20, 11, 8, 20, 52, 0 },{ 20, 10, 9, 20, 52, 0 }, + { 21, 10, 10, 20, 52, 0 },{ 21, 9, 11, 20, 52, 0 },{ 22, 9, 12, 20, 52, 0 },{ 22, 8, 13, 20, 52, 0 },{ 23, 8, 14, 20, 52, 0 }, + { 23, 7, 15, 20, 52, 0 },{ 23, 7, 16, 20, 52, 0 },{ 24, 6, 17, 20, 52, 0 },{ 24, 6, 18, 20, 52, 0 },{ 25, 5, 19, 20, 52, 0 }, + { 25, 5, 20, 20, 52, 0 },{ 25, 4, 21, 20, 52, 0 },{ 26, 4, 22, 20, 52, 0 },{ 26, 3, 23, 20, 52, 0 },{ 27, 3, 24, 20, 52, 0 }, + { 27, 2, 25, 20, 52, 0 },{ 27, 2, 26, 20, 4, 3 },{ 28, 1, 27, 20, 4, 3 },{ 28, 1, 28, 20, 4, 3 },{ 28, 0, 29, 20, 4, 3 }, + { 29, 0, 30, 20, 4, 3 },{ 29, -1, 31, 20, 4, 3 },{ 29, -1, 32, 20, 4, 3 },{ 30, -2, 33, 20, 4, 3 },{ 30, -2, 34, 20, 4, 3 }, + { 30, -3, 35, 20, 4, 3 },{ 31, -3, 36, 20, 4, 3 },{ 31, -4, 37, 20, 4, 3 },{ 31, -4, 38, 20, 4, 3 },{ 32, -5, 39, 20, 4, 3 }, + { 32, -5, 40, 20, 4, 3 },{ 32, -6, 41, 22, 52, 4 },{ 33, -6, 42, 22, 52, 4 },{ 33, -7, 43, 22, 52, 4 },{ 33, -7, 44, 22, 52, 4 }, + { 34, -8, 45, 22, 52, 4 },{ 34, -8, 46, 22, 52, 4 },{ 34, -9, 47, 22, 52, 4 },{ 34, -9, 48, 22, 52, 4 },{ 35, -10, 49, 22, 52, 4 }, + { 35, -10, 50, 22, 52, 4 },{ 35, -11, 51, 22, 52, 4 },{ 36, -11, 52, 22, 52, 4 },{ 36, -12, 53, 22, 52, 4 },{ 36, -12, 54, 22, 52, 4 }, + { 36, -13, 55, 22, 52, 10 },{ 37, -13, 56, 22, 52, 10 },{ 37, -14, 57, 22, 52, 10 },{ 37, -14, 58, 22, 52, 10 },{ 37, -15, 59, 22, 52, 10 }, + { 38, -15, 60, 22, 52, 10 },{ 38, -16, 61, 22, 52, 10 },{ 38, -17, 62, 22, 52, 10 },{ 38, -17, 63, 22, 52, 10 },{ 39, -18, 64, 22, 52, 10 }, + { 39, -18, 65, 22, 52, 10 },{ 39, -19, 66, 22, 52, 10 },{ 39, -19, 67, 22, 52, 10 },{ 39, -20, 68, 22, 52, 10 },{ 40, -20, 69, 22, 52, 10 }, + { 40, -21, 70, 22, 52, 10 },{ 40, -22, 71, 22, 52, 10 },{ 40, -22, 72, 22, 52, 10 },{ 40, -23, 73, 22, 52, 11 },{ 41, -23, 74, 22, 52, 11 }, + { 41, -24, 75, 22, 52, 11 },{ 41, -24, 76, 22, 52, 11 },{ 41, -25, 77, 22, 52, 11 },{ 41, -26, 78, 22, 52, 11 },{ 42, -26, 79, 22, 52, 11 }, + { 42, -27, 80, 22, 52, 11 },{ 42, -27, 81, 22, 52, 11 },{ 42, -28, 82, 22, 52, 11 },{ 42, -29, 83, 22, 52, 11 },{ 43, -29, 84, 22, 52, 11 }, + { 43, -30, 85, 22, 52, 11 },{ 43, -31, 86, 22, 52, 11 },{ 43, -31, 87, 22, 52, 11 },{ 43, -32, 88, 22, 52, 11 },{ 43, -32, 89, 22, 52, 11 }, + { 44, -33, 90, 22, 52, 11 },{ 44, -34, 91, 22, 52, 11 },{ 44, -34, 92, 22, 52, 11 },{ 44, -35, 93, 22, 52, 11 },{ 44, -36, 94, 22, 52, 11 }, + { 44, -36, 95, 22, 52, 11 },{ 44, -37, 96, 22, 52, 11 },{ 45, -38, 97, 22, 52, 11 },{ 45, -39, 98, 22, 52, 11 },{ 45, -39, 99, 22, 3, 13 }, + { 45, -40, 100, 22, 3, 13 },{ 45, -41, 101, 22, 3, 13 },{ 45, -42, 102, 22, 3, 13 },{ 45, -42, 103, 22, 3, 13 },{ 46, -43, 104, 22, 3, 13 }, + { 46, -44, 105, 22, 3, 13 },{ 46, -45, 106, 22, 3, 13 },{ 46, -45, 107, 22, 3, 13 },{ 46, -46, 108, 22, 3, 13 },{ 46, -47, 109, 22, 3, 13 }, + { 46, -48, 110, 22, 3, 13 },{ 46, -49, 111, 22, 3, 13 },{ 46, -50, 112, 22, 3, 13 },{ 46, -50, 113, 22, 3, 13 },{ 47, -51, 114, 22, 3, 13 }, + { 47, -52, 115, 22, 3, 13 },{ 47, -53, 116, 22, 3, 13 },{ 47, -54, 117, 22, 3, 13 },{ 47, -55, 118, 22, 3, 13 },{ 47, -56, 119, 22, 3, 13 }, + { 47, -57, 120, 24, 2, 14 },{ 47, -58, 121, 24, 2, 14 },{ 47, -59, 122, 24, 2, 14 },{ 47, -60, 123, 24, 2, 14 },{ 47, -61, 124, 24, 2, 14 }, + { 47, -62, 125, 24, 2, 14 },{ 47, -63, 126, 24, 2, 14 },{ 48, -64, 127, 24, 2, 14 },{ 48, -65, 127, 24, 2, 14 },{ 48, -66, 128, 24, 2, 14 }, + { 48, -67, 129, 24, 2, 14 },{ 48, -68, 129, 24, 2, 14 },{ 48, -69, 130, 24, 2, 14 },{ 48, -70, 131, 24, 2, 14 },{ 48, -71, 131, 24, 2, 14 }, + { 48, -72, 132, 8, 14, 0 },{ 48, -73, 132, 8, 14, 0 },{ 48, -74, 133, 8, 14, 0 },{ 48, -75, 133, 8, 15, 0 },{ 48, -76, 134, 8, 15, 0 }, + { 48, -77, 134, 8, 15, 0 },{ 48, -78, 135, 8, 15, 0 },{ 48, -79, 135, 8, 15, 0 },{ 48, -80, 136, 8, 15, 0 },{ 48, -81, 136, 8, 15, 0 }, + { 48, -82, 136, 8, 15, 0 },{ 48, -83, 137, 8, 15, 0 },{ 48, -84, 137, 8, 15, 0 },{ 48, -85, 137, 8, 15, 0 },{ 48, -86, 137, 8, 15, 0 }, + { 48, -87, 138, 8, 15, 0 },{ 48, -88, 138, 8, 15, 0 },{ 48, -89, 138, 8, 15, 0 },{ 48, -90, 138, 8, 16, 0 },{ 48, -91, 138, 8, 16, 0 }, + { 48, -92, 138, 8, 16, 0 },{ 48, -93, 139, 8, 16, 0 },{ 48, -94, 139, 8, 16, 0 },{ 48, -95, 139, 8, 16, 0 },{ 48, -96, 139, 8, 16, 0 }, + { 48, -97, 139, 8, 16, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoRightEighthDiveLoopUpToOrthogonal3,{ + { 15, 15, 1, 28, 52, 0 },{ 15, 15, 2, 28, 52, 0 },{ 14, 14, 3, 28, 52, 0 },{ 14, 14, 4, 28, 52, 0 },{ 13, 13, 5, 28, 52, 0 }, + { 13, 13, 6, 28, 52, 0 },{ 12, 12, 7, 28, 52, 0 },{ 12, 12, 8, 28, 52, 0 },{ 11, 12, 9, 28, 52, 0 },{ 11, 11, 10, 28, 52, 0 }, + { 10, 11, 11, 28, 52, 0 },{ 10, 10, 12, 28, 52, 0 },{ 9, 10, 13, 28, 52, 0 },{ 9, 9, 14, 28, 52, 0 },{ 8, 9, 15, 28, 52, 0 }, + { 8, 9, 16, 28, 52, 0 },{ 7, 8, 17, 28, 52, 0 },{ 7, 8, 18, 28, 52, 0 },{ 6, 7, 19, 28, 52, 0 },{ 6, 7, 20, 28, 52, 0 }, + { 5, 7, 21, 28, 52, 0 },{ 5, 6, 22, 28, 52, 0 },{ 4, 6, 23, 28, 52, 0 },{ 4, 5, 24, 28, 52, 0 },{ 3, 5, 25, 28, 52, 0 }, + { 3, 5, 26, 28, 4, 3 },{ 2, 4, 27, 28, 4, 3 },{ 2, 4, 28, 28, 4, 3 },{ 1, 4, 29, 28, 4, 3 },{ 1, 3, 30, 28, 4, 3 }, + { 0, 3, 31, 28, 4, 3 },{ 0, 3, 32, 28, 4, 3 },{ -1, 2, 33, 28, 4, 3 },{ -1, 2, 34, 28, 4, 3 },{ -2, 2, 35, 28, 4, 3 }, + { -2, 1, 36, 28, 4, 3 },{ -3, 1, 37, 28, 4, 3 },{ -3, 1, 38, 28, 4, 3 },{ -4, 0, 39, 28, 4, 3 },{ -4, 0, 40, 28, 4, 3 }, + { -5, 0, 41, 30, 52, 4 },{ -5, -1, 42, 30, 52, 4 },{ -6, -1, 43, 30, 52, 4 },{ -6, -1, 44, 30, 52, 4 },{ -7, -2, 45, 30, 52, 4 }, + { -7, -2, 46, 30, 52, 4 },{ -8, -2, 47, 30, 52, 4 },{ -8, -2, 48, 30, 52, 4 },{ -9, -3, 49, 30, 52, 4 },{ -9, -3, 50, 30, 52, 4 }, + { -10, -3, 51, 30, 52, 4 },{ -10, -4, 52, 30, 52, 4 },{ -11, -4, 53, 30, 52, 4 },{ -11, -4, 54, 30, 52, 4 },{ -12, -4, 55, 30, 52, 10 }, + { -12, -5, 56, 30, 52, 10 },{ -13, -5, 57, 30, 52, 10 },{ -13, -5, 58, 30, 52, 10 },{ -14, -5, 59, 30, 52, 10 },{ -14, -6, 60, 30, 52, 10 }, + { -15, -6, 61, 30, 52, 10 },{ -16, -6, 62, 30, 52, 10 },{ -16, -6, 63, 30, 52, 10 },{ -17, -7, 64, 30, 52, 10 },{ -17, -7, 65, 30, 52, 10 }, + { -18, -7, 66, 30, 52, 10 },{ -18, -7, 67, 30, 52, 10 },{ -19, -7, 68, 30, 52, 10 },{ -19, -8, 69, 30, 52, 10 },{ -20, -8, 70, 30, 52, 10 }, + { -21, -8, 71, 30, 52, 10 },{ -21, -8, 72, 30, 52, 10 },{ -22, -8, 73, 30, 52, 11 },{ -22, -9, 74, 30, 52, 11 },{ -23, -9, 75, 30, 52, 11 }, + { -23, -9, 76, 30, 52, 11 },{ -24, -9, 77, 30, 52, 11 },{ -25, -9, 78, 30, 52, 11 },{ -25, -10, 79, 30, 52, 11 },{ -26, -10, 80, 30, 52, 11 }, + { -26, -10, 81, 30, 52, 11 },{ -27, -10, 82, 30, 52, 11 },{ -28, -10, 83, 30, 52, 11 },{ -28, -11, 84, 30, 52, 11 },{ -29, -11, 85, 30, 52, 11 }, + { -30, -11, 86, 30, 52, 11 },{ -30, -11, 87, 30, 52, 11 },{ -31, -11, 88, 30, 52, 11 },{ -31, -11, 89, 30, 52, 11 },{ -32, -12, 90, 30, 52, 11 }, + { -33, -12, 91, 30, 52, 11 },{ -33, -12, 92, 30, 52, 11 },{ -34, -12, 93, 30, 52, 11 },{ -35, -12, 94, 30, 52, 11 },{ -35, -12, 95, 30, 52, 11 }, + { -36, -12, 96, 30, 52, 11 },{ -37, -13, 97, 30, 52, 11 },{ -38, -13, 98, 30, 52, 11 },{ -38, -13, 99, 30, 3, 13 },{ -39, -13, 100, 30, 3, 13 }, + { -40, -13, 101, 30, 3, 13 },{ -41, -13, 102, 30, 3, 13 },{ -41, -13, 103, 30, 3, 13 },{ -42, -14, 104, 30, 3, 13 },{ -43, -14, 105, 30, 3, 13 }, + { -44, -14, 106, 30, 3, 13 },{ -44, -14, 107, 30, 3, 13 },{ -45, -14, 108, 30, 3, 13 },{ -46, -14, 109, 30, 3, 13 },{ -47, -14, 110, 30, 3, 13 }, + { -48, -14, 111, 30, 3, 13 },{ -49, -14, 112, 30, 3, 13 },{ -49, -14, 113, 30, 3, 13 },{ -50, -15, 114, 30, 3, 13 },{ -51, -15, 115, 30, 3, 13 }, + { -52, -15, 116, 30, 3, 13 },{ -53, -15, 117, 30, 3, 13 },{ -54, -15, 118, 30, 3, 13 },{ -55, -15, 119, 30, 3, 13 },{ -56, -15, 120, 0, 2, 14 }, + { -57, -15, 121, 0, 2, 14 },{ -58, -15, 122, 0, 2, 14 },{ -59, -15, 123, 0, 2, 14 },{ -60, -15, 124, 0, 2, 14 },{ -61, -15, 125, 0, 2, 14 }, + { -62, -15, 126, 0, 2, 14 },{ -63, -16, 127, 0, 2, 14 },{ -64, -16, 127, 0, 2, 14 },{ -65, -16, 128, 0, 2, 14 },{ -66, -16, 129, 0, 2, 14 }, + { -67, -16, 129, 0, 2, 14 },{ -68, -16, 130, 0, 2, 14 },{ -69, -16, 131, 0, 2, 14 },{ -70, -16, 131, 0, 2, 14 },{ -71, -16, 132, 16, 14, 0 }, + { -72, -16, 132, 16, 14, 0 },{ -73, -16, 133, 16, 14, 0 },{ -74, -16, 133, 16, 15, 0 },{ -75, -16, 134, 16, 15, 0 },{ -76, -16, 134, 16, 15, 0 }, + { -77, -16, 135, 16, 15, 0 },{ -78, -16, 135, 16, 15, 0 },{ -79, -16, 136, 16, 15, 0 },{ -80, -16, 136, 16, 15, 0 },{ -81, -16, 136, 16, 15, 0 }, + { -82, -16, 137, 16, 15, 0 },{ -83, -16, 137, 16, 15, 0 },{ -84, -16, 137, 16, 15, 0 },{ -85, -16, 137, 16, 15, 0 },{ -86, -16, 138, 16, 15, 0 }, + { -87, -16, 138, 16, 15, 0 },{ -88, -16, 138, 16, 15, 0 },{ -89, -16, 138, 16, 16, 0 },{ -90, -16, 138, 16, 16, 0 },{ -91, -16, 138, 16, 16, 0 }, + { -92, -16, 139, 16, 16, 0 },{ -93, -16, 139, 16, 16, 0 },{ -94, -16, 139, 16, 16, 0 },{ -95, -16, 139, 16, 16, 0 },{ -96, -16, 139, 16, 16, 0 }, +}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoLeftEighthDiveLoopDownToOrthogonal0,{ + { 31, 16, 27, 16, 16, 0 },{ 30, 16, 27, 16, 16, 0 },{ 29, 16, 27, 16, 16, 0 },{ 28, 16, 27, 16, 16, 0 },{ 27, 16, 26, 16, 16, 0 }, + { 26, 16, 26, 16, 16, 0 },{ 25, 16, 26, 16, 16, 0 },{ 24, 16, 26, 16, 23, 0 },{ 23, 16, 26, 16, 23, 0 },{ 22, 16, 26, 16, 23, 0 }, + { 21, 16, 25, 16, 23, 0 },{ 20, 16, 25, 16, 23, 0 },{ 19, 16, 25, 16, 23, 0 },{ 18, 16, 25, 16, 23, 0 },{ 17, 16, 24, 16, 23, 0 }, + { 16, 16, 24, 16, 23, 0 },{ 15, 16, 24, 16, 23, 0 },{ 14, 16, 23, 16, 23, 0 },{ 13, 16, 23, 16, 23, 0 },{ 12, 16, 22, 16, 23, 0 }, + { 11, 16, 22, 16, 23, 0 },{ 10, 16, 21, 16, 23, 0 },{ 9, 16, 21, 16, 22, 0 },{ 8, 16, 20, 16, 22, 0 },{ 7, 16, 20, 16, 22, 0 }, + { 6, 16, 19, 0, 6, 9 },{ 5, 16, 19, 0, 6, 9 },{ 4, 16, 18, 0, 6, 9 },{ 3, 16, 17, 0, 6, 9 },{ 2, 16, 17, 0, 6, 9 }, + { 1, 16, 16, 0, 6, 9 },{ 0, 16, 15, 0, 6, 9 },{ -1, 16, 15, 0, 6, 9 },{ -2, 15, 14, 0, 6, 9 },{ -3, 15, 13, 0, 6, 9 }, + { -4, 15, 12, 0, 6, 9 },{ -5, 15, 11, 0, 6, 9 },{ -6, 15, 10, 0, 6, 9 },{ -7, 15, 9, 0, 6, 9 },{ -8, 15, 8, 0, 6, 9 }, + { -9, 15, 7, 30, 7, 8 },{ -10, 15, 6, 30, 7, 8 },{ -11, 15, 5, 30, 7, 8 },{ -12, 15, 4, 30, 7, 8 },{ -13, 15, 3, 30, 7, 8 }, + { -14, 15, 2, 30, 7, 8 },{ -15, 14, 1, 30, 7, 8 },{ -15, 14, 0, 30, 7, 8 },{ -16, 14, -1, 30, 7, 8 },{ -17, 14, -2, 30, 7, 8 }, + { -18, 14, -3, 30, 7, 8 },{ -19, 14, -4, 30, 7, 8 },{ -20, 14, -5, 30, 7, 8 },{ -20, 14, -6, 30, 7, 8 },{ -21, 14, -7, 30, 7, 8 }, + { -22, 14, -8, 30, 7, 8 },{ -23, 13, -9, 30, 7, 8 },{ -23, 13, -10, 30, 7, 8 },{ -24, 13, -11, 30, 7, 8 },{ -25, 13, -12, 30, 7, 8 }, + { -26, 13, -13, 30, 7, 8 },{ -26, 13, -14, 30, 55, 6 },{ -27, 13, -15, 30, 55, 6 },{ -28, 12, -16, 30, 55, 6 },{ -29, 12, -17, 30, 55, 6 }, + { -29, 12, -18, 30, 55, 6 },{ -30, 12, -19, 30, 55, 6 },{ -31, 12, -20, 30, 55, 6 },{ -31, 12, -21, 30, 55, 6 },{ -32, 12, -22, 30, 55, 6 }, + { -33, 11, -23, 30, 55, 6 },{ -33, 11, -24, 30, 55, 6 },{ -34, 11, -25, 30, 55, 6 },{ -34, 11, -26, 30, 55, 6 },{ -35, 11, -27, 30, 55, 6 }, + { -36, 11, -28, 30, 55, 6 },{ -36, 10, -29, 30, 55, 6 },{ -37, 10, -30, 30, 55, 6 },{ -38, 10, -31, 30, 55, 6 },{ -38, 10, -32, 30, 55, 6 }, + { -39, 10, -33, 30, 55, 6 },{ -39, 9, -34, 30, 55, 6 },{ -40, 9, -35, 30, 55, 6 },{ -41, 9, -36, 30, 55, 6 },{ -41, 9, -37, 30, 55, 6 }, + { -42, 9, -38, 30, 55, 6 },{ -42, 8, -39, 30, 55, 6 },{ -43, 8, -40, 30, 55, 5 },{ -43, 8, -41, 30, 55, 5 },{ -44, 8, -42, 30, 55, 5 }, + { -45, 8, -43, 30, 55, 5 },{ -45, 7, -44, 30, 55, 5 },{ -46, 7, -45, 30, 55, 5 },{ -46, 7, -46, 30, 55, 5 },{ -47, 7, -47, 30, 55, 5 }, + { -47, 7, -48, 30, 55, 5 },{ -48, 6, -49, 30, 55, 5 },{ -48, 6, -50, 30, 55, 5 },{ -49, 6, -51, 30, 55, 5 },{ -50, 6, -52, 30, 55, 5 }, + { -50, 5, -53, 30, 55, 5 },{ -51, 5, -54, 30, 55, 5 },{ -51, 5, -55, 30, 55, 5 },{ -52, 5, -56, 30, 55, 5 },{ -52, 4, -57, 30, 55, 5 }, + { -53, 4, -58, 30, 55, 2 },{ -53, 4, -59, 30, 55, 2 },{ -54, 4, -60, 30, 55, 2 },{ -54, 3, -61, 30, 55, 2 },{ -55, 3, -62, 30, 55, 2 }, + { -55, 3, -63, 30, 55, 2 },{ -56, 2, -64, 30, 55, 2 },{ -56, 2, -65, 30, 55, 2 },{ -57, 2, -66, 30, 55, 2 },{ -57, 2, -67, 30, 55, 2 }, + { -58, 1, -68, 30, 55, 2 },{ -58, 1, -69, 30, 55, 2 },{ -59, 1, -70, 30, 55, 2 },{ -59, 0, -71, 30, 55, 2 },{ -60, 0, -72, 28, 8, 1 }, + { -60, 0, -73, 28, 8, 1 },{ -61, -1, -74, 28, 8, 1 },{ -61, -1, -75, 28, 8, 1 },{ -62, -1, -76, 28, 8, 1 },{ -62, -2, -77, 28, 8, 1 }, + { -63, -2, -78, 28, 8, 1 },{ -63, -2, -79, 28, 8, 1 },{ -64, -3, -80, 28, 8, 1 },{ -64, -3, -81, 28, 8, 1 },{ -65, -3, -82, 28, 8, 1 }, + { -65, -4, -83, 28, 8, 1 },{ -66, -4, -84, 28, 8, 1 },{ -66, -4, -85, 28, 8, 1 },{ -67, -5, -86, 28, 8, 1 },{ -67, -5, -87, 28, 55, 0 }, + { -68, -5, -88, 28, 55, 0 },{ -68, -6, -89, 28, 55, 0 },{ -69, -6, -90, 28, 55, 0 },{ -69, -7, -91, 28, 55, 0 },{ -70, -7, -92, 28, 55, 0 }, + { -70, -7, -93, 28, 55, 0 },{ -71, -8, -94, 28, 55, 0 },{ -71, -8, -95, 28, 55, 0 },{ -72, -9, -96, 28, 55, 0 },{ -72, -9, -97, 28, 55, 0 }, + { -73, -9, -98, 28, 55, 0 },{ -73, -10, -99, 28, 55, 0 },{ -74, -10, -100, 28, 55, 0 },{ -74, -11, -101, 28, 55, 0 },{ -75, -11, -102, 28, 55, 0 }, + { -75, -12, -103, 28, 55, 0 },{ -76, -12, -104, 28, 55, 0 },{ -76, -12, -105, 28, 55, 0 },{ -77, -13, -106, 28, 55, 0 },{ -77, -13, -107, 28, 55, 0 }, + { -78, -14, -108, 28, 55, 0 },{ -78, -14, -109, 28, 55, 0 },{ -79, -15, -110, 28, 55, 0 },{ -79, -15, -111, 28, 55, 0 },{ -80, -16, -112, 28, 55, 0 }, +}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoLeftEighthDiveLoopDownToOrthogonal1,{ + { 16, 0, 27, 24, 16, 0 },{ 16, 1, 27, 24, 16, 0 },{ 16, 2, 27, 24, 16, 0 },{ 16, 3, 27, 24, 16, 0 },{ 16, 4, 27, 24, 16, 0 }, + { 16, 5, 26, 24, 16, 0 },{ 16, 6, 26, 24, 16, 0 },{ 16, 7, 26, 24, 16, 0 },{ 16, 8, 26, 24, 23, 0 },{ 16, 9, 26, 24, 23, 0 }, + { 16, 10, 26, 24, 23, 0 },{ 16, 11, 25, 24, 23, 0 },{ 16, 12, 25, 24, 23, 0 },{ 16, 13, 25, 24, 23, 0 },{ 16, 14, 25, 24, 23, 0 }, + { 16, 15, 24, 24, 23, 0 },{ 16, 16, 24, 24, 23, 0 },{ 16, 17, 24, 24, 23, 0 },{ 16, 18, 23, 24, 23, 0 },{ 16, 19, 23, 24, 23, 0 }, + { 16, 20, 22, 24, 23, 0 },{ 16, 21, 22, 24, 23, 0 },{ 16, 22, 21, 24, 23, 0 },{ 16, 23, 21, 24, 22, 0 },{ 16, 24, 20, 24, 22, 0 }, + { 16, 25, 20, 24, 22, 0 },{ 16, 26, 19, 8, 6, 9 },{ 16, 27, 19, 8, 6, 9 },{ 16, 28, 18, 8, 6, 9 },{ 16, 29, 17, 8, 6, 9 }, + { 16, 30, 17, 8, 6, 9 },{ 16, 31, 16, 8, 6, 9 },{ 16, 32, 15, 8, 6, 9 },{ 16, 33, 15, 8, 6, 9 },{ 15, 34, 14, 8, 6, 9 }, + { 15, 35, 13, 8, 6, 9 },{ 15, 36, 12, 8, 6, 9 },{ 15, 37, 11, 8, 6, 9 },{ 15, 38, 10, 8, 6, 9 },{ 15, 39, 9, 8, 6, 9 }, + { 15, 40, 8, 8, 6, 9 },{ 15, 41, 7, 6, 7, 8 },{ 15, 42, 6, 6, 7, 8 },{ 15, 43, 5, 6, 7, 8 },{ 15, 44, 4, 6, 7, 8 }, + { 15, 45, 3, 6, 7, 8 },{ 15, 46, 2, 6, 7, 8 },{ 14, 47, 1, 6, 7, 8 },{ 14, 47, 0, 6, 7, 8 },{ 14, 48, -1, 6, 7, 8 }, + { 14, 49, -2, 6, 7, 8 },{ 14, 50, -3, 6, 7, 8 },{ 14, 51, -4, 6, 7, 8 },{ 14, 52, -5, 6, 7, 8 },{ 14, 52, -6, 6, 7, 8 }, + { 14, 53, -7, 6, 7, 8 },{ 14, 54, -8, 6, 7, 8 },{ 13, 55, -9, 6, 7, 8 },{ 13, 55, -10, 6, 7, 8 },{ 13, 56, -11, 6, 7, 8 }, + { 13, 57, -12, 6, 7, 8 },{ 13, 58, -13, 6, 7, 8 },{ 13, 58, -14, 6, 55, 6 },{ 13, 59, -15, 6, 55, 6 },{ 12, 60, -16, 6, 55, 6 }, + { 12, 61, -17, 6, 55, 6 },{ 12, 61, -18, 6, 55, 6 },{ 12, 62, -19, 6, 55, 6 },{ 12, 63, -20, 6, 55, 6 },{ 12, 63, -21, 6, 55, 6 }, + { 12, 64, -22, 6, 55, 6 },{ 11, 65, -23, 6, 55, 6 },{ 11, 65, -24, 6, 55, 6 },{ 11, 66, -25, 6, 55, 6 },{ 11, 66, -26, 6, 55, 6 }, + { 11, 67, -27, 6, 55, 6 },{ 11, 68, -28, 6, 55, 6 },{ 10, 68, -29, 6, 55, 6 },{ 10, 69, -30, 6, 55, 6 },{ 10, 70, -31, 6, 55, 6 }, + { 10, 70, -32, 6, 55, 6 },{ 10, 71, -33, 6, 55, 6 },{ 9, 71, -34, 6, 55, 6 },{ 9, 72, -35, 6, 55, 6 },{ 9, 73, -36, 6, 55, 6 }, + { 9, 73, -37, 6, 55, 6 },{ 9, 74, -38, 6, 55, 6 },{ 8, 74, -39, 6, 55, 6 },{ 8, 75, -40, 6, 55, 5 },{ 8, 75, -41, 6, 55, 5 }, + { 8, 76, -42, 6, 55, 5 },{ 8, 77, -43, 6, 55, 5 },{ 7, 77, -44, 6, 55, 5 },{ 7, 78, -45, 6, 55, 5 },{ 7, 78, -46, 6, 55, 5 }, + { 7, 79, -47, 6, 55, 5 },{ 7, 79, -48, 6, 55, 5 },{ 6, 80, -49, 6, 55, 5 },{ 6, 80, -50, 6, 55, 5 },{ 6, 81, -51, 6, 55, 5 }, + { 6, 82, -52, 6, 55, 5 },{ 5, 82, -53, 6, 55, 5 },{ 5, 83, -54, 6, 55, 5 },{ 5, 83, -55, 6, 55, 5 },{ 5, 84, -56, 6, 55, 5 }, + { 4, 84, -57, 6, 55, 5 },{ 4, 85, -58, 6, 55, 2 },{ 4, 85, -59, 6, 55, 2 },{ 4, 86, -60, 6, 55, 2 },{ 3, 86, -61, 6, 55, 2 }, + { 3, 87, -62, 6, 55, 2 },{ 3, 87, -63, 6, 55, 2 },{ 2, 88, -64, 6, 55, 2 },{ 2, 88, -65, 6, 55, 2 },{ 2, 89, -66, 6, 55, 2 }, + { 2, 89, -67, 6, 55, 2 },{ 1, 90, -68, 6, 55, 2 },{ 1, 90, -69, 6, 55, 2 },{ 1, 91, -70, 6, 55, 2 },{ 0, 91, -71, 6, 55, 2 }, + { 0, 92, -72, 4, 8, 1 },{ 0, 92, -73, 4, 8, 1 },{ -1, 93, -74, 4, 8, 1 },{ -1, 93, -75, 4, 8, 1 },{ -1, 94, -76, 4, 8, 1 }, + { -2, 94, -77, 4, 8, 1 },{ -2, 95, -78, 4, 8, 1 },{ -2, 95, -79, 4, 8, 1 },{ -3, 96, -80, 4, 8, 1 },{ -3, 96, -81, 4, 8, 1 }, + { -3, 97, -82, 4, 8, 1 },{ -4, 97, -83, 4, 8, 1 },{ -4, 98, -84, 4, 8, 1 },{ -4, 98, -85, 4, 8, 1 },{ -5, 99, -86, 4, 8, 1 }, + { -5, 99, -87, 4, 55, 0 },{ -5, 100, -88, 4, 55, 0 },{ -6, 100, -89, 4, 55, 0 },{ -6, 101, -90, 4, 55, 0 },{ -7, 101, -91, 4, 55, 0 }, + { -7, 102, -92, 4, 55, 0 },{ -7, 102, -93, 4, 55, 0 },{ -8, 103, -94, 4, 55, 0 },{ -8, 103, -95, 4, 55, 0 },{ -9, 104, -96, 4, 55, 0 }, + { -9, 104, -97, 4, 55, 0 },{ -9, 105, -98, 4, 55, 0 },{ -10, 105, -99, 4, 55, 0 },{ -10, 106, -100, 4, 55, 0 },{ -11, 106, -101, 4, 55, 0 }, + { -11, 107, -102, 4, 55, 0 },{ -12, 107, -103, 4, 55, 0 },{ -12, 108, -104, 4, 55, 0 },{ -12, 108, -105, 4, 55, 0 },{ -13, 109, -106, 4, 55, 0 }, + { -13, 109, -107, 4, 55, 0 },{ -14, 110, -108, 4, 55, 0 },{ -14, 110, -109, 4, 55, 0 },{ -15, 111, -110, 4, 55, 0 },{ -15, 111, -111, 4, 55, 0 }, + { -16, 112, -112, 4, 55, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoLeftEighthDiveLoopDownToOrthogonal2,{ + { 0, 16, 27, 0, 16, 0 },{ 1, 16, 27, 0, 16, 0 },{ 2, 16, 27, 0, 16, 0 },{ 3, 16, 27, 0, 16, 0 },{ 4, 16, 27, 0, 16, 0 }, + { 5, 16, 26, 0, 16, 0 },{ 6, 16, 26, 0, 16, 0 },{ 7, 16, 26, 0, 16, 0 },{ 8, 16, 26, 0, 23, 0 },{ 9, 16, 26, 0, 23, 0 }, + { 10, 16, 26, 0, 23, 0 },{ 11, 16, 25, 0, 23, 0 },{ 12, 16, 25, 0, 23, 0 },{ 13, 16, 25, 0, 23, 0 },{ 14, 16, 25, 0, 23, 0 }, + { 15, 16, 24, 0, 23, 0 },{ 16, 16, 24, 0, 23, 0 },{ 17, 16, 24, 0, 23, 0 },{ 18, 16, 23, 0, 23, 0 },{ 19, 16, 23, 0, 23, 0 }, + { 20, 16, 22, 0, 23, 0 },{ 21, 16, 22, 0, 23, 0 },{ 22, 16, 21, 0, 23, 0 },{ 23, 16, 21, 0, 22, 0 },{ 24, 16, 20, 0, 22, 0 }, + { 25, 16, 20, 0, 22, 0 },{ 26, 16, 19, 16, 6, 9 },{ 27, 16, 19, 16, 6, 9 },{ 28, 16, 18, 16, 6, 9 },{ 29, 16, 17, 16, 6, 9 }, + { 30, 16, 17, 16, 6, 9 },{ 31, 16, 16, 16, 6, 9 },{ 32, 16, 15, 16, 6, 9 },{ 33, 16, 15, 16, 6, 9 },{ 34, 17, 14, 16, 6, 9 }, + { 35, 17, 13, 16, 6, 9 },{ 36, 17, 12, 16, 6, 9 },{ 37, 17, 11, 16, 6, 9 },{ 38, 17, 10, 16, 6, 9 },{ 39, 17, 9, 16, 6, 9 }, + { 40, 17, 8, 16, 6, 9 },{ 41, 17, 7, 14, 7, 8 },{ 42, 17, 6, 14, 7, 8 },{ 43, 17, 5, 14, 7, 8 },{ 44, 17, 4, 14, 7, 8 }, + { 45, 17, 3, 14, 7, 8 },{ 46, 17, 2, 14, 7, 8 },{ 47, 18, 1, 14, 7, 8 },{ 47, 18, 0, 14, 7, 8 },{ 48, 18, -1, 14, 7, 8 }, + { 49, 18, -2, 14, 7, 8 },{ 50, 18, -3, 14, 7, 8 },{ 51, 18, -4, 14, 7, 8 },{ 52, 18, -5, 14, 7, 8 },{ 52, 18, -6, 14, 7, 8 }, + { 53, 18, -7, 14, 7, 8 },{ 54, 18, -8, 14, 7, 8 },{ 55, 19, -9, 14, 7, 8 },{ 55, 19, -10, 14, 7, 8 },{ 56, 19, -11, 14, 7, 8 }, + { 57, 19, -12, 14, 7, 8 },{ 58, 19, -13, 14, 7, 8 },{ 58, 19, -14, 14, 55, 6 },{ 59, 19, -15, 14, 55, 6 },{ 60, 20, -16, 14, 55, 6 }, + { 61, 20, -17, 14, 55, 6 },{ 61, 20, -18, 14, 55, 6 },{ 62, 20, -19, 14, 55, 6 },{ 63, 20, -20, 14, 55, 6 },{ 63, 20, -21, 14, 55, 6 }, + { 64, 20, -22, 14, 55, 6 },{ 65, 21, -23, 14, 55, 6 },{ 65, 21, -24, 14, 55, 6 },{ 66, 21, -25, 14, 55, 6 },{ 66, 21, -26, 14, 55, 6 }, + { 67, 21, -27, 14, 55, 6 },{ 68, 21, -28, 14, 55, 6 },{ 68, 22, -29, 14, 55, 6 },{ 69, 22, -30, 14, 55, 6 },{ 70, 22, -31, 14, 55, 6 }, + { 70, 22, -32, 14, 55, 6 },{ 71, 22, -33, 14, 55, 6 },{ 71, 23, -34, 14, 55, 6 },{ 72, 23, -35, 14, 55, 6 },{ 73, 23, -36, 14, 55, 6 }, + { 73, 23, -37, 14, 55, 6 },{ 74, 23, -38, 14, 55, 6 },{ 74, 24, -39, 14, 55, 6 },{ 75, 24, -40, 14, 55, 5 },{ 75, 24, -41, 14, 55, 5 }, + { 76, 24, -42, 14, 55, 5 },{ 77, 24, -43, 14, 55, 5 },{ 77, 25, -44, 14, 55, 5 },{ 78, 25, -45, 14, 55, 5 },{ 78, 25, -46, 14, 55, 5 }, + { 79, 25, -47, 14, 55, 5 },{ 79, 25, -48, 14, 55, 5 },{ 80, 26, -49, 14, 55, 5 },{ 80, 26, -50, 14, 55, 5 },{ 81, 26, -51, 14, 55, 5 }, + { 82, 26, -52, 14, 55, 5 },{ 82, 27, -53, 14, 55, 5 },{ 83, 27, -54, 14, 55, 5 },{ 83, 27, -55, 14, 55, 5 },{ 84, 27, -56, 14, 55, 5 }, + { 84, 28, -57, 14, 55, 5 },{ 85, 28, -58, 14, 55, 2 },{ 85, 28, -59, 14, 55, 2 },{ 86, 28, -60, 14, 55, 2 },{ 86, 29, -61, 14, 55, 2 }, + { 87, 29, -62, 14, 55, 2 },{ 87, 29, -63, 14, 55, 2 },{ 88, 30, -64, 14, 55, 2 },{ 88, 30, -65, 14, 55, 2 },{ 89, 30, -66, 14, 55, 2 }, + { 89, 30, -67, 14, 55, 2 },{ 90, 31, -68, 14, 55, 2 },{ 90, 31, -69, 14, 55, 2 },{ 91, 31, -70, 14, 55, 2 },{ 91, 32, -71, 14, 55, 2 }, + { 92, 32, -72, 12, 8, 1 },{ 92, 32, -73, 12, 8, 1 },{ 93, 33, -74, 12, 8, 1 },{ 93, 33, -75, 12, 8, 1 },{ 94, 33, -76, 12, 8, 1 }, + { 94, 34, -77, 12, 8, 1 },{ 95, 34, -78, 12, 8, 1 },{ 95, 34, -79, 12, 8, 1 },{ 96, 35, -80, 12, 8, 1 },{ 96, 35, -81, 12, 8, 1 }, + { 97, 35, -82, 12, 8, 1 },{ 97, 36, -83, 12, 8, 1 },{ 98, 36, -84, 12, 8, 1 },{ 98, 36, -85, 12, 8, 1 },{ 99, 37, -86, 12, 8, 1 }, + { 99, 37, -87, 12, 55, 0 },{ 100, 37, -88, 12, 55, 0 },{ 100, 38, -89, 12, 55, 0 },{ 101, 38, -90, 12, 55, 0 },{ 101, 39, -91, 12, 55, 0 }, + { 102, 39, -92, 12, 55, 0 },{ 102, 39, -93, 12, 55, 0 },{ 103, 40, -94, 12, 55, 0 },{ 103, 40, -95, 12, 55, 0 },{ 104, 41, -96, 12, 55, 0 }, + { 104, 41, -97, 12, 55, 0 },{ 105, 41, -98, 12, 55, 0 },{ 105, 42, -99, 12, 55, 0 },{ 106, 42, -100, 12, 55, 0 },{ 106, 43, -101, 12, 55, 0 }, + { 107, 43, -102, 12, 55, 0 },{ 107, 44, -103, 12, 55, 0 },{ 108, 44, -104, 12, 55, 0 },{ 108, 44, -105, 12, 55, 0 },{ 109, 45, -106, 12, 55, 0 }, + { 109, 45, -107, 12, 55, 0 },{ 110, 46, -108, 12, 55, 0 },{ 110, 46, -109, 12, 55, 0 },{ 111, 47, -110, 12, 55, 0 },{ 111, 47, -111, 12, 55, 0 }, + { 112, 48, -112, 12, 55, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoLeftEighthDiveLoopDownToOrthogonal3,{ + { 16, 31, 27, 8, 16, 0 },{ 16, 30, 27, 8, 16, 0 },{ 16, 29, 27, 8, 16, 0 },{ 16, 28, 27, 8, 16, 0 },{ 16, 27, 26, 8, 16, 0 }, + { 16, 26, 26, 8, 16, 0 },{ 16, 25, 26, 8, 16, 0 },{ 16, 24, 26, 8, 23, 0 },{ 16, 23, 26, 8, 23, 0 },{ 16, 22, 26, 8, 23, 0 }, + { 16, 21, 25, 8, 23, 0 },{ 16, 20, 25, 8, 23, 0 },{ 16, 19, 25, 8, 23, 0 },{ 16, 18, 25, 8, 23, 0 },{ 16, 17, 24, 8, 23, 0 }, + { 16, 16, 24, 8, 23, 0 },{ 16, 15, 24, 8, 23, 0 },{ 16, 14, 23, 8, 23, 0 },{ 16, 13, 23, 8, 23, 0 },{ 16, 12, 22, 8, 23, 0 }, + { 16, 11, 22, 8, 23, 0 },{ 16, 10, 21, 8, 23, 0 },{ 16, 9, 21, 8, 22, 0 },{ 16, 8, 20, 8, 22, 0 },{ 16, 7, 20, 8, 22, 0 }, + { 16, 6, 19, 24, 6, 9 },{ 16, 5, 19, 24, 6, 9 },{ 16, 4, 18, 24, 6, 9 },{ 16, 3, 17, 24, 6, 9 },{ 16, 2, 17, 24, 6, 9 }, + { 16, 1, 16, 24, 6, 9 },{ 16, 0, 15, 24, 6, 9 },{ 16, -1, 15, 24, 6, 9 },{ 17, -2, 14, 24, 6, 9 },{ 17, -3, 13, 24, 6, 9 }, + { 17, -4, 12, 24, 6, 9 },{ 17, -5, 11, 24, 6, 9 },{ 17, -6, 10, 24, 6, 9 },{ 17, -7, 9, 24, 6, 9 },{ 17, -8, 8, 24, 6, 9 }, + { 17, -9, 7, 22, 7, 8 },{ 17, -10, 6, 22, 7, 8 },{ 17, -11, 5, 22, 7, 8 },{ 17, -12, 4, 22, 7, 8 },{ 17, -13, 3, 22, 7, 8 }, + { 17, -14, 2, 22, 7, 8 },{ 18, -15, 1, 22, 7, 8 },{ 18, -15, 0, 22, 7, 8 },{ 18, -16, -1, 22, 7, 8 },{ 18, -17, -2, 22, 7, 8 }, + { 18, -18, -3, 22, 7, 8 },{ 18, -19, -4, 22, 7, 8 },{ 18, -20, -5, 22, 7, 8 },{ 18, -20, -6, 22, 7, 8 },{ 18, -21, -7, 22, 7, 8 }, + { 18, -22, -8, 22, 7, 8 },{ 19, -23, -9, 22, 7, 8 },{ 19, -23, -10, 22, 7, 8 },{ 19, -24, -11, 22, 7, 8 },{ 19, -25, -12, 22, 7, 8 }, + { 19, -26, -13, 22, 7, 8 },{ 19, -26, -14, 22, 55, 6 },{ 19, -27, -15, 22, 55, 6 },{ 20, -28, -16, 22, 55, 6 },{ 20, -29, -17, 22, 55, 6 }, + { 20, -29, -18, 22, 55, 6 },{ 20, -30, -19, 22, 55, 6 },{ 20, -31, -20, 22, 55, 6 },{ 20, -31, -21, 22, 55, 6 },{ 20, -32, -22, 22, 55, 6 }, + { 21, -33, -23, 22, 55, 6 },{ 21, -33, -24, 22, 55, 6 },{ 21, -34, -25, 22, 55, 6 },{ 21, -34, -26, 22, 55, 6 },{ 21, -35, -27, 22, 55, 6 }, + { 21, -36, -28, 22, 55, 6 },{ 22, -36, -29, 22, 55, 6 },{ 22, -37, -30, 22, 55, 6 },{ 22, -38, -31, 22, 55, 6 },{ 22, -38, -32, 22, 55, 6 }, + { 22, -39, -33, 22, 55, 6 },{ 23, -39, -34, 22, 55, 6 },{ 23, -40, -35, 22, 55, 6 },{ 23, -41, -36, 22, 55, 6 },{ 23, -41, -37, 22, 55, 6 }, + { 23, -42, -38, 22, 55, 6 },{ 24, -42, -39, 22, 55, 6 },{ 24, -43, -40, 22, 55, 5 },{ 24, -43, -41, 22, 55, 5 },{ 24, -44, -42, 22, 55, 5 }, + { 24, -45, -43, 22, 55, 5 },{ 25, -45, -44, 22, 55, 5 },{ 25, -46, -45, 22, 55, 5 },{ 25, -46, -46, 22, 55, 5 },{ 25, -47, -47, 22, 55, 5 }, + { 25, -47, -48, 22, 55, 5 },{ 26, -48, -49, 22, 55, 5 },{ 26, -48, -50, 22, 55, 5 },{ 26, -49, -51, 22, 55, 5 },{ 26, -50, -52, 22, 55, 5 }, + { 27, -50, -53, 22, 55, 5 },{ 27, -51, -54, 22, 55, 5 },{ 27, -51, -55, 22, 55, 5 },{ 27, -52, -56, 22, 55, 5 },{ 28, -52, -57, 22, 55, 5 }, + { 28, -53, -58, 22, 55, 2 },{ 28, -53, -59, 22, 55, 2 },{ 28, -54, -60, 22, 55, 2 },{ 29, -54, -61, 22, 55, 2 },{ 29, -55, -62, 22, 55, 2 }, + { 29, -55, -63, 22, 55, 2 },{ 30, -56, -64, 22, 55, 2 },{ 30, -56, -65, 22, 55, 2 },{ 30, -57, -66, 22, 55, 2 },{ 30, -57, -67, 22, 55, 2 }, + { 31, -58, -68, 22, 55, 2 },{ 31, -58, -69, 22, 55, 2 },{ 31, -59, -70, 22, 55, 2 },{ 32, -59, -71, 22, 55, 2 },{ 32, -60, -72, 20, 8, 1 }, + { 32, -60, -73, 20, 8, 1 },{ 33, -61, -74, 20, 8, 1 },{ 33, -61, -75, 20, 8, 1 },{ 33, -62, -76, 20, 8, 1 },{ 34, -62, -77, 20, 8, 1 }, + { 34, -63, -78, 20, 8, 1 },{ 34, -63, -79, 20, 8, 1 },{ 35, -64, -80, 20, 8, 1 },{ 35, -64, -81, 20, 8, 1 },{ 35, -65, -82, 20, 8, 1 }, + { 36, -65, -83, 20, 8, 1 },{ 36, -66, -84, 20, 8, 1 },{ 36, -66, -85, 20, 8, 1 },{ 37, -67, -86, 20, 8, 1 },{ 37, -67, -87, 20, 55, 0 }, + { 37, -68, -88, 20, 55, 0 },{ 38, -68, -89, 20, 55, 0 },{ 38, -69, -90, 20, 55, 0 },{ 39, -69, -91, 20, 55, 0 },{ 39, -70, -92, 20, 55, 0 }, + { 39, -70, -93, 20, 55, 0 },{ 40, -71, -94, 20, 55, 0 },{ 40, -71, -95, 20, 55, 0 },{ 41, -72, -96, 20, 55, 0 },{ 41, -72, -97, 20, 55, 0 }, + { 41, -73, -98, 20, 55, 0 },{ 42, -73, -99, 20, 55, 0 },{ 42, -74, -100, 20, 55, 0 },{ 43, -74, -101, 20, 55, 0 },{ 43, -75, -102, 20, 55, 0 }, + { 44, -75, -103, 20, 55, 0 },{ 44, -76, -104, 20, 55, 0 },{ 44, -76, -105, 20, 55, 0 },{ 45, -77, -106, 20, 55, 0 },{ 45, -77, -107, 20, 55, 0 }, + { 46, -78, -108, 20, 55, 0 },{ 46, -78, -109, 20, 55, 0 },{ 47, -79, -110, 20, 55, 0 },{ 47, -79, -111, 20, 55, 0 },{ 48, -80, -112, 20, 55, 0 }, +}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoRightEighthDiveLoopDownToOrthogonal0,{ + { 31, 16, 27, 16, 16, 0 },{ 30, 16, 27, 16, 16, 0 },{ 29, 16, 27, 16, 16, 0 },{ 28, 16, 27, 16, 16, 0 },{ 27, 16, 26, 16, 16, 0 }, + { 26, 16, 26, 16, 16, 0 },{ 25, 16, 26, 16, 16, 0 },{ 24, 16, 26, 16, 23, 0 },{ 23, 16, 26, 16, 23, 0 },{ 22, 16, 26, 16, 23, 0 }, + { 21, 16, 25, 16, 23, 0 },{ 20, 16, 25, 16, 23, 0 },{ 19, 16, 25, 16, 23, 0 },{ 18, 16, 25, 16, 23, 0 },{ 17, 16, 24, 16, 23, 0 }, + { 16, 16, 24, 16, 23, 0 },{ 15, 16, 24, 16, 23, 0 },{ 14, 16, 23, 16, 23, 0 },{ 13, 16, 23, 16, 23, 0 },{ 12, 16, 22, 16, 23, 0 }, + { 11, 16, 22, 16, 23, 0 },{ 10, 16, 21, 16, 23, 0 },{ 9, 16, 21, 16, 22, 0 },{ 8, 16, 20, 16, 22, 0 },{ 7, 16, 20, 16, 22, 0 }, + { 6, 16, 19, 0, 6, 14 },{ 5, 16, 19, 0, 6, 14 },{ 4, 16, 18, 0, 6, 14 },{ 3, 16, 17, 0, 6, 14 },{ 2, 16, 17, 0, 6, 14 }, + { 1, 16, 16, 0, 6, 14 },{ 0, 16, 15, 0, 6, 14 },{ -1, 16, 15, 0, 6, 14 },{ -2, 17, 14, 0, 6, 14 },{ -3, 17, 13, 0, 6, 14 }, + { -4, 17, 12, 0, 6, 14 },{ -5, 17, 11, 0, 6, 14 },{ -6, 17, 10, 0, 6, 14 },{ -7, 17, 9, 0, 6, 14 },{ -8, 17, 8, 0, 6, 14 }, + { -9, 17, 7, 2, 7, 13 },{ -10, 17, 6, 2, 7, 13 },{ -11, 17, 5, 2, 7, 13 },{ -12, 17, 4, 2, 7, 13 },{ -13, 17, 3, 2, 7, 13 }, + { -14, 17, 2, 2, 7, 13 },{ -15, 18, 1, 2, 7, 13 },{ -15, 18, 0, 2, 7, 13 },{ -16, 18, -1, 2, 7, 13 },{ -17, 18, -2, 2, 7, 13 }, + { -18, 18, -3, 2, 7, 13 },{ -19, 18, -4, 2, 7, 13 },{ -20, 18, -5, 2, 7, 13 },{ -20, 18, -6, 2, 7, 13 },{ -21, 18, -7, 2, 7, 13 }, + { -22, 18, -8, 2, 7, 13 },{ -23, 19, -9, 2, 7, 13 },{ -23, 19, -10, 2, 7, 13 },{ -24, 19, -11, 2, 7, 13 },{ -25, 19, -12, 2, 7, 13 }, + { -26, 19, -13, 2, 7, 13 },{ -26, 19, -14, 2, 55, 11 },{ -27, 19, -15, 2, 55, 11 },{ -28, 20, -16, 2, 55, 11 },{ -29, 20, -17, 2, 55, 11 }, + { -29, 20, -18, 2, 55, 11 },{ -30, 20, -19, 2, 55, 11 },{ -31, 20, -20, 2, 55, 11 },{ -31, 20, -21, 2, 55, 11 },{ -32, 20, -22, 2, 55, 11 }, + { -33, 21, -23, 2, 55, 11 },{ -33, 21, -24, 2, 55, 11 },{ -34, 21, -25, 2, 55, 11 },{ -34, 21, -26, 2, 55, 11 },{ -35, 21, -27, 2, 55, 11 }, + { -36, 21, -28, 2, 55, 11 },{ -36, 22, -29, 2, 55, 11 },{ -37, 22, -30, 2, 55, 11 },{ -38, 22, -31, 2, 55, 11 },{ -38, 22, -32, 2, 55, 11 }, + { -39, 22, -33, 2, 55, 11 },{ -39, 23, -34, 2, 55, 11 },{ -40, 23, -35, 2, 55, 11 },{ -41, 23, -36, 2, 55, 11 },{ -41, 23, -37, 2, 55, 11 }, + { -42, 23, -38, 2, 55, 11 },{ -42, 24, -39, 2, 55, 11 },{ -43, 24, -40, 2, 55, 10 },{ -43, 24, -41, 2, 55, 10 },{ -44, 24, -42, 2, 55, 10 }, + { -45, 24, -43, 2, 55, 10 },{ -45, 25, -44, 2, 55, 10 },{ -46, 25, -45, 2, 55, 10 },{ -46, 25, -46, 2, 55, 10 },{ -47, 25, -47, 2, 55, 10 }, + { -47, 25, -48, 2, 55, 10 },{ -48, 26, -49, 2, 55, 10 },{ -48, 26, -50, 2, 55, 10 },{ -49, 26, -51, 2, 55, 10 },{ -50, 26, -52, 2, 55, 10 }, + { -50, 27, -53, 2, 55, 10 },{ -51, 27, -54, 2, 55, 10 },{ -51, 27, -55, 2, 55, 10 },{ -52, 27, -56, 2, 55, 10 },{ -52, 28, -57, 2, 55, 10 }, + { -53, 28, -58, 2, 55, 4 },{ -53, 28, -59, 2, 55, 4 },{ -54, 28, -60, 2, 55, 4 },{ -54, 29, -61, 2, 55, 4 },{ -55, 29, -62, 2, 55, 4 }, + { -55, 29, -63, 2, 55, 4 },{ -56, 30, -64, 2, 55, 4 },{ -56, 30, -65, 2, 55, 4 },{ -57, 30, -66, 2, 55, 4 },{ -57, 30, -67, 2, 55, 4 }, + { -58, 31, -68, 2, 55, 4 },{ -58, 31, -69, 2, 55, 4 },{ -59, 31, -70, 2, 55, 4 },{ -59, 32, -71, 2, 55, 4 },{ -60, 32, -72, 4, 8, 3 }, + { -60, 32, -73, 4, 8, 3 },{ -61, 33, -74, 4, 8, 3 },{ -61, 33, -75, 4, 8, 3 },{ -62, 33, -76, 4, 8, 3 },{ -62, 34, -77, 4, 8, 3 }, + { -63, 34, -78, 4, 8, 3 },{ -63, 34, -79, 4, 8, 3 },{ -64, 35, -80, 4, 8, 3 },{ -64, 35, -81, 4, 8, 3 },{ -65, 35, -82, 4, 8, 3 }, + { -65, 36, -83, 4, 8, 3 },{ -66, 36, -84, 4, 8, 3 },{ -66, 36, -85, 4, 8, 3 },{ -67, 37, -86, 4, 8, 3 },{ -67, 37, -87, 4, 55, 0 }, + { -68, 37, -88, 4, 55, 0 },{ -68, 38, -89, 4, 55, 0 },{ -69, 38, -90, 4, 55, 0 },{ -69, 39, -91, 4, 55, 0 },{ -70, 39, -92, 4, 55, 0 }, + { -70, 39, -93, 4, 55, 0 },{ -71, 40, -94, 4, 55, 0 },{ -71, 40, -95, 4, 55, 0 },{ -72, 41, -96, 4, 55, 0 },{ -72, 41, -97, 4, 55, 0 }, + { -73, 41, -98, 4, 55, 0 },{ -73, 42, -99, 4, 55, 0 },{ -74, 42, -100, 4, 55, 0 },{ -74, 43, -101, 4, 55, 0 },{ -75, 43, -102, 4, 55, 0 }, + { -75, 44, -103, 4, 55, 0 },{ -76, 44, -104, 4, 55, 0 },{ -76, 44, -105, 4, 55, 0 },{ -77, 45, -106, 4, 55, 0 },{ -77, 45, -107, 4, 55, 0 }, + { -78, 46, -108, 4, 55, 0 },{ -78, 46, -109, 4, 55, 0 },{ -79, 47, -110, 4, 55, 0 },{ -79, 47, -111, 4, 55, 0 },{ -80, 48, -112, 4, 55, 0 }, +}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoRightEighthDiveLoopDownToOrthogonal1,{ + { 16, 0, 27, 24, 16, 0 },{ 16, 1, 27, 24, 16, 0 },{ 16, 2, 27, 24, 16, 0 },{ 16, 3, 27, 24, 16, 0 },{ 16, 4, 27, 24, 16, 0 }, + { 16, 5, 26, 24, 16, 0 },{ 16, 6, 26, 24, 16, 0 },{ 16, 7, 26, 24, 16, 0 },{ 16, 8, 26, 24, 23, 0 },{ 16, 9, 26, 24, 23, 0 }, + { 16, 10, 26, 24, 23, 0 },{ 16, 11, 25, 24, 23, 0 },{ 16, 12, 25, 24, 23, 0 },{ 16, 13, 25, 24, 23, 0 },{ 16, 14, 25, 24, 23, 0 }, + { 16, 15, 24, 24, 23, 0 },{ 16, 16, 24, 24, 23, 0 },{ 16, 17, 24, 24, 23, 0 },{ 16, 18, 23, 24, 23, 0 },{ 16, 19, 23, 24, 23, 0 }, + { 16, 20, 22, 24, 23, 0 },{ 16, 21, 22, 24, 23, 0 },{ 16, 22, 21, 24, 23, 0 },{ 16, 23, 21, 24, 22, 0 },{ 16, 24, 20, 24, 22, 0 }, + { 16, 25, 20, 24, 22, 0 },{ 16, 26, 19, 8, 6, 14 },{ 16, 27, 19, 8, 6, 14 },{ 16, 28, 18, 8, 6, 14 },{ 16, 29, 17, 8, 6, 14 }, + { 16, 30, 17, 8, 6, 14 },{ 16, 31, 16, 8, 6, 14 },{ 16, 32, 15, 8, 6, 14 },{ 16, 33, 15, 8, 6, 14 },{ 17, 34, 14, 8, 6, 14 }, + { 17, 35, 13, 8, 6, 14 },{ 17, 36, 12, 8, 6, 14 },{ 17, 37, 11, 8, 6, 14 },{ 17, 38, 10, 8, 6, 14 },{ 17, 39, 9, 8, 6, 14 }, + { 17, 40, 8, 8, 6, 14 },{ 17, 41, 7, 10, 7, 13 },{ 17, 42, 6, 10, 7, 13 },{ 17, 43, 5, 10, 7, 13 },{ 17, 44, 4, 10, 7, 13 }, + { 17, 45, 3, 10, 7, 13 },{ 17, 46, 2, 10, 7, 13 },{ 18, 47, 1, 10, 7, 13 },{ 18, 47, 0, 10, 7, 13 },{ 18, 48, -1, 10, 7, 13 }, + { 18, 49, -2, 10, 7, 13 },{ 18, 50, -3, 10, 7, 13 },{ 18, 51, -4, 10, 7, 13 },{ 18, 52, -5, 10, 7, 13 },{ 18, 52, -6, 10, 7, 13 }, + { 18, 53, -7, 10, 7, 13 },{ 18, 54, -8, 10, 7, 13 },{ 19, 55, -9, 10, 7, 13 },{ 19, 55, -10, 10, 7, 13 },{ 19, 56, -11, 10, 7, 13 }, + { 19, 57, -12, 10, 7, 13 },{ 19, 58, -13, 10, 7, 13 },{ 19, 58, -14, 10, 55, 11 },{ 19, 59, -15, 10, 55, 11 },{ 20, 60, -16, 10, 55, 11 }, + { 20, 61, -17, 10, 55, 11 },{ 20, 61, -18, 10, 55, 11 },{ 20, 62, -19, 10, 55, 11 },{ 20, 63, -20, 10, 55, 11 },{ 20, 63, -21, 10, 55, 11 }, + { 20, 64, -22, 10, 55, 11 },{ 21, 65, -23, 10, 55, 11 },{ 21, 65, -24, 10, 55, 11 },{ 21, 66, -25, 10, 55, 11 },{ 21, 66, -26, 10, 55, 11 }, + { 21, 67, -27, 10, 55, 11 },{ 21, 68, -28, 10, 55, 11 },{ 22, 68, -29, 10, 55, 11 },{ 22, 69, -30, 10, 55, 11 },{ 22, 70, -31, 10, 55, 11 }, + { 22, 70, -32, 10, 55, 11 },{ 22, 71, -33, 10, 55, 11 },{ 23, 71, -34, 10, 55, 11 },{ 23, 72, -35, 10, 55, 11 },{ 23, 73, -36, 10, 55, 11 }, + { 23, 73, -37, 10, 55, 11 },{ 23, 74, -38, 10, 55, 11 },{ 24, 74, -39, 10, 55, 11 },{ 24, 75, -40, 10, 55, 10 },{ 24, 75, -41, 10, 55, 10 }, + { 24, 76, -42, 10, 55, 10 },{ 24, 77, -43, 10, 55, 10 },{ 25, 77, -44, 10, 55, 10 },{ 25, 78, -45, 10, 55, 10 },{ 25, 78, -46, 10, 55, 10 }, + { 25, 79, -47, 10, 55, 10 },{ 25, 79, -48, 10, 55, 10 },{ 26, 80, -49, 10, 55, 10 },{ 26, 80, -50, 10, 55, 10 },{ 26, 81, -51, 10, 55, 10 }, + { 26, 82, -52, 10, 55, 10 },{ 27, 82, -53, 10, 55, 10 },{ 27, 83, -54, 10, 55, 10 },{ 27, 83, -55, 10, 55, 10 },{ 27, 84, -56, 10, 55, 10 }, + { 28, 84, -57, 10, 55, 10 },{ 28, 85, -58, 10, 55, 4 },{ 28, 85, -59, 10, 55, 4 },{ 28, 86, -60, 10, 55, 4 },{ 29, 86, -61, 10, 55, 4 }, + { 29, 87, -62, 10, 55, 4 },{ 29, 87, -63, 10, 55, 4 },{ 30, 88, -64, 10, 55, 4 },{ 30, 88, -65, 10, 55, 4 },{ 30, 89, -66, 10, 55, 4 }, + { 30, 89, -67, 10, 55, 4 },{ 31, 90, -68, 10, 55, 4 },{ 31, 90, -69, 10, 55, 4 },{ 31, 91, -70, 10, 55, 4 },{ 32, 91, -71, 10, 55, 4 }, + { 32, 92, -72, 12, 8, 3 },{ 32, 92, -73, 12, 8, 3 },{ 33, 93, -74, 12, 8, 3 },{ 33, 93, -75, 12, 8, 3 },{ 33, 94, -76, 12, 8, 3 }, + { 34, 94, -77, 12, 8, 3 },{ 34, 95, -78, 12, 8, 3 },{ 34, 95, -79, 12, 8, 3 },{ 35, 96, -80, 12, 8, 3 },{ 35, 96, -81, 12, 8, 3 }, + { 35, 97, -82, 12, 8, 3 },{ 36, 97, -83, 12, 8, 3 },{ 36, 98, -84, 12, 8, 3 },{ 36, 98, -85, 12, 8, 3 },{ 37, 99, -86, 12, 8, 3 }, + { 37, 99, -87, 12, 55, 0 },{ 37, 100, -88, 12, 55, 0 },{ 38, 100, -89, 12, 55, 0 },{ 38, 101, -90, 12, 55, 0 },{ 39, 101, -91, 12, 55, 0 }, + { 39, 102, -92, 12, 55, 0 },{ 39, 102, -93, 12, 55, 0 },{ 40, 103, -94, 12, 55, 0 },{ 40, 103, -95, 12, 55, 0 },{ 41, 104, -96, 12, 55, 0 }, + { 41, 104, -97, 12, 55, 0 },{ 41, 105, -98, 12, 55, 0 },{ 42, 105, -99, 12, 55, 0 },{ 42, 106, -100, 12, 55, 0 },{ 43, 106, -101, 12, 55, 0 }, + { 43, 107, -102, 12, 55, 0 },{ 44, 107, -103, 12, 55, 0 },{ 44, 108, -104, 12, 55, 0 },{ 44, 108, -105, 12, 55, 0 },{ 45, 109, -106, 12, 55, 0 }, + { 45, 109, -107, 12, 55, 0 },{ 46, 110, -108, 12, 55, 0 },{ 46, 110, -109, 12, 55, 0 },{ 47, 111, -110, 12, 55, 0 },{ 47, 111, -111, 12, 55, 0 }, + { 48, 112, -112, 12, 55, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoRightEighthDiveLoopDownToOrthogonal2,{ + { 0, 16, 27, 0, 16, 0 },{ 1, 16, 27, 0, 16, 0 },{ 2, 16, 27, 0, 16, 0 },{ 3, 16, 27, 0, 16, 0 },{ 4, 16, 27, 0, 16, 0 }, + { 5, 16, 26, 0, 16, 0 },{ 6, 16, 26, 0, 16, 0 },{ 7, 16, 26, 0, 16, 0 },{ 8, 16, 26, 0, 23, 0 },{ 9, 16, 26, 0, 23, 0 }, + { 10, 16, 26, 0, 23, 0 },{ 11, 16, 25, 0, 23, 0 },{ 12, 16, 25, 0, 23, 0 },{ 13, 16, 25, 0, 23, 0 },{ 14, 16, 25, 0, 23, 0 }, + { 15, 16, 24, 0, 23, 0 },{ 16, 16, 24, 0, 23, 0 },{ 17, 16, 24, 0, 23, 0 },{ 18, 16, 23, 0, 23, 0 },{ 19, 16, 23, 0, 23, 0 }, + { 20, 16, 22, 0, 23, 0 },{ 21, 16, 22, 0, 23, 0 },{ 22, 16, 21, 0, 23, 0 },{ 23, 16, 21, 0, 22, 0 },{ 24, 16, 20, 0, 22, 0 }, + { 25, 16, 20, 0, 22, 0 },{ 26, 16, 19, 16, 6, 14 },{ 27, 16, 19, 16, 6, 14 },{ 28, 16, 18, 16, 6, 14 },{ 29, 16, 17, 16, 6, 14 }, + { 30, 16, 17, 16, 6, 14 },{ 31, 16, 16, 16, 6, 14 },{ 32, 16, 15, 16, 6, 14 },{ 33, 16, 15, 16, 6, 14 },{ 34, 15, 14, 16, 6, 14 }, + { 35, 15, 13, 16, 6, 14 },{ 36, 15, 12, 16, 6, 14 },{ 37, 15, 11, 16, 6, 14 },{ 38, 15, 10, 16, 6, 14 },{ 39, 15, 9, 16, 6, 14 }, + { 40, 15, 8, 16, 6, 14 },{ 41, 15, 7, 18, 7, 13 },{ 42, 15, 6, 18, 7, 13 },{ 43, 15, 5, 18, 7, 13 },{ 44, 15, 4, 18, 7, 13 }, + { 45, 15, 3, 18, 7, 13 },{ 46, 15, 2, 18, 7, 13 },{ 47, 14, 1, 18, 7, 13 },{ 47, 14, 0, 18, 7, 13 },{ 48, 14, -1, 18, 7, 13 }, + { 49, 14, -2, 18, 7, 13 },{ 50, 14, -3, 18, 7, 13 },{ 51, 14, -4, 18, 7, 13 },{ 52, 14, -5, 18, 7, 13 },{ 52, 14, -6, 18, 7, 13 }, + { 53, 14, -7, 18, 7, 13 },{ 54, 14, -8, 18, 7, 13 },{ 55, 13, -9, 18, 7, 13 },{ 55, 13, -10, 18, 7, 13 },{ 56, 13, -11, 18, 7, 13 }, + { 57, 13, -12, 18, 7, 13 },{ 58, 13, -13, 18, 7, 13 },{ 58, 13, -14, 18, 55, 11 },{ 59, 13, -15, 18, 55, 11 },{ 60, 12, -16, 18, 55, 11 }, + { 61, 12, -17, 18, 55, 11 },{ 61, 12, -18, 18, 55, 11 },{ 62, 12, -19, 18, 55, 11 },{ 63, 12, -20, 18, 55, 11 },{ 63, 12, -21, 18, 55, 11 }, + { 64, 12, -22, 18, 55, 11 },{ 65, 11, -23, 18, 55, 11 },{ 65, 11, -24, 18, 55, 11 },{ 66, 11, -25, 18, 55, 11 },{ 66, 11, -26, 18, 55, 11 }, + { 67, 11, -27, 18, 55, 11 },{ 68, 11, -28, 18, 55, 11 },{ 68, 10, -29, 18, 55, 11 },{ 69, 10, -30, 18, 55, 11 },{ 70, 10, -31, 18, 55, 11 }, + { 70, 10, -32, 18, 55, 11 },{ 71, 10, -33, 18, 55, 11 },{ 71, 9, -34, 18, 55, 11 },{ 72, 9, -35, 18, 55, 11 },{ 73, 9, -36, 18, 55, 11 }, + { 73, 9, -37, 18, 55, 11 },{ 74, 9, -38, 18, 55, 11 },{ 74, 8, -39, 18, 55, 11 },{ 75, 8, -40, 18, 55, 10 },{ 75, 8, -41, 18, 55, 10 }, + { 76, 8, -42, 18, 55, 10 },{ 77, 8, -43, 18, 55, 10 },{ 77, 7, -44, 18, 55, 10 },{ 78, 7, -45, 18, 55, 10 },{ 78, 7, -46, 18, 55, 10 }, + { 79, 7, -47, 18, 55, 10 },{ 79, 7, -48, 18, 55, 10 },{ 80, 6, -49, 18, 55, 10 },{ 80, 6, -50, 18, 55, 10 },{ 81, 6, -51, 18, 55, 10 }, + { 82, 6, -52, 18, 55, 10 },{ 82, 5, -53, 18, 55, 10 },{ 83, 5, -54, 18, 55, 10 },{ 83, 5, -55, 18, 55, 10 },{ 84, 5, -56, 18, 55, 10 }, + { 84, 4, -57, 18, 55, 10 },{ 85, 4, -58, 18, 55, 4 },{ 85, 4, -59, 18, 55, 4 },{ 86, 4, -60, 18, 55, 4 },{ 86, 3, -61, 18, 55, 4 }, + { 87, 3, -62, 18, 55, 4 },{ 87, 3, -63, 18, 55, 4 },{ 88, 2, -64, 18, 55, 4 },{ 88, 2, -65, 18, 55, 4 },{ 89, 2, -66, 18, 55, 4 }, + { 89, 2, -67, 18, 55, 4 },{ 90, 1, -68, 18, 55, 4 },{ 90, 1, -69, 18, 55, 4 },{ 91, 1, -70, 18, 55, 4 },{ 91, 0, -71, 18, 55, 4 }, + { 92, 0, -72, 20, 8, 3 },{ 92, 0, -73, 20, 8, 3 },{ 93, -1, -74, 20, 8, 3 },{ 93, -1, -75, 20, 8, 3 },{ 94, -1, -76, 20, 8, 3 }, + { 94, -2, -77, 20, 8, 3 },{ 95, -2, -78, 20, 8, 3 },{ 95, -2, -79, 20, 8, 3 },{ 96, -3, -80, 20, 8, 3 },{ 96, -3, -81, 20, 8, 3 }, + { 97, -3, -82, 20, 8, 3 },{ 97, -4, -83, 20, 8, 3 },{ 98, -4, -84, 20, 8, 3 },{ 98, -4, -85, 20, 8, 3 },{ 99, -5, -86, 20, 8, 3 }, + { 99, -5, -87, 20, 55, 0 },{ 100, -5, -88, 20, 55, 0 },{ 100, -6, -89, 20, 55, 0 },{ 101, -6, -90, 20, 55, 0 },{ 101, -7, -91, 20, 55, 0 }, + { 102, -7, -92, 20, 55, 0 },{ 102, -7, -93, 20, 55, 0 },{ 103, -8, -94, 20, 55, 0 },{ 103, -8, -95, 20, 55, 0 },{ 104, -9, -96, 20, 55, 0 }, + { 104, -9, -97, 20, 55, 0 },{ 105, -9, -98, 20, 55, 0 },{ 105, -10, -99, 20, 55, 0 },{ 106, -10, -100, 20, 55, 0 },{ 106, -11, -101, 20, 55, 0 }, + { 107, -11, -102, 20, 55, 0 },{ 107, -12, -103, 20, 55, 0 },{ 108, -12, -104, 20, 55, 0 },{ 108, -12, -105, 20, 55, 0 },{ 109, -13, -106, 20, 55, 0 }, + { 109, -13, -107, 20, 55, 0 },{ 110, -14, -108, 20, 55, 0 },{ 110, -14, -109, 20, 55, 0 },{ 111, -15, -110, 20, 55, 0 },{ 111, -15, -111, 20, 55, 0 }, + { 112, -16, -112, 20, 55, 0 },}) + +CREATE_VEHICLE_INFO(TrackVehicleInfoRightEighthDiveLoopDownToOrthogonal3,{ + { 16, 31, 27, 8, 16, 0 },{ 16, 30, 27, 8, 16, 0 },{ 16, 29, 27, 8, 16, 0 },{ 16, 28, 27, 8, 16, 0 },{ 16, 27, 26, 8, 16, 0 }, + { 16, 26, 26, 8, 16, 0 },{ 16, 25, 26, 8, 16, 0 },{ 16, 24, 26, 8, 23, 0 },{ 16, 23, 26, 8, 23, 0 },{ 16, 22, 26, 8, 23, 0 }, + { 16, 21, 25, 8, 23, 0 },{ 16, 20, 25, 8, 23, 0 },{ 16, 19, 25, 8, 23, 0 },{ 16, 18, 25, 8, 23, 0 },{ 16, 17, 24, 8, 23, 0 }, + { 16, 16, 24, 8, 23, 0 },{ 16, 15, 24, 8, 23, 0 },{ 16, 14, 23, 8, 23, 0 },{ 16, 13, 23, 8, 23, 0 },{ 16, 12, 22, 8, 23, 0 }, + { 16, 11, 22, 8, 23, 0 },{ 16, 10, 21, 8, 23, 0 },{ 16, 9, 21, 8, 22, 0 },{ 16, 8, 20, 8, 22, 0 },{ 16, 7, 20, 8, 22, 0 }, + { 16, 6, 19, 24, 6, 14 },{ 16, 5, 19, 24, 6, 14 },{ 16, 4, 18, 24, 6, 14 },{ 16, 3, 17, 24, 6, 14 },{ 16, 2, 17, 24, 6, 14 }, + { 16, 1, 16, 24, 6, 14 },{ 16, 0, 15, 24, 6, 14 },{ 16, -1, 15, 24, 6, 14 },{ 15, -2, 14, 24, 6, 14 },{ 15, -3, 13, 24, 6, 14 }, + { 15, -4, 12, 24, 6, 14 },{ 15, -5, 11, 24, 6, 14 },{ 15, -6, 10, 24, 6, 14 },{ 15, -7, 9, 24, 6, 14 },{ 15, -8, 8, 24, 6, 14 }, + { 15, -9, 7, 26, 7, 13 },{ 15, -10, 6, 26, 7, 13 },{ 15, -11, 5, 26, 7, 13 },{ 15, -12, 4, 26, 7, 13 },{ 15, -13, 3, 26, 7, 13 }, + { 15, -14, 2, 26, 7, 13 },{ 14, -15, 1, 26, 7, 13 },{ 14, -15, 0, 26, 7, 13 },{ 14, -16, -1, 26, 7, 13 },{ 14, -17, -2, 26, 7, 13 }, + { 14, -18, -3, 26, 7, 13 },{ 14, -19, -4, 26, 7, 13 },{ 14, -20, -5, 26, 7, 13 },{ 14, -20, -6, 26, 7, 13 },{ 14, -21, -7, 26, 7, 13 }, + { 14, -22, -8, 26, 7, 13 },{ 13, -23, -9, 26, 7, 13 },{ 13, -23, -10, 26, 7, 13 },{ 13, -24, -11, 26, 7, 13 },{ 13, -25, -12, 26, 7, 13 }, + { 13, -26, -13, 26, 7, 13 },{ 13, -26, -14, 26, 55, 11 },{ 13, -27, -15, 26, 55, 11 },{ 12, -28, -16, 26, 55, 11 },{ 12, -29, -17, 26, 55, 11 }, + { 12, -29, -18, 26, 55, 11 },{ 12, -30, -19, 26, 55, 11 },{ 12, -31, -20, 26, 55, 11 },{ 12, -31, -21, 26, 55, 11 },{ 12, -32, -22, 26, 55, 11 }, + { 11, -33, -23, 26, 55, 11 },{ 11, -33, -24, 26, 55, 11 },{ 11, -34, -25, 26, 55, 11 },{ 11, -34, -26, 26, 55, 11 },{ 11, -35, -27, 26, 55, 11 }, + { 11, -36, -28, 26, 55, 11 },{ 10, -36, -29, 26, 55, 11 },{ 10, -37, -30, 26, 55, 11 },{ 10, -38, -31, 26, 55, 11 },{ 10, -38, -32, 26, 55, 11 }, + { 10, -39, -33, 26, 55, 11 },{ 9, -39, -34, 26, 55, 11 },{ 9, -40, -35, 26, 55, 11 },{ 9, -41, -36, 26, 55, 11 },{ 9, -41, -37, 26, 55, 11 }, + { 9, -42, -38, 26, 55, 11 },{ 8, -42, -39, 26, 55, 11 },{ 8, -43, -40, 26, 55, 10 },{ 8, -43, -41, 26, 55, 10 },{ 8, -44, -42, 26, 55, 10 }, + { 8, -45, -43, 26, 55, 10 },{ 7, -45, -44, 26, 55, 10 },{ 7, -46, -45, 26, 55, 10 },{ 7, -46, -46, 26, 55, 10 },{ 7, -47, -47, 26, 55, 10 }, + { 7, -47, -48, 26, 55, 10 },{ 6, -48, -49, 26, 55, 10 },{ 6, -48, -50, 26, 55, 10 },{ 6, -49, -51, 26, 55, 10 },{ 6, -50, -52, 26, 55, 10 }, + { 5, -50, -53, 26, 55, 10 },{ 5, -51, -54, 26, 55, 10 },{ 5, -51, -55, 26, 55, 10 },{ 5, -52, -56, 26, 55, 10 },{ 4, -52, -57, 26, 55, 10 }, + { 4, -53, -58, 26, 55, 4 },{ 4, -53, -59, 26, 55, 4 },{ 4, -54, -60, 26, 55, 4 },{ 3, -54, -61, 26, 55, 4 },{ 3, -55, -62, 26, 55, 4 }, + { 3, -55, -63, 26, 55, 4 },{ 2, -56, -64, 26, 55, 4 },{ 2, -56, -65, 26, 55, 4 },{ 2, -57, -66, 26, 55, 4 },{ 2, -57, -67, 26, 55, 4 }, + { 1, -58, -68, 26, 55, 4 },{ 1, -58, -69, 26, 55, 4 },{ 1, -59, -70, 26, 55, 4 },{ 0, -59, -71, 26, 55, 4 },{ 0, -60, -72, 28, 8, 3 }, + { 0, -60, -73, 28, 8, 3 },{ -1, -61, -74, 28, 8, 3 },{ -1, -61, -75, 28, 8, 3 },{ -1, -62, -76, 28, 8, 3 },{ -2, -62, -77, 28, 8, 3 }, + { -2, -63, -78, 28, 8, 3 },{ -2, -63, -79, 28, 8, 3 },{ -3, -64, -80, 28, 8, 3 },{ -3, -64, -81, 28, 8, 3 },{ -3, -65, -82, 28, 8, 3 }, + { -4, -65, -83, 28, 8, 3 },{ -4, -66, -84, 28, 8, 3 },{ -4, -66, -85, 28, 8, 3 },{ -5, -67, -86, 28, 8, 3 },{ -5, -67, -87, 28, 55, 0 }, + { -5, -68, -88, 28, 55, 0 },{ -6, -68, -89, 28, 55, 0 },{ -6, -69, -90, 28, 55, 0 },{ -7, -69, -91, 28, 55, 0 },{ -7, -70, -92, 28, 55, 0 }, + { -7, -70, -93, 28, 55, 0 },{ -8, -71, -94, 28, 55, 0 },{ -8, -71, -95, 28, 55, 0 },{ -9, -72, -96, 28, 55, 0 },{ -9, -72, -97, 28, 55, 0 }, + { -9, -73, -98, 28, 55, 0 },{ -10, -73, -99, 28, 55, 0 },{ -10, -74, -100, 28, 55, 0 },{ -11, -74, -101, 28, 55, 0 },{ -11, -75, -102, 28, 55, 0 }, + { -12, -75, -103, 28, 55, 0 },{ -12, -76, -104, 28, 55, 0 },{ -12, -76, -105, 28, 55, 0 },{ -13, -77, -106, 28, 55, 0 },{ -13, -77, -107, 28, 55, 0 }, + { -14, -78, -108, 28, 55, 0 },{ -14, -78, -109, 28, 55, 0 },{ -15, -79, -110, 28, 55, 0 },{ -15, -79, -111, 28, 55, 0 },{ -16, -80, -112, 28, 55, 0 }, +}) namespace OpenRCT2::LeftLane @@ -30078,10 +31048,19 @@ static constexpr const VehicleInfoList *TrackVehicleInfoListDefault[] = { &TrackVehicleInfoRightEighthBankToOrthogonalUp250, &TrackVehicleInfoRightEighthBankToOrthogonalUp251, &TrackVehicleInfoRightEighthBankToOrthogonalUp252, &TrackVehicleInfoRightEighthBankToOrthogonalUp253, // TrackElemType::RightEighthBankBankToOrthogonalUp25 &TrackVehicleInfoLeftEighthBankToOrthogonalDown250, &TrackVehicleInfoLeftEighthBankToOrthogonalDown251, &TrackVehicleInfoLeftEighthBankToOrthogonalDown252, &TrackVehicleInfoLeftEighthBankToOrthogonalDown253, // TrackElemType::LeftEighthBankBankToOrthogonalDown25 &TrackVehicleInfoRightEighthBankToOrthogonalDown250, &TrackVehicleInfoRightEighthBankToOrthogonalDown251, &TrackVehicleInfoRightEighthBankToOrthogonalDown252, &TrackVehicleInfoRightEighthBankToOrthogonalDown253, // TrackElemType::RightEighthBankBankToOrthogonalDown25 - &TrackVehicleInfo_9162E6, &TrackVehicleInfo_916408, &TrackVehicleInfo_91652A, &TrackVehicleInfo_91664C, // DiagBrakes - &TrackVehicleInfo_9162E6, &TrackVehicleInfo_916408, &TrackVehicleInfo_91652A, &TrackVehicleInfo_91664C, // DiagBlockBrakes - &TrackVehicleInfo_8C27B2, &TrackVehicleInfo_8C28D4, &TrackVehicleInfo_8C29F6, &TrackVehicleInfo_8C2B18, // SlopedBrakes - &TrackVehicleInfo_9162E6, &TrackVehicleInfo_916408, &TrackVehicleInfo_91652A, &TrackVehicleInfo_91664C, // DiagBooster + &TrackVehicleInfo_9162E6, &TrackVehicleInfo_916408, &TrackVehicleInfo_91652A, &TrackVehicleInfo_91664C, // DiagBrakes + &TrackVehicleInfo_9162E6, &TrackVehicleInfo_916408, &TrackVehicleInfo_91652A, &TrackVehicleInfo_91664C, // DiagBlockBrakes + &TrackVehicleInfo_8C27B2, &TrackVehicleInfo_8C28D4, &TrackVehicleInfo_8C29F6, &TrackVehicleInfo_8C2B18, // SlopedBrakes + &TrackVehicleInfo_9162E6, &TrackVehicleInfo_916408, &TrackVehicleInfo_91652A, &TrackVehicleInfo_91664C, // DiagBooster + &TrackVehicleInfoDiagFlatToUp60LongBase0 , &TrackVehicleInfoDiagFlatToUp60LongBase1 , &TrackVehicleInfoDiagFlatToUp60LongBase2 , &TrackVehicleInfoDiagFlatToUp60LongBase3 , //TrackElemType::DiagFlatToUp60LongBase, + &TrackVehicleInfoDiagUp60ToFlatLongBase0 , &TrackVehicleInfoDiagUp60ToFlatLongBase1 , &TrackVehicleInfoDiagUp60ToFlatLongBase2 , &TrackVehicleInfoDiagUp60ToFlatLongBase3 , //TrackElemType::DiagUp60ToFlatLongBase, + &TrackVehicleInfoDiagFlatToDown60LongBase0, &TrackVehicleInfoDiagFlatToDown60LongBase1, &TrackVehicleInfoDiagFlatToDown60LongBase2, &TrackVehicleInfoDiagFlatToDown60LongBase3, //TrackElemType::DiagFlatToDown60LongBase, + &TrackVehicleInfoDiagDown60ToFlatLongBase0, &TrackVehicleInfoDiagDown60ToFlatLongBase1, &TrackVehicleInfoDiagDown60ToFlatLongBase2, &TrackVehicleInfoDiagDown60ToFlatLongBase3, //TrackElemType::DiagDown60ToFlatLongBase, + + &TrackVehicleInfoLeftEighthDiveLoopUpToOrthogonal0 , &TrackVehicleInfoLeftEighthDiveLoopUpToOrthogonal1 , &TrackVehicleInfoLeftEighthDiveLoopUpToOrthogonal2 , &TrackVehicleInfoLeftEighthDiveLoopUpToOrthogonal3 , //TrackElemType::LeftEighthDiveLoopUpToOrthogonal + &TrackVehicleInfoRightEighthDiveLoopUpToOrthogonal0 , &TrackVehicleInfoRightEighthDiveLoopUpToOrthogonal1 , &TrackVehicleInfoRightEighthDiveLoopUpToOrthogonal2 , &TrackVehicleInfoRightEighthDiveLoopUpToOrthogonal3 , //TrackElemType::RightEighthDiveLoopUpToOrthogonal + &TrackVehicleInfoLeftEighthDiveLoopDownToOrthogonal0 , &TrackVehicleInfoLeftEighthDiveLoopDownToOrthogonal1 , &TrackVehicleInfoLeftEighthDiveLoopDownToOrthogonal2 , &TrackVehicleInfoLeftEighthDiveLoopDownToOrthogonal3 , //TrackElemType::LeftEighthDiveLoopDownToOrthogonal + &TrackVehicleInfoRightEighthDiveLoopDownToOrthogonal0, &TrackVehicleInfoRightEighthDiveLoopDownToOrthogonal1, &TrackVehicleInfoRightEighthDiveLoopDownToOrthogonal2, &TrackVehicleInfoRightEighthDiveLoopDownToOrthogonal3, //TrackElemType::RightEighthDiveLoopDownToOrthogonal }; static_assert(std::size(TrackVehicleInfoListDefault) == VehicleTrackSubpositionSizeDefault); diff --git a/src/openrct2/ride/rtd/coaster/CorkscrewRollerCoaster.h b/src/openrct2/ride/rtd/coaster/CorkscrewRollerCoaster.h index 438a4c8c19..149cd8a6e7 100644 --- a/src/openrct2/ride/rtd/coaster/CorkscrewRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/CorkscrewRollerCoaster.h @@ -22,8 +22,8 @@ constexpr RideTypeDescriptor CorkscrewRollerCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .trackStyle = TrackStyle::corkscrewRollerCoaster, .supportType = MetalSupportType::Tubes, - .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes,TrackGroup::booster, TrackGroup::slopeSteepLong, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge, TrackGroup::corkscrewLarge, TrackGroup::halfLoopMedium, TrackGroup::halfLoopLarge}, - .extraTrackGroups = {TrackGroup::twist, TrackGroup::slopeVertical, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::barrelRoll, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge}, + .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes,TrackGroup::booster, TrackGroup::slopeSteepLong, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge, TrackGroup::corkscrewLarge, TrackGroup::halfLoopMedium, TrackGroup::halfLoopLarge, TrackGroup::diagSlopeSteepLong}, + .extraTrackGroups = {TrackGroup::twist, TrackGroup::slopeVertical, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::barrelRoll, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge, TrackGroup::diveLoop}, }), .InvertedTrackPaintFunctions = {}, .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt | diff --git a/src/openrct2/ride/rtd/coaster/FlyingRollerCoaster.h b/src/openrct2/ride/rtd/coaster/FlyingRollerCoaster.h index 6db87ee73e..ef8b5737e7 100644 --- a/src/openrct2/ride/rtd/coaster/FlyingRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/FlyingRollerCoaster.h @@ -24,7 +24,7 @@ constexpr RideTypeDescriptor FlyingRollerCoasterRTD = .trackStyle = TrackStyle::flyingRollerCoaster, .supportType = MetalSupportType::TubesInverted, .enabledTrackGroups = {TrackGroup::straight, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::inlineTwistUninverted, TrackGroup::flyingHalfLoopUninvertedUp, TrackGroup::quarterLoopUninvertedUp, TrackGroup::flyingLargeHalfLoopUninvertedUp, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge}, - .extraTrackGroups = {TrackGroup::booster, TrackGroup::slopeSteepLong, TrackGroup::flyingLargeHalfLoopUninvertedDown, TrackGroup::flyingHalfLoopUninvertedDown, TrackGroup::stationEnd, TrackGroup::verticalLoop, TrackGroup::poweredLift}, + .extraTrackGroups = {TrackGroup::booster, TrackGroup::slopeSteepLong, TrackGroup::diagSlopeSteepLong, TrackGroup::flyingLargeHalfLoopUninvertedDown, TrackGroup::flyingHalfLoopUninvertedDown, TrackGroup::stationEnd, TrackGroup::verticalLoop, TrackGroup::poweredLift}, }), .InvertedTrackPaintFunctions = TrackDrawerDescriptor({ .trackStyle = TrackStyle::flyingRollerCoasterInverted, diff --git a/src/openrct2/ride/rtd/coaster/GigaCoaster.h b/src/openrct2/ride/rtd/coaster/GigaCoaster.h index c98a8c4146..19e4c1dc74 100644 --- a/src/openrct2/ride/rtd/coaster/GigaCoaster.h +++ b/src/openrct2/ride/rtd/coaster/GigaCoaster.h @@ -22,8 +22,8 @@ constexpr RideTypeDescriptor GigaCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .trackStyle = TrackStyle::latticeTriangle, .supportType = MetalSupportType::Tubes, - .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::liftHillCable, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeVertical, TrackGroup::curveVertical}, - .extraTrackGroups = {TrackGroup::barrelRoll, TrackGroup::quarterLoop, TrackGroup::halfLoop, TrackGroup::halfLoopMedium, TrackGroup::halfLoopLarge, TrackGroup::verticalLoop, TrackGroup::corkscrew, TrackGroup::corkscrewLarge, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge, TrackGroup::booster, TrackGroup::diagBooster, TrackGroup::poweredLift}, + .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::liftHillCable, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeVertical, TrackGroup::curveVertical, TrackGroup::diagSlopeSteepLong}, + .extraTrackGroups = {TrackGroup::barrelRoll, TrackGroup::quarterLoop, TrackGroup::halfLoop, TrackGroup::halfLoopMedium, TrackGroup::halfLoopLarge, TrackGroup::verticalLoop, TrackGroup::corkscrew, TrackGroup::corkscrewLarge, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge, TrackGroup::booster, TrackGroup::diagBooster, TrackGroup::diveLoop, TrackGroup::poweredLift}, }), .InvertedTrackPaintFunctions = {}, .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt | diff --git a/src/openrct2/ride/rtd/coaster/HyperTwister.h b/src/openrct2/ride/rtd/coaster/HyperTwister.h index 4ba516f512..46f3b6ebb3 100644 --- a/src/openrct2/ride/rtd/coaster/HyperTwister.h +++ b/src/openrct2/ride/rtd/coaster/HyperTwister.h @@ -23,7 +23,7 @@ constexpr RideTypeDescriptor HyperTwisterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .trackStyle = TrackStyle::twisterRollerCoaster, .supportType = MetalSupportType::Tubes, - .enabledTrackGroups = { TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::slopeVertical, TrackGroup::curveVertical, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge}, + .enabledTrackGroups = { TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::slopeVertical, TrackGroup::curveVertical, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::diagSlopeSteepLong}, .extraTrackGroups = { TrackGroup::liftHillSteep, TrackGroup::brakeForDrop, TrackGroup::booster, TrackGroup::poweredLift }, }), .InvertedTrackPaintFunctions = {}, diff --git a/src/openrct2/ride/rtd/coaster/Hypercoaster.h b/src/openrct2/ride/rtd/coaster/Hypercoaster.h index 56ba474505..0534e34359 100644 --- a/src/openrct2/ride/rtd/coaster/Hypercoaster.h +++ b/src/openrct2/ride/rtd/coaster/Hypercoaster.h @@ -22,7 +22,7 @@ constexpr RideTypeDescriptor HypercoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .trackStyle = TrackStyle::corkscrewRollerCoaster, .supportType = MetalSupportType::Tubes, - .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::slopeSteepLong, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge}, + .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::slopeSteepLong, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge, TrackGroup::diagSlopeSteepLong}, .extraTrackGroups = {TrackGroup::verticalLoop, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::booster}, }), .InvertedTrackPaintFunctions = {}, diff --git a/src/openrct2/ride/rtd/coaster/LSMLaunchedRollerCoaster.h b/src/openrct2/ride/rtd/coaster/LSMLaunchedRollerCoaster.h index 8215adbb56..4268b7cca4 100644 --- a/src/openrct2/ride/rtd/coaster/LSMLaunchedRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/LSMLaunchedRollerCoaster.h @@ -22,7 +22,7 @@ constexpr RideTypeDescriptor LSMLaunchedRollerCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .trackStyle = TrackStyle::latticeTriangleAlt, .supportType = MetalSupportType::Tubes, - .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge, TrackGroup::slopeCurveLargeBanked, TrackGroup::booster, TrackGroup::diagBooster, TrackGroup::poweredLift, TrackGroup::slopeVertical, TrackGroup::curveVertical, TrackGroup::barrelRoll, TrackGroup::quarterLoop, TrackGroup::halfLoop, TrackGroup::halfLoopMedium, TrackGroup::halfLoopLarge, TrackGroup::verticalLoop, TrackGroup::corkscrew, TrackGroup::corkscrewLarge, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge }, + .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge, TrackGroup::slopeCurveLargeBanked, TrackGroup::booster, TrackGroup::diagBooster, TrackGroup::poweredLift, TrackGroup::slopeVertical, TrackGroup::curveVertical, TrackGroup::barrelRoll, TrackGroup::quarterLoop, TrackGroup::halfLoop, TrackGroup::halfLoopMedium, TrackGroup::halfLoopLarge, TrackGroup::verticalLoop, TrackGroup::corkscrew, TrackGroup::corkscrewLarge, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge, TrackGroup::diagSlopeSteepLong, TrackGroup::diveLoop}, .extraTrackGroups = {TrackGroup::liftHill, TrackGroup::liftHillCable}, }), .InvertedTrackPaintFunctions = {}, diff --git a/src/openrct2/ride/rtd/coaster/LayDownRollerCoaster.h b/src/openrct2/ride/rtd/coaster/LayDownRollerCoaster.h index 1355aef90f..2637ff7a01 100644 --- a/src/openrct2/ride/rtd/coaster/LayDownRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/LayDownRollerCoaster.h @@ -23,7 +23,7 @@ constexpr RideTypeDescriptor LayDownRollerCoasterRTD = { .trackStyle = TrackStyle::corkscrewRollerCoaster, .supportType = MetalSupportType::TubesInverted, - .enabledTrackGroups = { TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::inlineTwistUninverted, TrackGroup::flyingHalfLoopUninvertedUp, TrackGroup::corkscrewUninverted, TrackGroup::slopeSteepLong, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge }, + .enabledTrackGroups = { TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::inlineTwistUninverted, TrackGroup::flyingHalfLoopUninvertedUp, TrackGroup::corkscrewUninverted, TrackGroup::slopeSteepLong, TrackGroup::diagSlopeSteepLong, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge }, .extraTrackGroups = { TrackGroup::flyingHalfLoopUninvertedDown, TrackGroup::booster }, } ), diff --git a/src/openrct2/ride/rtd/coaster/SingleRailRollerCoaster.h b/src/openrct2/ride/rtd/coaster/SingleRailRollerCoaster.h index cbb3e9ddf2..c9eb1f3f15 100644 --- a/src/openrct2/ride/rtd/coaster/SingleRailRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/SingleRailRollerCoaster.h @@ -21,8 +21,8 @@ constexpr RideTypeDescriptor SingleRailRollerCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .trackStyle = TrackStyle::singleRailRollerCoaster, .supportType = MetalSupportType::Tubes, - .enabledTrackGroups = { TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::liftHillSteep, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::flatToSteepSlope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::barrelRoll, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::halfLoop, TrackGroup::halfLoopMedium, TrackGroup::corkscrewLarge, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge, TrackGroup::slopeCurveLarge, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::inclinedBrakes }, - .extraTrackGroups = {TrackGroup::slopeSteepLong, TrackGroup::halfLoopLarge}, + .enabledTrackGroups = { TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::liftHillSteep, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::flatToSteepSlope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::barrelRoll, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::halfLoop, TrackGroup::halfLoopLarge, TrackGroup::halfLoopMedium, TrackGroup::corkscrewLarge, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge, TrackGroup::slopeCurveLarge, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::inclinedBrakes, TrackGroup::diveLoop}, + .extraTrackGroups = {TrackGroup::slopeSteepLong, TrackGroup::diagSlopeSteepLong}, }), .InvertedTrackPaintFunctions = {}, .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt| diff --git a/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h b/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h index ca8cd094be..bca66759ca 100644 --- a/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h @@ -23,7 +23,7 @@ constexpr RideTypeDescriptor TwisterRollerCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .trackStyle = TrackStyle::twisterRollerCoaster, .supportType = MetalSupportType::Tubes, - .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::corkscrewLarge, TrackGroup::halfLoopMedium, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge}, + .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::corkscrewLarge, TrackGroup::halfLoopMedium, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge, TrackGroup::diagSlopeSteepLong, TrackGroup::diveLoop}, .extraTrackGroups = {TrackGroup::liftHillSteep, TrackGroup::brakeForDrop}, }), .InvertedTrackPaintFunctions = {}, diff --git a/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h b/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h index ce5007ceb5..77f88d4464 100644 --- a/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h +++ b/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h @@ -23,8 +23,8 @@ constexpr RideTypeDescriptor VerticalDropCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .trackStyle = TrackStyle::twisterRollerCoaster, .supportType = MetalSupportType::Boxed, - .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::liftHillSteep, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::flatToSteepSlope, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::curveVertical, TrackGroup::halfLoopLarge, TrackGroup::brakeForDrop, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::halfLoopMedium, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge, TrackGroup::corkscrew, TrackGroup::corkscrewLarge}, - .extraTrackGroups = {TrackGroup::halfLoop, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist}, + .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::liftHillSteep, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::flatToSteepSlope, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::curveVertical, TrackGroup::halfLoopLarge, TrackGroup::brakeForDrop, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::halfLoopMedium, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge, TrackGroup::corkscrew, TrackGroup::corkscrewLarge, TrackGroup::diveLoop}, + .extraTrackGroups = {TrackGroup::halfLoop, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::slopeSteepLong, TrackGroup::diagSlopeSteepLong}, }), .InvertedTrackPaintFunctions = {}, .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt | diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index 8732db0c23..1703c4301d 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1298,7 +1298,9 @@ enum : ImageIndex SPR_G2_LATTICE_TRIANGLE_TRACK_SMALL_FLAT_TO_STEEP = SPR_G2_LATTICE_TRIANGLE_TRACK_LARGE_ZERO_G_ROLL + 40, SPR_G2_LATTICE_TRIANGLE_TRACK_GENTLE_LARGE_CURVE = SPR_G2_LATTICE_TRIANGLE_TRACK_SMALL_FLAT_TO_STEEP + 20, SPR_G2_LATTICE_TRIANGLE_TRACK_GENTLE_LARGE_CURVE_BANKED = SPR_G2_LATTICE_TRIANGLE_TRACK_GENTLE_LARGE_CURVE + 64, - SPR_G2_LATTICE_TRIANGLE_TRACK_END = SPR_G2_LATTICE_TRIANGLE_TRACK_GENTLE_LARGE_CURVE_BANKED + 128, + SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL = SPR_G2_LATTICE_TRIANGLE_TRACK_GENTLE_LARGE_CURVE_BANKED + 128, + SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP = SPR_G2_LATTICE_TRIANGLE_TRACK_FLAT_TO_STEEP_DIAGONAL + 24, + SPR_G2_LATTICE_TRIANGLE_TRACK_END = SPR_G2_LATTICE_TRIANGLE_TRACK_DIVE_LOOP + 32, SPR_G2_MINI_RC_BEGIN = SPR_G2_LATTICE_TRIANGLE_TRACK_END, SPR_G2_MINI_RC_BOOSTER_NE_SW = SPR_G2_MINI_RC_BEGIN, @@ -1315,7 +1317,9 @@ enum : ImageIndex SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP = SPR_G2_BM_TRACK_LARGE_CORKSCREW + 40, SPR_G2_BM_TRACK_ZERO_G_ROLL = SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 44, SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL = SPR_G2_BM_TRACK_ZERO_G_ROLL + 32, - SPR_G2_BM_RC_END = SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 40, + SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL = SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 40, + SPR_G2_BM_TRACK_DIVE_LOOP = SPR_G2_BM_TRACK_FLAT_TO_STEEP_DIAGONAL + 24, + SPR_G2_BM_RC_END = SPR_G2_BM_TRACK_DIVE_LOOP + 32, SPR_G2_MINIATURE_RAILWAY_BEGIN = SPR_G2_BM_RC_END, SPR_G2_MINIATURE_RAILWAY_QUARTER_TURN_3_TILES_SW_SE_PART_3 = SPR_G2_MINIATURE_RAILWAY_BEGIN, @@ -1497,7 +1501,9 @@ enum : ImageIndex SPR_G2_CORKSCREW_TRACK_BARREL_ROLL = SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 64, SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL = SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 48, SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL = SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 40, - SPR_G2_CORKSCREW_RC_END = SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 58, + SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL = SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 58, + SPR_G2_CORKSCREW_TRACK_DIVE_LOOP = SPR_G2_CORKSCREW_TRACK_FLAT_TO_STEEP_DIAGONAL + 24, + SPR_G2_CORKSCREW_RC_END = SPR_G2_CORKSCREW_TRACK_DIVE_LOOP + 32, SPR_G2_LIM_LAUNCHED_TRACK_BEGIN = SPR_G2_CORKSCREW_RC_END, SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL = SPR_G2_LIM_LAUNCHED_TRACK_BEGIN + 0, @@ -1642,7 +1648,9 @@ enum : ImageIndex SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP = SPR_G2_SINGLE_RAIL_TRACK_LARGE_ZERO_G_ROLL + 40, SPR_G2_SINGLE_RAIL_TRACK_GENTLE_LARGE_CURVE = SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 20, SPR_G2_SINGLE_RAIL_TRACK_GENTLE_LARGE_CURVE_BANKED = SPR_G2_SINGLE_RAIL_TRACK_GENTLE_LARGE_CURVE + 64, - SPR_G2_SINGLE_RAIL_LIFT_BEGIN = SPR_G2_SINGLE_RAIL_TRACK_GENTLE_LARGE_CURVE_BANKED + 128, + SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL = SPR_G2_SINGLE_RAIL_TRACK_GENTLE_LARGE_CURVE_BANKED + 128, + SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP = SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP_DIAGONAL + 24, + SPR_G2_SINGLE_RAIL_LIFT_BEGIN = SPR_G2_SINGLE_RAIL_TRACK_DIVE_LOOP + 32, SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT = SPR_G2_SINGLE_RAIL_LIFT_BEGIN, SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE = SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT + 4, SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP = SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE + 12, @@ -1690,6 +1698,7 @@ enum : ImageIndex SPR_G2_CORKSCREW_BOOSTER_NE_SW_2, SPR_G2_CORKSCREW_BOOSTER_NW_SE_2, SPR_G2_OPAQUE_WATER_OVERLAY, + SPR_G2_END = SPR_G2_OPAQUE_WATER_OVERLAY + 5, SPR_CSG_BEGIN = SPR_G2_END,

uNqa5lXjgI6^q{tgb~S_yHvkVHVwh~Vt2nL^gzob#^88XbTvOGJY!;Qv zIOT9NP7m+$iG*J!gDNFyJ|)A(^IWPV=vA?3g>))l>_8EBCw9TJU4{bVxe%SmiW5zM$$ zODm0hyj4zbn|ahQ><*eBgA^TR*r*^RB`Fh)7Lv(wHft7(^_7)YtAzlUfkjr6)eMS*BKBw zOcCs==+Yu&CdT9wLMano%B!_% zOhJl)q8}_CkN`+_q9lcM9u*^~nn0EgcY>#ZVTtf^6atu zUm9`lJ#lRAKqYs2`mw`j_KgKL)cvm*7rR;*R%$)bZ`_&v&2t?Az$asi~WP9^PDbht3>$|K!5x`5Qa$kek2$ zvHC=yHH%y83+GQU&s;vaUKw%B|Fs39lim}7*XUGb=*a6^mCfG^$#nbrgn0CmgV*p& zw=2VMN|o++i4Fbpwf6Ap+SZNthHcBi+kl2WH?QoSzP7XB?HB-)6Vv0D#$G-BKP!gc AQvd(} literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/flat_to_steep_up_diag_3_1.png b/resources/g2/track/bm/flat_to_steep_up_diag_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c4aa940153906d9ceb02e8ae044d5a1c29402d02 GIT binary patch literal 1204 zcmX9-e`phT6o0YSYmF|>tVE34ZANyun?ybF1{u57v&-7EUe1ZV@-mTkSQ(O@vln>Vkmt!@7N`R(oP z3l=QEFs!4aqqDQqVzb#O%FeQkAaJ7Sk!2|q3dLfHbUKsIPnXN}MuV~g;{cvBdOT*o z9}fiW;fNy^=aXq~HYXSLNTsT=B<6M)CC;L_aaAM|GBp)qb1`=@EtL!5T3Kt>^G+*x zNeD2Y3RqIYauHK0X>Js)sAfkEFPc*k%G&^V0566~CX-^dssy1q98)}B@cBxLGMh-C zT+T|FZH&dv;|?$3lt{NiiK;`6v!N6h%?eu4n<@Kn+G=;&90JLSv`1p4Fdt5M6B#L^ zEBSI%uO%zZoQVOm02UwMK_FC&PFS32!joep-5sgOT3yYfDV{Wov^C%)BW_1hWV5oM zhs07$uBJluT&$_5P&IEd(*)_JXdlA{1R)}d@jxIQiR2OqJ(H(oWTGt=CvFo+yXbJp93S?!mIc$1Xd#&{=k-Q~ z0WXKif=Th>s-KJpnN(QF#(jm9Qp&|^rF^3?ix>bmfDE7lqyP#4RSZxIJd1)dN@=KE z;t7x_h%%6ILYW670Fo>yLLrSu89yq9QCWkh#?!#D;N~&EXi)-WRCOjbF`EtPda72_ zQH#s!11e}_R12@+-V7m?9ctZ^Y6P;)SaB{>L8Urj1{%klc9Vy}{Q?#AajN3iqDnRu z)$^%ZIgc6@n&VIgP#F+vc@b{WJ%cqAj9064JoXH7vB-Kng5NI&gA!#A(e@ZarC2J* z*{6B3=C&a(juZmLDU@N5&b5x8USs_4=?@GIZWW;W&W(>+{jR>vJ=@+mJTd*j?aky%&0p{Q0pX+IkSKQBEKl|{tRlDzUpZhteqwk}c5?8KjX82);_mp`qn{Svc8(rg zGDu%O@47ij4iFQgt7qOl@Xh^m>&6XNUU;(KxqNtUeAkY%V;i+~kJr2IU;E3vByGS? zt#|CY3o|cmADt|0`ONr9$8~Ldc#zoVJa}?=`|Mg6DiqnqH@Wj`I6x%Jlf_|ooy zh4_j~2e+Tz{`!aa!sau9?~Wbc2UNHC-o;;xBl*geE_sN=#>AT^ZijB=pTLXy!*l)7 zV1Q%?+)4a(f5+rdCfdg$xj Lx_NTb&XNBC(Ag1& literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/flat_to_steep_up_diag_3_2.png b/resources/g2/track/bm/flat_to_steep_up_diag_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b46e2244402279882226300cec7d95d04b3a4e69 GIT binary patch literal 1384 zcmXAoeQZ)^6vkiZ2iRI^N>WzQpk*snv{oR$Oqhm9BN-N^9e&BaWub;pfm|Y-2U=FeblqPR>8)`Qv%c z@eQ>^Ue4?s06<>N+N!$rtVmZGJ0sn_HOYPeGQfuQ^6K=;U@(|WW=2LvW@ctqR#tX) zHjBk#v)MCd%-{)yLIjcEI7U%2npWy`T9e6Sw>!OFUobcljV4nmL;^4=AZ58qC0C;n z=nWFHMQV4DZm-H8(1pU5Sloq+Sqf>cR>m_b1Xfz))FGElc)+d*d9~32b0X@ROa=)) zP>F#a16GRV*0KT?PQ=Ykh4?TbfhiT7wn7*b0zd+wVzIOwj*-u|ibO7{^b$!9sMQgp z@uAZR0|7q56=FOIDUhl}gjTFDBD7VibKoYA%;u+DA(bzx7NC3yA(T>L8I3BnxYkUX zohqkK>kAu$QCm3Sj!gzQ7~oQXrv?H85LsEMlSg<($^fPfD=aacD`^eFOQe`fqkKIf zwkV`-8u#m{u!)Y?b#ad=8L&@=Jun{Ra8Z$1fuL#(*He^*rX6~{*J24confCZHZqb- zCL!Q!fymB6+#KA`r$Su7uv7w2q{_iRs8B%oTGuD33=7gp^o9OQkv)X;!6= z8N3$TfZH1lhEp*NsAMc1#WAV`R*l$Uz&vKk?@$kTjFEsN5ecSJ4Q*E_-cR{axp89bO}^Gkv1x|CY7F)-aly%P5WXnk`!?P zDqs;3juI1SD8!(aS&bT(&FJ^o!a+|W8ic7BDw9DUfKdQp+6!}9?hSmC!4Z$64*MH) zp%AWAQW_0yFlZ5p36FXcZT~|wi zihoD90l+M*sj8H(J^oFbvd1)UX7yP()V=!Xtm^%l#$C+K8+Uq6Tf09QzGKrBbiLKG zuczVOE#Z;!C8Pf_#>gEsYhOoYhep&RV6D}(GU`Emx)OKt0V)z}mY z@vrSFnUl40cIbSEd{ckc5#5%a4#gM9o`+@C1;0LjQrTqq{?_}<^|#(Fd09&DUd(ha zmJj|QpQ!Jb&o9j{d;4p}w3OK7F|BkzCg14RMCr58zUErmlap{7A`_h z&U`STZ<)KMZA0G8GxPf&cegg0^s5@HdTfI$MjkUBH4pv>+NXx+ZJ*OMC%*ihV(HED zqrT_|dz)+VHbz1DsXx!v6Zb|-SDoWspSAJjBKAMrfuCocA73#3JAX&lbg%dHXC=Fe ziB27!**B7XXMX3pb}1+x-<`dp_{!FzWw)CS-yFDJ*OyB0k@k;^Zh&g?x2^XtTcaVYzsZAgA`>D0lYbxoYItM&`!+dIn`eZzSVS|72> zyP1F06_VbJ+MHq)$ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/flat_to_steep_up_diag_3_3.png b/resources/g2/track/bm/flat_to_steep_up_diag_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..425f7ea90401d418a0459e46d2ad600e36a800b4 GIT binary patch literal 1495 zcmXAoe{hm@9LK+GY{1xJNq3Z(Owq8OCZ3Oq`lQd=v-UVqp2f4GLWhnfcVRxa@WKu! zYpCQgeY&urhYRbO(H$DFHLC(Pw9iGve1=4rNe{ZSX>K$ZC*{C| z06Pv?S`cIeF^?n_l;#t1m{r5P3EpQRj4J`405Ayzj6~v;%UP9*!>~Sz8njqaPUmld z0F1@ts8or|)RY1@jG$ab{8rq_RQ-;Rad?mntFF_!>qGM%6r(` zlfP*0{B?4detUE0t!Kvdtp89iTRu;J{`k8kALvgrqN7B|wC_~2+j@oJ1(giwleTeF z7DhGv3Vu;d>FqbMnh96eBE8>y`&8wJdrkZwb-#}n{rbQ>_p=^9@6$0gn^x>OG#cd> z)svIAzP0td;b^CB%bwbQ7XFUSZCE(7%L~?d--y1)-kc;lqS%<^^Y~K9y+!?V2FGuV z3B4CC>;Pjrv99YA`ID9u_uJ0sHb3=1$oCl@uKa$ly?z3J&*CdjipSF{!{X(JxzN-& zapsI`x~gXljV=D+lf$!G+AD8N7}$FA{BrCSVeeKE*<1aXu5I&_k-A;G=Y1Ar*z<#ScKEPpmwtC86+ZXuw+GklEpJwfmvi-tR2{u7cmL!b zZ#{kDPV3tP_4P~i6%*^@bN@nkJI;Ukmx4T5{&LUJ)7Rgun%cbdvaTsOy!%w^GB9q6 zdLTUg!Tuw2X3ps1#_)B-hU#bTb=Gd%cd*=>JB$vTy7Y5o`hw@$cxN}o#~!a!3{6`# z|H0pj7qs1&(bxU{q4kxo-{OVGAGV9_S=ppjz9c`oRQXD5*ArOvFUonN%`L*!N1dj>EkfnpoabL5&%fkY_x$<9PHErF%bAy< z`2Ci#sj@Zew}Eqytyy2dff_*i4{h;vjJ;O9v+7FmJ5SF8W#>w22JmwaYfHPgD>oGA O1Pw3g>b|U9*7+ZjzKTu& literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/flat_to_steep_up_diag_4_1.png b/resources/g2/track/bm/flat_to_steep_up_diag_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..40f10707618ec3bd3a2abf586570aa3f57902b4a GIT binary patch literal 1127 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/steep_to_flat_up_diag_1_1.png b/resources/g2/track/bm/steep_to_flat_up_diag_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..59f9c84cc9f29fb2594d4a23d2d3f8c61a971c68 GIT binary patch literal 1418 zcmXX_e{2$G82(ypueBPCM2SVEj%_revU!WQiT3JHvEq8ptD%m~a}vdkWH)6ADs9h| zP3oAQj;(aENgOe##G&aFBPw+m(V$+HIksZM6fK%+sYP2V)^9kMJnxU^pZEFWdEOn% zYgJ=MmyZSjjICL+a7BJr=Sy9}%lDzrH_8Fvf#u8U7UgL{K|x_*A&+ z(|(Q##qC_mlNbu}aUdXpP!GgrAY~EEB~pyUd=KFx19-i?Oe#4iicn(fvMHd4`3WXnD@e(mwO43#q3NbF{k4tjFE^^t0fHv zo!LyIatkJR;HX!L2G#N?Axmi_kP<^i3Y{qQCb@gALX^U?8fByW4dut+4n@ZQmI3G!gub4_^0Rg^bAioWcSX`KG?_g zPw3N8Q$~nr`PmDNd%Hsiip|-EzHj@sl+tC)Kw~fS7F+1*mK9&`${i+4nz$opvmFzg zlIiaDJx!Iv%^UA$mrxU$?5=ycbE0TEk~)<&buDpuuxU52!CS`$PM`j6+4CpwS9MQW zdxF2K`{Nmj?k4HVTz~&yn@WQ}@y;Ac4esALaC|VZK6m7Pf%2P{~|1*Q}{NVhf6z`$-+GO|T}mXLh!eeeDAzCXVA z-mcab>!gX(CjtN_EpBdDTH^Xr%vG0{a@!ThP5{b5>yl-SrM9fBOr=tlmzP&mR8&@0 zPM9zOK@hcCT~$@3Ga8L3Y9UF2VJMchyWO1M?+=Hg$)q4jeTq^j7Eucza6nVlcDvT) zGI+d}KoAc{=y=kR65VMzn9apVGh)N5IZEfV8FXaF1t!f7-qgo@Ov(N_IVX|^&n-67q+#MnP2`ZFgVrhq|nWJf37QC`O~QAY}Xc3WWj$dJdSv z2pZRrDLs=mJF{dUXOHDQsRG|uOyJL7V(UN47Q z{Fo(7pa~KcDN7%1&fAR8VSqjpjG#~;piGsPAA6&E31Dk5)?ZMffet4C#UwDRInKE^deD$p%-R8DEb3@(pmh?