From 4482a080245688c4e3507a21690d7abd00db3e06 Mon Sep 17 00:00:00 2001 From: mix <167040362+mixiate@users.noreply.github.com> Date: Sat, 2 Nov 2024 12:24:26 +0000 Subject: [PATCH] Add new Corkscrew Roller Coaster track pieces --- distribution/changelog.txt | 1 + resources/g2/sprites.json | 3920 ++++++++ .../track/corkscrew/barrel_roll_left_1_1.png | Bin 0 -> 1037 bytes .../track/corkscrew/barrel_roll_left_1_2.png | Bin 0 -> 1009 bytes .../track/corkscrew/barrel_roll_left_1_3.png | Bin 0 -> 922 bytes .../track/corkscrew/barrel_roll_left_1_4.png | Bin 0 -> 1386 bytes .../track/corkscrew/barrel_roll_left_1_5.png | Bin 0 -> 903 bytes .../track/corkscrew/barrel_roll_left_1_6.png | Bin 0 -> 1282 bytes .../track/corkscrew/barrel_roll_left_2_1.png | Bin 0 -> 935 bytes .../track/corkscrew/barrel_roll_left_2_2.png | Bin 0 -> 1026 bytes .../track/corkscrew/barrel_roll_left_2_3.png | Bin 0 -> 900 bytes .../track/corkscrew/barrel_roll_left_2_4.png | Bin 0 -> 1111 bytes .../track/corkscrew/barrel_roll_left_2_5.png | Bin 0 -> 935 bytes .../track/corkscrew/barrel_roll_left_2_6.png | Bin 0 -> 1247 bytes .../track/corkscrew/barrel_roll_left_3_1.png | Bin 0 -> 1289 bytes .../track/corkscrew/barrel_roll_left_3_2.png | Bin 0 -> 910 bytes .../track/corkscrew/barrel_roll_left_3_3.png | Bin 0 -> 1117 bytes .../track/corkscrew/barrel_roll_left_3_4.png | Bin 0 -> 994 bytes .../track/corkscrew/barrel_roll_left_3_5.png | Bin 0 -> 885 bytes .../track/corkscrew/barrel_roll_left_3_6.png | Bin 0 -> 1114 bytes .../track/corkscrew/barrel_roll_left_4_1.png | Bin 0 -> 1252 bytes .../track/corkscrew/barrel_roll_left_4_2.png | Bin 0 -> 896 bytes .../track/corkscrew/barrel_roll_left_4_3.png | Bin 0 -> 1162 bytes .../track/corkscrew/barrel_roll_left_4_4.png | Bin 0 -> 944 bytes .../track/corkscrew/barrel_roll_left_4_5.png | Bin 0 -> 923 bytes .../track/corkscrew/barrel_roll_left_4_6.png | Bin 0 -> 1095 bytes .../track/corkscrew/barrel_roll_right_1_1.png | Bin 0 -> 1325 bytes .../track/corkscrew/barrel_roll_right_1_2.png | Bin 0 -> 903 bytes .../track/corkscrew/barrel_roll_right_1_3.png | Bin 0 -> 1253 bytes .../track/corkscrew/barrel_roll_right_1_4.png | Bin 0 -> 953 bytes .../track/corkscrew/barrel_roll_right_1_5.png | Bin 0 -> 940 bytes .../track/corkscrew/barrel_roll_right_1_6.png | Bin 0 -> 1128 bytes .../track/corkscrew/barrel_roll_right_2_1.png | Bin 0 -> 1187 bytes .../track/corkscrew/barrel_roll_right_2_2.png | Bin 0 -> 899 bytes .../track/corkscrew/barrel_roll_right_2_3.png | Bin 0 -> 1082 bytes .../track/corkscrew/barrel_roll_right_2_4.png | Bin 0 -> 988 bytes .../track/corkscrew/barrel_roll_right_2_5.png | Bin 0 -> 885 bytes .../track/corkscrew/barrel_roll_right_2_6.png | Bin 0 -> 1072 bytes .../track/corkscrew/barrel_roll_right_3_1.png | Bin 0 -> 947 bytes .../track/corkscrew/barrel_roll_right_3_2.png | Bin 0 -> 1056 bytes .../track/corkscrew/barrel_roll_right_3_3.png | Bin 0 -> 902 bytes .../track/corkscrew/barrel_roll_right_3_4.png | Bin 0 -> 1142 bytes .../track/corkscrew/barrel_roll_right_3_5.png | Bin 0 -> 934 bytes .../track/corkscrew/barrel_roll_right_3_6.png | Bin 0 -> 1338 bytes .../track/corkscrew/barrel_roll_right_4_1.png | Bin 0 -> 1011 bytes .../track/corkscrew/barrel_roll_right_4_2.png | Bin 0 -> 987 bytes .../track/corkscrew/barrel_roll_right_4_3.png | Bin 0 -> 921 bytes .../track/corkscrew/barrel_roll_right_4_4.png | Bin 0 -> 1269 bytes .../track/corkscrew/barrel_roll_right_4_5.png | Bin 0 -> 902 bytes .../track/corkscrew/barrel_roll_right_4_6.png | Bin 0 -> 1202 bytes .../flat_to_gentle_up_left_bank_1.png | Bin 0 -> 1249 bytes .../flat_to_gentle_up_left_bank_2_1.png | Bin 0 -> 930 bytes .../flat_to_gentle_up_left_bank_2_2.png | Bin 0 -> 1086 bytes .../flat_to_gentle_up_left_bank_3.png | Bin 0 -> 1261 bytes .../flat_to_gentle_up_left_bank_4.png | Bin 0 -> 1267 bytes .../flat_to_gentle_up_left_bank_diag_1_1.png | Bin 0 -> 979 bytes .../flat_to_gentle_up_left_bank_diag_1_2.png | Bin 0 -> 1084 bytes .../flat_to_gentle_up_left_bank_diag_2.png | Bin 0 -> 1192 bytes .../flat_to_gentle_up_left_bank_diag_3.png | Bin 0 -> 1319 bytes .../flat_to_gentle_up_left_bank_diag_4.png | Bin 0 -> 1287 bytes .../flat_to_gentle_up_right_bank_1.png | Bin 0 -> 1354 bytes .../flat_to_gentle_up_right_bank_2.png | Bin 0 -> 1187 bytes .../flat_to_gentle_up_right_bank_3_1.png | Bin 0 -> 949 bytes .../flat_to_gentle_up_right_bank_3_2.png | Bin 0 -> 1120 bytes .../flat_to_gentle_up_right_bank_4.png | Bin 0 -> 1187 bytes .../flat_to_gentle_up_right_bank_diag_1.png | Bin 0 -> 1270 bytes .../flat_to_gentle_up_right_bank_diag_2.png | Bin 0 -> 1185 bytes .../flat_to_gentle_up_right_bank_diag_3_1.png | Bin 0 -> 990 bytes .../flat_to_gentle_up_right_bank_diag_3_2.png | Bin 0 -> 1122 bytes .../flat_to_gentle_up_right_bank_diag_4.png | Bin 0 -> 1316 bytes .../track/corkscrew/gentle_up_left_bank_1.png | Bin 0 -> 1083 bytes .../track/corkscrew/gentle_up_left_bank_2.png | Bin 0 -> 1091 bytes .../track/corkscrew/gentle_up_left_bank_3.png | Bin 0 -> 1164 bytes .../track/corkscrew/gentle_up_left_bank_4.png | Bin 0 -> 1223 bytes .../corkscrew/gentle_up_left_bank_diag_1.png | Bin 0 -> 1042 bytes .../corkscrew/gentle_up_left_bank_diag_2.png | Bin 0 -> 1046 bytes .../corkscrew/gentle_up_left_bank_diag_3.png | Bin 0 -> 1118 bytes .../corkscrew/gentle_up_left_bank_diag_4.png | Bin 0 -> 1044 bytes .../gentle_up_left_bank_to_flat_1.png | Bin 0 -> 1259 bytes .../gentle_up_left_bank_to_flat_2_1.png | Bin 0 -> 1043 bytes .../gentle_up_left_bank_to_flat_2_2.png | Bin 0 -> 996 bytes .../gentle_up_left_bank_to_flat_3.png | Bin 0 -> 1265 bytes .../gentle_up_left_bank_to_flat_4.png | Bin 0 -> 1252 bytes .../gentle_up_left_bank_to_flat_diag_1_1.png | Bin 0 -> 989 bytes .../gentle_up_left_bank_to_flat_diag_1_2.png | Bin 0 -> 1060 bytes .../gentle_up_left_bank_to_flat_diag_2.png | Bin 0 -> 1205 bytes .../gentle_up_left_bank_to_flat_diag_3.png | Bin 0 -> 1278 bytes .../gentle_up_left_bank_to_flat_diag_4.png | Bin 0 -> 1278 bytes .../gentle_up_left_bank_to_gentle_up_1.png | Bin 0 -> 1281 bytes .../gentle_up_left_bank_to_gentle_up_2_1.png | Bin 0 -> 1024 bytes .../gentle_up_left_bank_to_gentle_up_2_2.png | Bin 0 -> 985 bytes .../gentle_up_left_bank_to_gentle_up_3.png | Bin 0 -> 1207 bytes .../gentle_up_left_bank_to_gentle_up_4.png | Bin 0 -> 1298 bytes ...tle_up_left_bank_to_gentle_up_diag_1_1.png | Bin 0 -> 994 bytes ...tle_up_left_bank_to_gentle_up_diag_1_2.png | Bin 0 -> 1083 bytes ...entle_up_left_bank_to_gentle_up_diag_2.png | Bin 0 -> 1143 bytes ...entle_up_left_bank_to_gentle_up_diag_3.png | Bin 0 -> 1329 bytes ...entle_up_left_bank_to_gentle_up_diag_4.png | Bin 0 -> 1328 bytes .../gentle_up_left_bank_to_left_bank_1.png | Bin 0 -> 1199 bytes .../gentle_up_left_bank_to_left_bank_2.png | Bin 0 -> 1115 bytes .../gentle_up_left_bank_to_left_bank_3.png | Bin 0 -> 1294 bytes .../gentle_up_left_bank_to_left_bank_4.png | Bin 0 -> 1262 bytes ...entle_up_left_bank_to_left_bank_diag_1.png | Bin 0 -> 1132 bytes ...entle_up_left_bank_to_left_bank_diag_2.png | Bin 0 -> 1150 bytes ...entle_up_left_bank_to_left_bank_diag_3.png | Bin 0 -> 5435 bytes ...entle_up_left_bank_to_left_bank_diag_4.png | Bin 0 -> 1195 bytes .../corkscrew/gentle_up_right_bank_1.png | Bin 0 -> 1256 bytes .../corkscrew/gentle_up_right_bank_2.png | Bin 0 -> 1146 bytes .../corkscrew/gentle_up_right_bank_3.png | Bin 0 -> 1080 bytes .../corkscrew/gentle_up_right_bank_4.png | Bin 0 -> 1051 bytes .../corkscrew/gentle_up_right_bank_diag_1.png | Bin 0 -> 1130 bytes .../corkscrew/gentle_up_right_bank_diag_2.png | Bin 0 -> 1046 bytes .../corkscrew/gentle_up_right_bank_diag_3.png | Bin 0 -> 1054 bytes .../corkscrew/gentle_up_right_bank_diag_4.png | Bin 0 -> 1048 bytes .../gentle_up_right_bank_to_flat_1.png | Bin 0 -> 1360 bytes .../gentle_up_right_bank_to_flat_2.png | Bin 0 -> 1193 bytes .../gentle_up_right_bank_to_flat_3_1.png | Bin 0 -> 1064 bytes .../gentle_up_right_bank_to_flat_3_2.png | Bin 0 -> 1018 bytes .../gentle_up_right_bank_to_flat_4.png | Bin 0 -> 1179 bytes .../gentle_up_right_bank_to_flat_diag_1.png | Bin 0 -> 1228 bytes .../gentle_up_right_bank_to_flat_diag_2.png | Bin 0 -> 1197 bytes .../gentle_up_right_bank_to_flat_diag_3_1.png | Bin 0 -> 997 bytes .../gentle_up_right_bank_to_flat_diag_3_2.png | Bin 0 -> 1080 bytes .../gentle_up_right_bank_to_flat_diag_4.png | Bin 0 -> 1311 bytes .../gentle_up_right_bank_to_gentle_up_1.png | Bin 0 -> 1362 bytes .../gentle_up_right_bank_to_gentle_up_2.png | Bin 0 -> 1173 bytes .../gentle_up_right_bank_to_gentle_up_3_1.png | Bin 0 -> 1036 bytes .../gentle_up_right_bank_to_gentle_up_3_2.png | Bin 0 -> 1007 bytes .../gentle_up_right_bank_to_gentle_up_4.png | Bin 0 -> 1221 bytes ...ntle_up_right_bank_to_gentle_up_diag_1.png | Bin 0 -> 1257 bytes ...ntle_up_right_bank_to_gentle_up_diag_2.png | Bin 0 -> 1123 bytes ...le_up_right_bank_to_gentle_up_diag_3_1.png | Bin 0 -> 1013 bytes ...le_up_right_bank_to_gentle_up_diag_3_2.png | Bin 0 -> 1132 bytes ...ntle_up_right_bank_to_gentle_up_diag_4.png | Bin 0 -> 1346 bytes .../gentle_up_right_bank_to_right_bank_1.png | Bin 0 -> 1344 bytes .../gentle_up_right_bank_to_right_bank_2.png | Bin 0 -> 1194 bytes .../gentle_up_right_bank_to_right_bank_3.png | Bin 0 -> 1177 bytes .../gentle_up_right_bank_to_right_bank_4.png | Bin 0 -> 1132 bytes ...tle_up_right_bank_to_right_bank_diag_1.png | Bin 0 -> 5395 bytes ...tle_up_right_bank_to_right_bank_diag_2.png | Bin 0 -> 1137 bytes ...tle_up_right_bank_to_right_bank_diag_3.png | Bin 0 -> 1144 bytes ...tle_up_right_bank_to_right_bank_diag_4.png | Bin 0 -> 1208 bytes .../gentle_up_to_gentle_up_left_bank_1.png | Bin 0 -> 1271 bytes .../gentle_up_to_gentle_up_left_bank_2_1.png | Bin 0 -> 891 bytes .../gentle_up_to_gentle_up_left_bank_2_2.png | Bin 0 -> 1100 bytes .../gentle_up_to_gentle_up_left_bank_3.png | Bin 0 -> 1219 bytes .../gentle_up_to_gentle_up_left_bank_4.png | Bin 0 -> 1312 bytes ...tle_up_to_gentle_up_left_bank_diag_1_1.png | Bin 0 -> 1005 bytes ...tle_up_to_gentle_up_left_bank_diag_1_2.png | Bin 0 -> 1113 bytes ...entle_up_to_gentle_up_left_bank_diag_2.png | Bin 0 -> 1115 bytes ...entle_up_to_gentle_up_left_bank_diag_3.png | Bin 0 -> 1349 bytes ...entle_up_to_gentle_up_left_bank_diag_4.png | Bin 0 -> 1342 bytes .../gentle_up_to_gentle_up_right_bank_1.png | Bin 0 -> 1350 bytes .../gentle_up_to_gentle_up_right_bank_2.png | Bin 0 -> 1165 bytes .../gentle_up_to_gentle_up_right_bank_3_1.png | Bin 0 -> 893 bytes .../gentle_up_to_gentle_up_right_bank_3_2.png | Bin 0 -> 1117 bytes .../gentle_up_to_gentle_up_right_bank_4.png | Bin 0 -> 1225 bytes ...ntle_up_to_gentle_up_right_bank_diag_1.png | Bin 0 -> 1285 bytes ...ntle_up_to_gentle_up_right_bank_diag_2.png | Bin 0 -> 1114 bytes ...le_up_to_gentle_up_right_bank_diag_3_1.png | Bin 0 -> 1028 bytes ...le_up_to_gentle_up_right_bank_diag_3_2.png | Bin 0 -> 1164 bytes ...ntle_up_to_gentle_up_right_bank_diag_4.png | Bin 0 -> 1361 bytes .../corkscrew/large_corkscrew_left_1_1.png | Bin 0 -> 1271 bytes .../corkscrew/large_corkscrew_left_1_2.png | Bin 0 -> 1352 bytes .../corkscrew/large_corkscrew_left_1_3.png | Bin 0 -> 1219 bytes .../corkscrew/large_corkscrew_left_1_4.png | Bin 0 -> 1267 bytes .../corkscrew/large_corkscrew_left_1_5.png | Bin 0 -> 1146 bytes .../corkscrew/large_corkscrew_left_2_1.png | Bin 0 -> 1090 bytes .../corkscrew/large_corkscrew_left_2_2.png | Bin 0 -> 1141 bytes .../corkscrew/large_corkscrew_left_2_3.png | Bin 0 -> 1387 bytes .../corkscrew/large_corkscrew_left_2_4.png | Bin 0 -> 1395 bytes .../corkscrew/large_corkscrew_left_2_5.png | Bin 0 -> 1203 bytes .../corkscrew/large_corkscrew_left_3_1.png | Bin 0 -> 1196 bytes .../corkscrew/large_corkscrew_left_3_2.png | Bin 0 -> 1142 bytes .../corkscrew/large_corkscrew_left_3_3.png | Bin 0 -> 4975 bytes .../corkscrew/large_corkscrew_left_3_4.png | Bin 0 -> 5379 bytes .../corkscrew/large_corkscrew_left_3_5.png | Bin 0 -> 5311 bytes .../corkscrew/large_corkscrew_left_4_1.png | Bin 0 -> 1235 bytes .../corkscrew/large_corkscrew_left_4_2.png | Bin 0 -> 1390 bytes .../corkscrew/large_corkscrew_left_4_3.png | Bin 0 -> 1272 bytes .../corkscrew/large_corkscrew_left_4_4.png | Bin 0 -> 1233 bytes .../corkscrew/large_corkscrew_left_4_4_2.png | Bin 0 -> 1152 bytes .../corkscrew/large_corkscrew_left_4_5.png | Bin 0 -> 1216 bytes .../corkscrew/large_corkscrew_right_1_1.png | Bin 0 -> 1297 bytes .../corkscrew/large_corkscrew_right_1_2.png | Bin 0 -> 1361 bytes .../corkscrew/large_corkscrew_right_1_3.png | Bin 0 -> 1214 bytes .../corkscrew/large_corkscrew_right_1_4.png | Bin 0 -> 1205 bytes .../corkscrew/large_corkscrew_right_1_4_2.png | Bin 0 -> 1131 bytes .../corkscrew/large_corkscrew_right_1_5.png | Bin 0 -> 1171 bytes .../corkscrew/large_corkscrew_right_2_1.png | Bin 0 -> 1141 bytes .../corkscrew/large_corkscrew_right_2_2.png | Bin 0 -> 1166 bytes .../corkscrew/large_corkscrew_right_2_3.png | Bin 0 -> 873 bytes .../corkscrew/large_corkscrew_right_2_4.png | Bin 0 -> 1272 bytes .../corkscrew/large_corkscrew_right_2_5.png | Bin 0 -> 1275 bytes .../corkscrew/large_corkscrew_right_3_1.png | Bin 0 -> 1114 bytes .../corkscrew/large_corkscrew_right_3_2.png | Bin 0 -> 1185 bytes .../corkscrew/large_corkscrew_right_3_3.png | Bin 0 -> 1477 bytes .../corkscrew/large_corkscrew_right_3_4.png | Bin 0 -> 1406 bytes .../corkscrew/large_corkscrew_right_3_5.png | Bin 0 -> 1153 bytes .../corkscrew/large_corkscrew_right_4_1.png | Bin 0 -> 1215 bytes .../corkscrew/large_corkscrew_right_4_2.png | Bin 0 -> 1370 bytes .../corkscrew/large_corkscrew_right_4_3.png | Bin 0 -> 1179 bytes .../corkscrew/large_corkscrew_right_4_4.png | Bin 0 -> 1278 bytes .../corkscrew/large_corkscrew_right_4_5.png | Bin 0 -> 1207 bytes .../corkscrew/large_half_loop_left_1_1.png | Bin 0 -> 1402 bytes .../corkscrew/large_half_loop_left_1_2.png | Bin 0 -> 5444 bytes .../corkscrew/large_half_loop_left_1_3.png | Bin 0 -> 5724 bytes .../corkscrew/large_half_loop_left_1_4.png | Bin 0 -> 5567 bytes .../corkscrew/large_half_loop_left_1_5.png | Bin 0 -> 1391 bytes .../corkscrew/large_half_loop_left_1_6.png | Bin 0 -> 1245 bytes .../corkscrew/large_half_loop_left_1_6_2.png | Bin 0 -> 5270 bytes .../corkscrew/large_half_loop_left_1_7.png | Bin 0 -> 1172 bytes .../corkscrew/large_half_loop_left_2_1.png | Bin 0 -> 1084 bytes .../corkscrew/large_half_loop_left_2_2.png | Bin 0 -> 1065 bytes .../corkscrew/large_half_loop_left_2_2_2.png | Bin 0 -> 5136 bytes .../corkscrew/large_half_loop_left_2_3.png | Bin 0 -> 1091 bytes .../corkscrew/large_half_loop_left_2_3_2.png | Bin 0 -> 5264 bytes .../corkscrew/large_half_loop_left_2_4.png | Bin 0 -> 1435 bytes .../corkscrew/large_half_loop_left_2_5.png | Bin 0 -> 1584 bytes .../corkscrew/large_half_loop_left_2_6.png | Bin 0 -> 1400 bytes .../corkscrew/large_half_loop_left_2_7.png | Bin 0 -> 1238 bytes .../corkscrew/large_half_loop_left_3_1.png | Bin 0 -> 1139 bytes .../corkscrew/large_half_loop_left_3_2.png | Bin 0 -> 1143 bytes .../corkscrew/large_half_loop_left_3_3.png | Bin 0 -> 1158 bytes .../corkscrew/large_half_loop_left_3_3_2.png | Bin 0 -> 5458 bytes .../corkscrew/large_half_loop_left_3_4.png | Bin 0 -> 5476 bytes .../corkscrew/large_half_loop_left_3_5.png | Bin 0 -> 1521 bytes .../corkscrew/large_half_loop_left_3_6.png | Bin 0 -> 1288 bytes .../corkscrew/large_half_loop_left_3_7.png | Bin 0 -> 1284 bytes .../corkscrew/large_half_loop_left_4_1.png | Bin 0 -> 1236 bytes .../corkscrew/large_half_loop_left_4_2.png | Bin 0 -> 1304 bytes .../corkscrew/large_half_loop_left_4_3.png | Bin 0 -> 1487 bytes .../corkscrew/large_half_loop_left_4_4.png | Bin 0 -> 1655 bytes .../corkscrew/large_half_loop_left_4_5.png | Bin 0 -> 1360 bytes .../corkscrew/large_half_loop_left_4_6.png | Bin 0 -> 1422 bytes .../corkscrew/large_half_loop_left_4_7.png | Bin 0 -> 5301 bytes .../corkscrew/large_half_loop_right_1_1.png | Bin 0 -> 1279 bytes .../corkscrew/large_half_loop_right_1_2.png | Bin 0 -> 1309 bytes .../corkscrew/large_half_loop_right_1_3.png | Bin 0 -> 1410 bytes .../corkscrew/large_half_loop_right_1_4.png | Bin 0 -> 1487 bytes .../corkscrew/large_half_loop_right_1_5.png | Bin 0 -> 1282 bytes .../corkscrew/large_half_loop_right_1_6.png | Bin 0 -> 1402 bytes .../corkscrew/large_half_loop_right_1_7.png | Bin 0 -> 5351 bytes .../corkscrew/large_half_loop_right_2_1.png | Bin 0 -> 1141 bytes .../corkscrew/large_half_loop_right_2_2.png | Bin 0 -> 1133 bytes .../corkscrew/large_half_loop_right_2_3.png | Bin 0 -> 5257 bytes .../corkscrew/large_half_loop_right_2_3_2.png | Bin 0 -> 5611 bytes .../corkscrew/large_half_loop_right_2_4.png | Bin 0 -> 5476 bytes .../corkscrew/large_half_loop_right_2_5.png | Bin 0 -> 1634 bytes .../corkscrew/large_half_loop_right_2_6.png | Bin 0 -> 1324 bytes .../corkscrew/large_half_loop_right_2_7.png | Bin 0 -> 1244 bytes .../corkscrew/large_half_loop_right_3_1.png | Bin 0 -> 1133 bytes .../corkscrew/large_half_loop_right_3_2.png | Bin 0 -> 1101 bytes .../corkscrew/large_half_loop_right_3_2_2.png | Bin 0 -> 5165 bytes .../corkscrew/large_half_loop_right_3_3.png | Bin 0 -> 1140 bytes .../corkscrew/large_half_loop_right_3_3_2.png | Bin 0 -> 5223 bytes .../corkscrew/large_half_loop_right_3_4.png | Bin 0 -> 1463 bytes .../corkscrew/large_half_loop_right_3_5.png | Bin 0 -> 1538 bytes .../corkscrew/large_half_loop_right_3_6.png | Bin 0 -> 1391 bytes .../corkscrew/large_half_loop_right_3_7.png | Bin 0 -> 1304 bytes .../corkscrew/large_half_loop_right_4_1.png | Bin 0 -> 1334 bytes .../corkscrew/large_half_loop_right_4_2.png | Bin 0 -> 5387 bytes .../corkscrew/large_half_loop_right_4_3.png | Bin 0 -> 5553 bytes .../corkscrew/large_half_loop_right_4_4.png | Bin 0 -> 5701 bytes .../corkscrew/large_half_loop_right_4_5.png | Bin 0 -> 1428 bytes .../corkscrew/large_half_loop_right_4_6.png | Bin 0 -> 1192 bytes .../corkscrew/large_half_loop_right_4_6_2.png | Bin 0 -> 5211 bytes .../corkscrew/large_half_loop_right_4_7.png | Bin 0 -> 1118 bytes ...e_turn_left_bank_to_diag_gentle_up_1_1.png | Bin 0 -> 1179 bytes ...e_turn_left_bank_to_diag_gentle_up_1_2.png | Bin 0 -> 1191 bytes ...e_turn_left_bank_to_diag_gentle_up_1_3.png | Bin 0 -> 993 bytes ...e_turn_left_bank_to_diag_gentle_up_1_4.png | Bin 0 -> 1154 bytes ...e_turn_left_bank_to_diag_gentle_up_2_1.png | Bin 0 -> 1028 bytes ...e_turn_left_bank_to_diag_gentle_up_2_2.png | Bin 0 -> 1081 bytes ...e_turn_left_bank_to_diag_gentle_up_2_3.png | Bin 0 -> 1009 bytes ...e_turn_left_bank_to_diag_gentle_up_2_4.png | Bin 0 -> 1034 bytes ...e_turn_left_bank_to_diag_gentle_up_3_1.png | Bin 0 -> 1082 bytes ...e_turn_left_bank_to_diag_gentle_up_3_2.png | Bin 0 -> 1050 bytes ...e_turn_left_bank_to_diag_gentle_up_3_3.png | Bin 0 -> 1016 bytes ...e_turn_left_bank_to_diag_gentle_up_3_4.png | Bin 0 -> 1073 bytes ...e_turn_left_bank_to_diag_gentle_up_4_1.png | Bin 0 -> 1300 bytes ...e_turn_left_bank_to_diag_gentle_up_4_2.png | Bin 0 -> 1265 bytes ...e_turn_left_bank_to_diag_gentle_up_4_3.png | Bin 0 -> 990 bytes ...e_turn_left_bank_to_diag_gentle_up_4_4.png | Bin 0 -> 1194 bytes ..._left_bank_to_orthogonal_gentle_up_1_1.png | Bin 0 -> 1074 bytes ..._left_bank_to_orthogonal_gentle_up_1_2.png | Bin 0 -> 860 bytes ..._left_bank_to_orthogonal_gentle_up_1_3.png | Bin 0 -> 5290 bytes ..._left_bank_to_orthogonal_gentle_up_1_4.png | Bin 0 -> 1214 bytes ..._left_bank_to_orthogonal_gentle_up_2_1.png | Bin 0 -> 932 bytes ..._left_bank_to_orthogonal_gentle_up_2_2.png | Bin 0 -> 860 bytes ..._left_bank_to_orthogonal_gentle_up_2_3.png | Bin 0 -> 1039 bytes ..._left_bank_to_orthogonal_gentle_up_2_4.png | Bin 0 -> 1093 bytes ..._left_bank_to_orthogonal_gentle_up_3_1.png | Bin 0 -> 1232 bytes ..._left_bank_to_orthogonal_gentle_up_3_2.png | Bin 0 -> 860 bytes ..._left_bank_to_orthogonal_gentle_up_3_3.png | Bin 0 -> 1321 bytes ..._left_bank_to_orthogonal_gentle_up_3_4.png | Bin 0 -> 1314 bytes ..._left_bank_to_orthogonal_gentle_up_4_1.png | Bin 0 -> 1058 bytes ..._left_bank_to_orthogonal_gentle_up_4_2.png | Bin 0 -> 860 bytes ..._left_bank_to_orthogonal_gentle_up_4_3.png | Bin 0 -> 1319 bytes ..._left_bank_to_orthogonal_gentle_up_4_4.png | Bin 0 -> 1424 bytes .../large_turn_left_to_diag_gentle_up_1_1.png | Bin 0 -> 1311 bytes .../large_turn_left_to_diag_gentle_up_1_2.png | Bin 0 -> 1284 bytes .../large_turn_left_to_diag_gentle_up_1_3.png | Bin 0 -> 1017 bytes .../large_turn_left_to_diag_gentle_up_1_4.png | Bin 0 -> 1170 bytes .../large_turn_left_to_diag_gentle_up_2_1.png | Bin 0 -> 1009 bytes .../large_turn_left_to_diag_gentle_up_2_2.png | Bin 0 -> 1113 bytes .../large_turn_left_to_diag_gentle_up_2_3.png | Bin 0 -> 1026 bytes .../large_turn_left_to_diag_gentle_up_2_4.png | Bin 0 -> 1071 bytes .../large_turn_left_to_diag_gentle_up_3_1.png | Bin 0 -> 1005 bytes .../large_turn_left_to_diag_gentle_up_3_2.png | Bin 0 -> 981 bytes .../large_turn_left_to_diag_gentle_up_3_3.png | Bin 0 -> 981 bytes .../large_turn_left_to_diag_gentle_up_3_4.png | Bin 0 -> 1011 bytes .../large_turn_left_to_diag_gentle_up_4_1.png | Bin 0 -> 1245 bytes .../large_turn_left_to_diag_gentle_up_4_2.png | Bin 0 -> 1195 bytes .../large_turn_left_to_diag_gentle_up_4_3.png | Bin 0 -> 958 bytes .../large_turn_left_to_diag_gentle_up_4_4.png | Bin 0 -> 1117 bytes ..._turn_left_to_orthogonal_gentle_up_1_1.png | Bin 0 -> 1093 bytes ..._turn_left_to_orthogonal_gentle_up_1_2.png | Bin 0 -> 860 bytes ..._turn_left_to_orthogonal_gentle_up_1_3.png | Bin 0 -> 1196 bytes ..._turn_left_to_orthogonal_gentle_up_1_4.png | Bin 0 -> 1300 bytes ..._turn_left_to_orthogonal_gentle_up_2_1.png | Bin 0 -> 895 bytes ..._turn_left_to_orthogonal_gentle_up_2_2.png | Bin 0 -> 860 bytes ..._turn_left_to_orthogonal_gentle_up_2_3.png | Bin 0 -> 1037 bytes ..._turn_left_to_orthogonal_gentle_up_2_4.png | Bin 0 -> 1100 bytes ..._turn_left_to_orthogonal_gentle_up_3_1.png | Bin 0 -> 1123 bytes ..._turn_left_to_orthogonal_gentle_up_3_2.png | Bin 0 -> 860 bytes ..._turn_left_to_orthogonal_gentle_up_3_3.png | Bin 0 -> 1194 bytes ..._turn_left_to_orthogonal_gentle_up_3_4.png | Bin 0 -> 1177 bytes ..._turn_left_to_orthogonal_gentle_up_4_1.png | Bin 0 -> 1081 bytes ..._turn_left_to_orthogonal_gentle_up_4_2.png | Bin 0 -> 860 bytes ..._turn_left_to_orthogonal_gentle_up_4_3.png | Bin 0 -> 1311 bytes ..._turn_left_to_orthogonal_gentle_up_4_4.png | Bin 0 -> 1367 bytes ..._turn_right_bank_to_diag_gentle_up_1_1.png | Bin 0 -> 1353 bytes ..._turn_right_bank_to_diag_gentle_up_1_2.png | Bin 0 -> 1252 bytes ..._turn_right_bank_to_diag_gentle_up_1_3.png | Bin 0 -> 978 bytes ..._turn_right_bank_to_diag_gentle_up_1_4.png | Bin 0 -> 1144 bytes ..._turn_right_bank_to_diag_gentle_up_2_1.png | Bin 0 -> 1058 bytes ..._turn_right_bank_to_diag_gentle_up_2_2.png | Bin 0 -> 1049 bytes ..._turn_right_bank_to_diag_gentle_up_2_3.png | Bin 0 -> 1023 bytes ..._turn_right_bank_to_diag_gentle_up_2_4.png | Bin 0 -> 1053 bytes ..._turn_right_bank_to_diag_gentle_up_3_1.png | Bin 0 -> 1061 bytes ..._turn_right_bank_to_diag_gentle_up_3_2.png | Bin 0 -> 1130 bytes ..._turn_right_bank_to_diag_gentle_up_3_3.png | Bin 0 -> 1058 bytes ..._turn_right_bank_to_diag_gentle_up_3_4.png | Bin 0 -> 1091 bytes ..._turn_right_bank_to_diag_gentle_up_4_1.png | Bin 0 -> 1119 bytes ..._turn_right_bank_to_diag_gentle_up_4_2.png | Bin 0 -> 1164 bytes ..._turn_right_bank_to_diag_gentle_up_4_3.png | Bin 0 -> 973 bytes ..._turn_right_bank_to_diag_gentle_up_4_4.png | Bin 0 -> 1136 bytes ...right_bank_to_orthogonal_gentle_up_1_1.png | Bin 0 -> 1128 bytes ...right_bank_to_orthogonal_gentle_up_1_2.png | Bin 0 -> 860 bytes ...right_bank_to_orthogonal_gentle_up_1_3.png | Bin 0 -> 1225 bytes ...right_bank_to_orthogonal_gentle_up_1_4.png | Bin 0 -> 1235 bytes ...right_bank_to_orthogonal_gentle_up_2_1.png | Bin 0 -> 925 bytes ...right_bank_to_orthogonal_gentle_up_2_2.png | Bin 0 -> 860 bytes ...right_bank_to_orthogonal_gentle_up_2_3.png | Bin 0 -> 1026 bytes ...right_bank_to_orthogonal_gentle_up_2_4.png | Bin 0 -> 1086 bytes ...right_bank_to_orthogonal_gentle_up_3_1.png | Bin 0 -> 1099 bytes ...right_bank_to_orthogonal_gentle_up_3_2.png | Bin 0 -> 860 bytes ...right_bank_to_orthogonal_gentle_up_3_3.png | Bin 0 -> 5321 bytes ...right_bank_to_orthogonal_gentle_up_3_4.png | Bin 0 -> 1179 bytes ...right_bank_to_orthogonal_gentle_up_4_1.png | Bin 0 -> 1092 bytes ...right_bank_to_orthogonal_gentle_up_4_2.png | Bin 0 -> 860 bytes ...right_bank_to_orthogonal_gentle_up_4_3.png | Bin 0 -> 1395 bytes ...right_bank_to_orthogonal_gentle_up_4_4.png | Bin 0 -> 1526 bytes ...large_turn_right_to_diag_gentle_up_1_1.png | Bin 0 -> 1276 bytes ...large_turn_right_to_diag_gentle_up_1_2.png | Bin 0 -> 1168 bytes ...large_turn_right_to_diag_gentle_up_1_3.png | Bin 0 -> 950 bytes ...large_turn_right_to_diag_gentle_up_1_4.png | Bin 0 -> 1085 bytes ...large_turn_right_to_diag_gentle_up_2_1.png | Bin 0 -> 995 bytes ...large_turn_right_to_diag_gentle_up_2_2.png | Bin 0 -> 992 bytes ...large_turn_right_to_diag_gentle_up_2_3.png | Bin 0 -> 987 bytes ...large_turn_right_to_diag_gentle_up_2_4.png | Bin 0 -> 1008 bytes ...large_turn_right_to_diag_gentle_up_3_1.png | Bin 0 -> 1025 bytes ...large_turn_right_to_diag_gentle_up_3_2.png | Bin 0 -> 1148 bytes ...large_turn_right_to_diag_gentle_up_3_3.png | Bin 0 -> 1061 bytes ...large_turn_right_to_diag_gentle_up_3_4.png | Bin 0 -> 1125 bytes ...large_turn_right_to_diag_gentle_up_4_1.png | Bin 0 -> 1255 bytes ...large_turn_right_to_diag_gentle_up_4_2.png | Bin 0 -> 1272 bytes ...large_turn_right_to_diag_gentle_up_4_3.png | Bin 0 -> 991 bytes ...large_turn_right_to_diag_gentle_up_4_4.png | Bin 0 -> 1142 bytes ...turn_right_to_orthogonal_gentle_up_1_1.png | Bin 0 -> 1066 bytes ...turn_right_to_orthogonal_gentle_up_1_2.png | Bin 0 -> 860 bytes ...turn_right_to_orthogonal_gentle_up_1_3.png | Bin 0 -> 1135 bytes ...turn_right_to_orthogonal_gentle_up_1_4.png | Bin 0 -> 1150 bytes ...turn_right_to_orthogonal_gentle_up_2_1.png | Bin 0 -> 892 bytes ...turn_right_to_orthogonal_gentle_up_2_2.png | Bin 0 -> 860 bytes ...turn_right_to_orthogonal_gentle_up_2_3.png | Bin 0 -> 1027 bytes ...turn_right_to_orthogonal_gentle_up_2_4.png | Bin 0 -> 1100 bytes ...turn_right_to_orthogonal_gentle_up_3_1.png | Bin 0 -> 1119 bytes ...turn_right_to_orthogonal_gentle_up_3_2.png | Bin 0 -> 860 bytes ...turn_right_to_orthogonal_gentle_up_3_3.png | Bin 0 -> 1230 bytes ...turn_right_to_orthogonal_gentle_up_3_4.png | Bin 0 -> 1264 bytes ...turn_right_to_orthogonal_gentle_up_4_1.png | Bin 0 -> 1094 bytes ...turn_right_to_orthogonal_gentle_up_4_2.png | Bin 0 -> 860 bytes ...turn_right_to_orthogonal_gentle_up_4_3.png | Bin 0 -> 1372 bytes ...turn_right_to_orthogonal_gentle_up_4_4.png | Bin 0 -> 1468 bytes .../corkscrew/large_zero_g_roll_left_1_1.png | Bin 0 -> 1386 bytes .../corkscrew/large_zero_g_roll_left_1_2.png | Bin 0 -> 1175 bytes .../corkscrew/large_zero_g_roll_left_1_3.png | Bin 0 -> 1330 bytes .../corkscrew/large_zero_g_roll_left_1_4.png | Bin 0 -> 1004 bytes .../corkscrew/large_zero_g_roll_left_1_5.png | Bin 0 -> 1392 bytes .../corkscrew/large_zero_g_roll_left_1_6.png | Bin 0 -> 4975 bytes .../corkscrew/large_zero_g_roll_left_1_7.png | Bin 0 -> 5442 bytes .../corkscrew/large_zero_g_roll_left_2_1.png | Bin 0 -> 4975 bytes .../corkscrew/large_zero_g_roll_left_2_2.png | Bin 0 -> 5381 bytes .../corkscrew/large_zero_g_roll_left_2_3.png | Bin 0 -> 860 bytes .../corkscrew/large_zero_g_roll_left_2_4.png | Bin 0 -> 1321 bytes .../corkscrew/large_zero_g_roll_left_2_5.png | Bin 0 -> 860 bytes .../corkscrew/large_zero_g_roll_left_2_6.png | Bin 0 -> 1237 bytes .../corkscrew/large_zero_g_roll_left_2_7.png | Bin 0 -> 860 bytes .../corkscrew/large_zero_g_roll_left_2_8.png | Bin 0 -> 1245 bytes .../corkscrew/large_zero_g_roll_left_3_1.png | Bin 0 -> 963 bytes .../corkscrew/large_zero_g_roll_left_3_2.png | Bin 0 -> 1138 bytes .../corkscrew/large_zero_g_roll_left_3_3.png | Bin 0 -> 5419 bytes .../corkscrew/large_zero_g_roll_left_3_4.png | Bin 0 -> 5200 bytes .../corkscrew/large_zero_g_roll_left_3_5.png | Bin 0 -> 5346 bytes .../corkscrew/large_zero_g_roll_left_3_6.png | Bin 0 -> 5271 bytes .../corkscrew/large_zero_g_roll_left_3_7.png | Bin 0 -> 938 bytes .../corkscrew/large_zero_g_roll_left_3_8.png | Bin 0 -> 5273 bytes .../corkscrew/large_zero_g_roll_left_4_1.png | Bin 0 -> 1534 bytes .../corkscrew/large_zero_g_roll_left_4_2.png | Bin 0 -> 1669 bytes .../corkscrew/large_zero_g_roll_left_4_3.png | Bin 0 -> 1185 bytes .../corkscrew/large_zero_g_roll_left_4_4.png | Bin 0 -> 5358 bytes .../corkscrew/large_zero_g_roll_left_4_5.png | Bin 0 -> 963 bytes .../corkscrew/large_zero_g_roll_left_4_6.png | Bin 0 -> 1166 bytes .../corkscrew/large_zero_g_roll_right_1_1.png | Bin 0 -> 1474 bytes .../corkscrew/large_zero_g_roll_right_1_2.png | Bin 0 -> 1649 bytes .../corkscrew/large_zero_g_roll_right_1_3.png | Bin 0 -> 1177 bytes .../corkscrew/large_zero_g_roll_right_1_4.png | Bin 0 -> 5371 bytes .../corkscrew/large_zero_g_roll_right_1_5.png | Bin 0 -> 971 bytes .../corkscrew/large_zero_g_roll_right_1_6.png | Bin 0 -> 1240 bytes .../corkscrew/large_zero_g_roll_right_2_1.png | Bin 0 -> 952 bytes .../corkscrew/large_zero_g_roll_right_2_2.png | Bin 0 -> 1133 bytes .../corkscrew/large_zero_g_roll_right_2_3.png | Bin 0 -> 5401 bytes .../corkscrew/large_zero_g_roll_right_2_4.png | Bin 0 -> 5204 bytes .../corkscrew/large_zero_g_roll_right_2_5.png | Bin 0 -> 5331 bytes .../corkscrew/large_zero_g_roll_right_2_6.png | Bin 0 -> 5039 bytes .../corkscrew/large_zero_g_roll_right_2_7.png | Bin 0 -> 933 bytes .../corkscrew/large_zero_g_roll_right_2_8.png | Bin 0 -> 5230 bytes .../corkscrew/large_zero_g_roll_right_3_1.png | Bin 0 -> 860 bytes .../corkscrew/large_zero_g_roll_right_3_2.png | Bin 0 -> 1310 bytes .../corkscrew/large_zero_g_roll_right_3_3.png | Bin 0 -> 860 bytes .../corkscrew/large_zero_g_roll_right_3_4.png | Bin 0 -> 1307 bytes .../corkscrew/large_zero_g_roll_right_3_5.png | Bin 0 -> 860 bytes .../corkscrew/large_zero_g_roll_right_3_6.png | Bin 0 -> 1289 bytes .../corkscrew/large_zero_g_roll_right_3_7.png | Bin 0 -> 860 bytes .../corkscrew/large_zero_g_roll_right_3_8.png | Bin 0 -> 1357 bytes .../corkscrew/large_zero_g_roll_right_4_1.png | Bin 0 -> 1464 bytes .../corkscrew/large_zero_g_roll_right_4_2.png | Bin 0 -> 1192 bytes .../corkscrew/large_zero_g_roll_right_4_3.png | Bin 0 -> 1373 bytes .../corkscrew/large_zero_g_roll_right_4_4.png | Bin 0 -> 1024 bytes .../corkscrew/large_zero_g_roll_right_4_5.png | Bin 0 -> 1360 bytes .../corkscrew/large_zero_g_roll_right_4_6.png | Bin 0 -> 4976 bytes .../corkscrew/large_zero_g_roll_right_4_7.png | Bin 0 -> 5581 bytes .../left_bank_to_gentle_up_left_bank_1.png | Bin 0 -> 1203 bytes .../left_bank_to_gentle_up_left_bank_2.png | Bin 0 -> 1137 bytes .../left_bank_to_gentle_up_left_bank_3.png | Bin 0 -> 1298 bytes .../left_bank_to_gentle_up_left_bank_4.png | Bin 0 -> 1272 bytes ...eft_bank_to_gentle_up_left_bank_diag_1.png | Bin 0 -> 1145 bytes ...eft_bank_to_gentle_up_left_bank_diag_2.png | Bin 0 -> 1149 bytes ...eft_bank_to_gentle_up_left_bank_diag_3.png | Bin 0 -> 5415 bytes ...eft_bank_to_gentle_up_left_bank_diag_4.png | Bin 0 -> 1201 bytes .../corkscrew/medium_half_loop_left_1_1.png | Bin 0 -> 1455 bytes .../corkscrew/medium_half_loop_left_1_2.png | Bin 0 -> 5463 bytes .../corkscrew/medium_half_loop_left_1_3.png | Bin 0 -> 5601 bytes .../corkscrew/medium_half_loop_left_1_4.png | Bin 0 -> 1435 bytes .../corkscrew/medium_half_loop_left_1_4_2.png | Bin 0 -> 5299 bytes .../corkscrew/medium_half_loop_left_1_5.png | Bin 0 -> 1225 bytes .../corkscrew/medium_half_loop_left_2_1.png | Bin 0 -> 1173 bytes .../corkscrew/medium_half_loop_left_2_1_2.png | Bin 0 -> 5242 bytes .../corkscrew/medium_half_loop_left_2_2.png | Bin 0 -> 1107 bytes .../corkscrew/medium_half_loop_left_2_2_2.png | Bin 0 -> 1255 bytes .../corkscrew/medium_half_loop_left_2_3.png | Bin 0 -> 5704 bytes .../corkscrew/medium_half_loop_left_2_4.png | Bin 0 -> 1836 bytes .../corkscrew/medium_half_loop_left_2_5.png | Bin 0 -> 1151 bytes .../corkscrew/medium_half_loop_left_3_1.png | Bin 0 -> 1063 bytes .../corkscrew/medium_half_loop_left_3_2.png | Bin 0 -> 1062 bytes .../corkscrew/medium_half_loop_left_3_3.png | Bin 0 -> 1546 bytes .../corkscrew/medium_half_loop_left_3_4.png | Bin 0 -> 5962 bytes .../corkscrew/medium_half_loop_left_3_5.png | Bin 0 -> 1185 bytes .../corkscrew/medium_half_loop_left_4_1.png | Bin 0 -> 1241 bytes .../corkscrew/medium_half_loop_left_4_2.png | Bin 0 -> 1355 bytes .../corkscrew/medium_half_loop_left_4_3.png | Bin 0 -> 1571 bytes .../corkscrew/medium_half_loop_left_4_4.png | Bin 0 -> 1710 bytes .../corkscrew/medium_half_loop_left_4_4_2.png | Bin 0 -> 1304 bytes .../corkscrew/medium_half_loop_left_4_5.png | Bin 0 -> 1141 bytes .../corkscrew/medium_half_loop_right_1_1.png | Bin 0 -> 1267 bytes .../corkscrew/medium_half_loop_right_1_2.png | Bin 0 -> 1290 bytes .../corkscrew/medium_half_loop_right_1_3.png | Bin 0 -> 1415 bytes .../corkscrew/medium_half_loop_right_1_4.png | Bin 0 -> 1610 bytes .../medium_half_loop_right_1_4_2.png | Bin 0 -> 1364 bytes .../corkscrew/medium_half_loop_right_1_5.png | Bin 0 -> 1181 bytes .../corkscrew/medium_half_loop_right_2_1.png | Bin 0 -> 1055 bytes .../corkscrew/medium_half_loop_right_2_2.png | Bin 0 -> 1047 bytes .../corkscrew/medium_half_loop_right_2_3.png | Bin 0 -> 1565 bytes .../corkscrew/medium_half_loop_right_2_4.png | Bin 0 -> 6068 bytes .../corkscrew/medium_half_loop_right_2_5.png | Bin 0 -> 1132 bytes .../corkscrew/medium_half_loop_right_3_1.png | Bin 0 -> 1195 bytes .../medium_half_loop_right_3_1_2.png | Bin 0 -> 1147 bytes .../corkscrew/medium_half_loop_right_3_2.png | Bin 0 -> 1133 bytes .../medium_half_loop_right_3_2_2.png | Bin 0 -> 1195 bytes .../corkscrew/medium_half_loop_right_3_3.png | Bin 0 -> 5704 bytes .../corkscrew/medium_half_loop_right_3_4.png | Bin 0 -> 1784 bytes .../corkscrew/medium_half_loop_right_3_5.png | Bin 0 -> 1213 bytes .../corkscrew/medium_half_loop_right_4_1.png | Bin 0 -> 1410 bytes .../corkscrew/medium_half_loop_right_4_2.png | Bin 0 -> 1415 bytes .../corkscrew/medium_half_loop_right_4_3.png | Bin 0 -> 5750 bytes .../corkscrew/medium_half_loop_right_4_4.png | Bin 0 -> 1454 bytes .../medium_half_loop_right_4_4_2.png | Bin 0 -> 1165 bytes .../corkscrew/medium_half_loop_right_4_5.png | Bin 0 -> 1148 bytes .../medium_turn_left_bank_gentle_up_1_1.png | Bin 0 -> 1226 bytes .../medium_turn_left_bank_gentle_up_1_2.png | Bin 0 -> 1144 bytes .../medium_turn_left_bank_gentle_up_1_3.png | Bin 0 -> 860 bytes .../medium_turn_left_bank_gentle_up_1_4.png | Bin 0 -> 1305 bytes .../medium_turn_left_bank_gentle_up_1_5.png | Bin 0 -> 1329 bytes .../medium_turn_left_bank_gentle_up_2_1.png | Bin 0 -> 1172 bytes .../medium_turn_left_bank_gentle_up_2_2.png | Bin 0 -> 1045 bytes .../medium_turn_left_bank_gentle_up_2_3.png | Bin 0 -> 1012 bytes .../medium_turn_left_bank_gentle_up_2_4.png | Bin 0 -> 1060 bytes .../medium_turn_left_bank_gentle_up_2_5.png | Bin 0 -> 1150 bytes .../medium_turn_left_bank_gentle_up_3_1.png | Bin 0 -> 1219 bytes .../medium_turn_left_bank_gentle_up_3_2.png | Bin 0 -> 860 bytes .../medium_turn_left_bank_gentle_up_3_3.png | Bin 0 -> 953 bytes .../medium_turn_left_bank_gentle_up_3_4.png | Bin 0 -> 860 bytes .../medium_turn_left_bank_gentle_up_3_5.png | Bin 0 -> 1156 bytes .../medium_turn_left_bank_gentle_up_4_1.png | Bin 0 -> 1345 bytes .../medium_turn_left_bank_gentle_up_4_2.png | Bin 0 -> 1312 bytes .../medium_turn_left_bank_gentle_up_4_3.png | Bin 0 -> 1087 bytes .../medium_turn_left_bank_gentle_up_4_4.png | Bin 0 -> 1187 bytes .../medium_turn_left_bank_gentle_up_4_5.png | Bin 0 -> 1286 bytes .../medium_turn_right_bank_gentle_up_1_1.png | Bin 0 -> 1401 bytes .../medium_turn_right_bank_gentle_up_1_2.png | Bin 0 -> 1242 bytes .../medium_turn_right_bank_gentle_up_1_3.png | Bin 0 -> 1035 bytes .../medium_turn_right_bank_gentle_up_1_4.png | Bin 0 -> 1115 bytes .../medium_turn_right_bank_gentle_up_1_5.png | Bin 0 -> 1220 bytes .../medium_turn_right_bank_gentle_up_2_1.png | Bin 0 -> 1205 bytes .../medium_turn_right_bank_gentle_up_2_2.png | Bin 0 -> 860 bytes .../medium_turn_right_bank_gentle_up_2_3.png | Bin 0 -> 950 bytes .../medium_turn_right_bank_gentle_up_2_4.png | Bin 0 -> 860 bytes .../medium_turn_right_bank_gentle_up_2_5.png | Bin 0 -> 1138 bytes .../medium_turn_right_bank_gentle_up_3_1.png | Bin 0 -> 1238 bytes .../medium_turn_right_bank_gentle_up_3_2.png | Bin 0 -> 5431 bytes .../medium_turn_right_bank_gentle_up_3_3.png | Bin 0 -> 1033 bytes .../medium_turn_right_bank_gentle_up_3_4.png | Bin 0 -> 1076 bytes .../medium_turn_right_bank_gentle_up_3_5.png | Bin 0 -> 1121 bytes .../medium_turn_right_bank_gentle_up_4_1.png | Bin 0 -> 1143 bytes .../medium_turn_right_bank_gentle_up_4_2.png | Bin 0 -> 1121 bytes .../medium_turn_right_bank_gentle_up_4_3.png | Bin 0 -> 860 bytes .../medium_turn_right_bank_gentle_up_4_4.png | Bin 0 -> 1363 bytes .../medium_turn_right_bank_gentle_up_4_5.png | Bin 0 -> 1434 bytes .../track/corkscrew/quarter_loop_up_1_1.png | Bin 0 -> 1378 bytes .../track/corkscrew/quarter_loop_up_1_2.png | Bin 0 -> 5192 bytes .../track/corkscrew/quarter_loop_up_1_2_2.png | Bin 0 -> 5313 bytes .../track/corkscrew/quarter_loop_up_1_3.png | Bin 0 -> 5359 bytes .../track/corkscrew/quarter_loop_up_2_1.png | Bin 0 -> 1636 bytes .../track/corkscrew/quarter_loop_up_2_2.png | Bin 0 -> 1507 bytes .../track/corkscrew/quarter_loop_up_2_3.png | Bin 0 -> 1084 bytes .../track/corkscrew/quarter_loop_up_3_1.png | Bin 0 -> 1534 bytes .../track/corkscrew/quarter_loop_up_3_2.png | Bin 0 -> 1553 bytes .../track/corkscrew/quarter_loop_up_3_3.png | Bin 0 -> 1121 bytes .../track/corkscrew/quarter_loop_up_4_1.png | Bin 0 -> 1402 bytes .../track/corkscrew/quarter_loop_up_4_2.png | Bin 0 -> 1061 bytes .../track/corkscrew/quarter_loop_up_4_2_2.png | Bin 0 -> 1287 bytes .../track/corkscrew/quarter_loop_up_4_3.png | Bin 0 -> 1180 bytes .../right_bank_to_gentle_up_right_bank_1.png | Bin 0 -> 1411 bytes .../right_bank_to_gentle_up_right_bank_2.png | Bin 0 -> 1237 bytes .../right_bank_to_gentle_up_right_bank_3.png | Bin 0 -> 1175 bytes .../right_bank_to_gentle_up_right_bank_4.png | Bin 0 -> 1108 bytes ...ht_bank_to_gentle_up_right_bank_diag_1.png | Bin 0 -> 5386 bytes ...ht_bank_to_gentle_up_right_bank_diag_2.png | Bin 0 -> 1139 bytes ...ht_bank_to_gentle_up_right_bank_diag_3.png | Bin 0 -> 1159 bytes ...ht_bank_to_gentle_up_right_bank_diag_4.png | Bin 0 -> 1200 bytes .../corkscrew/small_flat_to_steep_up_1.png | Bin 0 -> 1424 bytes .../corkscrew/small_flat_to_steep_up_2_1.png | Bin 0 -> 948 bytes .../corkscrew/small_flat_to_steep_up_2_2.png | Bin 0 -> 1104 bytes .../corkscrew/small_flat_to_steep_up_3_1.png | Bin 0 -> 976 bytes .../corkscrew/small_flat_to_steep_up_3_2.png | Bin 0 -> 1129 bytes .../corkscrew/small_flat_to_steep_up_4.png | Bin 0 -> 1416 bytes .../small_flat_to_steep_up_diag_1.png | Bin 0 -> 1313 bytes .../small_flat_to_steep_up_diag_2.png | Bin 0 -> 1063 bytes .../small_flat_to_steep_up_diag_3.png | Bin 0 -> 1367 bytes .../small_flat_to_steep_up_diag_4.png | Bin 0 -> 1294 bytes .../corkscrew/small_steep_to_flat_up_1.png | Bin 0 -> 1383 bytes .../corkscrew/small_steep_to_flat_up_2_1.png | Bin 0 -> 1044 bytes .../corkscrew/small_steep_to_flat_up_2_2.png | Bin 0 -> 1032 bytes .../corkscrew/small_steep_to_flat_up_3_1.png | Bin 0 -> 1070 bytes .../corkscrew/small_steep_to_flat_up_3_2.png | Bin 0 -> 1042 bytes .../corkscrew/small_steep_to_flat_up_4.png | Bin 0 -> 1412 bytes .../small_steep_to_flat_up_diag_1.png | Bin 0 -> 1328 bytes .../small_steep_to_flat_up_diag_2.png | Bin 0 -> 1051 bytes .../small_steep_to_flat_up_diag_3.png | Bin 0 -> 1403 bytes .../small_steep_to_flat_up_diag_4.png | Bin 0 -> 1289 bytes .../small_turn_left_bank_gentle_up_1_1.png | Bin 0 -> 5361 bytes .../small_turn_left_bank_gentle_up_1_2.png | Bin 0 -> 5500 bytes .../small_turn_left_bank_gentle_up_2_1.png | Bin 0 -> 1137 bytes .../small_turn_left_bank_gentle_up_2_2.png | Bin 0 -> 1244 bytes .../small_turn_left_bank_gentle_up_3_1.png | Bin 0 -> 5382 bytes .../small_turn_left_bank_gentle_up_3_2.png | Bin 0 -> 5220 bytes .../small_turn_left_bank_gentle_up_4_1.png | Bin 0 -> 1259 bytes .../small_turn_left_bank_gentle_up_4_2.png | Bin 0 -> 1238 bytes .../small_turn_left_bank_gentle_up_4_3.png | Bin 0 -> 1193 bytes .../small_turn_left_bank_to_gentle_up_1_1.png | Bin 0 -> 1289 bytes .../small_turn_left_bank_to_gentle_up_1_2.png | Bin 0 -> 1324 bytes .../small_turn_left_bank_to_gentle_up_2_1.png | Bin 0 -> 963 bytes .../small_turn_left_bank_to_gentle_up_2_2.png | Bin 0 -> 1082 bytes .../small_turn_left_bank_to_gentle_up_2_3.png | Bin 0 -> 1271 bytes .../small_turn_left_bank_to_gentle_up_2_4.png | Bin 0 -> 1119 bytes .../small_turn_left_bank_to_gentle_up_3_1.png | Bin 0 -> 1214 bytes .../small_turn_left_bank_to_gentle_up_3_2.png | Bin 0 -> 1136 bytes .../small_turn_left_bank_to_gentle_up_4_1.png | Bin 0 -> 5294 bytes .../small_turn_left_bank_to_gentle_up_4_2.png | Bin 0 -> 5275 bytes .../small_turn_left_bank_to_gentle_up_4_3.png | Bin 0 -> 5259 bytes .../small_turn_right_bank_gentle_up_1_1.png | Bin 0 -> 1311 bytes .../small_turn_right_bank_gentle_up_1_2.png | Bin 0 -> 1177 bytes .../small_turn_right_bank_gentle_up_1_3.png | Bin 0 -> 1136 bytes .../small_turn_right_bank_gentle_up_2_1.png | Bin 0 -> 1159 bytes .../small_turn_right_bank_gentle_up_2_2.png | Bin 0 -> 1114 bytes .../small_turn_right_bank_gentle_up_3_1.png | Bin 0 -> 1216 bytes .../small_turn_right_bank_gentle_up_3_2.png | Bin 0 -> 1218 bytes .../small_turn_right_bank_gentle_up_4_1.png | Bin 0 -> 5248 bytes .../small_turn_right_bank_gentle_up_4_2.png | Bin 0 -> 5645 bytes ...small_turn_right_bank_to_gentle_up_1_1.png | Bin 0 -> 5383 bytes ...small_turn_right_bank_to_gentle_up_1_2.png | Bin 0 -> 5242 bytes ...small_turn_right_bank_to_gentle_up_1_3.png | Bin 0 -> 5194 bytes ...small_turn_right_bank_to_gentle_up_2_1.png | Bin 0 -> 1159 bytes ...small_turn_right_bank_to_gentle_up_2_2.png | Bin 0 -> 1136 bytes ...small_turn_right_bank_to_gentle_up_3_1.png | Bin 0 -> 977 bytes ...small_turn_right_bank_to_gentle_up_3_2.png | Bin 0 -> 1139 bytes ...small_turn_right_bank_to_gentle_up_3_3.png | Bin 0 -> 1256 bytes ...small_turn_right_bank_to_gentle_up_3_4.png | Bin 0 -> 5199 bytes ...small_turn_right_bank_to_gentle_up_4_1.png | Bin 0 -> 1245 bytes ...small_turn_right_bank_to_gentle_up_4_2.png | Bin 0 -> 1406 bytes .../corkscrew/steep_to_vertical_up_1.png | Bin 0 -> 1403 bytes .../corkscrew/steep_to_vertical_up_2.png | Bin 0 -> 5407 bytes .../corkscrew/steep_to_vertical_up_3.png | Bin 0 -> 5404 bytes .../corkscrew/steep_to_vertical_up_4.png | Bin 0 -> 1579 bytes resources/g2/track/corkscrew/vertical_1.png | Bin 0 -> 1011 bytes resources/g2/track/corkscrew/vertical_2.png | Bin 0 -> 999 bytes resources/g2/track/corkscrew/vertical_3.png | Bin 0 -> 1002 bytes resources/g2/track/corkscrew/vertical_4.png | Bin 0 -> 1014 bytes .../corkscrew/vertical_to_steep_up_1.png | Bin 0 -> 1383 bytes .../corkscrew/vertical_to_steep_up_2.png | Bin 0 -> 5402 bytes .../corkscrew/vertical_to_steep_up_3.png | Bin 0 -> 5403 bytes .../corkscrew/vertical_to_steep_up_4.png | Bin 0 -> 1528 bytes .../corkscrew/vertical_twist_left_up_1.png | Bin 0 -> 1673 bytes .../corkscrew/vertical_twist_left_up_2_1.png | Bin 0 -> 5265 bytes .../corkscrew/vertical_twist_left_up_2_2.png | Bin 0 -> 5438 bytes .../corkscrew/vertical_twist_left_up_3.png | Bin 0 -> 1640 bytes .../corkscrew/vertical_twist_left_up_4_1.png | Bin 0 -> 5218 bytes .../corkscrew/vertical_twist_left_up_4_2.png | Bin 0 -> 5679 bytes .../corkscrew/vertical_twist_right_up_1_1.png | Bin 0 -> 5218 bytes .../corkscrew/vertical_twist_right_up_1_2.png | Bin 0 -> 5479 bytes .../corkscrew/vertical_twist_right_up_2.png | Bin 0 -> 5742 bytes .../corkscrew/vertical_twist_right_up_3_1.png | Bin 0 -> 5256 bytes .../corkscrew/vertical_twist_right_up_3_2.png | Bin 0 -> 5438 bytes .../corkscrew/vertical_twist_right_up_4.png | Bin 0 -> 1686 bytes .../track/corkscrew/zero_g_roll_left_1_1.png | Bin 0 -> 5474 bytes .../track/corkscrew/zero_g_roll_left_1_2.png | Bin 0 -> 1064 bytes .../track/corkscrew/zero_g_roll_left_1_3.png | Bin 0 -> 4976 bytes .../track/corkscrew/zero_g_roll_left_1_4.png | Bin 0 -> 5794 bytes .../track/corkscrew/zero_g_roll_left_1_5.png | Bin 0 -> 4975 bytes .../track/corkscrew/zero_g_roll_left_1_6.png | Bin 0 -> 5545 bytes .../track/corkscrew/zero_g_roll_left_2_1.png | Bin 0 -> 933 bytes .../track/corkscrew/zero_g_roll_left_2_2.png | Bin 0 -> 1052 bytes .../track/corkscrew/zero_g_roll_left_2_3.png | Bin 0 -> 4975 bytes .../track/corkscrew/zero_g_roll_left_2_4.png | Bin 0 -> 5321 bytes .../track/corkscrew/zero_g_roll_left_2_5.png | Bin 0 -> 4975 bytes .../track/corkscrew/zero_g_roll_left_2_6.png | Bin 0 -> 5530 bytes .../track/corkscrew/zero_g_roll_left_3_1.png | Bin 0 -> 1200 bytes .../track/corkscrew/zero_g_roll_left_3_2.png | Bin 0 -> 1289 bytes .../track/corkscrew/zero_g_roll_left_3_3.png | Bin 0 -> 983 bytes .../track/corkscrew/zero_g_roll_left_3_4.png | Bin 0 -> 5287 bytes .../track/corkscrew/zero_g_roll_left_4_1.png | Bin 0 -> 1384 bytes .../track/corkscrew/zero_g_roll_left_4_2.png | Bin 0 -> 1325 bytes .../track/corkscrew/zero_g_roll_left_4_3.png | Bin 0 -> 969 bytes .../track/corkscrew/zero_g_roll_left_4_4.png | Bin 0 -> 5328 bytes .../track/corkscrew/zero_g_roll_right_1_1.png | Bin 0 -> 1423 bytes .../track/corkscrew/zero_g_roll_right_1_2.png | Bin 0 -> 1373 bytes .../track/corkscrew/zero_g_roll_right_1_3.png | Bin 0 -> 971 bytes .../track/corkscrew/zero_g_roll_right_1_4.png | Bin 0 -> 5336 bytes .../track/corkscrew/zero_g_roll_right_2_1.png | Bin 0 -> 1137 bytes .../track/corkscrew/zero_g_roll_right_2_2.png | Bin 0 -> 1230 bytes .../track/corkscrew/zero_g_roll_right_2_3.png | Bin 0 -> 976 bytes .../track/corkscrew/zero_g_roll_right_2_4.png | Bin 0 -> 5257 bytes .../track/corkscrew/zero_g_roll_right_3_1.png | Bin 0 -> 932 bytes .../track/corkscrew/zero_g_roll_right_3_2.png | Bin 0 -> 1065 bytes .../track/corkscrew/zero_g_roll_right_3_3.png | Bin 0 -> 4976 bytes .../track/corkscrew/zero_g_roll_right_3_4.png | Bin 0 -> 5375 bytes .../track/corkscrew/zero_g_roll_right_3_5.png | Bin 0 -> 4977 bytes .../track/corkscrew/zero_g_roll_right_3_6.png | Bin 0 -> 5423 bytes .../track/corkscrew/zero_g_roll_right_4_1.png | Bin 0 -> 1127 bytes .../track/corkscrew/zero_g_roll_right_4_2.png | Bin 0 -> 1043 bytes .../track/corkscrew/zero_g_roll_right_4_3.png | Bin 0 -> 4976 bytes .../track/corkscrew/zero_g_roll_right_4_4.png | Bin 0 -> 5473 bytes .../track/corkscrew/zero_g_roll_right_4_5.png | Bin 0 -> 4976 bytes .../track/corkscrew/zero_g_roll_right_4_6.png | Bin 0 -> 5443 bytes src/openrct2/network/NetworkBase.cpp | 2 +- .../track/coaster/CorkscrewRollerCoaster.cpp | 8640 +++++++++++++++++ src/openrct2/park/Legacy.cpp | 140 + src/openrct2/park/ParkFile.h | 3 +- .../ride/rtd/coaster/CorkscrewRollerCoaster.h | 4 +- src/openrct2/ride/rtd/coaster/Hypercoaster.h | 2 +- .../ride/rtd/coaster/LayDownRollerCoaster.h | 2 +- src/openrct2/sprites.h | 18 +- 704 files changed, 12725 insertions(+), 7 deletions(-) create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_1_1.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_1_2.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_1_3.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_1_4.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_1_5.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_1_6.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_2_1.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_2_2.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_2_3.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_2_4.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_2_5.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_2_6.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_3_1.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_3_2.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_3_3.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_3_4.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_3_5.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_3_6.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_4_1.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_4_2.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_4_3.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_4_4.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_4_5.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_left_4_6.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_1_1.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_1_2.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_1_3.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_1_4.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_1_5.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_1_6.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_2_1.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_2_2.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_2_3.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_2_4.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_2_5.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_2_6.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_3_1.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_3_2.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_3_3.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_3_4.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_3_5.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_3_6.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_4_1.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_4_2.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_4_3.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_4_4.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_4_5.png create mode 100644 resources/g2/track/corkscrew/barrel_roll_right_4_6.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_1.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_2_1.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_2_2.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_3.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_4.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_1_1.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_1_2.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_2.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_3.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_4.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_1.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_2.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_3_1.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_3_2.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_4.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_1.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_2.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_3_1.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_3_2.png create mode 100644 resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_3.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_diag_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_diag_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_diag_3.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_diag_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_2_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_2_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_3.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_1_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_1_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_3.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_3.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_1_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_1_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_3.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_3.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_3.png create mode 100644 resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_3.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_diag_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_diag_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_diag_3.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_diag_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_3_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_3_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_3_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_3_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_3.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_3.png create mode 100644 resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_2_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_2_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_3.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_1_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_1_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_3.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_3_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_3_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_4.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_1.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_2.png create mode 100644 resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_4.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_1_1.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_1_2.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_1_3.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_1_4.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_1_5.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_2_1.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_2_2.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_2_3.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_2_4.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_2_5.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_3_1.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_3_2.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_3_3.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_3_4.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_3_5.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_4_1.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_4_2.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_4_3.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_4_4.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_4_4_2.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_left_4_5.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_1_1.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_1_2.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_1_3.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_1_4.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_1_4_2.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_1_5.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_2_1.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_2_2.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_2_3.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_2_4.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_2_5.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_3_1.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_3_2.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_3_3.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_3_4.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_3_5.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_4_1.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_4_2.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_4_3.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_4_4.png create mode 100644 resources/g2/track/corkscrew/large_corkscrew_right_4_5.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_1_1.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_1_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_1_3.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_1_4.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_1_5.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_1_6.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_1_6_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_1_7.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_2_1.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_2_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_2_2_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_2_3.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_2_3_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_2_4.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_2_5.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_2_6.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_2_7.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_3_1.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_3_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_3_3.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_3_3_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_3_4.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_3_5.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_3_6.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_3_7.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_4_1.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_4_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_4_3.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_4_4.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_4_5.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_4_6.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_left_4_7.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_1_1.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_1_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_1_3.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_1_4.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_1_5.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_1_6.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_1_7.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_2_1.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_2_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_2_3.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_2_3_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_2_4.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_2_5.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_2_6.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_2_7.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_3_1.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_3_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_3_2_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_3_3.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_3_3_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_3_4.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_3_5.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_3_6.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_3_7.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_4_1.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_4_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_4_3.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_4_4.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_4_5.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_4_6.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_4_6_2.png create mode 100644 resources/g2/track/corkscrew/large_half_loop_right_4_7.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_4.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_1.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_2.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_3.png create mode 100644 resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_4.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_1_1.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_1_2.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_1_3.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_1_4.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_1_5.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_1_6.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_1_7.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_2_1.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_2_2.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_2_3.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_2_4.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_2_5.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_2_6.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_2_7.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_2_8.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_3_1.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_3_2.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_3_3.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_3_4.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_3_5.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_3_6.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_3_7.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_3_8.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_4_1.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_4_2.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_4_3.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_4_4.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_4_5.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_left_4_6.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_1_1.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_1_2.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_1_3.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_1_4.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_1_5.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_1_6.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_2_1.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_2_2.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_2_3.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_2_4.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_2_5.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_2_6.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_2_7.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_2_8.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_3_1.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_3_2.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_3_3.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_3_4.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_3_5.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_3_6.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_3_7.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_3_8.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_4_1.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_4_2.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_4_3.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_4_4.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_4_5.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_4_6.png create mode 100644 resources/g2/track/corkscrew/large_zero_g_roll_right_4_7.png create mode 100644 resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_1.png create mode 100644 resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_2.png create mode 100644 resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_3.png create mode 100644 resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_4.png create mode 100644 resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_1.png create mode 100644 resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_2.png create mode 100644 resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_3.png create mode 100644 resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_4.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_1_1.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_1_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_1_3.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_1_4.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_1_4_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_1_5.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_2_1.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_2_1_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_2_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_2_2_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_2_3.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_2_4.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_2_5.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_3_1.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_3_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_3_3.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_3_4.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_3_5.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_4_1.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_4_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_4_3.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_4_4.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_4_4_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_left_4_5.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_1_1.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_1_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_1_3.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_1_4.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_1_4_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_1_5.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_2_1.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_2_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_2_3.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_2_4.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_2_5.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_3_1.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_3_1_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_3_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_3_2_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_3_3.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_3_4.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_3_5.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_4_1.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_4_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_4_3.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_4_4.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_4_4_2.png create mode 100644 resources/g2/track/corkscrew/medium_half_loop_right_4_5.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_1.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_2.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_3.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_4.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_5.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_3.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_4.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_5.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_3.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_4.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_5.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_1.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_2.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_3.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_4.png create mode 100644 resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_5.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_1.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_2.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_3.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_4.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_5.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_3.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_4.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_5.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_3.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_4.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_5.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_1.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_2.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_3.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_4.png create mode 100644 resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_5.png create mode 100644 resources/g2/track/corkscrew/quarter_loop_up_1_1.png create mode 100644 resources/g2/track/corkscrew/quarter_loop_up_1_2.png create mode 100644 resources/g2/track/corkscrew/quarter_loop_up_1_2_2.png create mode 100644 resources/g2/track/corkscrew/quarter_loop_up_1_3.png create mode 100644 resources/g2/track/corkscrew/quarter_loop_up_2_1.png create mode 100644 resources/g2/track/corkscrew/quarter_loop_up_2_2.png create mode 100644 resources/g2/track/corkscrew/quarter_loop_up_2_3.png create mode 100644 resources/g2/track/corkscrew/quarter_loop_up_3_1.png create mode 100644 resources/g2/track/corkscrew/quarter_loop_up_3_2.png create mode 100644 resources/g2/track/corkscrew/quarter_loop_up_3_3.png create mode 100644 resources/g2/track/corkscrew/quarter_loop_up_4_1.png create mode 100644 resources/g2/track/corkscrew/quarter_loop_up_4_2.png create mode 100644 resources/g2/track/corkscrew/quarter_loop_up_4_2_2.png create mode 100644 resources/g2/track/corkscrew/quarter_loop_up_4_3.png create mode 100644 resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_1.png create mode 100644 resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_2.png create mode 100644 resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_3.png create mode 100644 resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_4.png create mode 100644 resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_1.png create mode 100644 resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_2.png create mode 100644 resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_3.png create mode 100644 resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_4.png create mode 100644 resources/g2/track/corkscrew/small_flat_to_steep_up_1.png create mode 100644 resources/g2/track/corkscrew/small_flat_to_steep_up_2_1.png create mode 100644 resources/g2/track/corkscrew/small_flat_to_steep_up_2_2.png create mode 100644 resources/g2/track/corkscrew/small_flat_to_steep_up_3_1.png create mode 100644 resources/g2/track/corkscrew/small_flat_to_steep_up_3_2.png create mode 100644 resources/g2/track/corkscrew/small_flat_to_steep_up_4.png create mode 100644 resources/g2/track/corkscrew/small_flat_to_steep_up_diag_1.png create mode 100644 resources/g2/track/corkscrew/small_flat_to_steep_up_diag_2.png create mode 100644 resources/g2/track/corkscrew/small_flat_to_steep_up_diag_3.png create mode 100644 resources/g2/track/corkscrew/small_flat_to_steep_up_diag_4.png create mode 100644 resources/g2/track/corkscrew/small_steep_to_flat_up_1.png create mode 100644 resources/g2/track/corkscrew/small_steep_to_flat_up_2_1.png create mode 100644 resources/g2/track/corkscrew/small_steep_to_flat_up_2_2.png create mode 100644 resources/g2/track/corkscrew/small_steep_to_flat_up_3_1.png create mode 100644 resources/g2/track/corkscrew/small_steep_to_flat_up_3_2.png create mode 100644 resources/g2/track/corkscrew/small_steep_to_flat_up_4.png create mode 100644 resources/g2/track/corkscrew/small_steep_to_flat_up_diag_1.png create mode 100644 resources/g2/track/corkscrew/small_steep_to_flat_up_diag_2.png create mode 100644 resources/g2/track/corkscrew/small_steep_to_flat_up_diag_3.png create mode 100644 resources/g2/track/corkscrew/small_steep_to_flat_up_diag_4.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_1_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_1_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_4_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_4_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_4_3.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_1_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_1_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_3.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_4.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_4_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_4_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_4_3.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_1_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_1_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_1_3.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_4_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_4_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_1_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_1_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_1_3.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_2_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_2_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_2.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_3.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_4.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_4_1.png create mode 100644 resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_4_2.png create mode 100644 resources/g2/track/corkscrew/steep_to_vertical_up_1.png create mode 100644 resources/g2/track/corkscrew/steep_to_vertical_up_2.png create mode 100644 resources/g2/track/corkscrew/steep_to_vertical_up_3.png create mode 100644 resources/g2/track/corkscrew/steep_to_vertical_up_4.png create mode 100644 resources/g2/track/corkscrew/vertical_1.png create mode 100644 resources/g2/track/corkscrew/vertical_2.png create mode 100644 resources/g2/track/corkscrew/vertical_3.png create mode 100644 resources/g2/track/corkscrew/vertical_4.png create mode 100644 resources/g2/track/corkscrew/vertical_to_steep_up_1.png create mode 100644 resources/g2/track/corkscrew/vertical_to_steep_up_2.png create mode 100644 resources/g2/track/corkscrew/vertical_to_steep_up_3.png create mode 100644 resources/g2/track/corkscrew/vertical_to_steep_up_4.png create mode 100644 resources/g2/track/corkscrew/vertical_twist_left_up_1.png create mode 100644 resources/g2/track/corkscrew/vertical_twist_left_up_2_1.png create mode 100644 resources/g2/track/corkscrew/vertical_twist_left_up_2_2.png create mode 100644 resources/g2/track/corkscrew/vertical_twist_left_up_3.png create mode 100644 resources/g2/track/corkscrew/vertical_twist_left_up_4_1.png create mode 100644 resources/g2/track/corkscrew/vertical_twist_left_up_4_2.png create mode 100644 resources/g2/track/corkscrew/vertical_twist_right_up_1_1.png create mode 100644 resources/g2/track/corkscrew/vertical_twist_right_up_1_2.png create mode 100644 resources/g2/track/corkscrew/vertical_twist_right_up_2.png create mode 100644 resources/g2/track/corkscrew/vertical_twist_right_up_3_1.png create mode 100644 resources/g2/track/corkscrew/vertical_twist_right_up_3_2.png create mode 100644 resources/g2/track/corkscrew/vertical_twist_right_up_4.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_1_1.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_1_2.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_1_3.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_1_4.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_1_5.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_1_6.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_2_1.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_2_2.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_2_3.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_2_4.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_2_5.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_2_6.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_3_1.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_3_2.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_3_3.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_3_4.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_4_1.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_4_2.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_4_3.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_left_4_4.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_1_1.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_1_2.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_1_3.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_1_4.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_2_1.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_2_2.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_2_3.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_2_4.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_3_1.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_3_2.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_3_3.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_3_4.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_3_5.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_3_6.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_4_1.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_4_2.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_4_3.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_4_4.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_4_5.png create mode 100644 resources/g2/track/corkscrew/zero_g_roll_right_4_6.png diff --git a/distribution/changelog.txt b/distribution/changelog.txt index c69bf19bbc..cc81bb8a0c 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,5 +1,6 @@ 0.4.16 (in development) ------------------------------------------------------------------------ +- Improved: [#22937] Add banked sloped turns and many other pieces to the Corkscrew, Hypercoaster and Lay-down Roller Coaster. - Improved: [#22967] Add medium and large half loops to the Wooden and Classic Wooden Roller Coasters. - Improved: [#23010] Make AppImage compatible with Ubuntu 22.04 and Debian Bookworm again. - Fix: [#21221] Trains use unbanked sprites on flat to gentle diagonal banked track pieces. diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index fa6b492fef..4282107096 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -8302,6 +8302,3926 @@ "y": -8, "palette": "keep" }, + { + "path": "track/corkscrew/small_flat_to_steep_up_1.png", + "x": -24, + "y": -28, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_2_1.png", + "x": -24, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_2_2.png", + "x": -22, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_3_1.png", + "x": -20, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_3_2.png", + "x": -26, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_4.png", + "x": -26, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_1.png", + "x": -25, + "y": -28, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_2_1.png", + "x": -22, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_2_2.png", + "x": -25, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_3_1.png", + "x": -24, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_3_2.png", + "x": -15, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_4.png", + "x": -24, + "y": -28, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_diag_1.png", + "x": -32, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_diag_2.png", + "x": -14, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_diag_3.png", + "x": -32, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_diag_4.png", + "x": -14, + "y": -32, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_diag_1.png", + "x": -32, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_diag_2.png", + "x": -14, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_diag_3.png", + "x": -32, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_diag_4.png", + "x": -14, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/steep_to_vertical_up_1.png", + "x": -25, + "y": -51 + }, + { + "path": "track/corkscrew/steep_to_vertical_up_2.png", + "x": -26, + "y": -52 + }, + { + "path": "track/corkscrew/steep_to_vertical_up_3.png", + "x": -13, + "y": -51 + }, + { + "path": "track/corkscrew/steep_to_vertical_up_4.png", + "x": -13, + "y": -52 + }, + { + "path": "track/corkscrew/vertical_to_steep_up_1.png", + "x": -11, + "y": -60 + }, + { + "path": "track/corkscrew/vertical_to_steep_up_2.png", + "x": -10, + "y": -44 + }, + { + "path": "track/corkscrew/vertical_to_steep_up_3.png", + "x": -26, + "y": -44 + }, + { + "path": "track/corkscrew/vertical_to_steep_up_4.png", + "x": -27, + "y": -60 + }, + { + "path": "track/corkscrew/vertical_twist_left_up_1.png", + "x": -15, + "y": -92 + }, + { + "path": "track/corkscrew/vertical_twist_left_up_2_1.png", + "x": -10, + "y": -92 + }, + { + "path": "track/corkscrew/vertical_twist_left_up_2_2.png", + "x": -10, + "y": -84 + }, + { + "path": "track/corkscrew/vertical_twist_left_up_3.png", + "x": -15, + "y": -92 + }, + { + "path": "track/corkscrew/vertical_twist_left_up_4_1.png", + "x": -7, + "y": -91 + }, + { + "path": "track/corkscrew/vertical_twist_left_up_4_2.png", + "x": -13, + "y": -91 + }, + { + "path": "track/corkscrew/vertical_twist_right_up_1_1.png", + "x": -10, + "y": -89 + }, + { + "path": "track/corkscrew/vertical_twist_right_up_1_2.png", + "x": -10, + "y": -92 + }, + { + "path": "track/corkscrew/vertical_twist_right_up_2.png", + "x": -15, + "y": -91 + }, + { + "path": "track/corkscrew/vertical_twist_right_up_3_1.png", + "x": -7, + "y": -92 + }, + { + "path": "track/corkscrew/vertical_twist_right_up_3_2.png", + "x": -13, + "y": -90 + }, + { + "path": "track/corkscrew/vertical_twist_right_up_4.png", + "x": -15, + "y": -92 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_1.png", + "x": -24, + "y": -19 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_2_1.png", + "x": -10, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_2_2.png", + "x": -24, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_3.png", + "x": -23, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_4.png", + "x": -24, + "y": -24 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_1.png", + "x": -24, + "y": -24 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_2.png", + "x": -24, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_3_1.png", + "x": -8, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_3_2.png", + "x": -24, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_4.png", + "x": -23, + "y": -19 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_1.png", + "x": -20, + "y": -19 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_2_1.png", + "x": -22, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_2_2.png", + "x": -24, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_3.png", + "x": -24, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_4.png", + "x": -24, + "y": -19 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_1.png", + "x": -24, + "y": -19 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_2.png", + "x": -20, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_3_1.png", + "x": -24, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_3_2.png", + "x": 0, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_4.png", + "x": -24, + "y": -19 + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_1.png", + "x": -22, + "y": -11 + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_2.png", + "x": -23, + "y": -4 + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_3.png", + "x": -23, + "y": -9 + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_4.png", + "x": -24, + "y": -16 + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_1.png", + "x": -23, + "y": -16 + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_2.png", + "x": -22, + "y": -9 + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_3.png", + "x": -24, + "y": -4 + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_4.png", + "x": -23, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_1.png", + "x": -20, + "y": -12 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_2.png", + "x": -24, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_3.png", + "x": -23, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_4.png", + "x": -22, + "y": -17 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_1.png", + "x": -24, + "y": -17 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_2.png", + "x": -20, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_3.png", + "x": -22, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_4.png", + "x": -23, + "y": -12 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_1.png", + "x": -20, + "y": -19 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_2.png", + "x": -24, + "y": -6 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_3.png", + "x": -23, + "y": -12 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_4.png", + "x": -24, + "y": -24 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_1.png", + "x": -24, + "y": -24 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_2.png", + "x": -20, + "y": -12 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_3.png", + "x": -24, + "y": -6 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_4.png", + "x": -23, + "y": -19 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_1.png", + "x": -24, + "y": -11 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_2_1.png", + "x": -24, + "y": -4 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_2_2.png", + "x": -24, + "y": 3 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_3.png", + "x": -23, + "y": -4 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_4.png", + "x": -24, + "y": -16 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_1.png", + "x": -24, + "y": -16 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_2.png", + "x": -24, + "y": -4 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_3_1.png", + "x": -10, + "y": -4 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_3_2.png", + "x": -24, + "y": 3 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_4.png", + "x": -23, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_1.png", + "x": -20, + "y": -12 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_2_1.png", + "x": -22, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_2_2.png", + "x": -24, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_3.png", + "x": -24, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_4.png", + "x": -24, + "y": -12 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_1.png", + "x": -24, + "y": -12 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_2.png", + "x": -20, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_3_1.png", + "x": -24, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_3_2.png", + "x": -2, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_4.png", + "x": -24, + "y": -12 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_1_1.png", + "x": -26, + "y": -34 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_1_2.png", + "x": -17, + "y": -27 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_2_1.png", + "x": -17, + "y": -13 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_2_2.png", + "x": -38, + "y": -22 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_3_1.png", + "x": -23, + "y": -14 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_3_2.png", + "x": -26, + "y": -32 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_4_1.png", + "x": -26, + "y": -25 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_4_2.png", + "x": -28, + "y": -15 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_1_1.png", + "x": -29, + "y": -25 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_1_2.png", + "x": -26, + "y": -15 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_2_1.png", + "x": -17, + "y": -14 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_2_2.png", + "x": -29, + "y": -19 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_3_1.png", + "x": -38, + "y": -13 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_3_2.png", + "x": -16, + "y": -22 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_4_1.png", + "x": -9, + "y": -27 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_4_2.png", + "x": -23, + "y": -27 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_4_3.png", + "x": -16, + "y": -12 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_1_3.png", + "x": -16, + "y": -10 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_1_1.png", + "x": -20, + "y": -15 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_1_2.png", + "x": -30, + "y": -13 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_1_3.png", + "x": 0, + "y": 0 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_1_4.png", + "x": -32, + "y": -10 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_1_5.png", + "x": -24, + "y": -24 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_2_1.png", + "x": -24, + "y": -11 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_2_2.png", + "x": 0, + "y": -19 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_2_3.png", + "x": 0, + "y": -2 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_2_4.png", + "x": -13, + "y": -24 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_2_5.png", + "x": -17, + "y": -18 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_3_1.png", + "x": -26, + "y": -12 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_3_2.png", + "x": 0, + "y": 0 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_3_3.png", + "x": -30, + "y": -10 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_3_4.png", + "x": 0, + "y": 0 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_3_5.png", + "x": -24, + "y": -9 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_4_1.png", + "x": -31, + "y": -22 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_4_2.png", + "x": -32, + "y": -13 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_4_3.png", + "x": -19, + "y": -25 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_4_4.png", + "x": -23, + "y": -10 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_4_5.png", + "x": -23, + "y": -12 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_1_1.png", + "x": -24, + "y": -22 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_1_2.png", + "x": -16, + "y": -13 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_1_3.png", + "x": -9, + "y": -25 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_1_4.png", + "x": -19, + "y": -10 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_1_5.png", + "x": -25, + "y": -12 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_2_1.png", + "x": -20, + "y": -12 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_2_2.png", + "x": 0, + "y": 0 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_2_3.png", + "x": 16, + "y": -10 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_2_4.png", + "x": 0, + "y": 0 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_2_5.png", + "x": -24, + "y": -9 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_3_1.png", + "x": -32, + "y": -11 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_3_2.png", + "x": -32, + "y": -19 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_3_3.png", + "x": -26, + "y": -2 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_3_4.png", + "x": -22, + "y": -24 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_3_5.png", + "x": -23, + "y": -18 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_4_1.png", + "x": -17, + "y": -15 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_4_2.png", + "x": 5, + "y": -13 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_4_3.png", + "x": 0, + "y": 0 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_4_4.png", + "x": 2, + "y": -10 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_4_5.png", + "x": -23, + "y": -24 + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_1_1.png", + "x": -24, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_1_2.png", + "x": -32, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_1_3.png", + "x": 10, + "y": 8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_1_4.png", + "x": -19, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_2_1.png", + "x": -24, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_2_2.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_2_3.png", + "x": -24, + "y": 13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_2_4.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_3_1.png", + "x": -5, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_3_2.png", + "x": 8, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_3_3.png", + "x": -32, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_3_4.png", + "x": -14, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_4_1.png", + "x": -25, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_4_2.png", + "x": -26, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_4_3.png", + "x": 0, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_4_4.png", + "x": 0, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_1_1.png", + "x": -24, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_1_2.png", + "x": -18, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_1_3.png", + "x": -13, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_1_4.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_2_1.png", + "x": -24, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_2_2.png", + "x": -33, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_2_3.png", + "x": 2, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_2_4.png", + "x": -12, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_3_1.png", + "x": -7, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_3_2.png", + "x": -8, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_3_3.png", + "x": 0, + "y": 13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_3_4.png", + "x": 0, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_4_1.png", + "x": -19, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_4_2.png", + "x": -10, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_4_3.png", + "x": -32, + "y": 8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_4_4.png", + "x": -14, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_1.png", + "x": 0, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_3.png", + "x": -32, + "y": -17, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_4.png", + "x": -32, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_1.png", + "x": -14, + "y": 7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_3.png", + "x": -14, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_4.png", + "x": -16, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_1.png", + "x": -32, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_3.png", + "x": -17, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_4.png", + "x": -24, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_1.png", + "x": -16, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_3.png", + "x": -25, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_4.png", + "x": -24, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_1.png", + "x": 0, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_3.png", + "x": -32, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_4.png", + "x": -31, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_1.png", + "x": 7, + "y": 7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_3.png", + "x": -16, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_4.png", + "x": -24, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_1.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_3.png", + "x": -11, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_4.png", + "x": -24, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_1.png", + "x": -14, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_3.png", + "x": -11, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_4.png", + "x": -28, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_1_1.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_1_2.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_2.png", + "x": -15, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_3.png", + "x": -32, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_4.png", + "x": -14, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_1.png", + "x": -32, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_2.png", + "x": -14, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_1.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_2.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_4.png", + "x": -16, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_1_1.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_1_2.png", + "x": -32, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_2.png", + "x": -15, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_3.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_4.png", + "x": -14, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_1.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_2.png", + "x": -14, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_1.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_2.png", + "x": -32, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_4.png", + "x": -16, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_diag_1.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_diag_2.png", + "x": -15, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_diag_3.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_diag_4.png", + "x": -9, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_diag_1.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_diag_2.png", + "x": -9, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_diag_3.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_diag_4.png", + "x": -15, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_diag_1.png", + "x": -32, + "y": -3, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_diag_2.png", + "x": -15, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_diag_3.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_diag_4.png", + "x": -9, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_diag_1.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_diag_2.png", + "x": -9, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_diag_3.png", + "x": -32, + "y": -3, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_diag_4.png", + "x": -15, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_diag_1.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_diag_2.png", + "x": -15, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_diag_3.png", + "x": -32, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_diag_4.png", + "x": -9, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_diag_1.png", + "x": -32, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_diag_2.png", + "x": -9, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_diag_3.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_diag_4.png", + "x": -15, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_diag_1_1.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_diag_1_2.png", + "x": -32, + "y": -3, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_diag_2.png", + "x": -15, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_diag_3.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_diag_4.png", + "x": -14, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_diag_1.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_diag_2.png", + "x": -14, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_diag_3_1.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_diag_3_2.png", + "x": -32, + "y": -3, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_diag_4.png", + "x": -15, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_diag_1_1.png", + "x": -32, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_diag_1_2.png", + "x": -32, + "y": 3, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_diag_2.png", + "x": -15, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_diag_3.png", + "x": -32, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_diag_4.png", + "x": -14, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_diag_1.png", + "x": -32, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_diag_2.png", + "x": -14, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_diag_3_1.png", + "x": -32, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_diag_3_2.png", + "x": -32, + "y": 3, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_diag_4.png", + "x": -15, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_1.png", + "x": -20, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_2.png", + "x": -28, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_3.png", + "x": 15, + "y": 8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_4.png", + "x": -11, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_1.png", + "x": -24, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_2.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_3.png", + "x": -24, + "y": 14, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_4.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_1.png", + "x": -8, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_2.png", + "x": 0, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_3.png", + "x": -32, + "y": -2, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_4.png", + "x": -14, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_1.png", + "x": -26, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_2.png", + "x": -26, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_3.png", + "x": 0, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_4.png", + "x": 0, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_1.png", + "x": -24, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_2.png", + "x": -21, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_3.png", + "x": -15, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_4.png", + "x": -32, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_1.png", + "x": -20, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_2.png", + "x": -34, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_3.png", + "x": -1, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_4.png", + "x": -14, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_1.png", + "x": -8, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_2.png", + "x": -8, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_3.png", + "x": 0, + "y": 14, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_4.png", + "x": 0, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_1.png", + "x": -16, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_2.png", + "x": -5, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_3.png", + "x": -32, + "y": 8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_4.png", + "x": -15, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_1.png", + "x": 0, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_3.png", + "x": -32, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_4.png", + "x": -29, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_1.png", + "x": -15, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_3.png", + "x": -9, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_4.png", + "x": -16, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_1.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_3.png", + "x": -24, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_4.png", + "x": -23, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_1.png", + "x": -11, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_3.png", + "x": -26, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_4.png", + "x": -24, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_1.png", + "x": 0, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_3.png", + "x": -32, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_4.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_1.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_3.png", + "x": -16, + "y": -10, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_4.png", + "x": -24, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_1.png", + "x": -32, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_3.png", + "x": -15, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_4.png", + "x": -23, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_1.png", + "x": -15, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_3.png", + "x": -14, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_4.png", + "x": -29, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_1_1.png", + "x": -27, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_1_2.png", + "x": -18, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_2_1.png", + "x": -17, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_2_2.png", + "x": -18, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_2_3.png", + "x": -38, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_3_1.png", + "x": -25, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_3_2.png", + "x": -11, + "y": -2, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_4_1.png", + "x": -10, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_4_2.png", + "x": -30, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_1_1.png", + "x": -29, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_1_2.png", + "x": -10, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_2_1.png", + "x": -15, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_2_2.png", + "x": -30, + "y": -2, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_3_1.png", + "x": -38, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_3_2.png", + "x": -38, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_3_3.png", + "x": -18, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_4_1.png", + "x": -11, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_4_2.png", + "x": -25, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_4_3.png", + "x": -16, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_1_3.png", + "x": -16, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_2_4.png", + "x": -38, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_3_4.png", + "x": -18, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_1_1.png", + "x": -24, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_1_2.png", + "x": -23, + "y": -71, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_1_3.png", + "x": -28, + "y": -36, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_1_4.png", + "x": -25, + "y": -48, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_1_5.png", + "x": -24, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_2_1.png", + "x": -24, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_2_2.png", + "x": -32, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_2_3.png", + "x": -25, + "y": -50, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_2_4.png", + "x": -20, + "y": -58, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_2_5.png", + "x": -15, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_3_1.png", + "x": -16, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_3_2.png", + "x": -17, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_3_3.png", + "x": 13, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_3_4.png", + "x": -19, + "y": -38, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_3_5.png", + "x": -26, + "y": -31, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_4_1.png", + "x": -26, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_4_2.png", + "x": -25, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_4_3.png", + "x": -16, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_4_4.png", + "x": -37, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_4_5.png", + "x": -24, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_1_1.png", + "x": -24, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_1_2.png", + "x": -25, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_1_3.png", + "x": -24, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_1_4.png", + "x": -30, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_1_5.png", + "x": -32, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_2_1.png", + "x": -24, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_2_2.png", + "x": -16, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_2_3.png", + "x": -24, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_2_4.png", + "x": -16, + "y": -38, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_2_5.png", + "x": -24, + "y": -31, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_3_1.png", + "x": -35, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_3_2.png", + "x": -16, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_3_3.png", + "x": -27, + "y": -50, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_3_4.png", + "x": -32, + "y": -58, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_3_5.png", + "x": -24, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_4_1.png", + "x": -23, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_4_2.png", + "x": -11, + "y": -71, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_4_3.png", + "x": 13, + "y": -36, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_4_4.png", + "x": -14, + "y": -48, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_4_5.png", + "x": -21, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_4_4_2.png", + "x": -37, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_1_4_2.png", + "x": -20, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/quarter_loop_up_1_1.png", + "x": -22, + "y": -53 + }, + { + "path": "track/corkscrew/quarter_loop_up_1_2.png", + "x": -4, + "y": -35 + }, + { + "path": "track/corkscrew/quarter_loop_up_1_3.png", + "x": -24, + "y": -17 + }, + { + "path": "track/corkscrew/quarter_loop_up_2_1.png", + "x": -28, + "y": -78 + }, + { + "path": "track/corkscrew/quarter_loop_up_2_2.png", + "x": -32, + "y": -66 + }, + { + "path": "track/corkscrew/quarter_loop_up_2_3.png", + "x": -24, + "y": -25 + }, + { + "path": "track/corkscrew/quarter_loop_up_3_1.png", + "x": -13, + "y": -78 + }, + { + "path": "track/corkscrew/quarter_loop_up_3_2.png", + "x": -23, + "y": -68 + }, + { + "path": "track/corkscrew/quarter_loop_up_3_3.png", + "x": -10, + "y": -25 + }, + { + "path": "track/corkscrew/quarter_loop_up_4_1.png", + "x": -13, + "y": -54 + }, + { + "path": "track/corkscrew/quarter_loop_up_4_2.png", + "x": -24, + "y": -36 + }, + { + "path": "track/corkscrew/quarter_loop_up_4_3.png", + "x": -32, + "y": -17 + }, + { + "path": "track/corkscrew/quarter_loop_up_1_2_2.png", + "x": 0, + "y": -35 + }, + { + "path": "track/corkscrew/quarter_loop_up_4_2_2.png", + "x": -45, + "y": -36 + }, + { + "path": "track/corkscrew/medium_half_loop_left_1_1.png", + "x": -24, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_1_2.png", + "x": -24, + "y": -50, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_1_3.png", + "x": -32, + "y": -98, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_1_4.png", + "x": -40, + "y": -121, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_1_5.png", + "x": -23, + "y": -31, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_2_1.png", + "x": -24, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_2_2.png", + "x": 0, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_2_3.png", + "x": -32, + "y": -85, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_2_4.png", + "x": -33, + "y": -148, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_2_5.png", + "x": -24, + "y": -41, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_3_1.png", + "x": -24, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_3_2.png", + "x": 0, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_3_3.png", + "x": -7, + "y": -72, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_3_4.png", + "x": -39, + "y": -152, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_3_5.png", + "x": -16, + "y": -41, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_4_1.png", + "x": -23, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_4_2.png", + "x": -25, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_4_3.png", + "x": -32, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_4_4.png", + "x": -14, + "y": -123, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_4_5.png", + "x": -25, + "y": -34, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_1_1.png", + "x": -24, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_1_2.png", + "x": -21, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_1_3.png", + "x": -19, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_1_4.png", + "x": -37, + "y": -123, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_1_5.png", + "x": -24, + "y": -34, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_2_1.png", + "x": -24, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_2_2.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_2_3.png", + "x": -32, + "y": -72, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_2_4.png", + "x": -28, + "y": -152, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_2_5.png", + "x": -23, + "y": -41, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_3_1.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_3_2.png", + "x": -32, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_3_3.png", + "x": -32, + "y": -85, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_3_4.png", + "x": -14, + "y": -148, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_3_5.png", + "x": -12, + "y": -41, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_4_1.png", + "x": -24, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_4_2.png", + "x": -20, + "y": -50, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_4_3.png", + "x": -7, + "y": -98, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_4_4.png", + "x": -32, + "y": -121, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_4_5.png", + "x": -32, + "y": -31, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_1_4_2.png", + "x": -40, + "y": -121, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_2_1_2.png", + "x": -24, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_2_2_2.png", + "x": -32, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_4_4_2.png", + "x": -14, + "y": -123, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_1_4_2.png", + "x": -37, + "y": -123, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_3_1_2.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_3_2_2.png", + "x": -32, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_4_4_2.png", + "x": -32, + "y": -121, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_half_loop_left_1_1.png", + "x": -24, + "y": -29 + }, + { + "path": "track/corkscrew/large_half_loop_left_1_2.png", + "x": -20, + "y": -42 + }, + { + "path": "track/corkscrew/large_half_loop_left_1_3.png", + "x": -32, + "y": -69 + }, + { + "path": "track/corkscrew/large_half_loop_left_1_4.png", + "x": -32, + "y": -84 + }, + { + "path": "track/corkscrew/large_half_loop_left_1_5.png", + "x": -18, + "y": -68 + }, + { + "path": "track/corkscrew/large_half_loop_left_1_6.png", + "x": -11, + "y": -177 + }, + { + "path": "track/corkscrew/large_half_loop_left_1_7.png", + "x": -23, + "y": -14 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_1.png", + "x": -24, + "y": -6 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_2.png", + "x": -6, + "y": -8 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_3.png", + "x": -9, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_4.png", + "x": -9, + "y": -116 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_5.png", + "x": -32, + "y": -136 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_6.png", + "x": -28, + "y": -195 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_7.png", + "x": -25, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_1.png", + "x": -25, + "y": -4 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_2.png", + "x": -31, + "y": -9 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_3.png", + "x": -28, + "y": -37 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_4.png", + "x": -10, + "y": -59 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_5.png", + "x": -11, + "y": -117 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_6.png", + "x": -23, + "y": -196 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_7.png", + "x": -26, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_left_4_1.png", + "x": -24, + "y": -17 + }, + { + "path": "track/corkscrew/large_half_loop_left_4_2.png", + "x": -32, + "y": -21 + }, + { + "path": "track/corkscrew/large_half_loop_left_4_3.png", + "x": -32, + "y": -55 + }, + { + "path": "track/corkscrew/large_half_loop_left_4_4.png", + "x": -32, + "y": -82 + }, + { + "path": "track/corkscrew/large_half_loop_left_4_5.png", + "x": 12, + "y": -60 + }, + { + "path": "track/corkscrew/large_half_loop_left_4_6.png", + "x": -19, + "y": -181 + }, + { + "path": "track/corkscrew/large_half_loop_left_4_7.png", + "x": -32, + "y": -16 + }, + { + "path": "track/corkscrew/large_half_loop_right_1_1.png", + "x": -24, + "y": -18 + }, + { + "path": "track/corkscrew/large_half_loop_right_1_2.png", + "x": -20, + "y": -21 + }, + { + "path": "track/corkscrew/large_half_loop_right_1_3.png", + "x": -14, + "y": -55 + }, + { + "path": "track/corkscrew/large_half_loop_right_1_4.png", + "x": 0, + "y": -82 + }, + { + "path": "track/corkscrew/large_half_loop_right_1_5.png", + "x": -32, + "y": -60 + }, + { + "path": "track/corkscrew/large_half_loop_right_1_6.png", + "x": -21, + "y": -181 + }, + { + "path": "track/corkscrew/large_half_loop_right_1_7.png", + "x": -25, + "y": -16 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_1.png", + "x": -24, + "y": -4 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_2.png", + "x": -12, + "y": -9 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_3.png", + "x": -6, + "y": -37 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_4.png", + "x": -28, + "y": -59 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_5.png", + "x": -26, + "y": -117 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_6.png", + "x": -20, + "y": -196 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_7.png", + "x": -23, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_1.png", + "x": -26, + "y": -6 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_2.png", + "x": -28, + "y": -8 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_3.png", + "x": -29, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_4.png", + "x": -32, + "y": -116 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_5.png", + "x": 12, + "y": -136 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_6.png", + "x": 0, + "y": -195 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_7.png", + "x": -19, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_1.png", + "x": -27, + "y": -29 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_2.png", + "x": -28, + "y": -41 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_3.png", + "x": -23, + "y": -69 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_4.png", + "x": -10, + "y": -84 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_5.png", + "x": -11, + "y": -68 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_6.png", + "x": -31, + "y": -177 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_7.png", + "x": -28, + "y": -14 + }, + { + "path": "track/corkscrew/large_half_loop_left_1_6_2.png", + "x": -11, + "y": -177 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_2_2.png", + "x": -6, + "y": -8 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_3_2.png", + "x": -19, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_3_2.png", + "x": -28, + "y": -37 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_3_2.png", + "x": -32, + "y": -37 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_2_2.png", + "x": -28, + "y": -8 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_3_2.png", + "x": -29, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_6_2.png", + "x": -31, + "y": -177 + }, + { + "path": "track/corkscrew/barrel_roll_left_1_1.png", + "x": -24, + "y": 6, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_1_2.png", + "x": -15, + "y": 6, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_1_3.png", + "x": -22, + "y": -17, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_1_4.png", + "x": -21, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_1_5.png", + "x": -14, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_1_6.png", + "x": -13, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_2_1.png", + "x": -24, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_2_2.png", + "x": -25, + "y": 4, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_2_3.png", + "x": -28, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_2_4.png", + "x": -28, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_2_5.png", + "x": -30, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_2_6.png", + "x": -32, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_3_1.png", + "x": -30, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_3_2.png", + "x": -31, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_3_3.png", + "x": -25, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_3_4.png", + "x": -28, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_3_5.png", + "x": -3, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_3_6.png", + "x": -25, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_4_1.png", + "x": -17, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_4_2.png", + "x": -7, + "y": 14, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_4_3.png", + "x": -13, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_4_4.png", + "x": -10, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_4_5.png", + "x": -22, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_4_6.png", + "x": -24, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_1_1.png", + "x": -25, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_1_2.png", + "x": -15, + "y": 15, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_1_3.png", + "x": -28, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_1_4.png", + "x": -27, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_1_5.png", + "x": -22, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_1_6.png", + "x": -24, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_2_1.png", + "x": -24, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_2_2.png", + "x": -17, + "y": 10, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_2_3.png", + "x": -8, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_2_4.png", + "x": -1, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_2_5.png", + "x": -8, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_2_6.png", + "x": -7, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_3_1.png", + "x": -4, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_3_2.png", + "x": -4, + "y": 4, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_3_3.png", + "x": 2, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_3_4.png", + "x": 0, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_3_5.png", + "x": -10, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_3_6.png", + "x": -24, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_4_1.png", + "x": -11, + "y": 6, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_4_2.png", + "x": -21, + "y": 6, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_4_3.png", + "x": -28, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_4_4.png", + "x": -29, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_4_5.png", + "x": -23, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_4_6.png", + "x": -24, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_1_1.png", + "x": -24, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_1_2.png", + "x": -10, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_1_3.png", + "x": -10, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_1_4.png", + "x": -11, + "y": -35, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_1_5.png", + "x": -19, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_1_6.png", + "x": -21, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_2_1.png", + "x": -14, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_2_2.png", + "x": -24, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_2_3.png", + "x": -23, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_2_4.png", + "x": -23, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_2_5.png", + "x": -21, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_2_6.png", + "x": -26, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_3_1.png", + "x": -21, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_3_2.png", + "x": -22, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_3_3.png", + "x": -25, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_3_4.png", + "x": -24, + "y": -27, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_4_1.png", + "x": -18, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_4_2.png", + "x": -12, + "y": -39, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_4_3.png", + "x": -22, + "y": -17, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_4_4.png", + "x": -22, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_1_1.png", + "x": -24, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_1_2.png", + "x": -29, + "y": -39, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_1_3.png", + "x": -23, + "y": -17, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_1_4.png", + "x": -35, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_2_1.png", + "x": -24, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_2_2.png", + "x": -17, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_2_3.png", + "x": -14, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_2_4.png", + "x": -23, + "y": -28, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_3_1.png", + "x": -9, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_3_2.png", + "x": -9, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_3_3.png", + "x": -11, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_3_4.png", + "x": -11, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_3_5.png", + "x": -22, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_3_6.png", + "x": -22, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_4_1.png", + "x": -25, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_4_2.png", + "x": -31, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_4_3.png", + "x": -25, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_4_4.png", + "x": -39, + "y": -35, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_4_5.png", + "x": -19, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_4_6.png", + "x": -25, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_1_1.png", + "x": -25, + "y": -46, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_1_2.png", + "x": -26, + "y": -48, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_1_3.png", + "x": -17, + "y": -51, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_1_4.png", + "x": -11, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_1_5.png", + "x": -15, + "y": -40, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_1_6.png", + "x": -14, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_1_7.png", + "x": -19, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_1.png", + "x": -26, + "y": -17, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_2.png", + "x": -26, + "y": -43, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_3.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_4.png", + "x": -28, + "y": -34, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_5.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_6.png", + "x": -32, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_7.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_8.png", + "x": -30, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_1.png", + "x": -11, + "y": -32, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_2.png", + "x": -15, + "y": -31, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_3.png", + "x": -31, + "y": -41, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_4.png", + "x": -32, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_5.png", + "x": -24, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_6.png", + "x": -24, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_7.png", + "x": -24, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_8.png", + "x": -23, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_4_1.png", + "x": -17, + "y": -52, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_4_2.png", + "x": -16, + "y": -47, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_4_3.png", + "x": -11, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_4_4.png", + "x": -30, + "y": -57, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_4_5.png", + "x": -20, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_4_6.png", + "x": -23, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_1_1.png", + "x": -25, + "y": -54, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_1_2.png", + "x": -32, + "y": -47, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_1_3.png", + "x": -29, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_1_4.png", + "x": -31, + "y": -57, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_1_5.png", + "x": -25, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_1_6.png", + "x": -28, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_1.png", + "x": -18, + "y": -32, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_2.png", + "x": -26, + "y": -31, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_3.png", + "x": -25, + "y": -41, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_4.png", + "x": -23, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_5.png", + "x": -18, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_6.png", + "x": 15, + "y": -27, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_7.png", + "x": -8, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_8.png", + "x": -28, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_1.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_2.png", + "x": -19, + "y": -43, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_3.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_4.png", + "x": -15, + "y": -34, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_5.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_6.png", + "x": -5, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_7.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_8.png", + "x": -23, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_4_1.png", + "x": -21, + "y": -46, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_4_2.png", + "x": -23, + "y": -50, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_4_3.png", + "x": -32, + "y": -51, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_4_4.png", + "x": -27, + "y": -36, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_4_5.png", + "x": -29, + "y": -40, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_4_6.png", + "x": -18, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_4_7.png", + "x": -25, + "y": -25, + "palette": "keep" + }, { "path": "track/lim/barrel_roll_left_1_1.png", "x": -22, diff --git a/resources/g2/track/corkscrew/barrel_roll_left_1_1.png b/resources/g2/track/corkscrew/barrel_roll_left_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..300d3ea5e627860cff37895ae7e84c8083e811a2 GIT binary patch literal 1037 zcmX9-Z;0D;7=G_>?sl8qtXyIJkj=_vE|W}x3lc_d%gye{xQu1c4+S%bTCihLqU(o# z2s5Xh6wS1|744v~p!JBX>J7sv7`%W7>t@88b~8vliWWSfxFUCYAAV*Gp7(uuzPt|) z&-=c6axS@J+wN@uuw(Z4%&Blb8CG;`DD2BFwFxi;Cr_L{7Se%%fx*GSp`oGS;o*^y zkU6TV~Iq9rYWB1BuP+|w5F+sVU)|&dfoB7)gb8g`!od{3!*TQPDis@ zJeQ{mMYdcKYjwHdYE8e`?pQpDrPv8oi0LWZREVlZFB!aBPBrUluu|v-)<(}u#z7__ z$AKwfH5GG2NUCH?rxlacD!gF}rG{iRWhcnsOq@z4Scw!ACav;nK`d0|s-rr-?gb^k zTWfE)5e}jf#4>>AfiN+q8cWuRw9Bb}s@T@7p6Q__k&G%#JeMSkDYmBY4NdY5rB&8C zw$XFT8@`P?UL?v8WQt}o9G{bVfC?+Z@OOrb!W9 z#?35Q$#Zr=YE&{Sw%&3p-ImwyuOkj11)u?#05-r1KnDX9LgZ0iL$-y2mPmj~Lx}?? z34sVm0;I-Jkw%t?oGfY=NcR3=9be&tsW5t2FH?AB+cPjiOy#PQ_or@ybDs| zKn|b)5DK#>gmRA%H}aKEhpChwL2EYobXv-0m3&^MDTATP9BuQoD^RN<*-a&oj3b>u z6&g7l@`dpDnP(>ce)t1#oSKth`j30BgrqS$bL8~C58l3%ecafyef}o;Y3GA$#M9Kv ze?D=bb7TJ@ZmB(0+4oQVx4FBc7hn5qYI<_l_py%;P2OBwp5HvI+`2#b^)>U=_kKS9 zYi9AItJ;re$IeVGT>1P!j=klLYj;LI-JNG9XYQvC{xVDA%e}?F-hZ~b_rLl}&;9W4 z<(-|!E?j-#?C<>T#Utlm-2Cv~`A;riI#}Mdw!VMQ+P6*S@WRn^Gk0(7z4GRri?5%U q|LU6uYtJX2x}BTOoV)Pd_66q4(ifyLq`ec`fZ1bnGuMxvdFy{w4#FS+ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_1_2.png b/resources/g2/track/corkscrew/barrel_roll_left_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f05203dc8f35645d29a71bd2e0186bf8149067ca GIT binary patch literal 1009 zcmX9-Ux?#$5T5;;{o@+F9u%w)-J&^+M;3w`Bw+4L*WMc4++OymT)?O~t`AiLM(knG z=oPI}FiM3WeJEU%E(YwwD#7hT;41c@LOk}NVvvdj`*2{8;uYM7pE(Y`nc;hxZ-#H? zlk+?IwUvif0AOwVT<$_rvq_|u=8}B+-P}(Ab8!BJy{&}K%*@Qr&d$xv&Cky-EG#T8 zE@BwAw6wImyqwNvvkXHE0x!#=rYVM@S1J|9X|~&bw|f*t@npi#z;hsptBR5;m58!Q zS8JTpkXmiE6BzxlHXOMEg%!9}T})dA!q&*9!5mbCz$x_Gdep0qBX=5i^BGVnDDz;; zSWCx(8a`;HCjAT=(`cfiV;iAvvV#PmVwjHORwiSUq|0#!lGG~}2bOia*+fB*VNzK> zO-lr)l6jpfSd3ArSx%-zja76(uS(UX+Vpilw7O9}9Jhwk z0OuhkL%Ilr38am&&2+v^Dgm#Dh1$??W4ntEBr2t`nR1@06}XlrbPPGHXamO>d6hVD zrlE&MT|C8-RDofOyik_qnx-|%<#w$WG@GIC508%GI7X1sfpjpYg$tdG+^32|p*m9B zak&%QN0avWcrZn)6ppj$be_n{6s>WbAxc#>X=b)-^R7W z_o{NIQS5ovAZUyS-O1!O;sFW(27nFV0rUVy7@!1_fJ_5&auJU$TatYNZ z^@y`$#ha8nQ>TCI578hdQ@|2fp2iiPD9Maj6m6^I)~$|L54+wt>Y~Yz6-DF&iU6U+ zi)tcw51ESD7>(G5a}P$pFDQy!Dru&vGjxTe9iH(7CJ^Z(i5eHONF|U(q6UL}9))6Z z{Osw~fA0RkTNid@IP=%9R}#|P&Yj&m_4$XNZJ)TYao_yEC^)BnxYzdV0KQyC-)`U%oibEnk{O!H-}4@w|y$ C)2iD5 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_1_3.png b/resources/g2/track/corkscrew/barrel_roll_left_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d495e75e0202d67e188fbd5d6b969f2796bee212 GIT binary patch literal 922 zcmX9-L5SmI82x5CGwEy@awtR8z{I789D)Rl5HW|iW|qvDWwLG-a_AuoLAzKXLWF`{ z4A_Mt!OcJqJ#^U~!qP*)3Ui23qwR(7XNHiJ^j$9 zgO)8ucR14%?2*(9ltHBVb0f@J6i>2pL(mw-8DvI!QK2^T}!(<08~G zAX-3mf%Y(dOvqEZ8H-k`yDQt@cnP{vnYzi79hq@;VPZ;=t))G4IkeY7Zxau=lGT=bu`U2%~7W_b=`P8PQ!4uSZp>M1f&J@5aTAe6p`ATX|1IGy6NYgXyYx4 zX@0ZZq8fwaJVD4*Lt|J|5Nt*58>Lux>JDa;X_lnLN(4i}Yz=n|%4;*Dt{C*SXw;eo z&N3e5%cLl-kqDpz*Z>|tS%VqC8Us{9l~C74fseAKN`uA0K!i|+Oa-I?vIyjI$X8L= zM)N+(e0UW+4~hi3inUF`=`aINp7>@I_0lxR^Awd{WDB@%P4o!Wr;L!cGQrz4gQ62{ zhx40og_aw-4m^d)EZ!8Uw#Ic^is!WbffEITGzs!7LB)z!6chr=0HHFAerfj_WUo6~ zuldpNHSGCZYBsfY+w68Nj_vX6P~-xMixqaEGP&MB28A3NjW`sFC{@bx^Y7IDdG!Nd zJ-E=|!$1G{tR!dWr*|H{|GoL>?StpHKR(`la{H72s#xp%_dB0I{cZor$z$xY`Xwg( z^^5ZJv&By@&s4l|{QTtUr@ub_`{=zl?!9ch_~KdR^2IlBd2;l@@sFo(mYQ&W_u}-2 Ij~;#dKa#V74gdfE literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_1_4.png b/resources/g2/track/corkscrew/barrel_roll_left_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b8454b91008d6f8e6b91388a39af73348b7a36d0 GIT binary patch literal 1386 zcmXAoeQZ)^6vp3v-hL?!Y@>=w9V$-du)SJTTu^Tt+FtF|UKKZDSj34+=2fps8)|W- zN;_QdEK`=SiHa2`S+RAKMO55y*5tOK+HGjq#E6x4nqtSaE}g!^nEcK;IscsJkLNk9 zt7?=J@+Rj2047vbme;0cX{zSsWTg70ckZ+RkO5Y$SW}T&)6&w?)6+9DGBPtWv$C?X zv$GKd$;rvd&CTVDL?RTGVwi#?ajjNO)0Ek4w%eUvuP+!Jh(r>}Bq{|8IUw+SwVJ2b z3k^o8#VWTu2)9?`572DL8jZOy38IqcQ#jwG5;9t`lSa>*v4CC0dZ|c{B_45&C4x!; z&`5wm0T>c-Q%Jzd3A=eoRsiEtnAE^=2Ew2S00ICFf>0ceNg!avVwYTgo*;U3y0FRg z$mxWEfB@x*6nrTmlxxIFN}@8MT1HMgFtZ1@`AHY6@kMk(nLw%($w>*Wm8mI=vJe)h z#_6McAyY773&q{hu>eN_cqHKKfY1oU3?g&#m0qzrprAr3Ym{~+m>@h)NO)SAz@U^^ zRdTl$^V4L=tPR`gn8%z5*vCR17z=WEGO3?#kr@$eYTmvA^TK3^#mkrJs^E~jzAqDdVy zdabq|w>J_DC8G+U!4aC|m^4C0FL4+Z9t-Jr=z2V+aKI4{2b0N1Pyv7n02%-W01p5? z0K^agQxF(5($M3AkuV_!6bft#;8TJK0U!w=#fMfDx(MjgL)HQ#F7V2D8Ne~1A`rcn zZ!$=1jMDAW`u*lm$PMPWE0<^h=y zQA#;#g-}nTMjg(W^e&sp@3Dn~o_Hh(lTjItLmz+<0Ab1tOG@rF0<+N(i^&}J*U&7B zsnw)juQeJeRBDz$5!48wNemq*^eJEnPlaDLH-Gfi5A3e3A;Hpz zw>JZjUQ|`SY)xhBkt4(1r-};>?1L%+zi?ms!7t9Or>_p){dVWpBs+2+6)(yy>$8_M z7@t_?QLT4-|HL3DCbuMlV7K87{UI=$1lt6>D>jLm=qV3}=k#p9VcGac?zS5i7LWBTZ!bEHOKuL=x7S_SHZSI8CT{KbTs7A&MivQ+nCnxnJ+y4;SR8M?b!T>L4?-7i{^UDa z_rv}zB~9CH>suERFY50c=`Sv8-n;Rl|Cem^!qX=;4`w&`FPlpSyI&St=SFIC0-s$H z?{69F<~|-NTzLC;V-Sew^RY%{M!b98F6<__=9m=_&oN#;E{WTx5 zBQfFb>6bFVhOD|XH0nIuB}N022@qlly@%w GsOf)-ByIZu literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_1_5.png b/resources/g2/track/corkscrew/barrel_roll_left_1_5.png new file mode 100644 index 0000000000000000000000000000000000000000..90f9c9ca649bbdc06706da99752025b8564c86bd GIT binary patch literal 903 zcmX9-F=*pv82u6_Q4$kG>p|^_A`VkDh^q>s=!&>1trFB!z34by@t{Emf{NlngIYXz z5Y$j#5k-RsQC#qW1{DPLkU@h64WfAPpuvL+8cZ=%Lk3Yiq>$mSj)V7oA8&bYc<=l9 z*|mIj`rs4*&aS?^c;4I(oB80l)$9k~ee*9s3!Z)b;j^%;Nal!@bKv9 z2*a@B0mJTylgfrl4P@5)pd=4w1EyVF2bdh)Rv63k;Yp+tOjZAuXgk5 zetn19436^zAyZwAVNF4B6m@JgV#B#NSw!p@ZTOm1~s-n}dl6i43I*NCRXO$m39`qNI zeX>F8n(hEkVKR&BBGuQpp{4k4Kb*K}JSpIg`@*J~1zW51$tl*c?`=7NQ{_yDGSD$`#UcL9^sd4)|_UbhH j`?n{rTCe~6^PN)=pPs$j&R_r92*B0l^~E1wy!`QhDe8AT literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_1_6.png b/resources/g2/track/corkscrew/barrel_roll_left_1_6.png new file mode 100644 index 0000000000000000000000000000000000000000..86423387b3d6a7f5f1bc42e3cabf5978a9220636 GIT binary patch literal 1282 zcmX9-e{2(F82(td-F|wIG8<{MvJMIyq{4{@c5tvOspOU(?1+U_Qo=99zZqLp+|rI4wo7OAFc37sBLpu)vfC|JXUX4Guz9G@j5&-?R__xa;_-rXzA zrsjqz4FG`VnVz4S(@Xlg1~z`o?tK>kBg~PR+dZUGOh=t0Wfr<)v9zjG)|Y^ z>oWvHOf+swB!!IR%NHUPhFA=ZJgstDG=5GO7Vv%#l?+-kab8Y)i*jVNlrpJ-4FgUR z_*o>%BS{~ciz>?*H7x33*#^h_5T>*MFaX#Pghx@gTJ6{AA_hZ0!=&x@oZCGV4#Q+p zjVraJO3!EvHl2ybEN-0h8-x($iP3=s8_C#2*{&hfdXv_`Vl+osd5ZTk-mon!@}lHU z$pNVt&5tHg5-3@qvIC6^===x~R+-{DYm($8i!U!kO8yk=XD}s4sGTOvXE8)MDj~3v zhsyJ%u27*sgo5`WWHOZ1$~qjJ%f;h*51|i| zc#Oi6v_8vVMT-{NG|;VsAsmV%l<122i8+nK_kQ4&E;9?3{Qk>^N`HL0ap|fBd%AlY z&&M8Z>bVTByjWwj+zCv4WFFBzw0b`N!Ie8p&F0pQcI0g4S{=Q3F#g-dM0sivIiq|# z{nGWq1OHOS*3HKMZm~aKeY)YvyBF52Z2E3d&y0OkwdK$*^ycBNO_Q2V^i3Xrby4q8 za^Uol_n-N4-Gf})k$tnsLo-b$*KeQLae@Bz+_E*5wMTbnu*Gno@0wm149sJA9tOnJ1esnKX=j*jjNm0Lzz|jmJ9Hz4<@y$2W8U literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_2_1.png b/resources/g2/track/corkscrew/barrel_roll_left_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6b4a1bf450eba1856ca9b238089d815ee4e9f48e GIT binary patch literal 935 zcmXAoL5SmY6vkhtGn3BNwMq{WGZLYPfI*@YG>06rYi6lKbh1o#DcD1lfE9blAxaNL zqvlYS9C9dQ7J8_VL)CyijBCUS0VDKK)__GTMk!b^$SP3^+r!}g&9d;l_xLXFclh4B zarL-<@xtR50N~=$i-#xq+|TQgQZerbk7mCD6yfSi*RJHYP$+C|Z54~f?d|QIot@p? zT@1rYrPAKs9$u@}Se6k*K~W@4YZ``bS(fV#$KxQ1=1G#R*DM1953*ElHmmJ6+37Mp zn|BBDXsk{`V;0-Xl_%0zgD>k6ZZ=3qqlN~1W{IKOn2q&h+Dj8}lSOp`R2n)0I0`n> zvCyt8M%DF;mOr+z_visb(nXal>93UgkvTOs1I5Cvi(iX0<@~td%H?faa zQKiaJbc5wug4j_MThj)e&e*oY;V=$@<$RuH83IBF%Ej1GMVt`IjBYK(-m2-Pok`}* z*W>hju|Z|JQsHpCPSzBf(RkjFyGXIbTm$)c)b)rl`uo8m@4VC=|NZUd&*?c zn)>D<9HfhAy}pA4fChj8-~jjlQ-Bo)D3>gvu7P|HB@3AXorS&tK^+nqkOD}@kI>e?mP97r%fhS9Q$b+qnt&wfbEtA2bVok4JbX~ovi7v zJClt&I}eszO=`04fBTt7OzeC@H*Ti;!N_`PRJ+n4U4FHY_)ZFfy8G^z{{AaJ|MkP|zrRnv`FMQl-n#kex2OO8^73md c!Fpo)+w&j&^LFd08~{gGjt@V3;nffR2ODUV6aWAK literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_2_2.png b/resources/g2/track/corkscrew/barrel_roll_left_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ccba38e00bb8e4b2b88439ad9a62f22909ee67f8 GIT binary patch literal 1026 zcmX9-e~8<36n}TUyW9_ss{Nz7Fe_B;SUf8Pi4ZWl+>srbm+f*;M`iJdTgIwJ$e@!V z85f~w(M*bzQCQXdQ6zKSaj?LZ5h2K_1p_PCNs#_gT>rRvWs7*i{qZ$p@Okg?`R9Ee z@AKYgCs(-n*+a7cFu#0!aW$%kqex80qMYaceG4E4Cr_*`MRaUzYe_=pC}Yk z#ZtChp=))a*^=6>*6}O-fyEM7j-FHbq@GKea;Bk?TL$aaa-EhM?39OrwLkJW93%pY z445L;R57;_?==%)2S>v!3MF)4BIKn31ON%c)OcLSaWj*#XnIQ!b`+(j>${Bxa$THE zq?u$^NYPS;Q;D2T$|kMVS;OY5ZPDsTPN1YHJjF)2ud-@cC^w{rqdLCs1yz68 z?C-mA1`;A96-bpJV`5Yz$+a?hmr?y(rLS2d(?eSVk&r38$Ptws-IUq3Ci;flt7!w< z7`e55-$ny3o}e;Bj-(WZEsA1Amg~i0t5R_r4c~G4-R@{KLV&A~sbOR@&bD!}LnwW= zJjh$aVtZtE!`ASiw~ywCc$`Wmxl~#tvNBC;yik^+W~El8y3=e0o*(uZka$cJOF&Kmb;>BP;F0kZ@GRs6tRN@#B2hKDrX{!AhVR?Mp^qXhTmiB)$CydM zN=Z&e4QO+ex5Hw4zt%Z$`lvU`B!Eg`TsEF(QU#GLDZHr{tg7C&tG;Is0}q9Lisz97 zC;)^aFUpbJW8g-qJ{VB-+GA*)4x7)5g@RlvsbtomvNeXZS<>aRU4aU+(pE#vd?2g-|AHaEW6`{UNs z{HHIipW6E1&*%1DyMFP>53kR>FkE!MUFdA<_}O2c*?ec>_L&>G^FL7CrypJxUq5ka z>7VWXnP2bjeZ1QE?)y6*{XKhI>BhhOQF*?0f42S8#?@;N&G7VZ`uU$Zk31Y+)$d%m a6uWlre)rbSq4j8XSYBFLym9Q^jsF2)xV?G+ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_2_3.png b/resources/g2/track/corkscrew/barrel_roll_left_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2d820a308fca3505d66e7c014f02e4cf66d9081d GIT binary patch literal 900 zcmX9-F^Jn{6n=NUJKdcdG?+x!s#H)@l%f_vHE0k;ZFE6BR8AoZc<`WrpdLKvKmiYi zDnx@R8btA+!KE5Bcui^^@O&m5O$C93_7s5Ye&lb-Xb>3o5{8ecU3NvpffNM!PBt0 ziDfRnns@32iMA}Nb#&_?ly?DC03E|j9Jfi*qv=o(u2uDBFj(34>mWc`Msl65NU$m; z=(KDyJ)1K;!J0`s%yMo3j2H!U&bD~ZHJxI)?u=8?SZ0GA;hKtbA zfEWNZ2HL~;fRJOlpNVGCbJtc_c{#dPnU2AeBbjk~!rYKjODh~>3)Fa#1K`GO(IeE5(i7S&1+VHy^(fu> zi`!(4Ru$a=p2B1n?~Bw>oHvREVBhf{-Q zBe=8+U6fl9 z?>jR-=IPzEV-o=Mjtmb@H0#cd=xS@`p%Qfwpbf?k92{znEiEmrt*vcsZSC#t9UUE= zot+qlb#--hcXvBnE*DKx9LI_xFUvkvRU(l{B9Y2wjY6ShS@lMPrhs*W!1wrk_CUZH z3{laTJCPL9St*xSi)O4+)j1OLx_cDf5%xMYnMkShe1yvl@paiE|B0LJ|4b!sbR+C&L!^d-?UX%>W?__Yw<8q56FEc)cQ=&pNC8Z3-FvA5a zZr0M3)x3=by9f?HI72{a7?W~%vV4N~LhPWCTz#iYy&AjAwx7z$;(@*%1zsam|y~zpHO>+o*lHzcD91I7}~|y+n9-zO{e4+Y<*R3> zuRpwHJCI)A{PPbl{&j3&D&9VEWqj+m)vp7;Prm%kldqiNO4iiO#5Mcemxq4JX{8Oz@z9pc*^~s(@QO zs5zII!xTYXFu^GvG#IK z@BHLgy1IXD9{{c%-9EUJ-Rs$0+s$SBudiSH1CWE0k4_IWy0x{ny}g~wf zHZ-xIgD-}qbVi^xgHjD$I0%Im00lt9FcZgZf^aCx<@vFqObugU+s_9B6a)lYst9F9 zA$g6GOuA~by2D$2vE|9#iR#WYKQ>5?V5ADK(z4FgOwnvB?SVG%O+T{3xErm9%T0g_ zP*S060NDh}!MH(L8d0@CFr#W`X}O6LqOn4kbdG39bf?M>b#Y>;QA=O+td-YFg5D}B97R`I&Je_gs&;g}-)M|FonSDCe1AEgCrN^UFoEh}><||xggT>*rPyB8+;wA; zIP-M0zF2Hfk;ZYZT$ad+N;5joTe8yDvS-avr#l^v;xI~=0%$U3skp6?PMz*I1+T46 z`o`3=7eRl$2-EaA5&)_I7Jvib0Zai_7@!P_h?*AiTof-93QQKd0{9Zd3Lq7bSwCG;#`P@hGO;q2*^!{47heR=nt-|jyC^_L%? z-T3bF{Hup2ufF|Edi?J9U*6De!TE!m``0n!{QSfG+tkC`;|GN=o_zE78;`7iUp^XN Zfzwal{BP>Mby+|-Iy^r3;e&f;{{v-uj#dBw literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_2_6.png b/resources/g2/track/corkscrew/barrel_roll_left_2_6.png new file mode 100644 index 0000000000000000000000000000000000000000..9023a2345031e7750bdec602ac268f2fe74866e6 GIT binary patch literal 1247 zcmX9-acmQH6#i}Nc7txIQq3tvODv?yi3N{PV%1ZxSm(iR+cAQ;Js8Vae(!SY25bRzjyGDY!s`C#j^cQw!@@|Cpm-H5Iq;vxMY(-}l}>@B8C> zZ+}~>t$FVJxd4FXmRGFns=BIL3mWUHT=&)|O;rYMYu2x>jx{wkwY9Z%b#*G0s=mIy zp`igmkjBQwIdkTq27>{|O(aP$48?H{LEyb!Z!j2+#}nyvR#8gjGHwEd1<;h*;n2EV zdbh{q^IL);IvQt_DIp{K^MweBA$E(Jr%=(ZmpEfsz=ynKDrnEdd1cgBR3ep9+NJ|6 z2HXUY7$nLgDZeHc)s{0lSTw;h3uhz<(*^)&09XX!H5yT;lZ?iQ#WFHkS z$YNRv$i-;BlF|@B%K+2~^d4Z85OWx{#f^>>!OM1kUWk;WG#sKaEoaubZJ6I~iE?C8 zU}P_s3krppx0DK2%xoJn1VqB1LzyBxTF-;!Lgr)tE+OMp2vIz+fiMVi73X$5xkl;{L#BG_IuO za-IMzg$RsBWc88@3wel`k4c7{qcJg;3Ketda(N080N4Q#0FVHP0Wb}f!MlCSw5t~WlAoMN<_c$p@ zbVUMUG8T~2v7(ZO<-D1qU;;n|Kv>PfSGBtbo!1j86wIOEJqVc$>2NSE7w7TtxXEia z1qnPx;wj3MrLm&j09id0jWC461Oa8Ldi>_4>RWezVCTA42D~tN`R!`o-C})l{i^Om z2d55r7dGwdfcB~J>l+uDXNQoQZb$D2E3@wm{&jut-bKf6%shH$3n;%|Gz|WzI{W&$ zp>m*1EsIkpI(op`=||3OBzq?tFlW2wJU4OqO7Qe+JFZ3Vpe@78(TOkCt(+Q1o;>o^ z=;4k}9bYn*6J56ged1@A`yV*|@zVcP^E!-IinW~;t?zKoGig0@>CBq*rp3>Uuk7XD zSP*-6$L>S(cC}`=`t%n&|2V(t!0fi4_dST^cl1v@Jkqi4;N^e1j%N4%UcczT zjW;iz`Z`EleR+DKzx6p~!>e6`N4MT=kKYdT?;O~5``GhmW+qu;y6@0qofj(Alt9bs LR_nk^oA>+=LpC#H literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_3_1.png b/resources/g2/track/corkscrew/barrel_roll_left_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bc461e9faf91d6d73c575513d2dc0855d3de41dc GIT binary patch literal 1289 zcmXAoeQXnT7{`C??KTFU&}btymZh6zG^NHvu4dIC@3f_EG#N2DlRTA zDJek^q_niOtgK8dlgThlMG!be>1f)(vW(qsce}m8ARmd0Bodiy7E=LS14v!D!5}i5 zr53Bo;ncW2q(5j3h1r>836oSUQE6owN};3G28Li9q{D0U z@(eH7A_5Ogsn66)36}i?vc2rBKlt4XYy^#{4pC(CLc$ zgNcZcP2#|)Ls$y68Ks`BKX+3Y050nh`$0>A+f03ZrL3IQ-L zl7Lng27E9PC*^>_fC~q_79>ajDF7KUbYjp)Lf#Bx4w&$P`{30;M*uyEm}#-iqHu9q zzmE=u?1B(Trv;ezl9&KyEyp=A>603HIg`+E8ABjz3FX|e89oW)8Mz3krHEFA8gQwZ z!mK78XEXa;wot$&L;~qV1ZIK?|Qtc;fIY|uKZ_iC1$5P_LS2t ztKBu*56`r18`ytfe{=QmbEmY+erlh1ZP6=>*Bdp;X7lmx?&f#z#gv~ODjU*zlmlm! zrVn!%v|t{hqoJ(S?t(9XHTRmHK~`ed8Yuel@Ly!s)f4W;dUk`EAtoQfd-4y_uaPjHoy_z-}jlI3SX0y4!zkhIWaCmr# zVc5~p(ed#y(dl$Jj+G=)(-hOxZQJrZFASsUG|ls6SysCp$ATz;sy-S1NahaLJt zI94Z9W0u*A!e4J&LQraqopwg4wV0IHO zZqqedRdgG83X@q}7pcC+IXxwC`|-$~C8Huwwq=fXYhF=M3aA8x>MVw}-7AouGu~|Y zarg@MVj=0e*6*8+V{xps|7=G`wcTAY)Vg?M|!IUD6G+L9IYp|z197oL+>B*u?oTiCOTw;+TOPo4j zkeyCwaCi$D$^Pgc3pOy!2^AM?pt+oJCY2mGauo(Q;xt4jEb$^A{v08B-mib&CwZRt z{dDtKaPgw$ivVEp=*E#P?YgoZEBdj1i7^DE;U+G9sYM`veeS65eecXv-u zPj7E8hGBhuef|CY-asHgQ6$H)qR2~9SW)CuDwWF>N+rXxW*w*5YEdMx3<$g{9QMRw z{&<2+XP8`GD3&5+Q>oaQT3zD^EX25E-kS{hRS7RB)KrQybD>H}c4pEIM_XuGK_5g2 zh_j%ISW(8zjJsO&v?@N-AW3TN)TqE(P}bzqfkJm z>7zUW)=LV0CV~fLB9x>gl~M9sO6Rj>QL97@C+eqtWH7*p1TWEHnUm8(x)3QCvSBAJ zCu=u~wFT47f=2{z6#NOmRg5lpgC#s{va%h@)D*3$T4+ijJQD4T2Z>CGDN0;f5$%*z z%_(&~)iiSpwvOtS+e70-h@zt`7Z=5hB<17rQYK>-3btX?W@nqtCIX)fcn+hAZm#ST zD@3%$rR!m>5id8@*;c7>r@DY#gxgJfy+MCKBuI&26kbS2+RGB9Om?PNaxA-5VUf8476vGGeHbMveyeji-U z3RJ?ys$N0!M+{tc7_}MJTk-Nju5!nyp=uNN0PV+uq&v*|VB5 zu~4f<^E@&DIe<{xi*%dr0eq=MzFw#Exd%`x6)qeWV=*a_kSQ`nlR1{sIm+b8S%GMT z0x04~NgU-VWU$EQ+s98o?YepY2X<^36JhwbOYgLM*XYQL<7*D?%f`OgJNVGv)9B)g z>wkwvtyHY zJFc!>rtg~&h>JU^`RN0j&#gGIwJ`nIPyK7nQ}n9&?u{>hk9Qt=?&x3#H&NU}9)7$q zGWNpcE$a6r<9O|sd)1jovHin?|GxTE_3N&Q;d56Htj3OBXneeK$?YSXK8o|*Z~Ddg zrTyNaYs|pyGebky$awnZiR0Gvm7fm;c5nUrwRf#;Ykqy>^~n#u+!W>)woOgGO?f|= zoBL+hBihLy51LC4U!Plk;rxZ+MQ2BsY`?ry`S7dno?!o4_UHRIdhTsM>3aUO`QBaQ cpXOcfjsbp}-M{r%TO%0VFg9}hrMLF{4-38My#N3J literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_3_4.png b/resources/g2/track/corkscrew/barrel_roll_left_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..27c52409503ffd07f13f73b1a85062066e6d2654 GIT binary patch literal 994 zcmX9-U#Q!36h8NFdT+gSu3%+xWKbkRkURv;L(u5b(Osf9mz!PkP)3Gf>!e7KO!`nE zTnnqSXf`@5tVod{eTc5;MFRFAjy&8+9|G3VL69n)1{qRDrWG#UpBaPioWu8Wz7M{0 zu5E7>H`Y(A1Hi`S*}_gTPbT$TYANaIkIP2@OR)Xsxibk}SXfwGTwGdOT3%jWSy@?K zUBxggl}fFxt>yChJj2j}z{|3zX(hwZ>-BoO-R<{X-yenHERGo(cn%~nT`FZO6{1?B z8%?g=k$Qb~;2Fc9Ihoo5g(+NG7jvdUSQ^oZ@X2!j2Jj78%qgX|U7D9d=Kmt%POwVLY9Jff)=D2-HIw+UNrunejMV^N<**u@4 zC4y7QqE0C$qgkBM5$cZE8p!rgb;B~j;&d_3$&{$EC0)=PQlqPOUEK{#KWqh2Z!-5X zJY;3am4T=MX<=+PSL~A|kJkgGIWg>+<)eLx%4#fLEmBQ|>uJKkkb}B5ZW~jlKJ(i1 zz(G?#lVwRtVc0S+RAsrTX`O1d-)wr_Zs59;(P%cCA;5JY+ZfZ!2m@RmQss%zn3n9Q zI+$6bxE~#k=O|5OGHfnaB=RyvYaC~YQbSFa)%wlWL9ZYBK|J9>6){83m?~jas7{S{ z8uFl1K5)#j*NMh{96v-nfC69uSO5;d0l*Xklt2y$ z_T}`WCqHmyXG@0H|G0lCA=ftxZ=8GS#^*Qg9QRM93jZNfymy_y_SLb`*1bR9y8A`# z*B|h!=Tmo--^i3R+#xPKzx(r-@IZTf@n-g)Q&%20KloGe5ObCte&qYwYgb%H5)WeDK=u kg;$iLn@3moKKOU#SbgvGx9{gKB;H{2%vRy{=?fqJ5C0UbG5`Po literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_3_5.png b/resources/g2/track/corkscrew/barrel_roll_left_3_5.png new file mode 100644 index 0000000000000000000000000000000000000000..f41ba8469816335220963610a481b7a099fc2b40 GIT binary patch literal 885 zcmX9-F^HsQ6n?uiyUy;gOkfHj1}r9EA;Cg|g@w6u53?B7c&j2mB`{>z|MxLCUoSvSxTCH}weRg(setwQ& zSf|suxVXRvg8|Djq9~}Utm`AwG#tnA{b03tg zyJf%L5U6BOt)T}Gp=y(1O^Ab2}^MdAZyl)1Cl*74R{T z7Em6>1-P`LMyX)rLw9e6m6xG=h3@MdF_ma{$S-ve9U)hvO1CP-#Zzc~e$qTC>brx%2gMRb+X+7eJFSQ|;Lr=}qW`B}6kdS&Y|_y-OG6 zF01QTNB|fDm;fF?1h57;V1ODZBC<>rg{asm6c{Yb1&Adm6hJB<14k~4LIuSWw3(qI zgxA4yAd4_mu!)Y_Q+n=6%TP}eC(om@%u(Y-jDfYff`=<1sl}90@Ln~F>S=QHHxKb1 z?JBAd9EnLxZzPZtm9@sQXHUYpoka6Ii^?KH^`4Vu6ay*%p(cx2WA_GxV=WE`ZsEUy zx!H)Lkvf^^mSwPv!!f?VMk1Ta%vPbx;Q(nQvMID+Q7oWbZjPUOulw)oA9(TfR)r7# z`u)>J3~sI;J?ng@KmY1w_1SN^i$D7Hled2Q{Ljm8e{BB|2=+gJe*wSTU48t{_y2v_ PjKj^7+v^`5KmYoFQN(uj literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_3_6.png b/resources/g2/track/corkscrew/barrel_roll_left_3_6.png new file mode 100644 index 0000000000000000000000000000000000000000..d414d96b066cc0d877807bb34c2027c315c9b1b4 GIT binary patch literal 1114 zcmX9-eP|nX7=HVC{WQfWamysdAg3N%#ADuQ95;8ZSvlJ)z1dJB-0FcT3wXmD%O9~G z8b(^;cAY_@L<|xk!p#O&_1Lm{XoeLtIJC|TZZ>pLGpQO&gl@L=XU5=pzy5h2c%Jv2 z8yofYcJ1y0fZpLFgX4|b-w0<%OCvwAYvvPx78rZ}=ul&9YHDh3ZfDz7Yinz7 zZ^tmKqobpryGhc+Ff`Azq8N~6DH@F?lj&SeFBDcRt5&a*9-zIzvE6}yJrr_< zBc52?n@n-poRBx~0JMamiW5plmaD>8YRH=|-H zDOa>;%}8#V8mbg*b_yr_Bo(BYFwe(DF%=Hy;&CILHg&zcvQn$n5I7~klNgz`F?lCn zB!XooRtaRP;e1V9spqO&rA^dL*ld);;d8lp!XtXUGRwt;#z z%-a;frG|)9gw|qwJ{4Tnl#-FEmJ0RyI-&vm05X6IpaCocR4_mda14sbNXsCr#Ni;3 zkf1^LfyDvh0Z9%NCsBq&dI%L`$jZQ7<0)Vn@N-y5bSPmWq585JF`ti`rdF+*sKMn7 z0vYM1RR@=G2|6xWUbPm`>f!umvbd#}QK^R8fpTF!k1asELOdA>vZ@lwB$T|CFbi7M zDxi9qVp*gEvH+om7qJH2JvgJ0RHZ_tlJ_7Ni%cNEheBc`B9WdbcGP z-;D$pQgDAn8*I#M$9m9jq9)0ZG%sZX0Ug_@{x`?g~ zjPy^9j$eLr?)db;+=a=m`=3#^#G5x};NYR;?E8O_^LzU?7M^DJoe}Wu`KeFaei`_v z7`pa$^ZdfEFUR|ue_}6Ae6|0x53a^v$o-stH}(?u@9M)7s8jp!_V|?p|3sVE)f2~G zpZu}synWBX*Qiy;^p0cyQsIZoGrcR@!SlN=+I=UXel~*-;4d)i09GiohO%nC->}LN`Kz>?J4(Ft7mDb@(8WW~aKa65v&;i-?goVvcFxPFrof?{mT-h( z3wEO+hZJZ`!)mBfOaq4_Qnf-2mpP!o1&35trO^T>VrZa=BO>`(Lh`-$z4y=i{`kJv z-@eQ?VcfKF0DuW?i(5L%+*qy`YBlBF+fNMxpaJbmI$O(YMMXtrWu-==sj8}~uCA`B zsX-8=wzjseu1;? z#n&O>rq|nyCdOjraNJGN0k(WhkbO#EJ(iGYi^sTB z%C9I1RaIbF%isj4P)~?@I%Z^(Wmx~hw9<};0 zYnVV2B$}qIBeX@en;>h1UNelKFiAj#Du*ANQ-Al-5A=2{V?guGU)GlAJ#8(EI$znf zYaexD`?KR)uEHzRcARWpc)n}msZr_DlFNmcIvXnvI0_pj(*S=K{qg?(1$&21-~Zv3 zVC0%_o^}jAotb1p?@n%*JG8+!^U#sX)mPWQ*XM8T_8jWz3GUaNQ3tBK8|JJ%d#CHz z;+ZqQi>{mT{?f0ee(+zWBQ=X0S}xo>ckSVYz}R?Tw19 zt?v%rYiwHD87bg(`)-_leWU%#(QTmp#@iz^_BZHP?DVa>GjY}E>}=`cUt9W??_OQp zKD+*(p#{?1mX*sJLeys`x3yk7y!zgU$b~g4_RRg_GI&xeZyFr9`{&+Mz8yn71Cf-x zWqs?^b>}t=9?{8Lq`ybU^$-Wv&H`Sv2GRP~amZ^Mf7 zU(TP^z3sPeeEsZ|JeyAFaQ7m literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_4_2.png b/resources/g2/track/corkscrew/barrel_roll_left_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..50d3a74fe2df24514cf2103d3d88ab71f860da9e GIT binary patch literal 896 zcmX9-F^J@36n?w2yP4hLj4(yS6cMIK5i~-O6e*%+m)sKB9G8P2DIx?MaEcTW2Mik7 zDF#WAVv0eg7$wCB0jJm^Mc`5dnPP;1Q;d*eicwP>OE^-DvchkUgYUhMuXyh(zW2U= zaw9*wc>4kX9$i1aeA@6EO`W$}P5)qWZveF5$tTaQ8hLbdbbNf=YPC*IPEJox&(6*; z3~RUB=jZ1{uh-)^R+2T@8pn zP%h8`#?J|PNgJtX=eoah!Yatnoyv4Ao*c@IuL}!HN*pa8S=*_zk49BGJ>(JEXLy&V z8J*+%qBPVr-?C=I;nMfh`8S+vX34)`jW3yT2F8#@Bu`IH@-icr;n4{sINd*ID=8Dl+OJ@C5G~nw zp>0KXfu}H;#SM`fXq?+u0&fsbyd;|BSyUDos&~AipcqgA2sK%Z8@tyaNA7ID=V#N` zaMo+dFtowIa$TEaM?5QcRMd%{lJ$`Z#4Mu z?>|0o#CzA5A3baTVEyykcNfopdYOKE^;Z~Sx9rbfKmYNIfB(D3-hAg%`12cd`#!=R a^PvCw*2(?htKXYRxW2l%{N>}%ZvO|x{C%MS literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_4_3.png b/resources/g2/track/corkscrew/barrel_roll_left_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2733e28088b2b7de8dcb1e6bb39a49240d863851 GIT binary patch literal 1162 zcmX9-e{2(V6o32GTN$L9LaH`eLxF;a6nDbSoblXlO_^m};TUz)rN|)#i{6qmHlaXe z7t>%}PAIH@G+IJ21x{#me>7O|3{|Q&a+*a;I7nkktN~&%jZR$jYYEBcz0Z69yw4w> z_c`R<;9fBAv3UTnU})XorWUVg)za>cR{w3^Y89XZyz4i+T5DTdTYGzZM@L6zXJ=Pe zm%(7bFs!?~+h{ae>~=drI2nfKI1kVJMNyC>DVa>?a`|F$M%Nq7CgB8{0@l;x_nSi@ zTR7s3#i?Y9&E^6HRV-`qYAwUyn2+iaJeH`>Ci9N8NK8wNn)H=(f?kT%^~`Le=(a)t zhcFE?hh+s!jhiZ2bF*wkbth^D(434=(GI`@1Tai6nW9#!>~Lf#YMNzB!C)mCy`4@Y zRkadkJ8f~YHY(t73%D;z@G>Q)7)kLY3S6cf$m>BHX?42o6o-3w(l0PVjE$uO>AaBF zqD4KS)w9)E)kK4t14|HW5pc*DnYOrd4!=qZnlD}zGYz?jrdiy~lh&{skNc=B&lE&X zllV$ftSM4MP0nfxsufLU(t-O3GDtIFj*IhrDjd$m<7zss<@427 zQ?PPnJXmF7HGifaE;QtsX0AS0nMFOg$wXQ#ZkwIMojgT}9yS(e9gF1RiBdMF7qw=U zhJXhXIa4%XlS6naLMt(@kP4QRXhlucE5&B>HlhK103v`4pa7HrY8apvSO!Hzq-2m@ zVI3e4kf0&&2Au`O0TL`IPM{2n@*z}?Aw2{4jVHmwfRDvOyd@gO6S6y-;R^*x)0BE$ zLoF?95Qs<*EnC=(Es%EzIwd#!N;6!TO_t~KRa9v>%s|>Ox6|aOZ6S_`1U+&zlu1Mj zNL+#R& z^IhlBPiMXyTOt*fy*l3hto7`L0|yM_S6s%~73(%$b}lJ=?cVEKX4wDtBh@{F>Ga*p zPlSy7S5IN5J~_9@HIEn@eWlmvefiQCZ;ssfVB^5^4|Sb9bjv{PIezErK>r)8Yx>4( z@1HpKvv>2_`4<peSh;rb6%g9)zMb0QA{-yX! z1ByhQ&hB`)7kL*R#!4ICzO-dgXl3Ky-NSodxHdjsUh;JJZq6aNE+I`_!{ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_4_4.png b/resources/g2/track/corkscrew/barrel_roll_left_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..81ffdc09b3b9b8598a5690d1959c59248484ea06 GIT binary patch literal 944 zcmXAoL5SmY6vp37XC|E~OTeN3Y>PjaIAG?e>R5KMco7vPe^w0f7fuDpae*dYx=E znYPV$d-7nYjRG@@?di-FX-wq{hE%dt($T5D$sV`FpsPkhBROf$6L+}?D+FjXGz4%I zY+zu4jZX%}G$PQPL8*pL9fZO%fDE8vn1SOKK{yoU^8B$ZpVVp-%evq1qaYyIVp%9L zGRbRH#h_J-)g9jKi7ij+j1)K0{G>*51XC&V3N7he)ew!g-0o|A-|%BAOgiy=FkJ?? z07V5#H6WWnIT+V3RfbeG5R6#0r>47bLUb(CMV%uW71~z$fi8|rC2r}Ht~v8si=exV zJv0mPB1h3G%hd$2p(wVl_Zp3%Z3q2+?EBO4c(GU@APk_o7(2kl5urqMZ7Q~BRd?PP zEu3*WoS#mXs6gX5S1MJ=vO+UD&zq9m*0N>Iq1`zd43jWUrvhjaW-7R)kxrfNH3hG& zjC!>b&zc0i`6Nu!`$zy#0Zae~zymk|m|=i2$s%f+$a7ILktr}(=m_9fAdvwnfQ%Bd zS>(#ducN4q5*Ho>&w(U@Dr0rMWHsoHQyIAWXw-^hZ$6Jv#v*FKHVcANl3h~sDI?*X zMb%3iqh&Wb^`~gEpo+keScSo>0$EqsW=(Rey4$fvUMCK{c@m;@%1ILP0VRM?mPI?m zJrvPu_GUA#*L^56io|MFsn_*p(_onv$8-hO6WKsw#xgxu%Sa=UMWG&xd;!H$cKqBk zh2J0iz}1WU3cUF14{v7X^}U^!4xhU5^^J3neerC5`wsf$Zj`@$?~k{yUwh*}e676w z`0?Sbn;*QN`{p{_{_X1dcfSAf{J|%?7e4&wxpS``eg5OU&+0c{`}d=#uf28or#t}{(SlFrL$k5E#}H2``=#r_=VMs1be&tJD+Y}dG~+Y5SK#$ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_4_5.png b/resources/g2/track/corkscrew/barrel_roll_left_4_5.png new file mode 100644 index 0000000000000000000000000000000000000000..bb5ca9c55c9450dfbde3735a5c16d1ac8a7a9965 GIT binary patch literal 923 zcmX9-L5SmI6n-}5sDkwz(yz-AxaK81c{K<%#t1APR7k(4>@EZV1yoWh)x$G z2JE3|!5~F@C~T1kJp}Aw&;z2W=*!e|wl?R(5kx4KZXp7)$*x1J6 z9zGw}*C~lsELt1r%10<^0H^>4hS@mok)%)4fgqf#>V;*^J@0ZfLUBxT^@d2WDkT`S zY%@)dGkw7sN}W*YPqiR5qTHf*l9d~R#waGQ+mhW?yCY*1*-_>tc|Ti?7n>Ltp{@a8 z0p$YiWBiDaC$t`mcGm1IoS^U%bgnXWlPB9U(`yQ2Q<^$j)-mS;XBl>ic(BPrv`p|i zPcu!9w?wI}X+6^%w%e0lFCLAuC|b;BMNuFiZJ-AjH^!wYsilmykh)7fShc5xKU+^$ zSMv?3F*wc>giJLwhBXDjQPi$cin)_s|6)AJlWe^Z!B8+q!##uYTg=cE!>%?RS{I== zkB6&yvR+>z5ugd+0QdkQzy-h(15`qlkn5l@K>1vy!RDYZLL@`30@4841nO}pP*K!E zX&2=ITnEpCB0*EdS|;JOnZ7TN19LjVP$Z&EDUY9jt@iKr4}9?8 zSc5x%{qbH&j*brBJbmSh?|w}W;H7Hi&=J|WI-;&oqzjbQ8`pZwB-Tdc`AAi7}fd2Gl^0}MumzyqC?;an1 J`_{ux{s)3%hOGbq literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_left_4_6.png b/resources/g2/track/corkscrew/barrel_roll_left_4_6.png new file mode 100644 index 0000000000000000000000000000000000000000..1f13667eb9f2ac4996f2d01bc2ebf731f2022b60 GIT binary patch literal 1095 zcmX9-acCQL82zdel5PiK=CPj`q19C&JWe}{H;b#-@ldpw?=o}S*` z-oCy*1VQ@y`v(RF0^x9&AaI7E1%VUAs4PpWs^)Tqa=BtzRo88`+XN113h>-uH0nRi?kigv8x#zSNfXTy|$aUvO&7%9!C3$a2)syK?} zW}RlKzG?bs;1@t34niq_Y6w{fuw^uA(vlO&)a7DJv*03+`9(6AWU)+yDv69C3yvz* za&kjgTV`(4(P6{#`AHOu5M-QYl7f&C#e6bZ&ScC&!Kqa0)oQENf*>dXG=~r+A7cas z8;jSObR$}9CXJR>ZI_!{wM{sP`Fvy`z=pyChKm#>b9_41d6p_?vdg8iYdP&Y4PqQ3 z3qB=B74bobGFNR_jRB|b;71i5GV>4%ORqC+TLj8aYAuR5T(xHSvq~e^WB#K$Z(6f%E zH(d+1>me3qf>`ZS-ZWHOYo;r zPxAa%x1Z*|^Uv(Wf5$(+lKr}O;nUfrTVulqpE>S5Z;uFP#`b7$9$mTo_dTDSOA6|b z#t1d+zy8_>N4yuFPqfdj=2tiFy7%h9zvB;ne02!dkL--TssQ{*i^7AAY$pH?h`zD2m*e7PIQF&$7AsZuXCZ z$1ZJMNS}C&K6d!@sJCw=^3usCzqx;Y@5rck*UajR4`{RXVefP9#L7E8%4HZhM_fB3 z?d~74*M4~Qx-d46{kKZ&zT5cc%*pYETV2;~yuI?Uadf3)0GQf8J^97sN8b7$%X!|Y literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_1_1.png b/resources/g2/track/corkscrew/barrel_roll_right_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..607ac9ce4abe73e7221ed07b6e41308823e2bfde GIT binary patch literal 1325 zcmX9-e{2(F82+HJ?gvn^Di_vC)dEFMXz+*yE1c{$>bSYvxGkL&yu}-o=C_(o#HEE-B@mePjXv3213*YbcG=rcIkZeY!*|RKjFR+ia75 zKa9l`m|TS;8cL~S)Orpz*f3Vm@jk*HB0W($kYpmFNvTz6^eP>VlC0Lq5uAf^_!)nM zi==FE(UZyrGsTz;2XY!9CZMzewIJ2{5q(%~jNx3$;LPxWyby;Y6e?%63X2|f8gxOH zi1KvG&ZfP5He}Doyv0-qX5%usR*f1ktqCVAH0@+rpT!b(I%9r+DiX^O2Lf!ta!*lM}4M5$d-=za_M-XFbQ!03;^%|2mpitC^;c31+WB) zfL0!c0#Hm-YQSN@gM)}3h!lV{fE)sy7z|J_Vuncv6a(Oq@LE6;z(7gOEMl{u9zh=r zu+gYJl?vr@DOloCm;h$2!Ucp1D4B?w6Lmt~7%EtzMQ?H{l7Z>GS`M^Isa_*9;z~1( zSxuy1GY34jXvmX_hjL;Z7BX6rgb@Hm0AWcBM~Ut+6n3jGo7MWfkHIICgwaTw&8*eR zVH&$u|s|I@P?et|azCFMi)y|d~rfX_R&vxTikgKnR1@1bj@3v)srv*hWnPPZ)l z*~I2!$hYSmKZ50zSML?k4L!#n@*|oJhmZAFPriwqs5@O(gPdD(be{=S&%bGLH?C`P z^_{W0=Df5pv17BV!!3+)d)!06v7_$W?+&hLzuMK&yP)TTyOqa63lH3?tDdOeHdq#I zbHC;3S?fLC`7*mWf7s;>^17`x*0!r>SJm8pqj7oSz~u$)+kP6W*>%n{GWSMw=}OPU z6T3EbMdxCO{e@rsb)Mpv^8GGyKK8>G*FRZSHxii8t-0x_rCldp%x`aG_FQBJ!^*w_wY`f6hMm_~71CTVA`t43ALHC|ZZH z;X&NDxZPhn&(y!{B)R`y=mJ`K`F@#`uMv?B@?cYoSy;kq<=NquMSdgI0Jq1D|hO{3)KP>jbb zvG=LxKRTnRlKi>j>kGb(=M(WOi-NbNBKsa(G!M*KF(DaiJyN+ze(lQI-iHNip!t6C j`-g1+FIyBg_z&4!O^dd_)7$i4NpsNH&|H72u5;i2Z~aQ( literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_1_2.png b/resources/g2/track/corkscrew/barrel_roll_right_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1683853fe64d8ef8068a34d79baebcf95c059ff3 GIT binary patch literal 903 zcmX9-F^Jn{82#>iXZg+vrZvU18kFKeP*F69qCtb2>VkTxoI(`v;6VjJJvbn!N*tm= z5K&AJMT04#Xwaa7p(=IZAcA@jMS}+oD%{|L1`nncGzB#nYRCdi{Q%VQ4|%6-Cmtp<(E@ZF^p@Sj1_1RTR~3$I!rYAWQAxusa?T6O*1g zoaf8)g}O|PEO$2BP@u2@*Vd(;H6UD#3=HPd77}leE%ahFEsJnpr6LY01rr`z1)J+w z;&j&Y?k>YoNu!;Lu3d!EK7b6MVwm3PSUB#IWXN%svb-9N)|T}$2vCyXOt;VXXqn(t zQq-w|#b_>P_<|itv!xPdYFvy67N^BNr%;l{4s}7F%F{p%Vm;2Sw3y}Pe6vqFJaiT4 zjeszLbTKyQi3@U=@OnOQHbz*vDY}%YuEydMk#YvyToaatlH1zaGq#akCEh-d&^GOK zS&|ws?1&d8isERRKbb5XCkcW)jyG3VRaGItbs#;AnRkRGu4L3`BTTo$u$(L__iDE& zuh)CjraB$A*At1pLeUz>8In9z>u2V|nXTrFBF%Rj9#jc4l#Znm?wImTKAI{^f3%9M zb>f%nbhmqncz^+b0pJ2e04snk2B?NCAk#omh>EpLg3iED5H3c zvMDM;xG|muNq~WjjkTUNp=Pc)54Gje&hw}&b5v{LBVf!n@Al-7P-9XrIJX)`yUB9z zW!Lcrtt+w%EP;u1XUG#{g)v8xYmLL1wTxzY8kI$gb{kfbPzhQB4w_n|K;F|{* z3VizapI_DFlk>B?4_iNc``z7BxN|H0A636S_U}B2kIh>@KL6vL=CkHcPhb4{;p^{z l|LDczcOUKj;Pu!49Txw--~9PicGD<0zjtx=%V%FcdjpKPfWiO( literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_1_3.png b/resources/g2/track/corkscrew/barrel_roll_right_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..cd16e1c2bdbd93d04c942e15cbbd5ea87efd9fec GIT binary patch literal 1253 zcmXAoe{2(F7{}kOW!G)Y#&x7X4TV%GShdqbk9ooY1@6bdYA$Y7Af&EODtK{MQdo50)>oFbqg8rT0-)De*N=&|M)!5 z#~tm?hPs(`0Dy+pmCHLTb$%rt*J&!*GP^hv01fD9>snD6tE#H1tE)8{jaI9jGG$6l zO$~w|I-Rbzw$^B|SWwjNa1a#bVp%uObAlj5BC%vLmCcSQN~v5%?SQ}m>8f|T4PLL= z=eGw#cqB^3lT13p=j2eKC^>8hjn{K7V}Le`tTo1?1A-$Hp>s)2849Y3G*QYrO@Ofh z9|1%PiE~IMq|e6<<(vtsc35WMqzGZw0ssjBgCLwQ22S}TN#Y{e@EkxsS){*8Z zSzz-KzL*e7naG5kfW@rdfLU!cig^f!kD@{>8}<2;p-?6klT)d}$VjPFg22Q9YXm{# zdPmws2rDdt6}yKr3I1rYh(#k0#piMkx0~{MS-+n{?E+?x z5NN`IW?c3W(x%cD$e3Zk3Zp1Y5m0tjjvsrv{?>yZc&D?S0!#iH-B9Vnt;?5oE&O!X zp4ay6oIQ2LukhkGS}pz62hAr(mJatEyS=@3?XugA)5g{e{%{Y!!vFYkE8NlA*YtP0 zZcC1i3s>kxTiQ4EFSDFDdViy2nto~*I{%QeL;=HU_rh0>)8E&A z)*s&3Mm7nW15b{g>D+((>PzZJ+cwRavB%e6?77-~Z0wV)bvG7V`_HBB({tzDS$D0u ztE27QtEtEC+>CrVd~omEha0MbSo7D7-`V;o(9eh zKD+p-aTU~Ey6~@_nJ%%+reczRg?tyYuQ+_io=u56RWK=MOI!H+I)-YdEtW zyVtU@uIb%_vAZo#>}L1xixoHCZ;FEp>nX-y^e_`&DE3z)!`U StBe&^pmjz2^8RIS?D!u#KPrs? literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_1_4.png b/resources/g2/track/corkscrew/barrel_roll_right_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..566af467db343a4e5dd8f1b4c0b1f83352502561 GIT binary patch literal 953 zcmXAoL5SmY6vp37XC|E~Gd)x(nnMnC$ZF861PPc!Rx?Yd8<{Mdks?8&1})e_4iTzE z3~LW%C=!-BR;W@i3q1t4=qM3-h!U3~1%p=ULSV~Mu?qu6DNNBh{LQlPz4!Po?|1m# zJGy#M+}?V83jnrD`+L`txtr9Z=~U9so}YXMkb>>S`*LT3cINUtizY z*uXF>olb9VZsrSx0>jXPz{|3zX^LU!^?JSC?)Lj$5R9WJUMv_Icn%~nqbRv*m8h9? zqsg^9Qm?NLd}9n(1%t>AF+vQPTkA{tTO~cT#pz;!lPOVS63hfAZms4-gN0_ zdC19-uK-~JX=7|RU+j~L&+B2iIW?Tv4$z52uJKkki)t*X&W=Q9{cTO z=%QJW&9Nj^X4ncZ)MUA-X`NcF-)#EbZs>W_@i>lS1h@`l8)JG|VSvjcsxlQCGsT(L z2C+R}^ylZ3CCX6QESt|4iGobg8pj!;)KHUUX201Q_WDr}E~Y%FB4)^0OC{_o)iHUu zArCs0p=(Y2&U_Lq7N>{@C<7P(Hh>E-1ejrf5=jCw4dgl~nn)z*477OgiV#VFWI%cz zH5uec$g84J14Rxz2%ZH|fU<;DwY*iMT6VGLXoEpL4Bh!WLXCZH z*|Fj-YJ+8abnZ>jBqnpf5?GPWDm+n@8M7kVR@G@)1Gg0h?mP<6V# z!95gSH#@T#+i5?PF&YVqB3G-LY3dAJXX!T2xB}yg^jMfU* zbmpH2Kk&}A0~s#;dFQRfR7!g<9A3Eb`!7Fie}6HZx^y;u=GEOFKfQT;88^u?WbkM}?R_TPK=f1=KgcE0|vbT4!Ka_Ou4w~rr7kWjjOuy^al*FO9oPWG9t literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_1_5.png b/resources/g2/track/corkscrew/barrel_roll_right_1_5.png new file mode 100644 index 0000000000000000000000000000000000000000..69859643b68cae3c2034bc46e20195933df445e2 GIT binary patch literal 940 zcmXAoL5SmY6vp37XC^aKhaP$;Y``ErWS1xrBjgY?YG&yUk;yVyjBJIh1PpA!AQ5_q z7%?nm4U*BK5sOreP&Hr=bI74!Tmp_zFozzxYjk_4yA}3OBuK$I{LQfN@!tC`?|1m# zyM6VrvA26+7XbDSuIwKb{ps_0yHwN%KfL!fKnbqCdhK#y*Vfk7*Vjv>(#FQd=H}+s z))t0g+uPeaJ3F;{z0NSSAn>v*YFg7Y4aaeOzdsyCNixZ@Wu7xM@Ek~Dx!J6?T14BT zJ1*zwJxt z2u>v%2Bp}H=5c0Ea6+*=l7q1tWjev)bfeD6l&G;yLohm0r?2)SBTDTg>!yprY!z2{ zsLD{&fv|w|Ft%T749RB98>!;X%wXvy=tQEb8jH6Zl&f$9O&FPS>S$BnoQKXb_E%|$ z=1HZ>l9a-*IxnxZh8sXf~NFmrDe=0i=&HgNiW1d)fz-yrf7}hOi}8n#WHK?c25VxEJ^bj52}cna>Z5&uSNANKJ3V& zo_-qI)3~>oCVBn{@c;^d3E%;Q0H*+R3{W9SK$eNZ0A*8&1cQMt4^aa$36KoPs3Dg@ zfrO$K8h20@z7!>g+6^r9%pDF)y z{sZqG9m??1!@F-4=K8_@%hxV`^6~MVy$_y!qI8089{+Oi#pZ3|QvA_t|Gp4}53c{^ z9lrgQ`3`aaxljMT^ZN5|{4xLOzk65U*Sq?|&))p~__uGr`TWxKyWLw)UC{3z-TMB| f_(_Og{P|0I@czYA+hvG?0tc55_kVol#)tm{Q@@k( literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_1_6.png b/resources/g2/track/corkscrew/barrel_roll_right_1_6.png new file mode 100644 index 0000000000000000000000000000000000000000..081da33671311c0b729afc45ffc60e4a08661af0 GIT binary patch literal 1128 zcmX9-Z;aD)7=DlAuJY ztsDu@>ASxV0Omwq99rG3kGJEVp3Zju_u|N2fKFIByk>cO?C9v2HEUL9XXotMv%9*w zy1TnE4D0FX>Fw?H`2Bu@2+}mgaf~3uWLZk5)A@X%R5DC++_qbeLj-{e0n7BqV(xg{ zmq-RP*-&0(izU8Xk*ij=-q2_qi-!6o#*>Qr6d_QMi6d#cl8;tPl0BAb+S+u>410mc zAwhw{VMPh6WL>qQ+o^g{Gl(1>%_s<&egGDL$1us|N_o9XAfSapM_6`D6ln~YPAq}B?#m(qUfT_ zUapFZbvo0CY0X5rrHnhJ=1grG_2VuV>G6bpehv=`p^(h58NR(NS<2?diY42$oH_+O zgUOsL#ru>vt|lox!yT%4U zA|OYB5eAzD!~v2#C`%xXMMfM|GsxE9w(%q|G(=e}E_hN2Jg0<1~|feZ>+O#ArBNBgI4|G)>UM>tq^`RrTmeqLng`89)I?A#sSot{7U)9=u) zcdtM8S7gAM`};)qPUV{`6V#M?;OgNGH@5%u-lnyy&b&K3j=p-I*f{Fk>Yvu#`%XOhNPf}i#Pyfz^GGpra@V1S1{!>(K6Uo^;?vDDPrUNnmT#{%&aFoOynJKb zj!4(o@e@VliV0*Pu^=3<*Y|90aGtyt6Fn#PSAXR%n?+S=ON+dDcs#*ZJ5 zAV_CtXIEF3&Eas6q?2VCLEt1wR1`TF3`V2zR4Sdz6-~2Nuai!|(17Q9MA7Q=+5G`$ zC`?CVd?Mw^WR-#uE?0DxK-_eX%-K}8U6b&*LXHL5Y}8#y$!0!OHT6a<=fZ%80DcB& z0+NuCY#1#itn~s0t4>(=z@`Ra&H(@qfCoWj6jd=y!*QLa$9O*P^_EoidOQxZS&Xzg z7@L!~(;nO<6K<81G+K$V!6X;S2ztSjHobNVbGjU~KyVTz%B&pXLvc?$EvF4NXGV-_ zqTI-$46q8o<^}cuz%_)5+gvGJ%rdg!4wn_Zrsd!mPgo@i^Sg+!n@&h2k4HtJNUDWPnEzGJ&!gOehfE zG8?Lhdext)X~lY~+AK9-4}qeT&E~Q@1i~rNw8HTrPit8q6^`T+DKlr(%M9>vh$5h> z$FBK^Sb#}}giOqvPpYMCtXj&|>(?OzfExe>01bd70C@l^2!Ji{EDR_xsYA2G<3J`s zgaK(6FnIt40A(8tlThbj+6N0EXzJjm@f6@#;N}sZWK;b_L~|u{DU%5rMzUHpV2ca$ z0y5CUXf|HAd(yaU(ppVS*8Q1Aw9rhKVX1~&0cA&APE=&vl{{VG zq_Tfr^{d&ZJBUeFo}I~UnDSGecI>Pk_HLZUN-rFHZsPHC2Z{&RAG9Kw)Zaf4zpQ)n zl_5+_zrW?e@;3%njzw&)cQ2ipTwHhU)oxQ9?L9MjQt!swcO06#=k9s=qwM09-?Ez) zM5dCLAABS`>ySlSyF{AmA34A2+{=IZD#*;m)Y@4O^ezprDzCWMHn!)8R69Ij?}-Kf zcn@rQd)er)(RlRfk53Jsy1Y7m+#$`MbL3v+x0Cyhp54+u<`2xCTw0+?s>5F5FcGKE3pP|#focz{( x3$LC>KWa9cSC>6m`qhy4H$Fc)>5}X5zYrOr=lo|Tx>`zuf&Rh1(WUFR{||^_1Zw~Q literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_2_2.png b/resources/g2/track/corkscrew/barrel_roll_right_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7366c8899f044fb3cd02ddfc53bd8a3726a4dbb3 GIT binary patch literal 899 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 Ma&z_P;}<{u4;#yN#{d8T literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_2_6.png b/resources/g2/track/corkscrew/barrel_roll_right_2_6.png new file mode 100644 index 0000000000000000000000000000000000000000..5db309e34bf6687ce92d4ebd1c8a5e6db94fba1e GIT binary patch literal 1072 zcmX9-acCQL6n<^mUb@mH4d++i6^FBVl z_ZALM28OrXwFLl%Ck~Du>CVw^d7O@JAKQNNBLD{+K6G?{m-h7Z^!D~T9FD%ezW)CH zfq?-G!<)cWaVYmx-)Ouf(}hTB;TlyOLVHj7Fn z5AE`?Zc6a_LqtF!C5@JKznbCV2A?X5xoXI?!(PTi1$=&ytha-YMZMxI}P=!5afY$C#`;P#}UOROpL?f7MMvE%-()gxpk#u^E+m;mwwv1cE9tLStNGSK)?r|NuaG>Oz8TsS;_aLmJU71%;3@^-|+gSSGpzquIoqKL9e{$n7{@&M5 z%}(JGHTv`O>fMt+KC}GA+-cw9Humz=%4*Nt?z6_i$gzJ`i8EuLUHa?o*B-sOWAwlI fo3TrkkMRq?-uL-Ce~vY}PGMsI(l^l~nPJ_N}mXdf!%A%hA* zGObv*GJ@0@w2VFk=|kX(+$3nhF!FE@W#pk?C&6`4u*kroc_?xZe=`Q(-|xrw<@b5` z{(jdF_QmZ}&z%B*?Y*~lFJ<%jtWFnlS^s15#T+092k%_InAx?pwe|J&TrQW-=QlPs zHa9mh3@a20TU%R|YPHHRv>@<`BI&wnnntVDa^3!L7(~$|NtS8K(7EB(U2;3jc|0bZ!$+MA#`iwp^+T77m2r8Mj{Rx1x+3t z1sfPx*eOj1<#ddr1&vY-oj3?ZRR9@4!!V;%vT@uYNsr@>Wcj#WpW61LejkM)&XlWs zg_a3UBSnL%*^KURW>0AOQg@_yV=YMP1dG#Rl~X85XH`Qm+H$+E^#db_?I`KSi@|Ia zmUt*DP^kl90qJ0DzakDvHRO%B)|r{!(uvTKOqF#OZ;Di>#tn2~WGZn>pStGUZ!JT2 z75iu&mC7th)fl$U3r$7o=z6c&9CkWkzaIy|Y%*Ccmk4kJNEc%UC1HdsW2!zA+H=)g zG)GHkk`5Oq(-kUGr4n1Ih(uMPXr1FsNp5S|GHclB9uI~|6sI#DGzl}6lC2R=gX&ql z-&RJw`mt|M!`@;VrRgKY1JnRa00+PaI0l$wfHKJfvP|TAD4EJ67z}iI2t-I^KnftE zf;tTHWE3>exQ!AI9tY2YBtT8Z8hXWUQe8(Jc=~A6ierDVh*8GE>%dq=-l@nQp#`Lo zaL!Wo)8=U9j!%Lanl8yQummR3C6y-{3S-qJ$8LCCd*pZH$X_H8N@uJjp#V?<2xVEc zGu#v5Evq-5vpx5T%<))IRi)9;Ez4l&7E8N4;|okE(G!_k)T&4$kWHcbNQKDKYhLP)U}rj`TtPz)%m;b{cnEj-h6Me``5iU zU-|5I{@M#4pWgiN=9wEmd~$1W@al!%&wP3C;A62N9fdBvi literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_3_2.png b/resources/g2/track/corkscrew/barrel_roll_right_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e120b69e62f88c8502d8e470cb56cbfaa98db9f1 GIT binary patch literal 1056 zcmX9-acCQL6n<^mUfZ+_BTA%EZW83gv&3@D`{U4?yLPdj>&@OEV$f3$8b<~P-b$3H zfkugK{y1I!2ogrXLo>P2z$!g4V8CNWx#1}RGdUzeU_m2fTb%tP)1Nm6-+PbmpZD?j zzPEj9EjB;9Fbe?ltIsa4d-FlBg3~^)fBC@$6~G6lonrT@r*BuOpR1{bS1m2%W1XC$I zor&fPOsOnXYf``N3f3qD+STCD4x?Ta4J9uqn#p84o9$OBsL=>h z!3Z0Q3OFMXF@=n0DOqFGGM6*>VqMg2$#j!A9gfB#j7ah_olrO>FXSsy#Z*iuYq>?I zSM3}$0xSeY2qgi}0HI-YB^0X>i3Y1U@j^${2bzWU1TrYo;dG2F#F?th)m72S$?cNb zHFASS>A*2i*9rt_f{asilI7B(Sdis%I$bLi8kLG;nw?f_Fc=^RD?pSmsv6+xVbLa& z9WLKZ=)H7(ptXjz-l%nPyA|NG%3KY@>WTudvN3ITcji-U*lhfdq@EL@JZywQNc+X6r`Lv5cN;p<##S zd1L}|0U^(eyeD@L;asNN?b7AaJ*c+LB@$vPC1)}U70uDn5=$8z)!?Hof$YU2NWxK; zKxGP-X~b#Ug>=r_R~=a25|g`K~54u8M9 zfAPlErSTu;4?lHCeCK-jM1EUoUSMtqe{Jn+AHD|{h5pt3Rq6%rGFV+%Ti!kX>em0{ C;mv;l literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_3_3.png b/resources/g2/track/corkscrew/barrel_roll_right_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..296ae3a9093244d03606565161bb50805b1efc29 GIT binary patch literal 902 zcmX9-F^HsQ6n?w2yYAj(F))S6T38Ih5D69@ctlu}xXWZQtjBpU#S|V08MrA7F?SXc zJWdh`2IQE+VggfGOd(_fTUb~~u$W@tgiJ93izxAkai0C0Ns)y1Qxo;C5|ajVH6!0V>bf`?x}zHI2;-roNHeyi0wI5;>wJUlu& z!Z7Uk`1s`Hgy?p=9LGwMsH(EA4@}c=T{jG;^LdiztFqkHHOGP|fFidCgU)C~SvKqW zLO4-ob1luxW#MnOk;Gtqp>4>7)29NRo|@c^D`jDSIXB9MSC!H2F7J_`F<^-hsMyTF zG9O>hI`xu76^m*O-318cT>u3@!!QHK9g+-aIue8%MOh4oYsYyrouVuwxlUIkScMWa zx@RzbhtmVWoJejgk5e^TYDqbyc#`dP1(lI?eqcz3r+8Csnixsp7iT(VNqQOf-tVzcHg-kfR%g>F7LZ^%%b|%ycO=)xy=+p}CFST^8OJG1}&M zho_l7#}7rxQdM8qCzdt${cJidl4P@5?RGl^qycn@aWh;>Np;B#Hk}Q z?$)=c&EPms5Iw4^GOR8LrmT2cv&^3R-r560r~(YKmZT}EC99`pazPBY!k&1D%T1P1_xsik{*-_AQg~7AfH2#f|3zh zdZ>)xt?@j_67&^pq!W(CjDy}R($mx}inyu@)M$}I;Ow>-5K2U832l@@up7j+mEMNS zyJUmbJGuirh4ol`AW|chvxjovjH0oV#^WN7t1?IRhL>fO04f2Y#tW~Jdk50BC)+JQ z3E#n7E~UXh9gTF`HaOPh*-+$SiOXbmr7%^$i!=&3G@5WI5m6yG$IpM-{`c(zjt$zqkD6`AcFu^Wy_Q&S^wcXx8!=l?j4q60yFq3n z+-8(mvT?ZJLJ1{cwuNzY0n?g7Hc~jDu3)g))AuhpzXWK5gKrG=H_Mimme$tRwzjr4Yu2>4 zx368h7Q?WPj*fNf*4Z2m2SqtqmJtL_6uq)6g~Q=^JekSlbbY}zYxO$i1jYqC*Xi|I z0|9$5bm9jhgPp z!AC-n0ad`#5>|*>N@;7oh@+|#)qUuZijeLA-~oIXCRr>Bj;jQba=EfRKj-(C6lFP? zM1=xQSsjec$=h8%!Yz>=g%VYloM6Km7t0H&qAzFq?KJLmJ6rlHrM#;#WYptIi)>yN zjIdaW%M~qLE5sXyhAO(nN)x1qqWugT6ojZKCW66CG+Ia|ja;t0uu!Yj5a1FJag0h^ z*gP&2Nq?D*RJ^HbFke#_>Y3`JQUi6877J~&x$O>tbc!yQ%<&Olvsow;jm@Pqrf$^B z4EQ)q7A%U-t_H|Nh|wZKKH;C!lu{v4E$Q|8GGYKc05X6IpaIMQR4_nI@GJ_+NJ}BJ z#1kM<5MvGiwTLw7o&pbt5|s*_h(Co~EV5p&5D18&kVHAdv@_078cP*8 z=K@bwJr3lvBZWW-3gsANaLwbVdpiGm@&oT59u#2j{oALS`3nPm`-Wb;{LZJ|_w+4Y z{nKdjiw&FZUAgsZ`v=>Px1Rj1Ub(zuboSNRo`DCBzL8Pv(&yJMZhdy!wHvFiTqU;k zY`k;**hu5ViTQ4^!@NHs@4xp}`Hzz`BP0Kf?!G%Q)^bN)9O=5KPtE*!VV7s>@4L#S zvqPItclSgfE<*8^Wo z_m1EC;q0NnM|I}29gE#JhsW{B$xW|C_8#4}d+ULv(?{NI&VAv#Jxi-gd*){n->zT$ z_vKHtY*%*i*yb~DZ;7uy{P^7TjWhU%!#|(vS`nw*y?c%vs%(C|GBGnge!AzvH-+=r z$p_NPFm~`4ZP6_*Uzv|9_kWzYZEn0fHX8f=aqB;!vBvku1MSV_!9f3D-`Blwp8p?J C75$D7X+t*x!Eua`=tjg5`X&CRW? zEeyl9x3_n8c8F@V%5khDiK;4_rtUa)tJUiD2BT4!B$F)5mrITXQ2<3Q>w2YLry5PR z-4S|yWjHdT*cqpt+1!^HOcTnsOt>25ne@Qn&RSC3)5aq^J8v&Cf0ZXS5)1|!B6un` zw6VB@PluJ|m_!Q}Ee&+xA(T`B6aWLmY#et<(xYi#5Y80k+_I*w`)DvgaZGZRsz|U3 zB^Y$gW;B;GJ;CWqtw8QZsy{Zu%%XUbtyKk;kxgE=CA+P(2gV?@!_-Z(Zn_xGRxvI@ zMFqkFstL4*@dKhZqV-s`Q>`;|{M<{>nZi^|o@~^ZjwTFEDRR`bWlnp}JZR-{Zw9n7sG@{&_ zEJurr=?aw@9Ont5MpadYH3h+um9|lcHAkK9`EZma>2fB5A!Ck;y9VXenSN6Y+G^Cd z&I5NE_ZQP-xqO5~01dza@BjjUbAUMpsDL7&rh@_>WmAO)n}e3X%HZ$?ooO@qZEMTHk>0oN>x9-;V@5z=-hc)1=d z8_}vaz6fV%n$s2FDXhlgx=7Vku4&1hTlc$e6m-)hSY!!W&UjfyA)pKpDza!7c27XI zn*I5l@Asa-8IL7hSL=1N*|a&f#j`z;3nVU<*@?m|v??+vixp1%IMdE@!rk6w8Dck9nf)xG;~$R|5DpLuxetDj!{aQ~Mt z&#a%n-+k@l+xPB%vls6FcjpSklWVWO_w=Qw4(|N=HTUDo`0XG5{rleJr3ZTtzBss2 Z0{=VW{r%5Y?-u%SboKb~+qZ7q{U6!4i0uFX literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_3_6.png b/resources/g2/track/corkscrew/barrel_roll_right_3_6.png new file mode 100644 index 0000000000000000000000000000000000000000..8f53d91e5ed3a6e088a10eff94d40d0d9a85c0c6 GIT binary patch literal 1338 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_4_3.png b/resources/g2/track/corkscrew/barrel_roll_right_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..785f64a45b592b801a9a138e793e1e1ef6086020 GIT binary patch literal 921 zcmX9-Pl)4m82x5CGns#D4@Dy85F|pBpc#!4A&0DHmN-Nv%Vwd69x@QHNDmPrREQEa zhagp=6t;&TJwzxHFo#*lp-R9UDiqA2LX{kfTi71<5F|nmbNHEM;eFr7yS#UJ@B8}h zrF`r7#bW@tb@BfBz52dU&nt(GdS3;PJ_l&P-4E{Hsp-zn&hGARqtV#g+uPsYKR7tR zFzoQ~@aX6Wrznc!SVh;LJ&3Xf2 z6sVI}pQhG4AFS4)#9(dV#8hynP5K5swzz9oN=NN^Y!)+bQ-s?xlL^on=!@WM*u=!r zL3252RdWJuSXAlg#z!cl08{`S!^~#WAqbzQLqWJ!)mgW@bet#SF-lW{Yf&Q3s-&RP zvdOd^&hP~*klaWaPPK5ZCq zo@Uw{-xa04rVR`u==bBnARUkMBv~yMWmzI1OrS>?H)%>!LYp()mE^5E;if+={Y4dT zZkAhg!Ze#aj>{yaF{~j7mZExkEoR4q;cOBYSzfI~&=t(mnvPETJtnZl$kV1lcNRIz zG}tV&s(OM%fHr^y-~&VeGk`S)sD>&b+d@%@ils_}$-z*BM212IqyaKvdIrjSk|heiR15)tJ}U4H(xlYgK7z$f=E zHMsrwuMcY?U!1>t|DA7*tJ_~(pT699^WoXqXOz4++xhQ!{r%}5|2+8Z`3KVL-{hwc z8^6Qqr;lFvVHdo&!@oa0cNahQUZQ?|^y=*6FDp>u=YILl`tz+?5-#psp8x#b)mQ%m Db<~AS literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_4_4.png b/resources/g2/track/corkscrew/barrel_roll_right_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b515bc70a87be25d4bd23151af4acfe8c2eb7f61 GIT binary patch literal 1269 zcmX9-Z)_8F82;@~cN-m+r6C=ZP+2oNazKF#xo9P)+(tJmyTMJHQDTvk71Q9MXDC=r zWd(1nEQc0Ww3!V#NW~gE8OwoXIbFqqH91T_R4B2s8X6taNDU=f!p{g(%O zDpf;61A-upjg3uBO**5|h+$@uBxu^kFbBWHOV>mC9wz3vkJFUNaxCgu+xb?o7yBS_$L}B8eh)i<-6Re0GDtm?9iD=_looJsoFrDZZE!E2X4W z51c6Q5I~@jD2vDeO*X16r}eOChGi$57a&X;0iXbIA_%L|`1E?gWD+fwNs3CjTv?xQ zE)s#VtjDxQLT9E77N^O|qIMs~2o^3(`eU|Wf)>+GDd#fadb8DNp-~%yJ6MwCDL&$i zNUWszlDVK#jOHt{h5%X`=v=_y1ttN(BRXr`5cfZY;h z$OK0#ekL2@3Ne344po#GEF?8r+=SXO+(nQcnhr2b*yD)@0&*mxNK!tNDV0hP=viP2 zAy`yHCiHX~b>&IE;1G+RL`le$`3f09-W&0K@=D0Z>2ytb!t; zmxD18=CYItuowsuK(c}y1t1L|tAhayiWHRGFwMi92%Z>^0~-nK6yj!dJ`WlctWl9k zB>ajJD;5=4)zZ5F=2a7djuH({$;9R?Ldg*;dlHpUdS1%IY{{erxB;=6H4ehyrZKO} zCivW9(3gk>m1L}#OTuyTz*0DUGH#-Kz%#a0bJzDE7;lOK3*doK-My!+c=bryR%U+V8Z zHa=#5H@U94^AL>P96P9MS>qg-xEj2+`UgJM#e#dat^AGI=0uCI^^e8UC&r()&Jx$o zKiuPO44l6Ye*Ee}*F^X2zg4SdxNS`D!JgG8_YI)@%++&8+eeoiZvOm1l&iV3?Db6B zETzWIJyg|;Egy{?{&GK@ePfVubQo`Q6WR^dKKp#f`_Jq+Hnmn5nP}d4AgG-->aG}? zK92OhedOfQ_U4vfRFki5S+Z)RK|FK(^n+W0)(5{XUfI2S)YUO?JH7IrtA6m2F#Xxx zp`~}~NCVuwx*WWtm zMcKKwaOuw#{Vi-hwP)nbI~#WICzP9K*Bw7|@#kABg_cKD|DvP!x-PD$9rAVu4;|SB z8_VI$i34fj(K}^&)8_xyVzcc*W*dI_`m&+n4_nibOC#914e~~{N45_R-JfA<&Y!xx zabW6baOZ_*M=xCZo;z}Oec$tAr%!e53r&x!+IF5v{58Dx@uBM``pWoJans9h%_;oO c9p3qc4LA0pqwx>;s&}BLtGDx;&AW#F2U*81=l}o! literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_4_5.png b/resources/g2/track/corkscrew/barrel_roll_right_4_5.png new file mode 100644 index 0000000000000000000000000000000000000000..a481433bc5cb1c045c0757a9c2c1a12259aa72ee GIT binary patch literal 902 zcmX9-L5SmI6n-}IaDYbF^3{Sg5(e(3pqs1EOm@bhRr~P95N8JU>C9wr3*a- zH(*zS1T2z6g&cC|A!3m^NDmcqs8FznMZyxWhe3X`EPU^Me24eG!}s3z zSC_rBdvDzXfU}EF&L7tNZe8y*8+HHrKS~E^z}08h4{CXEaBz5d*l0A4j*gCxk55ic zFbr!po2RFzoo=_wvWzGSiXs_?W?81=IKCgu=W&*;ilVG4mH~kWS!!uodoUn}BWCRK z{#2gL^(3{Hxx3khB8{nh%al5{N_qwrSnRDMroOtIo5fW+n^RgUn7Qh1tg!SlbSu+sgCmAL+Ew|PAtsiRJI30#wvkh&{yvY;HpAN- zMXM~=7sR2WxP~zu4(G0$20o{ofQtR&O^BC^-% zbhpl`>NyesQ~(RW1Bd_?09y=D4Ov7Z3q>I+)-nYq3ljn29uzVl1(4Z6E{j4L#RIe) zqauWt!E+#qpvu_5=-5Mg;`L^skt9x@N4s5)YA>P>?5HJp9XTZRm@*6AE48Q^CVPK* z7jMwIq}srdSdYOqfgC98s4sc;Ae`7qG|97QS7fN#aFT>#Km{OFXECnrUV(5%)9sd< z`mbOum!hUAgMl#`nJnXQj4!Z}$fgprlIfk=MLLOW3QbuQ3n-WBT|5f@_~`(?`RBE-p0JPqt>@w5!R7g{AKyIvAF4-tR{#J2 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/barrel_roll_right_4_6.png b/resources/g2/track/corkscrew/barrel_roll_right_4_6.png new file mode 100644 index 0000000000000000000000000000000000000000..e6f2762d5a5b1409b51b7280098d11de4e4ad268 GIT binary patch literal 1202 zcmX9-e{2(F82+|(yFpzFHqt@C3n_TuK?+{#q17C4BV`=h5e_`?NN(XGRl0b89N2^s zDi&?Dk`rrEppj;DP@zg8lbo}XqNj|c#$!zE;37>Zp#g*r8yyk#v&7_ifBo}5$@9GL z`|Emr9aCpb1pst(ukKpksPh}KpuMG$d#~#?09wGhwHsD7#-^sG=H}*>mKKY}(%RbE z*4Bm~NPBzxlqpjjE|-fS+%!#b93x4BqR5d*B#}tva+nP#nCC)|MY0+z7~f;|vG zgCTb`=1nBoOis)fl%f$USJE_&@LsFTIKn)tN?1xEh9Yz!!54F~ITEd!>B*Yza{>_u zK?qRH5x?x>}k5mYC7XT~(B7(>^TiEGTF)Z!%4zcWr-(L!c@1|0) zP;e4<7v*rXs8_^%GR}tyN%bm8I+A7Lc`jWPHPerhPPfnH<#0wK1(}wkY&0dNG+8sk zx*0dBnet@8Mgcnq9Daa?0Hz{j%HhjlLV=PEK2}!JHC2a0EN+)bXV8bocyC6c^9pA~ zq*6kuWFxggV$#UMif*%$7|s)td@NG50MM!ie{ zkwFyB78X%8fG0y#Hp=Cb{*i3BR7h4!dcA%ZQULG(C;+GcWC0ifpn?F{087J=0<&po zmRJnP1c*~W^8u3ukONS5z!(A3EYt$97=>mUJT{&L3=Mb|2}q7`5Ra?AOj^q4BZiT! zRt?zTa{2)gvQnypO{1cQ$);DW3E6ruKba^#(#o(@!|Z@W5ue*8P-uW7LViXK2h#Cy zJ{vdmY}M3Zy-YF;)BrRAgbgpE4Z8o~jD(Vv3Ykp&52aY71%V3$q)-=jAUm@~?m!5c6 zTz&!H&i>fM-SDj1+2_03)xY?|W8K8A89%@3uzE|o-#q{C%HOc>pDQ)>OIJ$6H!dBy zymfqN_6M^f4=xV8e0IfQ@}r3tdpZw(%~}u640s~ZQRd;i-@o*{HDpfvN!Z-~#d}}v z{WjUN$p2^e#2U|$(9r0io1QtBo|$prRwGCM8DiMhvK;vA`8Mt7N8gsmTwoy6R~ z#xJbw!v+qXoO!z4cj(q^-Sg|ZZ9UhP9UU2*W_jv_-aL3l8`Lg$mX=Nqzdf<%>AiIe zI(({g$&UMS@zWo!e=eQv7It6UwDI<)bN#ojEIojp-gBZzsptO=oEVimJZm=*D8FIL z+_ncDH~H5$UzHawU%dK{8SC$z`DS3^-1Zla-I*F+Q$F)qdBNcn`cKQkdmYnnR;Ld% Pga_TLdb>`o?0e@w7%~x* literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_1.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_1.png new file mode 100644 index 0000000000000000000000000000000000000000..76c74fee724fcd5cb2adc62d682ef73291536f0e GIT binary patch literal 1249 zcmXAoZ)_8F7{`D6!)|3@foe+D#1bo%?BWWZ@sv|exj}{MZtj*9XrN;!Hqek`J4lfR z8!4{AI#21K!-iG3K{W?dg67aB7U{Ic5>F^l!Xb53C^|wzI<~-G{462)KL6f4-xr_f z+1u7?ojJX6Isjni%C}nDE7eko=j&@Kxp`@59RM|;?d^``m9eU-s=B(mrlzL0wszXI zX?1mV2!hnt*K0Hyy~$+4FbhSI3}a(i2hVeUzdsy~#^Z7-l~vVJxr|u=NdVf`;Be^N zZllL*2?U97gpS3Xi6oy+Kwyvx{SENVl@#AYGZK+M{xl<5Oqdn zPF8#=HKY_{`N^b~1Ud%jUBKuCW&y#YdTZS5NRpgl59WEXB&6VJ8r8A5!DB^(b|S`7 z37%2>Y%a_fB!4Lxo>U}QNNIJr8MR}$i=;dZ6J*(l#}f|*lhLRm%lT}!R4PGW;D9-d zU@x4Igi_HPzF#15LQ?ODt1p~@OvYL0v-uJ5ueFW4hQ3QvtBQUS^T&q zOkxs+C2f{0jTY@D=rlr~8AdQDlTfi$jvs%a;r`|c%^^; zfP3Gbc{BF>058|gpEuN^nboz~za&v!Jun*HxNB4Pog=gULLOb1nVTR!Y|oG0Mz4>1 zu-$E&8;MOCAZlCYJ{qYSu0H?qbKCbyYyF1@26*Aj=hr^Hk#6t(#5Mly-iE^`R%{!5 z@z5x~sP47ifh&vp7iSNSURaGyzkTVY4-QOj>(gFayGz%-;d;|QI+43LXMwvf?K+zt zSlC^&esIVrzdE=kJ@W3$J;%q{IY(C^_r5%Ie!{bO_-1GCFNWs*2TvSJc7H8*H2!=k zQ#*flZsVGf1GC?Ir1zX$agJXd?IBkw3);Tgw{)wbp6$P@Y5q+4jN5)|%WuQogQhR& zQm4||^z7DMV=L$xW4T*BRZaKi!tXY9bpXk5xlo>O;0LzaR~HHv~?bv z{d(<<;T=Dn2=Y@;@4NDAY}uCkv14ak6WkGUUBAe+{9bkUIQ92Ae&;v;{X5kE{n@9Q zAMQMQYyGV8JDn4~47{kh=Qk$bp=^p~4BQ NT;AGpa#`2z{{fdTG8_N^ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_2_1.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b8792a1b7fbb75c1a5be8b8cfe756b00d330d4b0 GIT binary patch literal 930 zcmX9-L5SmI82x5CGikRw#-(V*9D;N(hqy$@NDe`=npxrynT(T#9(u?^z#ekQAwmy5 z1hz=g9-@>rLJt*!_7Jebph1E}jWCBEB2?^3WP2!V4!aU}yU@dkzmbLaeIM`g-r>FP zqtg><|H{i(0AT<4oujkj9u#x6Tq^dPujG#bN^tt_t(yhi+S=OQ-Y%6&J3BkOySsaP zdl-h5%jHU?Qg1XGEX#5K$y5s?YnBX_D^H}cCSNt>y4@rlof=#0c~6Yo=4@)F7yT^tHhC-&pwZ9~z)`V@ ziA4i^F{!O*1j-n+*3hMcP}~4e05l9Uaoi>dhoU^5KUb8Cc6(vl565E^MFd-G2z5pw zd5w}xx@ohz!&@V<=gY%T^=4X-wn>g)qz13jvd*x8*8 zUr)2k#RgSr9OvqFiEOAeqw~BaD}AjH>rMy5i^(*Nll4*nO~x!0w>8o+=uubj`)W99 zU-!rJQKly3@$JfiHKkRRx|NF4=&&R)gbvDGF-lx(VPrp>3 z`{Mfpc=FAQpMCdU#Y$fL{nvxP9^J#?#JK(8kmt+5rc~wN31tEMl8oX^`NJ_cClXRm0mT|3{E^|7=a!092pC8 zWwDDA@tmnYwfk51E-wRg!Sv+pc$;=~baZxhc6D`icX#*n z^laO<4a2bB-rl~xK9Aq;C&>WIGJ?QKQdm*sL?V&Nj zDtSq_pYa5EA1&fRnFy(*q|r*2O&DCdDCiZ@bRs^=8wmPof#4)6EVFWwPv*p&DVw%x zIcd9*uWgiE47dgGM8FpZT*IiGCs@G4B}TSGshXlUH482Bgj=G#u^^EO(Rqn2DuSJm zsu`tjB$}nnhHap_<#JOv5hAGw!^Q+5B}v&>tdL5Tayi>HYbz_wW)p!|20Vk2c^6ys z3Kb$!W0Uo;-iQ^O+Dfa?*sN}#0m9{?Jf5J>FAxEVrWKA)itT0bLMmO(7aYrO)ff;t zOc7kF=+mM^HqIDHp_q-74YgXzHmX*uwT2jg5P$-p0T=*ffI0@K4W31D1sOVWsyq%d z326q*AUHfA0g&uLDH7>CGNY)HM2-#*f~SCEA;e=*$)m=Iv=+?kQn8q@ZKKh!QCrI! z0Wv4s>z!heEQGtv{I8BY}X|-siZOdpl z7HZWfjzcCO2M}s!k!;I7gf|h-*6UO@^AJjDDvq)wG8trZ?c=9*4gC4w2R@vc65!Q4zrWumcPGYPo85VG{^Y)D~PkC5?Z z_w}cSR|7*wo}iD+>&Ko;X?NByWDYD%UlCtkospLo{`&6}adT#t`{V1!Cay~I{^8&D zU%mM8{kL8`e{?lAdHDXw=}+b!(R&-8o%#Ex$;y{|f9~6N%d?w2!7Y@Bv*jOl9DHNw z)UsuFo@IO0Fza4GfczpJoCr95&EbX~8e{nT?%d@<3_E+}k z-d^XP_Vm`i%g3B&ZjO}thu+)1Jb0GedHfo7CCz-X``lJ)>~phf?7Gg3{?hU2`oWR! qPAsT%)Q_CCw%++~V)XV)TX45y_S&V}hrVz7hKcd1v2XXhd;EVey4>#o literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_3.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_3.png new file mode 100644 index 0000000000000000000000000000000000000000..04f5315d95a8c00fa99201cee1057f7c4bf589bc GIT binary patch literal 1261 zcmXAoeQXnT7{`BOFV`_<83jA3p9;`x%Wfo~jC3RFBTO|z?DLA2oGj34yCY?-a*n$Nrbju(=OGv)Y+dt3ukI(ab z+EA~roIG+iM#Pz)MgSzlKei;9XSO`23(TwGF8Qd(MC zR#t`}h)gCcFE3YWG#VVoXqsYK1IL+cHs0lO`Fw#$B$`O{OHwwM!!baSfH72@(|4N9j`EpXa^4exf*ai1|6;iW!zMhfP$3B3xK zQDCQlz#<_YiF@R!kRq29bf;PUmPK z0ON5LuFz0Qj8T(jt)54XPMi}+o1b=t4c-_VOq!#TMNOzMy@q5_14o#6ns+nqfH@H5 zqoOk*dBsd9osY{YpkRU00@Mzm6%Znz)JL?YIK_)bPudpD3JKWFpbCyq+4ZQ$NQO8% zW@AMcm-5+$!>(-HmlwluI3ZUMTGWUW7K*mBtcT%g9^LZnBUSDcBbO~Oe&GfjY0|lBLFr41OUPS^Z_u809X)1 zLx&B9gHTE_TEOGLOM$2!NDP21fV>iVa2RA@)C!YsCz{nt0PU*CxUO^uU za&{;-j|$+reP|pRRBVb=rOs8Qd?Qv zVKE3!YtZYAg}q`ToRJbRmnIAb7zI!Q5EfXt3wDpBayk6N!-U`WNVa5>Hknwfm2)_F z9CHzvkHW(=9yeh944N@&pji!_TIk1Nl!Bt6aQwux6}KP$z`N_}Sx|fZ%A1AWze@Mg z`kMB3uc@PJ_LRC#I8dM4yIWTN*T!uP-`reqBAPd@e*E0hxyd_Ew>DM%F&^p$H$J;I z*0yGr%!A1<~Iq>A7Av&EZ7w)RZN>i1m!x!Q5A`cT`{)`+wB zuG#crK-l%pfKWRzdZSCE$BsUZS*Ef9M`uF;_dKg>B;a_2xPH4BPMPM^8=`*U;bT@yFvXp{4M8jpXR zX=|%_|DNlam$#0r_j>R8UO$Q literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_4.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ee7e037dc5522139d637de017d5b44c38c8b6e39 GIT binary patch literal 1267 zcmXAoe{2(F7{}kX+iqLgno&j*s+Q5XgPfzxBNl1o*xIGcTXuv4s}?=AU=urYNEaF@ z+GVYFq~ZaMG|)kZHEG6~HDksKbyO{+!73LrO($j4tw2Qr6${ib@wJ5H`~3Rn`Tp^F zp1m7;jScln>Hz=^-5U&>Ds@#QR@6!=*--uJbpRw_W6$QU$|w?v#A2~TBB`pXs;;iC zsi{E_q_(!UuC7j@R;zJbqt_EOORKhiY&;g2+n$2>X zP33TEygpqZNJXMdJYi1@zFa=6#}JcF%909~NyS;vkR6|J>k|P}I?85K-aFhzhne7TlIhz@F#b#YCVi@Gzg0$+akE!nIaH@1SX)#S(NlqCQ_D6cS>w+|*RDScE{y z0yKc&5t%-&q|=x+r}yT~;esPxLb^tg4cmPrW;1PH&AoajRAvTM`<-q)$ zF%q`K<8DFV3k3mIyp&deJEa7tpu#F9hO${5S2Xh_N4y+J&&P5wQ$*!Jt3r$#nVC@8 zXxwQfIhQT$cg1P##T{G`B%*2}sqBwAeIQ!41 zwRhw%Uu$ma@?2>;kn`-A+uIx1`OLodbvrKftUh(@TK9rw;)C}_mAC68hVyqnNtDm_ zdFm&&p;X-;h1)F$)(@>b{Q_toI@W)0`08_uugI6ZTjw~iLdm>i9$C7(e!OWvS|0Zg z4Be2v`QY%9!TgqsM^`<(I(m}Xjx_$z+_8}8Id-A*uM>%$qG3_&V$b1$XFJ&AyUC*H zyU|(0#?FTKCq5j$>k;v7lM6SKzX#`AJTo)XU!EP?_VwtcpKb~F$FPgrPF7!jZ3q2L zRo~ji!STLbKPRWnYk!M-%yV0t77t54_`9`ZWc2p(Uf-?BA;oxVLubp6{UfcrPR+jF zC*oT=%jcfIuw4*aQ>fz5p2k!8mpb>HJhSzq^L&S_6>wam@gw$SP|3!hju$DbJ! zef<6OCk2*2^{jidBsrBR%`Y=?Xc}-PLOt>wIJIf9HKMumAu6 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_1_1.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ed2bfa6be1f0307540be162579895ddfb2d20cc2 GIT binary patch literal 979 zcmX9-Pl()f6n^_RyB*h2M@ea*DGqJ61PLWVs*$EPTjHA1ludPnQL`n~0jCmZgaLC% z?NA08G~$R+<}imG1_?NY1;a9j9CFx&VF|d%R3pq`&_Na*N)Fqy;Lnu8_uk{XyzhhW zy)Uj^l~#_OI0gVK>u;@XWb-@vHcg{mue)xi*9)R(KS`!($}%AEpvbv$xlpZ= zHH&F9dAF@}ds;s<2XS*W_Cy*h@i{}r?GoweRL5ku>SE}Y20bI$X-pFDa2iPjXf)IW za8#^oU|};q>=x1ifhG(}HFV@46cqs!01d;8eBLGqhoU^5-%^yFN@Zx<2b~TILxL?7 z1)NbxUZW&~F4?T^@Mc@A`*N$VdIK#;DkMiRQju3_S?9`zXf%{YN9zPe5Zh7GiYMLC zVVD=7paNb2(gMoCxDGD$sB$P6aj7{ny{QwSErl-V98r_#W{L0WV&7Ebx;}Kxv0tBt z?qTesag;A`6kTGuiXhfhwW;gvTCLY?hMi6v1f%`^>2!*KFo1F~wwo9GggT%rBe5|q zdy`s!>g=bz$-8#!*Pi$sx+hXyeTUUEn8;wnysB~FNxxGB!DJkrkb}k(y7vI zOYj?Nzg^k!?P1uS45KtXKmtGszyxpre1IK*F$O4uA|lH~zK4>bLV>|TOMpOvL;<7% zGH}#nk*A=biUtjoc<>~64rCEZ3Rcx|yGFMhsq5+eem#!;$s|UZ7EuA#$_Wmxc%&9k zM#4MOvY*!ahwk7g7@^^mDgZ}f5|b|rWL0IYitN}`uVwfBRvh`0Btq$klVubDN&ulO zi$*5*6hz%>kH=iweF}3h5X)t?TGcJfV3|6{xB}~oY$!AP3Oy+mkwzk$LTwfW0*dAA z__b>*fiPg=RIofS>yD_mihr{}q3G=hllazx&~%AO71oySFRdeJ!{@ Z6R&-HW|BV&tK(uI<%{+tGm0~X0!G5^w{n8 z-rime!}|LA`uqFcKA(>y{VdA}0w+l!MUmt2csiXe6pH0?)v{XcHt7e32A*?-Las=} z8;$uBNjjb3a|O{TDHStWZ|E$61!;%Oxz(UolkluUF2~tYI#?;l)>@)z={v1*zyl%y zQ3f;t%gI8#~k?TQCA{irRXT@9hK4}b>{F-&$kRgXu*ah;}@d44S%uBqyFHj7Fn z59#tTZa?p(MLZxAL6wv=TFJ2SJeM*Ay&@K^u$S`q13p?HIEf0$teoHzSutCbi>6w( zQf4z(-zhm6a0%cJgEt1ahEZ8}pn!);jBEyzbwzJ!Wwgu_E{XC)14J@N=Oorp1T!wx z(n=#AZCBYdbQeWwGen@z|$C+bFzj< zs1V^gn`ngeX4GhD)pnt|TiZbn!s(>k?ts@P5PpfK6^>7con^5?GPRZ~SY@+aXF%jI zMR2O3SBnst7?V#3Mkc(LS8JtAvsP}mw-Eyn1W*7pfIPq&Km!BR0nehCg7P}DYCH}y z2`L7O0kC*L0wCFqk|ff3RE(fX0$Dmd44wjxg&>bbB)1wRQd%IVONJ3Q&3vx1+{Ry0TlWqgo4h0p-O4erJgBMg%ez<}@{;r&J@KGRyg< zRYvVP#c`+z$O42qStL4gkKl>NGK~h6Nk4*8sj#7t5Q#{!m`wWPlt0aod6q13{why2 zgFYmBk&2@XiHZy|xz6!ZFFXEy_yaSiCj=P&`{p|xa(8@mWb(Dki=T%EFFpSldkg(> z{H55b=?9s6OIxRo_cpW(E8_zvs-Djj|Md34?e&kJ(=Wd=J+ydW<=Xs*LmOWlp8fBa zxmVZMr=d&L`fzCHNl2On)&$CrOw@O^Vm pjemd0k#=n_A6YV9U~e9r?Yi>f{Y_(RX1?PZ#*a;m{&;li;{W9L)=~ff literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_2.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6a3593f5670b8af9ff593635724788f24de14e25 GIT binary patch literal 1192 zcmX9-e~i;)82;|Yt@lIHko_^jh?AS4hDK+uNQFr%6qskt^`yI-I>IU6{q@iLB+v7{ zyZigRvpeT?0svN@a36tx%XW&04)qxB=w>EYlST*ur6F zL~_Ryo>ZF6=7M@&EE{E4!t)Z_vjV{sc#IwD>?;rC>DS{FGZ z#+OoJMUB<+sfMA#N&&Tz815&?5Jg8gF2VEZNFRwOS1VhXAk?LS#`| zcW^~KRHoyVfKrXh0tIm`funR{~(r))UT^#P_Jsy!^Fw|<* zfK4t(2oO>iCEHoW8PqVr^vJb*AlB%`{T zGzx0fEWmo1WEiLcXaWeEUc{Sp_u+_1=}Lu6r|v^67U@8M3x|105(syUbf+jnrHMS_ zo@DW=-vxtC7{y?kfEoo2rg{A2qg{XB`+@Ci`#A9QZ&RC_{b28^6~0IIk9;t6qVRZo z>>T{@%$f6J56`_4BtF0W)fQ>=C3U3rRjj)ky_+?aB>*pPK$`8QkR= zzA&dPcj&K{y2WZ;uw>xi?!_y$vk$@6jiX5TSIhXC(QiHtVZMJYb2|sWJkc@4c5c1+ z>?t;c(&`cIvF=YlkEy3w;``Ou~fr+o{@Bi7d!%|Cqo z=XFbuH7@_>8+lOP`NQU~Ih07hxn=muCyP>3H>WNwKX&xuQyD*+KfdFOZ@qTV_vgSMcKgm- z`*vRHY1QPb=dS&+aYrh*dK>lP^aXa|FB3Cuj@yk5H#WV{+msvhuI^iPV&#Un{|8nN B5%2&2 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_3.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_3.png new file mode 100644 index 0000000000000000000000000000000000000000..71517ec9eb3deff6597f84fe6cfd961ae91372c5 GIT binary patch literal 1319 zcmXAoe{2$G7{^~|%TdwM1sy6&XvK)l#W8o$i;{WTv%z}WGd&$q8qwVp6V!7&k~$^J~HP%L6PK73EpfjM52gMFXJes)2QZIZP14Gy2ymzn2K_lK6gG78Z9IZDqu!| zod7(8ggGSPm8ZjsVoC+`I#@KraUQ~?1^^lWGlFn(xl^U$wc3zg-%Hbd7E9Xcd=?DC zL_&orG=x$|tMz8BfkTZ>jOF#V0O^WQzBm&~nPVA?8dvEI8a;zjENIf3LsV-@5S(E2W^JJYpMPbZ7TXOIBE2!IU$9)Jh{eE{ST0864t z=&->^2xii>7H}Bw5g=v&85%$aKu!t07!1)cW`!v?%!I&O@Hn7IV5AW%t905?A8!bU z*m&F}2$6hVfF&=L1z-*t!7J&I+8onz89iSxMT++Ls6RCx%ffU)s{ptfG3ewbLTzO* zhlS#u){xH`kNAXSB%evbViu<;7y~c^AS|(Pm+an2<#GgaIXvKhCtE5-noNw<$~qhz zrgPysKY>L^EJ5k|X*6%tK(iV;wJ?Ce7y$*Ubo}@n*^9S7u(PR=0gImuZZ7rr8{rtwMV$Uyo+Xh2;jj}xD0AJkOda8Z+Ob(~S?GNSQDk{G_GV9~{ zU$#7lr-Pr}toiWGZNs_hM=R^&oi{5yJ8x`%G`Dtt;nKYyhg=Jz?dxk7_&%TN{5iYp z{PY!5!r=-n%iX~b?`Yld?~#iYo~zic+8*(Rl&+#M#lSSPp!UPEN`B&F%j$PZtDQwe6swQeC4KQ zQRS0<^3;a919v+vUB`Ak{<`kZtA95S!OpfN?e3~M)BGnSEw9d4jhm~^_S`?PdBrQm z_wPCWk}UePyGnHZq;OcYc4PUV=hodBW7iJed_XQbGWV;I&dCF77F_gax8=uX|Im4~ z2`n4vMkVXE$ks9Q?Q7@VQk?62x&DruyfG>bDK5-p_uh`QUh6vh-^)F_Cv9nY3F_xP zoOOKliH{bDS57%LL4Pz5d;j%Mi-vj|YKKnm?^!eaAQazRZWjmJb*mi{xsgg hi8ghd8n-@vQKq>(a;S3n4^N3UXsB;oda-Up>;JCDMxX!y literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_4.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..adabbc32e429c758235f0921d3b9d760261049fc GIT binary patch literal 1287 zcmX9-acmQH6#i}Pb}JicM>UEXxI%;xtU^)?S^F>?gj@|ELh;kik5h~BXpq& zrz=uN0~aY!v6Je$q)LsAgLz2N0!0TD(uC=X98jdNLclay-9Qq5mXLh!eeeDAzCXV2 z^>ubwr%stM1pqL$eQDduGCy0cg*A$D&)-%}0H6S!%U3NauN4&)m6eqWg+i%RR#jD1 zS63qlQd3i-QmJ%CqY=YUk|Y?0Vp%)Sb6&4E7!1ebQYtkn%f(U&Ljhp{G*xT2Yh5mb z+k^W2mSBjE#vO?ypU(Jm`3Px7Y?fM%(g`+$$eO}DcGOEIgSK>>lSh07IWk#HS@pnS z25tg~3=-v#q+gwlYD;N7ETFLDfR9B8Q$_%202~OysnvpBFPcmdi{&Uyk2sxKLAW0d z!(>vAX^n&qr41H`$;z2+0>+9KK16zBR3O1b(hf;>8gM;oHCh-m#o~63d5D;gNrapuF(I1_6|$*P={_U?umQjWAOa8rV5FP}1i&(A z5_)(Ti$FO`n*fJ_00AT`kZAxJ0687>V=zKP$pzCsC`Z5(<8eTdz(yl3Rwua40nr+b zu!)2>lZh1y8CcfRI|1gYB}5$^F*qa>CtJj#JyvojCWGn6QVwQ|CN01Xh!s`a34@El zJWfg!T#}t6Op%jvbkHZTIYoapyizAN|hxaA}&`!;GQ_r&BPVL&=iN`eO?#yZ4Hn4S} z=dVjM8@}(k*w|L}>!zQl&PJQ&&#Jux6x6Hb}ao&Em@fLdG+RMAv z%%A&rf5j_ZFAO)g@J*UR@9~Zh==rDA+45p~!g+k)Kx#S@;`^*_qN{Ldv98s#CLyuxNUvoSbw(u*nye*W(+K9>2CPtgV(#4 zPN9l>X6r8W$#wjt6Zo3BvhKJGk%hZ6-gu2(aijO*x=_Q=@(o*`nNS@YUafqzdcn_! z>NdVA^qJ}(UYu@T_v7O2NvV2}(-<00*5-u&D!<$wH^z^2lVvwS`;v~fZ(7&){tuCe BG?V}U literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_1.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c0f89bd1bb5afec37c6d15bcca9ff0d56df0d232 GIT binary patch literal 1354 zcmX9-acmNI6#ijtue5eJnL$gp)8eEJao6p(oDSFPyef9op6j(EktowM!-;xMv}8et zlPNJby(lW%(BUMOOwzGMCuUS}AzGDAwh)UeDjKX9yNVT4aO!@;n0)Vj@BQ<>Kfdqn zT->Iqs;I62093UsY;G@dL$T`1ONza@bjck6O2FdQj`_t^Bod7qH?E|lWc>K?rKP21 zWn~D0l$V!_#bTL4p}=vBqDY3(vaH^0=InO6%jF3Kf{{o(nat*LI0i^HptY5Hz0_nv zEmq9It6gr|7chjv=4gyhrM;92(Wxsrt<0uF1y<=Xcb=#)A1>@H!DQoaatv13Ash1;&o~t zONGo#%+4lU=Ct3Q4ZHF&KTJm?QbMWH;e?T-EDXc5tlMG<@O;?gi3NkHcs!fULLldW z(uLqY2^EqvQI#=8InsJ>#uCa3@mwJDB$0=eDv5-U$uy{fQDLlFZPwBbL-Ck3z&rbV zfn+3>OOe2!Ma+!EW;&c_aX*EJwOE{1WpoN?K%q?u-8c-AFs3brpO{rS`uqnrwzn~$>CV+pigTf* z`TdUByY}x}zSll&!uHef%D|GQxjSbxH5<_nu52>(JkIpH3J>=#?v#z1OKXk{jLiD) zhn_PLV(?gC`AZvkOU=1!H&qpvu4eL^JFgFU&abY&x4E#58&OPXFU;N?(LFo(7hZUC z%boqD!r+DVl_>de@W7U7E5E8^CqYp_*BISX_vzfsAz|13{(l!WZbdIIt=-)n_dSi* zNDF^=CEq=@9bGwO#KuI{lcQr(nyQ_`>*=aMPv@S2)T|vVsvLy_flY~l8b!A7;i-G| z4eWuDFS-6Tl5=-0y@uWg#}++wX+r#a1!T>|%C~n>Q$gFWlW&Dbx{fZ@Oy6-Wd!oAH zM%|6`n(24f4X?U9@j-i`_ul0ACG|&ZgQ)oNskE)beY(qixO&4_AOCFP34Ouw3u3+5 zy>|E08RwSmBYRud`#M7-M|xxN3k}hsb%LvBy5r^??kQ-TgcEfrJhXeq+1J*-L0(LM z_a`={&@ZQ|1@X~_g@U_(?C=>k!fiU4-!gB0VW(%Pwf@o6Z0ksGCZ7KNO#hJbR`r67 zGp*ttU*g;AEwy4|b(v||KyGSy8)w8};iB_OpZLRFgcw!*{ZD8G+4ZW?=<#J7$G^wqvt-Zayqobp< zvlBs(uCA`hlP7!qem_YPEXxQ2CrP5B$caQElgXK;RVs}+PNUf*3Bb^R=ekAF6OH;} zaUz+bGg&@wh6_cdY^SO_?GD_J&SaOr}em&2A5@lhxd@Y4d$Nt7tFa*|Kx!Z}N}Y_;U1 z?RvgCQFJrFBLHs%_~HQ55Gv;ln3z~(WIL3qDtbdJ!81JWktj44z*8YQFR=whuoF@x zqtuKkJuXIoZvY^>2}K!C~s%OGUl%@$Ch zj7O?$vL@>FSfQbfHO>0n$^`7j-EPY34fy;5PDnJZaC|b{S{64`>CwFDl7!6 z7a9R%yqnRyyzUEInC#G6Lo}MP!bGNg*Q&xw1M>jNhXe?>$oQfH8IN$98r9Qk!ARRB zqwbVovr2Isv;cGfge@vm~?_XmhROrxtaOKlp(i>w^MV@yDett^TFeJuhrndf@P(=#j*{se`}5 zi%(u%Q}C?1-fu71z2fAKpvm;y+rII`m0!QO&-~)xp&i?4=G;~Dolh$B7s=en%5U7) zcEPWLk6*a9?8f-fBfZ9YqmotU}l-o}~3vp(N@WA1O;cOIL)d`_(SB_4e17G;r-1!Z!d5SpkPkN@^|;`>^s|teMCLI?U(1p+vf(R|4Yx> zGWh8(7qw~sLRW3%Xzc7in+FH(yuS3mCE~z%``+G1e7ld=Hct&44vivLZv8oQ>$8{F x@4CP3(&?ou)H~AAy~*1h!J$X*C;Q$XxsRl+&V8iPYqgXHt9yezr&hkU=YND_3)KJs literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_3_1.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..512aebf4578d199fb1587f4d878271e94f49fdc0 GIT binary patch literal 949 zcmXAoL5SmY6vkhtok?fQ7?vs(a|l{6hag#r5HLt~%?#Zk>tvX$1St|Bi)AR7LxdiR zM9rZr5u=nPN)J5*>>*%3oBJo(d@-w1F`xBc_nzGY$iwli+XtD=<#JnFTlsvxP$+C~Z}05v zU>H^`7I$}dE7fY1Wf@Tv6h+eYx@j7=ZF^pSI1J->nx?Dunq@%XL6%DOdb!yoTWzM} z@Lo?I47E{YP7-In@I@L^`H~@3ER}S1s&BGqwitQpWN4)0&NB5ktGGshMng*gSHT7b z7CHEAP+m_6v}Dj)LzgZ>aTP!Y&@jxvaf={ait>5>OqR!u#>}!V`h65d1Y52O6-Fj` zjj9>6YO%V@n?2DEr0z)ZCt8>`NRD7?RbHVbovRz7(UCiStsfd;V#R4USq|o#2p6EN zK&1g>8z>j!`jy&{sz-v6sLtHWmc^Esu#Sx)Q=*C>^Eb9KUHCnmT z^>BGP+n^GS<6NauBdZF{=sa&qa!1RSwTDi3JQ${NvYrc|NtmhNmPWcwy4Mzhjxy>s z#(_19ddpe7USA*qKm{-XTz~*z46wieWs*hIHc{ZCbS6_^u+SACtU)RRQUDnh zQP@P24oZD^5!XpKB*Ai-po~Q{fNhrqw<7zb7E(sayQ_Mz zZjCnHTVcQMKwVHm{8U@`X4wh+*)^kphPzWdmgt9C;8SbeF zyWLwXxSsb^=42w)>q@h!x7!BG*c{^tY#_3c#7t#+saBCjB8x&j7KH*zr0n>)S4xkc z{J@7NM+#j3=lAzBqaW_yxc&USkK`NAe0;6AKw9qu`)BFFt8d)BA3yl)xc?kn`{Ysar&}+*_SZMTzq!Bli?`mH+&czwz3(#|93C9)fBWWppZ*WKi~s6j&O@bFXSW_Y+_B$cxZ*j z9kIp=jhtAaN)sEcq=rkZI%k6iHgLlc8*}2EUASm5)ip@4lKxQ>oL@^wKJV8*?~{B! z?;YMb9vWPJ?{WYb9DRIbSEp|1guBnx$;bab`#pdQcJ7$i-Wj{Py1Ki&T`t$MWy^Yc zdU|_%F%0YL>+A3D_xk;QiVCnSBM6)j(55{XPES1gt+YtC_+triskh6bJ+5JgWk z>Wjq#$rPQ*@`a*gmeq=#s@3x>iG}F_h4X4*pDq(Qm6}Shm1%jR0y%=$4L<bK6wl8_B2`Vhp39+f z8K*pc#v9;$v_ymyGOSUuPODiqVQ^_v$XBG26Y&M{K*&!EBqs+&g;kP#GAHFqO3BtN zCv7(hwRYLffJXpt1blHIbS#+jhKht(W)wS|s;T*=ZlNij^vFRx79vw&x*)TrD%c6R zno;XUqFK(gZ3ERUwkaw*0vV8LTIKkp)L9lUrqZ*8qGQ>u8UqrC zse)URe0r43#u+0inAymzp;gP-M%8Myt|JB@44?w&00zJ;Kpg|r0nehiii|vRsyqP- z1!)FKA#iv=0wBeUQWVPbs1!w&By#d_+xQ@GEQEP1DtomUnbt#vylk2Y+cp{v8+Eww z2vG3>M)&f0pHw0ght`{-(TbVvOyyRohN?}%13@1a3b;ka7Zs>@gwwTXKCPKX+O~{_ zW1&_p$Z@Cy$N_{pUL-qocYr72*?K*g&D?=nsj#9bM5A&%u26wQFpyy=gQdz`V2&pn zVLy_5NFz{|LL~;-T<7?M4-MSB{R8`VjSH}CapBocfA{FfBNM~Nj=vo}YOT5J^)qPx zi{JKM8XbE6*Qc{zo_^;m^2WdY!?gu#_@!e%|EYENou|LMLB3$(@_m~xeBSf&!RD^T zm3!qgSI(bouiSd*@)+aUsj=Ki<9|KSa7`SgL+Ps|L}r+3e8dC`1jW@7y8^pQV)e}C&=^Se)NWNu#l z_+0zQ!ngMfWrvA_R$;~bjy+=Z%*2y3?+#sD@~`i`Hul`+i>rnvKUmr{b8YSAb=Tbg goLUkOr6#*_)8oGs9{8r&kqJh(kB@x%=rgbV52d^8ZvX%Q literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_4.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_4.png new file mode 100644 index 0000000000000000000000000000000000000000..d6b4ed8e3b88ff981ddf0662599cda85ddf3026a GIT binary patch literal 1187 zcmX9-Z)_8F82)YDb{oy;pqLsiSheUOCzNnm4!ppDH&*5?yU8&dsY@45X+lj7bJI?1 za?BH&<$^b@T4KeLRMSYsX6{3gf+gOEK^nQ3C3aF{2@PD#!~;)U;-WuGNS^oKm-k7Y z=Y6M!hXUOz)~)~mbPw$9+t;lAW~}dYH1p=2$x#3tV0duTo#P+S=ON z+dDcs5CrM$?Ck35^7wo{g77m8&GW1vgd|B+6eX3)6beOMpRd&{+a~;grU1t}Lm_uG z>W#(y36)Bvxm+P!DoYhZtv9j^jsz*E$a>_UR}-*|M9eBoITfrF#M)fKtYw!hJ%EBR z4q`OWcqAtxWz|*9x$O!HO+U25a9M*;_W{5G5JnKu<&sfU!>}wx&2rpaBvO^-#Y_g4 z%P8UY(H=kNrNUT1#Dg*+Xq1#@lsua(@!3kaSc`Z`)F1FsJkAPaNMytWm&k-OMX_ke zdM#;~x%yJsMFTevJQ3iH15886j3-dQLSWb30qI2oepiV0MtLG0VKq6LP0FQw z($Mo}O^0@!WLa1Qum&J(dXZ?-Jpii2(~Sn1PCbBBsW71sAB_s}xJdXF(x0MvBPm_V#9Ez^-j;0!0_)e>#OI^ zoIiPaJonQ6srIq0V^=CuCkGxLoB5^xiJN=h=&K%StnNilj`v=&f1N(kKGV}O-9Fj( z{X@?TpLqJG4d<@j2CDPu*i-!BGw-|KdVAvP;PxJ7p&WAamSbV_f1jQ^a%z>s>(=6}wGH~S?rp1HbsqZe_zXMSKXPm%`r`#> z z46N_6)z5C64FIU`Xm9H-*Vb~(*Ho4BXXGar0H^}%*Y&I^j};Xam6erMRaMp1)ipIW zwY9Yff@n0FS+i#8jYcDeSxAy#7>Z>bJkR<4{%|;&Op3BRrmDqK39|qK2Q*dZaOm7_ zgU4$L1o3c$jwhW`iq9y)Ts}sc5j$STQF@=Wa0GtTIX|+BS6-=fWjt|px+U3gnd=t?q zOr=mvXC(9%+JHMvHqLDKVXT1j5z?QaLJ||pI7QWEu%Z^55ogR4YjtoW7oY=CXH?`w z#V4yFr4Y|er?dpnF+lGE1}`uPh&8IWB~6YL!727&j*k@u84lBC9cx8BHgnL9$5~S1 z8O6_L!+bvBFQ&rNN&@C(t zQjP#l3gH>8&uI|c=7^U_1Q;peN+*2TRHTrVOQi`&0AL4z2S5NI0YDmnJOW@@Gzq;t zOvIp?rA>gtK!^aM4X8AL41k;-1~C|;q3DL0090e(33w}@NMNTCH>>w~%pt)RkFk>E zSCmAdpun;h>H?Uzju7;8%-|GFoQexYN227Bro)*TF$c3nlMYx7h|QvP5C%7cd0mv? zbH_qHDG^fSL_w8dDQBf9C<3Sg2+J%2WxJNI-=uAHTJ!?*5Y>c&EFI0j+HPI0r>|Qv*>!_h;7h|WRyT8)R zKk_e??OVX(FP`Go)V+FX)y;{^XHG2r{`SO@Pe;8Ub^px25L2LUqZ)T;&mBMSIJ2!o+S+1Q*{E!&2yrhr~ e=kim{d%@%0($W1*?Wr<6(6Oeg?cC}u{r>|Djx^W+ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_2.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4688a1c2d113a955f28d8aebc3776036c000660b GIT binary patch literal 1185 zcmX9-e{2(F82-lA-NrT>Q%&b;azGJJnyf6-Y0pU z_Z=JD&9G1Okpw z2n|Q@c*3is*i4o;a#F!el*%fNA%1U%$T*{ZR2DpGiI|AdImKVdiq=%TVyX3N-sb{5 z2Er7OIV2+@xrDu#anuSfSixb9hxcU&^KJlG0C)ru?e?h4C3`%o*E_+oQ^8;{8eK@I zVJ_z)9B#^qv#6K%_(aSfB?Q?krRbQ(Bn?h2@VXU5Nf+*OdpV2|$bd+TaWZYP~iAL`~XT=04&hK=)$Wsz(mIhDy;d9zlc z0M8&2XOHrz9Kuo&N{e$wDmbM@i@8*#n6K3qAO(OQ00{sY01bdC0Lln}4X`wfNKjLu zRb)LtBtVh^x(`?^fE<9L6DA0#vQQ7fLL6EucwjsU7#jFlBqTVaVJs>8GOA!0G1Js4 z6%#hNTtPrYIw;x6swl5}M9V8z16nO?)Rn@0y#$L@j{}e>;=}C$3Jq~YB*@6okeZAd zTGGsG6)O*GC6ZyF4xj}fY-Do^o{!IY;x@->8mX>qrXq@ESwtZyK_TZ{_~#hxp}Pf zWWp^ew`~3k>9OlJ=CNI8UVZ)frSp@_BkQ{iKXJZvZSQ|W^0cvi$DOx#FWwg$ w9PebYTW3yBZvXLD?PYy`r{ms=+rEEn#|_wJtx8{Q=nMwdZR-F2r5y+U2Qi2W!~g&Q literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_3_1.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..80c2bfb032a378fadd935e5fba3bbb64967d897f GIT binary patch literal 990 zcmX9-Z;0D;7=G`1cey`1bJ`C@qh#708HA&Qh&c(E+j2*DWL(B_5LwiWMeK)y0psY0 zAQ1}|sawQ4Dio{`q0@i`ZxE%!AlWEbG>%g$MD2$%iw>-#9}afH&y2zIzAw+0_j%xX z-}lb$A3P1|Zp4r_>=+xBI^z?Kpm71BEnVp@T zo14QhY<_-zVPPSY&1M-UCkVVOi@L6wrco}J>-A>4?T6uh9FHdxCI>tRlDMR*>0*&A zS-DD;t2d-pTk8a7FRBiPu0Uf7w`7PJTOl2tYMRVmSqSP%uWiKL$|!aZ#$lcSjfN5r zj*PVoEU4oBR(jGS&?tu{8ai|k3bOzbfQDfPj@ty`P?XDYdy>>G6#BM(x7kENKrrbn zpUFuir%`!>R%}LhII|&?J+ao2-Ja&h1(GFl`79^XqRy&@U{s_^Q)~K$AK77Ci$<-% zL4fm+mLXFB(gMoC*k&f*rqqBpBBeSo-LVs*J&8{1EK$nSRfTKmLdTS&vfi(oL$5pz z>IadBh9RD2DOzFJ0xy(gxvJ}pQmI|72F+&V`-A=c@pz1YFo3FKObZt}gxsSG1EDfh z-BGDCcJ?Rj(P94pEzvm6W-@s)E7Lih<4jSiXvs3GU9ELn?Kq4k10FOHGiBV?NT*0Q zEZ(cgokpSS+5Mm~>W7obUBm+@049I~-~n_2h8Um(l7K7|c`l0k5(NeWH6Hvt#1bGG zkdZ-E2DuXQi>OyYu?r7^XF(J|k+7nku}gH#$+uj+(x`wm`VdnV)-1d@?=qFtb*v+MYm>myjm1`qc}v90V|5g2NVNB zNfwnv?jeY>)ff)hM*ShoUQbX}xmeUK%V2V4Hdp5vPhbKuw=dBnC5to?*%WFp$mdZc zCdbdNE!}(Y18<(&kzwP{Utdee``eo*ch@i9`fz*k?Gs0~Ead%igB&~N4u}AKXtQk zZ5h7u)bxwzKmPaK;>EAOJ@NO|Tfbj@_VCo)@{P6YFPFp*j$J>$e%e+q{JeMP^P{V` n-&*+w&q}M$DE}NKwjKxh%14*@72s%$1yzb5k(;s3dLfHbXv{lOS)cfHVFq%PGFgSkH_Tq zTLVEyIO2@O*<{+A&51=VQmHC5j=7!v0%MlkR++aaL?RQSb1`=@E$D@CO;=j=yvqV! z90C-`9F`QYT*O#TnwmumsyR^8i`Ha>@-_e#z>8sm(I{CgvfZvYof(!b_h7n04 zowaa9+*hH)RgY2&Wb1ONnXavsTc{s58cDO+Wwmj*gLgVbh7Eh$%Yx}hw2(~ed97KY zz{_AFXOz5F*^kGAR4UA6&h*F@sKxYAQfCMv&5J+K>>PN*e(iOOCJP8a9ZWi zYWY-6&!c9AWEi9Z(gC5i7vVPDJy=4)c(qE#WA`8yi?qkX`Tcw_C=iYi>4;H8iY9W5 zqr~Dhw+(r%NV20ifm8}4=nVx!uz%jy?RPqu$}poygmHi;Ia9}k<*zihYeq@j@)HD1U;ifd4$bU;F*Lfg4bn&6Tx^V89N&7Qy#49#-dQYNx%|kX z-q-$G-SqtLJC|l&zbt>%T$&xbGg@8ot$5;F&o=%{WY6FHklGGMFZ{7Qy7Jt!aD4BE jg&#`q1<#THUa~$s^-uq2`t<{CpDv4hSWa>EPWMmNh^wp%!`vML>(QlQQQs@70v zWd-VJ;J^YUHd3K3B{Z(i0aY3-dVv8|3RI}; z*`lyJ2$!4k1@xh?DH3%gl3t}8(Gtb1Mr_qeIR^EZutA$L?9xU8tT1Fx3EuHEuaW@0 z9GFSK(TI;l!VXc~SDuMTU`hcqdN{#B$jbnr0MH`{D-u~H5)MVZ1TjcaLk2_KY8~@< zU^pzn%4MWjK}iWcs$%6@E5>ky$*r{cHO>(2jp&1dL5fQhDj7k`H4Ls}m8_kzd-R?l z8;n|c!5K~Y660YJ3Cd|8HUOywpd5mG#Hs+Q3zKYA>qwZqX^w}3l)Rk5C1#b}p(T8b zGGwBoHYV;eCH=N^*fk#Y!z3>%$5FW!!wsa;Ow$gAahuHnha>FqM1#RZES65EA&{^D zbs?Bfqzp;uh}@7++LJnO${b2_u}mN}5g&)ea*+rZi&at?EmtrEVbV}`efF6p;BXH4 z0se`Ow9&{| zEG(w5;R+Xt`IT5$qli)RlvW1yQfNh?8-qa-Mm0|oF}wKwlMKAKq>Tm*cYa%y-7mE? zH7>2+-o0DbW1BIh`8vEZtp2^Wpsf18pIbMpiI@Hz&H2pI;5voC+8{G>uX?NX*6Hz` z@2-6Q?Xaz7neYm}xM_9l(t~h&(^#zY`q;FtDf`B5^v~PdpxfVhv+mZOV<#?mPwl>V zZNf1>c;XFyPes?!1yb%0wr5id_U+$?ImPr}d){0>U>F|OzxLIUvYhYt?3jzMxIDYz z*|$0>Mqe0w_2a5_y=T{T?l@m_t&BW1^>Tl0X^Exc#p*&GE9;jXQg`V~mv7xNb4&g0 ziaE}Mixz*qtf8AvZD@OaSE(#)3rO2{jdK1cHJe{PPTDULk0)^)of<%5_I;bGskrHrA~j z@HiITy>PJoFYT<2^(Rvc59sPY|KP*gBcVfOF4M`LWqa40ntNB}+t7Ua{NZ@r#(_}Z jjPZ%b=On8hCP&5UImcESZeHD=wHmZEw>9-I?Ckj;ZuUuY literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9422ff97d9282364f308d97acbafccab265a47b5 GIT binary patch literal 1083 zcmX9-VQ3p=7=F97yLR0SU3AgKnrW(G-bTcmoO0-G-ny*4(OY+u%tkoNjRpyNKdull z>QS>T(@YKwEJ}W4+bLllEYqR~i;`;W`Xl1a#V*sM1c@{otsD}hvWlNK2G9FGJb&Kj z$Md}JA07*D*|dEV0BjjKxc`X5xHC`ox|}`OJQ4wL!Qn$khaK6~)wN;62A9j#-QC^O z)3b5oMhwGxdwcu(`n-WafFME)L-RZ9(b<+10QQ z1RN4Hs61Abuu8_=D0(_IA8LnCM?mW;Le&5O2OwaW!xA1*2vMcvJd@JdY?;?;f?>t{q%RZ>P(03xWK?3LG?y+21w%4S zrD|o(cCoouans=8!5agA5`rp57QEq7Fj}D{Gm>e_nypsREQfnU(w7M1nFv)BnX=5A zDY220TYAc_AtjVNXQLUXQ+iJa2YOgoeP(SW=lU{GwAK>wjNKrD&r3L3$vXsd#6iZgs>@;Z* zSWM>Kir`n{cs@z%X}+9~E$B+4l5aPvoz4oP0i5(@02M$7SO92YfE;iPO3Fyrkk#OV zAQ6zI!3cxJ0pbBkUX&q_#vvn)YH4I?a5s1oSOy{-78kur0?(@9q9&HhDbv*3Z4)_O zz8Db6ep>Z%nqM%2l0~U@RPQ9pYq{FG(L@b9=mFA?g+uNr?T_PTNnUsi7iVWpwLT88y8>(}7 zI}$*GA1OhUCy+rSlXc2Z?(YBV?hi~K8RKE^^35qn+#cD#@9481&M&g}rJmY6JZ>wm z@7Q{4Y;^VJPv@4k&k6d#-~aTUd}ZtDb2}fTZr^!pZ=1e;ao5uL#IdE*J?CeZUb^z= z^o6-8@%Z%86Bo9GO=Z`Pklrw?Ejmf|x|(sPghHuKJBna94m v_22yJnQO^C<)`1h`o}i|mtWic?J_-g=<2USXVOj+07iz#_FsDO)%X4fhHTl> literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8c3c739c121a0dd335ca28da461c006702df283b GIT binary patch literal 1091 zcmX9-e~8<36o2<)m%H6Y)w)$zG>26?E*lXu7Ff_sv$H#MUgok#>Mybm8f z@4dNWIaBy(N ziWNgcLl}k)4-b!wj08fV5Jiz3$BH5^%Q00|QmIrfS16V2YPIgV9nYgkU>Okj(OAr% zNZ?70OlO!}UMQBNaz(8ri)Kx--8fDM$w-J130|gS3a6xnbU`ZEitXrC zH|w;E&2GiVf?tF{9B>W721XYGky1ETVHGEuX{u(&sG>Q6@XK^C86h%JrYLh|RdiBv zBd4~kRHu^bIu>eGeSSJjL@7GXa!FCl$Z|fJEM+p4Lcy`^X1(6&bPxm;2S&(>4 z6@9vd8wnz>u~u3v=i`f(-l*i;jjHD@Ar>GCpaK{G7QiAv3j@@Hz#&aVmWkYk5C(;U zEDLr7Tmg^>NC}_}g-ik22~gh!jn^TuwQT)oweerxlC? zrH!&iKrnI14l6EWbYhm5EO&FYWxI(Qovg%FN{jP`o-ng|*~&UqtL;{i z*Q9wK*??R?sFy{$CwBwEl$LL`=zQ)5)LM;;#l%EH)-;78Q#6@lDT|{jJXsfrb~J<} z9O+?{r;yDehwmLfy>ayF^&fa?=d=i0fBAk-k6fMH_Ry~N$6n1YolT9cdi@}ZTi8B) zVsdN`g^lmfE?kS8zdcFaeOldp`Hh#q{_VAzw)S*$Vy`!?4}P=mPW-={`mKLI&Wycv zeC*pT`q0Hq$EF_Jun-zyEuR!WdMk6w8S=^LJ?s14`QzwIA0R%Qx!=AtKlAvpF)@22 z_{kOT(z*Gi1@@6cpI+I%diUWU+shYACue6iKX>AuA8tGR)3xlW7oI&=Jw7{g=xo=% xgT&5E&YN5J{(N@-yUdyoF8unZ_Iu$gcHe?|e*c3{9q5^d$%*N0vkyOgsbD#;*rV~fZA>-H01hGv z5e9St%PLqY;jCm`%`%SaKGYP^jE<1$1>gZh3{#v=4aaqYFlc&&=SRcgil*JnWKgMu zQ!X##_VFHCBmxQ<)F?@()ifK+amk`!l*NJ__V{sMz)K4xC;3APtHk+uM$8nHf~A>u z(yC{xQza(@E&<$O@I-;oF@MG#$P=LwqgcU2RW%yAiAH$RCHe74fJ_AGti%>o!HP+h zlv>Nh8l}{fl|wbt>GBg~kn)EaHX;ZKNlHf|`9z|W$ykL#b$qR%6UotR-Zrgfl>w2% zRKcl<9$hBWQ6?7`is|rZPOFsC^@`bS-b4&Q5I_ac0dfGN05uFy3p|UWD#{tiuJ8mX z6eJla1iIq)Q9(xKII<0RV7wnV7J@t`OKvSfCiOtpkc!2aW##I13$?WH zFi=qkqq}*-BNhn7ru9ZB*NhaWQstRK6;&F93;Z4|;B$r;k1SBpFsEy>k<^O0q-Eyn zwuzcmKgXd0AR7>Bc@b~PJp>+$rfW5SI`t50xy*(_f-FnXs6zQ-eqV~Aax7KieB(S> z4|Yv-Z@x{UQpM9F#`)zFb+}?Xg zV=vz2mpkk+bJZu?Zrs^#jQ+d&r~WUmFTA?4=aKI3p1;1}=km6(eV;F4hBwUJ*K^qOZ1ZZ(Lk^Xx+63%v!zsfVX}&wKDbOBKdvmO!tcGXw|l}CkF2w zvC{*g8)L_R=zC(Byu?8*IJfxVd#BGG>m0Z+d1a<|>xG`d9Z!F8_rDj`E$d%@>8;&s ztMi9<#@Eq5PueF=HZMnx4BdJuJCTyHtGiy!-@N_fc7uIQnmqNv_va7%`idm1A&w9I zGx3)?vIfo0ylu~>O_g`gu0MEr>%5)}{?U#t&f50vu``b8{o2JX XOBVKY?b_K|DQxcT+jzX^^*#Rsf>Q=^ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_4.png b/resources/g2/track/corkscrew/gentle_up_left_bank_4.png new file mode 100644 index 0000000000000000000000000000000000000000..6f7012680f551d1753f6391fe7003a820e4ef739 GIT binary patch literal 1223 zcmX9-acmQH6#i{1yTP1gYhr~e$1JtNfd!A{BxiEe8+P-^Ztfs8Hh7XtsHA2`azcf& z6m7C@7C23D&8$$cGbLVPVUsl4kQy2pr0RtYEaAXvN_K`3t5#BUBtJ_?zW2WO{(0XY z-}grQ`&?~HmM;MSwDtCM57c>my*9Ko)w^=&#!>*9K>yZlTk2~=LqlU@V^dR;!C+Xl zXi;->GlC#3EiH=|FE(4PRvdTGG{td@Ab2E64243mSR$Ry&4;0Y^AO#^P)$&1Z8`L5-BkNg6}kWUI)SgKkt7>9DRPYn8mq z0(cDgDIjx5NfM@mw%BIn^0izR^F|Y4$J{vKrD#9LMFb)4_opL~Tq2=nGNswsN~HpUMFjR3 zf~Smh*1{DqZ;1|BM`1b|#m0szwhlo0^yU}+eT zppt}Ik+lO62T=-STtH(1?S~HUrWCVsy;w03ate$Dsz>u|IsG4$b| zmq@jp{1Hrkxp!g^PH3N_H#TiJ+cC0n20PZt7<*ov*|9oxzkUAlk=qU9J#BYP@s94p zgTuehDBb;>&ZwtsA1!B|;9I^M9vR#7^nuRJZ(Ln^;>?@eGZQNgZ(la{T<1N{d1A#=&C%l5jo~Oz3qAX^}vzdxi#0E{quK*3}v@IRvf8Mpud literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_diag_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_diag_1.png new file mode 100644 index 0000000000000000000000000000000000000000..962a4cd8ccda16763dd4070de17ed52cd463b800 GIT binary patch literal 1042 zcmX9-afsV=6n=NTyY%ihd)PmU3mBzp!RR`OnqmIPX>Rn6xXW0kWmJe(rM5G5BZrf_}+Vb|GbaK z_r0@67E^nt_Duo6-i7(OqrsdF>cMa*=oa-`4j=?aUO09rpd%wAqobptP-tvyY0~?$8^M<}pC4pr?;HNX0Xf8+O z3&~=MsZ@n}Lu$5E$1U~xCP!jvW?JE6TADEAL`|jEb*@!OI}OF_6bGKUGi;}DkVwe0 zV2D^UrJiaIjW${r$f!)?`4m}7Gj*A3s-mmQ-HO_` z^kJ*A<65ZSjzsAMnWpG0%jHF}B+J!&zELW*YBkrkdz+iX;Sd3?K%#RvFSGkyWJf$O-3SgES4hTBAJvKM&*T~6f7$=O65+y;k8}A$AZLTsurkOFaGfAKhDDbXy>-S9$RYcD%YL4i>~_J zaKF7V|Hxm}+9^7IE4{M(#@8!PZ=W3f^~3k>|NYW`%Ws|-ox%SYu^u3gAD(>*dv+uI z^7&8Rxqd~aKG>R?xw-NASFfGfdg*J-2!%R6Kj(+iSO$P6xNZ!lA{vPoIBf?SI5V$W{OV literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_diag_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..961ca5620d6cdeb53269b9eef30b231ad9b8a509 GIT binary patch literal 1046 zcmX9-acCQL6n<^mUb{Mi4J_7xaSIah*zS*GJLH6OUQ4W3d)uxWN?_M<(x9;%^d_+e zcj$>hPkPlL`6JWF4jSaxQdjJ$5l)HNxroQeA8{NQFksYm#F0M=mihC>;Ct`!{qsIP zzW3fcHJ3Pe;Nb%RaB$|?sWbjO*iH}0GyhgpZ4j%z`)?(U?30}8X6iN z9v&GP!7yxebaZTNEF6o)NRnV#Mi4kjN-2u0XjoU z6V2v`yiONOe5ESZ9Hrsv?T*RfSdt!>xv-jy8dAKhkXst-6qAjr?Cs>cp1IenCn6x? zkY&ISu!@X1dazXq^&1h?B~V{P`vyYw7yu6-VwfBZs*#8hkDD~T#q&GqbW2rlmCML+ zB4jAWgb6-Mi}8evCsk51Xr;tz7FVbVW<#{Sbd-t^i5M;5oJ6H$R?hSJvRJld+g0mc z!R=PsdrpvnkO1K{L~{@~Fsd9*RO2a!k=>-;R?MDJM_W7|lBh^Ff$K@SBC$0^a5bq_ zR63T{bBcSeg*x?Mh>GJ$l1ejdRuFVaDrK`(U3bc5*S6cuX0O*n5RoBX#K=mJtwn?e zo^G@GPRi_NYdxdcuXguaduSXF2B~m35se8rAxgnPkLz_F0zv5XW}vv|QsR7|N>(_Gi;c3tFaMbbd# z#u+2bn^Dn@%N}j?QdU1(+bcHq?KW!l;vt}-Sb_+qm}o{Ib7{^{GiE`pSp~Olb-g<3 zw<(T8HXsiW^0UbMa`zF@a-~j(Di!ZTX*AeWO2}lSTuvqljUtK+X|bfk5ltTNCSyp9 zA~lXmB(fRga{lpCN5}8n`+@Uk<^*{9k6)L3^25y3$@#}WT)uI7LVNUq=^MLh=Jw*D zz|23^>N_X7#UIP~r=Lwcc>J%~myf^D;jbLIxDq;i{p;tnPu8EQ*0 x^V)0n-Gv2b{p{*d^%~-?zux(Fa{unX1FuBVXD9TfhkQRUGd(wT<(b8|{|9~T&uRbw literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_diag_3.png b/resources/g2/track/corkscrew/gentle_up_left_bank_diag_3.png new file mode 100644 index 0000000000000000000000000000000000000000..abe3379c706682bfeb70d778b0ea785d83b757f3 GIT binary patch literal 1118 zcmX9-e`p(Z6n|~nUHWUWM2&d5(*<&jV}|W)PYrmTmoDwD>($;QV1($d7+k7HJ!cp} zQyL|$soWsLbW2MZnM8>*uukHPYn0%sM0V2(DVz{AWl<{zjkRi#uNi~S`}NQJz~}Sc z+}NnAr}N%U0O%PWa*j9aKr=|Ap_yk7uj~dez}U#K!RFY~($d=6YA_hu+S=ON+js5S zg<+V{Xzb|duvo2DnznNsD~h}%c@#wshr{uBGMmj6i)*@GZ!~B-unrLTE|16T_Y;Aj zJrZ@q6GA%c%@>rC7OhlM9EG_ZT{3S8xd~MwlM1~Y<_d9lDJ$!%k(!>`t`}W6cqs_5 zpo&;p#tKnWIc;u~a8$FSh8OLq2otQF(zqoWl2wgl{I&?qNM6-5iJXpSz_>ji;B7(X^G1#q866Q zaiy9G*9-A&ErY5>lbInYH_iB1E+C3gNlF9)*=V$oOlrAYWo@lquOq-^AmbRFHgS1e zEK$A+7pZzuwLreEt~Ii?o$@y7qD&^nVsQ~xk+Mq;hr$aHZ*y5N8;z}|vwBf$R9Nux zm?D}&UPAR#i6EPai1~zXH4`cq618%%(bz;RfEz#oPysRks{mCDP!j@&f(pu{kX{x@ zkZFjqkaK}901^So78IpXNJGlxf*GV%l1m?1vJS^cC>7b8SL;h4Ol+VPp zVy31SQKQ1}Jjwym0imWBktW@3;Nf7RT4fUP+fYg+&f^jNekmA~X?vKl$5}eV(FNYV zCQvoE6?q91B2j`yITmSr^Z1$lUBBP@fmg;yMHslb{(Q6V9(Eo&HZ=F{jVJG(dEkyW zpW80!a0x|f9@x+gnZ_K|KlW8VEUI00BV4FvaiJaNHmWlVR2bp_WKAHEp|CMAa%z z1;T7FB7_);h$>`Eqhy0o3tYzHa~097OSYE?(Rd^pW<-*g>A1ovSs`1Line0An&ai% zPN}t1^|KHVA(((r8VCcUi@|7_h*w#~jp;4b>>3VQ6Ucx}^67MIO+G(!C*8L7RiXrFe)!(rT(&XSAG z3Z4K+1f&F!P9al3b`sUI$TQ(a@HFro!~`rU2elNLGomF^u2eFvYjrv<>TBT%pwi>4 z5fsdjWD|Y{O=n-uyAr#gu_>Ve5FsmnVFtCHF@rj#?&pDdnOLA|AJmW_QvIh zKOCNKeD==QtG_SYUnhn(UEhKI69?x0#jig?U47x=nX|8MtR6c5!}d>$s~aKVgG;wo z=dMle|4P61?njruUwzQI@X5#RbBlAop1$~PWuO1^<$ngw-?4so{I|`Y&#YHYlh3Xk z_c{EbFXo>QOw=Erx@&3c&&k&wn?MKOTKccNSewf&d)ku+AHpv!E$l1Y{^ju}ya$%P zTiz&ab>5y&-uG$q&Fd>Kn$JX@-qN=>{~D04oDGcJYroug12acvr&peO>An8}%y-JN literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_1.png new file mode 100644 index 0000000000000000000000000000000000000000..cdd60b12a518a176d91fc16bb9c4f40342a7c900 GIT binary patch literal 1259 zcmXAoe{2(F7{_1e#udiwOof8YET))4Z?otHj@aMh0~b@^0u2;b<4C&Ez$61+OGv)YuYaEJAD`#> zVp+4TdeXC#007lZOB$A!Yh5|aT1`1$o;+<301a5SbVXx%95-&<`0?X48cjt-MP+5> zgb5Q61kq}>6DLkIn9XJ!w@?(xFm{%83Igx*`9h&cJf29W2UN9KD&ZDDS^;gZays=K zXYzP0{(vKDiv~M;=J1LFR0PcV%lZ| zE(~}`ATdacM^XV@Hl{CSjIdyVB^Ml%AWWM9paF0p2(QzLMx%tHQLD9&ru*IQtSAme zA~2OQ;(9Y_u+S!}3$^i>L&RChDugMYY!4=xXvURL-6q0lv6-z5W@iZ}Pw{@*A8|zz zd_ob^YEUV}a-%673G@swxPi$FPzfO-23s6;rbu3K1ad;OD5YT^jpeupHeD(WK@tE500ICK05Smm0OSz>%c3dh z6`&l2YL-R;kAoly5;maH05Smb1{lC$l!gfoX8cf%g2&(qV5fkCMmW|Wda$5mi$&RF z(x)hLp`gIBm(dMyZxtyS=%~q+KzY?F6`gX)lN=3Y#u7Q0Euwlrm=K#q=Oj%WgL~a} zN#vqIF)0U?v|Lcru#_Y0c9;NA1rU~5_{(-rWb}E%`8*L0J&};fP);Yqaje(N;}#!b z36Z!=;VHXifW`_AGjy4th{7-q6C_mZ<>M#nt41FGK-=@(lOFw>xIEUE8-Y=KlGwkq7&F?`WEvzdP5-ZQDF@FR?h%nw~pT zlxFVgxIKT<`=Ohg2ex0WCN5pLeu6uH;NX-8Hx9)wm=;ItYJ|bASY73e1JCGMnU(B2 zd*->%?5%uv_}~^#&Fn&?za2Cj1eQE#HD-TnV2mh*I{_E@Mo-YTN=t7?aw{+j#HLYvS z;r9P(=J*0nRXx2b_RrZ>-=9z>Z~AQ0lGAU#+`zAQ$Y`(NZGUA!Vb81e_d8C49%bR@ zzpDFRGon+^Ylkn^)}5S%arJk)hcNB7WBk!mCzlTO9of*?apjjSvDVYIM^CJd9O>+M zd+Wks^N!im*Q|ERhTiV!Z8Z;Drq)&*{$Q-Lw#z+o@vZ9pD^In|x$)eGruz2|cK5g3 z+ws-M{PcL}_D>txOIMHYzBPxN`y-5RI3yl>V|49rUGqQs-O{v*@9UXuIORXAjo-X> aSNCW*`Dp#EMN`VeKvQFL!w-vEw*L>Gj5inn literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_2_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb46c551926358555c122ddf35ebcc04faa7ad2 GIT binary patch literal 1043 zcmX9-afsV=6n=NTyYyCOVU<-a(m~OHnTtml8D`m*cWou)|COE3-n7oEE7V zFuG1VjZ#LD3I)T~KZ5HY#|Ron(Ww2SoS9VYX8x$!X_XU-7AbObKQjj3dyns*_wn() z_x9RqdiSpTb^*Zdl_!_hgLxpRz2Q*M&#pfAH9!c~jviYM=+xBI^z?Kn6q=ctnVp@T zo14QhEF2Ec&(FtGsT4(#9LI_xFUwg~RdijiR_o2C?YdpxAC1Qp2`mEwAIWB8`Fyfa zBuizcS`!*g$!Vz_uiPJ)9D!w+h{DIUOwy3?x=L;8T&tStG!?&H8v5pBk z5V3}WwaU?6BR1|N(2zu93GEmNxhVhvK*BI38r2dB1IJB<*%X9!F4xnv?Rp)xS_vwa zV&kNcWF$PT5E+e<4MweTy2V!<(dXf|u#6!YL)8RF~?uVtbnFSG-}P zKWRl-h=~x-L9z(AfzkDNx`}67tm0+LebpQpF4`1`m`o=MX`-BA8ZzgoqNmHfsyeXr zQL8%fEHrSVF&ZZ_6rE$af+&_{xmGAN%jH(R?%8&~+Z~NY2oeh5Rg7vxIVT}@h+Lm5 z4YKC2;Eas!xH;VEO;Ci0M(KDwolJ=YDKm`93neL7R&16l?MBmgy>XufiN{nis!2&B zPt=O6RT7k0mASy<>Vakr9d!98MdMMCJWHr7`~c>K3(rvmcD%F^PoL+@^Vu(d~jB>d+1R`cS&r=<(i{FS@+ z{Bw2TrNbK+i(lTzUORdA=j6-u@fDW7QG0D=VR+)M>*;f1`1^w&J#~3A;_za3zjse} zVSoM6n;##K{P4_C_447*LcbhYIyZTJ>FTG>A>{$5{NnaIo9wq|;ECw-?GG;;;0_<0TYUD!-=Cjxgnja@UtisNKmUr`zW<+KZF- p^gkZ@@3C*Rz27a5Nldobo9BPu@a})>r@#!XEUzwII&$)j{{e*m#Ss7i literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_2_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5f6467acfe016cb1a93eecc94c31bcbbb8b156 GIT binary patch literal 996 zcmX9-Z;0D;7=G_>?p9~Of^kO3pql~XC=w+|K19vkx-)V)FDJ$8hbVz7tOr4(bkYyu zj8Y^YB3GnH!NLMo2(IW&!pNW>0=p08h;l;JfEB7%*sv!N4!LbVGX~H5zC2&v=Yi*a zKUrHXoIdsBDF8UVa%pKjooCW|Y+)wtpC5g^3orv~uWc-+bZTm9dU|?hW@dJFc5ZHN zetsUqu!V(%#l=M;m&>tiUK9mIkueH^>TldwR7%0N{B zN5MKe*0b?JC!6$1G|r<$MJEnIVGckBP%%u$ag!t+ns#}9PnP$~<$-D5ZnsgdN3z+R zK;&hLSLuSz6irrhc%vm+p412wx3Btfnc~QNA;&9>q;Vx()a!D+t+svLkIXP`MB~oz zxQ7dnRe&f1RRh|=xHeJf(xslDM@4&RxDzKtdoq*NII>z`>>}UM#K2G@OB*zek!MYM z&Ev>JqY%$>G*e``vLIF!#n!Y|wc54qUb`Ln{_yZ{GMOMCb)cIV+rh)P_PzFkjF~`RZ-YlS#r#Z+b{#K5ry734pB1XBnkO|Vn8U( zqMph<1ZmY;qY>9?K7`Tli=~oMsc5yD&gLyH-xOF+WP4KnP-e!(98xJ{(x}BEUqF$R z9zS;>^Us4HcyE1GftUXLX)7hWD@!kLJn`B4-|swXoqc3>?LHcQdDs5;m-R~*m;IeP z&)@p}gU)jwUAVil{qq~e>&rh}e&@~eOu)6L#Va=sK0Q0Qv%PrkUS{+4r}sABrM6m+ z-}v$J*9!;XIq2-3c_xg1+h9gF-~JWb`AS{+mcIWg{>Szg!NsK`w{WnDuIA2PbrRz5 pr|vCYPyWkBJ6qC=FWj6uy7t{)v(H}nCUplZ%d1P*UU}=o{{hNsuT%g4 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_3.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2d731babb0cfad0a7bc04e910670f1a51cd0510e GIT binary patch literal 1265 zcmXAoe{2(F7{^~2>;~IXMujexP-2N4JC@E|@D?s|j2kQC%x-XKfock#tYL*5=Fqwn zY@lkv6HY9qVhIgasCpYURH#r~!!9zk;we>1c9@#gteB|<8<_&;wS?sR{QBql{_%O9 z{XN~b`k9Z;1OU``t?F1?sf#NyucoS!TNVr+1E31@JiTsZWt=i)%G9Y-tE#G|O`A4- z`t<7RY6L-QYHDW8m|-xR%@}5-D3WDqj&leC@Avydp-4QQRFtfymC9wz3P=Jlbgjdo zce_mWu|x?X!7w8(SI*~~ zh(usIZN&6u(qLswgwtZkO3G0pnw2a5ko<* z0Ocsua*PG=7zmOeX#*MqAPXRGfFcH?3{1LVCIGc4cmN&;GzIJo;^quK4;qwgu_%{H z`Bhae7FAgBGP(ffttBM`6E!)L7G5Kyl0zu$;$f8YThM0E875fr{Nj8U5aHp@4@&4<%$Wl*7Tg-JI9UV^%+I z4Uw2kVQJc$WzeGC44o$Ev%oM0lO$B>%JJhZwYMMqz|OVZELc8%y|>awx;om|wHGqmocXZ-?GgXV+|P$&sjRz!{`35h=~8KN zpv^HcchGvX)p6ozqW9RcJJ;ereDU)0M~_^x!3})j{m#UIj1?Nkb_+8<{cU{rM?J%X zYf=MZe?7A(f4uqbKdC#B6LZc4FaIkQlUHxlS2x`i=(2IEx)wr1z8_VyjjuD(TS*Q#qBTgR_A zG7Vq0AMa~EcVxKkW>az2{6F?IfBan2>{Ev}jX7U>Yjo)3{ecDCulNT3f~fR;Gdh3S z!s?R;UOlbAE9D){jXs;Z_sR0M0peM>ew)zQxmw)VGWU_Q>+q#p+=K0N0tB=EO6Q*8 z(B9{;KfK@a>8JmMqf{-d0RU4wm)lp?>VjI#R;y|m9sJ}d04mVa)!SYh>+0(2>+4l2RYOC=q)C$+ z8ygV>QLEKWO-*`}$%LX-g1~8-WLX!_bAG=+9F8UusZ1uXD3xjzwF2A*D6-k*(s?{a zug@9?+QJbkmSEB{pUnk}C5f;gPFpia>IJ7!WX(|?9q-FbKkFG=jk(n$42UHb7B>Zg)WtMx#+E z%LY_u!u3|lXk*L{&f*kMRI%{zki9pFEmA&bTn6DJiC}0jmQXUe zY7qwviSV>WV2q;267k{j0G*Dw2jfCPj+6_TYIPLi05}2Q0T2O*1270c2?4Msihw>I z#wDl}C^O(t5W+#q0Tc>A8bD4DgD8|JnDW4E04frA1Ret<0h|=#VfBL75)vITiA|^d zxm>(l&cT|O!3|JfGcM{W$;hP4oMICzu6Wg(9uH?HQbky(m~{X%A`Yv@g&RFI>T{E# z;E_T?Iv&bp;$AP}$RMK{RJb(P!;?dQ}YHHDDdsoxkvN!z3 ze+$Ujy<0l43)0tE1(Fy|c2TeCR~x{ij|fvcdj$d-VO? zouiYdHY}dIXP|G&XWYXBXY2pIIt~2#=Ivqi)rIoDb?5fpZ921Uc+2LdxbLB++*u@%wN@_RTFEDUC<_9KC|%86tJ#-V zSmn#=lRI~+j$GTOoxW#L+iMSkg^_bZ$*~nnmaOV8pF~KquUJ_>YgpKwTqCxgzvFdo zTIslVqm5gYKGW0jFyHs@$h?b2X6sq)59iN(^IJ^a=9{=ZbJueZp8fgIUr=-N7zwf#D$v>9Z9lzi-R}PZ-h3>f literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_1_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8b884d17a174c4411ae5d81da557df12ea0dfe8f GIT binary patch literal 989 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_4.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..5551b4b43a8a699876f16b3624f1d3627acee1f0 GIT binary patch literal 1278 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_2_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e016902d7f0393f4255699337c8263fa82a08970 GIT binary patch literal 1024 zcmX9-Z)oFm7=HIR+jYCbRVZ4udc{QzTMi@UG+^$`Mx8m9b2%uO4>=dT3RN=6Ns%H! zixlmLY!>W!g;fYg!FVe;B}mZ-6{-}MgTd92!yZriqiWXmKiDp-}y=;10YINQGfEUMR`ovO=?5=`@;N+YS0G$ULTrQC&_N zIiglzt&-TPWjmJMb85q0I|vRC3y=ZO01N;NpaU?#0EG}ZRM3!RBCjXlpi)p_!A^rG z01^SIaa5*|DIhzCx+Ub9a5s1wcn&fGmQ&(-o~RhM@2dSwX&aSnVF!ebn>u7|=;9O-3a)nG>l(mN)dAS=W6oG`srI2=Yr{W%w2x$tNR}Mec`2`Ilq2s{@RU=XRfRr9rt5vC)e(` zi0^wd-(KJRu=6vq^~BqYGqc&v(ph5ri)SBv`jb=aBK>M?Zsxm_*7N)HACb(~e=oC? X|H~UoTW@_9I)~+@mBsBBE`IPodtkX( literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_2_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..651ebb0c1d8ad1af682f5f33af7f9e79aa3d4cb6 GIT binary patch literal 985 zcmX9-Ux?du9RJ?m^j7YocG|JZB6OIC-~tOHY92Dp9res{8Ox*(eTWdT4^;z~9TkH{ zS0s#pLF(v3k%B>ri&*d;f)|UD-(K+}zy!{QSbg!s6oM($doM z@-l{DnM`J7WhGxM78!;X1YVX!Rjuf{)@U?Ztxm7!hv6`er?VMD1J8jZW-FCktwz)h z+OoM;Tk7_dexMH`dpvOk3M+G2P0X8R!cobN&g?aWpj969w0Pf2V)tkomI|OyQ0Kvs zv95*%Ha_a+W`hDsXf#vMv4c=p1dsp}4AXGjEEF7)bUAKMlJ=|Bk!jxPbWji!m|T(1 z(-OfcWJ#mSCZjr>-WD33*zC*hK=I=$!4~LJk&`J=Wh#z!>V#-dqH-!*sFx_a%ym_vugg(G9kuj{*O&&a zqsT*(5YMqBRc6>KFVtn(R@HXB-m~qX(}{e4JRDA^Qv?MK$QH(QaiL$32UK+|Sd)sI z)caFsIO`?Hqa&21aGcHOOGHtoXqDr1QL>bDnbEVG``um~Mzb*wiiqhlZYqRRquK`V zS#rN!-S^B<&`w6-Y<36n0A&Cjzya_8_5mgspcImT3>|qciboO&8Usxp{1U_xAQ_OB zM>d083HdcNuu$y6z2I381t?2cP0gEis_B%vuG;T6qR2~<2&GzuDlkTtck+@;C_bsh zoHMO>vwHuiH8}RiXf!2rz!F%A#w$EglNqBbI%dsnntiVsgHVCr{UYIV?VS zIFP>n;@5vJzI)-dEjVuoKcBrlfAzl|EV+C49RGRd?7wSt=K#*U^U98OPkt3- z_)eDH<-WVTb^f7SUt%xZeE)|}Kf0NmJot&XpT~zMv)z|Y&zq}<5A06X{{Az3^4pI; dcyD?8+=XKJ*6y2Uo=Ppj=EnB=XV1QP?SJRxq@Vx* literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_3.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d2c6ee7d479c67662701a6e81f74f09b359ad0 GIT binary patch literal 1207 zcmX9-e{2(V6o3198wE>Jv}7e#R<*>#G&_E!tWdYI$-?cMzZfR(ADt*2cQJy88P1hK7d5#>S?mrsn2m z48vMlT3TCMjTVcAAZ#>Ev8q_a_1E+rI4LRv8~QBfQw;BfF! zAhB3dz_MX|A!(@QOh~h#Du*T|gcJ(^1HfUJpw|aXCdq0|*zH3MGve_S0)fl%ILc;C zguy}?ZH(E@SseoI3J|`9)^h^!jq z3sJEw2P@g=ges%5qBoFM+(nQciuSQ=nCD|YUn(5V#^Y)_UCQSxl?nor0M;l*B=vO0 z#O82Mi4K+B3C)+ONcn0?n=DKq9j@1tMx(=QVR0L8w~J0D#MPGhQ{l)+GF4R6YKa2Q ziHWQ}z?mg49`jRjh|R=2BXXdSjcEm?TD^=Y02hD=AOXk#BLHO#Pz?-?{34PQs90dE zAP^9tAnkx61BeAA7*Uu&2?nLTC>KJ-1l%>A1SbtH2J`a9fDeyIj%0$*WP++HYnqB` zTqX|?ejOzlnS_~3TZN)ss<`EoVVLDdrJbfPq%A|O=rB2=Th2UE}=E0@Vw^d7`qj&{3Qub21x1;Q32ZBdGlX(H>i zNSv!96aox4MKk)jhZWb0_99vuKUs>LSQx`lsyH#B<5|HkP0(K*`87cc%ftrdRUeqrNLw(j~K?&@2!@&}VI%w5ob``5Ae zbgyj+4>pf}b0KA$9p6~@>Q^rp8l#W&K08i&53fEp+}x$^`g!2__y3-U&C!^>Eq!Ct zZ5NMk*z(`@o;CE7U9&vn54NxESU>aJ?cNJ#2DS0MZI7D2zOV1fPVrFwB@xrfr*lTDjw? z;muR~PaL`ZOYZ~NZ(Y4cN8Nz%;Rihj7Ofq1i)Y)1H|S=6{>A)bi`ZEGfpuqgE7RlW zW#6X0PtL{eumkfeOFxR5R$sk!b+PG7nEB~m_l+a_3tipU@9a69^hR!=L&`1V!MA@n Vx8%z4v6}j@ytBLG@Y3FQ{s**P9M1p% literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_4.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_4.png new file mode 100644 index 0000000000000000000000000000000000000000..39169932b8bab1d7f9b5aadbdb0fa371806b47df GIT binary patch literal 1298 zcmXAoe{2$G7{_01D`@Mk6&+I+u|1V7r&4=HVwj%mwZ-<9o_Z=~n4J@qq%@x9H0X$u z6*taHAF*XE8F%wp)S=bEu8Ocq%GUW;#bIcHOM{4rB6te*N=&|M)yl z*P2%2w5hYF0sy8puWndZthL2hs3dkAe4-t}x||F~KAom8=@QT4zKJ3`SY>W{%|Cv^&5C zqFglP6eVve7s`ys5dtU~pt1su186;ReL!W5Xw7kgOPPcWAIy71c#g)D7QNbT!~~Ne zWFccblX6+oK0X_E<>S8bR2XJOM5)(eCR}eNNISy_7K`6*j|f6M5J*L%nc?AlJ`aJK z16rRP4w9JLdHm zLqSU{=1Qf)xm*esz0_8KJIV=6#E~W z8$MjWy6eOS(@}A5#lu%7p?syVwvcXFs@nYJL(~h9$1^+m+`xsQ`!DPMsooL)?LgJL@#^#6s|MP87Hm`gw4{}&sk~O%o(L+o z*C1b292}iheUg1=sPpi}qgCqaFY1UD(|cdky<;$?oFjw$MMHa zeKW7k-+ia8@xj@$!I$07&-}oAKREa1txvz(dH_BBw|)7pCs%7L7FP|-{#iTl^kaZCX*W-`PD{v8sQqqW9v;Gmy4>UfpXs zs5!Ow)c#LCIJM>Y(6hVUvakND2uzGE8Q47bf~@Ivoq*rM`e(A+`KJ>|PoEXr_^4-E P5iDqKY;EYT-_r3v*aahz zRGGTPH(PS2tM+`OA6lcaBhpxbPwNtH7D!v8+6H@26a8kP-_@hT`Xq8@(;!cPN<&2e zTfsUy=3ALzCmZ((G+|Jzq9YrjAO|1=s2HYaGA2RT6y@;zfh-@EN<-6p*lr`=C)jLG zz!{n3RVuI31(Vfm-e`$6S8DVWr>}ZZiR1_-pW_u;(zv27>UFu^R@n!bxW| z^D_cu6~IeCR)MlHu8rrrRM8jouwac0XKDxNK&G=AM^y5(Rp2|C*fW%{rVX3M*sV?d z<}7s4ILKrO znN)gHdk}XgN5dIP)0qs1<9RZt(2U0Oh9uY3WLdRqH4Z!7CyIQR_KPE?>JhoR|`XTG6_+lMU;T8rUe_99a8lu zJ>u z7WG8#DTrFNH6C-V=2IB`zE~_O<+4_->MT>^n5MwGBI`@cK&B^!98yVSQmDluPe7rR z96$F$`q7gg*xT7wVEvz8-$=+uTbnQMu3f!x6;;Ef8BoR%&X34pWmOkZ0DI1Tbn2MZrrl&z5d%z_V=HhetZ4> ztN*Sxzf5gE%5Q!1_?=JJ%I{uWx$;GQZ=c!ucGdXf(%-qW1@6s_RPQ?e^S#p>b@J@j pkMA}f{7wu19jy5u$Pcd1fBaVC&l~G|gTxzbo!j30ZsXE>{{!-ot-}BS literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_1_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8c770bc14f261e292d34dc35055c1769ddcbe5a5 GIT binary patch literal 1083 zcmX9-acCQL6n<^mUfNm%=8v03j2iU@r=0F6R~N=ruO-Iodb2mkAm|AoveTi8E8phH7L!^6WamuqBXWOQ_N zY-|j}Ft^)1K0b~I0s)$)IF1!XUY4V(s-#k>T&_^57^c~@ZKv0xDPV&j@RQM~Hy-yV zG%B45=JGDw;eO&1BrwL z3%ZDv6s(rPe`tBV+~u1ON%c6pttA^XUXp3Cwn~vik@F_s#FuLU7sy?wn z#@bxE6D@WVRY!03D&2l-8%>fP4};?&e?TNDIT%!VAuSD-X_ZX2UaHup)oZgL@t7)l zl9FGKlX;CTr^RYMRxc-8wS2c__IfuF3lITN0d#;eKpmii0UAKykfx$?5!o$)0ELDu z3q}ZR0gwnt!BK`rMFAOc)JP+{2)Bc0faf40U~w5wCdjNFDi!5wHDy`lZr4HsEnf_1 zZIab-q3D+kLa~Fo6D{`=)$LrPZ?sX%A-ur&u@L2nvi`V8YcXC=#*5ixwVbuga@RId zug&m0G630t&>)NSK<*BFDJ|dWF!|gasEq~}jf(NOtZ52Or5Gy5(q)dW@l;bFyO98r z{3uDFJdF$%S^VJmnI|Uyy!``5mKH^r-TLX!fczewduIR4JEy-3-(x;_*U0RDXgYtL z8hdqfe)#fxYfBrnvG()#Zux<))Vm*g)46qVJn&0u=-sUk-6tPAu?t^a2>RUGsZ_ZrVv3tH* zafs)eSHFnL2WOY2H+FR{@yfj)6Q5pIPgM7!51ii0>pv))>8oV*#iN%lJ}vxXZ#}xx zwYIY7!j2~;^YqFaYHYddt@}6kJiPOTm#ELrU6_I&zfGJw6FGW(dQLg({JK1=RkU08 j|8ej&OFGb7`}-8G<^CnFd?UR*Fb(1P#ko(OefjwR@%h_S literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..614d3002c8b3c44d605b67200c71b3b3dc99c221 GIT binary patch literal 1143 zcmX9-acCQL6#i{(dTF~FB+j65hApfo93#`iop_E@uQe@KdhM?EhSA-&n+BWdi8l!2 z+>R~7umwD4l(5E{j;lm^vcpxE&8SgMRwe4evXN~kM3=gNV?>GAVa1;rgYUiXy?@^K z$M?OXW251|p8I~Aq7lI&ex4XN$+ZPN5aXduR6vr{57?EWukw|1RInyjyR>g6etri{v6bV?SHxlv2 zVu834N~Xw6md%?&u_Tx6RIRSl7{Zgi65~_(fF`0j8DB`yr3_y-C1)|&aP;M-74`!G z191vy9FmuiQp!`!ds}5cY=mG-fGZk=RuBLd00BWHk4N?UH5AoJa)D(RqtU9W-pJ)( zspQAKLCP0m1Ehe4C5%^bQ6uFnoiLbmk<-gU!HEV4e<&OzIgAmBh(t?CHklK01*u@G zmXo#{`Py>HLjf-bd{Gck0IDHG&KEY(NQshcK2?+Tre?tf7W0aPKOV+XJee2iqRiO| zv6_+VMxt5DEZYXGTOKcgVmwYnDLT$^DN)SE<7O&V%H`}rp;oChn@tG(5sa0BLW2L$bdohoP@cF`lAcuuSl9U-XDYTC%W-7gyHyz7v)hHk^ zh|GCZA)v*utU?({u9%H38fvwaZB(sR>jtC%-~o^U&;T$1SOlPs0N4ggLq&#$4xK8C z0tp9c3KYV?VFBa-lzcFSL!E_%7%V5Dql4SV6M&%s&mu9=r^d0g7S8Kpv6!%JqtUQo zTgx8>xYA2$K2{G11ypiKtr;;|@#1o(yi%yaY7_MWB7lTLo(L6)akvs?G&QED)uNHM zEu-OBuvH@%1{MHx0EBHXl5M#=@F$dPy-s8^cOaL`bR@#XVxpo*cql=HG8Asmc!>#B zSggSZp%8#73bQyYP|#-D;U_lr{(1Wc_H7&Gz?0W6zto;L4i7vv@zC)D?~K1?ZFUcw zgO|=6y|VD_nzO>Xq0{3VmGQa$gKyq9yJ79sJ$J7=xpM4W@~g=;r#>I*T#CB-`kf2f z`m3iuo?Gg9@a4bbC)}5|yfLypzy8_fhx;$id!skIUAsA#dS00%CVu>-ezSV~p!J$Q zH8AsOw0~&m``M3t2e!Uqoq6QlgZuOR{I&UM{n7Bz3){_$H>VFZFK%Agd;WN8XZ`p5 z9KZITP2=v0;~IRTZ}8R&na}>1J5w3E+IP=;GvUcsukgw0+n3EHa@X9hzow?2dHwJg zyT6=#e{10D9p2%R`26(Hhdb0C?)~>CwCDP)erW7*p*j0v`LVmU>@!b}?CHw2ruP4r z3a*=zYe%>V>o7z<*?sPaX?lMC%{UvMxX=y~0Kw Cy82!K literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_3.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_3.png new file mode 100644 index 0000000000000000000000000000000000000000..95e364aa3c8fb442b88eae34c687ae0e2164ad36 GIT binary patch literal 1329 zcmXAoeQXnT7{`BG$F5Lj!9ofvt{YXFd4Vd298%Z~Z%eloc9SbsQnbjyDil3PNvbr^ zN!6~Dc#HxaX{7224V0{!nbgohm9h*{;mih>(Tz@qD?*@=q9eThEFt+mZ~r{sKR(an zX=&D#O)8%R04Qs0s9Ra6wS|~178UXpujUj0BG9tjP+u5}ii(Phi$x+)NlD3s2@^_7 zOA!PSi^UTsPL!)uDh$(*Btg@9hB4V}tjp!{`-724G?5rcr*ru{rU8T&P zD6kWNqmdAc#J$o~NS043U{(Y3X84GMFrfl~0>F$QtW@e$C^)s6*J`^ds?TCcIi0tI zK^TuKFqw*wYbd4Gtk$up(TOpf))pXLVZAR#^GS0wZBgP1jZUSdQ9Xm3Sdw*9?w~ms zWut;Kk@gAMP-Z+XC4h_uatly8fSN<_pj;PGo8km37`+)ApW_m+n?hv_uCVJ+uTdLf z$e4{5TujPu8x6a1asRjwhNB6o3|FH@47U)Zou<7E6R_JOUT-`Y6r$10z(6jSgFwLo zwI9JkQZlBXlc*&_x<^fX)*j1o1NlhyQED7YP^lD`%XLZ>jcORJ)~2W2=E5>Z#Ovz| zMbZf&pCN!*kJxCb)2!sIXuv^)-E=Hq=?gnk@jy0}$mefE0stcbHUKyP!T|IEFp2Upr9`tKR#FT&$A!cwz8Q9wPROW3w@@s zZkeIMbL8OgzC@+?iyhFI434cbO!=?%?FF8NgBxRO);Besu6UvI*y`;0$LP@M+{KU2 z-uAa$Xj&AS<+$ZhzIJp&bth_>^Rxl^4jnUs7cI)pquM7Lq#mxez@ckex z{b*_5N##RHZ6bPl_}o)Nb4PatiToU9r+yPSv%q9k%)t*RKX_&Byd6bgnUmk2>M~63 z-o5pnr(fK#q;r?>64A>nBB%C#^ka3C+E8bPdY4)J`A&_i$-_M|Je4 z)uMN=UVV?5_M5o2V#VS=W;gxP>iN9NxVSoXc*`1I{H;f_OniOakG+HY``bSo>i_-B zNMqfh){2h#Qw}-y+!$_sa7k2GH??~~sciP~87H^9rppj&TFbikFVkMow!2Z@e$jFN z<+EGPAMJfHx%tkkcWeJ_ketHhZ`eEbE*$2{?scx;UEjRDcS!X8rOqSs-;uQ++oLES zyFXSj#i}3NyZN|nWJi1X%*4>8CE#M!g$*bFy3$}+zOnK0lIolNz4NVDdCk^Mo9-5o zB~8axM8(xCvMOHzUcWgQ?yC88T)b%Khu3ZeZak6i{A$LNLk8o93pJGwY7SiPvW#I> wy2_EN8))r`P-X1lOCz(c`JMCT9e!NwZF?}&9sKfMfjeldZ?5ZlYwfQ80XD8nQvd(} literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_4.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f200848bee425b17780ae0753545c1215aa65b61 GIT binary patch literal 1328 zcmX9-acmNI6#lieUTdXj&@#n{9Xht%9GjO7Gpc93R;rj@?R8>hit~(2soqjpP+5jb z9aUy7hDExug(};yp%t~8ticUaw($o}%y826R@tNx*P5ZAlCIf)!{@)YiejM^1@=hUcoE&^myfC0C=EfLtA5UEh#A}EiL8ocx7c}<>low zX3Rhkq@tptva(Vnl}a&8P7pXnscBkkG%_}u&E@h00>MZm!ExDq9+LxH2}pI7Rx30Z zBxZ};?ohhiq%WWgg^jVeBbD|ND56nTF=~-jBVlQo$A}Huh_Fi&3ou;Np5eTOY(ymn zIuw|3z*2~hLBb9}(kINv#4sa=c^#Z)A&f`?AOX-J2qO?!#bQ<_^D32tBpKD~lUD1b z#{SQVg)mSl_RT|xd&98QbC~r&`v<$)6NxMhq z2{OUBHNrXL8DFXp7T`cg0g)a^EI`I03Xez?kZHp>6W2IWMsJplz(Eof(h9Lzg*r4! zA5DaeRNO`I-m@cs_*#ofVG9Q z^Q#j`+ot_j);>IR_WT?Dt`Aq7J3sYF(^>bAboONb{TznX{F~aoYI^;y9cL<3_3g*X zUbyhl#aV~D+cj%S`Mu|sOf`*sIlhpp8~n+XbmWI7=8lAYFAhy4x_TCWd+Ojfvfo=f zn^Lnk?QicMebm*yJ+wa6-|7`?9yz_@24%54xK{mJ@1C32x3=3lO>Ny{Q}d2r*yHK2 zOl;fn_uGAs_ZJw?#2+KOXW!nkzD8H4>XMF@-rJHhwVfKi@cHtKH(VQHUCYNb%f6U% zC)F~1vhOuJcjFgFjj;BB^i~w@7#*;zzOPv2KEv>o={^s51 zf_>G~!&|vp6M5*a>GApZd~-K1|1-xQik#uU`cm#*|2tzV$wDQ%d*i-ktw)nRecOJP z_22*Q%JAGp@2+}&$DF{d0Y_(`JGD`gJJ?b0Szy>2@*0SIW8k-x=t=WF$e^7c_b^rhX literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_1.png new file mode 100644 index 0000000000000000000000000000000000000000..160fd5113927fad2e8730120f27b5ed8af3ab74a GIT binary patch literal 1199 zcmX9-e`phD82Y@u8S?m zrsn2m1VLI_S{5x@WVPGv1mR#9n&(+Ta7&UH3K541sP*`%niU%$z5N7QFZ~%A^L^PXa6jd-RK~Ym2H{4Ph1l< zUCtU2y_76eGiDlCcwqGcTL54RLdLDm6z0y*qV5V8q(oWC!YK~72qfxv;$at+6qvNc z>p>wOm5OSxoQYO-6&AB*3yI+_g7ngipXbAZ5cB&};czA%*EOv$H&-r~AwWfdMG+!t zX3{91!@UJ2RCFgw{&ZQHtE5T``6@KwW;1EEI&F3ycL)?Ev0TVgTNX%#BQwdAk<}{& z8hBVl;?1(hrugt!fL23%I_8~G<$NYq%4aK;2apE91%L#A0)Ps@3;;z0z#2FP1|+B^ zppoY=AQB)#1I-Bx4nQ72(F(%^OmI;1!CVL$3Gmc-60i(#afnZ_%6>eeIFkt>oet`{ zS}N(V#)WzT5irq;l}p$>8YUW)Qg*8qf4UmYEocRpFJl%!+7PG1?51r#o(OnZMfN2k za$1e(S+!(jVWmK_EYtur0E9I!LN&T)K!br;u}H?E&miS;jN8rod_o`~5{@A0h|+}0 z5E<4n$KfTH9eQj~#$b$q8Vz-}cKqZErbkbIV0fUP2b<@A+f(az_4RBSeC6cH2s;+s z(Ax6>R9BDucXw6Y?_>1F&Y>4iUFmX+TvZRez6Fsx4*Uj(5}l}%X8}wKi+!gyVjxJmsU*E)co0dM-Bv5eP8EqxxCPuX`j5^7{D$p z>92I(ys2Lt`FNb`>)8M0@S1mzH2rXEuX6nK3zKCgmH1&)L;1N zSku1o8;Ac|vT5&%@v(z*E2%qsIuCwQ{pf2h>32-G9sal3J32AkJ+X!s2hbDe=0DTk z<9}ZN`DveX`fcvUZ2RO__dBc`%RAOu8{4IoORwHKFnjEq4d_z$*e!9kZKU$Xz`9pm zqYuwyj<%MrT;Fo&m%{E(m%-6Hr?z+R+_oh-RUO0&VY%T; Lzvsf%-5>rBt)~oS literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0d8a707f2974754eb35ef7994dc506bb3fe631e3 GIT binary patch literal 1115 zcmX9-Z)_8F7=HKnwpDTo9aOAXlSZpKNMp`$#v&)&mTn$$xFhsKjmNk^qh(&kA&o2Z z5;~})({nahuwWzAH1lLtrZ#ZKqK)=LBNv_8g+q(ftWh9EYnaKDpCu&E`|r#9B+v7{ zN49S9F6+6c2LP504)hH*>zZb)>}qS~N&WSI0NP;d=577Wv8AP@wY9aat*yPiy`!U} zv$GS!u&%DI?(S}z)9EBhH^b08&x)d7mZeA}l1QYo*<7J8XPWg!gLDJ!0gko!{nlX6 z5emDbF;61NWwL^vmrF*hQcW`i=JQx2)~5Izs_06|WEP_}Grd?Zc4o?u1FFELV-i>8EBPRbcd z!HgTVOl2{T(_rPn763;WTq;JTY~HNPpQk0m7putWx>`W99AOnHd&o<~e4dQR=rV6a z#BxHeYLR+Av1n+hTEMN8i|~h(GTy9BNTMrLqE zxAP?;P+_7~f4UaZ>*`!1TU#nGA`5}zl+EUKIC;V?dOR}AMTO?Fa5fe%X0m3%XjEtr zSWM<|MR2G=A{nN&D6c02MNKK^leKc8(YT6e03U!1paN(BMSv;>s0ofiVHs&@WR^J> zNF>B*$a%r!0P%n%8;X%A&7oWnm7>T@!)@a!U>WdnSWvVnAtJ7NGig!RBZi^XY6fa@ z*#kg^EwpOm(hec#l1z_U_iK%izL+R2ud1P4-FC`qCmjSRMV{M1^@pSOQt-_RBwo?MvU-R!#u`!;TSXzI18;F}Zo-!*X- z{kUz1aq8t&(-%8e7f&8N{=7Ef5C%faH$62qZjatLwD-aXyS|>{Pi**(?_E5GPoJ)j z-du%-PYi7zee}rqTgMh=FKi!KeeUqez4VLM+QsPyE{Df{Iz4~uqx&|3Hdws5{j>ew zx82=;{g)>`K00)H*K#>|_}$0PtUIMV#yq!f#WNk(SM2M zSo)P;(54@bzcljfCq4DUdnzxCbq~yMUV3MF%gEVp*Q1kvf4=62eQV*sdk4NW&RFo; z2r2$?Wq9W4{pa4M-ar5Q?pHG_$JXN)TeWXC{QDa*`Jr^)GIQhSgRk^n**S6V7sJ{c ce~tdv(G!nO-s<)1O@&~ve@oxYrX2_W2N?nF3IG5A literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_3.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_3.png new file mode 100644 index 0000000000000000000000000000000000000000..aab7785f7fa114c167a0d5c1fd0e1f8cdc4dd272 GIT binary patch literal 1294 zcmXAoeQXnT7{`Bm?Z%iz3Y1Xc28A5jU>T<#=75{DP-@K%cVO8%EO6PX7JDQomT)0O zN+`3z1F96#Yz-Ezp+JQ(>ehu4J2pwtQwJ$>N`V56kWgna1E%~eA^ARU|2*G6KF`y! zve8gGZrV5iK&^3wzNuI>#XzdcirM(yfDwQ)u=1@{%Zg)3Nl9sGX<1oWd3kw7MMY(0 zrA#KPs;a84u2!nmY7EorbRqDC~B` z$!k4c!XKc*QENQGr9^Kg8`5cHW}=2QDP3knV9+3kb-Q&5zd03Ur6EsF3XSHI1{JVs zfRh9QEeo@LP z!bC!aDb%D=OCf|6HLx193u6R=3+UVtlP^w(Qr4JcLvWSWpeAUIiNP(bj`dKUpfwm{ zW1=f5`NUi}Gn$Z-KtThg4In%~1sNVx8ltErL9(LRo8dxvAql%Fje@~dPJ_m4Cc=y^ z&e5WqN&C5M#GOz0N5u%tCglno)tE8dM(Uh2?PZvN(;4-86TzSui)Ds~^Z7gkDi)xA z85Wl7;wn0&v1N3gtR<9l#`D5(A(|UYkHQ*_T#hT121HG3vQ9ZuGBBM-6#z$M2CdveB6b?% zZ6?8G5BXg2h)+yLa#9i&GPubEV*pA3!XgV#(e9a4Za$FB;sO6NajBHfVxjGJhUZyK z>&CTy5{u}tgh@M0X>w*Yv?9=j!T<(iBos}>fczk zaL*oJ?J22l{LXDKa@n;mH~Y2H@(q29=3Z(1^_@c<=nbZ4|5xiD&KO((Z$F%f?rS^L zK43mRb!2L8HOqUoEtB*gj@|p`Dt`Qn7Uh89^80UF22Z!#`IB>;dc?Or=<3}(!`nGw z$(ADrcOjeT)TJj&)^y!kf4#nKQ|G3x$0Zjmsk!{`tDiqIiBR1vTif6`zDm(Izt>a! zz>xp%Y;Tp~Jiqya>Ee~1#=GS1HOG4H55_O;pMI<9oWxz@+Yg+(ajnlgWnlIv3)?jE_*cd)#w_fw4?ngM-@fo=?nUvy!fd~K{8Fy@^$Sw{#M(<&mk&1G zKdF6rXweqp>$B5lp1JkSj}6;q?npN0UTtYde(t*4b+LZY%?I%(huRhr{ix;q#YeOE zwH|(VtAD^N159;9xc~qF literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_4.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_4.png new file mode 100644 index 0000000000000000000000000000000000000000..7e1768e6fb1c363ae39fbaac7c7dff44d561b950 GIT binary patch literal 1262 zcmXAoe{2(F7{}jjW!G(tCe~0~qbF9^NP#AtazF_;xXlhucF+S$tWZp49Tsw$YFg}) z1IjE=<#3fiCrw672NjBLR3}#Q(IeGS68P}sbe-EFyGizP7`IpkX?oP{&T`z{ zSPaUt9@82KotZ{0PNS7I**VO`Tf9*+C{mFW6VEuMoEydUW~;%%m?#(SU`aMahhol{ z#7YX6&P9}BB43d;1kf@-=LTp178wekLnc_o9?pB?B|Z%YX_MB4>wQ*J*ltO< z$ds2+g08IKEr`LAEL0Q`7Sb9mZZz33+)a=^h6%e|QJ*gv4$HBaB1!qNu~Ml7fu03M z0l^X)GNorSCU>3;6&&%RFID2l%E{t%wgQ_>8V#<~Sy2OHGP^7mFGYu()n$QXI5L_@ z=F&0Y`*a7eYzylxxFbY5c0kA5X zgaI!U<1m+{jex~KgaDEiy8KW`GB^0M7f;2HFDi|aqscgf44kp zUS8g{fBlm7-v(!F=9>#&_=#HZ)#$#LM?7<_FP-jLQezuBysmb5=hu_MQSr0aYo^A7 zHq}0rbnuF*_0B%zROp=N^1*Lbs#(ALbmwblu1uLU_{zO+r7u1Zj@};MpY~ro*>K3S z`om2ce|pQ#Kk8RxZtQLYJ-UfAhvuc~d)G96F=4Z`44>HS&$sMZp!@RS+_Q7Oe|&9t z%RntNcIsAf;8}SIcE0tr{{BS&?Vn}o4OG3ca*5~O-mnJ;>bCBoS9kR{Dg*r4-u|T> z@hd%@S3m6(zr9~c;r`9*o7CGjUKpC$dmz9KOK19eT3*3te|$tD%B_Lt>4x4eV!1H2 zBG`TX1B6K)U3#_QMy#%_d-D9Rs>jd$?LT+?{^aGU)zT*yZf<`t^XHEO{#W17f7Z!m zW^(JI&Px%WfA_q5Kg{{Xa(7_Wd#Bzx`A^^Cns;ZOdBnR9)2n9h_%3Tj``;heu3U&J Y@*G=7pU{eItwIB9JG$D>uGzl-f5VV1SpWb4 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_1.png new file mode 100644 index 0000000000000000000000000000000000000000..337d7c8969191cb91d4f6bacdabff051972ef1d0 GIT binary patch literal 1132 zcmX9-e{2(V6n|ScZexy;R8q2Hs`ihYT=XJ`9$3i@ZllbT9qtwyET$$GDWS@NCst{~ z5sGO{(F>GVk|HM@QcRVa5WPqfD{I0+YP`V`3%ig4B{q@3X$sab;@1+A&-?Yy`y`*w zd!KF?3-r$)m=6H`qw9vp+jXcNi+UXGeE#0z(*O?G@cP6^d+g}w=JFUEST? z^XARNFs!Gir?aFg`onlYB7zDfs(v}kCh}amDCm{2VMV;OhYa}q0>O!NNMfZVpVY#dAsMDp zw$f%JS8J7=47dbvN5C5gT*YY39Vpg?@`g0;%lm#;( zRx@%vpRh}rmYGNOveQN5M3AB*3>y=KlqhCnu|g_U(lpaBYBMvoZ6okVfM+l&=VXf> zp+ZDzY_cBG8?mCT&NK^+xoQjb5l$!Vb_cvZfgnY{U*`B^xVc}YYc=r zOctC<*sDf~Y@Ep_g<>``l~<~zY@=FkHg6*aAP67>r~r9@DS$c#s12S)aT(=xWL0?_ zBnr|D7y+<&Kms7ijZzfSd1ORUC5bE@9vM#q$3l?DqM}=g5otA$)5T&jVVe0y!$fT^ zPXwrVAEUZ?-5WM=$?~gqDBp|~Tbat7QA1T5cLD9i0;Dsn<)n z((#S);)SEr)L(D1%MQJ#tP-wG&rWV-&z<~e!QhYAS1x?^-{;nj9i}2@ItLH_eCz1? z9og+ysDp!tPyTr%t~hS}Ffopw-u?1P$87(T3wv{+?yckBnH~E-Tzh|F_`g-l|JgKq zf=dpJZ!9i&>#2Y}dTLA8%DVo}?u`ewNJQatSv)Yc^ILRg^N>_}X3;tEh2S1>=`HR0 pvagQY>GEFb>IwAyh_<9P#!Npvy%XED!rhh(Mn}em&#ZZS-~Y7t^0@#2 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b1a3d038ec0157c9a1ca10a555035973d9c481dd GIT binary patch literal 1150 zcmX9-Z)_8F7=HJM-NrJjRH<4+)kaTp;t`KwV_REWdwY9FM@MI8=b}Z6 zy1KeB4D0Uh?&;}qdA(kWB3YIZ1Wpu#vMj~p@l+~f7Pw~hoDnJ%<&vdVs#%u60=`~}b14CjCgK^Hnu@cl3%~<}Fidhd6t`Q$@vP4`#q+b_a9L3nG8t4X zx+$lZagn^o7sCA#5l|>m^T}y8u5-zPkS&GscGyF^Nx#=85S&N{C00uCiA*Sym-3ck z+DWUHt2B!a2Al%8!r+Mku3>b>`Uv~*N89Zni20u&u)*r*_=qL_|G4OJ~>GFCocnVYNE>j>Nu;3NP%{7eLt#T9f5)KFLa``=8fgnYnPv-bUsI@F+sL9!!VVhQ?!a#__ zWWk|?JX(ZE#~3{!6w={YT`3pSwX)f0EFcCT03ZWs06M@dKotYj0?(qDjPxwB%RCMe z1xW_-ez18!0wBqSR0?Hzl#ifN0@+!(Z9EMe3jrRBh%O~cBsG67D;5fI%hGE#3$?i1 zVW48YjOOCAo=_f_Y@b#S>WyfjnJV4NS5Uc*JAw9Ke$o+SJQ0D4g*i=$WRprkPgV;IfNVghC_#_r4kzq3XzByi%Aq2r^ysU=`2;`$T^;< z1-vNaK?;u26v{Km;#$W~uju{l_7ChE9u(lY`5*SQ`X{&aZ`k(48)GM4xDa32-9LpU zKN@{S9f9I9_RQEFenq`xfr|B69is%dS;w=9}o`chXCRo)gB=bsNuqzy5hp zFHS$(*?iNKC$X4!;<3)?ju-dsJ^a?1*V28?#lTJevUJz}!HW05>2u@NY8x;;AHIY&&F5m{`bah~ HornJiq%-<# literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_3.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5892859de0b5af6b4c88383ba8fee72a12d5acba GIT binary patch literal 5435 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_4.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f8cf03e89d9e1c171c4f5bd76f1155a2a817e84b GIT binary patch literal 1195 zcmX9-e{2(F82+|0Zl#QdG;p#Kiz%ii2cB|^hj!s~$LN+bJJ?|kXw0bx7A*4!hc;4O z14SAr<`NoPppZ%$Y32nQ#CVbl4cwNQ)p*Jzg&f$B8fqBQj7EnN{461P-e3Q`Px3tP zdtmK=uVYT<8~{K^f8XlCW?k5fu69c^pP#p~3jhmP`}+Fc=GfBG(%RZ;u~=r!n$_0U zHhcDL1VP%{+pShB>UO&c0;g$;;}}u&%d!-WMpLOwKCkKeq-oY04FU(07qE=Y?{@@) zu22|{#l5LCo68G@qFgfKm1>s85Z-H(7&OAW6w#BBiE~l9nBq%$$sCW>%WvC9F39_)^OMm;6nvM-3fPf&9-5zl|6^|$D^`2wd@j##)iA-fO zuvl~w4mXA3tjjBSd=kb-2vPCMX*#Mhi2|1`37Q#jkxty__Hq~_l75MnVr(oUWHd=L zBD$F{YPrfx(M|ye2had;g@H#w$PDVsd;CR8GWd8!&ejzjo?|hGNIFA4EY5p#B3+O< zBPy0ta#fAii>Vnyg;m||AUzmQkO7Jgaa>#!)1gp49xrAxhNe{}C+qb(1WpNfQV5Z= z(*-A2!U7dKR`q9Vp+a4mY~*VX%QMi1+3h5X`dn@f!$q%GX4sg}To%s96XUtOsT++7 z1q23>IeSEKDM2h9rqmc$NC(E%NV%A@0LTC+0H^?r15iZ(Y=Wg>ScYmA znq}4lBmyKTp!tBw0>}Xz431JDvm&=NULewzS zTFrn>E@uD`VH>5OY}O@c9?A47b-&sO6=qVUhgt=e>mCOnU5F32`zcqDBf_@J*r<>U12q6m0AbUMSd;DvoY8Q)S|!t|Cy+}e+VAIrK`|Vb2s}#SDT+{O zqR8NrELP*)P;kMB2c`+AQP5zT$4@S|O+WsDU4sK0c=h(Rcbomj{?)IoU-{Vw3IDg3 zm(1-w3V;2k^T?c~`+m!$ktNqA(0iXByL?~Z8Mt9%(xAM=# z0(5le*ryk_4ehly2DY?cs&v_gt@A2J`gY*^A8dG0TjN}FCAn|c{k`)qe0k{R2Hz(u z|GKlat>r?eC%JINp<9PscMl&NGPdU*Tcj^NPHy1$34f$_0rFSkyQ+<*VT%@sYp@8tp`)BUUVbI(6l>ghu^4qrc8 zLi%uY>PUCb$WL#Now07avvrhPbvikJqT|#n7bo__HyxWe_{;A`ap2L_u9FMW-GeFN zt4WR={JQ&+13kMqf2v#0B;BP=Th2R_WtQoK&-_S7|Fhg)NaOUT;-aSFpucxu^_iZx G_Wlp^p$stq literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f8f4d3df6b0d8db0cd446f267580f74bf1e08d61 GIT binary patch literal 1256 zcmX9-acmQH6#i`kZev2H(-dh~g(h}V;Wo~A#xopnV7DCE;f_$TiHDw0LZheNT(>mg zfEo)c<{$-%DN;#I8Z2^=g;ee2Bn9VE;6fHC?$nMop^=3gTOkeG*v}G@@4fH6f8O`U z_q_v~I-CpUFP;woSkT_KzO%wDm1?c6sr2NYkp=*2z^09xH&oWDs;cVh>YAFGIdkUB zojZ5lym<(M)YjJ4)zz78HXDYa6h*Qu>+i6as-jBob4UR3qe=Bp@1X+L)W|A zjb5+S=SPDfA`)d13YS*JtQN`_;*2qKtFlEot1?Qw$WXP7~cCnrhc zu^3cU3)W~O%_w6fIJ;ADxFn312{B3ql5{xD#a-E8gXVF!KnX!67~^6o zA*D$fJ**WI`Lb#vK_d&y9$@tYyNuv5vs1CVRZ`Ggp}ZJ3qahopQg8{+w>&!>b!YAmLuQu*Ow!!RJQ2*4ge zu!M<9TiC3_lc$0Ocf9CJ8}e{TDNg6gu-;)Z;bybbYGWNJPY@!_1i8vFzY+=$CKNrR zmGUIuXhdX95@(gYj;NnZ2HAAfGnkZeYP6WkluF}}1i%G=2!LEk0sw;m6c7L_U?}Jp zVKNT&9AgIp2ErsrIf2dq$O0&sVF-h92By3)8-#isJTV>zGzDA?;^obf&k>fLi8!B5 z2Q)2NENZZ#W$^&aUr)+rCT`_Yc0ng(!<{Vo(&b2YI+cex!`=vRE8;{=Zqn*yF~5hF zC2u?|rITSTlPu~PSjyux4O0N>0K$qF!HV2dSOWfNp@2stPa$Trl-tdEy}aKqU}ykG zBP5ojFqKA!8As7&gPavgb{NHAii8?n2|vD~e&Wdwbai&HV9lLdJ1X+ddtd;fN19j|_C?mNj|z96xn& zx_5u~>DlMhrR#>ra*NhXnjWpL`s}*ATzS6tau6E3@yDYB`cJdWJGWMhE0?HiTY9bM znmcAsat)`iWoIv~EUV2e!lKq_aM?-m!q2Vd$8V0fCp)o-migox_kgnXwy^Y-_a0xJ zS$kmL$jstXiyh7F3g_f67!#TWrke8U1={)cpO&U#Z8--PBCaYv*=6+MADC?@xaD;O!I4!irs> NeM86kv+K6)`yV4KL@xjU literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d3ec2f34cb849538e6aa8d5a5d62793b6d4c55dc GIT binary patch literal 1146 zcmX9-Z;aD)82)WL=)rmH!<3;Vlw=8$luJKUDA<@D^vF0WSD<$eGqq~L=}oNI#bFjL zVPb_zDh@Jn!5J5sNfRcVvFZ%{P~_B^R5-~zs@WwAjtDw&Bo_qyIYRQh|GvCW@;vXm zfAdJBfBpmW0Ra8O8-})aE8Y#X*VoPGZ@eV}-~*c<9bMlYJsywO>-G73Jv}{h=FFKp zcP@e;y}iBj=FJO+LLrhQSe6k4PLg7ZB4;w0e7;zzn6^FTy6sMfBmhGLp6iRn0*M5c zN)uX^&KLM{MXXv%&B->JB^F1bbf3%x)hMP*;i5uLWLPU7tyN@qQfs-T*|r@)frx_? z19Sl?%ZQcr*UN!U4TUWNc0_nnhtLiIzyly6i0t>PD5{6UC7Pb#`N?>^uBumxMQB+l z83-{!g2!kv9Fg&;N=iDd6xfWx<*GudCYo*>qfjCeq6M6jsF=*k8m|?_qA8n>YP&h7 zRc_2$eg*^t5R3yX4Z=D?6@!sVIA$@j6U{c1Qd_s-1dj(K3Qa}uY?LlbY*i7Qj8xAn zO(WB`^0STso3=kdh4Cm!#Thmw2w6!gq*9e^)+!bq(`-ylwcBk7P#J{t2wC>CRaB_q z@dm3kW2IKA+SaE!mDbJrEbPPmekvG@U?Bk~B$`$@UK6{^(v@s(vRrX(r_*47$RUd0 zS4B)u;Dt0}XhO9RpET6ERcO`iPUi|_0Ehyh0H6b405Aza69KRbo`q=z8YSq~`7n@4 zkYj)u0WJ@q0H7R%SrV3bXeMAygKi1jF`fb(3!*%dkb-Io&*_nJNvc*ej$^c14(xKF zaX_Z~7(K|BFwqRlF0Hp?MkiIB&DU<44Onl71AxMi2;q-0SVADvaZXngrJPzda*l1Z zTpM;86vsgmKo>yR^+M~?-36LS7n)6~kiQG1R%2r^A(4>MX_+K46p?30gC#AFnBwtP zGz3Kqs$p0lp~*mp>mENf(0A?54 zyVo2zwC&ALJ!sE@55K=2)xJrtJn;VUr_MfB{&v&M@h#=%q911OJ^E61@r_|;_$)Sg zl9;~u$n?(BR}byfPKej{jGg;>to+5;)zg1TJ91y(F|HFTrV=j3$ z_2bLSzkAm@dH<1teWNRm;NuJBgl||Y+_ydX^U1G}rH8R)#wUy4vG=|D0r<^3vUcIh z@jsd5uKGp8G&lR{)zz2yZkrn~bOi*%>qmx8tb2Oz E{{V#cRsaA1 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_3.png b/resources/g2/track/corkscrew/gentle_up_right_bank_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fae56c9883d13272724a7ed57fb7864c8c0fc3e0 GIT binary patch literal 1080 zcmX9-Z)h8J7=HWr(sf&?0V4~Vv24B7(?+-thXy_CwWRg7UhNGIjd04X%P``7I3+@a zvz{erWJen{ZV>|BG)U@#?Y3j4dW;(@8st9oLzKhDnbL@33o~Gm4u570p7(uuzPt|) z&-;EbGacQx=fEBS*f%vfKHHg3bZW@c)9K5P)rSFkVCL9~i4N`R>gw+9?&<02?d|RB z>+A3D$1u#}@eB+M_(P!(NroAQ=6P0u?BH~e*5L8mqBTAmpN^G{m8&%PC<3TDAj)o#U!Aew2X5=)NE{FwFHXYS= zvre;E-?6+j_;~QgA(#SO$EbooTE=4*EjvP{t{5%dMynj*lc+#4N@RpcQDQ0z?`Tpj zr!-1h%gXIICDgFJJ_;uUl8VzzlIJs$lusthnT%B^IHp#j*LK=<8blUT zc&{o3^#qYm(WNwB$;a1AYR$?wYj(SR6VU(yfC8WclmONN8W^AsI0mH@R5FlT<8Y8k z$kJd&!Q}w)fMh?)kjUVWnLyPvat*i_JOwNR0*56eznUbndbDUrm5Sy#rDoGX9j!nd z$kZUM`#B>hnz-yn^j56YPF8ku)m^iWYAxIcR1k}Xy)inN;K@{+)zyTNRV$^eW0#t) zjoNjJWswQU1%x_Tq&sr=5ztckMuW=d?n9|onOKZZB&1YICc_#P&e3FvAuTq%!4XX% zgv20Hag-;KNh62t96$B=;GKIv@aF6^56^D@a;ihNr^d%l99>*kOsr@J_b&W~HkU8X z;oDtZr``bVvi5zwO#b-ffu*^#^UT%dw{P5d^xD6_zVA-X3TH;XzPo>Ib92|vkN$Ay z@G~FRUjIa#zr-vF*^#qbE8lGR|J-`{`qt9%*Z#R~9sKh2=w+B$8-StPpB|2#dH%Cq zE<615`HAl?#n>bEI>@P-}31E%C(1%{%2n~H-p`l?_QnD-I`7Hd0uV(J`xC; hPs<+TTh6N5?TtO-zqpcYL)_YhbgvYC_PR!642Q8h?qbyskXDrNNHm_IWHpYQj}=jHq1 z!{__GvJ#KYP92#7fZ63!ORL@_y?SNB=k*sms|f%ftejpu>CusqkbYSSrpx;jT<31(X1@mzw?mAsQ7p=GC6lQai&nMjm}aNd>i7EyLJCC67*z{!jgZ(R zQys3*P3pZ&qp!6F_1;iN#Kpq4RWmRP8$ZZP|P$(#| zV8*}|0EvJU92F^~3&>2PW&yc6JPn=(o`ZydrDZ&qAxm1Urpt{+-f@gx&q1D6CVYCnPhXxQy0M8iPz@SZ*Gg9n|hefDPGH^^-`{3lpNdWxi%Vf zXr4zVAQuqwvM6|R&k)LIE8Q+#DL;eSY;wt@m`=;ttU^WebhOM;21i+Zv?Y+eL>Nf~ z%0*CxLMDqG-aCH!*z~_of8fGuT!a$`zifD9Z+U5P?fBI@`~2MZug#3DbkI5fHG9W; zu6xaIY+PQua_+YuN(+xqESFZ_d1MXzxU(9XaC*&eDhN5_4)2%e9r!EZ}sj}=gVK; zyjW5GaK5P0_a4c{E&Uk!mc94(PkYb5Te&lHDOf%kU;5^a^~?VQMXAf| literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_diag_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_diag_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f5f7812f6735b6fa6ddb3cd92f6e40f6499ae452 GIT binary patch literal 1130 zcmX9-Z)h8J7=F`#*FSDSBWCW#GR^Ql+-izfJV#{Ld7Wu@HdlMa;G)aqwq%mA6HgW- z!i{B`)!9lQ8YLf2n-682HDCr&!btUC-H3WhhLOfmT$Bjaw(v7!@Vx)NybnCj z`_4>yJ=^+s_5;AS@v+gVb{%O4(c9V17oPoQJ3uE)J~w@+Jz6Z5j*gDb&d#o`uI}#c zo}L~I!+Lvr`}+FqPN$QiTrA570w;=oS(ak4SSppt=k-!)#Wb6(7UcrQ4LmpC_uIl@ zM}LludPOfAOPV#-&^OJ+IVFth8;k_U$X z2@wWV0n15PF=4IdY^@588ZOidpiLE_k`sUj2w<3GwJJES5=7SRUgY_5C{$IHwM+&T zi#TO-GIkg5a0dvFMEVp;RNZo#jcHu6AY>~6-3&Qs+~sk)1(FkKzr;#$KAs6=bV)aq zl9@Cbx!QWs%79G(dk7p+AXJRb*gbi|Ut}c1m#E3vrdmRaJZTeYJmMh}K6g%J3$kFu z#A-^eYq4fAwQgvrUb5O~g7i^zh+!jwkPyXmB$7`gikXa|>$R1YX0wR^mw-rNRL;s4 zaG^qmYHYmj&o&~3rn=I~H#V#5Xn?d@X}jIya0;YLbh~Aaj|bYzqWMI!oXeXfqg7)d zz+tjrRRRt*Os1oZ78eTXP+3!|#dM=uYPHr71K4xQKI;hRgk-wareAAC3hSxLrd~tUCSe2Gfq7h3KjR1sR5Zk?N;sQT3R==A zX$`Z4S~Z&EkPgTMgxX%j+jRGU$D-+aold9jL9SF-zh4N4#b{KbTrt{}VknKJikxeO zCmTK|3OJBLpfrVa1{qxY`02rczwiFQ8&h5ZMpl0ew)-99qX(zQW#JJUM?uIWqcqA~YmzJT+<=X`GpLjc-*}KYdZsu71(I zdTIaM74f~n+4}Ll$8Vm#{K3hee>w3^^Xx}&Dxc{8ES=v@&29AV|LSPZ#uYqxwR(N) zp}~JAhWB;`H~WXiE}naAcH;hHZ|$7AK1}_({L|szWAA_el4-edVd(~0SQy^j`kJX-G(KMb;r4Id zOvszGe>*)>-nINn^K2xtTVD86{Vw?E>OPA+_@s;v8K*jA+4$UvJMWgB9$uW4 juFYnkPk!Wp{H5c_^sBG)Vas1_!C?H5cXZ*IW9R+{L_O}t literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_diag_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..46162c4a8d5b6a8cc86f7c124d28b3ba618eab62 GIT binary patch literal 1046 zcmX9-Ply|J6n^`6_75e8)D7D?M9d-Tumn1|BaU>evo&3&?$l0cpi?@PSvH4c9qVW# zgfiL`)0)E&BSZ)q=soG&DRs zJTfveIy#DB*x12);AB};RV9)DQL^t$yZ z4iW(=26O?dD43n|H7kCvful|Yc@o;w5vqp(cmN5*6rWGSaXlP1XnK|B*W>Y~radZ` zk!|CoKg0wge2|vHQH6+Uq^#3wiOrZ?p(Yp&$#UaC3XeoXv_Nn&B`U0v<+Ej}Y$=wb z)!l;AskC~wj{&~`fj9)y5Y{oO9EeuKqRl8yEZ0(vu3ks0JmHrqJQXE!F}fnNHC1pj zapnjfCSoKNXV{b=y_?yIgiGtF^Jw?RF913WSRoS@E$o zTxbyS7MpF0MkiJ4>Kk6Qv)AmQNy6u&0)c2SBoGmqrd5v5O8sT&YOb(esk(K?YcU{k zm@4=*DX1riQkpTdLah{EH?^i+>NM+~_XsfnF#r`n2QUHF0ooX#K6nLh)-mK34u(&Ra$~Syxp^J z-~43lAoFlbzZB;Di{JqrW^L;-se{5my>(?(_`5(}L B(>VYD literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_diag_3.png b/resources/g2/track/corkscrew/gentle_up_right_bank_diag_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f26c76694d1e1c99763100cd3476026ef4c53d GIT binary patch literal 1054 zcmX9-QHa}g82|2ice&fSbyB3V%DS!N0>&97$FdP-PII%KahJPgP_PeC0;|x64059n zeTZA;x?A+J(T9#z=p;L;1XtW4ao2}B`cOs(VHT_sv|!yjIHX9`Iu87sG5CGo$M5C) z@$vh8t4oXVojdmI0Dzqf@64a{=bT@ACj)-BsmE!604%+C>bOrwMn*n+dg4+azoECT{RolJ(( z>1ZZP<_xA#6v`E;T2q^@(dk+ofhCw}g%4|qs43$mmDXN9*=-T zK!ycV#L5a*GlK1MXwZzH9*G7L+BOlY#{dKX3B#0NP>V!N9Jd%|Ll7FNR9n-wN+ndQ zMW|4W4Uo}cOtKaVnWrk6CAt(9EvK1rWC|A6?JLs?=@t7(G zH7RPQiDH(ub7HlaYS>!4R_wLwgTWSJ0TKWzfaxazpaIau0QnF&lvR;!A+Igqpiq!! z!HI(>01^QyVPsIq5|EQd%^dP9cxpTiJO>E@OUq#`L*&hP*^;YO-F59=&qcmgBn4D< znl;0M6_p%Z@ffq8vpLqJEdI2lZ`(X>cqQ@p9At-MyX^KRYld37}C z&^(VEKpr6Edy(_yo*|-Vi`_0=EIfnSY;wt@m`=;ttU{4GO%_x9lhi5khJ#@a5+ui%Tb7ej8-LXd(j@ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_diag_4.png b/resources/g2/track/corkscrew/gentle_up_right_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..dc2e6452e702d5c3b8cbc797171d30f5a79e0bb7 GIT binary patch literal 1048 zcmX9-VQ3q56n|~nUfM7NhAp@QGmY%f+sNdETRr8h*O8U0z1iEAK{l`Kra_`y>p4=% zhjZq`q0yZz#T3&LFw7ta3)&BdgcpXk$pfq}unL665XG&D3k zJUlWof?=4~>m3~(4Ti&Eii&U?D~h}<$5mCyWHR}Du~M;Yd&6}*-7XaYmH~nH#p8iw zGL%Y3^emGv2<3`Yt*Lb<+iaCM5{ofDg%4`6kRcOAm0HViwS25zQQURC?Us5SJBouu zLW%`L#L5a*%laGTK(~&gb_8`Lv}Yh>hXDit3Bwe>U&C>OAW96gCJ5_^L_^bdi$zqc z;Zz{Z1|vdi?OLfU|6CoOpM8k|o@-iJ)I7JuqqExgL%h7B% z=d{bsUd_)!K!jidLTMljj4lSF6(U|^6(^Q$s-=!$qcwpH$TXgclGzwjmbt1bIvKf< zS6gPLQ_J@p6SZuAfF{ToMJHG;C5l;DE~HYGY_?V`I+oSk*ywaR2yg|6JVurMToo7V zWTMIGt$3-Os&bcs1@1`yW8DGEI`&W4gAl}_-6mMrD8s+n_av+dfb z+oX9OS%6$XsGo)2mwNy_lPurz(-Y5k!ff&Fskk8i&o|6=*)A@Y-* z?ex{(eth)fG;#jbzpp(%{_883x3{L;?S;RN|D)&jPZJZHZ~cDm2(iDpva&dT`%Znz ze)g->?PD+BU0uPi-Oc1?AHQ{U{>tvcLQg(BAG+|3e)G+nOF#7;!PJSF$r~@uz4t!` CLBv!5 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c85c1c63318daa73520394aa422d0e1947742c13 GIT binary patch literal 1360 zcmX9-e{2$W6#vp+SBj1)T~Uc;iVNA!g>GlOI!sPWD^_N&_UhPVN)?q^rnii3SaFib z9CO5;4joRW*bs+`7MnKG4HYwLniey3ouXxmw%XHHi|tLjtxN*ROPYsOmbs)$<~3)0C>2b=VbrK4&I z(4)XY0ER;RG!k(N6MhjFlR#DhIXxU_AdJcYAOX-L2rU%aBoan0_bHXFB-v>+CTzAL zuNOul5=;a7{O!;E^P|_&HB?`4nNue48uA^17gLHWH z-Vhy%+oDNVob{*1B0>U)C?GZhsTIf>1ow*7LAfqM&~dFZW%i|+C~PHBkpY)j)TmRd z^cz%RGZnWR5^i&Uz@Cn{$KnCl9~FvlIjY5QBcZZTl+$4FSS&%OGvf8eL!nepPdc53 zKtcn#8^QcSRaipBP-9Bv=-2sJOE}H+a6xuFF$M*wP>74gYN?Du6$Yi!tRWrx%rR@w z>FV?clhHVrB7k0lm?@!6FJ(-q$4UeoRM=ze4A>G851WW`+z=!H&;novfB_%?KqmnG z2!I)oDrhysfDa}Uq#V!~a1kJ+21yb?3P4&6of!0yFl2%;2Tc0FbK`NKQ2{N9m<(c@ z1$8lMzt0d3+vD*7%f?|wOJW3=RX{Le(kIo2RS)WwkP>mqMEydN3FwU|f?4KmMj*xRVCHb|h)-%91{I&k+ z(ld>MtSxN=&4;yLwEaTUeJ4-*rVjs(ZgX#1QRq{?)EE4Ky&zmaXZoQo&0&-`a#)=V z4r(VCJYILnxX^!M`FNOL`Bi=M6an+6d=(M6j?S9J=WVXrbm_o5qxP01cP@#>U##DZ$IdRfe{Y3<X;`cVY${PE+ zzPk6iarMl>!tSP(x3(7UjeI_oziaN1{S95b(#Mb1yxi70xntQ>uKs9kqigiL_R+lI z-Kktr^uK8N(W1!gvX18a53dm-dTB_0u2$6asAGR`9ggE;b^fZ+qI0#b*vy|t?|xK_ z;DX?^>xEak&&=La_fzx`!#+MX|Dx@U?yDCYy7nBa5*&jM+K-Pfd!=V^UBR5y+>}-0 z^Srs9<<)<`eSBTx%`5Tl`W>aVqVroTC*8f%_Hgop`)Alk6(ubUf4Jk;+~Oytqx#_u zKP=zAW~k-FF!r0V*r1+Q-Ek0_C8?ocU^jdItsVQc#O9Cni@#B{@2NT6boQ3y!L|9F zpWc|UI<<17Vp3ndwBg9ce+TYb8y~iOcy>xKCuk3xENfRRczSb0%n{rTPJMge^1u`Q fuUnq2#yhn1b-!x~Smu9z8`a7rU3p0P-ybhmHO{=_?lL~sQTv2Eo^OEf%V-0)lvfxZf#Mua)OLz;aXiP+_hB8yjdu+ht z5Tronu(XKfV&+oXQZLw0)rIOjnw1gCI{;V!9>YYlIc&4ZPNzbWXIXZ_?=OYJQ>hfn z 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 Uo_|i+2tC96>BYHAFRgy@Kdkt*00000 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_4.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_4.png new file mode 100644 index 0000000000000000000000000000000000000000..26ea4a7debc4a2a4b64de4fdcd4fa38b593b8b39 GIT binary patch literal 1179 zcmX9-e~i;)82*mqu6Nv>X1d6FwP+(EMd_lHnJQiX|PI7O1Qu<1qbY)e@t0&3u0K#5l%$&IYRQhzy5ijYeKTgy008s_SNPYq>Od0c`*w)rIZQ8W<_V(%1r+0L8 zbar+k2-4Nn)!p6g@_0Nr?xSgn;}}5*OOlvKBr=&?v8b75*|r0^ID3_0Qle{+|Vj&q96jI9436)9fT)xC>cEnAfzJQ11Fh(H4A}uD_WRA~iqGrja zown+Q>XhN2fRh8R2yn-NS3!uJD^T=?4N9~^sj8H3C?*_bF{ePFu>h6|kp+R)CC*9+ zm5fwV6AdFXWvQ@cI-GoL8dl$*u+{mK;V!5j|4dc|xuZ$S!x5C9SY3IHkqV*u0;09#;b7?+@$hjxYa z0ucvk3TOdfvjB1ciY}PKVV;Fr6qb_E&VvWW6M&&Xh()4;OO9b_B~Zu#C-|Em!WW##tp_- zX0dw619>-;y)cVIje-`_I(}kq&*Xz2*s*pM2Nq9^Z*KL$pnu8Wf-i;-hKD|Vs`ry? z@aoVbnUh_o{=OW%_*U4@9{u-D>`?E=Gj~_WMa3g!X~D#iT-kTg{d(}{;a5hUQBGDX zXA$>2`@;GqcOsh}@BeYAZ^Ny?WB2yOmidpJzdPio_np~&ZpO+}@7n&)`saUh=!ZGO zSNA^`xPE!II`PYY*M3`^J^V&6qeT9x-X7QzoY^*1dv?qGqc@H7!}@zC{u5li%Mvy<^YZrSq~+{Hf1Lo?8>W zTDWxjqw?h8(+%v1aAAR&DWRXWZ&e0ZQJ(# zar(Pgcb)A$c(Y^8hpTsV?5}Rv*onTAHEt~4dtvJN@h9KkqjsXq0^{p*TU9;0{bu(* p-l-82zqT9Z-4p$CFS2l4960c;IkK=Yuca^uE?eb4zI4N${{e2J4GaJP literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3764b5c21a8b300f0c3b6a5269447eeb74305f23 GIT binary patch literal 1228 zcmXAoZ)_8F7{{M&tk*F~BUKwM*pW&K9<$D4JD`T!xQ$v0JH|~46exO1m4+PTh>bMZ zxB>-=9I?a_8YoFky3jz?i4}^}*e#7Ia^MI>j!>j*RTpSR(WwM~mXLg(e{Y`ei_i1y zUEXb;GWmtc05HY!M(2uZZLh|3WnDEl$BqmE)WPzlyxa=B6=j6j)yu{PT6YL`pr z_89#EQz*>D5{^__$Vq`hF-qf@&D6+SHC~%eb|vlbjU zxG4}>EXHH$fGQtTS8`fZGNOtDJrohj=m8i22Zr$~l~=134Th-6G{7)fr!(*MjzuCU zoz@a+J*6=+I+Md-=5d>s;6#%UrhRd1FvUi5j->3=ky@i!Z(?yPN7{Ls_cQ*8Ba-Bk zk~bp!A0D<-fiuR|xg@UVx9``J|3nT>n%>2N8ZsZ_=g1z-aZ07QT|Ko+2g0ji3jkw-xB zD3bGx0eAv}6eP_cGk{n?yaojb6lGA-g>rr*N8vGe609`X7|g|Kyly-wnqyHemGVha zyi}4<)l2IH!qZ5J8YZf9Bn`Z563g~@#hsc670+IotDhq$r?uoQMPq(?C72M$ZIfIop%>Lcx~mbpRU`kHXni8GY)@VJb9WJ+4JGa{smk2ZFGP1>-;5Sb6Vo3*1i4Q zjisgQ>)PsH>S*1(SKB($H0t|c?KdNByPxTL-F0v0{TF@R|14U5plhhbmG!Q;s@OJl z+l6I&raUjK`S|dy!CmdjmfqT$NY59&(~chM->p2j-lAT8Y_NUy%hcrieLJU3;EQg~ zIe35i&#U|Tf7$ElTP1xZ{P^DJJFr7qXxUV}JeSeg4>J$E~lQ+N{Id+7=hioSU;y zx&P^@hk4)dZ1c=5LpRUdeOLL1rJ-E=og+8!Y16rum19?5y|DhAiuiv!CQCw*PN;%0ZUhR=cz>-`u+zG)gSo) literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f8a481aa300e39265f6898b326a9add27a5bce91 GIT binary patch literal 1197 zcmX9-e~i;)82*kO*E^0&HH(h0GbIeD*j#EXq?mld(E@5S-YF@e7miguPxg28~`@3;*I_#&9SAWWy+K(Hk+-rwRP&$ zscmg-2!gb?w|8`OI9x6lMUgDa2m&WbqN2!=NF*LlX0t{&;|4s}DT?-B z5DSILsOF9*_;l89=9FSdt5j1gf%x2=GUrfzm@eT-g*qEyb8%lWD_ezV%}Pzw^Ij+L z6ClI@T|m+@lGD&~+TJKSVU2_hKb+Jd%)0>K0q`S;jH0U3spELc?LN!%g+QRJs&|t~ zn9DgSyNhvf2;WY+cZMz%Ito`9VMiqZ~;7jp>&DY@MW$4C9mW#OzAE2OhlzSO8N zz|SFyfU15>4-$zmlZgsuB2dVvMoOhj ztyY3fE@uEx;Z8<(@F~o1;Iie`>td!6GAH82NuvVGb=(eU4Dphv$Y4Q%3I{k{4W?qM znTeJ1nVOY{jS9_i&;ZZ^5H`JtHtC+g83`wbbYNRd+@7B` z-SZthGq-Jh&+UD=(@)P^Cj5+c5AWMBXIHm2Yt8YCLtoxoyKSNML+_kh&K*my^z3fk z{Ehj=?d!zs(_$NW@zkB+h5Lse3>;n4MRs2Eq*^||Gc>RA*{CV*xnjhB-*nLW_m`yS z^yTW`AF#jf^_|;zGV-SFo&M3Cp&pDCP9o2G1`Z62%|CyWJxJ|Y^;JuKX!QJvZglY< z3kt_aM&~Z+|17by`wn*KOkiwPhqFiLU$C#+vj5QFCIYRt ztY1C&=>4rXkOkYPV>j0A!~fd6XY9~_y=PwE5>nq@KdW!?k$1n|wfp9SPuoU3bFS`v zYkJR%JAd+>nEBpq!g zS~z)X2L18sWji`BZKG}YsUK&X^3dgn1#TG}e1u;g86Y3nH1?l+LVW3^rskk;$#Tzd I@7j<42SQK~B>(^b literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_3_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..509523128ee0ce6e99729fddb5b8b373da1cadc0 GIT binary patch literal 997 zcmX9-VTjvw6n}TUyWF)KQLBbs1{oBLBS;uQ;>d?gb4Pb(T*fl3P$Wv!>N?4X3_Ix{ zV#O*&;#M(^3KjC9lgJ7lGt8>x$fO_oAxOar`B1pZikwhp85K_Wn=$yk_xOEzzsLK% z_vzW~?BV2k5&#Zwo!&SX*HdxetBE-4w@42HZ8UZz2FnR4Lnf>oW$Sd)lti#q ztYu)`8a`~LXMGY)STxhnfsIg*0Z;%m3^Q=tB1xO3T|wAUlwP4Qw5MIk3Zi;AX^rMx zT!gd=L;km>7#!3^@UsvpfK)&R zfodFb733FDzltIk9vIJqEJ04eiaKGHn7W;9xq7El2}5r(2~n&?7Jw_KM4M1tO7m$W z66|T-o0U3qr+?s&&~Qqpfv2!6i|0kEsB-0kY+FUQZgsqR7H zpMNHG@4*jTI=8LDsk?u?6_fhb#`EW&zWVdkSCe;+9r`HV$*;d%b}szxzq^nBa4i4k zUq3DFUb+6p={qMsxG&YNJyqCE!OC~$XM4nn$Dg=ybUMFv>9KE4{v#GV z`3Z6G$hDitFRnjVem{9TvG?A~mE`UX?$74&M>+EA>qm!Y_Ns$Jr7vH+^6lM!ql>M~ rKgq8y{QWHd{o9v6ckbiV$G;r;&$;)?=Ig0=JlNXY-njX~Yajj(A#$jfq2Rh4)=o=#`;`9it8Wm&CuoAv_h1A%u0gU)c+ z9f^7qNnbi6NbAvsqLs zxoD?{CA@;$Cy{=I3dCqx^QjpwZt$t1s8^+e6>>8!uixVnDPCrR3a2E5L{`ccl!6&6 zTPd@dt9ME`3r-P;5V)g2Y8aCx{CP51VihxxtgCuUE29m8a>|S=;-``UUry$Vs%XaL zT3T%w@m49_F%8rx<4%U80yGn1xritxWjPaxBXvsP}mZz2{T0H6YB00uw>pn(DELf}wTMTU;7nm~d= zLyCohA1nco2uLANl193K3Sm@DAWMfk!85>f5D>7iOvEBoO7rJ*xmb*wrqOJgsH^1) z0UdR)8X@RzsX!{0PiqB@cBI%zS9c0^RBMq=VBDDBiw9YESfryNUWAO&?RW2A5!(llZRcLRV@upeY;OG+X-4du~ zz=I?=ijgQoqXLUezI*)40mrR7Kk&xFoCuRQem>PDH)f}vUK~6B!G)v4@rUo3-azZ0 zpZWT}tCOYodoGvP9{lT;P5u6=v+phQv(@)DXUB(#CqZ7Fc z+dXT@7ruM`+ohGoqkocDR@X9Ib@YYWMBkUo^Pac&t{i%C?DrFAS1z91R$hH~jo5QK zckJ-Q3O`l(<>FlX*P-fv2ep0g9C~Q{?C?x}dpm1CLTrwnZ{FVj%DI=9-wge`er+VT ntzUcXw*S+Oe-2z8KHdAxFZI~Fj$w9sZt9a~j-UA-_*c;< literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_4.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..23bae9e6bd415ddfa68204049cd1a18d591771fd GIT binary patch literal 1311 zcmXAoe{2(F7{}jIw%gchnI$P&ut;4B)}?W`t+;9qJeH0Xb_+LGLzTmvuEr)Dp-MwK zJfwpT8azy4MVr`>0u{-l0HXGw~I=xN#ej?iatly8fSN;eez_s6Hpeg~X>w<5fjq~MKIWZDhG3SL%5-Xt3DsFJ+)k2in)cc4VYfTx_a`HfOe&Sn=OIuq zK3XN2%lgkZC6{*qEdcDm^xTxYXN7(I& z2g3rNEMzc184(*PWho_R)%YA($VEndmUxIw$9%aoUnty#7yu>!YyfZogaC*GkVOD2 ziol`6215ZTqzN@(P~gEp!~g^WKoUSk4&5jW5HMne2^SOs;0bsgFyg>OAXZw=+BF`| z5Dd`Ks56-i<#I__^io&=>ZrgtIT27&5j7*|xx6`4ut%r7iJ3?Srt@kU&?ymvR%*tS zRuXksj2vqXc-UyjljK7=fro{R&S-=Y00jVHk%g;h_f!g}!4)P`!>v7ckHTX=)L&rT^)<={nOC&$+YazH;sGiM*lqW=5Y5H!VaHf z`-%Qn4?O$%ywTsq4Va?8x+S50N zTaI@h8AJb_*R-=-knj_-+n&m0LYLn#ZCQGIW0zxSVXEP^<9Ao=p*FQ0lRc{5Ydu># zc&F;XSX|TEe0tKlr}|s|mo1OFPHyTM6OUrPAK$NzTU}d6&v*K6)(=!w<|XWcU025I z?O(3r%CjlBykb|={6A_~mWu8mFHe?GFZ888{A}B`Pp>cf`UBIUO#Qa*{K(7O(T9KC zlAP|iH*qqpQ_Q{pR_)05hqeOd!a3D?{+eR!l{=R^9~f)y-+tWQ-E}xmNE2e7n15pA ddi)G`5t{;>Xz}>XmLg@as;PD5z?&O({10s*RpbBw literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_1.png new file mode 100644 index 0000000000000000000000000000000000000000..31197aa875d46ad5f9ef63d9be40af1b9a23dd4f GIT binary patch literal 1362 zcmXAoacmQH6vuyCH*TX~(IQ1VEUbfWR#xK)Csw^dw-i$B!EVq<30*v0!3L{2NpYPt ztgs3tJ7yh~bfIVy3h7wEi6!f#N|8>EagfP6>}HjQ6=AV%MK+k>X9>yYy_fgT`~LC$ zzJ2So>e(}&p9uh%y=HZFZEn7ttCxy+xjwg#-2ea&tXo@GlUwuh^78ZZc|2Z0K|x_* z;fxtG5CkbIDk?567D=U26ji8HI7w9^fyWQ?~dxODHG&+z-WU^UQ0dOTCG<>~Y zXfjDGR)xcSpD1u_P~ydrf_rjOuePUlS0z6=wE-Gp37VPcC~ z?$jy$lqyV_$4h&>6 z83@E?Aaf(AU!V$$Nmg!5svIf3FKr2Dn1O6CJsqEfe7Qh?i9~9Nl$0wdrIOYV4nyvk zHRyE3{J}(&%O-JP&>%D^uo)zbN$#=Y0S6iO7-IojJmN{mquK0Thy$PlfChj8AOJuN zfD{5?4nhU3Gz|D)B2LJF83isJgw!BG07wF87C|QpeFO}dAnSk$A9!p$1~e+5BM=iM zvRULVM(y`e;jo?K0_ijdb6R2}K&^b75fMI#AtW;=luSk+$XddaZgx79gz=0_2rvnv zRtWUC#6+T2qlU4Wd@fr!;NqfzbRr6~Nlc@GApjEq!kib5oZJ({cB?0q!aVLL&@8Lc z>q(P|vRcik!j382I2ur)5shMikf(K0Xplgg40=!)!Xc;0g&$kWAAkG9{!Tg0hL(O^+6JWCd->rwid|#i7pR{^1i% zlJZ~6%9}3j#Wz-5$97QFd(Nw`a2GBv(0wi0jA?#)rmRVO?d+ci4Lexw4K;f9%>!*? zjo$OZ#m9c{iM3A7$3|*j*moRln=C$R$h!XNn6vQS;5sc5Td=fJ`0gJic}JIBDQFlP z@A6Omy{)3HL{$I9s-fle!{6yy-Z!5fV&>D8BZJM2D=r-ojjYt3n79R22)B;*{M;gG zxK+xUVzrIqp5}*lzUSVl*;vm1YRR&}hOvbg>fOup*6TMH)Tl!AaM_tH7ZS=fQhTbBa9CANyV@?>JIyIMUey zULR%0PPJA(#3J5PHC63V{-b*@bWI%oxaR_~so%eKzk8?TPQS2fZDWn#=q3NQ{2d1m z+<%}fJy+4Y#C00};(j)B!`nCO0d>+84a>&ky63 d@u>%ukQaS#>(0FcykIUEU`>s-x@%Q^^Z!OZaF+l8 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0b47fad82ab19eb3175fa280027e6c8709d74492 GIT binary patch literal 1173 zcmX9-e~i;)82;ey=#EJyPT1vUEHJ!EicG2A&;=?K7*M!guIM6D3Kp2$kS10$afSx! zIZ1&EOB}L0M{H!#B`%6k%?t}pIl~A|Si;U!m}c>c+#fqx;vgsa93gq$U;n&M@;vW* zsJ|~TYi9RM0KlyE>sAl6>f%;(+uB-rYG0oWKpW`axOq)$oHlLR^y$;v+S=ON+dDcs zX3Us@Ac)Oo>+I}wc|0D1@KO}XvNX?!L{X4sIhjo7a(b~?HqCmYL3jb_2Mlcwg`ANH z8jX45ia(iRGC3|^5KD$qt!WgF1pRh_c1b~0<*~F#oRO(QGFZw9=4jk9wPw8-a03np zQ4**uk`a)C;;3YtjglK$UfAH^lnPjs|cg=+E#}UStiK zuO!7|GhOa?#}K*0qS0%{D@Bd`>QrUvdC?*lXif(#PjT~ZWJsDX^e=ku~*WG%~p zEiQK$5HUNcx)=@RbWAY)YCV)~MDxvLX-cocN*!|oABqILju44PSRxjtRVkt+qJ&;48guxU6brKqM>-c?7+5fr!18)!XvEaq=v0bg6TEBYb=4D5Y9DnoV&^+7F zb$IR4;?&5KC%EPEmcdQUUMu;F9qG9E-tLJp^5?tD9?sYQ92rsOE($*XIwu!^ z!SBy2f8T!m532m_JihnbjloiIiQ0eZ_Rf1}pIz8Buwne6@n^;^?_F`n9RKXqt+p2! z=k}fpD?aXCHo5dAw*NrSj;TFEOWx(S?z=Vj(_54Chn`!D^nA1M((nA2!<*JzT{i;C z9}F<_yR| jl>UNy?vH1bqLnLWlp=8pGaDJikzwX?M|Wf_W4W_pk;p}^&VI;ACjC&3 z+!?Xl$_!GqxNel04@II@IWb_7eu!{F(R}D!2Z41^SU>DTkWNmx$nbmjE;_ujg5_uk55cY zOioT>7&bLEH9b8YPbQNLLkj{g%c81gbX_w|vr?%w8m{Mcf*>3Y85(#FByl#AiRE%c zzCagCT%{`28%ndKxBXJDZwnNb=4Lf9ZlnoIC2KmfYYMGOy4}!%z2YFS_d_q00EL1) z50;G8HLO*_yY<+xoj?N`4Ha}?A><_iBmf1&G#ob)35z6cj@y-_y==B?824*6)M_P| zSdx#^62U2CN~6*SqgtF^6--AgH)Xr6xIva+6Lc!c$&{$F8BNfNQn9AgT+Q_jFDUzi zdT+ml^AM9Eo&}-+q=m7yc&b5WTD<0`OFi8VEf4KVR7_auUD-HP6K z%&=A2_Z`&t@EA){X@<@6LSB|js#?wG8>LdKR`XrA*Xe{|h#;W>S;3e(E;JKzo67ct zVn1UK^3Bld3>$-k?mn8OaGZ_DQ$$jxXqDr1Q7S6YvO=R&-m5nP&mZ=9P()0ZaYG@j z991pwPEl@FvwM!wZB++dZ#cYk-5u!0%yg(p7QMCst<;^yZsUAtsu@5;yj zc@ta5*B;({ljtnZzi~(R>R;VCR13FPW;V^^OaETJ{?s>XKRvin6)tXE$!$G5UtYU> zcVU`-@APlCt{#16Y3J~A=I*L%hawlSymW5y`_u1y^grKnyY>J8 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_3_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2016027e44c3bd4f902fa977e26596113c262ab3 GIT binary patch literal 1007 zcmX9-QHa}g82|2ice&enRxH}Fz%nc&lb}I@M94IAxuZKGmt#5XLmx5-tYFn3aaUa* zg7%@=ZEUIc=*R@Ke(rC0g9mn^3VHl0a3=KR7lDL@9r;0_Q zRHmynuF;g*9mVzZZcrNxErG&v+@dC?jT~XBWJ_muDuUO@bvs(PTOEbgB=WO3C=`@< zFlDT*VO}lSZ>Ppx9F1r+R?wk|ke>mN02B<+;@30hUEwv?8mIf3Da^BU7}>ak?l~m3UdXQ>*W`JE0$p2RtYurprk~A^O3QIS5#ugY)q_F4DJ z($+cqQvH4E($9&d+y9>0IR4igy7}~fXf*Zp^)qMA zoHc6}f*=hI4ULVBdXve7<7SE?S(fHFyCCpBpDz@O#N%=*l~vVJxs00uX#ot~WVh>F zE~DFH_6IDXFcXVA5=kMg1oDL_g&{Ue6Hn{CHlxU)5dk0YQOS@k9p}{%e^HHAN-3)W zI56NQfyg2;9!UnYxtOk;Ho&48mL0GvLYOiEzyRPt5MHbG8Vn+eMlF^Bh8b}>b6)T5 zNCYO623%(%^=8IsaiCTnvw3k&v4RBo8?T!Zm$w)+z<$N|$+2==& zZ0_+r_ek4bC_T0R!!NcjnVvtm_L;9|s~^P=4P8DxexrAq>^(-dkr{qW6+SpV^h%5v zQ@S$b@Y7?175k6hZo2dD#o&owR=kLgV`rxh?%a23|M=9>MZSgl7_t3KLtx^QeTUzu z>mJ-R+4J#{cTV@VoEn{8x9hCaJ$KKu6J7uHUAtFZ`Hl4ovUjw)Y3j@0>a6XQ#U4 zH-BqcFi<5EgWFqyf61@p=rw6w_W19{Rj#hbna!6obB7Kt7@app74&+mMSSo0txip|!u5r^`xd_2WqfSk zh2e=sOJ9HDr-h{dZ_CY>e|Yp~#N8^~opJleCnQK4O(LXI#zeK^|x+4@IS}nCb$3q literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7df31fec806a1e23b7fed7fc14ffb97fe84583fb GIT binary patch literal 1257 zcmXAoe{2(F7{}kO8|~;wfjY}*qzjEXLpLsZ%v(~DW86qL&+P^`sHDMD8djyoOFUSE zWhqi)oi!d>Lxl!vY@~rY8tk$P1uGV9po=#s&}BEQTA-039Tc1}^|glN`~3Rn`Tp^F zo}u0z(}MX+=K}y1bai%YsMIx;Sgw#&@`M*X1Aq+lzSy^}GFDYpRaaNbWU`u?n%dgh zdGqGU<#L5WQCC-|(d+dXhLR+~FqGA5;d##OcKiLoXf&QmWhJRpE@LPljDV(;7K_?$ z*EyW1$7}Ql=x~%xB>9Z!%@;zXL2foGIZER)>jWzj9oz3bGfF2 zL6}TxF}0r1ptR1&A|}pYc41b*$OlMwgz_brP=<|5HXW`-O?o3^pscusBRLQ439`XB z7Z+VA$tM=W`Prn30BQzkY(VD(h#<#<8dDUpBneJ5d-Hs#B&1-BHmI$*)?qSu&Bm~m zOz@28w&whNA>uA2{j*{O7E&rTju^}sZX-ws!+5RMfWr~>dXvGR7?0<(*;1(lftCY^ zUyg-UWJ1ei47NP!DOf^9N1`NT%hBRoZWbyHDiyBLm~?u^fLe`4o}xW$WtlVT^`*m6 zDJ7Qk1YjvS&!}9iPOuvSP9oxA5&>H};>slh#ayafo`wVfW&n5q1OOrcqyZ?%0j!87 zp_7M^5R`H>0yqr#2oN^`i3X4Xkkddf217KA+hN87r4aZZJPs%lm}$A)s&P3CKEV_Y zSrZAjC`O7!5mvmkHh?*mgrK2AIyR1Ql2IsGB4tNn)}NV+=V7jdr~$5%n^2X7(AgQx zX`=*}J>+vGB0ez{DM~3=&f^pX;{Zwk!U_vd#qP1RZfBrSzytor;xif2VqxrdtJBG0 zs2fN91QsE&B!y;aL(!~^TS9*U}M|)rA z(4oGrC%N4T{z(`(8!oJ$ts{%D}Nx`Xw#yg%=c;pU7<2k2K9} zK5?%0(DUn8bNwq1ytH}WSnr9wf1WHZUT-^caqZ~T_|evqLRml3w0~?*_h@X{!`07r z^KG{G7A>{R{BnJ|Zt#s|&3iUIeQW&i!Zks|Hf8n3iFfz^Iyw2VC7?L`c}HjCwP9rB zubZEFPkpnp`L{E#kKMW<>lLSmw}0Jt@r&*YZ{>cz-PXP0hk>8&{$4xYta;{z^oG8p zQ&-))=w9d6mAwaUPwm8O9*ml+$M#b{Ub_}Ka!2!B{kQMOR!r64k5+WE0;m7-L1A8FOQyHl4cdRcJ1Wu$Ta%vm*2VHoVOjLM*u5~>f$Jf5H_diVtFc$y- literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..82cedc55a0d2ddd460faed383951978aec27ea23 GIT binary patch literal 1123 zcmX9-Z-~=&7=FFGUhb^Y&2Fn+^}11AoMD75Xc)oeG`f0=T+|$^t{WW&*AL|g7)PB| zJMD*VD;j180n1jQNQJ;vcW&kAG#lACS-E9eWNUWBd44XI!*sQBO}#Z*Om3U!Tk6 z>hJHzFl=C8U~q8I7Yqg|isU#}6nROCD2kj;r!}omE>}#mZrh!1mm+~>K;Yexh&LV& zB$8w%%V>F_RE|~+rDkQDts+NYVa6@UB}6eRN%=&goXr}Af>o(B>-A2jgTOBXu3=Qk!&Uua zjfge5Oe<1sC#oH_-YvHm8uQ3acs#Vv7YYPLf|M9W;e|}pS(Yqkb2Fu~ZCc$X3sD|Z zL{BOjP~${C$?6%gnvc!ssfLknH_UGLK4JmF01AK#paaYRv@k#p1P&z?q!*Fh5O9zw z$gxlffh_rD`>8S$ex|A&1K! z11jleRi97{L@T&#GioQIcN5ilt+r5UqDBYz0v*6Yq$k1#;v$ud@oFkw%%!S&&NB73 zZK7_I=6O^BWCKEu7a51{3H<3~zSW}h+7l?X8W)L(@wk*s$`qNVNsXm+jxu<%E)eZ- z5Jdwhg`+%$DlD>i=lJQD-47oBz=2(3B8=R*@xIePJ-TJn_}b5ooZ5NHe0~Y%XtI9r zGJj#;!>^aEwtrjkvGMlr+n!r&Z&)!kcbDwj>*9Ovx(}Xy?fgfK_SS9hJEOBFcfYvz z*5TtyF)z|2qHQy?@=;pW6P?G5r=@ zKXK%0_l%aD`;uEe^vjOF$0D<1d-mVHdF~ZEbMg4x#mVZ1J3GJgp1V0d;97n5{JxQ6 zZ)`sF!}9(AOb0$adTGt)rzS_5AO5*+{dnl$sy)*?mrZGhH|}07WQafTLlSvpV)&V% z4@6IFc;e@4?AmgAw)4fwO8PCc04G;?-kZsOtfxbfyUbM@(;-o1R~=v9|J fd|(wq3%#w4ryre|UUSJ&3P!h%ZJFHs-tqqdQxfgV literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..deb68081d0609eaf9d9329ad18c596a0cb1a9d48 GIT binary patch literal 1013 zcmX9-QHa}g82|2icj@ii`p}1hne?Pe#&WJgz)Yj&cDd0Vk;{1*gtK6T;1%gZ#3+3z zm~n-b(TyNIDWlFF##u3AW!^&=WeX!{CshMG&JOZWu+D%3t5z)I9{y$we&6@;d-;Ap z_5xuLOiWHrMk0}^sj2Dd z>6w`s48x+)=r8I_cDN--F%&Xp{_+7`{OZ2P$+ji)myMkINK&Z?YR7Rn8|VXL;MyMEOR zn*Fg8V<9d=A_vJL5C%p!5}6i}by(GtDt*ly8ZO!u$hbn|g$!Adn5M$DHPI_6y_z<# zN<*hM_AE4TV{w`wC5q0mTtO5oic&8WT9t~^Xn3~W-`g7whX`;Lh#E#UV_X{-yJW7< zl?PcfD71&h-l!EE^u}n8jK%0gB9lysWLjYujTg#txUAT!R6EU$#4l_ndmrb4R0xhy{=UGyns@0_Xq?FhC&$4izX|DKqMx6?eC)_)Zyx>O`}tq*{$_l%m3eph+b_?pX*(02aLTn`ZUoQ0Jayx( z_tqC%-0>^e_U)zI#o%jt{K4&K`hP@Au(`DI{>PWsJAW-Ke0SmGPXF!ASKzD7XOByR zwdn`fPMrApi=AWh&%fr}d$jTTRpaROe_y)u-@%W!cJxml=?nk-IWhg>_Wis3ol~J* OSUJ7Ae0}Mit^WZ!RJNl4 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..38a274e595674b294f0ee30ee0459d959b33e4ed GIT binary patch literal 1132 zcmX9-Z;aD)7=G^`y?;2vqC=|b$qe-FhliRU@A=t6cf5#xkuF63fzc25TJkR?c z-aO))-@B+60OoI4KRnv1t6Jgi?r3Gt`MJvg9k6-hmbI<1t*x!Sy}hHOqqDQKtE+3? zym=Ugb$567^z?YVUN6JYg22nNs3-wVQ{(Y?I-Skutx{>qaT?7gLj%u&B=!XY?r@lh zMCnA5OJ}59K3FJfWjk4|83Kj*xjt3&#QcP=kXenn6c>tVe>tx@lZm=x%r;6s9D)=? zc+h1mr((sVtCDj!%Q&jjs2N0aIzlBcfCLc4FxBOX;kZtc2FG2Jq{&dI5{uo*W>K+- zGj1>Mp(TO~l0KF4#~4NDw2Tlp#Z*By%0bHs5iCyoyqrvl3L8)bH6bOk!K|fPcC6&2 z?0T*`TXgZ@mcbJOA_}CAv00BVPX>y-YWtH_&1mQ)bV;Jz3X4a4RMOAo6rrHWc3i2X zwVD}k6w|Y|iE1U6nY5}7jDKzw{X1+dGnMHk+%f)&;KEf+gw8C+kC?$feWzl>xHJQshCA(SWAt+*+ z?1}{mJxpbyyqS;-nb4#es}wW!N~zhrgLnWxfCiugm;jRiH4IP-l7ONbG7aQZBob5x zQao5ba3nx7Ak~AC3^F8Sg;6JJ(58LEmCzjy%8{*k-}`cJZDu=r9rxZB`_cD3h+c&W}+cckA;m?tYD_>l3903 zs99x25m|s7K&a(KqDA)*cs!b^)!0n>A+&N?2n6JCScyhehK{pznrBRbDT?%zMAiLX z6eLiLL>UHIJhH{s@w3bO?mqZ|@zD_(R^7V(Myp@6VR-eHp?A)twk;?P^a~Sc`uHa^ zOXpv|WnMgeVkdX|De7mKVpslF}Q!Bk==M>>g-cp{|rsTj_DEy!T@rryUVDGZM-%ST zSI$-a)klXm?P}iqxARG#d3pTM^RM0f>E5}o7A_m#yK?gP;g_MG{_f57@Ymqjfmg`; zA7IlLj~;#T{>c|!dSdrm=Le3g+r8{=|L7O5E*Yg36KGv}P+xmx=I3jBdUt)pjPHFc pbPWG3yl>~XO?>R)J?=x{!l@Q?{& literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_4.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..6616a8594ac43050fbb736af4a6a0c6a331c5a4e GIT binary patch literal 1346 zcmX9-acmNI6#li9UMngpQ!=Tc8;KZ+!+7dxP_LCb>~KBoIniRI^<2qHnzK3QP0`Va zlQ}dvaiXCeDzTU$rL#_SIGLUiH>T*Cc~zolh$T)_RN`s8OQ?0zr9s zIf5V+6&010l@hsJj-o1!1}8}!MHv}}w%hF(#qAOQb%D%T0=VshtK4T z(2=B#OSzNTK)MhU;Xq6Ri5bYOK;c3#pF|s07-Kk{G&s|YKj-3LKcN&;n3UBjod$J) z(nJ|DX{UG(lL^{$F;5{Ggc(jG#uQ2eikWc@OOj5C^0I8$>5Tb&$w(wUFp$gTAdu2P z;X%-VNE4Nk38gu$ab%4CEE~~zNi z;S`t5r*UA?Aq*+9nPe`D(rd+o4l?RB$AdOL=FRe4KK~fv02lyZ0B`{i1RxGT1_7`L zLIbS~4EkY;Clr82fg1-AEl3dnk^s^Y=tQBPfDsE!IAF>T-WZPoody^P#6n4ItkUh$ z2K-bsYELGE*=!OPwWMZ%T7|evLilB-h=NY3T{&Yg&qfQL#7HC!`J6%wFd3p%iHx|+ zLZVi)&SkUs-L`1Zo#cYq6bJKZOs9hp08;?Mq8E;$+*?TPR&OSQc|C8zBoZ2mg>N&4|WL7V}a5w(y`OOQj zM{}`iYEjGnwm!6%J#==hesS}(rueCMhSuvX=eWy_hsW%y{<~_$i<^9taMh%P2R^G= zpW5=xfs&37gtsb}-THmEZ~TL{&$rDsJ>7%MXsrodu3Mm}@(u`AOw}(42@fAdyQD)e zt|nC*#<$%U{^rcpItgV2Y)vgU} zU|-&Nc%qHGr!Nc!7S&9e)>5-=__t%59mkzZxlZ@F!qpa9yzwNbJ=62W#akau;kW-g zA8WliIdrYHuqCuy?EKKeT#VF?nKkmV^hx_-%6sVaKRYL+t4?-IR~$scT!8tB%AsUz}^P*OmShI(c-?n!d!;Zon@*AG~*eQ}xO=7~Pb+vUy2ed!dGGGi;U2*-Jm@Gp(cSSVd*n(7+xJUmUyuGWhVahvx!>ZjGqui@eRtoP z^if?v6l%vs)X$au J^)6}N@juH*W1s*4 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_1.png new file mode 100644 index 0000000000000000000000000000000000000000..958ca3bab27e249b002e75039d694ccf46c6eac1 GIT binary patch literal 1344 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b51a07b3253c47ab61db9c401b9b050365e8cba6 GIT binary patch literal 5395 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e57c81eaa03b47ddfe94c05c5fa279ab8a528127 GIT binary patch literal 1137 zcmX9-Z)g*D7=GK-UTdq_$YzQGkCBZN54p*0+~CyHT{Xrlp7WH*0=v$GW?OXk;pQ^P z;Mjs>HONuJ%p}f;u|#%g#4#gWhC<{tdM3eFGND>gb*jmhlV5II0UyXD z#5gb{te|3*l)GN=bZS1-qEJUhD+WTAA3y|Ah+;Josq6Y;E{7@= zAMNpTUP{DSnFy$4NT(Hp)v|oT6w+lWUz1Bt1ZR9yz|TsgpfF*TSCe8gC+A9P$<{3= zZMO=I<%*jFj|AQb;Bg=fjLCTeMIv0`R6CSvX!*8bp&60%D2y)_AX6c>pzvi)vJ*-@ zqczP$yOLS9P1Lm99)=)8G!xjWWXO~Kig@tyzjlib@k-_MKn=kvM z8X0Nu$!0j;ij~{OLZ{eTsV}1;((Puv-T>~GNJ?Q@O%RiEcUiocN>>X-$Fe&O4rBq- zB)2Z(MwHCPIWsAhvyrN)*DKjp-Rg7}5eE)!T#z7#s^w?l6Z(B|07v3_Y4p>t!=-TV~6# zP^ZBN0xAJ=0HLlI$u8Y9_!9AKv&m#L&!E+6d^jvcqe?uk(o}+>G8}F4bVZ;RM6wm~ zBN<0JfwD9zamW_B$IomYT6+2eA05~y!Hx%iPIP-bIJ)!T#;IecgJ%-24v!v3=FTtP zNKIe=`cU-Z;B)GuN5{UI!!9oVJvd!GJaVgvO}BJRO^GwX!5f#yPHqWoJO9^o?B2+Z`#Z;vPo0rYeUK5} zNjLw~PtDaH@823fua2j`Kezos>&NKTTjM`PuYJ(SUsTe(`qS+IjPz pjfc*CnZ3JoZ*IfyzwTaM!rot*ne?*jC%d{qaM!-kt8b2f{y%G%@YDbR literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_3.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8b905d236a2fea50d622e8d37b1eafed1b86e00b GIT binary patch literal 1144 zcmX9-e{2(V6o0H6w;y1))TPtY6sdCHp~pP+21jzk8wL6`Rn6su!I}mt00os?<11l?qG1ashXPMW58o|7a&mc6Q~L?V$yB9+bNip3ezY&4rR1sn^a(Bt*m z0s%)bL`7q4A}MCFzI;I~8?kCF&6Aji?NJ1K*yGS-BBj#P5x$V{l(ULiiq_5aLZj%y z!AC-n15Ls*3RZ|&D;Zm}jH5b*nm%+-L#XHk5CMD`rdX|E9M=dU&9c*?Sn~TT;qZJa zg$f0nwmCUFB|2Ci;ZjIXn3gqGP4W?4i07qr*_Si@4hE-OPF5lXnei&T5*4E)pSEEqG^$|$qXKJkueXOk@>tT z84&{*$^}q4ip(_JH=Y532akvaWP3PB#x++aE$8zQ!_ez> z1GThpKhU8bPP2^Gwe__kUn~+o%M?H)h{#%`4m^8@3O9dh%!Q(T|q( zc5J;Ym5%{^xMB{n^lt^5Cg&hF)=NONQ^R zX$$sW-FIc?;`@F0ign8`L2qAWmiYDb@%};f{C6*3nq0N|p^I%plLxnLYVXjxiLuw; za=%NJKH1p!{*1<$qu1mNB{I&$Hq Hoge-WMOf)} literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_4.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..77b24c5f5bbc63b5cfdb2696c3e7758ac64fabe9 GIT binary patch literal 1208 zcmX9-e{2(F82;FR+Zf{vMJhC;XfX|*@y`Q)W*A05o?jTe_-NXV#*%p}v;SOk30nKs{Koe06(moG@WRU0q#$ef`9V6DLiY zGuO>Vcz z>$Um=cqmLoV{9VHr_w&%2p3BVgCQ=eNpzYemsJ+*aUXFa$fTn#Jt-Elp>jbPuVfq+ zz+=Eq1DQh-B9acH`Gl#eTVNT7RUST&A364HcF$sEM>=E`s#XjGyDef)Mljli_eW9yc_tn9Efv6$mUMutyOh zfifuzr(>QX6DqltvOiUkbJb+|L4F)IVJJ$P%?_)L!*GG3d`>pR*Omp6;Yc=-EM$yo zkp{dI@o}icTV*d63(#taOT|1{Rm!Jh<$R`E9f33eE&zN0$N;DSWC1840M@`VFyMo# z0t?49CxMdzE*9|$X3395WJf{~QmLR} zsO7Q&Yg`r&AOcOaY-SZJui3={C0E>P)t?%V>JPLc%vbCtKw1$8j=E{9mm>lmr!0Au zh?G(zMn)|cGO$`Cold9$SO5^#ya?6k9>Wq0#7ZSH7JUq#t}|{o=k*GKfJop$5|7e^ z$`ENMo@24H%LaKXljj?gSl}2`u%H*GyQ?Vjcpr{_okxAGk2aC-Z*>Dy7=pD|8CCp z_FMm0&^xyO$d`AyzEA7!*^XB~ep6f6y{Gp|<$nKvKOSr^#gfD3lW$$vKFI1lmX^|V zGvrO=p4H_>t6rh@NZXtAcuDJ z48L__?m1=5q-9QS0_?*zVtFd@-23xXr9B zU)en{wQ+%d*Y7@hVf56kZtVkM%<;)+&p!5ztvja;Jx%WH+&VvZ<=sl(%UVm%F6x(2 zE_>;4{q)nkwj2MedE>m>dq*w~pxFgHJ}0}l?&|lq=Pv)|bLsu>mYnK7I4Ax!+ut#R zx^BsDT65^EKF|D0%i3gLXdS&dwdmosR{h0eTjWc3Mt2?Q8oO~@{2N>zO`Jr}(PxnM VCvCIO{aKSAbhLLa{kCmw&;N_;9!>xN literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_1.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9e840387c4ddc1ae394eeda5b2bf41793928e9f1 GIT binary patch literal 1271 zcmXAoeQXnT7{`BQFSi%4!2%^TSfR$M2NrUZgPeNE4LdlpLk=iXpvol_Q<76|(n5s; zPgh4X4pT`3=d4(_2AizFFh#5Bk^%*aG-H|~6-sDa!={$e$rwX^mXLg(w|}1RAD`!G zTiI-$R5zmz05EA;Q{$>~HI?I~nu>Cs(r|Y!02N^6iq%WYqe`WkFkwPPMMY(0WmQ#G zb#*m@AT>2LwY9ZcgTa7dCW<0imgYFCAn=kT`Tc=NB$`O{XS2mp2{Qqb01RDkwQ3v= zz0+;-cnQD4gd(EEXZq@xbUu zu#lRH>DUx%&rzPdHCS-QigJG`QW(#S!g^G##GJX8bL)p6|3J&CW)>_SxVoj>cP?vuWA(!J zLx+YA3_UyXlhUKe+NZajS1K=cF1qqm!|i)bsm@1-mg~3Nnb`7nmv^9Vf9cUo{$JC)J%$f>W#_9w19f4lKD zR-4;P9{0?ed;z}c>YKe#WgWheRBciZE}c^B-0d28x%;pe&Ym~zG_&!c>bn^&TREv| z`J#KLj=wVa;M$9u4{qF`bVQhwUp}~h^!znq&b1?|e;Vc=v-(d|Je;~W{Ke(5-_O$1 zzmM;6&8)ueHKVP6cM#L$&ZAz(0$1hD_vXG}7~xy*?;|Xo`pfVBa&9g6+s*|K;I7q! z9n#hF56|)P#kZ=IHuYWnuc?Rs%kSLhn!_CX6j}G(LP~TZRGLrkuJbnJIo&$aB iS7P|R*qPLsUq#SZ_|tl_UH2FwShlpev3tooAO8<1p+sc> literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_2_1.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..861f53a4eb866e70c5823754834ad733d940488b GIT binary patch literal 891 zcmX9-F^HsQ6n?w2yUyO^Fk}jsv#^*#f(aHD78YLO-kHT?J5HiIU1`JqOOfe9PEhb=K2m>+X2oi)$v4lS!2j6>-uX!JQ-+SLY zy_WCadvFf`?q7X!`K+DqwRPI%#C3${ZmUYu`EQkWAN^dyqkH^%+VW++j z&ei40NHcp=_`7{1F_55N=d;JsNFY_w{0dvW(>V1Cd}=N-${I zVsw`?1Hqn4UaZVgE!r4KIih%yl?Q^xC?-F&Bx|Zp7sev7lETf)Sy3%_hYS~?uK_Uv z$^kmS_yr-a=wT*Wh3@a{s19;;qcVMyCnqxF>%!8MQd=uLa~s8vo+i`s9?;@9WkD2>3p<~-EB6n zwt3UMMk0U?U;_jIF~AyNj{$0-O31NM9HDZn(qM5g6CshIQ~_y#ECTr)id2-0(PoOu z2;KzGgCc>hVq=qVC(JC6mywyKUQxtVRiIXj90BL_#DGvE%1CId6oPsfH|-(LN2@%0y literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_2_2.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..48c96820b0a7c69252dbed5306a53fbde07e4e4c GIT binary patch literal 1100 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 C(z4qC literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_1_2.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d3e98d71e88ec471371054b3c5d3ecb2567f4a3d GIT binary patch literal 1113 zcmX9-acCQL6nqFQ7~IK<#Bz4A%UC9>izUM_3;UTd_}=^8`{#Xs zeBV2{XEL~c-OxG!SU)iynCkM*ZfzRq?e^i~=a&I`Vb4o@cX!vGo}M*p*7WxFIvkF^ zzP|qcehk9~1_suyUF-4rd^AmQ94m^vB!v}4PNh=0T%lAdo94W2x7ux*0@e=#?+l0C zv6wfWpwbzCE-w^I5u>71txUb4aU>S~bY>TqOw2@1GTfxoEVOOx`XO zP^E&?ZXfHR1g}3r1Z6Umq$Sm_fr-gJOQYg!1 zD{0zUt68jfDlQh>B6ysF*2WE^|WZ@qjP$)R>?POX1jeGu>c_e1waMR0py!rc^-5Hw*jP2bv{Y{o1G&esI_yPU4 z|M~bc_rD|0XCMFie9vfR{N&y3=A{$=sGFPYtyBAqBO{}Wowr_ld*q#~LudM~KfP&8 zqqEcdhga_WIQII?yhyI+7jt4&57Z8ukT;F`@nDLh<@aW}Y|FIj6 z!xyx}H>{IA?=J2q4*m4W>iM3zFPwi&e!1)5R%yqIGH`$6LH3ubfJrJA?8QcFtVzX!154;}MW-%WVk3*rP%jl17}&@# zQeC4{w?tnP!HOfLV0Givja>gyi#n{qsJ_=kwlM zV_Tw&hi@MSfW@0Ot{?B!WxWV_2739)x$p?U0E}(kwxKun_4W1l_YVvV3=R$s4Gk?? zvOj2UpyX2Cc~*T znaweUqEN0#)tXv&a?O^(5m=1zDSS|ig>@M(snm3as}*APisH^>+pe+Dv7;f72uQJ@ zi&$B~YB_(S9O%|Vs7<1-gs$oc*%1H%K*BJ^@7F>h9mfrZnHGeZM53W-mr5m6tA(gQ zgbk8Hn33?PLc}ym))}?PWlTO_6^*)Nxrs0xBBK#TBzT#QE1Z%QvL&fxDVC$zZr*8^ zn+r8R3jq;=2?(bF*D<;jj8^b?ja8gjuBjRw-A2;_5s>LnDoW&HOj+its_10oMnP?v znNF>+;Fzdo`vWvi#3(w!aw$>F$#OB3s^oIDQpvHb=Im^z(?JkY054!v+0Ru&Vx34d zxoj(Lv{TiNKHIIduQnEtkMR5HU@#hvhy*D!jLHjHskba$$>nFt71wsUO%@~`Q$@cf zh4my+OtWTItQHe9rq-wx+YP(hy@XhR7=Q|(1DF6a04)qq4+4kMDl!e^HUu0L3i2#i zQE&x7A|NG*auhNIWF=8Oi(CV)8&3nzK}^7sa!^YVc|BS-OsK>OBSxUjNXZx-Bfjk!7KZJ?i21A#>NM3-=5i z=$`aU&YgetP-XMTE&ckzRjuhCw2^z+srk46z2<){c67xT_VU5GcRf4*n+Qx?94jkd zK6Ufb;JE{bPI=Znz9v=QbM4LBUcB=m{Mfk@ORxNT-wVu#%e<>rKGW!1X{{zsZ@(}( zb@=1C-(UWIiV{bQyO(@$fVe#W$4%|*iuZ zpHCN#tbJqO{;y6v`0V)DXP=b2XX+;_((%(r|9M^-^F8tYTu`l&u>)%Xzt_;d3XQo VOFq&9{XK&95htWaDBW$WMw&C8ZB^+s@2qS z!x9PJeOM&7#>~M~vg;Xe8g-NPboiOER3CZ`~_ufD6`{VoG z-qp?OqUj~m0RTmf4Rvd>yfRx0^K-KuFWKq?AQ!A|YOT+%)22GkWlpfM7)C6XRoF3_k78A8lzq;?u{8_|9X9&~CVekLBarsAH-bVw}$ zIyo?5z)lIgj38(e#=N3TL;_O^n9;#0JA@$_03-l9fq)STS&77sARd*fpCrS2eT-!% z+-?{QN>Gsu6DvrmN{6T!xrRk)yUOUoEk44*QJ#n{5Z6nU5`|i(qT~dv)G|0@C9Q6q zJHP~@Y$)!Cro4&Cpb!Hh3W)VUY6gg1pmdAXencC@n5f2E(&;n= z5(Xen0qPavoP>(V^$FaX)Ou1TE^Qyl_)}A{NmwWs3YB89S}LRD3RYQoBL!GGjg~#kurh9~%q0Qn64bGXXIGGyoU@umg~dK^TCf z0KhCr9GZ>L=YjDUi2w!#4h#g;AWi~E0mz7<4TT;O1`IG_g>esfY`hW>IM9#+11)Av za)({*_0Sw=iAH^?R1{{lBzl0F3o*Nx^hk99go&%{X{|3~;wGJusXzk8(ufEsr2@4= zsKulP3N`BqJ8SSbSkC8&hJ2}b2xbyWf`9=4;{d{}7uKxY6G$v(S2C$|IiJ87iQrl- zWiZfYGlMEDN`(_ceK;B<6eFZOrIA6M6tW0(p)i2KD3J}nva;~^$3O7anq~^D9KXIf zJ7*f}YFiuj9zNL8W0^mr{wBP3G-n%sXN6Am)as!V-tG{2*n4CAo0{8y_C7ju>Wcr5 zk1}Z2WZ9O1E5&!qHf?wwKUF#0pZRJwG9&n}rTFW8ZPHK3UFGA?%Enr;-m;;~JeK$C ze=S7?EbshSYUuQr^)BhR)g48*!ylfTS^J96KdWUnc_xrig5sX`S%%{WixUC@jyOwkvn!V(oO@Le2*}I-N+g8)mKKlKfpL$yAmhY@Q92O7w z{f)*sqxQk!#lJ1%)Ajy^_4kh~o2QQ4vQ}MhEq!L=_E#19k?t$+-FY`J^@?AZbj(4p)J9p4Gb*5ahVAuACS10Dwuk3&I+Kv+)7yjOJ zXjR9=09b*3zLm>cy8c)RRbyDOsIBSZf#RZ#`(pRILHQA?RQ}7_dz}yXRklb^!E)i# zm(CBIS9Ep$P;qYl>+9Yf{_8=@3*8^z+k2JAcX4y+rjwCAJy=)K(X|*EzWJkj4Qse? zVPBtV&)O^Rh^np)wne*s{;Y%zWtbKS8QH-7LxZP-z8 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_4.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..cb8b168aaa86f67b316debea5d9ef02ee1e8f7d8 GIT binary patch literal 1342 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 Yd*gBHw-fuMjz+L;>)7apEqjjt52`}xFaQ7m literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_4.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_4.png new file mode 100644 index 0000000000000000000000000000000000000000..efa5f88c3322d1c40c53ddc55be3ea952c354872 GIT binary patch literal 1225 zcmXAoZ)_8F7{`C5TW_O*F4R$_V-;&W@q(uwcw&>Ca3dWSdW;*nzzHRsQeriy98gJ3 z+Ux=yspcXLDN?Y6z9^<*gA*%M>7d4jG;qkkPA*ubgoZGzSY*nCpCu&U=ii&>`{MIF zyH>cJ)27av3ILe4w6Aw%v*OLb+Vss_*)(Se06kc-Y+y-q)ai6nrcBZ6^(`$et*xyF zg8@O1wzjtR_I8WiZYKzwrYV+n2?8%kqAbg?SR#|j77C-9R&O*298eCxxQsk+_W5l7 z03MDwVsR#w@#OMSNsUyhNg6{qhf#D{f}Bke(1b(`%XB`*l`^7M4A->eM7`j&0uKiK z6i`?sB_jEVshl!5N>*6IVZ#F_6$lG<02lx~2qKzHL910k(WJvM%rHf-w;T-KOeA1F zZzarj%7QaChX-|v7#Ac2#UaIMIqiz(*ks9*)x0*+iaYHN7IO(CFVbR|2`4;>te91U z1ud%9Qk99ki2`O8SiHa%0H}hH35zp>@_9;BxkyDy)|CPrW-zlrTK!He!Z}g`os(Eq z7RoWHnwIPN*o2yf)q=@Pq8LYzUW)d!Y(x;^et#ws$tMzOHd`4Tt=H=iSVe%w5F%xw zb5^#5c`J0d$|r07TwNJ$WNMS;324MjCemVY+UzWb3l4|mV#1#0vOp#hEv7PBL2Xnh z;Bg@mYYKX7iVuqisC1ak#l6LJu$+(A%7sSbCZqu10FVGs07wH+1fYrl*c3ymy=aB zU8||E>1Fi-B4DHx3zM{YvZ$yzlscbo_;VAn(qy&*%XQQYNE_nBO+01uu|&Y@Qi8r@ zG?+_A)k3P;?*h{k3Eu9D$zX8`g}qlAQHGt;xURy z(?s5dk1|+|vqO&!22mI%V3vZat9kt7Jmc+$Kd@z`n+303AKTdM{Y!fn4fO3gu!`UP z!;@`y9&quePp_WQ`QPQ8?{u@r`iC!m_|eQGSLW~S=;&J4dfPFw49AB=9bDh5%O5>F z>(F0|dq?|DY`S!47W&k>dp8zZ<{s}*&o5u=p34vIzO?BX`ET99f&1eoaMTE9uiAEZ zdx(9h{ahQjN9P88{V!~oOYdK%fA-X|H%mRK*&*3qytm&ya&lbS9D1Yo#Qv@hy!*$` zx9PTgJox_G>wb4fHZS~H4<0X0AA31f{_MMJyFdNOy|457@>{0|l?C10s#9-$)5-7H zs=FGxHO8;mv6g=Bt5E+QN$hzS5(mv)cMSi0jdX&0hP^{O{c&w4_uJ()UzDw&?;t*M z@v)=(T8``Py0cT6p z?wa?+4RtlC>p8IIT4|_O{W$x5pAeddp82K6IQ@Lj$fP;+$_It+!^f9zJtO}+#}KSL lU*FPl&erq5^4@)@J88Inf}ekKxXA-7UE=Qja`F1X{{dZk6ZQZA literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_1.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e564cbce9886322ab6e7565c691d0cd559a175fe GIT binary patch literal 1285 zcmX9-e{2(V6#sTVxNgfDVO98lZ=MNe|*frTCP7`IThvI-aNq>&4`Wfco6 ztdIr^o~FTq#T95+4HxKSuuE2;YG)=?t)znz>!@tWnt@oci!&MWwS?sJ-sio4-sg|c z=j~r_Hq}-)R09BN*Q{Q-p~NdnHCI_)>QuuA5&-33{o2-5rB$I&l$Dj0mzP&mR8&@0 z&YCp~K@g=1?)8EaC=05`dv=tX8$d zp>w(nULO$%GLfh)78jB!Uv4~1VTgsO;c1QAq7ykZB;frXDju*TqkMMQo6m-)3kj1J z*f8KEfyg2e9*O%@nTWcW)WW<07Hx1wgfO88fC0dUAiPTD)@nr*4HHB^!wlQ)8MpgR zC8&S-H8|@_JWLY1_1)a{Q&leAcQnH*&rwfGw1X>=T z0R)ezsF;>bV)h*69k+(_&R9WA7o+)^%rvaQR4SuJW76qa%)k+ZKr>!j>6k0(^AAU& z*+ibdi#mjRoz)k~h2!JIp z6m$tt3d3xMK>?2gKM7!(o_#vI8c)FdGIBjW+_C0u}~wa2mH0^NXfP zn2W_csg#t@r(j7-YX`Wih7>hSSZ9+_K1+xNt5kHxrUS_tIR`TZR1J(e#AHxeNu7hm zU3OY@JHmc5Fl}h!sE0d&0u+p9@=!!jlv)fWfG?7QuvJvYVJM!fsPGk7Oa@K@m^`}U$gSn z*46t@9&()ZEK=?ph1W-3a5aikxt~1qj&+VCJ9@ty&^=>Tn$vJgm-qSe@{-=Eg$jGy z^^vi6yX%JgE*zKsYK}&?s$RadCt$YR8v0i`XJStKtskc5@8PwF3+aJ@p}Q5HPs~kt zMxQAYOdcC}9 zo%*Ay+6ULK^_d$xv%gg$TtjVo@9AfSx`7i7&BXi@uk?QVRIIsWHZeLB=ulogJNovy z>0?tn7aeRj;ix<`S|70QdvU?M%jdVX{4sI!=fS3fhsJIT?)$sys?OCv-t*+;mrnb- zI%fA6wzPM&wqw4dar3=fxBq#p$^K?fqS4)aDZil8pIj!@RDURJmrorxZ|%hPE^HpG z4^L>msfb%1w5{G&-*b1EP|SW};o7dA$<6l_D*EqhlcRtBTJjRCS!G^%=Cyaa{|6;$ BJwE^d literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_2.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..60b54a7c6c39be6c8556e5dd770ca2a3c89780a8 GIT binary patch literal 1114 zcmX9-f5;Pc7=PZMx7QaNF>BUEM=hIl*%hZ9xZr%f_hr3ay{GS~6DMA9;G`)Ro;hjQ zk;_J1FNg1lSt|#gv})wU*ScWP-dZth=@A2`ov>iqus51Ha+u|}iST)T{qua_^Ld`P z*G~l(FM4nh04$z-etf!DAL<3}8tCOM=ZS{_24MXQ8z*{WUteE;fB(S1z~JEE(9qEE z@Gyp9E|+U$WW?+9`DmKrI93#SSq`hJl1L=d>1?53mCH59X?Hp_1#AEWel#5RM59D3 zP9^m~IwRx?Qn92~ZN1SnIT8y6Mit(xg$P6TXH|MG!IjdXYC&--$(Cbw+vOk*5(zOD z3=zvISV?!+bDmBWM=c62!b8fDPi&Zkx z;F8U-*@_k0My*q5-KuxdDCu@HUT=`_i6kWl0xB;grQWi5K~Gh31*dFx8Z1aWriyM& zB8(`RiL?2nSjRg^c8Qy2W8(2!!m z3W6g55&|;q2O$BA%3du-ri@_Dl#9iLZRcAp8}+#G2+;9S z*6<1@Az6OK2^j5gz7s2U)74v61J&Dp4=@B4q}*Yah>CPP!W&xDOlie@$}Z&yDxI$A2hDx(^o})`VRTIco$cH2X zX?~QUk;NjL?;St0V)U;&Kd^UtN`y7PUD(m-G~9Q%Pd{Kw^i`MLKu>2C~nm#lg3k#lqNmqvd%r0?2%Bl_nFVOjZb{1T^)aC|FzXGzI$_fN?i3L^~7`6_uYHp)SJJ4 zP*}OsI=gh1Irk}Z;LIz>pWW}N4PBRB8%v~T>m$qQ)w@bX6k?>WA3>hz77*H74UaNz3gzSE*H V^VYxXq@F-9IWaYUV(m)@{|B|l>g@mk literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_1.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d7ec2f4173289a086086478dbf3acc1e65eeba21 GIT binary patch literal 1028 zcmX9-VTjvw6n}TUyY#MZRq8A*a2-_0AWA>PGlSxCGk12kjLWzjR46Qyfc;P;jNGWB zVAQI0t0Nye>9lHx`A{Ta)!U3vHDiI@ph%{L^;p2Vb=nU@!-!JkV1F|PzxN)$FYot* z-+O0{t!8%3?VSUFT`Px|)`Gbh6dn!*edodHZGaFQJG#Cc(20qO$;ru3C^R)SH9b8& zGc$u>SU4P>ot=#*lSzt7u`DA9oFwHGMJ|`i^?I}2Hf_7-x}NV-DPYpTbCFywRwyKj zrBtPwt~dBrTkKd$*QpMMI!j{NbVTOjYBr%sL{p(Q%dAz;cH6SMRT;VZ*t0V@h$Ivl z&;+a{V^%fVZ^isBjz%fui)cqf$W8+A03wFT(Wr{!8bRpk^d`@5<@0@2z1M6a%fhKx zl8LAIL|P;=GMQB=NlPmYwrp^Oj#w%|@F%8Ix$dm?5j#bW378ir|!`eq9+F zWzVXQ9Rm&RXpAPvEJf!TwkQZyNoo{}?P}F(HXYL(^m?A>A;4uI>KN6EvK?ILlKBB! z8Rqm+vEykyzdhRNk5Pn-M(KDwlSm3=N=l~{j<1NpvQoQR+iJC4+wlhsh#aN}QB_Q6 z1+r0MjEc}{Q<1e!^7Zd;8@7=SV4-bMY5)4TDsKflpV(yjT{tc;d!7+5k`yi zdO|b_*-dL+&hU$!alN}^4p84CVn8RbOe&gV5(R-OW`pwyKF8e6be$QBvYv}ovJgG!BQ5N>ha_#n?zy)sRU|J z$YhYi1;{lK}O&mY=t?|W?OKh(c+!hdStGp)V1 zE?!z&zH<1l&ktPuW&7HG{qEb-AMTkyIWa7L^Rnq%8ym}uV{hZmnNRoJWbgh+Tsr-e zdHu@^S3mAeK;@i$;n&Yz55FqS-FoX3fAo(V|K9(HZT;}z#!2&uH$J+VJ9uj5*(bl7 ze}BDbo?n>!{mAjL^vUrz#f3WuUwE%LRe1MBC-nW}^IwFIE&T0x-0t6=zs;PD9J$@! eANu-QNPGJ1D<53GdOdItE6b}(U%hnVo&N#NeZaf` literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_2.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..268d2441d768f30dc975777c2dd83576a7f50840 GIT binary patch literal 1164 zcmX9-e{2(V6o3204Z6{}jx=~kDGfH}AQdlqXo&~hpe%>Gxf@pL%n>e9wVKnMQbH3> zsZd72L(42uvB@elp$Q!f|E(=<@DL`*7a$P7fjmXLhjuYcYr`F!3R z8yfU<&v|qX0CW$m?;mc~Rn2&;v#ptzrH_0E&;~;rM%FgRmX?;**4DPRw)Xb+j*gC5 zvu0r!*4f!Pd-iOr!{H!F7sJpz&x)c?mZfkw9FHfnS*=hg8AiR)AYDMafn!ZRpCu5m z1w*b#)E!T7>8y~;%SAm}siqhL^SVtEYgN29Rdgn0aw^Q^lZoz5Bsy-}e- zU@@6DD}qf85Qz|-iSW6Ee>$U-^NCuy&}iI3G=LXC22cSq0Mh_f3{VpsgF-UOq>xeO zoFI`9qe1h4!2#j{NmdjkQHn!a02L$1NWlZ+DPS4!a#%pLDnTNqdeSK|mkaB9rdHEY zlMD9)88XqTl}p(K%_$jfweHI_g1MP^@t#&e<+{@XlnwK^%s$!{;K`7mRh2+0rsOg) zy^yIH1=OfeEQ>Ti1|Zb*BGROL2s|80RI5}X{t$Ap$oPDGARvZ966p$4t~gC*7&6bg zN*q!1I*?#PiW4PBq|r!co5xQrGu?jh1MdwF^04a9U$-{<=LY&$kE}RwY<%^OJ&U^f z&!Q`vcE2;Pd*J5r0SI{M*SB4ombdmkd86yv#$)XVOZbJEll!}F&vP6<^zzMaF}n1h z_3QTBFy=m@o$i|KvDcO^w%;vmnK-xnOy`Mrzj^I%(+4M(j80CBOZzr|_U-23Ij4Rs z|8Usm_w>BlWAC_n{rP9{wk=(|xAPZ&|MxI+e}Ct--s_+DZF^z^^L^KZX|?&z!ZG`s zN5#>eb8CmMjQ{+~{2;Zg_x%fRy}gl`+N+$mC&;IkvwQKcT7LU@;hC>XJI<`1^ejGb zYI|UG&AP|;9en!Y&}I9`q0>8K=!LN_zgTnn$hydA-*|6w(UHF7w(!dTj^5n;)A-8v d1^)Q1{N)9v4fYrBq??k$z}mt7lWR8b`X3mS^)Ubd literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_4.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..e1a0c91380ecb2976f855cb7d020fa064bb458eb GIT binary patch literal 1361 zcmX9-e{51`6#ZICUt3n0!;UGgY$X#F6_Z!@oUD7b&j!2K^wmBcTBfKNnIrXSUsqg+ zVI5Yiv?GpARCK7!pt6ZeV`#+=Cy8Bx9crC)vPvymnLj#as8(&}H;l=-_uTu>J%5~Y z+iGi+g#|MT004zm%a_$1J=fPq+ygqEhe}QfN|%ZCa^|MZ3&I(4h+Zm{^}B8FNphLP`

Mx)q8pit5wpq9)UQ zmkS1iB2*y3g>p))&`6bxOl3l~HU;Y>%wEzSpxt4OKc*97BDqqcpk<^MQ!@l(p)4+q z%g^{DrclftNqXWFK|T%yG!W{5*a)OH1ak?MKB+p0GZB?F&bm{!5bUC40xc#oC}mca z!lNYuEFCdxqYgIVHK&4(iHH{_LVN)xm8nonhZ6>xwraIbgTZID23@X*-ya_sNTpH` zh!`MsAgG5=1VnULri&AngxZ}n1X8wvv@basoq#+UpN|QJO0k5N$+ZdvOHvk1=9tlE zwfA{^u}~x($AN}KSekFrh;4eA(};U5bik?W^O~YTXEGW}r|&}?02Kf%05$-;0Q3Qn zKmg2uBA}6lUN?+IDJfu3V8?-931Sq0G=Pi{T2bhxpkEKe78rAb7sg|NB!G%S^je|G zAhX+)9=A3SFh?TZWHJIXS|S}ljXc~Yq}*bSU&_Q3wv^hNHUuUd;YoiSMpIG&z{H4B z&R64NJ&hW5q|Kyv+f4zlJreRJV880juxt9=`jm|^@b2?sv4TlM} zn%3*JMk9mD&6wPQqh10HlJWscmQ+cgMhs0-=tQ9(hY>Oper!JP;fo(=s;i+v`RL&0 z%nYlREnT^|<47mDKk?QpmA}KAbyHmR1{MHdDh_mQ|LJ2i(0-uUOMhRQYdJ35Z^ep&y`ipOG z#P4iqIeE!=ciS`dyzdG>TQo;nYAq@M==1AOz8~9FoIcukqI$9Os@=WrFwZ^}+eo-D3+!&tGh6 znOfAoCUEgu?fB4}XTPnz5zk+>@9MR&dH*fx9-ezayXsD7Nym!Oou2-lrqzMo!`uCP zHqSXlhKp`Z{uV5E3yT*f&c9Z3`Nu7t4~F#B^nxo}uTE;+ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_1_1.png b/resources/g2/track/corkscrew/large_corkscrew_left_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3b350782b15833bd7c9a25a2323342b0fd8de7fc GIT binary patch literal 1271 zcmXAoZ)_8F7{`D6!){wwORVvf2Jc1Dq8BOVgo4E$avOyla$`5GvA{`A=|*t}DY0RF zQL+-dt>S?NDikPEwUNTg7_&$rm0fU}MlVY>1uxiyGO8dc&}hK{KTAly&%Za%_r>RV z2HICz)y*@S0RZad%UV0C)mV*Ljdj&L#}ZrvKpkjb(b-lVYieq0YisN3>gwz3r%jvI z(9nP&NMmDTQ&SVF*Xs$wNKquq(mZc>xdflj7YaoZiKHZD6{S=z6GlLq0Yj_ocCFKi zxjjaIz#IxQu>_Y&yE1YhUx-pTVl%4*8ui*RkvBwK#E6edhisXIpp5&AO0-gvtUAEq zz)b>?MPdSy4rp>QZ8@WZMI$V8a7u(w(gVN%z#)jB(Rg(_(O`(0%_9sm?r`M1-W!n! zOs92(R!^cv1~YR8tAN|Q1TUIhVagY$gDEze;gX62GwF<0y_v;n-eeaj!O!?3TqG$Z zWv`?JH=c>y*i9m2XmQW%F3`0F#~6S>fFKEyR-iBdvH%Jw3=lBNz@!sq{7{L4N8n9>rhtt>oIL7v<3Z6Hi}I6s@so#U`xkJ7A(GYaecM_YI*A$oeOr1 z?pF5p&24GB2RXK@ck0Rgbl{i$r{=Wb{pGn^`-U!Gy}EO53$poR{SoQ>eSMGbL7koD>>VVP~|CZ?YM-m);*b7^L2VnfTt72OvmwU*cZ z+10=A`kq0@k8A(kRN&{WA3EGXuiaKYDaH403Vo_Zho3&ZTm6h23_Lvh+;qpf_M5XN z*O1NI?=GsHwQxjzXrMc~ZSyNDW)3aw9oxR!^YF``F5enNPgF*JHB=^atBWta#UJpz zdAon&LL)`o+S|DAyLT|t3p3&a6FcU0kM7)bC|qtI`@z!j_V4+r1B!Z77@i-xF=d;v z=Ly;A@1;&IKwG$8_ULCrT}Ll9b)GrAFzcWqy12=dsbro@)nJg+F-x81?Py zbG_y-nx#8`EM9W(#kJvc^_9;DPc7Ut_?LQPd09sgd+^bzS5>V2?CSe9m(OfmaC-XP z|6HGB)V37ZdhdQ>)q@SYmfp;E>9@K^OV>x)IbFxU(d2K8 zX2q)KtlDVjI_l&d$lnnK^T2 zZf-7uAOe9PFE39llgThlp;8ePrC}JI$z-%ztxl)g=ktd`!?9Q@oyHV^Py$kuuhWSP z2C3Piu-TPP7wPrUfuJcIvBwi06^dw;`9_VH)k--=?lxiFR#nic4f~9-L0dBBnM#G! z59JbXWqD3YezhGzVcw1^@{FjUYy$kd;U{x!j{vc9Z0wULR%I z3AY;tgAz<6Bg6_)s-)#=BdTRFhEtkcDl4yX1Sn6K_Q&*6T%u6RloYCAaGg-wN02;;6jzJFz{RSAe!I%fUG#&>U70{B1ff2K2 z)WNB}9wrd5Mk0JN8G#usi5_52sFdfG=8t4Zw1|ZCMVav$9g2ZZZB@(#H`3k0RSf$fZ z1_NWU7%_zvS2zibS7AYoVwgmeS{bCJkd;Fh2K@w#Xfol)-^_pb@&|S`)>B~h*vLnj zd9tp$YC~=NKWD-xttACD&mm3yo%=|>#(M7h@}kNIqT1Fo#UN7r)~J*JY@N|Z7X!0zvN%2 zXjwPVRn&C;?LhA}_E2$uOSEj$M1T7q13k~SYRV=Wq9@EQekk2}<*egm!=L3}$<`WL zyZ$R(F^IPwE9Fnsp)3DQ_Ql&5RPLy_bMEHO!X%efwG_X&u;gkoJ#b)F#dh6c&R%kY z-9J7$fw~3?(d*y9)$=c>JJu~;Bp5vMyx?N`mSEHAijMxoTdTHQ=BDq?>nPK#+O|7z zqr9{HboOM6UK%cPI)9P+y4%uuRD@^wYmUv=Zh8(-^Q->itNbd}tGdhqJK z;{|=qKN7zchwgvSd$cgG$341dt>gaoT|;BbwC^qayy5qz2YXf!StGwb^isQB5IohISyAN(Jt1zMH> literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_1_3.png b/resources/g2/track/corkscrew/large_corkscrew_left_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..9556fbf2fd6cfd35c2899184b2b3da9345f8809c GIT binary patch literal 1219 zcmXAoe{2(F7{}kOY_~C%f;ASXa=5A&D5Q{64sGPX8+1!`x9lKQ3pvOE1!{5`$E;HH zh9xOWT`tmW6`N3!BNjPW6A+3i?4}h5Y2qQ36+M#%s+2fq#l~!~h1U|2@AK=Q=ljR! zdHOm#oXxWr&ISN9x3{%+RjaWYZ4HKMUbKll4S)f3zPWLIb*!nWsjaOw7!0#!&8n-b ztFNy|5Tv1@p|P>iY_(c(+)hy>!?-xkBM5vj7>q{a$z&>%$?1BzQo-$jbO74b{$=bXHDpd5yC4agsN0o?o&YWixM{@4nMJ=XA~_Q>mre&Y zO(~T$SoN}a0Ul@~B{MCfYzpIbhg9|`6@Pj%nw?G+V7`o*0D&S-yU|0UJ_ZkXU6SaN zBVt;KXc?uXXJDm3xLhy=pbj9cvIte}p2!jm#EL~C7JVWio25J+#^>V#0Uoyp344^p z6$)2f_8e_1xvh{zp@_j44pSu5T-DynB6~ta=v@EV%}J|9Q6B@9fW`r&_wo!-tP5L*2Pt z`@?l7zIOJ``|;M$lIt(US1y`=_~LKezXuo0?Q45z?S1h5jN9_-mSYD`EPuJ~;lh!b zQp?if^5cf*)!{-HY?(~Y-5h1&~iKD~Wyl$**lp4m1s_c^L1^xwU;=Bq=I@Q&To zBMoz*mma)wbk%rI|K-4*jp;?mM>l>rvp07>MGgKr)wAX7yq3t*__2#U z)8vb)<27YAg*@Yl_?aG5S18Qv!helZZ+y*SqDAHUMg g4?j}o49yrXT%GtfzvAr2RT7|meMjri8(Tm5A0Xuu8F9jE3CZ{Q_0RMD~K%=?Fqk(-g-sJZ}+2!R2!K{lRE7mP`(1v&B-0&;!ZB)Z6V^ zhg0wN82kY?9JR(1Vp{g(@*x^W%m$Ufs3o)3%VR;2IO(Djesel1WK-@!HZ)#L8a2R* z0|y1X91<3gga^%p>q}`3Ea+j$3Mae}CUpR?09X-3Kv7Af@nTrWU^vOLDVr@LNjHK) zm`G@ddL5>16n7*ya*Xo8>5&dK?$CDm%9R>$Fb-e3?J)@>~>b4ESBR5+SV z%B36ytPCP@sASc8?RdaRMciCGU`s`$Od?RoBuk|mkOIIAfCzvWfCvC70P+ZcWwA7L ziZBv_*$j&TfdD=V#Ec-z0>}X`#xNmk@D?qRk|RFuPfx^hFjK_p0jWiddelN`?Hu8> zF`hMnA;j1+xxXwNS!ffPgUy%1rtA$=RxZ?)^ab@-_}EyneZ}+#fNuyx2Z> z&o?X5`(1M$C_(sI_4=*Unn6wHI$y8z?BL8x;R}cNJw0y<$Ss+d>^qG%h97?y>sUJP zE-|NYc+1A#8Hesx3@1BVwkS-`MUK|auiUw~UFrGi?Y>_R)y;UXL0L0QjGi%7RBHSF zyY@vxQ=8KHdaAO0sc$WzJIXbV_t_SbQq{CCU*3HFT=U5BXJ75O+BkMVQtWEFe(a4I z-6PB+%&nTP{z}DY-L+%0G#$?j?Q{>l((~~6felBNe7AOP*UvH2#NNo}HQJujBke!! z?l;HT2S=N~y;(E++^R*-kF~CAT<`>*p;h|^R=sm^O^QfY0=kzE4{63NDKRErju{EbYxjcBA jdTG0KJG=hxTpm3y-r3gh`(K_iIbdpSYdOB?&29e!;3h5@ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_1_5.png b/resources/g2/track/corkscrew/large_corkscrew_left_1_5.png new file mode 100644 index 0000000000000000000000000000000000000000..5c5749479b65d5aecee866a93f2198c1df3fc33b GIT binary patch literal 1146 zcmX9-UyRdq9RD82(c=!BX2_DOrjikh7Oc`-ifN=mkBqY?#Vclpih~r{!yq*&xj}}R zamE4T(uXB3ICT#t4pU&lVfHZ0B1JB^V2OJeq`!YyLDAJi2mMg9+^1%3_vez9^0~^JNESS%$ql_x3_ox{P}%- zeG3*Wz%Z=8zklJvg@Ir&$S|}Z@Ukqbs-o*!DwWFR3Z+unw(G9j?sOO$cn&0SP*MD` z7!gm<=?s_4OT|*8Qq^ltrr9zD3JY_Cnixoi2}30dIy03Ls=08jq`A{+&oyV;b_j87pd7HREd({hb<)JQ{T(XwE>$4gyF35e(COz9fztBx!Qolq5|@qm5+pZlQpx zRh;n$`2Z~uT!aj1R5;0~2B+tRlqF^>vRR9i-6+B0bSTKll&G?bCTM9XU5FIQTG>h3 zZr1UN&DpAt2fqw~C=dxC4U8=WLM2kE@|qLQG&55SQhQs^;VIQYKR^6r6IoS+BR-Z3MUmWDaABKB0ok zH7eQ^(k;dG;+3{h@07f`#w;47d_Fc12oXVl7JFAvP|SQBoZ_R zvOJVS;7WjGKw1E07-UMQ97DAsK=oCxmc*YW#sz}!*$_ock zgg{9WZo?p7?=SP7j^Sm;>O8OP8M&SP7%BRIpK{B9W$bHN`B3S z?RR#}{Eok@Nvl3Qz4yIk7uRj22yyn(xtX_E>$ji?(w@q#)~+jk&6%morze&)y)7Jm{UUv4W@_^BHv4c_Kp5SyY2?)U?VtY-u7&`R literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_2_1.png b/resources/g2/track/corkscrew/large_corkscrew_left_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..64e3878fc4df56e575df58954f67faab1a3d2952 GIT binary patch literal 1090 zcmX9-acCQL6n<^iUfNjWj2JMpDdvwbj*;rA=ZJXSt|ithxzgK=GuYFe7}#|j?l$vB zz{nz=U37;=8!>JH?~ll?8l<>$gc;>V17_}^)kQopgTR6mOiREh1%GA?zV{yAKkwt? zdvAF@8W|gXXcPd(W}ls2=+7tn^?=jS?>p$34FCts&mEcR(}973!NEa?!?9=2o}r)pZvSFH=w%zG=i4ag>U>R3D?h!?Q zG8Iy?;e3HDmHA3lu3On=OQUft7IsODHy!hps*Dp)QYhRfNm{01LolnB;b+eLgi9)WYF4maQccjdXgeSVYyT zkMIO2Z;17W`CvrCV`)NA!*YSn=uED{X?5PP6MoVciUh(O&In{&q9uh@ihR+K3@dHg zIjdc2_Ns0QJREov;7>tN#mJ&JQVzzelw`%SOZb5=%Z zINUls8}iqaLXQb^SFbfa2mH_UE#3sC?u02x39&;e=yEeuc}ER9k!(lul^*dRy* zC4@PFOw>?T4W)A7jnH$$K#wR3aOMtgfe6(PZ2szRGH8wi??F| z#QRY?hzbNUC}c7H<0lWecJBPZ>4hiirA3mp;5U;e7iF`sKZ| ziRFn;@<&_In?K%AO=k7`gmH3YGOtMI-n|@}WXE1THcUHyS~;kU-BaK9?e@K=5n5T_ z``x*Z|C)c^(Y*TkZwD@ppJ{rhjz;*OSFMYSy8Y*K?@&*t4#pjDG2 z{_*{ycxK^+(su8@+WPeC(d8NI!Q(@1oH^xO8s8Z|bpP!sbwjCr^v%B7$^VS{@24h~ zqF2rML#lCl#orz9=b@=78{{wDB-A@1j literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_2_2.png b/resources/g2/track/corkscrew/large_corkscrew_left_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..22a9f5552427925a8fa0e3d4a3cba7d64266ff1f GIT binary patch literal 1141 zcmX9;e~i;~6o1G4=)rMWbZ2Imall9l7AdBLVkQ*rT?SUKNJ;ib2{qI>j$wLIaVEnw zVVK1XEHE!Kndgj^OjBWh9NOGXTy%*CE>M#*4kC+Se!rihNS0*;fs-AAEk-rsHF&$ievfrAOaI z6W!wY6Wx*j9v%Pbv##FG6${v%`Ez?N-nh2;bmrPh{@+vhKhbZa>#onn@3w{p^@R;J z@yQhje)WaNPHemzyfL-+(_>TX{96Y0-Gk9%#%X!C=g;*cqaQspdQbc0=Z~k(pI<=^ zjWcWD-109jeE80@iMdDq?z-waKX5SEU!NR5-lHtt|4NKG8Xi3v6yGSncME_UG22{`(z2M6RB@x%!Xx9|71tG(33rg;$UK525?` AZU6uP literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_2_3.png b/resources/g2/track/corkscrew/large_corkscrew_left_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..948a25b94d58ed09e515946933bd95bed0c4fa76 GIT binary patch literal 1387 zcmXAoaZr+X7{`B#iiRF_G%3kZ$2Kaqzwcr_?(;m)J^wu4Kfd4R z@a7t6-lBp<0D!#es*2jwT%W29*|b!@Jk&7=01a&3R9Bf=)6&w?)6;1*T1G}jW@ctq zRu-L3&(6-y$;n~!csv9VVi-ygGL=f9(`ij6lf`0lx!gWqC=y8|lZX(Y5`fDX3I$7} z;pz=S(k!u9afeIk@#+FWb2Mhh1a!HCp_Q?XaxSIf+jPjV3G-Uy0hc!7C*u+Oe8MN? z0HpxvQ9u!NhnDU&Gs6y6GQfdxAxtXa0tKOu2LKL$l1|q$nMMwW;`8ki$uN%l)#|X( zIBT;(ua|?ccqm(lb0tc?R4b4h5fvrTSuvAS*6kte0i`>l=88E&DNjNOWGb;ji)l%m zv?*DExMS~l<->SgH9OpFs@BE*Jca4-O*4e zkw`$m(E`4OjyRZ@heHGe>L^CW6!y5@lb}LLS9~En4;ca`Q_N;dxjaH3R7oT{8BQuw z#|$oWx8LE4_=3qO3Y0Rsj$j&1_ny8aXVM(=4&GoDxq*D^`3c4V8I=Q;RK%r z#9X>m$W)+Q4S^WcGRmm2cN;yZkN99RDwfHh8^8#FFy#fAl6wxvWU$6!Vyopj zxRuo9bPk z{PE=Sws^4twq8AV-u5DUZssW?_Qbd5)sanmvn#O0MebEAmoUrUv;d&k!A{WjEd@p!d-y7%NO>ySOo zsM~&jal_E)m9#CwYtbgr$wQmI_$l%FSM}Hu(p&WO`>m^MA5T}UIjW(sQ=|JY6=mtf zB=J#4Nmd=IY7ciFOWZ@Sp}eAKQ~l8~-{03eYZN|g=jU@}lb6=*qa(BWb30m^H=n($ z*)=jU(J08#I( z-YVLoXrC=uU2kKR_A|yu z4=!{Kl{HRId8Y1s^H1r;y}u5)I@b7F%V+$3@~bEMA{Qn^xw{Tc^nMUI;#fF%-Jjl5 zS@3(myKlf%CN+i3)dJU~F?U*Biv=s(j?31V+EutfC3U-lI*aK{ zhb306Qnk8*b#~gs0!^$Aw1ducqehrzb`ulSvQ$^4F(}Qbjv?FL)tLOwIXPd>^Wizq zVOfP_URHh<0AOBOskkyZ*Ck7kk(%s#iaT@wqypKts*>b7XU?3Il$6xe)VXu#rlqB& zr>7$bl97>-nVHGta5xyo7m0)(F97Mv>np4|?eEpeYu1PR9ch z7EtkkP6#X{;-V41869;o5@nJ#*XDtv0H~kdYd-X`^mq+;5u>xnVSbG6Y>%@}kN(5rz#6AU}SYvTn#Dgtr> z(NIi-j%T$_(lQWCdAw#%rE7S5WJY2166Ej;6ghFy+Rn0zD~rN>_1;;U{7TQ z2{w)2s|O%uMVWYWRq5f=UuU-kmgk83;Qd7(?6p*0Uh#Y@-cIaFZK&z0;hn>Z{3OW}W@!0yOPv7a29s4TBke)Mnjk@sm*zJO2xnqY8dk+ki zZC=xJ@Td3h)Gd?M?BxvQPMoW1FKw*ttUL9*NKYzjy7!Iu7uP?NG+Afzet{3}N|u}- z0ylFyzB`#U_1jwwbD;|aZ>W&h&&r}Byz zOC^?7eZMz09C?{C@Mz|WWD867@8CA^k7JEjmVb6M&%QO)-u=%R+0>5mf~!7E{9tHX z`K4>KtDBl|tayOMK~DGE&fhD)cXr3Y-tDgVg0iN+56$n{jxZi=XxjY8NJF!6e$}n= zrMi;V+&fpDb10e}VR{4n$9YuCe6j OfU=Sb@ud%T9{3+3vTL6J literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_2_5.png b/resources/g2/track/corkscrew/large_corkscrew_left_2_5.png new file mode 100644 index 0000000000000000000000000000000000000000..28f65b73e10f768f043b34959ff78f27eeecf1c9 GIT binary patch literal 1203 zcmX9-e{2(F82+}dyNxjpQ)AJJhZZ>X0*yKJh=;ks4ZG%aH@L+jMGicqkrEF*v`B+R z8f{327pYi6(Iy;H@C*fp9$J^81)5OdqEkxNkS=MYD8_~q9m^6wOGuvg*FW!*JkR^? z9_V*>PkU$@0HE8`*SoS=@n+2Fur%|LZ6D_Vuz-OV2A4O-mX?;*)>ezf($>~ywOZTT z+Ytom=;-L|?6f5CYjzl7fL@JXp^7+wnx!!1yF2K-$=em48TOfc1 zL#}9yP9*tsM$G1vq8Y1HHI_iUbeGK8!(L34@RULhN7!7#Tg=GiLbO)aChB>&1Be6& zGC&oOw2b6pXen)L6dkbUf(;Q)sSxI!0Pp~a2qL3s*x^udT%+k>o-g?QrEvIWDg|>n z2WfLMb{CJ)BJP$6Zkv3(fF}?#jj~yX zP$c{nHd^&*wP3ccjy5v2snP`OB2bjF+ufK`AY2knD;ysco6AC(SiF$Vl=Ehz!T^y& z6afv3m>M9GAx4i1*`&XqhfBF+t(0#xZbAkCF8~SvDgZhF1pulDfKBi$3@K38V7bKO zKqf()0frltc>o0fWjlP~A?HXAWby;d_} zlgr@;WT=Z#?YxGG1}>LrweHg!!R$n$IAv5|sgBzKg&}Si>SM5gK!*IB8V+dja8{3- zdA(N7!$yVTIA{P^1`syAh&Ji&!4U~1t5qtQxCf7v`8VoeK=J8Vtx^CV5fvqe11<-T->c(cj-qX8uaPgi!@xZ5%InzJ5 z27kGL+*!SQX6sS^-Z`^RNBbw87fZzv&)A~W1LKtY!sH3>iSC(?!XFFOCB#8%^v2m$ zb5Ayw5W5ch7l0ogd#6pTg1*c1PTtU$_PoBwvl)Hl@8~lj*|zW8nr&aMSQK1w;Gp%* z>yKZwoNk@bdyMG0{l@T>=X$>RXlrWkp_BV(J;g8Qp4L_m^lu1c&-5XmpE~;Piy3C~ zkUqcj)%%pHTzvK-SGX{@d*0$h2E{MDJo4AoaAL}{%JcOnSmv`U7Bsq!{%~O3$n$+` zQs;)|j?=HSoWf$Im%cbVWR<7CU%GVd%)%YRul+GJJM?G#{OyOYzrCpooiBa6>DYJM zU;bw#u%)nJe8)JA5$k`SzT(a;&(CA(w*0Sylj-vV|L)v4^U22A`;GY8Qu}|_8KZ{} zTpB!a)zx&xVps<$-5; LfA8^S>vsJQx?2+7 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_3_1.png b/resources/g2/track/corkscrew/large_corkscrew_left_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..379eace14a4eaa8820fb66955d36ef8c35be3dda GIT binary patch literal 1196 zcmX9;VQdq16#sACb{%CDQl!o%+@zWVF0;W)c9TX9xQ#LoxWN$`>4%b?Smj(U@y4n) za)gG|*^t9ETgeJE;dBKm7DOppv6>RAmUzN|Di`R70wpe5v4)!L!`~8;-+RCJzP#Uu z-+OOtaEq&B-ZS$6038Dx`?fWBc_TWFhDIJ~JL(3&00uX0?{BnCO-;?s%?5*^rKP2{ zwY9CS4M7m2(b(SJZnfL(1mU1*isKlb_ehc$3bf zAfWz$BNTQ&VhTq4c~>1@I*OIWDGh0XucN3(KqWv5f=J}Z4p9+Vw@wk>wmu6692Y_rs;j|He?h|9!$`J`OT#wx{Jtu_lO02=N~04M+?0muVTMgVMprC~sV zNfqiv76T#yA{0owfX)KQ0VrBwn1Ct^(*i7npss?)#*=`dfty7H-YWa?h~i49d?pjr zv}C2C!G@O22Z(@)Qmm|sdefMwJC&*@S@UP=(ZXE11dCP70!S2bIm{jk6*wZ`V-#6X zBXTAg(Q?U(o`ba#$uKYtpbj8xcoAyIJ%KG4h?UD^Ecygep+I{)oFMRlfJiukq$5fZ zNt(zqju{rOxb4u3LK%ZG0;VabF^%OXyG;)t-@wSWEgV>T|F_p0_0EC5b=!Ln9UR{} znd>t4--b7Dt=#kZ_=dIWONO4v>SI0ku%%zES-OzFlkdKQzNmG5^L4NG&=y)a{qBNC zrqSB^{)@+rozl5iHYbLx&FI8GzuYtbcw;p>{X*-bp(S@WRlhssTKq84GmZ!f7}D^6S*x_#j%iXI!4D@+E^6L|ANgX%okJZ>VEc~BYs!J^Z_n?#wEyz8 z9qZbs=RTS|HswA%dHmbLtq1XQ&koA_OZKww*ZHH@#&-GlP2DLYy?Z7m-yh%l_zQu7 M{w;l1Ove`Q?=R{#J2 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_3_2.png b/resources/g2/track/corkscrew/large_corkscrew_left_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..47656c362f7ebf4b5cf1bdc41773c49232da759e GIT binary patch literal 1142 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 RZ^O)i%=GNEee+km_FpPbapulsAn7V7 zO3Im7m{`=E##OEnSuNZ388(V;+}bTO%vDsBlgAR1d(pBw_q&0H&+U2cVSL)pQDYoC|?Q=YOSJhS-u4?bnAQx$xyZ(pE$Pv{yO7NxZt zPukHB`Hh?B9cuJ%o1e!S%UwT$m3evg)Z3Cy*Ume0=$l^}|J^fRK2!SW``xbdZ@uP4 z##qI}8}wr1$FuMMIo?JcPdj>w-95Gg9euiY-bGTw{UUaed~M-Riq#r zbu}Cq#J;UhC<+31EqJR^d!Y0X=k8gX-YI$J+dp%59N3=sQpxFr!}2{9KQ0uT3rZ^% zOdEKxfz`a4k!rf<){1FMFU0nKa=h?^ycIuHmTsIqbbOQY^Uvx(Jr>)z{Go$JT~bMA ze*yO^eTJVCw|;gmh&>zF*}GEl^xAjcr0)AH&^O?_EqL+HOX0Jt6Bftb$JzAQ@WXk3 zE6zD$9^QB9(ZFAq+}<1RO^Lf_=jA8Pz1&akQ_oDyL8}ZWs9sFp{n2qdkIzjppLW+@ z&R^i#ULiV~)$@+feMecr4%Sb}+nknp9g9EPU$Wrrw(jrTLiS6E;&ZS4ytOLyUP=$0 zRAIKdUXA(3wq5H<%MWv8EYZ@%5*?P1}t>}t%gyw()0l;fl| z12d3%BBR!7gLMZ$jWED{viRK!Me!4^BA-BMhJ zZ?WJq14nshLQbt50$2$L#;&ziRa5d>1t*FthtCl)!eK{M92Ny)D4u?&SAWo+%6wI};Dh zdec$&Q;Bg0?R;y`Ji%Pi%8tZFbgyYu>JumSAE7%r$9BJw`&DUKN%Z2ejQw=_>&NZ; zIu<|j`32*p7xoo)E<2QT#?Epl?2TNg|9+Pj)10ism8T;SWYzHcwcmfH#drVhxflPs znfmeC*0YFxiR6ttdva^IPEO~(Ao z?{9A^{nLx#s?RDnhG!^rBO|lFPCOEx@pR6)hMkA<4tcGQpFwrv`+BY|T=BuC7u(jn z@@Ws!Q0{YFr12L%cmAAxMI=;;-J)%uw(WfTiEHogYrDCoI+xl1<0*_QelEh@FKr9JeNE!g6kB6g{QbtzlfN?E(iP68sH?KyiqXZxQyZ!+`V zyZ3kR{oQ-t$)qA9J$Y)->>vQZ)YO!OO#B{(Uzz|v{QE}qumQh)yeVsyIa6UF6&g{s zwg4fSHx?o!#Hv*TV7;l&$erdlFW}dq8S%cpi{`ZS8>(&{ZGnQ^f7VkrSoh4@XTEgA zZjSuuiwa5A$#dJcy%E+l-*@j4fuHQ*+hqqkUpq0)XG|*@W-SZhESNnUl{7o4jQ%~NZ-jPYQUAYo^luIO8)d3;b<4=RHF^|!IBj0k zfxtZ#*9b>9@K+GGGxy&}Bpsf6=y1mu;SW$5r9JW=^H-BsEtISEg-vIs4`9JK9&~e|`1)b|}An|FH}Fp!X*c zMB$EU^e;aYUI^NLo3QIlY1P}62YzWj_80P}r9H1*Y8tv=BLwu%mcPD@e{}uvBdH6n zZB}Ievzfe=vGcZgxiTsGjkRA~E!y1Wa&Y%_|6dS|ZOJ=rggyrGtBuCkW$&ubU+ z2SUqNC1&nwt7tHPNct(d6DjZJSL?&A>XbI*ZiV=o@}m9D5_Qw$&Wohqg%F~YS?*9a{l{wVh*Hz^k~)=xzEhYlYDjQXxEn7B|z}Q`r*lZ zzW;*O1DAh%@Z;5yTO;uu{R4zgj~PF^nR6lzuexF_UR|rC%Y`tirz=#b5}{l5g?QNk z5GS%0DqtOACMgk()(}q~Xlf>tw5oV=4p+*M7K)L4ZOSGiBHxsr1#i;90u@=bBq+`* z!~yh(SwXVu3k)WqHJ)8x3ZKm1ZzSdmu(J z5)cz?)E1hxsDb3cR4CCRb3B=h?~@+;r!SOB$Keg8F&1z>AgiJfV$vCqUJp&wFqspJ zagZ^GepADgg*PdbiI~tLBa9>#BL;KyL|SA9N-7m5pm34Lz0`zw zvd6wqg~D2u(EG^eDd5FCmVl;0U?q*i=W=O$hEhpmFcd5XkIm+AxvB|JsRol-VSo`2 z6b??;;y7$vbTPtSOcQXG92!R;;L-#+&txq2dZU7cNvKh;z|*PKD>MjHXwY~! zJcJ9EW~9cGS#-vem5c&~S&b{;J)kwHP>bowR+d(e$ju55pG+Q`!DR5542D3!V+wdr zgjOO(6JCoRR3?MY=6iQMi4o%A;M6KSm5Kv+*YRkCVk4q3qsA;0Er=(3oFaKN$G4?; zL#Y&IMS{YN;Ghf^N62IdS^O-9K*;0^Sqv(JA!JODM^#$&#{VVlX&+MDXwp-(Cfxo; z@6u>b$&n4Cv(agR*4s=ZlD92{3V1XGlcE?IO&5+ex&`Me3>pMKKgJ67@w)amib26s zD-?XDnzoqB<{5vDhq*QpIP&TrUgb=q6NcwkV9qQVq@{&J|vuUam+B z$5IvZw7exB@#F!gjK*Z(MK(?u85#=~@|+ltqm6_9i;p<3z=R_P*Bf2Kk1qTqgvO7; zF}`qLf6vcY9)3>~B+_#u&&2O@x}MYZObk4e@bl_=PS-Or@JzzbtLy(pSJ0D}Da3&P z0S0atRFQnoMYEX=!zJU1Ouu)znIt$jH&mx1T5M2xWo&hgtf4Wl zsoB)pR@vQCFQyW5VuMjhL`e?O4pZt(>@%g}=IWf*M%3L>-s`R(8gL~?f;=j)h=5&A zXg~?gl_8xCp@XfFSTBSP=3$TQ80LxwKn6e_fq;gDltf0_DU|xy*fTO&i$>E~QgXkp z4r^|XWQRtJA|M$tHjk2wQgce!uszmPBQAAFs+#2Wt$9wjhRBPAlA~kgR0+(>Ma5{j zth_F-&WSqPN?h)$w%&&Bq2>?~2$h2f4ItV8#ZKVWMI<*;a+^hHTTW%SseZuj!p_L3 zp)fDfl1#14iEV(zO(uC;Dco6Y>T#3~G*=I`Ij|mANGOj&&0+I2BC$m-uY}0x$ zvbnCV&FSp!=olCnz(6DlDAfdZLx{L3Qr=3{bc@S-a_f67O#}9h!N%T4okLhKH6(-= z5s^%cmQx`(Hr6DOmFMALw#Le;mWD>Rt8K7b1o9*VlRTs(k7(CXYiuG%xxA@H)8Z)U zY_93;bPW#P$3y_+0AK>Z4uAuI765t(0KqaJg2$|wM3gDMelCIhz&U~+(= z5m+S~tCwL;9oAZox$A)^@jM_AgB%$_2S=1xs8#mlhI+WEskE)l(c9aG;kF_*fNcvF z*&}52#5^Yjb;sHVavg(~rlIQAN6v1nbAS>Gctk=n6p||<>f~&jMq)3~)mN1?IjY)R zj$XG58|>yuB$yLmZh&EUF3NFpqa(7^R@2kNtEnCxrq)(*ZmwLXgKajH4VChsY7yHZ zW;aWq4jHvKCmPEmVkH!;hK)HzSepbdejY9OCr=NUGt=eZmAg0a|F(dSQj(kic1@a_ zf=>bqQ&!_-1&4YrAMjS~Oni}GPL(DS`hw;JPM;AhUekx`bfzXO%}QxGcQAFoixH5x z1#?`~Q#BPc&+1-@`s2ENSw*(t<+lfy8V@EC*PJGdR7A~MBbi;3`Q<`q%D&uVVf*gw znz3u)@%Ogg*l&D;^UMC2g?k1xbj(j)8SklLw^0>cW=Vn znGcz#R4+`C9L<#O$*&3ljMx==8)%Wfdw1sY?KU)R=s;B9T)BCX${bCqy5 zJngT?_nzC~s{DYS!76yQEIaxeQ%fk)-Y^MSzcX|N+MG5#tN5}U`Z#^-S6vm>zPq*7 zz8`A)&Q{x`U#Gw5sAny|yP_;}7JK{d8(oL0&m?{p&{T6JyT=)IsOF~qYx-p)8f1=f zyy{|e?EK4NZ(sG&X?|9XYoJrd2Bel zAhzxj2_;f)U*f!UZOWpDYv)~161B#A4B@7<4sz$|M_(OYd8F=)o0xJ>@HS%B_q#sW zdsw$%_3@o+XMel$Eir5JiyNfZzx{6g63L=uJ=JkI?zJg9JHjpwL|u*eIk@puXTv6b dc4>i^pqecr2cW^O%GBVoO#D$F=pCu`CY&|MElqY3|MM{n- zEh=m*DaoN>VIxId8yPlon9SifI^tyCVR7b6v~95s4S$rM=ycBe-h1vp_x;EFzFMoR zgtIbpGXVgzDwmh9OwPPyZA>R5`(SlkP zkw{EWPtVB6pfZ_EE|((^@KIERVN#U}*XeX-v(@QzdA-4KI2Mm{Ie^atVi8Fyr6?2( zwT7cN@XQvm-6?Z>RQ`Y=GHMgBi4qk^B7a(PIr z9kW`Y$3x>%n0zWn%;3pbLYytpaxo)MWfABcB9j}n`DL!KoPp3dLM9Joi!elr3vj(y zZ(456uo zY=eYn#{_N_8qi@Ovuf0#i+Rk6fCG+t$rOaemT(a{U!X=&1BO}DYNx^Av04KzS0osW z#bOZ9aKJJXxpuO^O+)=`c|@QemD-|ecgz@!JEIRm2}oj-$q1DyWH3=S2jlTnBC%eU zJf?9POg_6a>td>|7MRVZ02V;B`|i-zyeqi&1b=g@{cmT1TukB>n<01^OH02l#q z0N?{)ln7u_Vgb~spu+~kAu$W!Twvk@mk@--0HOfmRA}Hrn;5zj(65JK8~8VP1c(Gc zA|@&@s#eW58HIKm=634>0Y@|%fJrZ!9B?%xzL6@nF=Q?l9_ATiQb%0vPMG}}hEc8jc|3uSiETf}{ z#r&UCe!oB}MHLE6qrtfx9l|m5xefu>BjN}${2t4g~o|}Af z@0MV8VnQCKcT^ndA!SX4wd?0Yf}g%WM^Hq+!CtWFJU!CczG7(Aj)HBxDf$P$)YTVU z&El?v(|;llYd$RPOZ7YqUFa3O{~Ph*dZX~;zw%p^#@dC6k@{i6=Hg2Yn#_Tgf$J$< z%Px)N#6Qor?U|?QDc-fgRrYL?(d=#!YXT`e}F#c z*T*N;_O|4-^~5u}4`p{R!nXQuW`6V|?Mi50w*KQ=q7ucQ(R{4zsjZ7f={;N+L= z?fn_+vrZQ(d1%w_&#kY0-SqbEU-A#N*Ik~iU%D&z4$|=H>*~8}3&uD@6W^a*x95VD zS+u5jH5DhOD&(KoXRH0nlYO11!6V~)_w7VpCA6=~S^eOq{Ul|JzTm@-wP(si=aHV_ zf#>i&tM+MgPSs^iz2BB1Jjg3wN1yywAkplOScZ|CjoKd;*Vi6azRX^cHz3;|*|6Ph z%RAPn34cYNd+fWrwMSUsqvljm-}3vHg9Y~Dr=B=xIEK2mKeq7b3vZvgn0s~Eb?e{1 zZ?X@6Mtojbjp&5RM1KQbT*9Q@eYdIG+>dp3FBz#e-HH5keE+u92UeA}Tv%M<=y5My zFwwg6-9g@*E2?c}EvKhNKOs6YVEj90LdGm#m zXYMyrmOUM_{Cb10{Ow}iLdI!H(cxP^kJDG^%_WDkWv5W7EPqfo+qQXrZ~hxse$s4h z-}glY#~1yg)sXW2#)jG5);oiQ_?k9b@81OI3a6KV($=Xq=7sZ zRDa-&-S7ONHcJ`U`xlb`nsd(Yw;X2**4~*S-8(r+o{VQgLis& znfrL}-h0mPobx;9+~M(B`7HH_^zrEcfDt9dg|p#Z2(O80De#*Tfjegu2fzkQ&s_DH1y6eS%8LIML-ulXdQB4<@Z#YLz z-h06I0Xu8)thI-aUrPB=mV9pYS2e$HJ-hZy)n5-!+`GPOp8vJW$U`yW|sbEK{>X@>uB z#UB31_cr3DH--rfRb#z@v{OAQko5#|qhg7W7QMB9mQje6#<`HAc^ek>u#war=(vFRHJa(zp9uWT)}H zL&%{Qiq1?jd>q>8IDcX1XXAI0vtEffUeF(PzWdpvH>zf&Ti2{RHEpbE4hEV90;!1r~RaPK5tp-aC-{9V}9BBlpObpuQ~HY6V=yFKT-P3SGU)0{v#Ov zW%5>u+y3tIO;dq<^^_{0NEdGL&D4jS)fB-h!g|cdGHFi=_Tfk1>D&TW`na^e=L|oMc?5eVImWpuV zEOCxFN5CtpwJs5{r>3*=ohGwlcH#4PA>gclz0l=yDENH0+nwV^atNn|FO0Ob?9d`$O_n{{Mk53EOuge(GuM5${q}1!tU!k7CUPa z;g~Q!UW419C<(0!A2O*fDJ#FP5vRanwK)=6knD#fT~_l0vL5m+zLN-Nup?0YKJG)( z_hL^7L#eVdMInJLj=NVS%xh#BF@a&ZYyE-{+LMv+V| zlAwbiv`#CmO0;IMS8*s4gc4ww6i0H+JQ-qwP&gvu83mYxC&@KKheRlfVCDpr2~#{z zIBh6Qr`3j9aK6KCNo>RkS4=N2DPW6o1{_bUl-HmxGgN>*V6~eFH~B!g!fL~HE;P=k zP%4s1L?VeuE|$n-xsnG$b8#mLYcY;06yzYX#7;ah3K$Ng7L8Xb1W2sIXcQ_Zj=BhE z1wqslu;VVU;+prj%V0y9P#0Q=x^M_85Q!B+0UQ+qkwPF-h~->?P$3v3PnfLcrT;Egr5*=U<+G_+ATOd zKkgRny>;u)6oUX2=8EMajEAEVBTsCCWr2zj8P6=mP_tMlmPv)ihtWyG>~f<{e7Xhl z2)Tj29hfKP>NFh{y8)DdPzRa3m-bE5x~M{;wY%2HQn0!f~EZg24in%cVS- z0F%OY5t=X)CX>i>2WtI3dA~?_@rt+?UOqp5Al^%6KL3BxJs>dX1ckH=tih8R9`yYC zC;eT%ps&B?=Wdz(nkHDR$3`BB-^X-4rt6UycqHM+)%BRJM`GZSgdbPeFGg4TgLg&T z4u9ae;hW&8cVYqnQb764iX!+nnUs{2oSdAJl9HO5I%LR@p+kq#XtcDnv|+=B(X+F& z5rnT&DRnvxhUrO?@Or&XO)Y^yFcLZ4*%|BYMfgCO2eg_Dy*{hDn(40NH#FuoHEY`f zhESMnk2ZF7x2m|b%DfChL-$lNeHf>OMD}=9;ik&=0MU7*p{KL8FBVZVfPo9#O5oGc z+6Y>>F|(sBtGAs&_3)`)1J&=Ns7N*dS^x|*8j+dlVK96gPHSG?9#nR#NTyANh z!eIuIm93=nwah#NM@?`mJqYH@Bb!xTzh-?%*V=9fc3PNH249_>r{iicsh&^~4cdkl zLrahdMm>?v_0gWTuD)=l5@hKB-2#|(fa9Y{Tj=TlM;}%a(aOdyvNh(5PW*Y)Njcm~L~2p0+&Wz&hBdq0fyTygOG`8u z>^glq7K>4UK>$t@4Qb0%g&4YauBA)W(5-Lnaff2Q)4hS7{*FE>gPWNtrPI~SY#o=6 z<>iqYZG!=V)dd>YA88A8Mxwo4N?_2?NL{AK!1Psfo9mSR23@Gxa>VcH2sih1M0$HK zQ%V3T0U!bJ0pJJV2mswQK*6C^QFSEcZ>2grv>ZSnV7(Fq)u2-gC>@{(I@O3!ty(Hr zO|>^rovk3Acq!1RK&6&ejnO@B?s}iPtrZJ}ywRw?rzc85TMP?8>N1o*y0(>R2y%$d zJYP)j?{$azn%et=T~tSmlLe$qnwp=fS2C-0NS#IF^HjI4_k{fGqY-~kXN2nQl4>+m z5Kx_fqF^o>pt*s;@YXeVcT1a_1_s&QuF~su)zw&C9f9z@Qht*X@vD%qhJRYi?WxSB z3{1+yp_&mYsHCDASo~66#?^QaxMt7Nfob2Jh5y}wB%?-M2-XaFsu)g&If~~&vNE#b zR}$E`X&hXnxk}24Xy2!&C#4A+Gq{k+Bt}W$^a@$~TW?j5tY;0c-$$L9`|SsHSzC8Z zI{M_t`){eXPaH4lmH#>A{WlkmyPSIIwagyV$Ybxwb}qM0<&|y;Zriu}yik~N{j+zR ze@VY_%y-#Pn#(MGV_AFu%A4lZmIc;Zx#HB7ABo2@x2=A^<&OX2u#?{f0@JRfAeVo5 z=KR$18;VoE*|O{W+kJu2U#D$Q{QcAGctI*K&!DGC1h+#s)?Qad#{YQnVEWmve;hvW z1AcJMf|dRCUG$W1tIf~4hR-a#&haLn4Q;dJZaDV0(IdS%TfS`j;ns>1&n`G|{9NVj zQ)=~SZ^O;hO_%Zd5rPRX6asG2-N0nY5UemvOv%b{YbtLJI@#Nd&lb=r0ACvDW nTXE=+>J!ec2^UVrzRB2fV8oU=*T2_8=0Hi&tioM07QFgj^33;Q literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_1_2.png b/resources/g2/track/corkscrew/zero_g_roll_left_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9c6f4b96bdc4c347fae0083d4e54277f5d3d1997 GIT binary patch literal 1064 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 AP5=M^ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_1_4.png b/resources/g2/track/corkscrew/zero_g_roll_left_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..34837ce7df13a9284c0a473ddf22c58a8ad5e8ab GIT binary patch literal 5794 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 F{{lYwo7w;X literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_1_5.png b/resources/g2/track/corkscrew/zero_g_roll_left_1_5.png new file mode 100644 index 0000000000000000000000000000000000000000..1b0a8d9eae0fd1f3c82be5a1d56478c01f17ed8a GIT binary patch literal 4975 zcmeHLac~-C7XQ+ik|uW0i%LdR2vpH>WPv5w1d?JxB1w@FLo{~M99@=$t^}5{q@=~l zjd-S&8>!}OW-dLW6K(3CMy(o^=4g*-J>$ta84ne0oQo%VJ%@VSHEPwp50a+ooHI9_ zIsYrO%YNVc-uu1xe(!zXuh&juY9gzRyqH| zEAN#3`GFON=ph5DL*`b?H8eux}+>iQFrGvV9r zdSn04Lnn0a+aKTf^~u+73^ZpC<@A;B$(wgn{i-SV{3~6(NpYVh`S?ADLZ5$h+BEgy z>FdJZhYtAHJy-SE3GnUZ%_r}z(tU|HD;_Mac;nE^`+|Y1n*^!dn=d~-y;=wJx{uQ7 zI@)!*v$??{56|Q*qHA@Q2FRpMLXF*(1GgAM3yS<3u7At4w;e3z^D&;nl?rtF|AY zUTZ(n)Nq)(>%hWZ@zbKWrZdwO>fU`{KXmfp1btwpHn7v)k|aOdE1qtCb@0jS>{s?y zJ$l1~Z#}T_n-fP8%8cxtjn5oYFMNtzdgXhM{5(ZHDBOGf6Z`H5Yu0w%7TR0+%=(*F zD_{2f86!1Sa@XZmM#7oiu=k(MfX3dx{c@hqkgt$eNoo& zFJsBpQ&*KfTR+u*di%HF(?ij}@jvTZZ4tQ|FN&19V(m}Z!McG(fB&2MOqV5`_-00Df z+o-l(Uedg4Qx~zzNz~g!+6`q518NB1B7L}Uz}4qw)B}y808uO{nlIy? zr+qf}f-=-H8r3Z{(Vq{my`@o<_pi3m1Z7hfhH}Ctx7A^oOs-H`Wh$i{lhw;HyUcD= zSZlF5wAPB-S3tG986WN@$UGDTucjc5oxtnrRM3#9wPO&%ZkJi>M7HbQ+1 z?RDX>oRkZ9kch|aC@ka&S2uOEH;R!p>TW}u$()RYP43ZsFBJQYWWI%+D6%T{x9wP z_7OHL7QKyPp#Pl((c+#mliL?(i_<=;u$hFy!nRQ3#9|5zzJs(C;)Ga>OT;$Z?I7X# zvDC0<<9o;`bt57wNhn1};eXVs~An>w*}#AmxkQ^?#$Q z?A*%~>4v|6{P0ytm%M2TfMU>bYga3L-6|?7TD59badGh_mt0a(QnGsWY7U1}T3Whh z%^IFqEJjg8r_-9v27>5e7&;UR4G)h_OiU&cv*~m;mqQVt)c}*Byr-wa=@j?_$Y5AA zJYpK3u*BlbOfoz-Kc?*S&9%E z4P!73S|C_pB0O|_d?KAl=H|4(V&E`lZqOo#IHe;2ZFJBa8*v+iNyi2lHaf(RU|=T!n+7Zk zYcUAjEnfUkU}SzC8yQ}_n3)+}PmkH@Bmw~%MM4-dtVN?bG;Tm{k7@{3P+&5byLf;&0FvN53EKq AfdBvi literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_1_6.png b/resources/g2/track/corkscrew/zero_g_roll_left_1_6.png new file mode 100644 index 0000000000000000000000000000000000000000..803eb413b18aa77d3d1d9bf122cc9f4b469ff6ff GIT binary patch literal 5545 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 Y{cx3d{NtAweS@PL$A{lvf9K=>0m_n&(f|Me literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_2_2.png b/resources/g2/track/corkscrew/zero_g_roll_left_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d918e483f70d10ea2d4de17bcedb912fe1cb9cff GIT binary patch literal 1052 zcmXAoacCQL6vtndwwJcffEk=LU{)gB@RSpdd5oLh+_k3lq*r>AAO}0;V3|ZX=s6+_ z5-}aI1U$BY(FF|}HQ-qz6g)MSQ%A^`wm7DoBY#vV<7dX;``+XG&-?!I zd2e}sF0p@XVhjNG&(2IO4CdsZ?h6G6eP=sy5+Dfk&zzVZ*gzn#Z{NOPFgP?cG(0>! zGBSc;SSS=49UaBv@iT&^}6mg8)Bp5O1&6mTqv!niC)(&<tD$-8g`QX2^_@f%6cREV z7!p?3FuNFT*CYK_6!j?7SJ0k;kP`YZIX%t1r~JO!~V5C+Cn@kE1=ZBBEO#g1O{4F|1?WJG16nFLu(vUQbj>XMsR+hx6L z=6$=o>zb(Rgd+?=CTS+c@fk@fs%j;ZX%vfgwdz_{XKTy%eFRYrh%!dk!+bL;wa8S5 zFLdQvFVpmmt$w4o*WN|rWH`*=cp?^;NJ?c{T@VY(U|F_NEUniYp5yjA94G>&OW~Xn zGty)w%b5kKSxK#%xwc*DwVi(dCgK2+06KsHU;?ZIbTL2!i9E{c$gCl+EfS#7P~yN! zfF}Zy0BJZX(x@gPD~(zOk|LH?@mz*18HsvLZ8r0+Yxa6B8e~ONKxfA} z0~c#C#UeD1HGJ9ZXPUd^)}GZtZJ&q$6T=czSmt7BiO!}3BbTm~a!s@3I%dyvP`|?n z0_~NZa{33ou zoqW-p{pT^^=mGZ4z@Op2uwU3u{rLBHWTa7e=hc~$>EBK@i1^wQuf25jqklhKI{h46{QahhSeeB$qXOabRp1Lqn{ULSagQdksUwPn- zTc2!PJGk+<_`TCTp3eSUpAPw)|Ml(9zg-J_6L{$T`;Ukl69diwv(s}^pB;bx_5T5H Cp2_Y2 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_2_3.png b/resources/g2/track/corkscrew/zero_g_roll_left_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5a36b66b411809c6fc6ae424f2fc12825cd0b418 GIT binary patch literal 4975 zcmeHLe{d6Z7XOx7(jP#$>1jF^O-SwtnoBpyrp>R`Sksc0SW=pLg$Yd9Y&Ky{lMUIF z6e1Tjjumo8(4KVW3REXRRae8O{z4uL8pv*br zFmwLb%x?Dk$EGnm(pE$e5q+ES^VY~x7o+M-@W|OMCa{G7B^)7M0I_3 z*%eMC8#KaIdi!sRUOWlXtCaj0dqvdXuuZSzki&TP@X|6btTk-}5QZa4ki9gwF|cFBVTGh zRbP9Yd~o0NPQg+BD`&H3%henAeDUPvr;^mZ(VDpFa48fOl%~h7JB|lKtYl1&<$)ujRP@rXMrkT`=kRcT3Tx zE4LLtuNvw4e9KqhqvvA(sQloAr4@+j^Or{Bg(D;11`dynv#-47ef!JqdJ5LuRub0M zx|aLZIOVFsY?PI#>UMcx(E(7a?e<`}lkoAZgoAX~@h9U6K9983@jI$pBrP5tv6*bz z?j=my*ReS@Trv|lId2H$c!`Eces0@bhK-XMK7 z_Pj8ZYH3k7P%EWd_wOuT?DKN28VpWMz+%Azy zRdT6ZuABqa?52H~8z*v55WI?nI1)l8RVrn^i1@w#D*lYqi*Fv)jcrw(6Q1m83?FqV_zL4Og$C zyeiX8^I=-w*a($(>6Z6@j0_*|OZKM43^{sZ&MVNe8j!&sV zrj$$MXpOQ)CRNDg*M)vbcxhORIaH~n3Z0=Oml!n+2U3gWDis3cHDEMqotMCTl((It zI_vm3r+7KdYuhcbp=_8BYruR21eM6-YNjk zKD^qQq&JZ?w7)ICG}BWiV#~~IX4*;Sn~BHEw}l$RXF{N{t%NP_C&ZfB!Z%}X2LaEI z*@C^gPJT}@sA_B&p(JX=s7eWoL28qTm6(+fS6gMMM1iVMdo^|=I!)Pqe#}eMJ0Opc zD_Ed;u6QeFQ+3yk^8U?4E)S40u~Z_SLm3~L4Hn6r7+0gMMgE76+PuJ=BL?cttihuT zo`lG?qi~k5+@bR$erEIVBU*sa^G0rp-+8*`>AEQfZc2E*y5{M+DF$vzc)q&+Z*-Mj zf0-iO@E4FDzA7zw=8>-eCQGqt%8Dr1q&7w78c%e%PmDkMGF@$WU*Mq#l z5HYa^DOMuPP7jt(jaD*QgqgB1Uq=`wDFDC-fQ7}P*z90sWke{9YBa}<#`6wGIvBh> zFu)`dm1wy@%R!7>jYX)ZL>)mCk7($AT_|SgjhmvQmf?(ptEfcu0*y&zz!hdnNA(zc z1}p=^)Nm@8%=D(RgX7Z)wic9|0LKBi0U(U96ayUnkkFjaQmKycI31mgB$?wzQ8})t z^y@|84$UC0i_@l52v7IX6S2@_qHj7CVzOb|v;O#GWNd0E`*nJnDHE~T3Jyol6_`W_ zuF=p2V~+)b1%|@C=Ld%}$<)-i7FY}{+Qbf8xDltQKcJ2EnBx78^RZw$(VtBxr=~75 zS^zo#paF;g5Ch;m023_0z{{v(0yGngGMThd2q+ZvYQeA`WQ>3@0fyo*VU&p)nPDe0 z+QVd`AeVRrFz7&sk>$iWLBFUsq92Un@pveeie(dxP;tfW|GX*xWZsyh5?fS z31Z|0&$M|Ebi$?3!c0SZMz3Zzeq#&l@HfQ%VM*$x3?;W9xX z(~mO4S|(+H#jg;TeU|G1U)vfJxcB3W@SiPEU^VC)z!ODxG{H%Ur)fPTtE@bC7l7aG ztAL9vUvo<%>r!d)((+}0XOA3(OQp>X_3g!Jd=nfm00kc|KZU{(Xl`87@cez79{n%8 CLM}M~ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_2_4.png b/resources/g2/track/corkscrew/zero_g_roll_left_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..5d93e9d9461cfd72c4308b9ac6540ca005e4fe3e GIT binary patch literal 5321 zcmeHLeN+=y7Jq;czBIO2VM{GBtfF9;d|_Z9MhzHZilGFXTJ*$WGKnc96ElIJXz3AG zq;VT6DrXlh)oAH%wAA`R6_H}F)~4H3u|>s7yL63Pwb(;j%K9<;5>WB9=j`#E?SJOH z%*=c5-rv3Vckg{CliK`6vhk5mM*;xG%X6~};GGS>Q^G^w^_N47Hp1J9)rBuw3oskY zY$0`qQi5e&WhPieg+T{E#YJO&(F8Xu`j&TQ`TAp#-=tfKv!?g@k-6wr<2LTp1s{#O zcy0LAB1Zi>(}eV(K<6(fYX|s_ZU4M`q1n-S>F?^^ zlOKOS^|~uxc>9KD#*=d8xohFU(>ASdo{Q!CTDebodXVem)#sOfE;s)94)xibc6`vb z{zyawYCj*%T01lM#yY`k!#SI?(32OQ(9NlD zU<}*Wz9G(a&wb{krfAQeLiGH+uBpq*-nYMoZcCorIp2_S@Vn)ff5!?9xdls~3GG=| zonT+gh}AEfvNUww&5*7Oo$@m|3vX)*Ry@()xl(fZtIA95A;TbF&>S+?dYx4Wk;&TEkj`QqyAVIf(;E4Let%8$*w|iz+uF_?Di7T~PJjKA*A@<6 zKIZ28IG-)t*NF~&i$p*5#nxFphSyoO({|Tw01@L0pRcZs+m}2ujDN7n`~$Q1uJFho zEsHxp-v25(Y2)F9+ss#NC0pK}zGHWO@YSmQdmX$FJE9IYZu@C%>5>~U9}Yz?{oAst z_Rvq)ZoYi|#rxqA*!E`dfGzT+wWAq-QCB$`47v5;fi@Ath#aotgaXHo4@TVPFh+TpCin`cpS`sNhi{HLQJH^unf@{D7lHU zVkVsMLqYIV1H|F$Fo6gTj!p|RD%8#9af)ZB@i?MlE~XXD#`(P2_!tPK#Q>`kD;?{V zA4&_M(zUa3u0X5h2r!Sq(&Fd>(qhD5It@llPatNK zKCs~@9G#ah7qj`P+y^W9rI=L*6<`k-Oj^=LJ=iKV7zvdX^Yh6Q@zaG|p+F>n0~&lF z^a5d_U@iJldE8V%dSJ(&7!-yBsm1)23IPJ^Fd9^9AuuaxDJ02KG28DH%ddHVI}bLL z7PDg6n3aH_T)q(HaZzr1Ay0(zGEjjah08;^W8_J#LAUCEN&DM}l{J#|TmuE|uL>-U z^puKNIWilWmKp-h#9{^70>$u=5Gbsi&<6a3SR-5b3e2P@;Q29Hu=mytzflY#OqT%* zsF;(Mp@qdjq^EN*fi4491g1;Z31Bhs(jG>qNS)P&S%`Uh$Rp$m7HEJg){N0q&3sti zwu12I0aC`{aXDisVcF#9@F(m3_OzXT#jCIJo=qnTuM*qJ@e zF@v6X+K14C8v2%lrrn7EC;`wg7$lQf6(8?NN^)jq9#ASz>GeHTRo9xD=#GwfK}@0~ z7EvZ-YLaARin>aGJ2I(8X|+pH-==bUG_Ae*1W`O9OUzWIC~#2`DJ5%^HBFkPR92b3u>xG3HxOR=jn zn{jCyrSeweJq=X9t9qcLVaV&E``yeKQBsOpAks^uHkHbbqkFK$cdKWJj!I!NMX|B6ghW*ef@fw@ z3T2H3f>pNI>rXYe^t!!+eG;HiFenwXN|WFyNolN+<=$G_)132ZG8di6d6&OwhC@k-eFY zfg;zSt!=2mbE~zF?iomm0ipzk3}F^Y5=vBpO1;8SRpP9#YID_l-7a6Rn;z^FDHL=o zpnCyL!(7xrb0Z_Zy0WpqU)0zzGANHnT2!PeDZwi%NdZzVLK-9jmsHT9K)RJFK6N6k zNuaBe=tcqEDxtj!So|VR)DQk1uof&*fw@=C!~eEGP_aUm4K{{O$%T^$bM6vIR#c4t z8wCEkJq|81tn$1Z#?{F1i7`_*>VIhW>&Ua`70&RMsg`W(Vuk;BSFLE=?Mr?l|HGlM zb6wh_HI7+@r(fD|vuVnVsOc4AiaH@A0g z@2NPl^04yUjG3WFcZ}PP@82MJt8w^GNjax%-(7v{nLVFfc;Q;G$=p2d*!0Ljf z1b@=YmApJGMiax{AH8hC&Lic__qAL24ex!fJbldc?1b97e*U4B(wGf(YaKh^*>iZN zdt4D=iIKekH2%}PUy^vSsS}9s?Ng%0C~=$?04rc GU-w^(ui)SS literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_2_5.png b/resources/g2/track/corkscrew/zero_g_roll_left_2_5.png new file mode 100644 index 0000000000000000000000000000000000000000..12b6450ef0d9a14060ee011abba3feec892a1633 GIT binary patch literal 4975 zcmeHLe{d6Z7XP-Tq(9)|Ss^{Emyp~MB&M5Rbn~M%*0iQIgp{UUVFDL6n{8OrWJ5M3 zg{ZkPV5wmU+SATl(K-{co&h=>-sLnv=mihXsyU}~S2aqVs~QoV;`OwraPEDRmQqG% zZkRd$BeU84{&?^6-ut}wzLQOF%R2qivRlgl085*j8d~AAAondPg7;OUiUfR|+S#_j z*NXXh9xv5Fb`m__4iCX2y2%azy5DuRSZ+@7N-k$_sVgj8U%QX|Y%TTINlwxE)6Z!p z|GB}@_-ybT(!HeR=KTk^9#KW>Uu=8esa5KC-z+5@dq3S{=004w@z2ZOF}$&j`NX=n z^;oCsC+Fq6x|YAVEBVX4XNw}e_nzFneyLz3r?pbSEdTh$k1p^2{p6A_i$V?Aqg2vA_rpJoI>7Q|j*9UbR{d9&A&;U4MGTmagB0A5%ZIdilsbr0Atjw|LKU6l7ED zrrV0g9|>{8_p>;T&9`qVuD@7x`kj&Hw;J!eY;E28y*-aAor{P3;jy(g8= zzVQ4r%`103h~0lN$=?J1RQc+mvrEKJZhn2F>%sR^sqsW*+N+((R_+fkE~+iuc7S}P z`FMTpG4g=}GrfXC{MSxrPgkfn@BjDX7oJE_2S#fGJ31QD#K*mY)AzjGbMU7f%Qmlg zX63%u9=q@BbH`J%toY6Q4v(m3K17x*``eRuj+6U%y+40$|D&LEY1{fxZ{^|DcPy5@ zH0b$)o%vSr^3S~YkDNXFEA=gV{=mJ=e%SB)_46yAey*kPli<-q5$UO9`AY*&efd!5 z#?LEG%`DmU+s(lf#jii~#JSHNcuT-LzI4+j{~D70$M*^zeMYgK8|5XC6as|X|LnAuQ5uD9v!ij zY})B1%sbb$;X9qU%Ffr`RaV=rh5#Is`OT>-cYxZp?#7t0jobg)G#deT~~8$ecspt3kKH7DZYKn(Ff6MB{eC?Gr47u;cUko-S`^ zJ{&ua5S@eziqg=k^cs`;W@F2|Mvejp>GI^YAlcVQ`pAx}WL@K1ZYLkkLPwzbJnl8p zS7Of#Ln)(C-9X`8Iro|y>i9YPYCDCKc6ENZMp`4qWHyPIKry>mp_D1bN|g;2OKNPG z9h0F-rNXuVs@YBZFgH%*pdffP32{19*ct_4Bg6`OjZF+kDzU0Yfx??oM!;0ppmOB` z2$PqDRf%;j^eP8shfpd>hr*`9Ffne2J}BgHq>`d*#5R>wiD6O&Dv_XhC_Apcm-4zW zm`>7#IS9n#cH}p5gsbaYn(O$oYRT1=mQKvq0To~mkZwEWr>}0ckuJjQ!*YB|QJGR9 zQ7CFuQi%+e%zB+i`~~5qVJ+rRrIPBocyftR!*C$ASgukbKpqxGqt zzo!`NHl$kJ`Mzf+Gg%&91?t3!a3? z{82c^7xeXq{LJOyhcv@ZU45A% z-0&BWAHFJyjgm6}6oHntZH@4CtDvBuu&}VGsA$omMa9L%ix)3uu~;P~C8edM9DzU} zmm@lz)@(N5xP_*vP$<;jKR7%bPo>5(nW^b%IRdmAU^0|jEEP^C*B?N7!kYd8)6lRr zk)%h{;fcwpPQ+^0lv4&yu$>#hg@d&GSV))bZyz0|GG}_Sndr<^N?!%6BH-78h?zA+ zv65l-_)x|4Xcd!1m}x6>DZ(%*0RScdtSlDAW(TXPB0^zQqd8_WopCtEgTV`fgG@46 zC9e=@If#j?u?qE+s68mhBN}=@7m6AB66WZrHJ)*B(JDkQ(3nLA9JNq7s>jqbXdR4G z@pLei=}TvaCT5asEvPU9jstK5Kp0`6gB<;^(2~?r>Gtph9i57#m}4eU1&&tv^`daQ zW(e0MXmdJ*kN4A)vCveqe6cF~a&)QpkKcy>Y=HusLEixO6yM$iC#9aIjgYMJirlvV{N_L_1*;2$fF%i#z#H?C_qa?h4W{tL+7EolG% literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_2_6.png b/resources/g2/track/corkscrew/zero_g_roll_left_2_6.png new file mode 100644 index 0000000000000000000000000000000000000000..d88b3a48f0f033c898f294fe8a059dc0e7c7b21f GIT binary patch literal 5530 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_3_1.png b/resources/g2/track/corkscrew/zero_g_roll_left_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e45c141e38bbb32cedae5ccc3cfbdde447ed2419 GIT binary patch literal 1200 zcmX9-e{2(F82-wB+_tjRSft?1R8nJsW8U!`-AA#ofY18`Fe?9Hg2C z3KY`0W*pMYYU-@XVJaz5bzsE`HI}fLq8Bo=f=8&NhDJflC{l2S&k~a7{q@iLB+v7{ z@2&5(x3)aq0sv_3S=-%LtL?Q|*i=``hj6D6fI6_=(Z9Mj>U6p}bLQ05)z#P6H#9Uf zHZ~#%($v({+}v!kSS$pA(=^3#j3BrqNel!6kw`3=Ol7lEnpUn<2pmv0z%qK5%jof# zy*@k`vPGh7JjtgsQcevOiVBS(PMcn2On#?X7OXLemx{x9R)lF zycCc*BrYPEkRcy8R&ppT;jqHPSsB8t1ppQR9zjHd!H=S{)vDNR6D&LFcIW;6>#-Qj zWKhCrp-ebyw((ZGh&la)AlsxU9Y`?YG^gbFl;$>*C~mjdIE)cUmq?32HW=e$DKVw` zvszd!#S7JpfdWPjnB2hZ16CO!VdH`}>I@Ymr7UOR1dAC367|}#kkb|y=(NPC z0U;leiitou6RD~RSj-xXq!n`#q?@9>92XLVsMnheg)*_2no1R>rpo0q1gHqC5rl{v z=rqdZFn56t7F|lon=Z>!m1Jo)Uxj+iU?5E)NY%Y4aDcru>UvTCJ3 z0iHo5&fw?GvImR$s6>!UN8OVNe?Ai}<+GK_bw~l=1V92n1|R{zBmhMOz#3Q@`Xrc8 zpq6K?KqNqz0x3JtSO7TyMH37WP+?)p19L&BDd2(eBw%RZWD$>G@_VtcY>z8KIvr5e zM5(008W-vYgilY&CRQ=?DXXa2b=8(fsx!x26=Bl|r{ z*q=^>)oh}qWnra2G7L-sr~wFTUIc4&4}k`J(PEK|Mjk@S|B4sqlpU=zqb%&*!pNCO%ub^;YkfL%qnT=j7p5 z{Wrr^XIpTr^X&bb)5nGvp1EMgR-L=r{3f^Q?UwAw_X{>YdRvdhAKx#QNwP?qR zebJ@+FIG?gK5yXa`w(UByW7(RXC1ca;mMpWqE4SU)rY&WR$a7Vb2LW&lw+Jy?2tU#Fs z>*!3yx*XbJg<>1ivCcH1EEURV@Iq>=Si_lYr0D4i7FTpH8Yof*AwNqIVyT2hU|FUO$mNuCdNr=PeBToiz$N| zn03HG0-i-893prX*@&`~QNscTOJ?|(hcKl9fC0daAe=(sQmc8bHcSw4hDlqkS(j@r z6oP`F#+4dUg)t~$)*3jS(S=)h!XBX9QQDVe!x?izvZ8u5X3!9bv=zP2( z61F6hZc&UD3L>m{sjUEa%1BX8YTdg0E875o{HTwsol;%KCch>pUIxdP$m;=vss)@ z4#(Vj%unJ`3KwW>iqRE}8fZqLOA7-yOps8dE61;YNp|4Ck`yWzA|@d{PaZW-kqZ( z7pM2MebCw=9^KtLChPnq9&cQ=X*@YSc_Ngbz6h?4b&d3o4S~T3UjOQC&J~$pe(vxK{fMf&YvS1K{m(j4*{kyAYoqf^&g?rloGeWAb+_K`f9Rk2 zxAgv@Msd%JKkqy@pLjD!+orc`etqs`Ro@%y|68P3fmuhsq1#WSg!EtK@x_OB|I>bU z^_A;lW-{2+vM)dS-MUR5?%ul>z0@uI3FX^9dFS`KZ|mYaPZDXz!sD8IbxZfoJvh_! z$Kaxze)s{t8dfy|Jh3Z0D|{{{tZt BKv)0( literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_3_3.png b/resources/g2/track/corkscrew/zero_g_roll_left_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6e1f524c21b2662f58dcdc4dbf02064ec1fc9865 GIT binary patch literal 983 zcmX9-UuffW9RKcbw)M^`JqVbG2t^_nk06nSk%u_5EsmVau^g7shfD(Yp-3L0SEQT~ zi&iNZMwL7iu0oIwB9>#E5ew!Z$iOXdcN$8ot#tyk8`b&)SER8VpE6|J%8|BCHBI)QA_h*b+cx6E>M(XEqfjD1qoE{# ztzs<$3u@_JD>LpAXvms;OtjjB>@YE9qpBP)#S(XiE@ z1Ze>>D&Pem%Rt!}*TkhZl@A0X%GLU&JF-J`pwJneBT5oo%keE;?3ij)(R+?L@G7Ig znM58Mgy{@N(K(hY2x3W9Yr5VjmD;sh&}>G&-#T`Qv?ESX%-ZSSmCjYfx`&PMrp>gfr^B*nf zm7k90Z#>*zTRyt~{S0J(b=6>)dzv%@^PKe&xsAPhR+N_pr-ic>zluC|7u_FUHbg%W#@@kM+c|(e>o{SpRKN@VDRp(J8$m% e^X1|Rc?uV$oeks9ht^QUi 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 a&f!tNbwl+D_F2=+F literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_4_1.png b/resources/g2/track/corkscrew/zero_g_roll_left_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4531feba3f082f07e7b345958d16d4bbc3cd564a GIT binary patch literal 1384 zcmXAoe^8Tk9LK+aFn)wX=Cz}xGZ(EGIO4&ca@HeG8Mxv>9$>ktOCOGLEq#<}tDClB z=A@lXTRLlU(;K;J!V1GjUDwPha4sA$ZN@|GavjU#bk)3e9^ton-n~Ab&wc*+y#IK= zKi!QDvcmi)@&N#a^>u5S(z7gG%X72R9rSby0muT4uQsnuZy6aGnVFecSy}Vu&CAZt z&dJGPu~@mexp{ecT!BD-GRHkYM);h3|XQvmsG@3ND3%9*QnrINug7RoH0rLc16%jF~jCK<4Pq0 zG9FNifF1)@g5{=IehWL|<|KnW7#G8&8qQiF3JZH3&1qE6dH8UL1z$b7thO-*xM_raD8XJ?i?MnaWVI>M~Gn3anE(q1<)w(yk|i&_qsGB4_1K3+0) zJ!9+iOV2L2^`wW*teE|;=)q`4M&-V3nf18`sKb?4y02AiF~I%BrSGbZ>x$a0weG!n zDKwmPo)>q{A;paycPz$Fz@dp6PiM@&C%a@*m6Djv=dEubd%qvz+$lbG{k)|5XXCEH zvLD$e-V-Nk9S2{yHTLb8sad&n?)`J~SIeI&?+h)LI`T}-$>ZAFg1kApqvz09dklr83pF6r^VgD^d~eTK2i|hec6n!G+td*{ zoPT9lS=3#%_fYj<+s)dUL2B7H+eNzg)7I(Vo3n@5lXtr&G8L0wO8&^)y)*G~NyV|j z^~$a1xRaTc%G<%Z^5>lY+~09Jtdw-D4b*6{Q~7;l zfxSzL$Iq5Eeppp)+nl<(^u$QvKv5s(oV)k4P4uPt_1o@^mvR1`D>_=@Z7lhqNm=q+ ze=9S6A$8*&#jWQjrv!5Yb)z|sfdS5C$@uaeHO}^mo9#`TslG8; zXZeZE>IZFiV+#zY{hICn3{I`L?p`F@-c#Q@vDgW-rnmO3TA5mPBpnw}zqVmb|LQlo F{s$iiXx9J$ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_4_2.png b/resources/g2/track/corkscrew/zero_g_roll_left_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..86eeffe0a184793867e3a8fa10ef7c3a06313831 GIT binary patch literal 1325 zcmXAoeQXnT7{`BO8@Cro$x0|vSb>g|QK7&wFIct%ucM43yKPriT|)}qq$YJ9S&$q$)6lk=DfekEJp^!;t_OpcK`@H@0eE;}7 zPghf;ac0@PG62BLhE0Z+e67w$O-W%skN2&v0-z8yZ86p7$AW@_Y15_^78Vv26%`j3 zPoF*=L6DM?lG4&rg<7pfQ5`|xG)*#$#o=JxZg(IMibSHKIGRdjb2(H8a6O>Na*IW7 zx2v2koyV&W1gUVu8jCv;k~clZ6I#TqFK0;wXIA+bO~`=`xQTecoQSZgK~E;dPh>@- z5?Hmsi31;vgjpo+l_kUSTtW#mI+(M8co?$m{Mm{>uD{?U>25OJ(MS8 z4Mo|g#EB`tlnJLN;xZh_X`rwHl?!Nm2o_QpBN|H_XC<>Y?clRM5e`sVIfE&kMy=PZ z4>Lr}K}&8X8E}jV?rc0TAqj9yl*uuT){J5{oN&^#mtlfVXT`njRg^X0s3| zS)d6ZXjn$XlypLCOB0?k3!ibuvcAz=Br}zPQ2^2avI^)$Ay2`m9VR?5#ehQhRLi(4losB)X6Nk z%1)y$8|mZhyq}8+en}KEDG}z<7)in?fGGfBo`olG_ex5)D>ycW1p}|-NF)f0g|^!n zmy1PpZcG=zQGr0?q;8bbX3T16RY6VzgD8yRP$Kikk1a2M^703Ew=~jV{a?3t=KEBG zVS{N?*OAXHd&Gq^40qs2o6>NxLR~cV@R0FQ)pm=jc8~P<#PH9*%{|-xVe4jRbHj_u zUsj#0if%f(xclCc_rI#Yv9GIQ!|IJE6bsH6=KJ5+^}t>u$e)@_RC9dxwx^B5>yQO6 zZn-BaKDoKS=GfLR44pf#9QmQ(shQSaBJBcDt`<3JJao-;{hvzl!c_h9y))`6TkoB{wW4kEbqtt{r}&XMSCHeTyZ*}iBG%P=;7Ij5 zwPcHaJbS(8=7lEVbT3!8m|HaOZt_mO=D{cJSY3`?kaOCjED=g;T`3{$F=jOuD@L mI@eu#{70EHS39dumF3!ol*5-UoN?!wgNFJ>L;qXbKm8vrnnj!d literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_4_3.png b/resources/g2/track/corkscrew/zero_g_roll_left_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5d42f9e44be8bbaa284242980662748be240cb8b GIT binary patch literal 969 zcmX9-Pl()f6n?w2+w7mNQ=NsNIixsUA{)CS28;71{~}hA`F<~AZv*@hX@gtGDw6)rWolQMw~+rV~Mbb1%IX#zV{yA<$WJ~ z?_IyNC$6nLw*mlbyKik@$>;gJ)|U!--}-+0SAYUsdi&~5PUq(4=I7@Ng~GzZ!s6oM zsZ*yg3|m@ST3%kp%jGh|R0M%n6iL%+hM_x-({6YB{VWLV zX;qpo*Y3!@zB-7EVd9P_zCdGDZdI3XyGnW*)isy{M~K?hVP8)Vo72=kp2Z>oDh(zN zo`UssEOLvZUMU+AXj(y;icUO);xd2?pkkO_EZPL&QIyYd2eN!vua9i|VYiE-h+s-( z9{0hvCJv7q_H(!(3^6zt9C;@Ozb#qCDY#c zI4bf`QUI?5X#wS7Y!?^%R4wB5r0R|hf9A#LK&DF?OPC_Xhn;{@{pxPMID+&Wb8PfH!(45r# zsX3T=M_GS*GCD@9bg{_dxJZ^2x}tHMA<0cOUuN~))?u%o#z{8jL6tB=DcUOOHRz7T z2Tf(rsUHURDC$f{ah5$qJU|t|0Pp|;fJ1-@1}KLtAj?33kJ6D$fzCjShfsu62BZMe zapW?{mr>Y2!zN07cpN+nk^og1YiPJ_(k)Ny`PyLMBuOxxCMee;>cCj5yobv^sfLuE za^9>KWai+wJv<4=Xf&frz>=6)Db{$hp)gim^6ZA+vIjvciGyhxqioDd5()vOfKZ-A zGnab;!m&D&3EOEufiWBkwVKjsXqKfj6^E^~c_t8;NU9vk^t4(=Dv4|gbr=-#D3S8x zXV0%bdi(>QT-j6Ljlb`IkP~xv`{LCXZr=U!;>yowPcLMs|Bm*V`_Uf{Hg|;A)<*)q zP&l~v%*M;NK0WjGgCD-pet+rmpJz9Jdj7{3cej4|_}!Z)gmL++^7V6fGHdee>o94E^*j5IF5G|WKl0iulYcgDZ=n6sg)h#%`q$dMYv1M; OV0UM4`@1*a|NMV!pPMTH literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_4_4.png b/resources/g2/track/corkscrew/zero_g_roll_left_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..280511fb9194fe7d9af3f9cad0016e22d953ed2d GIT binary patch literal 5328 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 MIg7Io&40E2KPmj!ivR!s literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_1_1.png b/resources/g2/track/corkscrew/zero_g_roll_right_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..60c1431798edd3df059343558cc7426488e36ffb GIT binary patch literal 1423 zcmXAoe^8Ql9LK-@d{in-+L%$JVh)QurcX&7%cq8hj?Sm!QK^_xv5iya9w!w!QYtDc z>Zs7;CKXqd+*%ti#yMM;ce)fFuf`uRjfNc}9wHOcNC{IfW1E#+y9Vtxh`d&r-$jN7jFFIID(Vxn zfPx3K7%&rvlSI5GdeF&;`B^Z+hcN}5Hbdy+0DuFaKoF8n*Rxn=F4rLxcH{VfN)^=W zC+v3U^|DX~2V?Sawot(plRTLoRhoqwo5(;(EFQw)SGYqewt&SKbA$v>q7=wU5oyGY zc7@$dx&wM&$P$P+N2k1W3@`}5Q~|aQaLtIo&J?@2axX>(WTsJ#BWm`+Zk)$Z3Rqe( z&mt0qhtqF(D%fP!Hkogv`zWT-%eiL?Y^QYvj)t;=Nc+U)_idvs_h z8jV80A_3Qmpia8T!y^1V)u_lAmOCO^Pt-gVb48|uQ;^1^(*;bXn9U)0e5FvRk>Ex} z{Fu&VvJ5y~AzvUiiUEZL(GYaKf^AmwY&wiG5+0jsfYJxOwn)$yi%mcb02u%p0L%bT z01N;SMgWY1i=a*eDF+M%aV{WHV8MV}3_>`71b`$Hno#J#p<508Mi_E{SH=r~Lsfm zK)^=Ce7YQCs|i%6l9=^shehw9ECC-C3He}bR3MQ+H-I4kVcZL2T<$e2gU%KX3vAZc zX#9SWTu!LfN}Y~G`33>silLMU^-B0dI4>gOKm{A>xzL6}HwFWec=!c*v_D_{z&2?) z0alOS`4oV}Rb|C%DoPI>t=ibNZ^4YGFJ-#$!Gql6OLuSL@1{LGqHOu5ufsB#+;idk zlwHl5zJ=eZN|R^AIAg0V?Wd2=y0H8@XN+1tzVXXXdhC%WtUKE}x+W8PhR1WN(r>|~ z(thq={}?I`AEBEbb;w;?kLT}R@pJfS()LhLcz!yyf3bD)bfbzU)xB8T(Ao9JaNUU~nFUW>kMWxm7u%Pf z>`%Tr{&wbY3t5xcz0Em1bf%=QtFpVP_QBru_3Xhf-UgwU)zb2^t2x)M?~#nvTtBnw zW_4fUhDvfocwldqpsnE~J$vDfbY5#q`$*lf74OfxxNI@Cxx2wOrD*S7_GVV0^!^n% zXQJlv{{AO-xgTa5hBp6nekAX!mBvD@lsVX3Hr_ZRcMI=!b?1ZTg8P|GwVXwl3x3;q z3pu;BeE&_(22gQo3r6f|{kFc~T+^f6H}3vkGrOU-xBl?T{uQe}j$LDcS@lOUYVR(Y zqAj}duI>^tvX()sJRw>%_dwcbl;&LF;9CWZV$FN)E%j&j4R0SVnUkJ>dj9QGxHh{G zZA`8c{JNk-d!Xy#*mNV(M)A|L23SwE_TUCb(!teV-)X*@Z#`DQIlwyU>p=;{`};Ftqm;w7i79LK_CQ(yH3W(?ic zqKPA3W0yOeI(6i<1v4pT&2HT-9p}7;VNIJgb?Oc!mp26yxnJ|V`#jHc&p*%ikMH;C ztf`jG%$u7B0GKJSD637+;&i>1!%X-26W2ZlfC*|U>&nw>Mn(pM!C*3(nVFecSy|cH z*$9H<24q~I z76QE#&;;Tl5x<2Uapk8%T$m8Slp0Ra5C-@F-~gx*gk-agTrMpTI35u@>r z!vXz%E}GAmazr>!q87+Vq0)$IXbEMs=jZ&b?@b44<~gb*q;Vik#zX58#h zJG`VfYz#!L;e;zT>1RtpJ^?sdz%u{=jffo_nMa`VOUba(5~G|+IsgZ8VZKJp)ysqy zrNpJdd=wEjX(Bc%?lvX;w#l#?#slnpu|TLq#abz*CkTs1W7q3F7K`8E2z$M;(a~fw z2?3V`0vm$5*qDz?goN4{W{#_z3B4~#kET3{smLT`3E6Bhha=cx51p14sZ!a-ao;P8@o5Fl2^NCwOAK7$`8H#1Wl_ zW7G?+w9Mty_6|~S<1+l?$O_Y7&y0~bPQQ+n30jy-{73$~-R#);Y0g&T z73O;6Cu81^+9QRh6I;S-6U^Xtyk0pnYx@sbMdJ@=$=h z_grq)$Xyy8E9D8Ank$M6d#3-sxTc`1aH3<6THd(%oBsK==f5bTEYm91rn7T~_cd0R zp59SaHz=MC5z9L@4eZ+YQWU8QNZKP*-^aqx}!%gUWMK4e;-qSSTvov^We!-w{CSW xuPHaqd-rHb@A*fmU9-PC`}kiTU`4|x{{yn8W$pj~ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_1_3.png b/resources/g2/track/corkscrew/zero_g_roll_right_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..edd1bc0dfb78f587bfdf4159c7c487110617220a GIT binary patch literal 971 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 YpI`oF{h8Mvh1mf4x$|;bW-ndyA3RRq-2eap literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_2_1.png b/resources/g2/track/corkscrew/zero_g_roll_right_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2c0e9eff7423ec14b1f61623d2a5f42b2536d565 GIT binary patch literal 1137 zcmX9-e~i;~6o1DZ*W<>y=t2g}P-K5ptuUczCDl~y!8of|yrMJAIAV#5S+I~IGY%}F z#6<=+GQ%Q+Os!-gRfZf|VI)(h+=WRRGRTMx4xBiY#3>Ula)z%XB%k-|pZ7^VpZDHf zIUF45pWP1t14AnYM>=(WCua3^ck=E)$OF&~E1y}ltTT3XbxoNvrMtVkr>AG?)TzC_ zy%>h|_4Q4gHqGnz`zb2GajYovk`z`HS<|#kCRZp}<#N?=TJ1I!0G0uPcZI{ASPYLR z0?8DU$qM;Gq*ziacBsGFRypW{2nlf( zbP>zTSSjVMbd*9YK>iLS;XI01&}2+3i++KAj*8h8Y!vv1qiWs#kM4R4Vx> zkDv7h1e}QwL75Dxl%z9CmeWi=T@;N<#B!oI?F$6`j7ahl9hNycDI{}|oF!YfT6WTQ zGhd%5xmoat;Ee*F07A#;oHtk?!X;L=L#euAwDd9>6-bXn`{F?|6=L!dS5!n>lWG~I zVQQ^XX2Ld6qwMz31R0{}D9gn~F(paac)XBGm2x@Tvg*}ptJOl_lYz)!RNl=MePV@- z*12ROY&7G=mR@Zanv=B&-jIq#&9=>E(?%UGUlgc> zi`Bh?fk!Mtb{M@CHrw&yM5Z!n)lscQc!0*SV89(_@t8;@qP(ugjI>%b({|ZxI%U+Z z(>#wXKn@_(@gmuwy91w=$Tk{uHgg9`rNV{7Vk{;l5;7Ig=stPVG*AE?fk2q9v>Q9y6UlAyV9ZE+aI1jxCNO5U!6$I z_-xZJ(&fR~FJAfN{_hm?@<(Tx4Xd86@-u(0?fCiIz5SD?jvF5|#I5I_n{WTyb!hFf z1E>GOpP1z=KJ{sFt{5DW-y6Sm&$&&mi<|RH9`Y`}ezUrMr+@s~04?skd9O9sd-M!` z%pU*v#IZ-d{I#@y-51kOA3igxUFp4X@Vfl~ao?=3lLs~{8yEdB$2=r%Kk??mwfoM# z?Ro9GmKb?7J>nj@`fAr$?yIy*JWZQ++d+rvl_N~3NFWWrw=b|;= x>{v2y%d_p*+2iZ_AH22x?KwWAvhEgK#@^wgSd{{!`C_R|0W literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_2_2.png b/resources/g2/track/corkscrew/zero_g_roll_right_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8b851546e7cbd32199a979fbf402a7179d998281 GIT binary patch literal 1230 zcmXAoZ)_8F7{`C?Ukhaxs8XRZoz~>kb2-czJGqc^+-4mG4!B823On$0jg;gviz!gd z;VRZq$IaAGuxMk>t+FzT%yCK`_oB*TsvJ0yLe5xBk)jKft(rwP^RtBH`}}+Jd|!N? zr+348NBx533jhH1ZLhR!s#K&B4f^Uz9^CVh0zfs`u(rLmGR~Vfud1r5y1Kfirlz*G zwyv&Dr_<^6`uX$cn{755j$;%>GK`bs+&&*43RqpbvsIC#`0;G9VKVpK5cjHDSU%gUO^YPVnx8^NGX&hF+ZK17G&Y+UAL zRmf-&wV24yC`J;P7-04QYXBgk&K@^AQixk2dDRup`=pYXfg?0(;_Mc`0}Z=~1V^QP zj2h%}QC}e$EGf|$H3^KKQU1%l_0S20Ez1G zgpo>Hm@MkaQ=x)eD*DqUaiW|m&gN#I0W})!X0yX;V^EAE2%nPlmXNLgcTN{iroWQf`M3}V2?!~$d}DhZa3rga)AJkV?jF> zCGjMMD^6^JMvE>RWUWv@U<`*c2~}t1`0b5`srx^$d((Obyma$wSEb+I*3#VG)OWCb z%bD*R^gsQVI?~;CYDsJD$$kA_Zt2>)%F4ZFsDI(uAb<7zonQNp3U?eW7v7}0E>7$J zHT3Nqe!lsS_f95m;fs&dxMyM7d#DI>PM;e>VzFtPOhDC5g7iN3?ghty#0`_%VO) zr_rIhg^O!8A9}{ti4I^pe*lj?boWQEdggN5#^6$6vSG#9R^(5*dvbTp*uBQij-LIu zJJHDA{=-epU$^g@e(U^KJu6piADcywfBvNHM&}b--`Vr{?V$rNpS^@R4sSh;T!~r! zGAZSALmwd6lCjI1ZVlvi6r#%e%*KKEmDq%Gtz%TX{?Fzqebr?1wae4~jliS~vQJ s-}Bj`?BcP3dj}p3T^CLt{F|FGHqGI$`gUFOR-k~k*7Yr?R&Ve5A6053Pyhe` literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_2_3.png b/resources/g2/track/corkscrew/zero_g_roll_right_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..26b59ed2d735469a9a99bfdbf7b1ecb150a665b2 GIT binary patch literal 976 zcmX9-QHa}g82|3Bcj;Z76*>*rhYZVzE}KCD2FWyP?&yw;%eWj?7a>Am75fl0O2L3} z7om)TQHoYAN7aB80~Wo92-QU?ShPZzRVoDRLuGl`LzN;05AJWq;P-tWznAa#gWvaE zyR=h0v2p(f0G!yqu(_K|GO3g4m83t`_$>vn0+%lCZ6$PRX=!vMg$vVi>w@+s$UX+x7eXQ54PQbA|?<14+y%O0H5NswQ2l zbIq32>8icJ7>4!9)DUmXG3yuepi)rf!I80! zjs^AXxRaX?^C+g#Tt!C?Lj3}O1fXJ=p3PeMyhD;M#~n)2pj;kX)~$9M1wo$46?mMM z2u>x7I#se5&EbreV0&VtC%Z${kIDp_r;7znrbLZZbV094wYJ*!bw9NFQ6r2ylSPo_ zAtwV~2Eqi=!Pqul?2<~r>tU%rG2EHcM~4!X)7X5qNYzVRM-zI69NOBrX-qwP7Bm;3 zho=2(jwPuQ!DQ^k#| zy_qwbcjKe+0%fRdmc{WRQIIKG<2XZ2fzau08BAJ2_ylT2J&1KjU^Iv1{ys0MTjIoG9VpC zbq2W-@+)XqLy-%&gJ(e$pd?`x4Y#UP!zp%Lt=F@|(2L^`C0hA1FlL5#aLFZ9pVTAH znJM19+FLY-NB#tjXJigo0xQy4g(oU9W0pn7s<;iS=QYB<7e{?GpRl5cd_WN(lw?s$ zw!kKE8VMc=wANm+wiPRF2Od#AhBodvwP9{qjetAO9Zx zb@tjz=RSDtqD?%!xPIke@2BXi$A39K`1P}A<0sA!|GoNp`nzX@Z@zXvU-#bsKJ)4I X=eG7gyzfTh1h%(!HotuOh5i2lHu9o1 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_2_4.png b/resources/g2/track/corkscrew/zero_g_roll_right_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..84c2021046042b3b2bb9af8b7a45d995c04cbd32 GIT binary patch literal 5257 zcmeHLeN+=y7Jq;c5H;OW4K3Qlq+8T9Op-|mB+!Tf14axbD06Il1;1z48&P=ktu9(@E5z)a zDl2KSloK3VZ56>GYAhxIYQCr_2u}2ICfqV_+I*q7^99wb*_UIcd1Dj{OIJT^?mIlG z?}%5gUTu45-j+S3`_t>Q-Y#0PeMZ_B%f~&MF+))A-z;hFX`%dzQJ_X zD*DVEd*!L3IL9v{F7sUS+%l53a2MM69!@R0Vk| z)tzu)5IfhroSEyJJ@rF<$(}t$@-tbdrZ2BP)VN8$eb$tdb1eKLmzP_=VM#2xg-fSK z_pGgFH!ftb%*&=Njn29jb?WTNywf@JZs`k4|Il}GrSkljb>~h*9pCqu?uGZ$UVrP& zU3pKgdlp-G&CA^YK1lrVosT96wk`YQWc9OO`g}c}#DG;f)SviLV@y;=E$b1eB@4lYF(`>z9;?kvdsfBs$T*Ufal4n>Ie^Ymt%!(K=f1e+{{MwY* z{plyFe_Z)9xcHXqKS>uZJd}v&etggGi8^uOm%2B*dzsfhwVu6ElSRU^TV;XewK#vi z949MMFe7OoQfexyVBG2F%V`;WhQsPyB}Wju-JW7cQ%I{B5v8Z6BSJAE z77L(+fU2#uVKstEiWhgfp+-j+^S;$IG2op1q)wWD77w&WJ_*YStpFav;NsX`o z`9Ny0DnyhbL@Fwfu^N;uXB7k)ap*TSs3O>rUED%SEiU=VplnBy9GE5*b8ifMPXpjkH>84bP(O{H` zB-j`TtK}NS7L=Moeswno`rlP)1xn zm$X)3FrAhP%uFCvmFDn9h;VsUL0%?ToFcrtQc#ZBOi%&#fThw%+Nrx+MV1OeXTw5# zie%z6iBKX;l}OV>s5tem&?3T0!CDNVii9a>T6iav7�FQj3Ku6#|6UVKj1;mB4JI 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_3_2.png b/resources/g2/track/corkscrew/zero_g_roll_right_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..654d93c1a49ff6628b112c495a5ee5c9779d75fc GIT binary patch literal 1065 zcmXAoQD_@=9LIlc+FskNM4N|DBV-!cDTkcnRt~)4Ij=RAlU~_%1{c{)Z!Qm!-rRM~ zL!iful8(5YHH?4(1G|Sj94s3ZPR%3_5!w;-gxbb=x@-#?v@4lpn2oA`GX~$^@5lG$ z_kH;MerIQALL~Y) zUw?o9z`y{8VS|H%LqkKpU@%BgB*(F$$jfp>Rh48ina$>lMXOTTaGX}VO_9JdAn@); z#2bqR;t4X9X0kbIhYW00Mx7VT#A2`TaVM8w|552y4-3P1CmX zc~ma@DQ}SVkwSox@Q^};HA>bQHOD1QK2s8ns$@CQ0PQD3K}IBanT{x&k`hvRDQ_v3 ztyP?i-7M5QWe*Ep5qwbyBmmbjI`0b=@kp6f>~OlS8ZEtoRt3T<)BbpfNQaq%%#~Ep zPRg~c+Ax!?a<*fes8R8FX`BdCbd=@dqL`NDTs&S(r_1@gZCUk=jaI9Lz^?$F#i)XZ zEBVDL5v_BnM#N~wOD%n)U2N{wI>=3UJhaaj3Is)hlo>|lg_P7?mMEq(YlWgyvDmk0u557?De`W=bsOqHCsBE9aWEO1r&{Sb#8q3ZMg+0BZmZ3{Y1BhY~6>4dm1W z925#NELb6M1VADn#fQ=qG6ZDBP&I`d10I5>f#)DBU@_UJ#fgj_Dj0I9l(cQL*|bqN z%O3?Q;bwK8U<4!!R~$xfMa*`*)X7$Ntvaf;a4*mSEJS)DY#=65i72mYF(adu%#2+z zn@$C_>om_J3y=c{by=jkagXFrCUT7ioy$IwTCH-Ch!~5>iG)ItNt(>El*v(Lp4xsc-|gg{~N!%^N!kDIQpw}X8Yy~6Zfy4oV)(g(!~7-ztFBf?C;?4 z$PZWd^=KEln0tBo-CFPHm3isb)W_E!d~xH}*?VJwRq?G;qsHdm-t))yT;}&*J9vEG z^1YeeZ*=GJo!hUXiKp@L>8u WZfy2R;>#|5fa$53$xE*s``~|uMALTw literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_3_3.png b/resources/g2/track/corkscrew/zero_g_roll_right_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..c520c0aaa980e42f0c1b5043255785aadb74bb35 GIT binary patch literal 4976 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 Sdjo|<2FZ!D6ZXznwDLb#>Kw-a literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_4_1.png b/resources/g2/track/corkscrew/zero_g_roll_right_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d66f1f132ab8c9ec8af886aa7483f162161ba100 GIT binary patch literal 1127 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 y@x;NlFk?(vU9gksf_{d7-ZaUdl^K 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 F{{!%-Fq8lQ literal 0 HcmV?d00001 diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_4_4.png b/resources/g2/track/corkscrew/zero_g_roll_right_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..be44720ec7e1ecd12fd4c97682a02b44475a59cc GIT binary patch literal 5473 zcmeHLeNYqE7QcWP6g9P2LD42Awh_~i?*sxEHDI8KK>|gKG$xx(jC^cNfkQKlj}PRGinDH_p8NXXb8p@4e^z z&N;tx&Yf&ZQ)ftr4jw%i05CKuF+L66Io>NM0DedOR9FOWUoK9cWlB?;$$A5((dD9K z(;_`eMhkTs017YVrDhEa7#H-YXGENT(C39?dd}?-UcVE3I{(65~I%D_WwqqE|ILvVv~B zlRnJ)n6s+n6z%sV#M-0TRI{IB+Zt?HdiHOMS;Q^dsT)FW#NKl)-GA%W$t&Bdh*SL$ z%GiK)1ls(_uz=lsO6k=VhYu|OnDKK*^^6_F&WE$#WR;B?4S?TrokWtFB#}Ig2F6ge zbbVZ+WAd1jimaVG(?u7joESH^;PbLoqRkUWwoKL05B@sW@JlF9mzXwZOrZOtB2rlf zAyk_^c23}w+W{xOZ%I0r@a`i;+PvYNEepg~ez06_3OKfRw0!j!QQJP*Rh{(q@+HcQ z+s%}f;LEU+d%hmR*pz*yrC`Yq4u`uj%w-Vwc*53|4Gf6&Ur?nxnsjVR>;c{Us-9Bn z9?Izxo)aOW>~(*xzp=rARXGKgMVfdQdaaatV(O8Soo{O1$R1by_S(~{-o1b2n1kbC zeDm(!7E#a7%pq@_-}H`Kx0YP`){b?>V9?O?nMI{xdnZN=2zi!>X$HqS19DJ~H^WCMnvu}kQ?-?>@ceb@D@XXQ; zS8mQfM{ndPn;DvSO4^n+(XUJUM@rz_+arVaMK=}PTkrt<{E7W) z_>Vun7RHp{JL+r8s@3JkQMwwNDP)~Gj*`hwVWsFL=saEGVgo8)JR==hoP$KGDdI_k zV+%zPAP+Su$%T2j`9@J;9L0w#g3sP%CWY)1G3CTjW~HQ(C71yv^CEeXEJi}1ZXt&< zX)rm~pw@`e;-~dNz*!t+p2?&aF_~twInvCH#0**{J32a=$>K0M90rtN7#HQ6l!c6Z zBh?GhixH0+5ra-|(qZ{zFQ!t36`0~E6u3`*>R+BdCFL1>zOj!5$Op4fsb{hyS2v5WHH_)7NttP=5i2ktXu?7?-$d;Xp+=tR>kACIzHrnC6U{~Qpr{dA zWxrrjnv|0IOv6ioR+p#uX+g4IkTmHu&&hhhH}8%woc@kL^=G&*NI#9;Ck&-hQbh3> zQs8wjDL#(kwJ%a*h)yl?J@VNa9;!ms3_dDQGI%TmVMM8T90p4zfH$5B;qkfsppx>9 zCS^W?dZ8eAqz>X}qN4eTO3h~=C`-WLsSyD~6%C&d6`Rc$aM{s9HQEnCX3)W^ROa^g z$_u52P$~|pLf9&l!B-BGN{xu7VTL>5elP%;#@mQRwXn`;~ znj6J=F7zI1Fv42&qOw_$+$i6UH!&g@4y0D;tyBo$TZhqzBnDJz!VKvcmK#U$Iz{$s zKHE-#4W(9^l<`Uv3PD*Mo`}s7v7*x10ui4l;tS|3wuseF9#iWyi~g6iw|&U5y-82h z8KM0}zNOxtlA{ZHXT8&0ov)e5WM5l|lt^y~M&&|O?ei02^=={al=)f|o*#V$`*dCR z7sbF5pgb0f#b&4kJQUUw8)lG$L@_u5frh1KsZfDH^&+|v)0oUk13ED#V9{xrP5c-vom*V#oU9aeRDF$9j_*HeiqU)s?cq!pm)%Aa)Yw+`zDKsDc z0y4u_rMvg#P5=Tx>h$yk_`2oi=jZS59}o~QV8DRDz`%h62NDQ`prD{Zg9e3CsZ=hP zDUpcf@?-?bG8(a>qN0k5n)><%hoh~%y{o&M%LL*WAWII;$_mNJA(<`AlCqeJN?BdK zqOsZNbd_~<)=KDv%$Q&-In*Z^aSs#kR^Sh9IPRbVAOk=_AYeqIH9Xu#qt(X59FWOcwOY5;dZVTW zZ*C6fhET zR5_iA#KahrWhDv-W~nbLZ>_6uceuJc#6XcuFv^Km1<95}ue6BmCGy5fZL8htZm#sW z9o^kGa4`Ux02l$V0bmE96@X3xz~PWdaElSQ*W&GN84X}uP%Z`yQqV2~xE$bEC|<_J zYh`#t4(=?$+iQV0@j{R+0huyF4iaiL)5~qrx>}^MvB>4Jdps^2+6vbKt|eG(3zgN9 z6b&@2J;v6RW$!jO_Eb0@Hgw?bE?Ni>k_b{JF-uI!k#jBDWScdow%poiFLycYo^}V` z-62d)#v1_M4saaiq6C`j9pOcm%Fa$=3vNRs73>=#XCxi5f zvmsf*A>PXmY^@4|iv&|rN&?~f;2@$PDr7~T8|pkril366*t%(R(gp{4NWu~P{H3+y zGWYXm<-V`_taG0xsBFZJ-`5vDSQ+KHymsZ1>NC@i8tg=S_|VDY+fqNspL96lY=kyD z|B9@5{n1Bv{t=$^2g}B?yUUddztRs=9~ZBd-tbiJ47^R_XV2uW?%2q_Df1WgoY_0! zN_oVdsL{pSCtS9tEY3*Sxl7_HnK-Q7*`U0CS7Mx1eCX7-JU{>YpIy9}xchtQBr}%} z{=H!;<+w0{^n`hRpLX}aQzwrkGTvGekaajMs3 zo?d?J-p8ZA3UgH#XZR5H<`Ofu)5Kg;94S*CVVuCjiK+9oWBCr6K4QCjus zbgKXS*43kCQ*`q2)Y~6C*!)%PmHFq2*C0f7s^!8b-E&U|?EGm<+p3{oy?L0IN*CQ- zer+>#J?;JPx`*>~yLWGTkKD0i;rQH{hH*`2Qk_I>Xq(l^PQHf`FH*0iP}l+>nLdWD5IZ{CELGIuxsu!_SI6Da})PSgQ%Xz(BbP?)SC2ourubb5sefLdTpxnIM zaX0^K?tSxqe>~6Ud7jVnJm1TkzUK9sWrcSa0sxk28|z!(GbeKw7AK# zU!T42(fGms{cARDu>N}Q%%!t?y|sfcemclquE_PQK2djh{P|XSF#4N+$kj7To~}>7 zN_D+{+3r7;cX8G2=A~PB;BsTFeUG&6s8rB?n;Cyga_nbUQ)9JX<|dc5--fo6>tSGz zlWKLdR;|7k3=HAW?)^25vD%eqjU6w%(5n2P?#$}VU9b6{R33cbuF(fc(eb}+cKwwj zCmUNfuFOyF>EZbwVR5XRR&C6$yOMY2!%^+~4QsC&TejRjF}h84;k@^wQ+X$k-fej5 zcNM>S@yK)9dmrD0J#r-~*bClVarWi6mx`a=^xkOKuJf^2GO{A!Qcb5Kg_YeqZ#XXAZOD0 z&!+s%SMDl!rSeqQ7u)^~K6x?xDfi=#zqbN0d~qTk$vbuGYwwYiLjE68o^{FD&Ujm8bMoGlcdS1 zCbp1`J6(if=lWKBrwy+(3sh?gtGksDz)rX^ez(2TK`Xm!1X)}q9A}mh0Y59^w$%tW zG&S?pl#AfYOXZ~!aYHw`T_#vl$gg&pEy|Yqhvp#QtVXcK?RF{=#N+XldeBnJWksZw zm6eD@hR9@MC?TeIINVsb*g*?35VIKd1dY2$r<nXe|6Pl#pei z%((I)%4Nr3I!QZbB@m~>n%&3{uB>a;)(B*!k{c_{otWDK6<`mL4m0JUZ)~-acEaGs zGJHxEvI@CG3U5@RP*l#-f0S_1uog3@Qb{Q~8&4)NN*E5L7RyvB1jxd|Xq0Lffw?JH zD@AqI2r^FbGn&`8n_xqkF*jC^xd{j=k;#=(iBeM0DlJ!{3Z+aUl1P=3dGeH*wCwm_ z(wX+*SI;KBk))yh9oePXo-z>IW@oe0PBPm}e15hqlo&o60*!4a%vnDn*6bF(1#?&l zcz(~NyR1wArqqnUS=+rqcXFk{AP5Tvba5%i>R|g z9wAq-K(k!&@0&~2{Wr^dwh);-K+42YiFh7m0%R^&By(b1i?$m1FFvZX0`ra-s5iR? zk1lu;BG-??IleN7&Ug5k%fokQ0YWbrxg~xV=vtubmKeAt;f3m2pzD?xxFz9*>iWOY zRe0lNig3VRKpyz2v}@JDs{rJI=5?(N@O3LECnq;IH!m-5(V|89`T2_%FJ`e=1qB65 zmMq~2g+dfX)M}N%pu_PFnx=YsdIko9!^0!7*jOqxIW>hMKvf0wx}uJbVw;WU@glwc zs)0fM(6BKQrQ-?z_(Vu8VzpHjQ96#VjTgX6f;4)pM;#q#iw{$&bG_+QXnHcH;R2%w zcvK)@U=2~MsGpr2DxQjSnKZ&o8JU>?!^DID=m9XYSQMM><8lKfC84USV|x8Lt2OEK zT?z)7Xq1Z<3soFM&#N+)Xed#e55)sj^q{&Ytm}^$LUH3r%F0u45sk3QAkyKA4oXe+ z>U)F6;0QI6@WoR7iS*F;bd;?E#RkB!0-hI?1Xzk7M>AZ~5mix%Hvc#snheC4V|r0B zuHbq!B7a-e5U!5UhC~mZ9H1w{J(JOa=|q^Bh_Qyv5rTP#{r%^LhEuV`)VK;5bu8Mz_8EBrn`qFh3ilc!gVu9lUotwFPR6FD zE-@+q+5n&d2mlZU;2Z!GEWp4^uV%b76Am${q`m}DDCk##5e-P`0b>9R#bNv?6Vfvy zHYVQ7q(UH*cm>d@L7Sds!#O^Ws6U_?3gMARPa+XcrxOgc#kB&|Tciqb^dX*cq=ZUU z1tvSfQ=Z85KzwFooJmfW6axj1r9s#oDxS@Ndab&E&lc+UMZ*1wSU8=EF;n9TosJm+ zObRdz%tbFWH+yk=yn_=Hiot=|i;lO^f^H(*($r5K{J0z>9ICJNK zUmRKi7g=s?Qv>U>!UFa^chVFs7OqDp6zDd|^HSBL;*RG1Q<)gT}DggcQPJHW)tCIHpgu zX~jyFd4i%vK}(fZX;FhsG5XL_iJ=9)q`z-${JKMlcZ78^U5RaybL#i9?Z1v9XX=7aJX$mH z>iL9?L2#1ktZ4cX)84v`iBig}q)BVmuJnBK>7<(l>zanW`*FS2TXX;3xR1~ARSV|a zHD@1xW$RM)nzv2|{*f5powe`S%cnP73q1SX+ehb#8bAK}Le$9_<~GyBhYzAljvLQg zXE#MAz`?WgAal>!??&7o^TE3#GVxvS{E;Oi-}NpCyBbv3pSk+o)$v{k3V6#Pm8Qw0 z(#HXTFsfI-7oXyq{pu;TYVY23@%ITQCoeBNWPe+{ZTk4uIR<9a&&y3eh4T$53$tDg z?pkM~+82?+^-Cva1t;7NI(e~Gc0Ordzj|TLn4Z=ZlFL7qUOFDsa$th;ozI24_SNl_ zMZL93v*@;yz5zNBaq6SfqgY#)e$`sI>PMHW%MsCGlJt2ZHrs~>#RaaYHXM_+B*Yyy zyjk71G4dn&mnS_Z!^BHB|MuRkEiSCOeP(H~F0li>u`%-GoTFuXC+Ws5oxC$@)0c10 z`~7l@i|b*1J?}uPxbGS~YTSjbGrA0$Xd9>O*}NVaF*^Nq+s23k)29vRHq{i|A-f;( zkG^JF)Oz}pwc@cGKBM-N*I07juZ!BTCoS-%^^=dvIbS$Ko2s_mU!9lv@31fWMrG|^ zYCRtO)#@#me|htKB&}t1R+c5kKt6IQVEs=1>*2;T$(^d{0bc#R)Zpc}$A=sg9WQ*a z;t%NBzJ}|RD_35QfRzu9wL5~2AOEwouCtqb`>g5W??nk1D7=*hP+&_^=Zg`{7_HG_ z*=Tf;u>e#a1jR{;3N%PAYNlnQdP9CZ-Rp4DX$EaPJtHQSomwD8a||gZCRACnARQ^m zMMPS7k$v^bMiCtjF1cMt-M;^{eNbAcF!Ef!0(g%^#P^e{&x62WXP%;mCx1Pd?D zH*1Pm`FNxcVgMr%#SxRCz-++sX+BI%Hdbhkr_;eY?XiExg4EO}@cH;43xE%}NK*iF zqS>&~2oKf3%}FZ($e=@isez}1K7|*eI96yv(4>`UzBzIzgcf*%xau#Gn=XAB89~6Vd2&ERL2P!{WyvC`%N>XR~xM2$!wn3up3l zf+0|{eB7+bM^GOW0FO2R937u6;36CzizDKpEWTF6Wr;*cHcP`pI9#p}WupS_5D10I z0IE`xH`FU1lomiCD1W9F1pr)uP{-nDb7!)$wP-d=i?F#dLX^wZatFN8BI3E2$*2M8 zG#E8{6fVfu`)&9L7bm32;_2LI_S2cPJdIfg6hIFc^0k-+f4Y=zFrrGc#>Xc|z!mb@ z93hX#=ks_R(Nm$ts0jzP=tJeOqj^IAiZ3x@5DuVL=!*ZBw6A?= zaRW(DG2p;{v43iyrOAhMG1E7q>VY7x%Mu!K3g?&55<7ngH|KcOgFEC__0eS;-VCw=q zA^c=39OTQl>HLkq!94tp769}MBhSU}3%Xv=^;`@*m+*_~dO_E7G4Nc%FRJVRM%T!v zFH>kf_y=SGuS)yJZr=kzK~UQK^d#`Q6%Y^*7#J876f|tuu;Ad};lqcMNTiUEkP#zB zghxh3@_4XRDp4xs2%^Gq%x1GyR@O8&HoIJ%Znw9$mj^?VSV$ocRjI;qbE%e6xXd0~ zS*56NR6Cq_dxyQdr&h`&WyFSJ@^EVgwH#s8;Jm{&sk1Vpy%BS_m3iE?eO^~G1yVC1 ziv%iHlIk&%(@yTH59@8G5FVK5RTB@(3BnZ#K?(>`lSmkuY^6}j8I0Q4*ux4%n_k~# zwce_!A)HPMFDz0L4lAg!YDO}~%&_v1@>sk|YHN^JIFz;R>Sni|Dxkp0k+Djq91*B6 zDORQ^t5Mf9W6d2_m%F0FQ{Ua^Buk($B^0iQsHG62oFu3TPi|zWoD!@f!`_Y8ddpqJ zVFfb`5l}42OnXLbJtB4B$_^XSRf+dB*u2ilzK#Z>$3+ekFqj!UfnFlDD3x{usj^ra z?RIBPO-FNccW0;9>m?ux1~Dp0yn3?KK~c6d_1)649#yT!;_#Mt_BMJRcJ&dVOfp#z z9-d5%R5D>CHWrsF%G3a?w9#JCR^RA$b@X;iAhn!?E6G+hwLF(uRVryHQ#z{jZ4K5g zXO*YR)!TcEkU&rd1mO@=4nFokP#XmGkRSpa3Mo;F6AiV5yGy}<<{KV3ag`` zqQlkTal44#Zh>4*G(&_NA_$O+GGK1tpx8>QdU^y^l>-Of-Y!+Cl)1S`X(`5oZ34Jb z!fTN7oN~BR!SrNA5^5@8We`<7qFF+8$U*T7SfO`(Jz!qAKncyh@jdvw1qEcwlM|s0 z!4p%!U_?PmCLk*`%y$Mr+p8nMB*`pGO(NYK8A6^i`n8KUfl|OlSz)ly8!u6uaP_U9n@N$}Tz}>6qgwkHXL{A+$J}93 z>Jp|ux<2KdsCE0ly>-_LHT^tya&h~H^Hlmc$Nc^oRo4FP8>TIew>ZrE6Ms`pS?|qM zWT+1)xt{%OgD_itApF#OB*3ZvDo zzLT>}Nbdbsr1)J}{zmc1+!a{vZ!))Y z;w*}nk#WMij#t=L{b$3(A93-X8=qZ`Y0r77`opc>b33B4M^>rNdjj*DUhO+77$3F! z)}C*?Ka4fp6xhVa&Ujl2r~W`Z(7)u0`)+Y3`B=oksqvu~++S68&YJh@spxP?_vNT7 zT;PE??#k{<)613}x!TOROY7g)a{na{qjL9-Wj{?SDJtHy>vDZ~rE$%Qm|FAXmfinU g53|;#Tz6+!8I;ClU&nUN19^vJNedDW&RM?hKW#W5&Hw-a literal 0 HcmV?d00001 diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index 8dc1032cee..2e67630a3d 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -49,7 +49,7 @@ using namespace OpenRCT2; // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -constexpr uint8_t kNetworkStreamVersion = 8; +constexpr uint8_t kNetworkStreamVersion = 9; const std::string kNetworkStreamID = std::string(OPENRCT2_VERSION) + "-" + std::to_string(kNetworkStreamVersion); diff --git a/src/openrct2/paint/track/coaster/CorkscrewRollerCoaster.cpp b/src/openrct2/paint/track/coaster/CorkscrewRollerCoaster.cpp index f61f868de0..50cc3e3672 100644 --- a/src/openrct2/paint/track/coaster/CorkscrewRollerCoaster.cpp +++ b/src/openrct2/paint/track/coaster/CorkscrewRollerCoaster.cpp @@ -11046,6 +11046,8353 @@ static void LayDownRCTrackHalfLoopUninvertedDown( return; } +static void CorkscrewRCTrackFlatTo60DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 0), + { 0, 0, height }, { { 0, 2, height }, { 32, 27, 4 } }); + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 2), + { 0, 0, height }, { { 0, 29, height }, { 32, 1, 43 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 1), + { 0, 0, height }, { { 0, 4, height }, { 32, 2, 43 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 4, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 4), + { 0, 0, height }, { { 0, 29, height }, { 32, 1, 43 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 3), + { 0, 0, height }, { { 0, 4, height }, { 32, 2, 43 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 4, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 5), + { 0, 0, height }, { { 0, 2, height }, { 32, 27, 4 } }); + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 24, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); +} + +static void CorkscrewRCTrack60DegUpToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 6), + { 0, 0, height }, { { 0, 2, height }, { 32, 27, 4 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 7), + { 0, 0, height }, { { 0, 4, height }, { 32, 2, 43 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 8), + { 0, 0, height }, { { 29, 4, height + 2 }, { 1, 24, 43 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 10), + { 0, 0, height }, { { 29, 4, height + 2 }, { 1, 24, 43 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 9), + { 0, 0, height }, { { 0, 4, height }, { 32, 2, 43 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 11), + { 0, 0, height }, { { 0, 2, height }, { 32, 27, 4 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 16, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 24, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); +} + +static void CorkscrewRCTrackFlatTo60DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack60DegUpToFlat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack60DegDownToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackFlatTo60DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagFlatTo60DegUp( + 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_SMALL_FLAT_TO_STEEP + 15), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 12), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 14), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 7, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 13), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 7, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 7, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 7, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + } +} + +static void CorkscrewRCTrackDiag60DegUpToFlat( + 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_SMALL_FLAT_TO_STEEP + 19), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 16), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 18), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 20, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 17), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 20, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 20, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 20, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackDiagFlatTo60DegDown( + 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_SMALL_FLAT_TO_STEEP + 17), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 18), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 16), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 16, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 19), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 16, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 16, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 16, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackDiag60DegDownToFlat( + 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_SMALL_FLAT_TO_STEEP + 13), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 14), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 12), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 5, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 15), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 5, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 5, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 5, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + } +} + +static void CorkscrewRCTrack90DegUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(26607), { 0, 0, height + 8 }, + { { 4, 6, height }, { 2, 20, 31 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(26608), { 0, 0, height + 8 }, + { { 24, 6, height }, { 2, 20, 31 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(26605), { 0, 0, height + 8 }, + { { 24, 6, height }, { 2, 20, 31 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(26606), { 0, 0, height + 8 }, + { { 4, 6, height }, { 2, 20, 31 } }); + break; + } + PaintUtilSetVerticalTunnel(session, height + 32); + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); + break; + case 1: + break; + } +} + +static void CorkscrewRCTrack90DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack90DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack60DegUpTo90DegUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 0), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 1), + { 0, 0, height }, { { 24, 6, height }, { 2, 20, 55 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 2), + { 0, 0, height }, { { 24, 6, height }, { 2, 20, 55 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 3), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetVerticalTunnel(session, height + 56); + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + break; + } +} + +static void CorkscrewRCTrack90DegDownTo60DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack60DegUpTo90DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack90DegUpTo60DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 4), { 0, 0, height }, + { { 0, 6, height + 2 }, { 6, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 5), { 0, 0, height }, + { { 39, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 6), { 0, 0, height }, + { { 39, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 7), { 0, 0, height }, + { { 0, 6, height + 2 }, { 6, 20, 3 } }); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 48, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 48, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 80); +} + +static void CorkscrewRCTrack60DegDownTo90DegDown( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 6), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 80 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 7), + { 0, 0, height }, { { 0, 6, height + 2 }, { 6, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 4), + { 0, 0, height }, { { 0, 6, height + 2 }, { 6, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 5), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 80 } }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 48, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 80); + break; + case 1: + break; + } +} + +static void CorkscrewRCTrackLeftQuarterTurn190DegUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 0), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 63 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 1), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 63 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 2), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 63 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 3), + { 0, 0, height }, { { 24, 24, height + 8 }, { 2, 2, 63 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 4), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 63 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 5), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 63 } }); + break; + } + PaintUtilSetVerticalTunnel(session, height + 96); + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + break; + } +} + +static void CorkscrewRCTrackRightQuarterTurn190DegUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 6), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 63 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 7), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 63 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 8), + { 0, 0, height }, { { 24, 24, height + 8 }, { 2, 2, 63 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 9), + { 0, 0, height }, { { 6, 4, height + 8 }, { 20, 2, 63 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 10), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 63 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 11), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 63 } }); + break; + } + PaintUtilSetVerticalTunnel(session, height + 96); + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + break; + } +} + +static void CorkscrewRCTrackLeftQuarterTurn190DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightQuarterTurn190DegUp( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightQuarterTurn190DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftQuarterTurn190DegUp( + session, ride, trackSequence, (direction - 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack25DegUpToLeftBanked25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 1)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 2)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 3)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 4)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); +} + +static void CorkscrewRCTrack25DegUpToRightBanked25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 5)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 6)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 7)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 8)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 9)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); +} + +static void CorkscrewRCTrackLeftBanked25DegUpTo25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 10)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 11)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 12)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 13)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 14)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); +} + +static void CorkscrewRCTrackRightBanked25DegUpTo25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 15)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 17)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 18)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 19)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); +} + +static void CorkscrewRCTrackLeftBanked25DegDownTo25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack25DegUpToRightBanked25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightBanked25DegDownTo25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack25DegUpToLeftBanked25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack25DegDownToLeftBanked25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightBanked25DegUpTo25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack25DegDownToRightBanked25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftBanked25DegUpTo25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftBankedFlatToLeftBanked25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 20)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 21)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 22)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 23)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); +} + +static void CorkscrewRCTrackRightBankedFlatToRightBanked25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 24)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 25)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 26)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 27)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); +} + +static void CorkscrewRCTrackLeftBanked25DegUpToLeftBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 28)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 29)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 30)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 31)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::FlatTo25Deg); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); +} + +static void CorkscrewRCTrackRightBanked25DegUpToRightBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 32)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 33)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 34)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 35)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::FlatTo25Deg); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); +} + +static void CorkscrewRCTrackLeftBankedFlatToLeftBanked25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightBanked25DegUpToRightBankedFlat( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightBankedFlatToRightBanked25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftBanked25DegUpToLeftBankedFlat( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftBanked25DegDownToLeftBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightBankedFlatToRightBanked25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightBanked25DegDownToRightBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftBankedFlatToLeftBanked25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack25DegUpLeftBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 36)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 37)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 38)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 39)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); +} + +static void CorkscrewRCTrack25DegUpRightBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 40)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 41)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 42)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 43)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); +} + +static void CorkscrewRCTrack25DegDownLeftBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack25DegUpRightBanked(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack25DegDownRightBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack25DegUpLeftBanked(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackFlatToLeftBanked25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 44)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 45)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 46)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 47)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 48)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); +} + +static void CorkscrewRCTrackFlatToRightBanked25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 49)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 50)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 51)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 52)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 53)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); +} + +static void CorkscrewRCTrackLeftBanked25DegUpToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 54)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 55)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 56)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 57)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 58)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::FlatTo25Deg); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); +} + +static void CorkscrewRCTrackRightBanked25DegUpToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 59)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 60)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 61)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 62)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 63)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::FlatTo25Deg); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); +} + +static void CorkscrewRCTrackFlatToLeftBanked25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightBanked25DegUpToFlat( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackFlatToRightBanked25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftBanked25DegUpToFlat( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftBanked25DegDownToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackFlatToRightBanked25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightBanked25DegDownToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackFlatToLeftBanked25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftBankedQuarterTurn3Tile25DegUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 0)), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 2)), + { 0, 6, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 4)), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 6)), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 16)), + { 16, 16, height }, { 16, 16, 3 }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 1)), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 3)), + { 6, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 5)), + { 6, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 7)), + { 6, 0, height }, { 20, 32, 3 }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + case 3: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackRightBankedQuarterTurn3Tile25DegUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 8)), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 10)), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 12)), + { 0, 6, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 14)), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 17)), + { 16, 16, height }, { 16, 16, 3 }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 9)), + { 6, 0, height }, { 20, 32, 3 }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 11)), + { 6, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 13)), + { 6, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 10, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 15)), + { 6, 0, height }, { 20, 32, 3 }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + break; + } + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + case 1: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackLeftBankedQuarterTurn3Tile25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + CorkscrewRCTrackRightBankedQuarterTurn3Tile25DegUp( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightBankedQuarterTurn3Tile25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + CorkscrewRCTrackLeftBankedQuarterTurn3Tile25DegUp( + session, ride, trackSequence, (direction - 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftBankedQuarterTurn525DegUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 5)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 10)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 15)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 1)), + { 0, 0, height }, { 32, 16, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 6)), + { 0, 0, height }, { { 30, 30, height }, { 1, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 11)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 16)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 2)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 7)), + { 0, 0, height }, { { 30, 30, height }, { 1, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 12)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 17)), + { 0, 0, height }, { 16, 16, 3 }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 4: + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 3)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 8)), + { 0, 0, height }, { { 30, 30, height }, { 1, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 13)), + { 0, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 18)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 4)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 9)), + { 0, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 14)), + { 0, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 19)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + case 3: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackRightBankedQuarterTurn525DegUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 20)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 25)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 30)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 35)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 21)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 26)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 31)), + { 0, 0, height }, { { 30, 30, height }, { 1, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 36)), + { 0, 0, height }, { 32, 16, 3 }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 22)), + { 0, 0, height }, { 16, 16, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 27)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 32)), + { 0, 0, height }, { { 30, 30, height }, { 1, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 37)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 4: + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 23)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 28)), + { 0, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 33)), + { 0, 0, height }, { { 30, 30, height }, { 1, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 38)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 24)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 29)), + { 0, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 34)), + { 0, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 39)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + case 1: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackLeftBankedQuarterTurn525DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + CorkscrewRCTrackRightBankedQuarterTurn525DegUp( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightBankedQuarterTurn525DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + CorkscrewRCTrackLeftBankedQuarterTurn525DegUp( + session, ride, trackSequence, (direction - 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftEighthToDiagUp25( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 4)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 8)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 12)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 1)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 5)), + { 0, 0, height }, { { 0, 0, height }, { 34, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 9)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 13)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 2)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 6)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 10)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 14)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 3)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 12, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 7)), + { 0, 0, height }, { { 0, 16, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 5, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 11)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 3, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 15)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 3, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackRightEighthToDiagUp25( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 20)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 24)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 28)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 17)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 21)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 25)), + { 0, 0, height }, { { 0, 0, height }, { 34, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 29)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 18)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 22)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 26)), + { 0, 0, height }, { { 4, 4, height }, { 28, 28, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 30)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 19)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 3, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 23)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 3, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 27)), + { 0, 0, height }, { { 0, 16, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 5, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 31)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 10, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackLeftEighthToOrthogonalUp25( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 32)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 7, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 36)), + { 0, 0, height }, { { 16, 16, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 5, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 40)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 5, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 44)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 33)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 37)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 41)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 45)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 34)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 38)), + { 0, 0, height }, { { 0, 0, height }, { 34, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 42)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 46)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 35)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 39)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 43)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 10 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 47)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 5, height, session.SupportColours); + + if (direction == 1 || direction == 2) + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackRightEighthToOrthogonalUp25( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 48)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 5, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 52)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 5, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 56)), + { 0, 0, height }, { { 16, 0, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 7, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 60)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 49)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 53)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 57)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 61)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 50)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 54)), + { 0, 0, height }, { { 0, 0, height }, { 16, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 58)), + { 0, 0, height }, { { 0, 0, height }, { 16, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 62)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 51)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 10 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 55)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 59)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 63)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 5, height, session.SupportColours); + if (direction == 0 || direction == 1) + { + PaintUtilPushTunnelRotated(session, direction + 1, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags(PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomRightSide), direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackLeftEighthToDiagDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + uint8_t map[5] = { 4, 3, 1, 2, 0 }; + trackSequence = map[trackSequence]; + CorkscrewRCTrackRightEighthToOrthogonalUp25( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightEighthToDiagDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + uint8_t map[5] = { 4, 3, 1, 2, 0 }; + trackSequence = map[trackSequence]; + CorkscrewRCTrackLeftEighthToOrthogonalUp25( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftEighthToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + CorkscrewRCTrackRightEighthToDiagUp25(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightEighthToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + CorkscrewRCTrackLeftEighthToDiagUp25(session, ride, trackSequence, (direction + 3) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagUp25ToLeftBankedUp25( + 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_GENTLE_LARGE_CURVE_BANKED + 4)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 0)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 1)), + { -16, -16, height }, { { -16, -16, height + 48 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 3)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 5, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 2)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 10, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 10, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 10, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackDiagUp25ToRightBankedUp25( + 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_GENTLE_LARGE_CURVE_BANKED + 9)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 5)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 7)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 8)), + { -16, -16, height }, { { -16, -16, height + 48 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 10, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 6)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 10, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 5, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 10, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackDiagLeftBankedUp25ToUp25( + 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_GENTLE_LARGE_CURVE_BANKED + 14)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 10)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 11)), + { -16, -16, height }, { { -16, -16, height + 48 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 13)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 5, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 12)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 9, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 9, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 9, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagRightBankedUp25ToUp25( + 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_GENTLE_LARGE_CURVE_BANKED + 19)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 15)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 17)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 18)), + { -16, -16, height }, { { -16, -16, height + 48 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 9, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 16)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 9, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 5, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 9, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagDown25ToLeftBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagRightBankedUp25ToUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagDown25ToRightBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagLeftBankedUp25ToUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagLeftBankedDown25ToDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagUp25ToRightBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagRightBankedDown25ToDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagUp25ToLeftBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagLeftBankedFlatToLeftBankedUp25( + 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_GENTLE_LARGE_CURVE_BANKED + 23)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 20)), + { -16, -16, height }, { { -16, -16, height + 34 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, 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_GENTLE_LARGE_CURVE_BANKED + 22)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 21)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackDiagRightBankedFlatToRightBankedUp25( + 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_GENTLE_LARGE_CURVE_BANKED + 27)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 24)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, 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_GENTLE_LARGE_CURVE_BANKED + 26)), + { -16, -16, height }, { { -16, -16, height + 34 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 25)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackDiagLeftBankedUp25ToLeftBankedFlat( + 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_GENTLE_LARGE_CURVE_BANKED + 31)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 28)), + { -16, -16, height }, { { -16, -16, height + 32 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 30)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 29)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 8, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 8, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagRightBankedUp25ToRightBankedFlat( + 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_GENTLE_LARGE_CURVE_BANKED + 35)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 32)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 34)), + { -16, -16, height }, { { -16, -16, height + 32 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 33)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 8, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagLeftBankedFlatToLeftBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagRightBankedUp25ToRightBankedFlat( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagRightBankedFlatToRightBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagLeftBankedUp25ToLeftBankedFlat( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagLeftBankedDown25ToLeftBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagRightBankedFlatToRightBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagRightBankedDown25ToRightBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagLeftBankedFlatToLeftBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagUp25LeftBanked( + 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_GENTLE_LARGE_CURVE_BANKED + 39)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 36)), + { -16, -16, height }, { { -16, -16, height + 42 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 38)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 6, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 37)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 11, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 11, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 11, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagUp25RightBanked( + 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_GENTLE_LARGE_CURVE_BANKED + 43)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 40)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 42)), + { -16, -16, height }, { { -16, -16, height + 42 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 11, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 41)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 11, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 6, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 11, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagDown25LeftBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagUp25RightBanked( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagDown25RightBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagUp25LeftBanked( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagFlatToLeftBankedUp25( + 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_GENTLE_LARGE_CURVE_BANKED + 48)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 44)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 45)), + { -16, -16, height }, { { -16, -16, height + 34 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, 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_GENTLE_LARGE_CURVE_BANKED + 47)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 46)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackDiagFlatToRightBankedUp25( + 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_GENTLE_LARGE_CURVE_BANKED + 53)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 49)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, 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_GENTLE_LARGE_CURVE_BANKED + 51)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 52)), + { -16, -16, height }, { { -16, -16, height + 34 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 50)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackDiagLeftBankedUp25ToFlat( + 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_GENTLE_LARGE_CURVE_BANKED + 58)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 54)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 55)), + { -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 57)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 56)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 6, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 6, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 6, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagRightBankedUp25ToFlat( + 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_GENTLE_LARGE_CURVE_BANKED + 63)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 59)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 61)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 62)), + { -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 6, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 60)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 6, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 6, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagFlatToLeftBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagRightBankedUp25ToFlat( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagFlatToRightBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagLeftBankedUp25ToFlat( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagLeftBankedDown25ToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagFlatToRightBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagRightBankedDown25ToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagFlatToLeftBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftEighthBankToDiagUp25( + 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 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 64)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 9, height - 4, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 68)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 72)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 9, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 76)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 12, height, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 65)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 69)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 73)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 77)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 66)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 70)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 40, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 74)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 78)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 67)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 7, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 71)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 6, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 75)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 7, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 79)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 8, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackRightEighthBankToDiagUp25( + 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 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 80)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 12, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 84)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 9, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 88)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 92)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 9, height - 4, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 81)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 85)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 89)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 93)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 82)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 86)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 90)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 40, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 94)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 83)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 87)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 7, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 91)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 6, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 95)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 7, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackLeftEighthBankToOrthogonalUp25( + 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 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 96)), + { 0, 0, height }, { { 0, 0, height + 40 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 7, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 100)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 8, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 104)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 9, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 108)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 97)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 101)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 105)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 109)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 98)), + { 0, 0, height }, { { 0, 31, height + 32 }, { 32, 1, 32 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 102)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 106)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 10 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 110)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 99)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 103)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 107)), + { 0, 0, height }, { { 0, 0, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 111)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 11, height, session.SupportColours); + break; + } + if (direction == 1 || direction == 2) + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackRightEighthBankToOrthogonalUp25( + 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 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 112)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 9, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 116)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 7, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 120)), + { 0, 0, height }, { { 0, 0, height + 40 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 7, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 124)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 3, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 113)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 117)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 121)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 125)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 114)), + { 0, 0, height }, { { 0, 0, height }, { 16, 32, 10 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 118)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 32 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 122)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 32 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 126)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 115)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 119)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 123)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 127)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 11, height, session.SupportColours); + break; + } + if (direction == 0 || direction == 1) + { + PaintUtilPushTunnelRotated(session, direction + 1, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags(PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomRightSide), direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackLeftEighthBankToDiagDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + uint8_t map[5] = { 4, 3, 1, 2, 0 }; + trackSequence = map[trackSequence]; + CorkscrewRCTrackRightEighthBankToOrthogonalUp25( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightEighthBankToDiagDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + uint8_t map[5] = { 4, 3, 1, 2, 0 }; + trackSequence = map[trackSequence]; + CorkscrewRCTrackLeftEighthBankToOrthogonalUp25( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftEighthBankToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + CorkscrewRCTrackRightEighthBankToDiagUp25( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightEighthBankToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + CorkscrewRCTrackLeftEighthBankToDiagUp25( + session, ride, trackSequence, (direction + 3) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftBankToLeftQuarterTurn325DegUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 0), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 2), + { 0, 6, height }, { 32, 20, 3 }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 3), + { 0, 6, height }, { { 0, 27, height }, { 32, 1, 26 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 5), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 7), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 18), + { 16, 16, height }, { 16, 16, 3 }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 1), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 2, height - 6, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 4), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 20), + { 6, 0, height }, { { 0, 6, height + 32 }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height - 6, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 6), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height - 6, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 8), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 5, height - 6, session.SupportColours); + break; + } + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + case 3: + PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + } +} + +static void CorkscrewRCTrackRightBankToRightQuarterTurn325DegUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 9), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 11), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 13), + { 0, 6, height }, { 32, 20, 3 }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 14), + { 0, 6, height }, { { 0, 27, height }, { 32, 1, 26 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 16), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 19), + { 16, 16, height }, { 16, 16, 3 }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 10), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height - 6, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 12), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height - 6, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 15), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 21), + { 6, 0, height }, { { 0, 6, height + 32 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height - 6, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 17), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height - 6, session.SupportColours); + break; + } + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + case 1: + PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + } +} + +static void CorkscrewRCTrackLeftQuarterTurn325DegDownToLeftBank( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 12), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height - 6, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 15), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 21), + { 0, 6, height }, { { 0, 6, height + 32 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height - 6, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 17), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height - 6, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 10), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height - 6, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 19), + { 16, 16, height }, { 16, 16, 3 }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 11), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 13), + { 6, 0, height }, { 20, 32, 3 }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 14), + { 6, 0, height }, { { 27, 0, height }, { 1, 32, 26 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 16), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 9), + { 6, 0, height }, { 20, 32, 3 }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::Flat); + break; + case 3: + PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + } +} + +static void CorkscrewRCTrackRightQuarterTurn325DegDownToRightBank( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 8), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 5, height - 6, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 1), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height - 6, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 4), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 20), + { 0, 6, height }, { { 0, 6, height + 32 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height - 6, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 6), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height - 6, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 18), + { 16, 16, height }, { 16, 16, 3 }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 7), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 0), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 2), + { 6, 0, height }, { 20, 32, 3 }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 3), + { 6, 0, height }, { { 27, 0, height }, { 1, 32, 26 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 5), + { 6, 0, height }, { 20, 32, 3 }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::Flat); + break; + case 1: + PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + } +} + +static void CorkscrewRCTrackLeftLargeCorkscrewUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 0), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 5), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 10), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 15), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + } + + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 2, height, session.SupportColours); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 1), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 34, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 6), + { 0, 0, height }, { { 2, 2, height + 40 }, { 28, 28, 1 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 22, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 11), + { 0, 0, height }, { { 0, 6, height }, { 20, 20, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 24, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 16), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 17, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 2), + { 0, 0, height }, { { 0, 31, height }, { 48, 1, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 7), + { 0, 0, height }, { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 17), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 4: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomLeftSide, PaintSegment::bottomCorner, + PaintSegment::topLeftSide, PaintSegment::centre, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 3), + { 0, 0, height }, { { 2, 2, height + 50 }, { 28, 28, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 56, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 8), + { 0, 0, height }, { { 2, 2, height + 50 }, { 28, 28, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 56, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 13), + { 0, 0, height }, { { 0, 0, height + 50 }, { 26, 32, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 56, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 18), + { 0, 0, height }, { { 0, 0, height }, { 32, 32, 1 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 40), + { 0, 0, height }, { { 0, 0, height + 64 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 56, session.SupportColours); + break; + } + + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 4), + { 0, 0, height }, { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 9), + { 0, 0, height }, { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 14), + { 0, 0, height }, { { 2, 2, height + 40 }, { 26, 28, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 19), + { 0, 0, height }, { { 2, 2, height + 44 }, { 26, 28, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomLeftSide, PaintSegment::bottomCorner, + PaintSegment::topLeftSide, PaintSegment::centre, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 3: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackRightLargeCorkscrewUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 20), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 25), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 30), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 35), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + } + + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 2, height, session.SupportColours); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomRightSide, PaintSegment::centre, PaintSegment::rightCorner, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 21), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 16, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 26), + { 0, 0, height }, { { 0, 6, height }, { 20, 20, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 24, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 31), + { 0, 0, height }, { { 0, 29, height }, { 26, 1, 32 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 22, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 36), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 34, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, + PaintSegment::bottomRightSide, PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 22), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 32), + { 0, 0, height }, { { 2, 2, height + 48 }, { 28, 28, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 37), + { 0, 0, height }, { { 0, 31, height }, { 48, 1, 64 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 4: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomLeftSide, PaintSegment::bottomCorner, + PaintSegment::topLeftSide, PaintSegment::centre, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 23), + { 0, 0, height }, { { 0, 0, height }, { 32, 32, 1 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 41), + { 0, 0, height }, { { 0, 0, height + 64 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 56, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 28), + { 0, 0, height }, { { 2, 2, height + 50 }, { 24, 28, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 58, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 33), + { 0, 0, height }, { { 2, 2, height + 50 }, { 28, 28, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 56, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 38), + { 0, 0, height }, { { 2, 2, height + 50 }, { 28, 28, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 56, session.SupportColours); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 24), + { 0, 0, height }, { { 2, 2, height + 44 }, { 26, 28, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 29), + { 0, 0, height }, { { 2, 2, height + 40 }, { 26, 28, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 34), + { 0, 0, height }, { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 39), + { 0, 0, height }, { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomLeftSide, PaintSegment::bottomCorner, + PaintSegment::topLeftSide, PaintSegment::centre, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 1: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackLeftLargeCorkscrewDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightLargeCorkscrewUp( + session, ride, 5 - trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightLargeCorkscrewDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftLargeCorkscrewUp( + session, ride, 5 - trackSequence, (direction - 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack90DegToInvertedFlatQuarterLoopUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 0), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 3), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 6), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 9), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 31 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags(PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomRightSide), direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 1), + { 0, 0, height }, { { -8, 6, height }, { 2, 20, 31 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 12), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 20, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 4), + { 0, 0, height }, { { 24, 6, height + 8 }, { 3, 20, 63 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 7), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 63 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 10), + { 0, 0, height }, { { -8, 6, height }, { 2, 20, 31 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 13), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 20, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags(PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomRightSide), direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 2), + { 0, 0, height }, { { 0, 6, height + 24 }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 5), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 8), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 11), + { 0, 0, height }, { { 0, 6, height + 24 }, { 32, 20, 3 } }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 16, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags(PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomRightSide), direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackInvertedFlatTo90DegQuarterLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack90DegToInvertedFlatQuarterLoopUp( + session, ride, 2 - trackSequence, direction, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftMediumHalfLoopUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 0), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 5), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 41), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 10), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 15), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 1), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 6), + { 0, 0, height }, { { 0, 31, height }, { 0, 32, 64 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 42), + { 0, 0, height }, { { 0, 0, height + 64 }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 11), + { 0, 0, height }, { { 32, 32, height + 60 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 16), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::topCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 2), + { 0, 0, height }, { { 0, 0, height + 2 }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 14, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 7), + { 0, 0, height }, { { 29, 0, height }, { 1, 32, 96 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 16, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 12), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 96 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 18, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 17), + { 0, 0, height }, { { 0, 0, height }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 14, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::centre, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 3), + { 0, 0, height }, { { 0, 2, height }, { 32, 1, 160 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 40), + { 0, 0, height }, { { 0, 29, height }, { 32, 1, 160 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 8), + { 0, 0, height }, { { 0, 0, height + 140 }, { 32, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 13), + { 0, 0, height }, { { 29, 0, height }, { 1, 32, 160 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 18), + { 0, 0, height }, { { 0, 0, height }, { 1, 32, 160 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 43), + { 0, 0, height }, { { 0, 0, height + 140 }, { 32, 20, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::centre, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 4), + { 0, 0, height }, { { 0, 2, height + 48 }, { 32, 32, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 9), + { 0, 0, height }, { { 0, 2, height + 48 }, { 32, 32, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 14), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 19), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topRightSide, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 16, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackRightMediumHalfLoopUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 20), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 25), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 30), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 45), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 35), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 21), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 26), + { 0, 0, height }, { { 0, 32, height }, { 40, 0, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 31), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 46), + { 0, 0, height }, { { 0, 0, height + 64 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 36), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topRightSide, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 22), + { 0, 0, height }, { { 0, 0, height }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 14, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 27), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 96 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 18, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 32), + { 0, 0, height }, { { 0, 0, height }, { 32, 32, 96 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 16, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 37), + { 0, 0, height }, { { 0, 0, height + 2 }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 14, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::centre, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 23), + { 0, 0, height }, { { 0, 0, height }, { 1, 32, 160 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 44), + { 0, 0, height }, { { 0, 0, height + 140 }, { 32, 20, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 28), + { 0, 0, height }, { { 29, 0, height }, { 0, 32, 160 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 33), + { 0, 0, height }, { { 0, 0, height + 140 }, { 32, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 38), + { 0, 0, height }, { { 2, 0, height }, { 1, 32, 160 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 47), + { 0, 0, height }, { { 0, 0, height + 140 }, { 32, 20, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 24), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 29), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 34), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 39), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::topCorner), + direction), + 0xFFFF, 0); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 16, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackLeftMediumHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightMediumHalfLoopUp(session, ride, 4 - trackSequence, direction, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightMediumHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftMediumHalfLoopUp(session, ride, 4 - trackSequence, direction, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftLargeHalfLoopUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 0), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 7), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 14), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 21), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 1), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 13, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 8), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 57), + { 0, 0, height }, { { 0, 6, height + 48 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 15), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 22), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 1, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 2), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 9), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 58), + { 0, 0, height }, { { 0, 0, height + 70 }, { 32, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 16), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 59), + { 0, 0, height }, { { 0, 16, height + 76 }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 23), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 3), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 28, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 10), + { 0, 0, height }, { { 0, 0, height + 200 }, { 32, 16, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 26, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 17), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 26, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 24), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 22, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 224); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 4), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 11), + { 0, 0, height }, { { 0, 16, height + 110 }, { 16, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 18), + { 0, 0, height }, { { 0, 0, height + 100 }, { 16, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 25), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 128); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 5), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 56), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 12), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 19), + { 0, 0, height }, { { 0, 0, height + 200 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 26), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 224); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 6), + { 0, 0, height }, { { 0, 16, height + 32 }, { 32, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 13), + { 0, 0, height }, { { 0, 16, height + 32 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 20), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 27), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 16, 0 } }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void CorkscrewRCTrackRightLargeHalfLoopUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 28), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 35), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 42), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 49), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 29), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 1, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 36), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 43), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 9 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 61), + { 0, 0, height }, { { 0, 6, height + 64 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 50), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 13, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 30), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 37), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 60), + { 0, 0, height }, { { 0, 16, height + 76 }, { 32, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 44), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 62), + { 0, 0, height }, { { 0, 0, height + 70 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 51), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 31), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 22, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 38), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 28, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 45), + { 0, 0, height }, { { 0, 0, height + 200 }, { 32, 16, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 28, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 52), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 28, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 224); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 32), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 39), + { 0, 0, height }, { { 0, 0, height + 100 }, { 16, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 46), + { 0, 0, height }, { { 0, 16, height + 110 }, { 16, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 53), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 128); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 33), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 40), + { 0, 0, height }, { { 0, 0, height + 200 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 47), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 54), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 63), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 224); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 34), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 41), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 48), + { 0, 0, height }, { { 0, 16, height + 32 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 55), + { 0, 0, height }, { { 0, 16, height + 32 }, { 32, 16, 0 } }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void CorkscrewRCTrackLeftLargeHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightLargeHalfLoopUp(session, ride, 6 - trackSequence, direction, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightLargeHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftLargeHalfLoopUp(session, ride, 6 - trackSequence, direction, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftBarrelRollUpToDown( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 0), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 1), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 4, height + 1, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 6), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 7), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 4, height + 1, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 12), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 13), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 1, height + 1, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 18), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 19), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 1, height, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 2), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 3), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 8), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 9), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 14), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 15), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 20), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 21), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 4), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 5), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 10), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 11), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 16), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 17), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 22), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 23), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::Tall); + break; + case 2: + PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::Tall); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackRightBarrelRollUpToDown( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 24), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 25), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 1, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 30), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 31), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 1, height + 1, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 36), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 37), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 4, height + 1, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 42), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 43), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 4, height + 1, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 26), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 27), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 32), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 33), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 38), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 39), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 44), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 45), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 28), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 29), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 34), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 35), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 40), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 41), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 46), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 47), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::Tall); + break; + case 2: + PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::Tall); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackLeftBarrelRollDownToUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftBarrelRollUpToDown( + session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightBarrelRollDownToUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightBarrelRollUpToDown( + session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftZeroGRollUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 0), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 1), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 6), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 7), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 12), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 5, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 16), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 11, height, session.SupportColours); + break; + } + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 3), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 9), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 13), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 17), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + 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_ZERO_G_ROLL + 5), + { 0, 0, height }, { { 0, 6, height + 22 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 30, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 11), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 36, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 14), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 15), + { 0, 0, height }, { { 0, 6, height + 48 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 36, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 18), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 19), + { 0, 0, height }, { { 0, 6, height + 48 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 36, session.SupportColours); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void CorkscrewRCTrackRightZeroGRollUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 20), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 11, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 24), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 5, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 28), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 29), + { 0, 0, height }, { { 0, 31, height + 40 }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 34), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 35), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 21), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 25), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 31), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 37), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::rightCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::rightCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 22), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 23), + { 0, 0, height }, { { 0, 6, height + 48 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 36, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 26), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 27), + { 0, 0, height }, { { 0, 6, height + 48 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 36, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 33), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 36, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 39), + { 0, 0, height }, { { 0, 6, height + 22 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 30, session.SupportColours); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void CorkscrewRCTrackLeftZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftZeroGRollUp(session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightZeroGRollUp(session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftLargeZeroGRollUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 0), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 8), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 15), + { 0, 0, height }, { { 1, 6, height }, { 30, 20, 16 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 16), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 40 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 23), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 24, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 1), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 2), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 10), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 17), + { 0, 0, height }, { { -3, 0, height }, { 40, 8, 64 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 18), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 24), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 3), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 4), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 12), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 48 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 19), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 20), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 56 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 25), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 26), + { 0, 0, height }, { { 0, 29, height + 32 }, { 32, 1, 32 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 3: + 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_LARGE_ZERO_G_ROLL + 6), + { 0, 0, height }, { { 0, 26, height }, { 32, 0, 20 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 28, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 14), + { 0, 0, height }, { { 0, 26, height }, { 32, 0, 20 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 28, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 21), + { 0, 0, height }, { { 0, 10, height }, { 32, 0, 28 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 22), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 28 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 30, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 27), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 28), + { 0, 0, height }, { { 0, 29, height }, { 32, 1, 40 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 32, session.SupportColours); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void CorkscrewRCTrackRightLargeZeroGRollUp( + 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 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 29), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 35), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 36), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 44), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 51), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 23, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 30), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 37), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 38), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 46), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 52), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 53), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 31), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 32), + { 0, 0, height }, { { 0, 29, height + 32 }, { 32, 1, 32 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 39), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 40), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 56 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 48), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 48 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 54), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 55), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 33), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 34), + { 0, 0, height }, { { 0, 29, height }, { 32, 1, 40 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 34, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 41), + { 0, 0, height }, { { 0, 10, height }, { 32, 0, 28 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 42), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 28 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 30, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 50), + { 0, 0, height }, { { 0, 26, height }, { 32, 0, 20 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 28, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 57), + { 0, 0, height }, { { 0, 26, height }, { 32, 0, 20 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 28, session.SupportColours); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void CorkscrewRCTrackLeftLargeZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftLargeZeroGRollUp( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightLargeZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightLargeZeroGRollUp( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + TRACK_PAINT_FUNCTION GetTrackPaintFunctionCorkscrewRC(OpenRCT2::TrackElemType trackType) { switch (trackType) @@ -11297,6 +19644,299 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionCorkscrewRC(OpenRCT2::TrackElemType tr return LayDownRCTrackRightFlyerCorkscrewUp; case TrackElemType::FlyerHalfLoopUninvertedDown: return LayDownRCTrackHalfLoopUninvertedDown; + + // Added by OpenRCT2 + + // Small flat to steep + case TrackElemType::FlatToUp60: + return CorkscrewRCTrackFlatTo60DegUp; + case TrackElemType::Up60ToFlat: + return CorkscrewRCTrack60DegUpToFlat; + case TrackElemType::FlatToDown60: + return CorkscrewRCTrackFlatTo60DegDown; + case TrackElemType::Down60ToFlat: + return CorkscrewRCTrack60DegDownToFlat; + case TrackElemType::DiagFlatToUp60: + return CorkscrewRCTrackDiagFlatTo60DegUp; + case TrackElemType::DiagUp60ToFlat: + return CorkscrewRCTrackDiag60DegUpToFlat; + case TrackElemType::DiagFlatToDown60: + return CorkscrewRCTrackDiagFlatTo60DegDown; + case TrackElemType::DiagDown60ToFlat: + return CorkscrewRCTrackDiag60DegDownToFlat; + + // Vertical slopes + case TrackElemType::Up90: + return CorkscrewRCTrack90DegUp; + case TrackElemType::Down90: + return CorkscrewRCTrack90DegDown; + case TrackElemType::Up60ToUp90: + return CorkscrewRCTrack60DegUpTo90DegUp; + case TrackElemType::Down90ToDown60: + return CorkscrewRCTrack90DegDownTo60DegDown; + case TrackElemType::Up90ToUp60: + return CorkscrewRCTrack90DegUpTo60DegUp; + case TrackElemType::Down60ToDown90: + return CorkscrewRCTrack60DegDownTo90DegDown; + + // Vertical turns + case TrackElemType::LeftQuarterTurn1TileUp90: + return CorkscrewRCTrackLeftQuarterTurn190DegUp; + case TrackElemType::RightQuarterTurn1TileUp90: + return CorkscrewRCTrackRightQuarterTurn190DegUp; + case TrackElemType::LeftQuarterTurn1TileDown90: + return CorkscrewRCTrackLeftQuarterTurn190DegDown; + case TrackElemType::RightQuarterTurn1TileDown90: + return CorkscrewRCTrackRightQuarterTurn190DegDown; + + // Banked slope transitions + case TrackElemType::Up25ToLeftBankedUp25: + return CorkscrewRCTrack25DegUpToLeftBanked25DegUp; + case TrackElemType::Up25ToRightBankedUp25: + return CorkscrewRCTrack25DegUpToRightBanked25DegUp; + case TrackElemType::LeftBankedUp25ToUp25: + return CorkscrewRCTrackLeftBanked25DegUpTo25DegUp; + case TrackElemType::RightBankedUp25ToUp25: + return CorkscrewRCTrackRightBanked25DegUpTo25DegUp; + case TrackElemType::Down25ToLeftBankedDown25: + return CorkscrewRCTrack25DegDownToLeftBanked25DegDown; + case TrackElemType::Down25ToRightBankedDown25: + return CorkscrewRCTrack25DegDownToRightBanked25DegDown; + case TrackElemType::LeftBankedDown25ToDown25: + return CorkscrewRCTrackLeftBanked25DegDownTo25DegDown; + case TrackElemType::RightBankedDown25ToDown25: + return CorkscrewRCTrackRightBanked25DegDownTo25DegDown; + case TrackElemType::LeftBankedFlatToLeftBankedUp25: + return CorkscrewRCTrackLeftBankedFlatToLeftBanked25DegUp; + case TrackElemType::RightBankedFlatToRightBankedUp25: + return CorkscrewRCTrackRightBankedFlatToRightBanked25DegUp; + case TrackElemType::LeftBankedUp25ToLeftBankedFlat: + return CorkscrewRCTrackLeftBanked25DegUpToLeftBankedFlat; + case TrackElemType::RightBankedUp25ToRightBankedFlat: + return CorkscrewRCTrackRightBanked25DegUpToRightBankedFlat; + case TrackElemType::LeftBankedFlatToLeftBankedDown25: + return CorkscrewRCTrackLeftBankedFlatToLeftBanked25DegDown; + case TrackElemType::RightBankedFlatToRightBankedDown25: + return CorkscrewRCTrackRightBankedFlatToRightBanked25DegDown; + case TrackElemType::LeftBankedDown25ToLeftBankedFlat: + return CorkscrewRCTrackLeftBanked25DegDownToLeftBankedFlat; + case TrackElemType::RightBankedDown25ToRightBankedFlat: + return CorkscrewRCTrackRightBanked25DegDownToRightBankedFlat; + case TrackElemType::Down25LeftBanked: + return CorkscrewRCTrack25DegDownLeftBanked; + case TrackElemType::Down25RightBanked: + return CorkscrewRCTrack25DegDownRightBanked; + case TrackElemType::FlatToLeftBankedUp25: + return CorkscrewRCTrackFlatToLeftBanked25DegUp; + case TrackElemType::FlatToRightBankedUp25: + return CorkscrewRCTrackFlatToRightBanked25DegUp; + case TrackElemType::LeftBankedUp25ToFlat: + return CorkscrewRCTrackLeftBanked25DegUpToFlat; + case TrackElemType::RightBankedUp25ToFlat: + return CorkscrewRCTrackRightBanked25DegUpToFlat; + case TrackElemType::FlatToLeftBankedDown25: + return CorkscrewRCTrackFlatToLeftBanked25DegDown; + case TrackElemType::FlatToRightBankedDown25: + return CorkscrewRCTrackFlatToRightBanked25DegDown; + case TrackElemType::LeftBankedDown25ToFlat: + return CorkscrewRCTrackLeftBanked25DegDownToFlat; + case TrackElemType::RightBankedDown25ToFlat: + return CorkscrewRCTrackRightBanked25DegDownToFlat; + case TrackElemType::Up25LeftBanked: + return CorkscrewRCTrack25DegUpLeftBanked; + case TrackElemType::Up25RightBanked: + return CorkscrewRCTrack25DegUpRightBanked; + + // Small banked sloped curves + case TrackElemType::LeftBankedQuarterTurn3TileUp25: + return CorkscrewRCTrackLeftBankedQuarterTurn3Tile25DegUp; + case TrackElemType::RightBankedQuarterTurn3TileUp25: + return CorkscrewRCTrackRightBankedQuarterTurn3Tile25DegUp; + case TrackElemType::LeftBankedQuarterTurn3TileDown25: + return CorkscrewRCTrackLeftBankedQuarterTurn3Tile25DegDown; + case TrackElemType::RightBankedQuarterTurn3TileDown25: + return CorkscrewRCTrackRightBankedQuarterTurn3Tile25DegDown; + + // Medium banked sloped curves + case TrackElemType::LeftBankedQuarterTurn5TileUp25: + return CorkscrewRCTrackLeftBankedQuarterTurn525DegUp; + case TrackElemType::RightBankedQuarterTurn5TileUp25: + return CorkscrewRCTrackRightBankedQuarterTurn525DegUp; + case TrackElemType::LeftBankedQuarterTurn5TileDown25: + return CorkscrewRCTrackLeftBankedQuarterTurn525DegDown; + case TrackElemType::RightBankedQuarterTurn5TileDown25: + return CorkscrewRCTrackRightBankedQuarterTurn525DegDown; + + // Large sloped curves + case TrackElemType::LeftEighthToDiagUp25: + return CorkscrewRCTrackLeftEighthToDiagUp25; + case TrackElemType::RightEighthToDiagUp25: + return CorkscrewRCTrackRightEighthToDiagUp25; + case TrackElemType::LeftEighthToDiagDown25: + return CorkscrewRCTrackLeftEighthToDiagDown25; + case TrackElemType::RightEighthToDiagDown25: + return CorkscrewRCTrackRightEighthToDiagDown25; + case TrackElemType::LeftEighthToOrthogonalUp25: + return CorkscrewRCTrackLeftEighthToOrthogonalUp25; + case TrackElemType::RightEighthToOrthogonalUp25: + return CorkscrewRCTrackRightEighthToOrthogonalUp25; + case TrackElemType::LeftEighthToOrthogonalDown25: + return CorkscrewRCTrackLeftEighthToOrthogonalDown25; + case TrackElemType::RightEighthToOrthogonalDown25: + return CorkscrewRCTrackRightEighthToOrthogonalDown25; + + // Large banked sloped curves + case TrackElemType::DiagUp25ToLeftBankedUp25: + return CorkscrewRCTrackDiagUp25ToLeftBankedUp25; + case TrackElemType::DiagUp25ToRightBankedUp25: + return CorkscrewRCTrackDiagUp25ToRightBankedUp25; + case TrackElemType::DiagLeftBankedUp25ToUp25: + return CorkscrewRCTrackDiagLeftBankedUp25ToUp25; + case TrackElemType::DiagRightBankedUp25ToUp25: + return CorkscrewRCTrackDiagRightBankedUp25ToUp25; + case TrackElemType::DiagDown25ToLeftBankedDown25: + return CorkscrewRCTrackDiagDown25ToLeftBankedDown25; + case TrackElemType::DiagDown25ToRightBankedDown25: + return CorkscrewRCTrackDiagDown25ToRightBankedDown25; + case TrackElemType::DiagLeftBankedDown25ToDown25: + return CorkscrewRCTrackDiagLeftBankedDown25ToDown25; + case TrackElemType::DiagRightBankedDown25ToDown25: + return CorkscrewRCTrackDiagRightBankedDown25ToDown25; + case TrackElemType::DiagLeftBankedFlatToLeftBankedUp25: + return CorkscrewRCTrackDiagLeftBankedFlatToLeftBankedUp25; + case TrackElemType::DiagRightBankedFlatToRightBankedUp25: + return CorkscrewRCTrackDiagRightBankedFlatToRightBankedUp25; + case TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat: + return CorkscrewRCTrackDiagLeftBankedUp25ToLeftBankedFlat; + case TrackElemType::DiagRightBankedUp25ToRightBankedFlat: + return CorkscrewRCTrackDiagRightBankedUp25ToRightBankedFlat; + case TrackElemType::DiagLeftBankedFlatToLeftBankedDown25: + return CorkscrewRCTrackDiagLeftBankedFlatToLeftBankedDown25; + case TrackElemType::DiagRightBankedFlatToRightBankedDown25: + return CorkscrewRCTrackDiagRightBankedFlatToRightBankedDown25; + case TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat: + return CorkscrewRCTrackDiagLeftBankedDown25ToLeftBankedFlat; + case TrackElemType::DiagRightBankedDown25ToRightBankedFlat: + return CorkscrewRCTrackDiagRightBankedDown25ToRightBankedFlat; + case TrackElemType::DiagUp25LeftBanked: + return CorkscrewRCTrackDiagUp25LeftBanked; + case TrackElemType::DiagUp25RightBanked: + return CorkscrewRCTrackDiagUp25RightBanked; + case TrackElemType::DiagDown25LeftBanked: + return CorkscrewRCTrackDiagDown25LeftBanked; + case TrackElemType::DiagDown25RightBanked: + return CorkscrewRCTrackDiagDown25RightBanked; + case TrackElemType::DiagFlatToLeftBankedUp25: + return CorkscrewRCTrackDiagFlatToLeftBankedUp25; + case TrackElemType::DiagFlatToRightBankedUp25: + return CorkscrewRCTrackDiagFlatToRightBankedUp25; + case TrackElemType::DiagLeftBankedUp25ToFlat: + return CorkscrewRCTrackDiagLeftBankedUp25ToFlat; + case TrackElemType::DiagRightBankedUp25ToFlat: + return CorkscrewRCTrackDiagRightBankedUp25ToFlat; + case TrackElemType::DiagFlatToLeftBankedDown25: + return CorkscrewRCTrackDiagFlatToLeftBankedDown25; + case TrackElemType::DiagFlatToRightBankedDown25: + return CorkscrewRCTrackDiagFlatToRightBankedDown25; + case TrackElemType::DiagLeftBankedDown25ToFlat: + return CorkscrewRCTrackDiagLeftBankedDown25ToFlat; + case TrackElemType::DiagRightBankedDown25ToFlat: + return CorkscrewRCTrackDiagRightBankedDown25ToFlat; + + case TrackElemType::LeftEighthBankToDiagUp25: + return CorkscrewRCTrackLeftEighthBankToDiagUp25; + case TrackElemType::RightEighthBankToDiagUp25: + return CorkscrewRCTrackRightEighthBankToDiagUp25; + case TrackElemType::LeftEighthBankToDiagDown25: + return CorkscrewRCTrackLeftEighthBankToDiagDown25; + case TrackElemType::RightEighthBankToDiagDown25: + return CorkscrewRCTrackRightEighthBankToDiagDown25; + + case TrackElemType::LeftEighthBankToOrthogonalUp25: + return CorkscrewRCTrackLeftEighthBankToOrthogonalUp25; + case TrackElemType::RightEighthBankToOrthogonalUp25: + return CorkscrewRCTrackRightEighthBankToOrthogonalUp25; + case TrackElemType::LeftEighthBankToOrthogonalDown25: + return CorkscrewRCTrackLeftEighthBankToOrthogonalDown25; + case TrackElemType::RightEighthBankToOrthogonalDown25: + return CorkscrewRCTrackRightEighthBankToOrthogonalDown25; + + // Small banked to unbanked curves + case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25: + return CorkscrewRCTrackLeftBankToLeftQuarterTurn325DegUp; + case TrackElemType::RightBankToRightQuarterTurn3TilesUp25: + return CorkscrewRCTrackRightBankToRightQuarterTurn325DegUp; + case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank: + return CorkscrewRCTrackLeftQuarterTurn325DegDownToLeftBank; + case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank: + return CorkscrewRCTrackRightQuarterTurn325DegDownToRightBank; + + // Large corkscrews + case TrackElemType::LeftLargeCorkscrewUp: + return CorkscrewRCTrackLeftLargeCorkscrewUp; + case TrackElemType::RightLargeCorkscrewUp: + return CorkscrewRCTrackRightLargeCorkscrewUp; + case TrackElemType::LeftLargeCorkscrewDown: + return CorkscrewRCTrackLeftLargeCorkscrewDown; + case TrackElemType::RightLargeCorkscrewDown: + return CorkscrewRCTrackRightLargeCorkscrewDown; + + // Quarter loops + case TrackElemType::Up90ToInvertedFlatQuarterLoop: + return CorkscrewRCTrack90DegToInvertedFlatQuarterLoopUp; + case TrackElemType::InvertedFlatToDown90QuarterLoop: + return CorkscrewRCTrackInvertedFlatTo90DegQuarterLoopDown; + + // Medium half loops + case TrackElemType::LeftMediumHalfLoopUp: + return CorkscrewRCTrackLeftMediumHalfLoopUp; + case TrackElemType::RightMediumHalfLoopUp: + return CorkscrewRCTrackRightMediumHalfLoopUp; + case TrackElemType::LeftMediumHalfLoopDown: + return CorkscrewRCTrackLeftMediumHalfLoopDown; + case TrackElemType::RightMediumHalfLoopDown: + return CorkscrewRCTrackRightMediumHalfLoopDown; + + // Large half loops + case TrackElemType::LeftLargeHalfLoopUp: + return CorkscrewRCTrackLeftLargeHalfLoopUp; + case TrackElemType::RightLargeHalfLoopUp: + return CorkscrewRCTrackRightLargeHalfLoopUp; + case TrackElemType::LeftLargeHalfLoopDown: + return CorkscrewRCTrackLeftLargeHalfLoopDown; + case TrackElemType::RightLargeHalfLoopDown: + return CorkscrewRCTrackRightLargeHalfLoopDown; + + // Barrel rolls + case TrackElemType::LeftBarrelRollUpToDown: + return CorkscrewRCTrackLeftBarrelRollUpToDown; + case TrackElemType::RightBarrelRollUpToDown: + return CorkscrewRCTrackRightBarrelRollUpToDown; + case TrackElemType::LeftBarrelRollDownToUp: + return CorkscrewRCTrackLeftBarrelRollDownToUp; + case TrackElemType::RightBarrelRollDownToUp: + return CorkscrewRCTrackRightBarrelRollDownToUp; + + // Zero g rolls + case TrackElemType::LeftZeroGRollUp: + return CorkscrewRCTrackLeftZeroGRollUp; + case TrackElemType::RightZeroGRollUp: + return CorkscrewRCTrackRightZeroGRollUp; + case TrackElemType::LeftZeroGRollDown: + return CorkscrewRCTrackLeftZeroGRollDown; + case TrackElemType::RightZeroGRollDown: + return CorkscrewRCTrackRightZeroGRollDown; + + // Large zero g rolls + case TrackElemType::LeftLargeZeroGRollUp: + return CorkscrewRCTrackLeftLargeZeroGRollUp; + case TrackElemType::RightLargeZeroGRollUp: + return CorkscrewRCTrackRightLargeZeroGRollUp; + case TrackElemType::LeftLargeZeroGRollDown: + return CorkscrewRCTrackLeftLargeZeroGRollDown; + case TrackElemType::RightLargeZeroGRollDown: + return CorkscrewRCTrackRightLargeZeroGRollDown; + default: return nullptr; } diff --git a/src/openrct2/park/Legacy.cpp b/src/openrct2/park/Legacy.cpp index 3b99aa1d06..fa05855f0f 100644 --- a/src/openrct2/park/Legacy.cpp +++ b/src/openrct2/park/Legacy.cpp @@ -2423,6 +2423,146 @@ bool TrackTypeMustBeMadeInvisible(ride_type_t rideType, OpenRCT2::TrackElemType break; } } + else if ( + (rideType == RIDE_TYPE_CORKSCREW_ROLLER_COASTER || rideType == RIDE_TYPE_HYPERCOASTER + || rideType == RIDE_TYPE_LAY_DOWN_ROLLER_COASTER) + && parkFileVersion < kExtendedCorkscrewCoasterVersion) + { + switch (trackType) + { + case TrackElemType::FlatToUp60: + case TrackElemType::Up60ToFlat: + case TrackElemType::FlatToDown60: + case TrackElemType::Down60ToFlat: + case TrackElemType::DiagFlatToUp60: + case TrackElemType::DiagUp60ToFlat: + case TrackElemType::DiagFlatToDown60: + case TrackElemType::DiagDown60ToFlat: + case TrackElemType::Up90: + case TrackElemType::Down90: + case TrackElemType::Up60ToUp90: + case TrackElemType::Down90ToDown60: + case TrackElemType::Up90ToUp60: + case TrackElemType::Down60ToDown90: + case TrackElemType::LeftQuarterTurn1TileUp90: + case TrackElemType::RightQuarterTurn1TileUp90: + case TrackElemType::LeftQuarterTurn1TileDown90: + case TrackElemType::RightQuarterTurn1TileDown90: + case TrackElemType::Up25ToLeftBankedUp25: + case TrackElemType::Up25ToRightBankedUp25: + case TrackElemType::LeftBankedUp25ToUp25: + case TrackElemType::RightBankedUp25ToUp25: + case TrackElemType::Down25ToLeftBankedDown25: + case TrackElemType::Down25ToRightBankedDown25: + case TrackElemType::LeftBankedDown25ToDown25: + case TrackElemType::RightBankedDown25ToDown25: + case TrackElemType::LeftBankedFlatToLeftBankedUp25: + case TrackElemType::RightBankedFlatToRightBankedUp25: + case TrackElemType::LeftBankedUp25ToLeftBankedFlat: + case TrackElemType::RightBankedUp25ToRightBankedFlat: + case TrackElemType::LeftBankedFlatToLeftBankedDown25: + case TrackElemType::RightBankedFlatToRightBankedDown25: + case TrackElemType::LeftBankedDown25ToLeftBankedFlat: + case TrackElemType::RightBankedDown25ToRightBankedFlat: + case TrackElemType::Down25LeftBanked: + case TrackElemType::Down25RightBanked: + case TrackElemType::FlatToLeftBankedUp25: + case TrackElemType::FlatToRightBankedUp25: + case TrackElemType::LeftBankedUp25ToFlat: + case TrackElemType::RightBankedUp25ToFlat: + case TrackElemType::FlatToLeftBankedDown25: + case TrackElemType::FlatToRightBankedDown25: + case TrackElemType::LeftBankedDown25ToFlat: + case TrackElemType::RightBankedDown25ToFlat: + case TrackElemType::Up25LeftBanked: + case TrackElemType::Up25RightBanked: + case TrackElemType::LeftBankedQuarterTurn3TileUp25: + case TrackElemType::RightBankedQuarterTurn3TileUp25: + case TrackElemType::LeftBankedQuarterTurn3TileDown25: + case TrackElemType::RightBankedQuarterTurn3TileDown25: + case TrackElemType::LeftBankedQuarterTurn5TileUp25: + case TrackElemType::RightBankedQuarterTurn5TileUp25: + case TrackElemType::LeftBankedQuarterTurn5TileDown25: + case TrackElemType::RightBankedQuarterTurn5TileDown25: + case TrackElemType::LeftEighthToDiagUp25: + case TrackElemType::RightEighthToDiagUp25: + case TrackElemType::LeftEighthToDiagDown25: + case TrackElemType::RightEighthToDiagDown25: + case TrackElemType::LeftEighthToOrthogonalUp25: + case TrackElemType::RightEighthToOrthogonalUp25: + case TrackElemType::LeftEighthToOrthogonalDown25: + case TrackElemType::RightEighthToOrthogonalDown25: + case TrackElemType::DiagUp25ToLeftBankedUp25: + case TrackElemType::DiagUp25ToRightBankedUp25: + case TrackElemType::DiagLeftBankedUp25ToUp25: + case TrackElemType::DiagRightBankedUp25ToUp25: + case TrackElemType::DiagDown25ToLeftBankedDown25: + case TrackElemType::DiagDown25ToRightBankedDown25: + case TrackElemType::DiagLeftBankedDown25ToDown25: + case TrackElemType::DiagRightBankedDown25ToDown25: + case TrackElemType::DiagLeftBankedFlatToLeftBankedUp25: + case TrackElemType::DiagRightBankedFlatToRightBankedUp25: + case TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat: + case TrackElemType::DiagRightBankedUp25ToRightBankedFlat: + case TrackElemType::DiagLeftBankedFlatToLeftBankedDown25: + case TrackElemType::DiagRightBankedFlatToRightBankedDown25: + case TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat: + case TrackElemType::DiagRightBankedDown25ToRightBankedFlat: + case TrackElemType::DiagUp25LeftBanked: + case TrackElemType::DiagUp25RightBanked: + case TrackElemType::DiagDown25LeftBanked: + case TrackElemType::DiagDown25RightBanked: + case TrackElemType::DiagFlatToLeftBankedUp25: + case TrackElemType::DiagFlatToRightBankedUp25: + case TrackElemType::DiagLeftBankedUp25ToFlat: + case TrackElemType::DiagRightBankedUp25ToFlat: + case TrackElemType::DiagFlatToLeftBankedDown25: + case TrackElemType::DiagFlatToRightBankedDown25: + case TrackElemType::DiagLeftBankedDown25ToFlat: + case TrackElemType::DiagRightBankedDown25ToFlat: + case TrackElemType::LeftEighthBankToDiagUp25: + case TrackElemType::RightEighthBankToDiagUp25: + case TrackElemType::LeftEighthBankToDiagDown25: + case TrackElemType::RightEighthBankToDiagDown25: + case TrackElemType::LeftEighthBankToOrthogonalUp25: + case TrackElemType::RightEighthBankToOrthogonalUp25: + case TrackElemType::LeftEighthBankToOrthogonalDown25: + case TrackElemType::RightEighthBankToOrthogonalDown25: + case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25: + case TrackElemType::RightBankToRightQuarterTurn3TilesUp25: + case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank: + case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank: + case TrackElemType::LeftLargeCorkscrewUp: + case TrackElemType::RightLargeCorkscrewUp: + case TrackElemType::LeftLargeCorkscrewDown: + case TrackElemType::RightLargeCorkscrewDown: + case TrackElemType::Up90ToInvertedFlatQuarterLoop: + case TrackElemType::InvertedFlatToDown90QuarterLoop: + case TrackElemType::LeftMediumHalfLoopUp: + case TrackElemType::RightMediumHalfLoopUp: + case TrackElemType::LeftMediumHalfLoopDown: + case TrackElemType::RightMediumHalfLoopDown: + case TrackElemType::LeftLargeHalfLoopUp: + case TrackElemType::RightLargeHalfLoopUp: + case TrackElemType::LeftLargeHalfLoopDown: + case TrackElemType::RightLargeHalfLoopDown: + case TrackElemType::LeftBarrelRollUpToDown: + case TrackElemType::RightBarrelRollUpToDown: + case TrackElemType::LeftBarrelRollDownToUp: + case TrackElemType::RightBarrelRollDownToUp: + case TrackElemType::LeftZeroGRollUp: + case TrackElemType::RightZeroGRollUp: + case TrackElemType::LeftZeroGRollDown: + case TrackElemType::RightZeroGRollDown: + case TrackElemType::LeftLargeZeroGRollUp: + case TrackElemType::RightLargeZeroGRollUp: + case TrackElemType::LeftLargeZeroGRollDown: + case TrackElemType::RightLargeZeroGRollDown: + return true; + default: + break; + } + } return false; } diff --git a/src/openrct2/park/ParkFile.h b/src/openrct2/park/ParkFile.h index d6be3f4944..0dc6c046d0 100644 --- a/src/openrct2/park/ParkFile.h +++ b/src/openrct2/park/ParkFile.h @@ -11,7 +11,7 @@ namespace OpenRCT2 struct GameState_t; // Current version that is saved. - constexpr uint32_t PARK_FILE_CURRENT_VERSION = 41; + constexpr uint32_t PARK_FILE_CURRENT_VERSION = 42; // The minimum version that is forwards compatible with the current version. constexpr uint32_t PARK_FILE_MIN_VERSION = 40; @@ -32,6 +32,7 @@ namespace OpenRCT2 constexpr uint16_t k16BitParkHistoryVersion = 38; constexpr uint16_t kPeepNamesObjectsVersion = 39; constexpr uint16_t kWoodenRollerCoasterMediumLargeHalfLoopsVersion = 41; + constexpr uint16_t kExtendedCorkscrewCoasterVersion = 42; } // namespace OpenRCT2 class ParkFileExporter diff --git a/src/openrct2/ride/rtd/coaster/CorkscrewRollerCoaster.h b/src/openrct2/ride/rtd/coaster/CorkscrewRollerCoaster.h index eef28026ff..dfc385ca61 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({ .Drawer = GetTrackPaintFunctionCorkscrewRC, .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}, - .extraTrackGroups = {TrackGroup::twist}, + .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}, }), .InvertedTrackPaintFunctions = {}, .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt | diff --git a/src/openrct2/ride/rtd/coaster/Hypercoaster.h b/src/openrct2/ride/rtd/coaster/Hypercoaster.h index 05ddd730fd..6e900c5df1 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({ .Drawer = GetTrackPaintFunctionCorkscrewRC, .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}, + .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}, .extraTrackGroups = {TrackGroup::verticalLoop, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::booster}, }), .InvertedTrackPaintFunctions = {}, diff --git a/src/openrct2/ride/rtd/coaster/LayDownRollerCoaster.h b/src/openrct2/ride/rtd/coaster/LayDownRollerCoaster.h index 0a6bc07583..69ad588bcd 100644 --- a/src/openrct2/ride/rtd/coaster/LayDownRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/LayDownRollerCoaster.h @@ -23,7 +23,7 @@ constexpr RideTypeDescriptor LayDownRollerCoasterRTD = { .Drawer = GetTrackPaintFunctionCorkscrewRC, .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 }, + .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 }, .extraTrackGroups = { TrackGroup::flyingHalfLoopUninvertedDown, TrackGroup::booster }, } ), diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index 16c4b0b237..e827e024d1 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1344,7 +1344,23 @@ enum : ImageIndex SPR_G2_CORKSCREW_RC_BEGIN = SPR_G2_SLC_RC_END, SPR_G2_CORKSCREW_DIAG_BRAKES = SPR_G2_CORKSCREW_RC_BEGIN, - SPR_G2_CORKSCREW_RC_END = SPR_G2_CORKSCREW_DIAG_BRAKES + 6, + SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP = SPR_G2_CORKSCREW_DIAG_BRAKES + 6, + SPR_G2_CORKSCREW_TRACK_VERTICAL = SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 20, + SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST = SPR_G2_CORKSCREW_TRACK_VERTICAL + 8, + SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION = SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 12, + SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED = SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 64, + SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED = SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 18, + SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE = SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 40, + SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED = SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 64, + SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION = SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 128, + SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW = SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 22, + SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP = SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 42, + SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP = SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 14, + SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP = SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 48, + 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_LIM_LAUNCHED_TRACK_BEGIN = SPR_G2_CORKSCREW_RC_END, SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL = SPR_G2_LIM_LAUNCHED_TRACK_BEGIN + 0,