From 16d5fd74a2f4269e3281533ba51aecdf1beadc16 Mon Sep 17 00:00:00 2001 From: mix Date: Thu, 24 Oct 2024 03:52:34 +0100 Subject: [PATCH] Add large bank slope turns to Twister, Hyper Twister and Vertical RC --- resources/g2/sprites.json | 768 ++++++ .../flat_to_gentle_up_left_bank_diag_1_1.png | Bin 0 -> 1003 bytes .../flat_to_gentle_up_left_bank_diag_1_2.png | Bin 0 -> 1091 bytes .../bm/flat_to_gentle_up_left_bank_diag_2.png | Bin 0 -> 1153 bytes .../bm/flat_to_gentle_up_left_bank_diag_3.png | Bin 0 -> 1302 bytes .../bm/flat_to_gentle_up_left_bank_diag_4.png | Bin 0 -> 1273 bytes .../flat_to_gentle_up_right_bank_diag_1.png | Bin 0 -> 1241 bytes .../flat_to_gentle_up_right_bank_diag_2.png | Bin 0 -> 1137 bytes .../flat_to_gentle_up_right_bank_diag_3_1.png | Bin 0 -> 1003 bytes .../flat_to_gentle_up_right_bank_diag_3_2.png | Bin 0 -> 1127 bytes .../flat_to_gentle_up_right_bank_diag_4.png | Bin 0 -> 1292 bytes .../track/bm/gentle_up_left_bank_diag_1.png | Bin 0 -> 1103 bytes .../track/bm/gentle_up_left_bank_diag_2.png | Bin 0 -> 1045 bytes .../track/bm/gentle_up_left_bank_diag_3.png | Bin 0 -> 1320 bytes .../track/bm/gentle_up_left_bank_diag_4.png | Bin 0 -> 1098 bytes .../gentle_up_left_bank_to_flat_diag_1_1.png | Bin 0 -> 1003 bytes .../gentle_up_left_bank_to_flat_diag_1_2.png | Bin 0 -> 1075 bytes .../bm/gentle_up_left_bank_to_flat_diag_2.png | Bin 0 -> 1166 bytes .../bm/gentle_up_left_bank_to_flat_diag_3.png | Bin 0 -> 1280 bytes .../bm/gentle_up_left_bank_to_flat_diag_4.png | Bin 0 -> 1247 bytes ...tle_up_left_bank_to_gentle_up_diag_1_1.png | Bin 0 -> 1021 bytes ...tle_up_left_bank_to_gentle_up_diag_1_2.png | Bin 0 -> 1064 bytes ...entle_up_left_bank_to_gentle_up_diag_2.png | Bin 0 -> 1085 bytes ...entle_up_left_bank_to_gentle_up_diag_3.png | Bin 0 -> 1384 bytes ...entle_up_left_bank_to_gentle_up_diag_4.png | Bin 0 -> 1292 bytes ...entle_up_left_bank_to_left_bank_diag_1.png | Bin 0 -> 1122 bytes ...entle_up_left_bank_to_left_bank_diag_2.png | Bin 0 -> 1108 bytes ...entle_up_left_bank_to_left_bank_diag_3.png | Bin 0 -> 1332 bytes ...entle_up_left_bank_to_left_bank_diag_4.png | Bin 0 -> 1097 bytes .../track/bm/gentle_up_right_bank_diag_1.png | Bin 0 -> 1219 bytes .../track/bm/gentle_up_right_bank_diag_2.png | Bin 0 -> 1035 bytes .../track/bm/gentle_up_right_bank_diag_3.png | Bin 0 -> 1113 bytes .../track/bm/gentle_up_right_bank_diag_4.png | Bin 0 -> 1181 bytes .../gentle_up_right_bank_to_flat_diag_1.png | Bin 0 -> 1193 bytes .../gentle_up_right_bank_to_flat_diag_2.png | Bin 0 -> 1147 bytes .../gentle_up_right_bank_to_flat_diag_3_1.png | Bin 0 -> 1012 bytes .../gentle_up_right_bank_to_flat_diag_3_2.png | Bin 0 -> 1108 bytes .../gentle_up_right_bank_to_flat_diag_4.png | Bin 0 -> 1287 bytes ...ntle_up_right_bank_to_gentle_up_diag_1.png | Bin 0 -> 1236 bytes ...ntle_up_right_bank_to_gentle_up_diag_2.png | Bin 0 -> 1073 bytes ...le_up_right_bank_to_gentle_up_diag_3_1.png | Bin 0 -> 1041 bytes ...le_up_right_bank_to_gentle_up_diag_3_2.png | Bin 0 -> 1137 bytes ...ntle_up_right_bank_to_gentle_up_diag_4.png | Bin 0 -> 1340 bytes ...tle_up_right_bank_to_right_bank_diag_1.png | Bin 0 -> 1233 bytes ...tle_up_right_bank_to_right_bank_diag_2.png | Bin 0 -> 1065 bytes ...tle_up_right_bank_to_right_bank_diag_3.png | Bin 0 -> 1172 bytes ...tle_up_right_bank_to_right_bank_diag_4.png | Bin 0 -> 1177 bytes ...tle_up_to_gentle_up_left_bank_diag_1_1.png | Bin 0 -> 1016 bytes ...tle_up_to_gentle_up_left_bank_diag_1_2.png | Bin 0 -> 1109 bytes ...entle_up_to_gentle_up_left_bank_diag_2.png | Bin 0 -> 1074 bytes ...entle_up_to_gentle_up_left_bank_diag_3.png | Bin 0 -> 1390 bytes ...entle_up_to_gentle_up_left_bank_diag_4.png | Bin 0 -> 1288 bytes ...ntle_up_to_gentle_up_right_bank_diag_1.png | Bin 0 -> 1265 bytes ...ntle_up_to_gentle_up_right_bank_diag_2.png | Bin 0 -> 1070 bytes ...le_up_to_gentle_up_right_bank_diag_3_1.png | Bin 0 -> 1040 bytes ...le_up_to_gentle_up_right_bank_diag_3_2.png | Bin 0 -> 1174 bytes ...ntle_up_to_gentle_up_right_bank_diag_4.png | Bin 0 -> 1332 bytes ...e_turn_left_bank_to_diag_gentle_up_1_1.png | Bin 0 -> 1167 bytes ...e_turn_left_bank_to_diag_gentle_up_1_2.png | Bin 0 -> 1171 bytes ...e_turn_left_bank_to_diag_gentle_up_1_3.png | Bin 0 -> 983 bytes ...e_turn_left_bank_to_diag_gentle_up_1_4.png | Bin 0 -> 1110 bytes ...e_turn_left_bank_to_diag_gentle_up_2_1.png | Bin 0 -> 1006 bytes ...e_turn_left_bank_to_diag_gentle_up_2_2.png | Bin 0 -> 1051 bytes ...e_turn_left_bank_to_diag_gentle_up_2_3.png | Bin 0 -> 1001 bytes ...e_turn_left_bank_to_diag_gentle_up_2_4.png | Bin 0 -> 1026 bytes ...e_turn_left_bank_to_diag_gentle_up_3_1.png | Bin 0 -> 1046 bytes ...e_turn_left_bank_to_diag_gentle_up_3_2.png | Bin 0 -> 1060 bytes ...e_turn_left_bank_to_diag_gentle_up_3_3.png | Bin 0 -> 981 bytes ...e_turn_left_bank_to_diag_gentle_up_3_4.png | Bin 0 -> 1050 bytes ...e_turn_left_bank_to_diag_gentle_up_4_1.png | Bin 0 -> 1289 bytes ...e_turn_left_bank_to_diag_gentle_up_4_2.png | Bin 0 -> 1278 bytes ...e_turn_left_bank_to_diag_gentle_up_4_3.png | Bin 0 -> 1000 bytes ...e_turn_left_bank_to_diag_gentle_up_4_4.png | Bin 0 -> 1209 bytes ..._left_bank_to_orthogonal_gentle_up_1_1.png | Bin 0 -> 1062 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 -> 5410 bytes ..._left_bank_to_orthogonal_gentle_up_1_4.png | Bin 0 -> 5182 bytes ..._left_bank_to_orthogonal_gentle_up_2_1.png | Bin 0 -> 919 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 -> 1026 bytes ..._left_bank_to_orthogonal_gentle_up_2_4.png | Bin 0 -> 1050 bytes ..._left_bank_to_orthogonal_gentle_up_3_1.png | Bin 0 -> 1226 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 -> 5443 bytes ..._left_bank_to_orthogonal_gentle_up_3_4.png | Bin 0 -> 5378 bytes ..._left_bank_to_orthogonal_gentle_up_4_1.png | Bin 0 -> 1055 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 -> 1238 bytes ..._left_bank_to_orthogonal_gentle_up_4_4.png | Bin 0 -> 1390 bytes ..._turn_right_bank_to_diag_gentle_up_1_1.png | Bin 0 -> 1400 bytes ..._turn_right_bank_to_diag_gentle_up_1_2.png | Bin 0 -> 1274 bytes ..._turn_right_bank_to_diag_gentle_up_1_3.png | Bin 0 -> 973 bytes ..._turn_right_bank_to_diag_gentle_up_1_4.png | Bin 0 -> 1121 bytes ..._turn_right_bank_to_diag_gentle_up_2_1.png | Bin 0 -> 1011 bytes ..._turn_right_bank_to_diag_gentle_up_2_2.png | Bin 0 -> 1031 bytes ..._turn_right_bank_to_diag_gentle_up_2_3.png | Bin 0 -> 980 bytes ..._turn_right_bank_to_diag_gentle_up_2_4.png | Bin 0 -> 1010 bytes ..._turn_right_bank_to_diag_gentle_up_3_1.png | Bin 0 -> 1020 bytes ..._turn_right_bank_to_diag_gentle_up_3_2.png | Bin 0 -> 1073 bytes ..._turn_right_bank_to_diag_gentle_up_3_3.png | Bin 0 -> 1013 bytes ..._turn_right_bank_to_diag_gentle_up_3_4.png | Bin 0 -> 1090 bytes ..._turn_right_bank_to_diag_gentle_up_4_1.png | Bin 0 -> 1137 bytes ..._turn_right_bank_to_diag_gentle_up_4_2.png | Bin 0 -> 1159 bytes ..._turn_right_bank_to_diag_gentle_up_4_3.png | Bin 0 -> 988 bytes ..._turn_right_bank_to_diag_gentle_up_4_4.png | Bin 0 -> 1138 bytes ...right_bank_to_orthogonal_gentle_up_1_1.png | Bin 0 -> 1100 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 -> 5326 bytes ...right_bank_to_orthogonal_gentle_up_1_4.png | Bin 0 -> 5247 bytes ...right_bank_to_orthogonal_gentle_up_2_1.png | Bin 0 -> 919 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 -> 1035 bytes ...right_bank_to_orthogonal_gentle_up_2_4.png | Bin 0 -> 1082 bytes ...right_bank_to_orthogonal_gentle_up_3_1.png | Bin 0 -> 1110 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 -> 5442 bytes ...right_bank_to_orthogonal_gentle_up_3_4.png | Bin 0 -> 5165 bytes ...right_bank_to_orthogonal_gentle_up_4_1.png | Bin 0 -> 1089 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 -> 1346 bytes ...right_bank_to_orthogonal_gentle_up_4_4.png | Bin 0 -> 1528 bytes ...eft_bank_to_gentle_up_left_bank_diag_1.png | Bin 0 -> 1134 bytes ...eft_bank_to_gentle_up_left_bank_diag_2.png | Bin 0 -> 1113 bytes ...eft_bank_to_gentle_up_left_bank_diag_3.png | Bin 0 -> 1293 bytes ...eft_bank_to_gentle_up_left_bank_diag_4.png | Bin 0 -> 1104 bytes ...ht_bank_to_gentle_up_right_bank_diag_1.png | Bin 0 -> 1240 bytes ...ht_bank_to_gentle_up_right_bank_diag_2.png | Bin 0 -> 1054 bytes ...ht_bank_to_gentle_up_right_bank_diag_3.png | Bin 0 -> 1185 bytes ...ht_bank_to_gentle_up_right_bank_diag_4.png | Bin 0 -> 1192 bytes .../track/coaster/TwisterRollerCoaster.cpp | 2302 +++++++++++++++++ src/openrct2/sprites.h | 3 +- 131 files changed, 3072 insertions(+), 1 deletion(-) create mode 100644 resources/g2/track/bm/flat_to_gentle_up_left_bank_diag_1_1.png create mode 100644 resources/g2/track/bm/flat_to_gentle_up_left_bank_diag_1_2.png create mode 100644 resources/g2/track/bm/flat_to_gentle_up_left_bank_diag_2.png create mode 100644 resources/g2/track/bm/flat_to_gentle_up_left_bank_diag_3.png create mode 100644 resources/g2/track/bm/flat_to_gentle_up_left_bank_diag_4.png create mode 100644 resources/g2/track/bm/flat_to_gentle_up_right_bank_diag_1.png create mode 100644 resources/g2/track/bm/flat_to_gentle_up_right_bank_diag_2.png create mode 100644 resources/g2/track/bm/flat_to_gentle_up_right_bank_diag_3_1.png create mode 100644 resources/g2/track/bm/flat_to_gentle_up_right_bank_diag_3_2.png create mode 100644 resources/g2/track/bm/flat_to_gentle_up_right_bank_diag_4.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_diag_1.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_diag_2.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_diag_3.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_diag_4.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_to_flat_diag_1_1.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_to_flat_diag_1_2.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_to_flat_diag_2.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_to_flat_diag_3.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_to_flat_diag_4.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_to_gentle_up_diag_1_1.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_to_gentle_up_diag_1_2.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_to_gentle_up_diag_2.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_to_gentle_up_diag_3.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_to_gentle_up_diag_4.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_to_left_bank_diag_1.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_to_left_bank_diag_2.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_to_left_bank_diag_3.png create mode 100644 resources/g2/track/bm/gentle_up_left_bank_to_left_bank_diag_4.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_diag_1.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_diag_2.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_diag_3.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_diag_4.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_to_flat_diag_1.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_to_flat_diag_2.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_to_flat_diag_3_1.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_to_flat_diag_3_2.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_to_flat_diag_4.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_to_gentle_up_diag_1.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_to_gentle_up_diag_2.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_to_gentle_up_diag_3_1.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_to_gentle_up_diag_3_2.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_to_gentle_up_diag_4.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_to_right_bank_diag_1.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_to_right_bank_diag_2.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_to_right_bank_diag_3.png create mode 100644 resources/g2/track/bm/gentle_up_right_bank_to_right_bank_diag_4.png create mode 100644 resources/g2/track/bm/gentle_up_to_gentle_up_left_bank_diag_1_1.png create mode 100644 resources/g2/track/bm/gentle_up_to_gentle_up_left_bank_diag_1_2.png create mode 100644 resources/g2/track/bm/gentle_up_to_gentle_up_left_bank_diag_2.png create mode 100644 resources/g2/track/bm/gentle_up_to_gentle_up_left_bank_diag_3.png create mode 100644 resources/g2/track/bm/gentle_up_to_gentle_up_left_bank_diag_4.png create mode 100644 resources/g2/track/bm/gentle_up_to_gentle_up_right_bank_diag_1.png create mode 100644 resources/g2/track/bm/gentle_up_to_gentle_up_right_bank_diag_2.png create mode 100644 resources/g2/track/bm/gentle_up_to_gentle_up_right_bank_diag_3_1.png create mode 100644 resources/g2/track/bm/gentle_up_to_gentle_up_right_bank_diag_3_2.png create mode 100644 resources/g2/track/bm/gentle_up_to_gentle_up_right_bank_diag_4.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_1_1.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_1_2.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_1_3.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_1_4.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_2_1.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_2_2.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_2_3.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_2_4.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_3_1.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_3_2.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_3_3.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_3_4.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_4_1.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_4_2.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_4_3.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_4_4.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_1_1.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_1_2.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_1_3.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_1_4.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_2_1.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_2_2.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_2_3.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_2_4.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_1.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_2.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_3.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_4.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_4_1.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_4_2.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_4_3.png create mode 100644 resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_4_4.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_1_1.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_1_2.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_1_3.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_1_4.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_2_1.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_2_2.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_2_3.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_2_4.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_3_1.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_3_2.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_3_3.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_3_4.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_4_1.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_4_2.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_4_3.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_4_4.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_1_1.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_1_2.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_1_3.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_1_4.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_2_1.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_2_2.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_2_3.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_2_4.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_1.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_2.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_3.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_4.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_4_1.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_4_2.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_4_3.png create mode 100644 resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_4_4.png create mode 100644 resources/g2/track/bm/left_bank_to_gentle_up_left_bank_diag_1.png create mode 100644 resources/g2/track/bm/left_bank_to_gentle_up_left_bank_diag_2.png create mode 100644 resources/g2/track/bm/left_bank_to_gentle_up_left_bank_diag_3.png create mode 100644 resources/g2/track/bm/left_bank_to_gentle_up_left_bank_diag_4.png create mode 100644 resources/g2/track/bm/right_bank_to_gentle_up_right_bank_diag_1.png create mode 100644 resources/g2/track/bm/right_bank_to_gentle_up_right_bank_diag_2.png create mode 100644 resources/g2/track/bm/right_bank_to_gentle_up_right_bank_diag_3.png create mode 100644 resources/g2/track/bm/right_bank_to_gentle_up_right_bank_diag_4.png diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 561997ab11..ed71e33a82 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -6919,6 +6919,774 @@ "y": -20, "palette": "keep" }, + { + "path": "track/bm/gentle_up_to_gentle_up_left_bank_diag_1_1.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_to_gentle_up_left_bank_diag_1_2.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_to_gentle_up_left_bank_diag_2.png", + "x": -12, + "y": -9, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_to_gentle_up_left_bank_diag_3.png", + "x": -32, + "y": -20, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_to_gentle_up_left_bank_diag_4.png", + "x": -13, + "y": -29, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_to_gentle_up_right_bank_diag_1.png", + "x": -32, + "y": -20, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_to_gentle_up_right_bank_diag_2.png", + "x": -12, + "y": -9, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_to_gentle_up_right_bank_diag_3_1.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_to_gentle_up_right_bank_diag_3_2.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_to_gentle_up_right_bank_diag_4.png", + "x": -13, + "y": -30, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_to_gentle_up_diag_1_1.png", + "x": -32, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_to_gentle_up_diag_1_2.png", + "x": -32, + "y": -3, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_to_gentle_up_diag_2.png", + "x": -12, + "y": -17, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_to_gentle_up_diag_3.png", + "x": -32, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_to_gentle_up_diag_4.png", + "x": -13, + "y": -25, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_to_gentle_up_diag_1.png", + "x": -32, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_to_gentle_up_diag_2.png", + "x": -12, + "y": -16, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_to_gentle_up_diag_3_1.png", + "x": -32, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_to_gentle_up_diag_3_2.png", + "x": -32, + "y": -3, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_to_gentle_up_diag_4.png", + "x": -13, + "y": -25, + "palette": "keep" + }, + { + "path": "track/bm/left_bank_to_gentle_up_left_bank_diag_1.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/bm/left_bank_to_gentle_up_left_bank_diag_2.png", + "x": -13, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/left_bank_to_gentle_up_left_bank_diag_3.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/left_bank_to_gentle_up_left_bank_diag_4.png", + "x": -9, + "y": -21, + "palette": "keep" + }, + { + "path": "track/bm/right_bank_to_gentle_up_right_bank_diag_1.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/right_bank_to_gentle_up_right_bank_diag_2.png", + "x": -9, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/right_bank_to_gentle_up_right_bank_diag_3.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/bm/right_bank_to_gentle_up_right_bank_diag_4.png", + "x": -13, + "y": -22, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_to_left_bank_diag_1.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_to_left_bank_diag_2.png", + "x": -13, + "y": -17, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_to_left_bank_diag_3.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_to_left_bank_diag_4.png", + "x": -9, + "y": -23, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_to_right_bank_diag_1.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_to_right_bank_diag_2.png", + "x": -9, + "y": -16, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_to_right_bank_diag_3.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_to_right_bank_diag_4.png", + "x": -13, + "y": -23, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_diag_1.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_diag_2.png", + "x": -12, + "y": -17, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_diag_3.png", + "x": -32, + "y": -20, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_diag_4.png", + "x": -9, + "y": -29, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_diag_1.png", + "x": -32, + "y": -20, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_diag_2.png", + "x": -9, + "y": -16, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_diag_3.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_diag_4.png", + "x": -12, + "y": -30, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_gentle_up_left_bank_diag_1_1.png", + "x": -32, + "y": -3, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_gentle_up_left_bank_diag_1_2.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_gentle_up_left_bank_diag_2.png", + "x": -12, + "y": -9, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_gentle_up_left_bank_diag_3.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_gentle_up_left_bank_diag_4.png", + "x": -12, + "y": -21, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_gentle_up_right_bank_diag_1.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_gentle_up_right_bank_diag_2.png", + "x": -12, + "y": -9, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_gentle_up_right_bank_diag_3_1.png", + "x": -32, + "y": -3, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_gentle_up_right_bank_diag_3_2.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/bm/flat_to_gentle_up_right_bank_diag_4.png", + "x": -12, + "y": -22, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_to_flat_diag_1_1.png", + "x": -32, + "y": -7, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_to_flat_diag_1_2.png", + "x": -32, + "y": -7, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_to_flat_diag_2.png", + "x": -12, + "y": -17, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_to_flat_diag_3.png", + "x": -32, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_left_bank_to_flat_diag_4.png", + "x": -12, + "y": -17, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_to_flat_diag_1.png", + "x": -32, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_to_flat_diag_2.png", + "x": -12, + "y": -16, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_to_flat_diag_3_1.png", + "x": -31, + "y": -7, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_to_flat_diag_3_2.png", + "x": -32, + "y": -7, + "palette": "keep" + }, + { + "path": "track/bm/gentle_up_right_bank_to_flat_diag_4.png", + "x": -12, + "y": -17, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_1_1.png", + "x": -20, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_1_2.png", + "x": -28, + "y": -24, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_1_3.png", + "x": 15, + "y": 8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_1_4.png", + "x": -12, + "y": -13, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_2_1.png", + "x": -27, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_2_2.png", + "x": -32, + "y": -14, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_2_3.png", + "x": -24, + "y": 13, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_2_4.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_3_1.png", + "x": -9, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_3_2.png", + "x": 0, + "y": -11, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_3_3.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_3_4.png", + "x": -12, + "y": -24, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_4_1.png", + "x": -26, + "y": -22, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_4_2.png", + "x": -27, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_4_3.png", + "x": 0, + "y": -23, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_diag_gentle_up_4_4.png", + "x": 0, + "y": -20, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_1_1.png", + "x": -26, + "y": -22, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_1_2.png", + "x": -23, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_1_3.png", + "x": -15, + "y": -23, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_1_4.png", + "x": -32, + "y": -20, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_2_1.png", + "x": -20, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_2_2.png", + "x": -33, + "y": -11, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_2_3.png", + "x": 2, + "y": -4, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_2_4.png", + "x": -13, + "y": -23, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_3_1.png", + "x": -9, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_3_2.png", + "x": -8, + "y": -13, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_3_3.png", + "x": 0, + "y": 13, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_3_4.png", + "x": 0, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_4_1.png", + "x": -18, + "y": -14, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_4_2.png", + "x": -8, + "y": -24, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_4_3.png", + "x": -32, + "y": 8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_diag_gentle_up_4_4.png", + "x": -12, + "y": -14, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_1_1.png", + "x": 0, + "y": -10, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_1_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_1_3.png", + "x": -32, + "y": -33, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_1_4.png", + "x": -3, + "y": -20, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_2_1.png", + "x": -12, + "y": -1, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_2_3.png", + "x": -12, + "y": -10, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_2_4.png", + "x": -19, + "y": -7, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_1.png", + "x": -32, + "y": -14, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_3.png", + "x": -26, + "y": -10, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_4.png", + "x": -28, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_4_1.png", + "x": -12, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_4_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_4_3.png", + "x": -25, + "y": -6, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_bank_to_orthogonal_gentle_up_4_4.png", + "x": -26, + "y": -27, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_1_1.png", + "x": 0, + "y": -14, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_1_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_1_3.png", + "x": -32, + "y": -10, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_1_4.png", + "x": -20, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_2_1.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_2_3.png", + "x": -16, + "y": -10, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_2_4.png", + "x": -26, + "y": -7, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_1.png", + "x": -32, + "y": -10, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_3.png", + "x": -29, + "y": -32, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_4.png", + "x": -27, + "y": -20, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_4_1.png", + "x": -12, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_4_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_4_3.png", + "x": -10, + "y": -7, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_bank_to_orthogonal_gentle_up_4_4.png", + "x": -29, + "y": -27, + "palette": "keep" + }, { "path": "track/bm/large_corkscrew_left_1_1.png", "x": -24, diff --git a/resources/g2/track/bm/flat_to_gentle_up_left_bank_diag_1_1.png b/resources/g2/track/bm/flat_to_gentle_up_left_bank_diag_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1330edd67ba3c0b00baa6ddb97a5516e168b5b25 GIT binary patch literal 1003 zcmX9-Z;0D;7=G_>?p8oB8w0uU~bDD^@v=K%Z)nvAv+^ht&k5H^h3pn zMa!r&Y*oThu^-~CU}S|In1jN4Shi#9Bw*22BKEXsVH3lM(hoQInK5|Y_vQKWJ`X(a zdv0|lb@UwHW(4lo6)udOeIbYfy+a&mHNYHE6VdS+&3 zc6JuSu(`Rp`T6;HGMS`lisv~=5)>t)X=<@pG|gJ0;k4Ub&+~(TrhsEX6e5{SESF2< z3skAhnpLshkee;7UXyDf@)*=$eO@6>9j)xzmm zl8aMff|ZGsN~U#MF<7n27j2=^l&p^Ic-aJlQ>i2?k%GcxR9-EKrJ7uGRL9lZUd0{N z2jfnWXKF*c z=(o(VYolR18e<4DO*2`J&r4ESQL6cTqg-y)YOdo9x?SJ*5#TBiCPvqzd=r;CWOl%p zh8b&=Z~8_zXp9beV-z8yQ6?TwC6W?JDJ-iAVo45{6&mHrUcKS9-C)3hEMS@x)#Zed zBdZ0@E=kR5cF)#(t?H=P4uU&~14sjC00w{!um>>20EG~FRM3!ZA+IMApwdv`z)688 z0+Il!aa5*}B_bz>Iwj;;a6fnk1Rl~NmQ&(-o~#(Dx}`LmMc1`QBNv5QcoyhFgfrrz zm5?1m^;pBt*g?KIHaiE-0QGz#2227=QPB*S$Vqe|D;Rpts_0F-;()q26nWM!gA6oha{e1F?zqj7Lms_~~ z;k8HazJKJC!o?f=zrOgvEAQ@FXRqCQtbghE-(Ki{wc9*1M?dxSy~>8a_UY=zv;H$9 z?2W5eZhrR7m;Kv+jNjb9u>M8R;djn|9HD;N>cfw>?B|Y0FX1OPPW^NFz1979cK$PW zyMJCic>VbGo&M1yr@#N<`sszwzkB4^mCb+4$E;0eX7^j+RKELlXcCr}Ru(UxJoC~2 DLw~rS literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/flat_to_gentle_up_left_bank_diag_1_2.png b/resources/g2/track/bm/flat_to_gentle_up_left_bank_diag_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4d9dc99466dbe809e439b72bb26d36b81dbee4fd GIT binary patch literal 1091 zcmX9-Z;0D;7=G{Ha<@7wt6I)}=xzNFF}O_P%(OyI(~&!}UAkq^ZN){6TVX|_MCqWg zs6~sEGq{RX`k}I%lo7Wco?D02bw|K{C|O^n+Js@)`1tt5#Dq5x2v8KsvWzJ5vK&=aC6!9$a)nZGpaQ2}}?K-W82{ z;&Fc>Nv1QwTwW-aq)Jt-+nH9|UcP-8b z5&;PYbP+2mST*Br7CpVX4|Pb?lhB5akQD$B03-}k+-}Y1({bDg2A2e(7K=4C?M|V9 zs#PE52{2w#@CPNFQ;3L0$$C)Dvni9$Rz#yNm7SQM_K{p5C=$F(M-^5{3+aMXC@W=K zvz)BmDYp7mHv=9KyfN@60oO6Q;N?nqw8|)UB-2uju5O_vf$+$*FToL+NU$ig6;-rT zax)R%3TW$}H6A_AzF>FE?JDwTz#Y5Ld`Dj0ospoq&v#^<06%e@wyf_vRcK=+LqaI zEYxe!JdetN96)H0MS39j2)U{m!QJ!UuO5CnHTBq7xL@7% z>DrO0(T!_6XC_1EE|bEo%QLU+Q?^h4dh@&8`h|lpbbs2aKRACYuw~XF&Rse4m3DVZ z_J&t~x u#z$mgrsO)gS`%&8y|3%5$L^llE^T|ts`*a;eRW_SX7|j6&cFWVC;tP^Ea3?N literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/flat_to_gentle_up_left_bank_diag_2.png b/resources/g2/track/bm/flat_to_gentle_up_left_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..863557ffca1ced62b8bde4bdda06cc89271ae735 GIT binary patch literal 1153 zcmX9-e~i;~6n}TSyY4v15=Js{K*b5g6l}23D!bUj-epHBSB^sFnA{8vj5wfTk1S?{ zDT@rUNR^o^Fyho22dOa0MJmqALZ)8G5*wX5V-rVMWT(Uo7hA8g*=#*MJ-xlX zeSLixhS}}*{{DWK$K#=CisM*OAD4EvwaT(-g2?5cq*$&>4x~ z(HNCXc{5odUkDXTO2tgo8yZJqe(!+HyW)Oam57`|PbIig#$PGO)=aW#X>+Zz&kZ3G zqAaK)mY1n*ND06aBNajL0LpIEK z*-D$ue0{FuV8JPZD-3uH2o+;;E?&*<@5Dch`-+wB{O1@HqX04jhEFayxQ0Cga6D5fA?Lsm^7 zK&Bzhg5d*803-sET_{B(O+ZEjRg%ck;J)z;@ErIBEF!t$Q8KOi@|sjECQMUrHciyw za)*JA4X~<9(D0B!$d*@a1@(5cIG3s1GwP_;BAmeBn2&M`ssvoXz$>XC4FBVy0B#NJ3mZkmO?GDGqLu?N2jkXKQ{L3GX0q| z>7#wujy%0^QPlCl-LpTxwSFY9_CM#j6|=uhe)*X{JG5ij6R#U@M}+b5z58AZ%qK4f zDkrZRd#C@{IKJh^Ao1;E)$qRRfNZU>zdyD8!rjkD4qrL8k)I6QBrezcQ`>@4@Z#9N zkM9orc-{WoDSX|U({Fsk-28r*>ye?;`>ol)#O<&DIy)C_e0cjDTVJ_U9Na^39UWoA M$k_1t=U+bjKS4OMEd?R8@j6;l%FLY8y8uIMn* zm1acQa*ZrQg9}zvjLZ^kCn|BcqBa>itk|JLOD!tN%w&_euBq-fjLG-;_vZP&_&m?v z#s?1E7hw}=3Wp|QTDwlMN|yrQC_;^N|xk`g|jUs_s< zVVFQ5C@U)y%VaWwP>`gWrnN?+o@E)k-R^dKgTYWVnn$96A_^rL^Oy^Ahm*=!<1gJCMefO)J$CGOtZcm7e)OPE;1@577gyysr*JV z%+hhYG3jPA0edduo`?rfCMpyu<+zSen$)C)rkzHk$6^UOoe{4$9tx!siCiv+K*E6B zjS+q!8J5s7+>|CA8NDxS3Fo*(KA4?KPM`{0C{&8Y8mWxN6-Jec)lv>aVVO1PbPf4~ zsc1Z(R)ax{v9!=;kaA|+V^s$nbl77W3fPhnPc|9N=N}_AfDV8K-~a*uLjV~JP(c)l ztSk!nP%25ufg!-9hL8qQ6d)Q9BSuaF`6v`JqnHDweDD&y60{`fD9mgW+bp(jY6nbOU*Q4 zHEB7U+2^u_1Fm>9kWEEVKCRShQ3y~95Gt^66zpC}Vz+uS8KuYlN^C4f>h-kQY_wV# zLSa`b+-f2~5)rK;LE%}Q3>l=zCPy9uh14jnEgZjcS;gNkf1tg&frjcwx3?Gi%j;{_ zw$$xCHljb$wP`0ZVkrgb+#aOY4qz48m&N1OL3<+8vnu@S)*dyLNnW zZYus~NqSa6*@CgVtajnp@;xvvfG?{ST^ZZT8{D)T_6W}xRjql{VdEcO!q5Kj zC-0l!&GCyL)m0yD?__`Lyj}ck)zhC}J2NaCzVPIxs$tqF2dCOQMUApwwpUI&)zs0t zrn~&;41sLX)V;wgW3xui9Xz%)IxgyYtC7jN3zFR4@|KoM_-^*6~+qYqq_o6wkn=GlCJGF0e!OrDN&TBTNi{wv)XHHDc UxYU=pUVsbhYa43%)@|$hAAtuwCjbBd literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/flat_to_gentle_up_left_bank_diag_4.png b/resources/g2/track/bm/flat_to_gentle_up_left_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..93060086cb9a71d38595feacd260d2c116476d50 GIT binary patch literal 1273 zcmXAoe{2(V7{#7%40|4q;Ha2fA%>|_*DwU<)z<#tG03~Q^ZC_tH6$(XJS(#F)EH5vwsHjk> zR0x7pR#sM3RcQ?d1CARhiey=uqB4GhZc-5J(rkK{jyb%^{aMlN5(f|MhfDJ(ewc4fA`A}3cnXWQS%5KlNTvMSC zOeA!;#z1O~jNW8J%>rg|;hfJT1}S%h_QzQ%ZHr~?dO~M38%!)lbA(l(1P|j0*+MZP zCcBbZznl-}rW0xsXjq`N1HBWVK7&PCG68Wi;w~ft({cn(Ce<1O#Vj~sCn*QZdO0rWa74Y{L?|T3V!6@LLZJYGP5@{C z!NY1Qu4B`fJx6&aty10*FZf1_(fn*?8rEQHHKEm-^#&F*awd~VGag&%nKSD3r^3-} zQZD95V51R{Rl96@ACCo{WW>Y9gZ5O!l}QBinPjmz1xWxb0Ehti0EhsP0$>sWumnRv zrwAhw%w`xA2srSQAZ7+x20#`-K?}V&lo%M}VcG+;5_n-e0cZ+X7=-7vE(hlKnZptn zkGo|#lF!Sqq@}Y1+*w2Vw2Y*;#ZVz@@)fL+q9Z;XNYBP{FjGJ^fY2jmquNU9c@}rt zX`hRi{H}P!FDE1UY!Vi81Wm&jfLQ=x$qP?O?j<_6GdMX(1OqP-(`m|TWqF=+ItAS5 zCX4|Rk5G7mHjXk_-eQ0@J#?Wkh{G5OW%@-T-l+NOMFx5{Z(>2ygFCxQd$^@}UHj^R zQ~r17o?lwqd>xK0n)mp%q4J5)qoX%g`HtROv+1 zp^=%N=NIw5+bLz+*}Rto?)}cH=g}L(KEZh<4jc}sp>h+^Brs6-(fn=UvxHqqIl4IqTy1w zJNkMZJx%>XeX<>-I{aMRl#j*OM kp}svc2ys^P0h{C zdc7V&kd~H~*49>&#bO}{D@{`z$MC#c6opVI6pJO&=}bO9uBuf{Bdmb30hVcVyNy1d z*&ncmBeqzaO{G2AoLEpIrE-$S5tpq^U`#=mS>myTNSq1LxtObv7SyqDMNQVKc?SwS zIPgQ zqXhG6RH>v&wVZ(hMh=*~z#IUWgpdi7BaOLpl%TjGB{5l*^6(6c8+j7-JMf6hmg4EG z$SEPd7!%8KsG5t_6d9KD1|x~#E`sz@w4dW5JRkS_(~(Fnkx(+3()f6_T7>`=02V`t zl!4BoTmko%=y2JctoXB4Xlwh%n83AcV99DyyGW$3p;ANzs zFBuJH<*1UED{3BUC6Zxa20#@+SZ5Kg+r1DP3dGB0G9G&&u~4AhZqDc90|9}shDd9S zB4nD#G1hSwuedDGV}?Nt#tE3Apu*ITpIq4X@c9pX+UMjz&z*^_^*+4X-rK+Gz|f)h z&W2u_ZvP$LSkhB$oc}Q0U}^s|;86d&_tliM>!YjZN=>;@S?b>1X6^WJ+_mK2iK*Ee z+y72DM@Q$4KAC>@d&|5#$aeEO<=BkEh8v07UG~p^S**R;ZT~oN?|k&-ecz$Fj%)we zPtljQytL!s8{dY98ts?g#^{0Gue;avbWP2ix`Jd~^A~UCdJmk?uPy(y^XU02^vIeM zJiBmY_HgHdkxy3a*f8+(@@H({a6Z{9&Ak;J>AZD$&$0{XHiL8L%o{_44O@wwrzUZy z{*UtZJ!iKpM;}?AExk2ZSb6c<@k4lM{sL`j$CBFc;laKi^yl7{5ANN+$$hnR)|_9D z9Af)seDGQSidVn6Z{F8_{ATd_@m22w#XUED@+Rk>4BcKdIq=|u__*Ni+B~tVa$+d5&9z?LMV>m@ zVc&hEr_j6x^*Q&NXAVc`Z@Td8Ma|BaFD+G>lA7xI!jD zPL_^P0z0!SM)MLh3G{V6;o5|twAzQQA4?$0;qjkSUgy;SD<$d6J z-gjzjZ)9*_;{X5*?%Fvr-l-cpvDww#$=|LUcmbdr#`f$R?TlSrU2E2?>F)0C>FMe1 z?d|L9!!XR{a`pH3`+~tBNro7P=6O~SVv;0gG8t7Zmdi%9I&a%;$00*Nhk;|=v6wfR z45ZSbY%Z)8xKcS@F{PT7Ycw^6z@lNd$ok}HKoRhwM9yXyQ;pWjqCJ;w+1hfu8u3G% zfD{c1kCjBs%z5f1uT%4*RtPz9w4xwX4FYfgaSRhZ9@+0#a9j(AXE|;zk*Le^Qn83k z(@%PXv@gU3!f`wz5>c5Hl(1A_GCG^D@LDZy*ogq;4@H7uo?rzkCNg4{%NFBBLo_V8 zYUiz1sj+N&Xz=pjOF$qExPnndU!;u3Oj@*}xrU^*l`5L$2(Li-QxPH;4VMI_BJoy6 zsH;*_&$LZ-+0s$7>hV%I5hbYv&7^ofCkTa9s+`N2#iC^xjrsX@yN$pv0=Zge_JP{JYVTt9k@y@bzIhUU+mF=qKG-!yk zn8bVJctA-Kg*2^a`AQ)%r^|J-(5hD*X9>{&Q2+@*0nh>F0Gb$}4mbv-C8TS}u5&nu zB;;u@B4BfXctD~LNfhdP11)rQE@=Bzn36)C5vh-HVLLDxD z0?4$RR(zZmh#Ro#^%%!TQm^WWcg5B|A-X#WqxaR21c_?dyjlav46fB&pG^WI0oC;hKpJf}@Q zUcY&Jc=qr?7sKYsYm`H{=DxsL;x|E^TFGLXIb;_C<7i+`NB{<6C9w~F^4_kAC~m+$w3 z-}jwaTg~s@wQm;y>|Qyxcp{#MpM#Qof%GdMs3)}A@J6w`@`iOI>yL?SUYH8njw zJu@?dVc6{K?A+X3CY#ODbdKjaNfK05)^*J^%|@fu>9|3#6-A@*n9c#mf+!?qIbA9d zjY;q1(}-&FV0+w?{!92Ze$% z2bP4jHO#N2dhPVMi=$x8vmc1m3o5f+AN&3eY8yN~;WB&QrAl+g5o`mqJtRHS~dF zj{L@U=%7K6N;4!?pqV1amnEsDs?Bn_Q>*!{R_MC@t*y~$gaFroY+!Ud#e2BarHXyN zI*{#Q*&A6~Qq^0F+IN@}H|(K(aJH8|SgX^`D~m@?KK;SB=j1)+%r`m0|zgD`aH3E@8T!@#Hkyf9lz;KpI*4OKE3|VmzSS=>)-t^Jn{2CSKfSf zZRSER`Pls4qxa5#xBSrZ+0Xa?uq~~=mu&{LyF^;h1G@ey+T%3_b);}^AXXjOk5TT4B z0R!u_jv#e(qqrh<)Ga$JoU_AD1IBqsnGwsZ7+E(u*7-%*I;h~`Zx!Krzy5h2c%Jt? zymczFc+ty?0ATUvO&hlL>Ub}fd-{9%{F>V}fPUCIxqYHH_Vx8GSg@eKzklJvg#!Zv zgM)(@hIu@mp`jsvC=?>eFv~K6z{zq{RTW*=v)O#9RJQG!>$W=`G7Jn2JU1MT`r`3m zA{kDl>1>WKmZXZMR-JUCSzrlFq=yyGuZclJ#`7vUtFu;CtdJ zeIdpl=7Y3^M-)QTNZFv(9IKmLrXm!oQrV3KsX#aqq6LDJsi?v#DL$2#@@1v$XttYi zTE#}!@-pBPz#oHP5^w{f^8QE(k6Mi4i0Ot}Xd5<~q)(fh6%5i^7|vfkU)fGnpQbJCH0miOXr9+l&$nnG>?o*7R8$AZXXaoMjWh>Q^_7UW7rcO0|Ta!`*e5Cbwf z%ou*Y5R}Te;?hPtYIYKpZnpZQ+(7ji8ABq}q=;d;kUy*~WUvmZFHZAyUgzi#jD^-DKzShs!c=il6np4Uf525wx}rk8o% zTyo8}25%fWa#4I+d-VRpuU|Php-9GyA0B-=1n|xk=ne>nU%GqHzJ4|H?%jQC;`F1w zJu5Fy$p8MPd&cg$dmq1W$T};GEgN0G>x=(Z9UprO4Q^So|Hi3h_a@c9-)qczgr{pq zZ1?!=_U74Rf1K(&HksM_opgWW^vUV@yPlby`__GVb!7CuvAnyYHNSfO+~`Lq&wWB| zlCJ%1?7TJe+2rM;yH?DPZ`^lDt8DChK}i4`KLdB`AU4%CvW*N zbV0xO!;E@n=bf=V;wk_4D`(fb2j^#gUvujKPkXPNShqi4L#fvukLIdK6 f{B;oDk@2p&c*$IPXFS$Z3pP(oZ8)?3gG2uV_*L&m literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/flat_to_gentle_up_right_bank_diag_4.png b/resources/g2/track/bm/flat_to_gentle_up_right_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..4ce40a5e4c65dd58e73c15764644272952f35018 GIT binary patch literal 1292 zcmXAoeQXnT7{`C@w%%T;vx^-Rax;x7a6pyA9HYb=+(wyYJF-I?Q=pJjPif2nWtLdv zgib3q?8L$vsn}^Viz(7A1FIB0p^}<3?2rY!P-Y{It2&_30*g-bvxMaPy#4ch|M)!5 zp^e?@}R8&@0R#jE0 zR4N2Ps;jGOYHGB4y&lJn6h$(Og=K9{C-3oi0)bF07EdO}v)N*)gc|{A0<@*hX45zv zsLO5i`b>c!9f{c!k~1y)a``ZYAy!izZ_x@?RAdbyCqC+-q<}RYKV+)noLd$?X{Pexnn+mDiX^k z+=k^oo%Z~`C#5CtFwKpp|GESiFD zCya(+HbWZ#j{`pm;%1Pg0b~H=wa|ydFb(4lnD)YK7(4(^01E}IG~!^jf(!GD=17=L zBs{VlEfi!}_R?_xch`}kmJXx#xPi}_#G)-)awTR0>DhP=W{L(4AW+0?RNF|@!QgJr zA_|VMUr0p#axz-TCSfT@SS&COU=~1FX5lT{J(SMl4(9VjFz`^$begi+7>9#(yLsH` zA&dbMk5af~F^0dh98J@FW*wEZ_qnW#nSnC(n_8u%E#MK+mcKE1j&G)-UhX*RN#%)i$dhsZC zZ$veCZm0?At2w!P>e_$GeREq+kL-~^3A2LAilj^(_mxv7#kvTEy5#dPl% zsw1~LMm}G%;Jsa6FKi#4FMr%+oUeQQ)273tqvdj4{~ zuWdQL=6uzuO+)J5ir=*t-a6TKe52pSH?8Yh)_6>@f{#7lbzt6b`(f*n6-U1Lw)UAN zW51%uZa%ti=LPqq?b5P;oUg^y4fCH{(3zgPtv2-zU7h;OEgMeg6#w8tR!cO}Gx}?`hw)ipI$uj~TX)biPzZ3OYNw+fT3EcJO~w C2Qp>= literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_left_bank_diag_1.png b/resources/g2/track/bm/gentle_up_left_bank_diag_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b137a4861ea46e336ceb2819581165a12b01b91c GIT binary patch literal 1103 zcmX9-ag5V+6n=Nd(c>;;hW#<5i9;9DU^%8~LSw2F?BTc+uRuu_oKUcYotd#03z;~f zat#g~+UQJ*S&kWNoJoU|04X?No{gSyk?JluwF$#4Iuc^0*&i1K^K*pcd++7@=Y7fd zy?1=eL~QBsieUg)I=*RaTW_xK)x$#ry}m2FGYBvMTQ+as*rR=Yef|CY0|Nt#7A+ba z99+D3F@|A7LqkiJED1#-5sHd(94m^vEGJY|(RJN4i{-N8y7Ru@>2|3ounY+NNFotT zrNZe0_;m8x3va?O^-kyxA=QTUJ+4;wO3RH?H%S2g3cvf|HW+rG8Xabq}0 zB&1m|M69G>)m)%a3U+HaYDZC5LU#;=+z5aGAYqsi2xvHN5QN1rX9Zy{nQUmX zt2h;mu%W0BW+Wn}ka3NY4Mr_+y3OY+qE(X|KN+U+Xe`2rBrnqmg;TOZwkQ=H#ql)P z&wK4sbDP721XY{u`-dUvWgeaHC3x)xah1v24xyg$H-iqDal+#6+K;U zm}<+`J5_VRvr)?p1ZjedQ*@H$(xRA?_6bna0GAc8S$_rVkw=7f6<>yLe-}Smp79<{1 z#egP-jTBkPuy$6g6q0kc)~FWR4Y%99g;;<%fC^v$*Z^|?Eeuc(0*5jxvMuB{1OgNa z@+>$p@C863ASHxy6tV>5q);u3d<*UcPXo_ET)BUZBHN=5fPyWRFsPYX{1 zl^J1;kYI%+hfsXR=p^iJy0T!_?l?`<=nz4m!&odDNU-6QNM(||p{1<6Rt_`agf!*CYRpk8Rk#>G(H!ewn`Vfw7C|+TE{q z?%%gNwBm!0CYOD<@%8a*w+=u0;)zGxy)(nlZl8*8SjsT(py}kE`e=E~eo(u36#wh! zu|rd9o_h22kMDbDHjk}4_MQI6-kBRGSFTHu{*_tLpNGyIu1 zV#M-ahhILpTt4@%d4AS>?Z_;?n%a8X{rJG8SFTvb-=`)o*I!6U^~ThJ9fzjs-_~v( zdGC`SW*)C!z7!j5_Ya=f)cI3ABVc^v L#MtN0?4JG~nZ@Hr literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_left_bank_diag_2.png b/resources/g2/track/bm/gentle_up_left_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..048c1714c828f242bfabd0b087209222fc62bad3 GIT binary patch literal 1045 zcmX9-e~8<36o25prkl>~0yCb2-T$MIr`Pyn#>Mybm8f z@10&;NKWpX+6MrW^M_}Tg>!#ciLs%uTL*rA9AF3*k1oxHbYNg$aBy&FXlQtNcw}T` zbaWKMu(7eR@$vCkB9WkJisv~=5>z#%>smgaFPE$Jy5o7X$m+NL}4P8ie@r+ zHb)hTY`G%V>Po}an|`s~v3L@b*$GXE88U9FL{+CZ^1NG?n{_SNDs%&Dx926}ppcN| zz?86>hPlN^s}}7yjGNUea@{x` zO>i+v#94(%YNTw?s>$jVK5q-9hGaDrCrIN=oJuBGi4;^OrSV!pEL4@MqdC6e1tq^* zYwx-d4x$po(tziHFfpbYOV){$%W1w`Z0lCf^w5S#MpY)BO_D{Kt*LxNm;AiiD(f9P z-*d~mzKuFwB+3w^OfzYY&q`8JRV&$Sy;yXsRo`*i+uOZf4?$c5qKwhC2;YcHO)}l) z3!RkJ%{F@GcE8@;Ywe;5G7@28u_T_5NJ?c{T@VXOxGYyMmbPm3!1McU4io{?rHG;6 zW`?ZfIJ+PR5@+hYx+d@H0BtWB~#DSB9 zKm;TK(qgDcBTGb11~m&Pu;6a+38OMwTp@$(p4$8hPKhyImiJTJbc{xe3mU zi59Lngch)7FJ9gA=#!{=ms&3ldCUzjiz%-u&#$(t&epKh8Xme`0Lp$_`roVENWdZ@u^Y z?}@4P;!~AF;;Cur$VZzi>++jd(Bi4&8{hmOUeo@*^ExhH`ta+Qe_MZTX6NMjVr=Q- z$J);wUB3{V9=t#G!sg{wJ1efu&f&M^Z?B%CS3lbv{&aS!cIch`D^2!f8mT}P29IYeHYq+`MHJJ%g?;{_WuZt%A)`P literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_left_bank_diag_3.png b/resources/g2/track/bm/gentle_up_left_bank_diag_3.png new file mode 100644 index 0000000000000000000000000000000000000000..0fbc3a793771a1438654e59d91d920fe60e2e32b GIT binary patch literal 1320 zcmXAoe{2(F7{}kP+iqjB4vLo8joYkx;6)m9!pW+;ZMUVHhdbCU6jMzn6`EP~z)or? zu^R;n98jc6!7`6flLiZGWQmO_;o>^&ViOA4phy#&P^GXb1)FW+l-ClH@AK=Q=ljR! zdG@dC(l1=_^a23D!p@Gi?qY2&#)=AgF`r+X`4j*-Shu#Py*SEbvXYV#xm;daT3S|C zR$g9?AV@_;MP+5BN~6&bgqEf$j$_Pbqs_*#x5XdE%?lD43vTC3OSIGiz)MxN%~tXnjR z5k8W1#?szoE|{5<6ckW$KxF}_17IG66jk~#W|SyCX%I5DK;9FBBP^~olWMyj7Yw?f znU31Hq|2Q0*|H&5Uh>T)LogdtC`k-A5Tu2o?HnhV&3?N*EC`Y)CL@u|#6&)yhd|8( z%!d#`1szp$3EYyQ-C1KGXOHGR6NPYYJ~aocaD{?Ysr0CZ!?k9e&c?8AQ*oIiEO_I= za5|POWGG-_5F4j(noy4w_dBSNn~VA_@sKkm`E#jQp)d_801N=w0Pp}10w4}R76Gs* zmWB=+3x_oH$yg|tj=@5PWEdC$FbyCqvTzse9!u?V__JBk?|Up;B0(FCoYiV} zICw(qBDFq>2+@SZXeU@aXV5?s3Y{4A6EH%-BvU+o^2MtAkA9%PyNd(Ox2|s~_SZVw zT6#M6pYx`Vjn+TWJ`bhUf!V)SG`Ef>c5huVxgk`yZ1VSKq89Y_R&?d?<`Z$|NZ*$} z=E(YM?c;wwRMhldEZ_Fkz3#=$lX*y>Km_(DcVwF4YN5f7#P{qo02{{>20i0 zEjrz|^VHM@_wxGjO`WG}QV%|<4mUhoSStI$HPyf8DN)sV^SAB*|_w0owk_TaZ0Z+(9#Q2K&1-n9c2mOZzBc4^5Vc4oNnX0~RDI6G=V&vd^h*L422 zX1KNw#TM;5G5&>S<+fwjH~)S0XxS$Glt8aK%r@TN_4ST;--rC(&)#mDy1f?F%TBHo zLQQvG-LUVE13&Kaz4oAkY-*aX8N5@ys%498NnPSx>!GZ*cK3~`5BzNnSFov<$+Ln+ zx-mCZxmfni$o7pld*4~;zuNNrFY7;kYwoAdU%60LJ3ZFA+)r+s1@ko;4_CLB7_f}f zB|Sqkqf*KH4T+xqgTg;SfDBa(^jIQe%9=Ip;l{iF-5$L3Z%3mDwjbTucv1eK`bzV~ gvYzoL2U;J3yVZwBRISrDi?~5&dso|VYwxcA0cn{;zW@LL literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_left_bank_diag_4.png b/resources/g2/track/bm/gentle_up_left_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..8eee915fd0b091386aa95aa4ea841f8556a39410 GIT binary patch literal 1098 zcmX9-acCQL6n<^mUb?ns5@*n;rv@ACDZyRo=}x)XYmMc!S9+DO=8qF@m};g6o+XS- zgNq|-kV7Nnk5pqlB&@eJLSYf(jBw5&JB?>)YM-Ur|J z-rEcF{;^%R?*f3axu<3pdvi~(9=F?ieRb+*1Ym=Orl}rI-Sku3x-j%tahhE`hcN<=SG4-XE=;U zqP|3uPG|UBUM!ZBikWOQHI~2v^oY#4VgX#0yjg|ZinFD3ppuuZa-wBv-L~O(gGfMx z0ad_qGFD1D>N#hp;zlhW>WFAZMab{~@Bku)$qq-%?N+^Bji$GFz8nhGW3laQ7L`hF z(&=GbJ|3q#q?ide8hIOX>FJ+we@5*3tLIl(8gVzwX`%$Q-N z%vP?^Ejbu)3g8L>9tE$8QCXKi?+un1*$gBbiq=*Qw8axniE>B$L^43xRnFxt!|XH|5IIZ{ z95E4B!$c;^=n0{i36=F&y_9LyjZSA9F#rJo1waMR0m=YP3{Vd|i=qnBHDuL!FUTaM z7%2F`;sFVOWEV=3NaIldJw3OE)5JQkK*u?Ue;{W(o47UQO=w^}CZX}Lo{ zMn@Rc#cQ}&@X8jgwu5>nQtYNHJB0?Sx4llFaLn&>1Q|RmkkJsQ#==@ER@76bp|>mp zbs7}Mp#mTa5b9--=*iuHJ08t6n^Y!!14^aB27^L4EJdR->5EgoG(+kvS>k*(o@fO; zNW@Xhi!vlCFv#S3$4@;p^7r*0cy)1Jfc=-xKi?x)=VqQ*dgR^HXR9~G?;ago_zziA zegEFF^6>i)5=);h|L}|PZR(?g$BNwK<>*dva-E;?VfHq2*O-{nF^#GcR<%eC^o_{pH=oa|d&W z=4a@YWOcIdo7L}T-`RZqy=lFAVfweP@3lq)W9u*4uZ^8qtcvcv8~1#5BqEEs^}qh? zOdVOdGLdN?zw^WT*soWV+GkU5J}Q4f%{Vf5y_{V*P~Eg$JiU8jd`0P|?z?tiU--7p zC(<1spz7Y^Q|1Hq^s({%hu1HjQs*|HkxT6SFeW3<)t0On@rXEvvwJNiF+ C%-(tc literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_left_bank_to_flat_diag_1_1.png b/resources/g2/track/bm/gentle_up_left_bank_to_flat_diag_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f82bf610b43e9691ab906a1054b1c5410d262a35 GIT binary patch literal 1003 zcmX9-QHa}g82|2icj>LpA|1pTFlZkF3$tJzB19Hv?&yw;%W*k~S|v)jt7nlQ5&KY% zpmmm6C14MWS4XD-3kEFX9C_$NJj1BahdgvzB@Z2TuE@|jDpok~Z^q#FeILJ<@Atv) z_g&st&z?N-*a-kQxprY?Gn#x+M@-m)Irx_+A2)rzdnwB#Ry<9HW>&VqUADHIdW)pcH!KBhW zo{>mSrLsD$n2cs|Mnfn&Vyz?FJ=G2KBuiwnX-=j^jm_zTUXdzIwdv|^VESP#7`KKq zFUdnn20RaB2`CF=n|QWOY* z$HmUX>QCF_5Rs4hA36kXj!RUt#w=N&=00V9#j!Cb1Bnor}YCO1E2qi!= zARR|l2H6sF3#eB?p$+$qXF(J|k+6b>n?<^2Wm~q^>6C-O8IJ=LX%Tr~N(tV=C7V=T zN)I_}l5?iT&aB=$c86#%p;Ew-ST>W)@nk_}N_o*T3wF)yIJLlc#-Wd;L@DZhU|GoqI?BetqU(YjoIsbf@x+piP7{_6whBaW-Y>QY~2R}0g-+PbmpZD?c zz4z|^DPd&zo?!qOnVc9q(4Bj_b?>07+t;@y4*|Gf|5G#LUE0&r)7#tYa=H5Y`uh9( z2L=W(3>zFA92y$(`Tc&H4)8oD%c7!$HBHrZJ)6xJi=}FH)p6RL4jllF1xa*=!`@ho zh$jN6G@H#yg<_;!(Q0!4&OQ zIPLXwzJNrq5mHd8P?A;*R?G3aC1%R9S&NjMD8b+X!OzN+s4!ubS5s0dAIX>0lAWwN z8M{?zY*suRcxCWKfk*&pU`*a86v=RfQ|(Z?p_y%?ik2nHt1x(6pwc0>pzvi)wsobR z)tZ*xu4FfD3pJ}AFGErxnu&6JT$a;{l8eWS>2xKZw@anQ>T0{)Mu4k8W-+?p;mf#O zqoNHy)eM`hc)4w?c8aa7`X+Ky9uMR534~v!0t(A&qLhksmnDkn%u1o?RP9cKgNTS} zvL_iKj2M+ma8^n#=b|fCvR=ux>eWtX191Q$01dzZumDy7ni!xiBpxL+WSPjROC+c? zWH=}Z;7EXEK&lU=X=F;M6hpNXa!j}tJOd&RAqk5qzGR%r7(&5R%4OZQtyarMT`fEc zbi&OUKFK5^B~o=*qaC(7@$zQ2wpD7NdYkkDLtsL{6XuAROednEk&Ky{WZBBtRjcJx zQK!L(A}RrL0HJOcsjl2@;Cdq0Y%;m*ZD_R`9}dg0n371SbUbLB+AjK#35Vk9zXM-``WD^m^&~f!=Ck@k9Ns#lVib|-KVac7Vp+~+%bL`{q)9v z7y1uhnszPDjJz~^DcD$){vJ8A_q{8Re&c3$KE(NM25+oQ>^uMTw{LCy(^&ZWfeX~! z_Sj#+s|$ypxctI=@Ui!IO<$Wo)p>6E?Sp5|ZoBW?{iDYoS?p=^gNqZ&+0P&LZaf3M zugvxJ9OYg;vGm%xnVq3`o?Sm;ij5C`)%FoPMxXp+x9h~q$N7JkZw~a-j(>UN``L?2 z!oorQ3rl!>*VU8jYj=IT_Jh0>b5Bit5-$+wqu)PdgMYqW`>c2V$J5?BuZyGZ9hv8k ieYfqa;Ty9T@$v#DcId{q!(x(aBO!l=m>}1 zk*GJG@TJmRE-w^{a@k1K>RE=s0={mEbt(b3D&iTL9FH-@RG^%f%*lAe%+5ATeisM? zL}*ZXEGJ>bguR+`w8}2j@S>K0=2e7B9smwNz%a>fS6nU?$Fn})ILA$fLRCeX$z)Km z=pr2++Ue!oJ^}YjL_i@$)hDN!n8qdxe6}p;X2?ysync_5Cs>gRN{kfe;u#^MOS++y z%%suC)nCfZAA}tw#L`}{%)e;)#2!}|yB7Pzf@a06NAoE5{ ztfu6;7Hbw$vxbK1CA)*di2zB3XePq*2~kW(BKbt3n8_HrUaM4^%_ahu1b7M~b9ScS z;>$#+#>DHvY$H-=s+Cs0F<+fU-GtpvIh}sDhbO$E&nL57Txc(g<`c=uT;41htr`si zi^;rQ5!`B+NJnWc&KJ_5NlmF1(~WAW)tW&xKmb4nPysZ6Nq{;As11%mQ5k7jWL7yG zBodM|=zcIcKs+GHi4r8ra!3!OavYgixNkfKECT@!3yV%ALL^mxE-MxaF~iUr4Fk2g zTp=K%-L&fDvTi}gCDW%igIX(6m`#=E^%|-+aR*Rt%qajvR!r7!!(2_<; zYnUa}s!=S9bU-E`)b=9Yrh5QaESj#@sdVZA74_n$#Gw$a*Ur z(Fk~u;6@6L(j?MpWU%eyr=IS25i7g@4m>{J$s99CPm+ zwA@-hdi|p>Zv3$4=;a!7&GK4GxIMM;{4`aWcJ0u=+qq%+1T(TvTmJCevJ(#-nfa%0 zVxs%x{OjTU(>?eyI`QEh_8NdDR=@V;mr-+%WW5X}4l-?W3o%`S^ z^X$GW^2D7V`%hiu_cMK;|GBC4*1g9+GhSWu?_{pfF|uOKjm|F*u0m&AeebV!&RK0o Wi9MIDSvI#tg~5Ss{oicf_38g4ss611 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_left_bank_to_flat_diag_3.png b/resources/g2/track/bm/gentle_up_left_bank_to_flat_diag_3.png new file mode 100644 index 0000000000000000000000000000000000000000..53ca24b47d9b35e764db24be5659cd402d484ad7 GIT binary patch literal 1280 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 Hy&wM%ySgGE literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_left_bank_to_gentle_up_diag_1_1.png b/resources/g2/track/bm/gentle_up_left_bank_to_gentle_up_diag_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..71790c76706fbbfe4f74fa9864f8916984f6b187 GIT binary patch literal 1021 zcmX9-Z;0D;7=G_>daJV^Dt4|PdQvb#oI!#Yy?n^c+^lEZWn513p+c0P#T5)Qn^pTE za7B7YnPK)r(Rx&gS|woF$}XFQ1OhAqW zL&WMT=9D7cdUVu|qXCIVGCD92a+3f8fQ(^kB%;UT29BEy(-efgOs1>r`?VT!oH!Lt zvN2LfFfyJ}2}!3EgVCy7!Q#s;(QM1MpGnYhGL>XRf>-FY%Be-6Sd(kEYJ0ltm%Tx~ zH+CW{L`8^YAdv^$!01{m)xgsZt9nwYr~k zKWz?jt)bBwH3kRWF$xor2px;15=oID6^7Axp(qE-@{Lk?uio%oZ`5N!<}po-=yJly z64g9w6~$IHvuEjDr#k4mqtQNM0VDtozyPoS_5k`Apa24g@*1*CkOd@1jwU=6PfT z@&TbBi((*m5Aj02+V9iV$~|c9HkVF|*{qV!s}xzF$qGwZ9Odw2M<51L63Gdqqg!qRUyUkiw}vV45~sq^2Lk3ZIIc(>|v!O)S0{-amQy)7xtw z{=R|dZd}tetn&KynI{&!JO93Y>#+stvl~ae^B*;~ zH~H;1=EwQsm2UB!i&r1MlU;o8zo&Qg=Qobt`u6&xTN~)f`x+NI*B0O1k$+ewuY7Uo VW9Rgj&A>LSoLF7{`k9wE{s)zD!mI!Q literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_left_bank_to_gentle_up_diag_1_2.png b/resources/g2/track/bm/gentle_up_left_bank_to_gentle_up_diag_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..04845ac2ee5071da20f8b9cc35f6d2ff383bcf30 GIT binary patch literal 1064 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 Gcl;08HbS@n literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_left_bank_to_left_bank_diag_1.png b/resources/g2/track/bm/gentle_up_left_bank_to_left_bank_diag_1.png new file mode 100644 index 0000000000000000000000000000000000000000..abf22cb7aeb292689d1c56e7e574de42b0826bef GIT binary patch literal 1122 zcmX9-Z)h8J7=G7my{vVn5K5Stq?khJPPysHPK|Kgt|jYk>y6#qfl+VlaH-4KIj;~$ zU{{Sb)Ts9%tFeR{@u-;#7~E{*$VME2g_#eBMwjB@!iX-ijs-ooDjojJ7(DO4FYg1- z^S(3t#siyr9_s;sO=G)8_IK)VCpOz{oxHStxdvc^eR~d!cE)w<)^&At*=)A;>(_7C zu%WxV8^bWW-M(?-Mwi#?B}sx|Xr5;!DX1uNEEY?pGWmR=T&|gB+plJlv*`%s9AP6DIYG7RETCGJfD!HbR?2bBubf#Q7ANOwRXFWz%7F>g^^hY zQ*`rHJk(&~&7j_j6x&+O%D2|)tEd-uI4GAZ;PLV}A^H6Z%f-dcvS>b$tYq_M*{~Wk zh%Bb?4psDMVLTnBb8)_y4pnk$y_9a%%a*l*XaE5~0nh+)02P2H2B-s$K~V+ebY#{! zAIKymX($B1D>hQpL3RngN4hu^zHG(I#KvtKE#h78_S}g;0 zxZEKiqrJ4|;&hK#@X4lMYX@^yq_~=@t`!=n-u5|x@?ZhN5u`m~o{WZAO%3ZwwU|p9 z51~}6OfblY!%{RVlSGUnQZ$)k$P!D` zIJ_lzk?29H52Z;|ppn6Lj-Ps}_pb*(Fu8x6hvA#cM>>7q*vO6p&waFz3@*h69vPiO zKf@c9C!YQ%;{4+M)Fy??SfHhJqe^5E5r&cCns z-k2Vm?Vr4M>w>)x`{vT0mnQC>48QZaaB=&DGW4VQ)(hV+js1J!iqN&Z5a@Yy?-}yQ z!jwW7qsIqNS0;vkojJYd#?f0p%=~fi#es$QzFXX4>pD9B%HWon!*^ePe&ETE+3B;p zb`M&Yoqe^%XFj#OxAnaQGd6d-I4yiRAK!X7KQyQa_HA#T7^Vi))7KuK`(?`dVE3`# zvDwdlN?+-=F87CD8mWbqm2(&FO_q)m%EbLc{oj6d;@~mt**hPewQW85TK}mNBz?6q dm4Ef7BRhWP-nPxB?stTOvC;97uXi4L_kYxZ>ihrz literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_left_bank_to_left_bank_diag_2.png b/resources/g2/track/bm/gentle_up_left_bank_to_left_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..564af32b3c78c5a10d509dc87e10a1c67a87a585 GIT binary patch literal 1108 zcmX9-Z)h8J7=HV2*EWs_VPfEiTC6s$_VuP~(=?If9L@XkkAy2G9HN%lp9d zyzlAJk-+-?!F~W(zhnFGSi5d$2hrQr&Yyiv9tG%v(U-@!wa1Q*j?T``uCA``?(UwR zo^|WiVHnoi+uPUI=k|KNBMdCNM_{(pU8+AQ#LKN zY$vTouC`ioGT;)x9R@rGJ{_Yn?m*rbDlxJZ)M`q$sh3fKCtMQci3SKQNarNBs0dbE zs-~2>5pR}KtCoT4Wv7es5kZm)Gi+24G)YQFqj^m$Wipm&))p3;%_ahm489ab=A3NN zBUFfRjZM@;*+#V3)E8R$##(h1IS8kda=Qb#S0MZnO)DIq5ZlXQc`Z4g%iCqERbxQp zFhy{xBCbb>bc`_)LNOhlH`Hn=-KdsZtviST2m&YoI)DK%4^YPdwZXF}rXVAW>?-dA znS>+*W&ms+kN`+_BaK8^9+?qTNgz854~(aPVMsXZ60oj01+lxe-?jbz!Sh`-P(y50~Dit;q5+V^P7L!STobsm_(qPFF=U?E7 zM$n5y9H~B(CXvY?i)$Z0wb}94gC96FHX^{*+c);N`_3K1FN|+GJ8_+REdInJJ)`$Z zTO!}hZhd~}z-y20etYbtW4C@kxxM$vxsA7H=cxO^~-9@zVj#Tz~L)X-ZO8t&g~g^^}~+2f0o?eemt`_csaP~%*m$)DSGnA*q4`P#F^Qh z%q2oQ;+Xj1-%<7Z{qIfP9mhu&hJMZ+eDm=?%F{O|mvcs8%c;dbHRABSi+6XOUb;E( zOjsB?esJe>=h>$lpHCcfa=qOn&%SQXnHWn4^^s@0gKx^AK}{jJ92`}}+Jd|!N? zr@OgHJFoc7VgSIrhWfgeT&>B)k|I$qPrA@c0Ej^I`qp*1F)uGKKR;h25)~8_6c!fF znKK7LkfNfZxpU`Al}aUsp(IJrw9aTWu&l-5aCkhvP$(RYP6$FKo5fH-XaJ=vF&HFf zv)pP!oi2^XO9etqglA)MS2E=%)rekGV$n(MdO2rQ`B-ewLGm7bEMyVJoN2*7lZk3& zfKdZ00XP~7SPF_twcd^yISuP29YLKtLi=M(STMarQ;4`!o#M5jtuXai3edSDwg0XwI0Jw1Zkydm(l38T0<@u@AJjO;pD_bCX<0c zW&tV>f(686L`KKdrX=Z18T@H$B*RT)L+RPX3@lNL#kf?el`CmAYSd_09pz+l%WNT+ zdn^zVqVa5!0E`Y{X|bJ=b7r;IMg*O7#A_N0+7rAtorq?$_aOm*9sm{q4uBv4V*sQO z0CS>9Xk%f}4}}D!0u~Io2@uu-fdY^Q&?1E{4EiY;Hp7?`3V!ecJPvdu&{K%nD79PF zZcZEU8zT`%JRVG^<1ptXGXcz2LU2;bFK5Cki=g2$hG5njneoJC!%3LPs3ZWFBU)5! zAmnBmvzc_9-RyVUBSCjO8cYjOm`&n39Sj2~00?s|oH@Ifk~wVNR0{WcUW$#yNP~ek zn~gS`1w$P;>LIWoiSasgf>NjTO328eT?M@u3==S}%N;*nRr2t~5A1GfqCw4_$@W}7 z-B7o-wZ8lGADj0?D@qHSAMw?)fz;`DiXKpv?E`e+>~Le#cgH%1zpk7=JM^gk!cKSX z1AdpG@65$E#ap9KyT7@96*Qdh`28R|@b*GocX7>^ajo{&1>I{nLVT)q8fl zwn4VNp!LMAo7H0qY&i;1Em1~L)@W%M5>Id49`4v^E`n@$Pxt7OYth`X#db@h{(^|Y%v|?}1Sw(bu zmfpMbUS*47wP-j`(T|n=!jiqus}6U8Va3p;-Sa-oug$BCjlS3T!;_QwPbz_xywq~jJ=I~_c2jcZL&-oE_-z4&7UGGZL{$Ic7 z<6`y@Bie;_)te5@KC|^Ywp1K%Z!1=SlXsphTJ}o1N>5izWA$jgkbZWo9Pb*x8odx) wQ82xAgwRV59^Aj~>c#;#+O?_tiMZ^DTtGT69=|*?ltT|1)-~1j*KYglf5eSOPXGV_ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_left_bank_to_left_bank_diag_4.png b/resources/g2/track/bm/gentle_up_left_bank_to_left_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..288fccc0f0424f33c4b580b1a0ad33f371b8c966 GIT binary patch literal 1097 zcmX9-acCQL82#3+y>@j*md?PUM2K*%XSqMldTz(Oxm%l+bG@xs7Hl@tacJ10J;rSd z66L_CHx1+dh+DK7Mtfkkg)PPEf<`=8$_i%X#AqWNTads~S1_v?t61@8%HVz9$NT4d z@E-5O10%l8o3?ENfX&1E_Kvph*4EHn?XCUGm6cBc+Tp;;pDGdKeCGd(izQvDuX!qW;h8{^ERzm${hd97|6tBs=1 z4M74TEa)PZkufvwsAQbYk{i`Y)C{6E9igHZKmZ70nCx(!h9%HQPt&i z8kwe>a(Y=8DR`J5?vn|>N=Z7Sq_|j?PZUI>6wKQp5A7y>UPdH%i4Mq|tO;5=n9j?2 zOD)<7tDdQ@nhqA6BDg}}i2|-;blT<1;Q^DCEq}bK7!AFMW(C42(e8+ki2Iq0#1$0L zib<8EQp?5~W^&caqFT}6q;bMe(IJ+Lh+-W z1bIvm9cs{{hlx~_&1zyH6`Ieg6*E<@6r0Uu!~*yM6aXC{3os8*!vM7)a44#vtby!` zfP+jyf`z;fYypr6NOqw(g$x1Z!>FVo+ko}pY2Z2V3s_iksSzTf`!a@9D8wu)Td!NF zrR5F*742blmtc5;d0e&`y%ESZBZbvuX)Rwxl?Ltv+JpH>M}YN&MJgKNbv0}x)Iv64 z6|;4_h?-TJ=TRPz4G6We&{}d2;f_U9wHlpDK7>*#ae;ss4olIfOp!5~OtMs#qfDMG z3q;-TML`czag?G^o<$bF-iZF5mGuss932s1_nqHfZ;{pEy)TWuaQ2(>{w=Ym9_g59 zr~~uoe=>G&=}Y}3?B4mN>r@?YUU%NQ_Q&Ywp-mUzzb_^)eLuSMheOl$bjR;|wlDA4 zc62fH_LDnq5A|MturM(`d@^_WiGyGLJvXrM@yy+;y;5;%MmsEBe@-0p?~m^L=*ZDa z@ASXAc<1rh__NHP|Md1xjr8B2et-E}_Uli6CGVd&c=PUei<3vrE*(0jO%7_4do*X? z<#XH1L$_XBI&L<$UhO`EJ@eQ$)12AWd2g`)!Rgy;i&qBD_xVB+yJbgGO(mV4P^I9p98#f5 z1BYowO)jA!RT`~&Lct1!4ZRl)bWn6JsuVY&BZn4JToZ@XQRV`L{462)KL6f4-xr_f z>FerbXU>>A0{}3yeRW%RwYFAcVZEW6``6}o0bl@KYuBx+j?<=1tEs6m7!1>=Pp_@5 zt*fg;5Tw4ozM-MPWU*KX!p1N(&)WsTDM_L%%i(Y|kk z^{4evwiwG#rBE6ed0=t_%m=IrLPkw&!s<-XV%8DNOKM3;!vPLA3Z&V~;z0)$6PTpL zXJsK5mI`sXlnPH}M~y<7#fNt^mMkI zr-93kNIdFyVTuQj_~>|mPe$BBaepoqDdy7U@;IacZ~!0ypa2jDUYHHCc`+LyvHN>d?I0!Nn4mE z;tY|p+eSFN=&(Q+2K`nTA)rRXti5{tHG&fJ&>#h0W z#U&jJd{5JXjywAYd&CXDwtb3)`o_E7kVEJ;?8Jgo_m%!SmTWxwlk>`V^A6q_UNYIV zd1)^4*Xz$q|Gqcyz98&fG$~Zyy@rj iS9;!@=UKC865W3Nla9gf&$d-bfc90LZO2#k?D-$=a3G}s literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_right_bank_diag_2.png b/resources/g2/track/bm/gentle_up_right_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2e48e0bcf0fab86d31eb4e192168439d7043fbc5 GIT binary patch literal 1035 zcmX9-afsV=82xU&Ywmg;WmYLzwSzJvMhTKZlsK|8chn=><+z+wjgn)5^^g7$A(P?? zMi!;cqES2SLC4AntZHy&JGL+@1nl6z;)1JEA=9E2J3X|H4hx>_XU5=t-^cssdw;z5 zPOL1a=OPb80AOzExrNo>-XBbAIuz`Kf1JM$AOtH1*A@dhF)^`g*RD_~G&wmrH8m9u zhcOJBo}QkWnTe-TDT*RFjuk~-Q6x=M4a2BZYK?}|YIS^nI2utTunY+NtR%&9xn#aT z7E4T}D%2Zt)79Eusn@qS0?RP7Dj(M~NmIdV8ntO~ZY9%hsQy-Q;9KKiE1dwDfIJJP zh}BihEk(Qa*r=UA0}_p7v|}RFN&yG}GKQ(qsGdleIBqe_rXXx(vt3=^uGNt1Ca747 zjgvx>k@2)jWOPa~8Li40HeYUvR$F%bY?4lp=@cUpyh2MVrxt}`O|Chr<#L@ zu^VL}CPF+5$pYXeM%Uu$1}?d*>Sanj%^I35v?&lVg-+ztL@C466|Sj?o}qLrTHiK? zZe{G*sNaglXq?DUbe84vqF7RtYChj6mE2m*bDUnMGaL>PBvimF7*&sQ&4kz{vOTWY zm#jg)IW#+?#$cyAMzcgTO2^~rWJ)ARg<&*aD9XXJLZejPsyF`}fsuC#ZY9_kM97|=;9O-3a)nG>l(mN)gBRo0t!*=yMYzlBCUn&*)N z$OnW1FN%TOT_lV`wcn?!mAlZ|ZBCNJTuvzzREjicvcgg}N4Y%N5r{!1h2$jCaa5&{ z!y=Cl!cRXjd-F~Qj;=0?aNxHejs)cL(!%`OqaVI^O}f|EbI;Vu*uC`F?=S74zfRZZ zAD*vX-5~cH^qVh!EbabrF}F7&yf)ew7RvVD`@VP=9b?1Ky!}+lN64#bomu(s&<81c?$oj48xeoC^YnoWdvEQ3XZ^=QjR*==D>d@9w_Qee2ruC;z+>xxV)5BUfGsFW5KIzdq<({N~Wl7uIU>f`9ns k^S94DdF1-d)lYwk->!Xf_Ez@&pd$cFi^~h=o?SowKR*G&Bme*a literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_right_bank_diag_3.png b/resources/g2/track/bm/gentle_up_right_bank_diag_3.png new file mode 100644 index 0000000000000000000000000000000000000000..154857b6f292232e32274ad5120377efac121284 GIT binary patch literal 1113 zcmX9-Z;0D;7=C-byWH)zRn}p}IJ((EoMF}xByRbTo9XDy9GAHq>xVj{1XpHp0du3% zDA`?=a_dIeDpu^IVq_I6?cij^)zJ@`bW${qPAg`v(~eabQbz|>PW;(1c;0_s-UpuN zeV6ymh1aclbPWKk+dC85KdjTk*fQZB=9l~jy#Q|5H#@&)IJ#V}k&zL%+dVouIyN>o zK0c0N*u=!dcTmj??S+sUWZn2>etu>W#(Z&gqc!!pC0iWGLcuQl_XcoMjB2;s(|9l(U__Fa>8QdfDIt}Y@)f0G>z0$T zyM^|k=3&7rf-eSs4G06H^S*GIh}Kxej-=bF*)uG(B9LC0#uH&O9bpPGS5-wjDYvp} zr3sM$?adq%Tg?yj~5Xo~cBXrC|a4~S$?W*C(hQqpjlR!(Q?g|cJW{Wc2{kExfC028>dQorHa^05I@83ZzKm}ha#{ib3I!P! zDq(O0Kq4T;htd=>1yqTnMhZD5+&7*Eo`Z;h#buwKATvg|V9M2M(zc7;u8oFVcnm0Q ziZy(K>6a>m;xI-pTI?sPgKT59(nhTw;RV`{g@c|b>yL|+7UK;)Zf5jqF=JcBu4AEo zo91~`0ptKeLoZT8x(C3MTCUTfbJ+(_8x1ZR72|PP(-bP0q=Q+ODsohf4>kp|8wnuE zk8}d%C{$sQ%@2>C-ad8r{tqndpA%vF_RoigJ+?Qrdwyp5yXNi<$<1rWez<{N`|-(R z8z)^C4?q6Xmj`zIaZc~f9=q*%3!iOWFI`^$J~`9I)yc!Zln{1Vd;4tY+$-44?~k1M z;?!05$-er`?>k|$W!6h0cXxjH!Ee{YmzJfa(+}avdoOHRxJg}k=j*lY)2B9^*?)o@ zU0UlNY&&x1jRRNaW9JtKJ3r5Cjc*RA?DWF4>#CcX*>ryKnwz}!*k6lhu|v1U?!J2IZ*_fv Q80rIi_soS#&%M0#Ki2-?%K!iX literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_right_bank_diag_4.png b/resources/g2/track/bm/gentle_up_right_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..39bedc50ae4544a15628d755d4b12361711fd1cc GIT binary patch literal 1181 zcmX9-e{2(F82(^eZ|lH{#T0kbhE#L73MC$LWVIaZM#?y{!`(DCupe}WuNdpxc0&$nGyUck`p!Js`H zc1EI}SlpXTF_|2v=f$ECFIQB`jRd^y0_~6jPKC$PB7R1u^2tCkCz#{0s;N%b3VsxD zZV(}X!Xg;~$;WM_jJ;k&Vbufc9Gp=gEVuw*0N@Zru-POORWMBTde1P-cqmkoq^Wco z=JP0ScaaVc+elz%fg=Q*QGh83k#_iVSTIitMj&1m)tXX(XBfAgC(wxB9S?XjJf(}Q zA@ilASjoz@d~({z!b-trCop#aCqg6@Vc9s(ry`MDJf2Ud4NWUgPS$EQ2v7lFNd(W> zC>>>s?ogSERf1|YqSutkdagQCnuhIen~iWd{7x6^_V8Y>NHa06u`HU4C&n{5vtZQA zB;aU7WNi}XRKo65l+4ChJrx?yN~L_NS}N4*Q;-B80DuU90zejkaR4d^fDJGdjEXR; zLbJqRK)^wQ1ezb141g?vf&<2Js4`Fs!(t4YDtKr-0cZ*Y7$nR)q=-AA_%kZ6>#|{F zt5pLwxX=*5qwS>PU{oikVS?#ZYQbzhqE9D_Gg=vzYM31mPQ>rA1xaU^#iJowk-}<1 z(z6Mpkgb{pST7Sa4K)Bw0Aa(6ScC2nP&t~aRESja5yWDV3I^G5n2$yU+#?g7B#CD! zJWqQj8Fw|{f}9gd7);?%BcVYzj-OcEe)r)Iyfx6zf>k$v-r4BszTVY?D-M2nsCfRs z(mC(F3q$M|e=WMQO#8lX;Ol{1#FGByw`}L|i9@fwdLwX5Z1lsq@C!p|0OPSv|O5RPK5%bofX_?%F}PerfTIZoj;8*gW=x zF1`8b$+j!cj-X?o%{%W51oTOObO=#cN=gAdj9 zl_TBX9>4$m*(KN7Z{FTkd#s0BN_0`3JI^lvqr=}u|Fd;zs%GrDz;;+I=~DOniTBs- z!hT<vH@84k$9qit8 vobf?p@x^}=oA<8VYE>4WygO{&ymg^8WnD3r%M7h+Xbk$+^!J|X*>>Q6lw<`r literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_right_bank_to_flat_diag_1.png b/resources/g2/track/bm/gentle_up_right_bank_to_flat_diag_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1889ac2359c33ba767b6dec07572d1e8d787cb4a GIT binary patch literal 1193 zcmX9-e{2(V6o2iyU137Snv__vgc3`*EFE0p4GuWQu@tD;O%A-7n%u?(Dpow?AcZv8 zv9c5_f}do=~MqF&Ggra^Gq<&JSNiy6fHoL-ep6p-G#Cs&9RvKFh>QVfpqRHx*%g?Wb}x>T8%h%ki&U(QN;DO%T4Q;nj>4gwBA z8WavoOIRUhsidvVvK`gks41Xn1)-u7fCUgROtM(QcDv$or6_8GWlMg4B^3IW1h& z<61pkohn#puySDYgChhk1tV3PC+qSRXi4K^RXNpAifDqxts-d;dhi%er9~z$b6P~K zB;;Bq(kLXRv<#{hEmqQn^91RqnIOl-L@^l*W@E8}s%p7hb#k)NXdtjl;7VXb+QQ`R zTp9OQnP|kf3aw?KY%E?%XZ51itkNKO zF`2W31&0#AlOZ}2; zF1sIyP$#X}*px%axg?!Z8oo?3n4e0Nr*l3~qni)f4P5$usrvQ{ILiARvjWya^@0s%1;k_dN%bSG#c!w?0p zdy>WLyb}oy6n3E`fpRp`yshIWyE^}V_yfB)_H(fM_K(|IJ->c!@1~xkC&ypfH8%h8 zzU%1PmqXW#D}QreU37HIvBdQ7;oq0tnE%SRtAr=+p1Go_-NS3lrDv;7kNM_>W4qss z%`0hNy*Lo+o9_9cTkdf#zx~hXg^w4Xp7X(R*OJV>1;p2z_M5kLY~AqAh6RHM_MG@> zNAI!0(}9H_=0<-xb>xMD^t$QnoN>7I{n9_)`uu6tw0(!+@UF{q#l>?*;3N0JCH)h| zPxwB9uVRQGB+UOvDYy9HKzvrcecTDl;78zzA_<8y>o4&8- zi1E|WYrS(z+yA`u-s+JH2JJ!je$7Yj&6@V&=c%rn)WNs8_ieqVLpzt9yl?w%-T9fz zPpGk>t^B=y*r9ffja}?LH{ZTx_M*W7yF+~S`n&uaV>c$V%@v-_xlTAszjs}YBtIhlD=|QHcPRFsVz2(9vnmx zLM*5PmXWbS+*ZxlTV)(I+^8j@wu(^E1;7J{7$)0n5gbCp<0B0Bo6{FJ*PnPf(SlRH!Yl_xXi)fZ7?GlZLJY?L*WF#)H2u4(@ zCY8D#Z5EP?hK}k*o1G>|A4LaPE+hzXNlJx6*?7E=P8+#gtx{<=n+R|jh$Kd3Y+N1} z%4DF%#p-^o5z05!N-NuFR~OL$X|vG|hsWs>NVmi=ikFXxon_%{JWCz{g`j$q@;W3DuL)q-z7pICVmyUjq zE?(L6g>~1$6T?$;Z{Ij@E2)czK3}%&&d}VsCug8Nv~J;MQrt0p`<8X+a^w1q9S@!T zq3h})W5jYz89p(#_nL9?O!GQD{%_ADZ2n;H`3qInEPaKeY|$Dcj0jV$xjc? z^d3ztpZIZj-?10M1ibm*q1EfU?mi|zF!tc|xu3rNZF1=L`&XZ~-+99_{!ywj@a^j} zdv~o_Key!euSZd3q60p4(r#uC+Pl6Z`_69sqZ_SZTq~&3Q}Z1KVaukiqsO1y GvHyP=$@}jB literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_right_bank_to_flat_diag_3_1.png b/resources/g2/track/bm/gentle_up_right_bank_to_flat_diag_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..324fa0ab7ba6655879311257e91234c0c013f510 GIT binary patch literal 1012 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 DO!^@S literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_right_bank_to_gentle_up_diag_2.png b/resources/g2/track/bm/gentle_up_right_bank_to_gentle_up_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..689c8cdadb839c573c4fd51adf27298c01b45a2c GIT binary patch literal 1073 zcmX9-VQ3q56n|;bUfM7+7ct_=QbaLKSN`4@{N8)~zPumr z{oecFcoWC?c|Mz#vTW7!^sn;=N;;DxrT;@+-|qW;~5?v z9vK}C$F_U@J{bi%1{~`Xgn%T4 z(wS(!5G$3rYAsnem8Ml_cQl5;5;3352D6EfDn=>_xs_wgQleRt?d^Qm)&{*s9ET(U zX&O`>tIC*J@VBageiKLCDC#HCu8L4248Q>-F--RRvpB9sB3dlA#c|uIR4bdkU8x|` z#K}OI4o109EE$Q*L?TOyYD_6JIh`%md99f=>{N)tqw#QzCs>gZWJb<&`AV{4$cB|| z*hQ;bZ4XR84FMj4DF|gCqGD7f7_UVHla{SSp{-~=wSl%cA|O(DI!+W4v8u?_72e8; zt&-Bwb3L;(uyoXE_ybggNRU*DX3{)g5XEvjT`LsKO2sma_RdbP*F%8I5Gi3~)z8#% zzDcCoOui#%-E_UD?(}Qj-PQp42)~~S2IHYHPejF7Okufv(rK2d6^h%{n%%JaZ5om+ zrtto3GNejGIYaAtzFtmk>)DoB?zS5J{%u49Bmfiu6+j2r2Iydb9B>TEC`i|k-Qpr3 zlTf6=h=a`m;sMD)R3MSYAwxpVJhC;oZ#)Go0|^e3#9%f}6xDcD6YKSyW$E3ng&ZwB z1!TrYt3gf+C5?z|$JCyn_tW)3skv*kQL7gT02RXGQNKWkB%aKqST!qY#cW+KS`EEx zH&DM#u`DtG*?^GaMc$En06do|cREzL^Z-h;$p`{3Nn$1=lhGU%EzzXTkR}`5;fQV` zjFKUgji54#3>sOibNtj%-<|tE@YbnC9;R>ISawKzVQ%L1~a>C2Grmnu?o_g`$72_jn|M0nkm)%Q)v4`LO`-eO}`}4h_ zRnNs^l}|S}*0C#}8EfaytZf{4s(bYCuZPdL&PuO+`~BT{xc+K!dGf}%{^K9Z&rlxM z-WzzD8s|Rw>5_11;%?*GKh^2ir}WkM3!7_<%Wo{WCMS>0ewlA_7lhj8%TLcd-`a0p zeUm><9%_C4&YdUsuDA4$|Gbc1ICS~LZMWtShZTib-TSD83Bd{o*PRf{HatZ zorz>~bfL(XE23Rh>Q1iJHdq3S(_=ChP~#z8!b=Lds{6;d_RMnkQ3012> z(jR655k5qVcvL3hDkFhOk(HP8@vw~erZkTGbTI@7yz1|LD0O9}&fDT{+Yyh+|Kz;Bm$|%S*klW;OkV(ih zU`4^@0SSQQ0Lqcb;E|O=^(=A?xEnkL91C$COGyDWP2}}x*^q2oa~!kNaZq0?m;^F2 z#^?dw2#FRhyR_a-n7y>UTd40@E!6DdexO2FG~!Dzp_D*olANxljJ#@_d8cM}+#2e& zD2_uGAQuqoXOZp8-9u2z6x(g8ShxqJUS|^tA(fIc8JUb|RHVR=CQDYiNP{Oj@h}oY zNX1c+L>7Y_u7CX0k+Iu%f8ca%UVvlUTc`S@IyZfM@$vV*{^06;+T{M3e~{?E6?^)m zaOu|38{4PW14j2CW<%pAzJK|n*rxqXZ1RNu;qilmBE x_15jP51zfYJoq2}#a{B??|vx%e&LZnJTES+q@BUa^L;BYH#0xI{LBmI{s;B}%1!_P literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_right_bank_to_gentle_up_diag_3_2.png b/resources/g2/track/bm/gentle_up_right_bank_to_gentle_up_diag_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..53defdfd1a4a3dac2f6a96ee1dd5286e71a4a984 GIT binary patch literal 1137 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_to_gentle_up_left_bank_diag_2.png b/resources/g2/track/bm/gentle_up_to_gentle_up_left_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d3d219d93f2e10e4fb5d15474440a3776b78df GIT binary patch literal 1074 zcmX9-VQ3q56n|~nUbO7j5f$A$4IyPaLD1#d97)^+N-@v9HCy}s?mjcAFd@r zkT9cUlF3!`A!-}}uNw5A!BrL^Vm{yktK|dpsyiA7`PDu%=yp%5~B{NaA zGG@Eb>{Z+>ctr3SR}#~Rxv~ArmA42LY}Ck;SNjn=9jD zjf^z8R4c5vW95!k?-twrMi042x108QgFe4V24sd&c_Ag)&Emy$X17qZs%E#zg2ZF0 z=uSvJElTF%tdSDSxyY`OXjF3TMz!1BM=U@HKn2hM41isL76!{ewfdGYq z3=5?oSOOpskm5yY3h4qWMNut-9@JWm3x~yMRF20LDv+cDS(Y+5s=^2A0@)7v zk>o=O0_7-FVv)()$4{Sd{dM;T)|VDUc=FflFWcnjx#=^@kG{9@{>pfA%K4VPljq6U z$^ZUczP|ZNp?-M}JN?76n@>;w5j=Y-*k@M{SK5PX=dON1r0<_{-QJvg#`X2*B}=G&bE^vDYrc6xJvY6tTdul>IIelZ<&Yx#4}qDG8>(} cozs60T)S^;9e$ZOuxEw2nT6@?r&izm9}FSSr2qf` literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_to_gentle_up_left_bank_diag_3.png b/resources/g2/track/bm/gentle_up_to_gentle_up_left_bank_diag_3.png new file mode 100644 index 0000000000000000000000000000000000000000..bf75e23b5760c851a3832c97ddb5238dd71df2c9 GIT binary patch literal 1390 zcmXAoaZD3;6vuy1%7GOtR_&y0=T=PzH&^iD$|!oU0}Ix1!r^LCw?Z1}NVjxYOc{+U zSYtJvRtKZFV^%HLxT-ZG)~s_isfe?gWj0x7ZnI`xRyQMcbf%eTeycJ0y!Z0{dEY<2 z-*;e3v!ZB0$pQdCQBz}mYj)OVtE_;N?H4x3KLdaRwrp-|$gVj#Ik~yH91bThFOSRR z=I7@l2vSf`P*_+f6pO_;E+t8Vrj=T)+GsRbtyZVg<@5PNp(x9y(rH`@2sxmXJhfV& z*P|x0)Ml4E8Or0+1cJtJ#2!z$NeofRc?PA>qCy>7iOYyjSjnJM74{j}XPzO*mkT?*TOQ`Tk)Iq`!QQ6~0cghih6BH)U%0wmw zW>?8QS~6gyBUWw9X-s&nsh~3x@xnxiFOW$v6)w{eq=}~OS}kKT`Rw+f%N6na?xZP@azxX<C-bSOM-Z6IKcM7+sl1ZK5FI)IybghNQVQH@_>VC9aK+M6~7GS2Y4KMrFli2%q@ zL?Pv?2~$PUH0hd~3QYV3XNj#{OMky?*5Tj_0Egh!Ykd#_%;*f|`@d3EFR789qka^KV0 z6JOn67V7U$P2GQ@>K(h;D{f1Dy>7!sb{A-$eMPk}!d+5VhTQv$(tY>Jn`>9L)HQW1 z0ORPQ$2;pilH)ot5l^;)bG`{=$jhA<9GX1oQEIyWVqIuIkQ>pb< zW7o*R3ME>RQ_j0mCVr-_e|z%U=*MC4+3JhG_4IewR8o&|{@Syr8@}wtz*9>h*S+=> zd;ZYRJvDj#vCn_lcCw8rseEvTx4w$oUAK6@u}FNpMRz5CX+D4Jy5`KMyqOi-CrWnT z<&Lg6Lsy|-Z}*;xBz{#>Y}y^-CYHDF{WZVsx(p0F%^esOmT#@eoXds=G&MBWpL?f$ F&;QzYS2_Ry literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_to_gentle_up_left_bank_diag_4.png b/resources/g2/track/bm/gentle_up_to_gentle_up_left_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a97983c19ed46e0863732d79ae2a8627e6d8e531 GIT binary patch literal 1288 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_to_gentle_up_right_bank_diag_2.png b/resources/g2/track/bm/gentle_up_to_gentle_up_right_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c93071b43399784b13e1814ba6bbe33b74f7bc77 GIT binary patch literal 1070 zcmX9-VQ3q56n|~nUfNiL+A3DcQ_ma0|SGD zgF{0@7=}5W&f(!eG zjME-J=cPm+8zurO8I04i&T3gcVF>Axl&^(NTk$bC74WkXDacGn<<+E^%!PBNYFhD% zowizqMz`$dz$1ZI0bdLV9bTQIn@fL8d|=sSJ0YBdSnKV2FO&9Ey#RHldObX z&uC2}(Jp7YmVufTw}&CfAk8QoAC;t(EN7$9Vk%Y6>X-yJB@39E1f- zlicyJPmhq<7-uAUBGEBL(BqMOI$ko;R>f%9 z71U`kf`CjwHXzi?BH5FB06Y=PHk(W~^8i|{#)m>uBqGORDorIAD#OtRPnQL1T_jsU zKMMO$oIqI`nH;i&-tjYgU3c&Qz=wxsC78H#Yq3W*W~TPfKYjYx8KM8`ZYO^Q-TdP4 z_QmCoUif6?m*lJVOHZ90S#ffgZu{oGa{POPJneY=4e{Kq{mQmHq5Sju?nhj|y|{4o z>pzyio8J58LzCyeyv&=kBR85GpN&3wK1$uW;@|bt+#(@8lRkg%%wv}(?p}Lu^MbH> zYR{=3Cl`)gd-%x7`OL?EF8Mdd{u+B_F*i|N-TM7PZuqU$BD3n@Uf$p?9{umv?W4Dk zUzeB8j_>+=>$#=Zeo(Fl$G?5|#I|zWbFXpp^Y`7JeJjtOT=<~KzLPm};)!Q>4qrad bEq#yhpLf>A_hj2-&nL`G&rW?a`S$YvKTgrW literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_to_gentle_up_right_bank_diag_3_1.png b/resources/g2/track/bm/gentle_up_to_gentle_up_right_bank_diag_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..701953fe99a3a2fbd84573c7ed72204bc6be4888 GIT binary patch literal 1040 zcmX9-afsV=6n=NTyYyB@=M|T^D3z-$ZgJKlLIx31&CPm?T;^pEA!vojRaYcP#Nvup zSG-Q^EsRboD_UJ}{Uh7;k5e|A(he#x6LulD$TUjOiT;C%oe9DVuNVULcDjg60w`+UBMiHXU{ z$*HL+48#0>|Mc`U9*IO~I?D5$Bnhgj=(?86MsyT77DOSSD4|p; zoX$k^1-4WctF=VEp|_nvuW#}cCbI!ez_W7LP|1o;ujlwiNp9CPx0N5b=GL$oCm=yV zngc_^sv6cP1iRJHs7;_j6pa#S+d!xp0T2Na7^Ve-S%NS~(q!3nQEVlX-E8(wrGgp_ zf(}JEJSv9S1R2*TIZLYstC#tlB^2wD*-qGQGRzRsc!ZTGL1h$;*YaY%lBn34?PQy7 z(HT^GTa6$GAqns#gfl=I7*oOHHBxDCnj;r_x;ZqOXkDa2Dnq2>R6%B|Dqq(nC#QBx zdf&KDBLj7hi#E_IsGf9q5OHx5q%jtBjP-s*tj&1iko#AkZfY5*}VRSXf*9oaj zC3}3nub6{$eQ0z>wZV3G3k9fPkiqeII3iI|m1T87%qP5MnOdRPs@B}5GwN}W5HMW| zW)oo}MU^w0m6z(}WXsBS8|6W_IU3zT9Dod<0~i1nKntLc0rDX7D5E3GL~d6kL8GC_ zfgJ}|1SA2{a8#g?DIzCoa0!7frC6PA_;UR zz!|t`h7&faxvVi%tWmnYRcdeBJ=7hNAz;E-JQ`HEa7v;xNx{gb%wo1~6`iIvaGPk< zV*~-&fLuVx%OdZ|Jphr*l>2?ATzUY#-R2cVN~P3HMx&!SCR*ZXi>Dhxv?EdjIf4>l zlqFG_MmC2W!8?BDVBp^UA9!zRQG(d*8_OQKvM~Sru|unuigUZ0kNaakqwBK=PMrN| zVb{v}cg{Wa!Rk3~?kc`(b^phYv`&*7#M8sKCokMBh+i^?HpmkbD+l*~f9mhAANy)% zdGXUdbN^m>SAFq|BmaFn+r6pWxO(lMCpTVyZU<3!N$EFjY?NA5A>;Iy*Sn5pJ=B1`3|B(W<8&Nztm^ zRmrpLT9XkQb0$TqoJk`^&IGj?B`k#C&k~a7{rcy9lIMBf z-RlSay|Wk127unx1HKKdx~dgRyV_fMi+!^NpdHq)9qMn5ZEbC{X3c7EZ#S7t9UUE= zot+qlb#--hcXwNzPA5UQDT-uSn&X0kz$X%kOeR+-D5X+G*Bi|y;RezR4BZn9S|Sm9 zH0DmGyqPSMFNBJ!P}Wklx{Dk0P9A}f_ciXOImY;M2P%i=WW3Gx)5WRkg1PT>_T zUeeQ=k+03DW)dtcSi@kCflI_ZIjg_m3aTWp1yVIZYKSFtn!zoc#}@VDsem`nQAL5( z5?nPS)a67&&CF;rs+Y_bj|&eFo-j#8SvJLS*=V$oN~yV=rYN;arO{|0u<_u^U_{V%857($w$f&3U~7%_KvuWwAmkJ(Vx$C9PQ_ zAw**WYmSHPVg%2|NIA(Cv*9T@URAS3wbX3hL?l1}KmZT{WPmAvItHi(hC(p`$r945 zj0<=I(j+K;&>281Al`~n1dE0E0z1YdnglMSou6ip7Mc$%dh! z7MCpyM68Dtt&C(3DK1|3ijAP$j234y<$FpERU0k~c1;_>3C62 zYbDvxOQ>1%&@@s2>3~qni)4%LA#90QwqEySGY=t@%TzGPMj~7+#uM&@$DJVwnIcr$ zU14w|;6x!iin~yjKnjU8x^?`XCwrzJ{J{1NgDkAN@#|}?-nZKK!qC9(ul5DcB^-15 z51`8@Z~c5^VE$j#bvrIko*g}`ozTfOP@Xkw>(NBN>&$*y)C%){h+fz4h zJn?4V%8`YpkGCz^{LBp&!useBj?BcaqvyA-SlqZPx^^GhPVIbmQy(?A)Ym;SZ^-=T zp$P{+@9M7dm&X^W|K2^i=aTXDiP8FnZ?0V0XF6Wl*mkORYK->1a(UXcQCq%$@0O+4 zcdC!|R?fU$dBiec|LmV{eaail&rT0Ndv|D4*RpHTN`LA0hxf1VUp%^GxG_F>ao&6F k;|~7Ebr&aZnZ_OH==4=8cV+TgOI%ppKj=I8;?~js0Y0DxzyJUM literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/gentle_up_to_gentle_up_right_bank_diag_4.png b/resources/g2/track/bm/gentle_up_to_gentle_up_right_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..125c48f498f88984647a4e167f141e48b65db8e1 GIT binary patch literal 1332 zcmXAoe{2$G7{}j2E3MVhNen6~Hnc^>mbla6M%GiWmA0q7j_bt8+&QmGlv%20BuXPH zQ>N&yj?|ka6_q)nI5E}^l^L=!+if^W+Bwu)$7Z*&%_$nxZta$L7?bbw>!0WQ$LDzt zG&blaj-NIj05GwxwpyR9Q?pT(FU;mYjxSCEAOwxen`*LSPEL+MAP@?Lxw*M{d3oc; zjT4DP`T6+;1qD)tLV+M^3`0p0r)eX@SR4)q$9aRnP&7Ko^XW_mQ3F&92)xi}l$gzO zt4-~6X*mz!4^rU>6N|f&!#+$UGH44exYTZtv$WF7Al(iu!Wm*g3*YZd@xGCCR3`(J z3RqFVk|MuF6mf|Yen}=KgDEx4P;iWeFscB60DuySEMl=;CS#RKpH|yV5d9`o!fwCs z^}5EYz-Xzz^)H;QhRN=J7Xu&K_!s(^F zAxkK3kMiz#%AXvGh*2ORfz$-#HlSoh8n09rR2n0wC2nvf8DE->!frw(p*1qAPUSLa z{WKP4$hd<}aLjPPk&bX9@cjz%mffyA<9Y#pPULQExeXZ8v_|@c!Z0Mg_1ClR!V?IF4C#R zMpSMl5t|8T?Pj0b9uBzU(Ljoi!c0o;89wbyLg91`=XjeiH0z)W_Up=g4~7!0AgnOHY3moV5MMlYQ-Z`i&2wGw02D2U*>g-~I8Xts{I%-j2yVE5{4| z-mJNUZSLSYmQ7pP7q0j9?q9WN&x0#BdXKu7JsXQ|=g(|x-gRip)3LJ`M@=Uhn$e-F zty?Y(7#|)jigj+K7U*XrR@Pm)w!Ee6?S1A)JA2w%OLj5!eJxETok^~k9hh5ts#Lt= zqhBfyp4g)(t`eU#t)5?h=)IP=HuYARmiiZrmUf=4o&V2~_F6&b^%Vo2Z*v6B#7jfl zwp~7Xb)LB$t(l$U`&@Uf^UqUD7y7MFe*AiJPIFOh+3Xqf>(l?1bc!3!e6zbm(v^!p ztq|&6H>TpFbM_?P_;ptO<2AWMD=JChk^C~g7%LyU^&!~NNNmvy?;M(2-`tfe*}UQA zwdt!bS2Vsd;b>EG>+b2)`bqB|-~VOBWYBkxsk4<ErOVg_VyW1Q6G|Ul#zL!tb zta4C)+2?c!UjHGusN(uz=0e;1J-_RJ(hvBjbj2ZP5u82tNzs{$S@fW;rlI=$(zSd4 E2i&$wqyPW_ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_1_1.png b/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..07a3333c4969452142f1ae277fac8b8eee7f656b GIT binary patch literal 1167 zcmX9-e~8m&82;|gyWDx+vaPZXqw97ZOOLRH5nU!#;}%`LMNM~6D~8!^0Si_QBR6`| zVbBVls~WUwcT}#hOv?;f*vS>F7_hrlRw09P))827jBgd;d4K)$KJYy6 zd&IxlH?VNYLIA+P@P>6G?fO$1}l9Ud~%; z(N0?RY_(;g3~&g*83L{-z%_)G#S|nB&v$u(28)9Cma%uMSMge;LS>GK@qH& zR7oi{Bi1leEz5wlBI=-VB0$k0hK&e9LXy&vNG_2uGZ`zNug=Ug8Vv|A8Q>{|%A#xm z6Us!W%EoJ=UXK(S+DtQ7pRcrFKY^mO)9G`$1%i~kUWMc1!S=FfE|Dx{b9T{cRv8fF z5Jf=Mpi2uA=_q5wg+e-1GSrHhu2+i9<{V@I2mqh}paEb2Py(Qa0N4i4!l(ib9oiKh z2Qmec49NR{%>yU^C_7<-f;tcLVOWksTL;gKrvb-;0FQ(vry3!WnlGzMg+k1-jC$RI zZ7wVXsAxZ^*v!W=3!%{RVQ)G-LQw(LWl*y4Z zJW&t0VbBFt9HuFlXQ0KkkDq?K|KYPA7#-OxfVKDT>}vO`hu3|u<^5yFPR$)Z{Q9Dg z_QQa9@UPk7Z9Dw$+TUJD52Ws+`1s1Z-mh2aTlSC6&Z}L(<-g~CkQlnS{N~=9o!eiS zI5V`|GqBkI$Cu-^0~1>p^}cjbdVXNPhMVqYv;@Q#wP*u_Vm{7DbM{uVbgybH~sVJ*xq61ti-A>?p}N$OU|Oi zvY|&F`};qcpWd53yXxA|)Q_tU{=JR3dQ079PyLoXb$#yYYtu_d9thWe cSLZwSc}UNm-u)}us)FJ5o7Y|X@Uuhz0}LwwbpQYW literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_1_2.png b/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..934de1995ac09d1cb7b7bb967fe399ebc925be0f GIT binary patch literal 1171 zcmX9-e~i;)82*lN^tgcwPA$2H6ta^_8kkrvMF%O+yW1_*D^heMB^gp+oC_&XWW<>) zFmQn$DY`Q?EO7}{hZ!;j;$jvUXM<;$FwC9qVgn1AVe0*{XfI48R3=H&cY1QsltnP5M@`)QW#{h7E&983lYmIGfZFA<#aX1`v=gw_! zZ=W}B9)chp9Ub%M&qqBT4@G%dmJtL_l0-$36N!YbXY%=iX^vY~)3zxuV0?h*oTBKC zMDS?Ln^b*zn$PA##gbC4sI|Jml1R|!lsPmW#5IY?DAeTyThfE&yljmn8l%)BTG@HnAsiI(%Lj^00)0o%q@d+d+(W1=CNj{kgWeRek z5;v_>rID>oms|{R3jhrRJO&62p);sIPlzQ(t_0PZVl*`qUgk-+L}O7usRn&ni7hHZ zB_UOHrJhSPOZs#r2kWNGO%r60qQeXu6$Dk1($Q#MRZE#nrBJAik2jl52rwBCIznY# zY!MU6WVpsA>!Q(!7Mt3*oo~!kr=gQ{xo8yi;~s(ZN$@ySqYSuC%n#1w7TptIiCDT`r_=fqDCIIMib5nJ#bPq$P0(JQp>ix$ z;=JQL*$8@I2#0Y3rYTrpV1;WPKfTiV*W({Jv}I5L8y-yVY4sZey&Jc#J$-s)=+g0} z3yyyaf8O5FNgUX|=jhoDzg=C?bMn!p3l|5c(Ho2JFBm1(;Q{HrAI|>sblh49a#qJ&WuxI%n;P3|vcAzV|6bCqYW$3}}HHslFTG1Ui^lsHL`S*^y*Pwc} zZG+z>EgtXr^tnF7pt_xR@ZsBM?wnuw)9mo^N!TAA=s7(2OyJ6ro+VxDKOg#YG-&k) fnJ>E5Rn2QddtVs+cQd)Or7Q^a4fbB#wBy+S*cSf? literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_1_3.png b/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f5eb0565c8ff18fd3ad94329040fc27323a29c66 GIT binary patch literal 983 zcmX9-Ux?du9RJ?mT(3JjtNA!5|r);lvVtMArB{X8d<@D9o!^J9||7wGh^`ie!qNPzMn6A zKHt5|o4J+c7ncEGWn+D9E1u8Bb#`ek?)_-{BY-)$eCf)Cn9j`1%+Aiv&CSiv&o3-2 zEG{l$7`C*ult?5p*=&|!XhGm*Sya`6u4~n5wb^WUyN>4_hha3CFf{NSNMf>3NS8`P zxkA_KT(c#0x=PR0{h&S^SptRSxuhm$j67kgWLsyBs)F0h`&}*U*T$hWjl3KV3I$~z zOd0EFm|IT`I_ZgzqcM#p3OY3r^0ELDfP!IKDrMlfNs<=F9Z6EZSR5F}NxO|)7iZF0 zK0`|cr;s^~${UPoa(YXs+G3+8TfX9iMS{iYT$Yn5QDqC7pw*;WTWLF*6Bu6D2*#b^ z)J^e_mLXFFq5`CevF%K*OBP&S3-a}$ZbhbtjwC9rvUoX1)$?3O6?(cHRMkOKAKBH& zZB7Fljl5KvC8<2a7I~p8%XL+4mCN0F-EFr6#~B_UM^S_T*MMwdOeZDuaM`DdL!mY* zSmSapGLI+S@#$cSl2j_iW->VsJq|rI8M2~?96%u; z6njyN<(>ksR$8MG+iE_A?)yTaAeTyNrJ^x(m8F|JV+)Kc(#H}t&S#NAAcI6L201(m z#5nxy`Q$%Oe&EK|rVMZW`Cum|yBlk7Us=6%)fAueUOpq-LBGzvy7Fe?!S+wT5c`|A zXI@&rcR&H;kCaXuRcFqU)W9jc>S-NW<%T?e(}dZp3$cZ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_1_4.png b/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b82e9061820e88a26b61172d11b1f1feea0ecd71 GIT binary patch literal 1110 zcmX9-Z)h8J7=F{Vy{=u2Be0a7nz1-;aGjAIc#IQo^E$HjW-s(A`4I3r4i_cG8=NzY zP*a*poI#HnBxsa;I5q0Q;wa_Vq6QmWKg4m2fa!K(bioA~E}e19pv<2cgXjJC<$d6J z-uG;9CNMfYJ`4b(Q^zJ}dv&ZA`-Ysoth{vXB7hTu$LEgrMu)@E*VpHCI{W+k2L=WP z2L~|>8yXtgv15nF=krmNpW|3jzp(vHgYSl_NnmR{fA!bD3J&BN4lZm`attPp0HdHMt_C~5@>)m!GfP+Lr zj0H`^3JO+EyXpmZr;4MNA9W?Fi&>3b`5H=!_dLnTvpGV~~ zPPu)o$1ivpi3liUC_%{@qvp7z!DmXMUX@Hc;-ztaz{iLrFVkU#Q&K`IFXc_ev=S9N zW3>v6ZrR0xTLe!8ym25jjLv%kMIu~g6)Ti(sCrwgpjCl%%QPMfkm(Rpkhzj7T1mN{ zRhve#UCwqb12royH%*WsijJ^cOcc|yoQuVZ>2x`tw@kB9tF_y01h@i37NZI-u7rzK zGSc8u&9L5zmD*aZQ*3S5yJ&=TxoD3k;Pr{5UuGDU7gADhS-hCeY!r%i#p*Ozka$cL zT?xsnMaf*8HBw?J7uhfp^>VINuXH-M5DO3jPysXm17HK7i2>?C;80vehK}sIK!8F) zh6OVKwg5;3qwZldyR_bP}+hzmR+k_ivFBb5-!mKwcQt=3{C8ByJQ8F@C#c0_T z)M?N>k4!)|Ak_0B)uVd^JQ>e5n{+Pw2x_&;g~MVrD#zmr_iz{bt!}#IK>)hs_4}wd53xl7}-+iI_?!C4BV~($$_~p>wj?KM$Zw85_Z}9)# ze|$X{xc2guYuo+T-~Oot&iU~r=eHnZwHr4^H#eEf_n+~?*4&=ob}lccevRHexn&$S z))#i^Z@sqo$_J+=c3(Ju!TfS!;>oeiW8@zPF42X3{=oX~w0eE*o$puvIkYfn|Fv=9 z-c@ex4f+&6{q-^@9z1(wIHY|1^zVyzo_lq6I=%*@VPfAI?p9}U<)~V)!w#axnSFNaVPdeK2)wsz#@fJy$?b1;WkeFnK5|Y_vQKWJ`X(a zdvSFod+@-$2LRyU@)L_Eqj@B%xtWQm-*aR03cv)cKDo9O(Xp|y@$vDAiHXU{$*HNS z>FH?VLE)@E@zT0df$4OC% z44Wi{G$Y|zg~;iYY%pqrD_eZ6Bbr^w_6un`MP@UMNboY9S2(32RGL!LR%}mq{hBvw z4fdQk3keaD1xRav8yMY8X4`n)VHGb|9jIntxM)Kl5;C1CWr=EzX~|qi6}__Dud73= z960qo&q6~to}h6eN6`hAD~V!NmK&u~yIOUcP0zLmy@4^K zAQ6y~L{$oz0Ywu0G-CNWIWHNiz1~JctbCmHN9iiJl7ieE(!-U&m$X< z4+uqBR3f?CNR_q5a7Z`mx1n~sTs|)ri?XIE6j`RpI!jp`QGt(a!u+yWiAKJalw^ z`tCDt9)IhPo14dvjJ#y%T|Lt81 z-1RdHb1z@q`e*r*N1YGPUH$LSXIo#9H!uBsR=ZNWcI1OiIJKkw_{ewjbCFM2URqiF J{KO0I{0~puvqS&@ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_2_2.png b/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a9a6769e6b4959b5639789e35f9a201a5d58f2d2 GIT binary patch literal 1051 zcmX9-acCQL6n;(GUc0O$7%-ZMH;54Hu|;>38{Fiy*AeH9Ub`F3Mvzl(F4Ul>oDe18 z(ME|Hx6?+*FqQmq%s8TESmcz*f*dYx5lo zK0c0N*u=!d({XHL>1MT2{W>(^&$G(;k@%sBv7AB4vf#$g+)Myj7F!X0C7R+m0Cvfk;4_ z0ZqUvGS@O_B++1GE1vHvx}%wBgD3nF6-vj5e4MUGY+Vtotkfwg zy=vBJ6t}G^>X}|Y6(Qmzm1NkoAmk;flup<3`9`^H8Ai9=b{q#mNQOueBP(9E9uita zvdiXr3B8}LJ6d~C>+f{7k%#blsX!oxhXo=k(X_(xIdQlwQ_B~cm6~l@gDwLihbe+r z6>%*^lrl^;C)7*HW>xJpO8t&G7;GU1AP%4aXaH4!CO{7ZGz8D0jDo5W-i?(^99}goD zM`{F>NMta`;)cgh?e+Y5`v+b=IxoOuzg|5xB$p4*J$~%K>C-=+xa;*jyGIusb>`YZ zk8k|MbH2p~-riInsRd7daB07`=gOBp{LyQ_ymR*c_37u|^sTQg`F>ja{NdI7yT0{B z*QHwYOgXlE{6FXNOQ*gMUVqZ{_tL)K*1!5>_T%o%ap%KL*tu_Oer4*`{*{&WgRA)) zKc8#QUO1oGIzL^%=Z|xnpWglAl^?!6yKnDeYw9EBm4}v}F9RD_X{U^e5w6L z@ZRZXUo$TrIP&W6yDwb*Zuzg~MXW%-Zv;ohZ{FhetFvnm3 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_2_3.png b/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..60ca129964e3a8eb2ac8d497c7830fc4a242ba26 GIT binary patch literal 1001 zcmX9-L5SRB6n?w2yV>o!PU$F9b`GgdZIoamq!Mc=S>zsxnnS>dLp#_&7acK&In2@=R){i{754C(rSQG?_%82z zyzjkFFK?Dsj;$U8fR&Bc*0<7n@+cNFX&!y^>s^2hT)wn@F{LvzGqba^nM`JGZf<^l zeqmt&!?4B0#igaCe6d)hX^Q7LNfK05)^*J^&33!n@4G>;8%4=jkGAPUQ}oU2yx zTAgY%*>*?l^%c+8hhcL(v3U|Jv&)*0H_EuB5?!6%F?qjT9`?0p(1;`ZAPGtZP)Mk8 zU`bd{!~AA;)XPnW1r$?gs-Qy)p`ZvL0w@@!WwS=1U=f7PvOA(Us8mLVvES_?-!IU) zBA2H`oK=XDMwSg)wOGBwn~u=(Bzvg1Q3YoTRH?{Hq@Xgg#%m3+(N(&x=7vTPwZgbJ zKJc>~JzfhX<@lJ*6qX!(2hvvRHjfXkv`l8ROg>-2ixNqxEUOD*LrI&}`_0y%*N=j5I_5wTFkQ+T3T{=& zPMvcalGmvW9Ao5n;!!Z2?jsJM44?y801m(aV1fZkA@ZoMBgaP3NF+d`p~Zn)f=C1; z0n+lQNh4cCZWRq1D6-+mcm@O>$|6=(^G1zqS*4z>dY&1EP8^3Q)hbkgt}k;|UbJz= zCA5gO64{y7yo2`e&>f>uLgawKu@aS)IlL;-^@?B_Rl8+)PAd$YI112o%m@N<0Y!jN z>O~`!dxU~n?@T64r~L@}aLCKDRIRG@x<*qbL$x{D;b~u>c11ES7m+zv{p=U--4IS(KlRvrx|0>(Tl)#le*D7h8*1{` zgD; literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_2_4.png b/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..52a22fa1d2b3d0c6aa489ded4590378d2a8f299f GIT binary patch literal 1026 zcmX9-e~8<36o2Y9~QE%(f0smp_VxQS`+A5#eA}11ngt;HE{2oO;u*8H3MzkIz5v^LU^4 zPAxBqGrRWe0)UytrxsSCIu`{#H5TOu?>TV}U<{TI9@-z#k&%(n(b2K7vGMWoiHV8H z$w>^urlzK*r>B#tREl9}LEsfd(sk7|jY6SNsni+`uhrTL!@+RK(7b7oa2xKg>PIBm@fGX#s%Vv18JNoQ3@>RV{1vVL8?A)1nE-ObOv?{ZOBwYXYrg!mC{^Y7n-IL6!cET?74-3 zU)c^^)N92PEJ>vqHp2@!MJefeHJ59YN`9>tcwTpFYcLofzzrZP7*mf6Oy5A#47)sN5@srKOC#(o zRn7BmQE65)o37RItNl)EIJ}N{fHZ&!U<0@Sn*cowPy|^(c@wz~3Oh0h1_NatJP|?} zkOIg^q7s7~8F^XME~3zZTgI~>36Pette&)TRM{5mj^1n*g23(f0~BfD8DR1;-cHI6 zp?Rbca`r%Vhq>lLl8^@| z1cV|lijmxH;Dvm(*JG=d+c4X0K~c7y>j;L zxAfEhu8SW7ck|fAPhy#ujO57k=l5Q_Ab$P&0rKjEy7$q0uNn3~f6X}0%|7$%`i(EI zGG8!fxVeFRgsH`w`}=H(!um{dDbk?BvfM ztqyMg^N$V_|E?@9ky%$ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_3_1.png b/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8f80fe318f560a44286b09c69c6705fee877beac GIT binary patch literal 1046 zcmX9-e`p(Z6n|~nUVqp{$uM&fqeeL8)Dup*!BKAAwTtz%H*>?-<&PUZG`he}JS9k& zHyR}y89PRFK{E(=oB89!fK|^DA=9h|7UbNDWb6i6i8DgM*yWEXE&F<7@Okg?`R9H3 z@Okg#f%)*{`0jB4n4EiYCgRSA-SUrm+)nOny#e5X11}$(b?Lysz~JDZ$Kx3q8X6uR z9vKkREXqtMykCn3br~;qZYWd$>%Df(U2@B9;5?gIK+qqFViuFQ!+xPC>1TmvbCC% zvpc0$zv^YdCxSl?!4%*+Mi>3zG9Ih4iXF|iRHLic(6T`IWIB)x6WJ(JlDUd1+G)9& zSKDT~Tg~@v6SZqzAB_`HijK2fQWUeYTu3I%*=)5~v@NT(w$|--5d;*#^B7g~a+QGC zAmS}9(~cRPWTmUG^~#;CW*k zYJ%1Mf)SJ~TyYq^8#8;!N`j!>^L>l zYtcN9EI(iooEP2 zL8RfRKp~4oHt!xk{mjJX-5+=_GB3j3Kd-&%l1pAw zJ;Kt1Z#}j!{n_YIZ85Tab#d|In?Jt$<=daD=OZtjyK?=Vv*-Hs#>rc^u6B<6e&~Ux z7MA8Vw~zd{Z(x`1`RI?;sqbf->#toIoctkr;}`$p_73g;;t}rY^~W#l`8M*z zFL1wjYHD%%vYOg?^YqG&?e5CI&*x)jP79Y;e;Xfo=-8{9=TDsa>e~9*PcI&N_QrFs z-~MpduguT-!fom3Ki6~bPi6PNlH2;`lac@XN;rfBO+4-5T_Z?pP EAEa%^SO5S3 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_3_2.png b/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f34090bee1d10221fb1b70a79edc7755ea915e78 GIT binary patch literal 1060 zcmX9-Z;0D;7=G_>dh52%^|+$_kll*QBuI6EMOHNDrDt}FT;{S_Bx1xcD^v_FCsm6^ z>|y8nA!rZ!p_A&uEJwC0dSE|vqjMEbESj-Xdm3ETqCw^;(hpS*_A_Jfyzk5N<$ZW~ z-uL~Z3*3%v_iY1!9rK6d$Gkc1)s%0<>u=1B9R?VIqfZ{6^XSmf(D3l^$jHd(=;+wk z*!cK3hG9ORZ(?F16p2JAD$25qDDsLTX_}hNW{bsgwOVU7Hyo$e?^97=Vj%E-NeZS? zcsdi!a6En#~k#UTo_~$ z(hL|PR#CA=KG3cN`>il?qo^;VEd!xu1V8|gF-#2v^l;c92s0L26NL3-vaRbk%VpGP zgsEVJ2}K1wCKH@WCUi zEi&0*b6v@F)AgRQ(XYB&?E&(WfdCx}ad<=|qe?8M@j_1amSw8>!g{6ZH0^$e0hz}% zF`&!1ks?bO#>$EHQgYqW+l`XjZua{(5d)9_&;Seo3t%0fivjW=uqdM;%S29FAV8&{ zz(9=yM*t)OQbQ1ncHa1~Rj*R!^5xvq^ot#A^k zjGr+=f{DvDLUm$BPqO;y`k>g_s&!DiM+AY!F)kXA7(69XnIv!MDYKy0t%BXOT&Icp z9h&D+4Uhu}d0FHqK9lToQ?mW~z~%3`SoAKeg0HxWTH zj&uT*C{$yR&3ngBKj{DG&JQdeTM%L9&&?M-a(zDj`0@Q8y!D~9+T61}ei>an|K+v% z@)Yx{`|~3wc3)q7?4cKSMx+B*o@sr)I-$L1P0?rm`p-R7GL}xhUO)2Ftx3Fm|1!1r zRQn`xkn{ik&G*)$msiNMr~iI#Epz^hdv49_@sC`~eY~F=e&-K%^MR+n8~sZ8$oHnO zv~%`E{K8^;`P{y}uX3lcPlCf2SKPskS7y(CwkvW-ojx^psla~y+PQ}_`Grf1x6jNh z#W&Me@BQ?pl^fGne%ST&+rRAoQ9Cj(UB!L>KJjhqVCsUSj=ucc?V)EUL)-VwADHyq O!Tj7pe0BEucmD@+sK%WD literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_3_3.png b/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b3af42abfa1098f942e8648065051946b1acbb15 GIT binary patch literal 981 zcmX9-Ux?du9RK$I)2|=oyaL%6@gU|Q-;rsIaeBkr_ zUOu~BT03#-1OTjUJ-4xw@tLgdU!KqUog05_0?fnN=g(yfxm<2;Zf<^leqmu@adB~J zX$ixy<>lp-l@+2`EV3*kih`m@hM`%O={QcS)#>$uFdW5kI-9W!2t3Hrs;1>Dl|r?~ z)Ej)OEq8l*e_#!x#$@V=G^X;arbO6k!8NFk#qK%cprsCbX1rfdV(%yoOC;ztR0VJq ztZQO}20rfQXG0Pt44Uca*hMHT0>}V5hM72SlcY;g9?$Q|@_xBIw(Y}C2Mq=!n=c9k zBNup`Dw(uuvxduCZPD?iW?%7!dJvZj9Lbc5yh2L`r; zEjfv%@Zix0|I&W}fwL~{mzH5kmONks~+_I*=lMY%( zk&mV!p64i9Wx28-Ru!dT80~7c*JunnohS$;Px;zow31V)@wBPyS+G!W)lH)39}U3)(dWhZr23A zuJqgGecv7r+Q~Sa%?^) z$5#Km`vb4;Y%B20Z$H134bIlav*#Z9;GHYy?+YJ1x$zY`c;MP!kAC#cPT{Tc;04*MC{qgG6Hov8{^6b5KVIfPeEjsyH$UCc;ulNX|NIn;zkdt=(tqv1zNuEeedEHlU34`% azz<)!-h1-=slPKju(i3p@%j4h+y4XEXR7A_ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_3_4.png b/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..9e6d96a4878ff4536b62cbb51fd95e178098a085 GIT binary patch literal 1050 zcmX9-e~8<36o2#>Mybm8f z?=8=TLz6r9>;Qnt*#p5t?%eIxp0OdfpF4KqGQbeb9Xvea(t&}2!NI|yp`qd7;gOM% z(a}*1!^XzO#>dBffk1$!DW2yfNl=uirm5+4I-f6=%T}$nC`?r4)r^=a%0)}H>{QLk z*_~3WU-fX{mB1GRJPCx3F-2dfOhl`kYDcmy&FJbiv>}pSh4CjsWH!Q<6uzQKc3NrX zwYHh=R`Y$^MD3c#%MfIQW?~$lkff}l6cUMYHd`$gZOdwHZFRd{1b!8WJVuv1e8n#{ z$XJWdw4+8RQR(Viy>e%}*+&zk$HVx1Av_?Fl)|!_AZBEDS+bnX)k|fkX7^eg$O5KG zo|KI1ak7x)%#2hi#Oh|MSuJ#$wO;Qw;s7E58h{R90@MN87$6rSkCGZP4dgUM0#q7u z99SW6L_iWC)rYb)GDKv>Q6qyK1MUXTfWSjU#NvuCl^}C^sAMRWO4_!~PRB;BmOln` za)Q%+qJhg6p*pPIjhekgrJrwXTP@V=5?)|%EJS&t93GeGWK7UgaU++im^r&_r8eL4C51E+Ui9J%pd_}OFRs_)wu!k> literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_4_1.png b/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..93e19d50b7032cedd364f76c21436dd853968745 GIT binary patch literal 1289 zcmXAoe{2(F7{}jj9k;Dp>g+-Z1?p%*2X$-UBqv_X$!?WGMi~cmqmc%St61Vi8iuBjI%-m|NF#NWq{PBXGK)4ZY|l<9;?3;iaUfAcba%38NaA z^}tR5fkDDN689>yVPz?$h6MvGncx{gfb)uYr+XAFpq&@9hMIiw%(t0I_sqIF+m&L;z z8M85IH<$I>@}j#K_s^t7m`^B_m`=~4n1vwi4CCdvfZZPPdgH-hIvUMoGR0yM0yPhG zegq9G$e5Z*=`A_ZlQ)G5_E=HKlp=+>>q~|s zQX*Z-5x`6#Hb&tzYXqx4;2=Z~6AM_9qB9#06tam@X$lemumIQq5C9MXNCJ>Y04$3p zp~D8n5R|gC4)7@O5g=*=5)B{&Ag_X66ozORwZfDKN+IwRJO(Hdury-jR8G6zCm6#a zE*5jA(_*2JhGj3c1)vT&A*kq(#vIl05-t=?V#ywx@u%jZIhZZ#lmOEpMuWmcXsitC zuuy{28uB?~qA#5g3sM4>au`LyD1Z`xu*||!wtFVE+Y!j;v4H=XY^fA!GBH*w=Wy_- z!HpUG1S*nfoHAr+eSy_Nvj#eKFo41+0n=3Z__0>`!>2#6x4)MGuTB2+PPvbEcdQ-g z8XP%k9do}>fAD8`Yq!|HwXXT$%FJb%Yu(w=**Ea|;IhJ^MMGw)V@k^KF?`>h9RW)&Z8KliKVY-PUj{o4`EiczNR zgTr!pEAiK!mI2x47f#*iJ2bX+Wepr8z<6TCr$;2v-MNahJ72C&VhyB zKUq7m?e9+;o14aFQ|lM4lD@=8$F0g~&-XCCA-Pmmq#^aUa)Vh7U-nB%&Vh`*+ z`sAiKJjmV~`pkC!>+$7xmv}wgYS+-jiMgiMEB9*Gdz6#4<7^H28`9Hwn0!6c(}tft zI!ZnIWc!jo2fJL4-)^Fh9%>AC44xkEzVaxxrL+I^?DT{A;?9=pYs+PZ=F@El|G0Y6 zJ92l!v5l=Oj!ow;ZPRwK(;v$&4<9;mB-`FG`=V)3+@Dvq9j~ugFjA^p`eSfY*fsTC z(+=6_VQ_i#2=~Pg{jS}r;JI*cLH(-Z;icsZ+gD$2`nSvzba(c4oNs^2^*<>f BIEerN literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_4_2.png b/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ba0ad07323ae2a496a5d87239adbf5867e60d43c GIT binary patch literal 1278 zcmXAoeQXkU7{`D1?WnAwhAHYr=}HzBNo9IYGEaAHuMMrIy~b;0DKog;DmpfA6C0wK z;KYSiww{(KDvd1O3`SJcsyNY*NM?0(x!Ag}N#c{@r86_nprKP21Wo6~% zECUT-iMj>Y1s)R-jY3kA#w2prIq(rQ&Z z99oy#==0;j5FLrx5=m!T^k;JdX+SKvlA|;pit%EK3Ni`^C>e5 zYzE*W0M8&14oUh|nTWcOMxktk1si-9e=y}8x)|g{@Ym(qZi$CiW@_Y&o(FQeZLS1Hq--1V2 zGT~%IFPjNEb5U3`Q2mofPe}6_>eV{=je~ zCZ)temH;*iaWX28P0KqBAvY2AF^Q0UIO@qHLvkinC`>{E01E(40C)hR01N|=LjWv_ zCZXF2qXLvNv>tF62oNA{1`-V*10bh?ehdmUj5}c32PFZ#25$ls2`n_?U^O0>A;6m> z0-H#9MKLPNA}o5Lc7VB+1h1h5tu3zSB%IG%qXk!DI+%VL&%#VzuLdS9Vm7L*gx0}e zZac+$974d8hz7(|RF+b(kTp>hi~}eE2#YLyMY}gbz3xyhX9@-1$eB))Rx9Ihux>Yp z8NDWBkieoOmZXehv_ZD$piK)sdKkiBoPZ)#JbqK1a_aRDY+u*Lfco)2HWmBRtxXLb zEqw<&t(W)Kyv0H*y1+&?bk!4!>zW(Ru6RoFtJfT@=$ts&-G1hSxHb2z%Xma!^`*IyM9RVHoEBe+{_)bB)wPx6c}@A=!Ll2JsAUs{*ko)$kolMs_}rG z>>bfH_KtgRah2Qn_GZO`?!oU?)n2&htNC&XZtV4*RALwI-N9>TeVD%@*s3R9kyDM! qF1=bcJ92$0`#`e=p1JzMH-#LqOX8#P^5;c}ptZTJ>1^Z1J^urg;y6M8 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_4_3.png b/resources/g2/track/bm/large_turn_left_bank_to_diag_gentle_up_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b4c207b685964268be873ab1ba4893931a693575 GIT binary patch literal 1000 zcmX9-Ux?du9RJ?+?s9)PgDb3_Wt6RA*n;LHa6$4AxAcfdI_(=V8m04D^lTPKQjiO@Au2+<@@=- z=lk6~zbPy)KE4P5%Nx&UwxWqgbz(ji^>fF+`3)cj=U=$69?_|(sp;wISS&U(Gc!9o zJ2y9nVc7iq{KCRQBArgtG{y6rEQ_j|({-&}F4ybLcH8m1gCH1<$20{T3zE2$%f$wc1L@)q8$*Ftm6Q%d$(Fm@u*_Qze=@yCrs24eOqv8?vFyGib@TbYVH`G_$aRx+ zJk2F2Da9&;ppjXFR!vrK@MT-9b!4ljI6*$eBq<@y%A}|=IgQsUQl+Uh9nJ9#FR1xp zYcO$f4&pK-@{lS4VPZ@(A+(8{%V~bLI?%0=>7jjzjH^ttD3H}G+fwvQoQR>$ci~=Z^;*C?clIxS^!X z0@)~Wc17+q@?G2LyN$5#jmL+G1IPmC049J9&;=M`fFejdD(T3!P|%kM&}gV};0O>% zfMh^g0##{bNysUnUIhgfJP4ivk%z2=71V@LBx|P7veZte?E7{Y`Y6&$=7BCPab`lY zQi?-p0c(zO_PE%Y)O$zH0QE;i9GDa)Pq^!I}wcx`J_hUb3$;Zj6yY-G+}c+V$mdD%jm2uKe}H&-kk8hlQar*sl zw^^xlxOQbNWbb^xx4(*S{kgqD+O~H@&2Bm5CP!?r!GgC?LL;XZETc0A zD^N#)14>e6krEm$OJNm3F3>-kc+>gr_C|z@)Cu_NBGjT8n3!bhUhRyeSQ!gYL!4I%;EGU0r>By-ufVXlQ6`Y}D)Z z7=|@9H8nRko2*tVLD*@U;y8xq-G09i3WZ{^L?$CE%BZGQs#U@c6bUTT;&vN-K1(2I z4@byYoK0ms*_=PGMvA2*jbkpdMPN*#%Odf%gr7JWqH{46WK~qO zs9H`H$8!b>j2xJ}UcGh=h-C_!~aivDCpQqV~jH}Vd1z==m(WQwP=eohVX zg_ysT4pnloaW#!fioxix;V#1ArRV_1MR-0Q2xKCWTq2>$a&dIDQmG&?3t)?3M9M&C z&0HS$7U^)woh%2k6=}4ZDL*WXqZZs?aF|R^ik00|}(AyAS zws-j<`TRX)$MV5bUH9ee)HgKw7PV@w=`BXjB|Z~Fc8-}CQo zUfl5YyGIwC?^5iNbW=k0`< z#v9?A8_p~k)Y^V9_8Hgoe)8h&Irj%%-u=>kw*U62^-YuCpW8olYvJnNW7cbQ&UE9K7ug%)NqfNJ| z>r~wgMStMc5C0S@AJ0GBc|(8nx3~6PgUf@ui&NJ;Gn5G2JXYD>bA95uI~)4e95`@s z>gW19yB>Tor6(}$cxlVZGxer6v99Ot>3yvy`Wm0ux)BcUnS5dI+?D61A2wgr_5Y{q XD0zCWQ~`-Li6}H+R+iaj@tPmPv+Zy=tsc zZrjmj63S8XM_>_C2om*hnN|oGYLHV3M!jvFP3MVGBLC&E_p5ETxzP`Tx{{Df1 zfx*E+48w+ohK7fS{lQ?6rYWB1BuP*dS<_U*Ffy53u~@S04cBe8+cX6n3!>nWWnV0Y z#}iaC#b&Z%p%^Jww5pS;H}X7*g;|d(`1LSuDnw4BR}H?B30I4%yPj;i`A*9Y1t3B~ zoC8zB3My7fd20n$3(~u0*C++3{$;cJrFPnBG0m`qPQN7)^z<=E{7_W z0PPEMeoDmI2oX}ruudx`t7Un^64GTUUyYR9D9!|^P>_{KL1AQ-SCe8g7s-{>lB3&h z+G!T*or;$Op9KCW;0Yj1jLG>!MMAD{suNDtwS3F8(W*%L6ebW4k*P3SQ24SYIfhcp zXbsC~RWcpNLJiyNV+b-#Gf|F@OHxWvvhjE^m8#@&PN`Ji*l4v{2m&e)8H_G?`Eo$2 zlF>S!Y{>a$yxcN3+QsHht%E$I*UR|*Av`FNl)|!_ASNT-Wr<=cyGv)k=khyw@%XaFXF1+Wg#zyNh2@+hGpE05foNPtR1 znuAgZToI52NcE!>jq)NY#ZWbg+&tV4o&kY}u!zMJzaA&kW~h)?%4NfGtY*_eU9CVA z=!Aze{bC-ElnB*j&6aGnKs7T8r=jgJU7eD|2{Eq7zZU)MNRyUbfPXZ8cpR zwd;%^pb{V#5b9=;?8@Ciz(`~p4JMnp1Fc%+Wm$^FlteELg^w6$9tVNd`4z!uuh+V>s&_eptaYT}8x53N}v zeev3kAC!v@CyIQ(sXJ8dx8Jpzpbw>EkE9nub$mJ zxU@3nH%>l(`L5rm&pmw4H`k}$n(CjQ{Uf|bnYuQ9cy?vcILhAp*msYdnVb)d?pMw& zkB>&*G44)|brzrg`Pbz6_iwJ9pL^}=9}jImI=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_1_3.png b/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fb125a9a0e92036217c9b2a510c5d9aa96504397 GIT binary patch literal 5410 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_1_4.png b/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..dcd90c0eaec97efddf916b4be4823d24d50e4818 GIT binary patch literal 5182 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_2_2.png b/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..251476d3532a8d2dc3c050cb22b09314a37e9ff8 GIT binary patch literal 860 zcmX9-F^HpR6n-=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_2_3.png b/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..242cb02b90d4fe80c8aa9cd004946ba753c134fe GIT binary patch literal 1026 zcmX9-Z;0D;7=CZ}CwDtXc9z+>s#S|dFKCo(28@!q+*XgsWxEUtMvW|JKNK!XJPVdB za6!r}k{$g}q+r3oItbWpwj*X3t zkB?7GOkfx`IXO8sH5E^#QZ!BRJSRzls>-^qnWkB()EW)f_uFCE9}H*;I2J@FKSY)a}_kiDlSnO^6$rq@@xyonA9}uaapsv~a5!h4xP0PbWYj zAD=yB0!z3P1!VLb)l~EyWG9NhU$1Q>;V^DkE#WRuqdhrRHjGVEAD< zi0a)P59c5zK|Bk|0uUC))Z*y|A$yz_WJ+D#?pr=u6Ums$B=Tvplws>C-_)hRR67;D z=a_x3vJ*I{=i@PkATu06KsL-~em^^e{j}h&(Fj$gxq_5ed*}D0ASZ zArt{gfV4O&(a08&n?tQ43T?O>JOcs`84=5=aU)Nbt#sX1n@uwaoG1#=P%DuIx-iXI zanVjHE}@02)t8+?zPVFr?Ydpm=@T(vl31F;WiFYM=t5SojGSFInoc?JohbCtpvwpX zash>a&@hYQQ0^WQW}({aG1baF=&cqn%Tg|<777|onG99oXosggfoh9nlu02ai3|c& zY2a1aY2Hkw{E^WB$wysUOD~L>e(OU`^`u1J9_GlcSQJp>Er#^ z&CgC;`=s$RZY;ca;tT!F-tKRYB%&3sda!xy?{f!VnEeL(Tz{N&1cued358emmAF3g{A-U>odQ+c$pgiapU~bJI{ap*42+*VmFtg-OV;0 cQ?EtwU;X6^+QrWD&^yc@Uzq#y*xM`r1ACpi@Bjb+ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_2_4.png b/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..c77fc1f26a57559cafe3271a272869994d6804af GIT binary patch literal 1050 zcmX9-Z)h8J7=F_~yLNSEl0n1>8H;ju=Nh_G4?NiEt~It-dbL-GaA?G<4SI8jo*E?| zqB}>>Y#uh#dv1Ckq@VK5b2FpjpHWSh~1$@Lx~VsKm5!XJn#GRe0d)p zp7(ukZZ@`O_dUA-V9(T(6Z5@E^lINwf3HU>54{i24|6jMlRfJ5`TF|$`uqC_1_lNP z2Y2n-g<;sx(9rPka4-^ykYto)8A0GANmNxu)3idNRH<0Dz2Um;PKS&FLj%u^h+;sN z!>M#Mo1+UwzFbLEYiixeHCqNtU~zgx;ewfXSeNjUO0H;Ztq`wQ6n8c2xkk5b$3l=G zAjN<#U}XiX<@}9upi>VaFN!(|w4)taonKk6`o&BCL5W|R;h$) zwGbJIFu^DvrW1HfA>tWQ(rLBGY9^Pj3PwF)xydjUipCDwC;QUrH`Iib7n4GzcIadYW&kPXL5T_sB6dPf{U9Edyiar`P$gl7vCS)JS87K zdiKKXUq6+OT#Rqu{rY9!_^*H7Jm;Q2xxM=By4HQ`>g>S5cdm_&9r*Z-#TPmIX-`nq<}E+4wLX)he} ztg)x|pZ#V0lW#s)`tiQQZy&k%_3=CYUe2N)HeYR}|MNX)ZH}I#{`j)z38p4zC%!uR H+=>4I^D52D literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_1.png b/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4e83215176dc9e1227e16c7b690007733a73f166 GIT binary patch literal 1226 zcmXAoeQXnT7{{NjW49Ne(*`Owu_GNh$U!Qej^c}NqQP!(gZGtf{G~t*zB)G<9`#vu4ez zudl~2tf8Tyv9VEaGMPxy%(4v6TLr-`Nut;54F<#Ucp{yiRMm2&LYjf0fwMN-?K+ps z==PX>emWT9qH#wuC1rE|LNUS;n2l~0t$NvJR0KRMk;7g#6|`mJqMGrQ)W~!>Z83m@ z05<~)k3~f+<=5t;x=Pl7N@i4Xpcw_Bv5ih3hOO#+@4~@oXua5B4s6whB-nfPzJY!@Z0F9z$PU= z=N0lnsTlK?Q^Dz63>DK_9fcD%l5#Svo9F$45OTZYet#+)&Lt9s$;ooLjKClQ9>mC~ zmQ5P?Ea5D$zM?%+awp5mWF=mj$xowZLaU|pdW+G-6J~*?B`fE1RF`?;{y-)gSJSyl zfdPjVlX$J{Fe)x0WpD!NX=W5X7cn{#xTw-f*&eI7lheWMOrn7DWn2f85wn=JcE;%9NsrU2$gW60 zPR0VcbgZPNQKdjxttbIV1%#?z_^P;jGI%|qVv!03?@7vLS-YKgxde|#B+XvR9AwBC zOQx*mNscJlOvqtGGLAwdN-!vAtsXzMtohHoKd^J-dLG(uTsf8b@Re`&;E9}<;icBcI3O)EC>yZj_uxC&~_dV<2P1pX!~)`5Y3G&A34>#d!S+N zN@-->#Iijs)a>%DGQ80H!Pxm1`z9WHUh$5~KP}+lk7MaCSGA58w-4e(``UTEZLc(c zcPx3|)!FQ~bGEin=S+u2f0;Vd`O(aYp23ZyZQ?Gfr+upCoufluxOV&0`9+^DK0zFB zdijT`PrL{2e|N0*;N^u=nZX|2aLYxY`j_^de8knH{d#aGwx#c6`&;AdB0uj~c=Vx; zr|Gk=P4uYGEx(4nKez3`rM~TlMjDIrTAmnx;A2htnL^jL`hmkOOa6Ylsi$jv%kgbX zrfgO4#XHxPmt0+M)U2R2_=oeCOzb#&tM>5)%R-NGUkvRIJEv}CuF2rMQPKYO)zZqM mSKs?5``?8-SH$+q|6&&gyDto_9KT*Q1iDtQ?>ybHb^rgf4;YmI literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_2.png b/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..251476d3532a8d2dc3c050cb22b09314a37e9ff8 GIT binary patch literal 860 zcmX9-F^HpR6n-=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_3.png b/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a68968b1cf3301162d7cfea99e9e10f1ddc5ea41 GIT binary patch literal 5443 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_4.png b/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..076632dbf442304a82fbd8d96f2b1251b4ab2414 GIT binary patch literal 5378 zcmeHLeN+=y7Jncb1eGe=qD4y@s?o-fj|t?97%(8gh(UsaqK6KXNr)ktG>L`}HCD8! ztW7Jc*y5Jf*u@noinURr8{0@}7i+Yr)MhCj(Ng<`U0QKbclITq;@O_F$8)y-nKQ}E zyYJrLz4v$Tdna$UWG~DZAMtDi0APHkJS_*_+3*`1J}Mw_-A#cvZ+ULMH3zj(O=d!) zE5WJOG80b4OLZCmO20B>`zLy-}4#>BiX*pK#LZ zS|;URyaT@ac>9v@aWg(IE@|C5Bed>0P5!4I$uv3f-2A2d?zz(k0SMWslgY9(WwQI} zz$A9BeM2Jmrc7-uR2|v#G)265rh4DP)r%&!<+RfBXBsvwnYJL|-i8_DGq+YduPig& z#14IT-o-KO zfz0xgO`9C+KQdgodc5hgic{AouBN-Z^%7%iew2`z{#g3kdli$)EqSoIQGepWVBMwoFbFM*f9W~P_wR&!}{ zBB;q`wMLYaHg6aLjwG~VtJNf8v1~S5f(=O^%vu&lC={~TTo#whgc?jsnbC@tGL4q_ z0K^bR8g9YNI+ImL7^wkFw1`+`mC$H#o_aq%gDETP0ld*N%mU_;@MI?Y3}9*He56HI4hAkh2)?jzdwa}O#*t*k6j8iB0} zgqN8np#}Vl)C8tei-M0rOvvZ3*&HTEh;W%aA;w{%0u*7Yaek5p#fxwaij9EEG+L~v z5yJye5IjK#anwmXl*?sfOav9GnLIAWW(pHEiA*-0#723ENr<`#9RZ;<>tI)+B_pE> zK&c@VClTTEFc?E3A7?Xp8m@pT6tH>BL>%WMLO!nM@rR;OW1@M4*?_`w>I|qBXPJ!J zppO9IqSWk635}b;ekjQLCL)ACJRS#S7NHt0GfBun5^)}%o5;Z*MYj+ds|_{dsanV*(>tl?x?fgR(1w#lsj;v+ezFk*{=c0)3_b-|sG^h(JZ`n(yjppXG}8Sth2$LvNqXY}Py$d$p%76~_Sjelo$eHi4=a^zT5YG@{(XHt>G8xO z(ect4mNHIUNY5Y`d3FSIh%I%p%0@+vTjgvobosS${8&~-yjaChVEh6?MpP-Q>I>^# zgv)35`fGf>4c!BtC@F|mffy}_s{nKdgOD;wU(a7%05r+fUlA4@kT}S>5M#tua(MdDpfUx)!A&#)zzN*dY{YH z-OrV`4Jm;#CY5 zCKg*1%Bn&LR?%Et)7H@J_xk#~rJztjv8bZ#g>eo&qpm{QSfz5;Y1^Mf#l}Piewb`}?_Vh* z#;nN)$CoEPzv=7;`@dd1eL+u+zDm%Md*r9ZjVs^mEgPg+?pnM0{wbcI-{@JJ(jMs#M{t+#zG-Q%RM`IaJ*3W9avi3q+*r(USwtie2b}oG!WBr1&izzD;Z(Iz! z8JoR$!{uXpv(&FMPHv&UPTl#2eAai!#Pskj3*VXZ%8aR9e>fHP_Oj?50{4V3pLz~# zTp2QlI&nHHY*Ozs!RdM7DP>{1yw1IeA8nI;vH3(z zW#56L+vrCN{C`<6%;jm=H=_pdrsu~kN-OH zqR_s5<#FbBw{(NnbC;qQ-)uqdxT4POjo$Axc-Br_hw@u57zX1$&$%uQlV9m>{#tSt Q77k>lFHC!X?n@i~1IAtU_5c6? literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_4_1.png b/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ba49b9186e82c591fec357082049a73c1ebc5b8b GIT binary patch literal 1055 zcmX9-VQ3q56n|~fUc1^I805-=-dMmBj+qZ9o_NBwUQ6t*_C~KGg;OJ*EFVHW@dgnh zJGNBf$cJ-;nPG&;juE?1)6vZ+QBS!KVa9nvCJ|1E5b&T?qXgCuRsW_8e(ybgU*3-& zzxOVkUXD#4Id%j9rWaqBUm4Ds!JR82M2&NT34~AtwSL0VFU?!*L@VHYv*DxE)DqCX*e**ejQjZHJjq zgeRgB$t9?mM#l|CH95T`WUFGKAzQ6P-Aj^eI2wy^GA*jCq6u0~%9Ru4x>k1$$1Avg zrMqwAJcMK*l0asFGBLJH#A=jc^O_sacXg|8I%r3tLn<3i$LM^VtEfUlm))$|DeApy zwr>~r-74xic!;IwIKw7+AuY>!RV}5{wS3+#m)&~3+iv&!eFR|*s3OKxaG?>FTXeE3 zVzDT$@MKD6GD*=iQdYreR12kwJa~Th;rnpYT${ahytXm@{n95NY=1Zdp{Gk9;iJ^P zLtkm*KPp@|80@@!qx{y|E5_@epK0doXP^0R?E2$L=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_4_3.png b/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0b19abc8ffcff18eeceaf01d939ed0f28d68cd GIT binary patch literal 1238 zcmXAoeQXnT7{`Bo*{)lMg_KaBNQX^Uu}Bv$@rIS$;6^$u+X1)ONJqMGuqKpvj8jXj zTD8+^F65A+W!9uIhpDCs4Gz3$2S;+kBo!`k$*Mb{EHzYRq>L&hneelOjXtY|bPN&oB^-WDp z&CSgSf*1^jmX;Qa-EK!w7eU|@<)vvq%QCT8ESXH_a-u9xscN-WLtOxO1JY~s`^}+{ zEgW&hId?KeW^#eN#1<5;R2B#);&U4ruO;fU@w6k&qT?|_O8N>pMxBgTRH0s#JysBK zf-nwv3dt~t#F>g2bFE;76&I`p-~tb!YzKe@Ab=o@$rQC(d51%AyT?g#G8imIqqov& zC`ne-Y{xAw(&i30JdD#9MQPs6rifV9o5)i_At0(j8)kKR>~6~Gr7=H4FmW=T4x~j! zRHCw)P%4>HT{7XoOaV&}*doBeBUswv$vONI&L}>v#0phjhU28uOk>ut$I1EJ8Jftm zloF$hNw%DgRi$KI$-=U1GGh*>55c?j^m_sS`o$4)Ks-vg}}-HM-o9Z zCL(X83eI4Oh?o6BC7iGFQ?*=Wp;(7Tr^$p_EFPPka=K`@oAr|MKx0`X$0a5+IaO9_ zB^(622uqow0UIB3rXqMYPUTa<$!xSJr7A_aR=Wjp0DJ(j0Pp~00hk1!i~!gWNx%pT zvjS9$qysQ0NZ>&90F?xg0+6vl4ut{<#SkpSp(=n!;4$DOfR98%v?UsLCU{Rqp!4~d zqGT%-1vb2_L4Zb#IBy{ZTR?O$s++I+v$b%(o-8bgC0MLF%mA|?9+%0F+d>o?33~Zx zNJvEU*@PlzE2<1@CCuxEB7iD@u)!kUuzM_PERrghu~hQ0*g}Eu`>9Zfjzk#L6~kOf z9L*A_#=O6vRYdiZX(0%jQ;YL5YwP({n*O3nf zc6=tc8|EJ5raSh`^)1~YEyI@R-pIf6$GJ1+;S-xy^Z(wzGwXRBXx~~$uiS9|<&MhW zb0cF9m~Q;f8(rr$%fB5ND`=%074#QrY!lCodj% z^rC&4VZ(2G*XG8zX|9~%DDCNu8!xV1^`bQW``CvMKa$HcZBtC^{A%qh9n0D>wqu)J z=I5`~$Bz9o@cFrx3(L2S-0S)3!j~t0ytCo$OGC>hUO3?5CiqXf&#&9m_kGu@CN1n- zvr`Ap6E}O?;@^yMohOd%J$gl-UNd-UH$8Z6WO%f*GO=#Yy(eZ3zZl*-eCm2?_^w7c zr2M`6T48$Pdg5wJI2*p)BJSgUTD&M`6i?PawGzks^)oA~zT)!1JQEgNpn7|ZS~cow}0T~Kf#W4$+d-tnq8KK(}yJDKm!igx~0G8)aIf0{|7#e9@GE; literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_4_4.png b/resources/g2/track/bm/large_turn_left_bank_to_orthogonal_gentle_up_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b21d1e65b137a35752298f908dfa556ccc6151fa GIT binary patch literal 1390 zcmXAoacmNI6vuy9TUtBE99rV2qQiK0sJL8K*5Y>6Yeze@r@c-#aijHIF`_+NOvyxp z6DRGc;)<3vsAy41dTv;2LlqO8SXrbM6XI~vhzn_%amtibR$KEM#^m$f%lqej|M-4i z+q!Dm%o*>^007Lasw}U`%;HR8xmlTh{AdsXAPcNpQ(KW)SuEDHY16W@vZha;o}HbY zlas?{vvYHE^YZd|LZJ{v#W;?Uq@1FZS}kof8f`X*+wJlD!_jCml|sb;lLA7XuT*k1 z8i7tPHkqY1JK=JxygqF(WRAt1xQMNg=F@VXK_ReEh(n9^8F8OY5p>hhfGH7mrjvdd zAE-n?hXD)8cF}B~nG*Qe}?m z-DYdR<&OG8sTc-Sa<-P_7*qm_Mr7AxjEVHx)d9v3@!1m*e=7ADVgM)r&;noqfB_%? zK%5O=1_FnAEo7W98X*usqri#*j|@Z!07(F89yFuSNkESV22C*P1h0*k067j61Y1M# z3_6k3B6B$@uh$p~F^NP7X0-Tffa>!x3y*LLR33zmN-aqxlhS$9w&0{E1|vy?3nT)z zOw3VY0u71k)pCnLY=)#Uye$^Z*zI5N5nEW#rz#H|p*2xWsOIgEkn% zl}b{hq4ath6&odD8-_AC>XVDZgeaj9LX`j-5NJoC2ZJGbCj63R`OjYez^I7oz$C_RU2GYdH)RTDU33T4eC?yOuDe>!@pCBFK6?KsiFmAQ}0iyCYHYF{89 zEtpc=XsK^@SdZKuy1aM!!|_F5wfcKk=1kNH4w-j6xYbdT{5#I_7rcK(_qep_?#A2o z?87(t$$>{5S*82B^*6fmt6SVV&vuQ@CWHsMy`_3Ha^ShS=Ht+&;txCN1I2-Yz6`RjvhE#lfR}mx@fZ9xUZ|>V)-w_OOZL(toH|6uhjj1=8!!8t#zWa^1=64S@xwv z<42y4O;x9l{~5l%DG>A>8@}iooVTLl7;~xY>w%6B+|0AhLt|B;AByK|P}ZxHXFi{w z9BKHnXy$W@)>t{Vj+ZaiUvJB*=;Un=FB!csT(YHSPCHXDJkrozvnPAAebs&0+2NA! zcC)r_JNVJQ4Tn!Qj&ezBcae>v{%xJ8DvA`aLgxhi%{ykTSo-$H%MFdv)lGxV8ydzHB75Vw-pi^=WVa;E(6N5X)o>3$1hi*m}uRxU$|+c0{wdu4Mc=_h4Ih z;Ge^f?v(ZH;VfRce;{w(oon5fca<4;pSs(;H{u>$u80d>O}_KlAzsf^CN!X`qPqOo I)ph&-2Q*H3`v3p{ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_1_1.png b/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..94a66b81b2753049da380ef386b456cf68dc3f0f GIT binary patch literal 1400 zcmX9-e^8Ql9RB+AMa@ye4Hw?1Fy9pwb#KLt8Yvp;TfXYsVnrL;dkz;l+)>9RyXYh% zqmA9Ds8}Pzh02s`rnKW46}!1&8xPvqd{rEUkS<*WL5^Joo(bdH#5wPg_-` zI6HG@CIBG2ysV@q!Aldfh?bJrRTG!<0Z0K=YuA@1WKvR6a&mG?N=j;KYFb)adU`s7 zAT$~+BO`;!;czgFClU!s5~nDsN~P54bY`>F>2!I$L&0D)7Q=WzC;$YWC6zK13btCq z(;Eb43t@N4+#Z$BZwQ5LA}%5kWGQi`R>C$?s8xma=|mp0#OG872lbJlEgtoXSwO}G zY9TO^h+T0XIAw&;%K?A@K!zYnI$g_R8Bx?G5cCnmpj;l%YA38# z=<%>H21m%`5p01B6)U+CEk+pyDvLt$`&_SAy~7LXnyz4HRWjtDOde$7=PvT%n<%Xfz4| zO9@ajg4yXJH;eRf_slWvQA(4h@@ERldW7Mp-V03-mY05AgJ0ALV+ zFalr#ga~R>&|!nY0D%G}224WW5`!QCAPJz72@M#u5zwW8K0OTDz>DDd02cuXfhZ`Z zR?RgT#daIzcI*6pMaBJX!dJ&rROY9 zCiub0r8SrIYlkX^e_+qPd93EwzQ(Ov|B4+Lz0v*bM08;90Us?_rF%N^Nk=T{-h~xv z{mJl|;pxTak*4>au->g!bj;i{(vR2ocJaG540XrL>S>GSO)EnC+MBbF*X(etcv>;> zfvB!?)gRWyIW4bVO%m?eX&X)LI(*^k^(!6T@#Sw7*+1RHdPw6ocKDdV^16)Tk=)(! z@dqWhE?#f==~#E$>Dg;G3yjkXE9!feeZO;_{q4%{MxAGKb&oc)_7{})qTiHV32(R{ z-_Oe1Gw}KX;&St>)BU}bnZJC&8*6C#YBI3te%p+cf<+G_Qm&nuUm$vJu+r@d31E=`f#ak-~jkLJ!>IUXlp z0q0MJt6ChZIP3Dn_%!lC=RjHZ_PqX8m0KR&-$(s3JAeLXzwJJV4zE8~w`WUwq&biJ zIVWG;yfXJvbJP1{or>GtRrR-b&8%qZmsfnmqS_0@WQ+fep1PBh*SwGaiau_ssECb3 z^N;wh9XirEV)7kaup_^y>+89k%dL0s&Dn@XmM}^S!NF0HI@G$Y_}NT6XL>@{j%AMa zY}Ifb!DHlHTIlmj40IA9S(+ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_1_2.png b/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b017f22fc6b69ae8bedb95e10211ddf585dc1011 GIT binary patch literal 1274 zcmXAoZ)_8F7{`BGyWPrw4hoi8Ns+=jRgsBVL?V?+Yieq0 zYikh%sjI7#$z)26MuVby9LFe%plK`1GH$m!5D3L$@l+}!ip5e1)dS23NTS|qRX7}K zr%Uhk83REw60;?eY+CT;@?l(uSd8@yq2w%Tp4Ns~bl8n21D14*5y!j*F;zlWL<)YhrX34yAb`8^qmF!k?hRXNn@mR1Z}V~IO8R~AzLWU z#04%T`h`LyS5C??prC-#4%9B7>J+p=1=?_N8QC_pe#gTJ|$Nev^ooFuw%HBqI@(RbUI@`UosRD;_+N2Q!ExCP%%Io zK+uRBPpGK0&Yr`)d26`fOceP{DOQ-wmSMe4E;lHZCbfpr>1m^pB}lKWvdk6p`NtwL zF(s687_botOUXH#ns?}eE-dP$5<&Y|l*=ZAg>0%+x(hJ?EC8?o@Bl;s7y}@W09X-; zLl+C9VJK!vEnraK$3WZ!L=r#>Kt>6DC=8P@?tp186vN;tcmp7CU?C9)t>m0KKW~bJ z=|sXU2+=}8fE6#59iXmyj8~FjwJok?L?d6cMoZ2_Igp-==U}#|RRDt;G3n)2Ozogh zm!04_N7&CLqJAM2Er=;t${7d(#sL%ogcTOvirq7*+^%3gZwLmSiA|?*tCey%XqSsY z^=^YcfT2+wO%nPHsVi7C(58l*76wrm$Dlw|j^D7P{-38mu)C+50;n7=ypcO?fKCwms+Q9Q*_2MOXoF#!?I;FKs6VawDrrHTiZQcTO<9UOy2ND--D07ZajCn z^X)qiM|Y98m5Z4wCpLDcnzE}tZSUEk`8zq%(DJiohS>LrnmD;m z%Gr(cI(v@XVm3FF>~{Uk;6ziS`gHFnFOG`Co*Tey`k7 zcd0;a2!^-JIy<1~ANb|1S;wkI(CzPfzFatdW?=2X(Qj+5Y+LcOO^@5odd}Q@e5iNP zzk@HmGt@dizxdj|8;QrSo6Sd-99MpPaq7O}er4##oi88l>K@u$HMehXKr`rZ>@4qJ z(Yl8&WM=2k>2B6eVZgKm&0(rJq%enw z!JWgb&LQX^g9IEQ;)nqUy2YSDq6~BnQ%K9QjF93S1{`(4P)A*G4?j~1-+Pbm^1ctg z_dd9`RXV%&;u-*)-MqT7lTAFU3o8p*Uw{7oZvYE$?X}%28J(M(o1dRwSXfwGTwGdO zT3%kpFl=RIWp#D6P%IW%mJvlkQ6x>Pn5I#$*W2w*uNU$g!7h`IMs-Z~pe{!3@~~$lgT^%RPSSpf0F{QC z0FHun4J>Nnqi%jSB+!&WGZmdW2=$8qGJuL<29DbV;ZT&v^9Qm#(DjjRA9p$^iU>Ae z6bg(?@+ws_=(5df4sW_*-IrRS;tkax(MgVAN=06wC5@{XqS25W9kmk}L2UPvRy^&F zPa<4^yaELsNDC+j<2r>>kE%q15to}|(@UK`I*{qS#u2p=-7NE6O$<#Xu4|*VIq~ah z)IN!QH0k4cj-tyfrwd|DQJR|O)@r?GGwO8WAQ&GWrfG_RFo0@fY!??pLK)KfSZqux z-n15`&f%;#Jsq8(9F5~#p->`=3e9LdZ%T4Q&6ZicW^2&xCH;6d7C@CSQ^9SObgHy# z34TKfU47u&qsX0(`m@Uvrj*5lZpPGgj55jwC|PH+mcN2&p3 zB)pSW{8=qLX%A0>F&d>*9yk&!F?dBFs|suBl4DoBmL2-7xbIJsKAMd=NkRdj1Q5!y zXk>EFK-4XFGU43zGnm7nSg9!0s%BXR%hWlhEwH}GMiO%<)6;ShsU)%~?93lK Qxy%M^UfJ6CX8q>g|MN$q>;M1& literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_1_4.png b/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ecd6d8fdfa7b1daa0e902a2a2a0f7eea2c25b187 GIT binary patch literal 1121 zcmX9-Z)h8J82&YFdg;Q9B}hs$Ni`o%JxX*Z-o`P{?pm{YvsZhC3~rjTQ!|Wm%1!bi zXvA}d8udP87%^Z*&zhD4^C5#+4;S^oq7e^PMqJO4l}s~MYwRM+XdORq44(Jjm-m79 zdEWWysqo%C!+QV#dnb>K&)9Xuj)z>mc3$ebGyrrqG^ib7(w7ANt9(dmn)P?6~kDwtahh^hX6$amT~jEHy#fp zlA&~l%;ni)DXLecnwe=dRT@Jgq+4WssYpN((1L`QWxAS+)JmeYnr>NYw{3*|Ac}zm z1r!b`ibyr%sTaMSnjf}8uoH#53WP=w02Y8Kf`}eZ%I{ZDR3*tW%dW;^^;BxJP=M8{ zANK|+Ux*EmQ8X-KkrXZ{q?D&+jmheqT8mb!Sb*?{!aO)LbOm3D`v{D zvSzE;=vF-x@N&Qx1A!z!6@)1G!X=ciQlc5jG$ggH7_iJ@UV-o@!dNCk76n?DI8zqt zIjO11?P{)TYOrZ|yab9xa3V(0369GMLOziwWir)5!K_poYisRx8v?%w&>VsnJ+$uU zYFMm6r<=UmO6YB6ty604*1OP+c|3&A7Y+nDEF_Sm#IWh8y)0SEWLJwN%P>0)3Pc%1 z;ykHnK#61dB&DS}Js(@uQuS)SRW~}FO-KO{0YCyk0l>DwDgaFcKpQL#lM>WaXw_L1 zh&aenpb`ca3m^xe=z|#?sw}L;VJ!_U72FY?01OQxED{%dsRWi)!bMfkb=fqvR?CDo zmp=yZq?=NFtQv?`P|+flHm`LOdN)_wtu$c0jd}qQK*AvpPX*!}o{TX{Dz0Wzx|TH! ztz{Xo(;yfIRsggBgtiuGo9-_Bax&j+68YR+NVOWx^ISYGB$FZ@l8I1`!ZjMNGNCmV zYej-E8h|Mj=5bh|pvl$f|@w@>Y?fB)Kr^9N()8_%BkVXVZf z!NI>Ty;atfeGjyopB>scyl_lDd42bd;bZqQ6W10y@AWw9BZGa#Gp}DZ#n~$t{`-A- zTpJ;t9({0zr%x`@^R6S04_q92b9w9R=n2=SPtcz~xBKMj4~I6CiU2Nf#Xhhc}{pICy#Er Y=MV5VHWmh3_MO1w#MJm#hv(k?A1U|kC;$Ke literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_2_1.png b/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..28559cd57e40da9921d60923cc5b608ec148bbf6 GIT binary patch literal 1011 zcmX9-Ux?du9RJ>*UV5uX@G4doM}!VDjgmng@{ot9xuc$$mu(po*N3R_EVm*7BNizV zuyCCgjIL-s`%q>WRpPDFJBd2x@cgq4WSg#G)yoeaPXoIG)6IiyolQ`6JaGcz-@v$K&% zWNvN_!?0*HIzK<3NG6jk%ZQ?&D3YdS3_~v#i`8nq*>v0OUJ#5Y6P5vi2U&_`GVxrF z%omtanXlI5MpJEhM%OP7hPFs!X+EY)2{TPv8dW#g?V{*a)7_>XbV{SZ-XFJ91gJFR z1+WyXp<`Yd?>FL;E`df2nyBc&La3btkO5Q-({bD+2#ca@p5K<`PBz;&&71W)@;ri# zCxrwfle|i$bUJOan#CJ6vFJ#ZmST5RH^`D4!K9MBLQ5K#(M7!^m+ETW)m`6g2Ni$R z80>qv0C5EpSs)8QSr}JOq?%O56Ldda9vJr6YNKtLj%yr|PtoNx-_XRCq4-6uUp0nK zaqLz1eFqKOc$}l?G|OcLF|R0PO{?Ye&2rhR*L~L=^m^m*7y+RJRmIo_F184zOJ@gS zX_&D``PSI#O`4;F{yvJ)IL;*!DKe?hjK=eZB$w21S)p03bQ;Z|?N0^*s1jx zj;<91r=+xM*^XoOz1pbXo=k2c0U!-v09XJHKnGxm0SY0Ds9+$+MnPYuKxd&MfSZCq z2BZMe6R6B0TSjgUbxSC);ZE=zNFtwaVGiJezkkx4p4tg#epNS6oY33GN-VGtYn!vyJEJSir;odK^sj5oFpL^ zPyh&pS(HM#yC8~%+HlC#s&`>@yJ9AzLVsvA^&9z-y;h6?o#$pI;8i#g(Ne&m4RI%?qa%ix1rs`3C)T_I&=cH_q;C zK78@qy=&&~m81H`N;LAxeKEhZ_~=IL{HNLnThFCdKiYj@WAohl@x5Euqc=W2qOEOz zF3^iNj{nj7>dWAty{kLBROiZvr@qKauS~tP`P;W^k;C2P7k}8A)%V`n`~AwZkNvy# z%ldcn!t0&CZh!sWfB3EIFZ_7_u}3bwdhMBCFJHTKyS%f0_1zs~mzjTX1-DNey%3s( NmF3l?%TGQ3*8j#Nw-NvV literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_2_2.png b/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5314e915ab4499c00c2dfd659a23fe393961bc3e GIT binary patch literal 1031 zcmX9-afsV=6n=NTyWFiFRg3mm#ZIb52qTU#qRUuz=DOaQ<8oe3E7Xx;(1H;oMyRf6 z#Qsr6g*YnAFT zW-tt!ot>SVn@gnAX^J8_juk~-mh+mXmdj<+w3^LUr?cz(!_kN$fn`A8qxpPXQBuVc zS*bE+U1&6=wySl$YJXsJ1eRl>Dxc7EDMQ9BjoK=6u9@pLRez@v`1W|%$tFP}pvZzD zVht5@tFc}qKI$e>K%$X^_6>wOX#fF0!Z0-!)00U9$8Cn$5`>*Xp{MJ&EepABl8UF< z1SzB#3D2rTPN!sp(dt~;;cIQt?n*7ckfM`hHqD3xFVlIIQ!7HnlB|~6^7M{h^MXcy z?8aD#i;yTlssy-!(N-ec#Pcqzdbw&}vxi0pZ3#qNrjx}iQOz+8nQLpJSC)IGHgL*A z*BpBe8gycD8YglTU0}JQC{|^;UMx1NRoAk-R;$0eI~)!XBvrsojB3QVc2evTg+5mq zp`zG8r?=LKn_3yFaR8Y9e@D_D1^YFl7<```8@##m4X@ztt|Kg zAQ6z7KvfFa0%|F!TS2}JcY~*a=O8Cwik#4kM9s)HY`NVod!7>n9tyRR1)xe%)<_6; zN^0S%<nJGb*;nW_Q2UN4+5)2Remi$ylCEDI!%W@P@9~HNEZByp9w29W?6GJdav{ zd_XA7q7us8L$X||4+eDIya%n@T#y^Id{7FS>R-h6gw|Mut~pO{xpM1NP#%_>_ro_y=jSD#|q5}`1>HEf fy_ebk=TGe7m-F4j+b>C>0a(ebEnR-@%*X!&&&0UB literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_2_3.png b/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..7f3a1bb0c997129c171e354bc23b65398e4e10df GIT binary patch literal 980 zcmX9-QHa}g82|2icj>LWWwT+{1}~GX}r!`}nT zRFv+#*Svq8yIfmF4|PWo%i8y&ehzlF1i& zq9hkMjS>x7wHV#z%&yRIrM9m)L(PjT1(qy{MNXk5oh=)J(UhA#t>+nDWQB1%n)N3~ z0nS5S0ipthI#4#o_6Tu6l>^?0)Yimw=5~m7Wje33WKE=7D%aNq-&CT8KJJ)Pw=oYo zN0E!BA)aR`T4mS@FVqyJrR&{VZP023yhL-$44kf<2XwYVxg$eC7t6;Np5QCvihLa-tQ0MFiIvoXcA^BxTO{BD&4K~ zZd38Qm3`M52i@5?Op-&y1E>HdfDPaR>;p_OKq+Ja)lK9&C?3lc7!0&|@I;7ZKnfs( zKrIG2GV-cu*hH}dkAi1G5h-$8lp1WQ!!xeH1X5`v(=)Y*v;wjy)Mb#zqex1R zpM5d+&!Zo>a%oF}R~|n2ASKr}H_l&v{>$y(4o>}Y`sDJTw~_nR$Mc_J=B^!I|M1K= z&t)g;&%XO)vY71T?jLsPGuLrK`u^to|C*=2yOIC(?*sVarLT9+;R|mcest%`JKOg@ zTRr}{zxUU}v%f#Rc5k#z96Z?D%ddR;#<@RK^GEUO)wiyj& YOHTPGZ>*mmrEXyJ!q&zQufBKfe@1_%J^%m! literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_2_4.png b/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..c6935a54b77ec97732e8db5fb0f2f5c43e93348a GIT binary patch literal 1010 zcmX9-Z;0D;7=G_>dRIpWMdL1D#R?IE_Ct_-2oks4>>bg|aXAebM})xjLpdU5v$%+v z7Ae{fnG_A!L6s;KB33vsLY3;mQMsOGdPq0oEK*!Q3@o$YDJT5QF?inh<@xeH4?OSt z_WD}>#NyH-0GwD|S>A}}skoLBGjYG*VhCUc)}P)y8`G(&sp;wInVFf{+1a_dx%v5d z48szM#KOV?p3P=yI>+;zBng_P7=~UhmmR0kYWYEM5Jlt3gw6rSf+!>vC0#6LN@lK7 zWu3a%Y^m*z(F?1Cq03X4%qDdKx8#hikqv|1Df1mi?zQx&TNy>};W)?>pi)rcz?QJ4 zj&-W3eltDk5onY{6BQlV2nAUH5kSQ-J(aQu!X`vp4oIvs*eXE{74 zW>}TX>y&KKn#~$@zU&FLw&eCyKPqGxBA3sy5+!JiqVsx1tTfbyulu1DM740#92|C1 z9Hb?{3y?8^v@xcE=Ub%G;q*|h4h(l}2WUs6(i%gQ@>Er3n;PFXq_C{@9b@Q~#~tS| z^w2O!r5TcvX{NyOB}uAkTD??iRjZvwBlP{j!NGVuMnLF5IvCwd@ohrtQH23t87l6m z)E?Uhlh){{e~6M)D#hS+U@}-fmr}S)QKHR)U|U7EX0^Rq7O`o7@7#O(Um`tsqIovU!}-p9kI+?{>= zk7qV6-dbs&Jg3|^^~;sy8$WN|v-nx_*YDnY?xA;fFMmbSKPRl9QVi9jKSx<$LF8-`M~GB zGpj4f`MLY%0APM;abYc-d&9bSW+Lo+ZhUv*s%l!-wR}EbE?4XIMyu8F{b3L=H1HfqVkDi8X0!2} zK^KZ#xgyo-O4HTbUa{A=1qw@X5lxJlsko(*Rh`+$3vM~pu512QVc^@NVJk_1LP3rP zOU7y%<`(g8EgG~5G@wzSpdAaLRsui*P%uoxag!h{lC(K)Lz1>KnXYNxtX7fh5==C~ z$7m_eDP&TkQYNEXoL&*~j#z5Sc3WxqnK(<($pj};qROTwPCb zbju^pLH!mUWl1WX@*0igj|#+Vu|Gzqy)WqLxP zpSB0N=FsW{^}$Yegd!Aztu~u^&vOO?4~1Gp1{fp4TQSLw zD-BZfIcu19f?RV{ZtpaDs5>O1z{as8ji>o|R%VQhXqj2NWHz0W*K!7a3k5w^6j1|^ z4+w=>6hgT>Ao50~-)Af3JJ8#0A)S`9S=BH!hR(BenP(he`A72XFlFQb;Z=EgU+w@4c(vrg!BZy!+tMk^96~#PPkm&aVHt zNNqlP3cYSV^!vZ3SJyXw6Mr=Z7r$Sdx%Sjg+wUh{K9jw4?w&nwymNH_$#*}yym{p6 z^52_ZoLl?n{FNVL->oFi!s?SWwQqBK`#1zofBDwfiMzT+XaBVeyXz-DIr8}Z{kLD) z{m7-ZasAC&^T_A+2dBUJ^vY|CKK|kke(3o>=KnkY^TQt>IPgp9fsd5u{?cwe8~N~L WaB5Cnu9rgBuylB3;qo&ttp5*r#Jg+& literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_3_2.png b/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0a186983f26dfe449c802a895d00878a1ed022f9 GIT binary patch literal 1073 zcmX9-acCQL6nrn6Yr0L5l)YM-p9xH z-kVdCk>TAVy8&Q$;`rFKJMVLA-+;&MbN%l{0X#5uVrJZ>Jv}|UcJ12Nkj7m9qP7S|2AZsl6-GD~1ldPw4MB^pr0P)R12GOSUE)@zczobA}nD9MaT>S@BncPle}KV?^i>iGEFb>{Bk1ERFw5n2^of; z^aU9_%m?UrC?XM2g%nj_m)C`IJ+9e_0Ob!yg0w(zA{CQZDa&U|@scKKmSWm@ zt5a!h8(s!{0^kVkYR0)sNLNSAptZ1$!mmSqaOFZEdDSs+LF_o(2az?3SX!;c;8=+ASW?856p>dWm9nVo8Oy46Iu>%Z{0Sh_ zLyU^^(@L$#P!Nt9i?;c5D-M zTNKA34Ui28xmjdgx!dq((#3Y0Di&@-uGiUEOh_ihbXp?A87f?0$SO-3T)4p#ooEon z14s#>B8fBxS)6Mw_;XLs;b%6|6nlQ*tDy?M|)b#&v(%Z*RgKR2IY&KAx#7H6C7AC|IzEY9u| z=hrS3@adl({P4Gje}47)wdY4)KlOp}@uLo#Udf){(>nCeU+;G}{?tw{y#2=aTi-1F z{;Oy1IsB?VI5D|7bH`V!Pkr&wM{n()KYsJlxV3lx<-^~Ow9mhE@u;%(4pq9}_}at| zY%QMqwC~!N>%*@s-22(F2M)qr=Wd#tqa#yCI{!9|`7`hWw%U8+qW;~nAM4hC{cE1^ c#@@d@`Y1cPdg9%CT&plKJ~?*fiIcDW52)|kSO5S3 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_3_3.png b/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b56c53e68a4077844cc5603d6c18751087117a GIT binary patch literal 1013 zcmX9-QHa}g82|2iz1;1bIVf5+4^^vV5VuSs#2H6)>FkckWn2c41(re3;>s2=YK1;z z*lC$n!{|fNf@Mam5?vndA!xnzp>ih{FR&t=$2t^M3n`7|%ejmS=@Atv) z`>vl|&mTVY$RPkYymltH5%-4uxT315Vlh)H z)72W+Xi9BQ>vYY2P#cXMfx;AS#Sqh$lCgENWip!;q1#aUo)PX;C!sT&_VNU16qI1%#i$gl*R&vG&)>a1!AMpde|w3cu9fz=D^!K6K! zb#We2GNcQTDFbO^Y%87jNVUrwfl?cp&eZOqO^HhBEK$l+HHB;ILdTSYiaunGDYhgXNpo)i-(oHT79SOg}ope@t}#ADdU!wv5Qo* z%)3>&(=6<`*09^040}|h&aBbj_eW?rB~!p=usn^ce5NQf<$`EiMW=3c+gYy@3(h_#m53O*SuM}cB1<4!|c-^MDXMD z=HkMWFa7bp_sWIn)b-i!XPuvwzedlxUg`7N$q$+HYpWZH3zr|=zVsWm^!>+sm8<_8 zpU+*|&%bLPd-M2L!O^cjGLv6CaNic%%iaBNVOc%1h5s}wKK|vMSAU4tg|*Y`xm%|$ GzV|W)S7T8$^sH zxJ=^=dTNxgWstgqW^lTI9Xq#7&Jm?*gsW7^^ca~&j8HXhhlbj*pDBayy~p>@`~LX8 z_YUoz3~w0RI0yh6#&?ZPb?2sT`3F4Re%H-2#{oRBdt&d-F74^*>Fw?Hcs%RYt?TRS z>+kQ!Fl=C8VEy{_zF;s&Q6Y|FMUj`~sH!UIbUL3emdj?fy5u-**QG+hG9d6n(Wo~b z4(>0J6+*6rRyBmGK>z_j!Y~ELQ+~fj5IV!m3&KJyR!^mti$!Ev ze##qUeIX&hNJLm6BPmMO7`4Eq4L(;9^_pZlu>kE4g@cSp@-iJ&I3*)wic-;3OgmL| za(1iK=vX)lUJ-mT2qb~fFuLdqmx-vwDt08>Q1!M}Me_pbm1%z>OlBiYN#-i5Xs6|R zUTqrbww3SL25MGuFHMjUijJ{dLKL&ITu3C!*{oG8+NRl9T57l32>c2Vd5kLIT*WWe z$XJ8RG^2VeQE6*SZn?Eu@1P+P$7!E090-bJNM;z77cx?JS+bnXEtJYm)pi>!NIa&B zcuERrak7wPjf_|+#1@QH-72)|Ro7icEI0w58P;zL;q=>jt2sFp#F4r|8Kz;h50u(<3?CCHo>F6nZmlD2K5)v{4n%O3+O zImBu{K@UhKp*W1zjv8*F(#h9W%?7Hs2`|tAEF8k4Y#=UD$r!Jt;(9JsF>-d*XgO8n zHfWwlCLjk8>Uxps%3Xs$oh&q)bRmBYYOTgaqhdTRCzA>lO4Fe{OBozx@u4MwY(;`d z3ZN8$3KTL~Wb@td)AtNrTDyV$QMcCkHnTdv^b8ow{`B z#MtP@#WNpb!=G(gncx1w+k@NiUt-gz?|$*h$#YvLpPxI?^WcSdzTMLK_{RIhd;gTb z`&I57TS+?mF8tGwmtQ6av$vdF+_mlX+h(tLwr$?XL z{QIqY=dOR?oIY|?x%kxnvj=`U-v8+${`vH(=Na>deXo=j*S-ae@0=Vv@zB!;{s)hO B;3fb7 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_4_1.png b/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..33f550dbe72b02acf8c9754e98146003b35257ad GIT binary patch literal 1137 zcmX9-f5;Pc7=K>hAGg;R8NQVKJfWG z&*63Bp#}3FpAP^F#$Fj+->u8K@uaJ_n6XscOMYmM;{erLt_=VJmC>(Um`?k;b1{zOR`|6 z#9Bsf7^zk{)3FWIsJK0JfCy7`jA0XkpowBOktk|fIhV6dvpzG^YPAsfBnV_Ms^Dfz zKEWblbyjUe^36o4rO&jB&AD0!4H0fP?e&Imzd(>;Fer1p8tpDi7PWM>P;@GGyUswA z!(_p&L~%V%WRr}c3Z-nUYACgGwppvR+p~xP2m{CfI)DLC1!!P^y5L!ql#!7~PK^(M zL_wMXGXxF~NB|^xkw&3BkIXo-ROIC0f$=nOEQEP1E_#&&k=8?nyjUuwY};ryZPexR z#ehlSMOW*ZGUn|TP?ve-yOh{wfbQliKdO=cL%V5u@k&hSJt z>_<@?DFKwFkjWsM>mEP-)X?1rKk(lAaRFYuetCPh$Hzur+VI?wLl@@bnp*<&>TjuXjr&kbLKVAOwqS-adjq0wm6TM%YSukKZSxcSXuUd0IF243W z$!mKrEN-1oJ!-x6$DYZ{R)2hHa#))>vt{b-5mBC5YC3l&KED0!-L0p7+cna@KYS_T zpIGzDm#e>8v--jtSAV~G^`!dUpZCm!ew1upy#KfT8kwn{-ak72>z-vhc3oM#ebe;5 zZPv=W)3@CI-5(v>J#v`461g5ecIRK`{P7PiZT^0CG literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_4_2.png b/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a24e35b77dc994eaa3af928b501bcb1459e3c281 GIT binary patch literal 1159 zcmX9-e~i;~6#w2YdUxX-GU9-NI~iJ_k_ts?(wHK>OSvmhydIgPnkm&AvXCYeSi&Gx zCM;&0Rfd^n!9{w>G&L*%rO2WSx5%jrl;qR_C7HUwh^UPY*&nC*IzsY!?|t4s?~}aG zdv9;q%=Yyz>;(Yy4Q&`0Y1O5zSk>Lp%7?$1IRrol*s^hSu+_G;wY9gmcXV`gc6N4k zbCz4b;!{_p$LQyGO$!bk!FeFI1WX`Jw{hEYk72-^sDW-$vylhV;>bBl=N~{lr zFc77ICLlQ(DJI>OoTpLt!8#5bAvmK!SPB5Z0}w(G+3i++J`F{6iaNvdQ{iw$Rqtf8 zuvqjFo&fE|c|R3GSs4qegrreQhKU+S>&4@e2bkj0mt>pHQC>A8hFwH~-At_0jXf&Tp7PDE)G^^9oj^jY!lL4AWh@6`# z_=GYRt}=<5sMn(fN1JZs>ob)mbYX5c>GiVyfPmo=MJXJg2(^aA^2yXxE^n8tMwJF3 z4p9WR8uDuqEEA)Rgiy$Yrwp}H%+xETM&k~o0SE%10H6V205AnW4FRwPo`Eq18alKq zJPKq2q-bEWz~%uI0F=EjNkE;4W(1ZK(AL3y<4M3VAjl&T$*V@Ol*ZpuRD9jMhq@l&Nj-OoV`s@A=>>1fCfOWU7j!3LQwcqAc zPkcS^om=9>o@T*0{OrWe58TUdIwRTV_goWJZoIqy!u;(U_b*yJd;BuJY}0`;c7%W6IRO*b?9L|OfZ Up}n4)t!;v#!Oa7w*1vq{f8Emb6#xJL literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_4_3.png b/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..9fdcdb46e5d12b34b5c34d5d5f412baf67a3b81f GIT binary patch literal 988 zcmX9-Ux?du9RJ?m^!|*9J?St?hUJJ5jtl|@4I^r9)H8ZHmr0pHqDGg8A~}puqz{30 zqi%V~L)ohIp-7NE1T1o}JaiB+W2e_aI1cPINQDjy4pv4U3OnRykHP2r{qlMFem?N| zey{Ir7fvm|xC{WNw%*yiFrCkxRAz44U){hJfH~NC@8bC>otc@Lot>SVo134XUszaJ zTwKI3ER)GBEiL8p`8>-qq9`ber0c3>nbm5w(P(u#K@=S&$v90}1_T~tX+>4Dr4m`L zFg1s7H05?j>xNb@b_PRFq_HBuVoEu?NV+=Jve><<7&eN%j+yM&Mu|5WM+E{j8p;B= z3f4BU(82rdY}zBxh(W1_j$MSJJb(rDj*@yjY7ZtM zEP^exk86hL&1!T&cO1Nspn zVjm47Jj+pZk>w0QEGvqm>&k>be^{)xu#8*RXR?6zuifqI2{O}NtmVJwnn-ox>*tY zn$m3=`@Y=|o1=b|rjL*SPz105TmTW`@`a3oe>a8)2n3R^KG*DiT=yX)8E$R8yUN(Y=Ip#V?<2u-u7 zP34|}s8*W8A=hj?gVpPas;ZPqdZl8rOqF9A0_%%xC^1JeJu2prMk1R+O%??LilyoC za~ms9PJZC)3)>33`OkyPQ*vW#^R0`gZ@w>YJs+LTq$vFT-sNv@Q17n3zP8INAK%Sf z|8eP-u+;a~*QopV|GIhm%;eJPSJuCMdakP7{b<%#U)cQ9`S8xw?O)cfE?l}3e!qM0 z^oy^aoH;!A`Oe1U!@mz+I$WMzK*rh6zWZZ2V=Vsq^KJCo>cJI%%~{>OcJ1GnAAb4Z g)@#P&Pyd5u?1vBTQExn)x`M6q+nYbV{mGU80sUp9h5!Hn literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_4_4.png b/resources/g2/track/bm/large_turn_right_bank_to_diag_gentle_up_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..bffa7da90d5eca0070305096b4b31f5f41efabed GIT binary patch literal 1138 zcmX9-e~i;~6n}R+u6LX`lBtCoI*u7@XmpVtHae05Ju;7yE4dOUDLSRZ8D~NNE0qHO+zLQ8HAX5OdaMhUq?tj@7F)?lYBn! zy|;NHuxR1%LI7Aa{@mDPx8mJ+Y{1dYOD_I-6u<$SH*ML_9ea9udV6~v4o6>K-+~1T z`uqDa3>z327#tkLyd zL}R|B>Q86*Tp?5{D^*LaH*}W7g8m_y!{b4ZCJ|YMDkj)+I#?~pb|u-g^-jwSxFJMB zlmSh^axzv{owb~+U3H_T54A&RUPH+A0`LGK43nMCxZAA}gzonjdA<@3*W&S;*(@rT z-IUAA;6C2t4-o;G48|!*^D7xPk>^q+L9d1kJM5v|zJS*+keoz|GAk$fWHyvFWW$P^ zcFJnz>YcKa0ha)H7(6i`G>p#TfdV0x8QBV|bwzJ!CMxozOQPM;0I3H3If*SPf|ZbJ zX{C`*w94s@l}8QJ>7ofTNYP=2jS7M)NttN0psM9;)-sIx>};#mLg1ExNMlsa$(Gzg zl?>O}WJA=O(NasBZ5NvJwGJ90olY9Z10JtH`Xs+!;rL{zyDU~vQ!%gi@z z6SeC!#~}ld4G49;NOtM&!JUX@8Vx#=z6YgRWkpelM5I_urhEz7mu9FuOO-j_EKfFr zUKH}6IDs-0G8klW-Q%a97@E8L15=X|0<69E^Q+x{`S{qnEsuZn$)Ohy?O%T1{?q8E zOI!E82*ld;NBZttG6c5#bJXy+FGa{A-LOXo#w`%Aa)?7X#N@ZoJz@WSBq>vO|l$JiS) z`0huq^bG$t_aBEJo+h{B6G9 z5;3y6l@Uk43T5lGV3AI%R=htlsaUjQ9TbgvvQC0lEnH=TmC-*ccj(uS!RNil=b!h1 z&*#1K(^H|f!yAVIVD03=i6gx^-mAc%r`NyR_Rnzu4@@7LInbkheSND|t@3z0{r&v| z0|Tp9uf{NJaBy&FXov^|0yG`uc}|i9MTuydnn)zl>1?rRS1OCH+wOGeAaE>*!bl|I zjm7+NJ(x7vbVke<t!I#tFT2XbY$(EbzwkshY z$P~mmup}(6Vr3Jr=e?bp54D1*Bcl}yp-KQi1duUI#c{*uvq&<>vJ0YEjYjK+aVMKa z<+6|V1~?)p`dOI_sZ`jY6^qp}e4-$vN>Z*S+iuj)_=2GTD^Y^NL{wf)ipi{;wN=|O zDsIYY93Ph?Q&BSUc+oV=*{oyRjm5=wyN$r70-46>JkFPV zQjLl>_+&GZYsE`#Yq3*ot<<|{gu-!#AVU6tLXkvhR5P76)sE|W$T_i!J zA;p0m0#^hi0a6KM(kLe)JBDgWO7(W&Y;t|dtlW09ESVk@A#RmBlqtA!097X66{^N^-7N{PfqNc*>&OUdyz*fm!o%em+GoUr2Sr{~V!JoV`xcch4YeR1wWb@av)!_SPo zi68xK$8$xGcyeg(nEtwPd+ya|KfsnB`*G&sHJ-QbUDY>Vzx=}~IOm4UhJROtHyu(N9Aj~XUDebIMZ_hCJ#(ae7=A7 F%>Q;Z){g)H literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_1_2.png b/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..251476d3532a8d2dc3c050cb22b09314a37e9ff8 GIT binary patch literal 860 zcmX9-F^HpR6n-=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_1_3.png b/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ef2827cc5152b3ce3ea232d65ddcc1c6988350c6 GIT binary patch literal 5326 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 EA6GAl)Bpeg literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_2_2.png b/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..251476d3532a8d2dc3c050cb22b09314a37e9ff8 GIT binary patch literal 860 zcmX9-F^HpR6n-=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_2_3.png b/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..24509ea9c80a59d86d82068dc67be09af9d96786 GIT binary patch literal 1035 zcmX9-VQ3q56n|~nUbA$>8C}p+ZV>S*w-MQWIQ2f9dTrBsvp05yC=pIPX27T?-Xuz3 zhs{bD8D6(cGL{dSo*Kr@hEe3$u5hpnD?~W4NQ4`NEnq%W4K=a|1^?a{{N8)~zPumr z{oXr!d?~qq-;?_QVE^L6>z|U{rIsE}Z0FED9p7ZI*$jIpEXdn<68yg!R zAD@_*z%XobaxxeUM&t1~MI|_n6-8c_)2gZz3WZ9g)@WGG=CU0f`#8OO1;iFm#*JYxnQX2)%siayB#oH?OJY(2zCSxFx zkYhm?vATjerEt3*8MI=kmp}sv?db?L;{XDHgkefJti@tFK^P3PAqZQUOk2}-YBl6I zF)9*gqX_|LBqFJhDUFhKMy+xMlP}w%(UL4LgVV7@GR}x3FVks-Q;I^dCeKnmyRUB#8oj;t5QWHan2tu1cw8hCGQ+66P?Y>;`9`U{Rd0ArchF%$;xSbW zYZ9(!$!eZ8i=ti4Y?)fysrK5qARhvU@+vY77K>coKYsd1X!pSnoI0^2!b`vZ_Kr_(EY7~XJahiz3;d&J4o!{wJ9+l+-I-Sx zKBR)@rk?-z;NhE}UOhVc-0jydoqU7d*&N2-Ja>IOkFQLxm%p4_-8dMm-WjfZQ9W|t zs~^8zebN4od}efZ{#fwrN9*?=8N0H&v2g1mzdZlv#n>+wuK)Bx=l;+3t?!>6Tt0v0 zv2Wto?xA)E} n9}#yqc`!>LgY zjoTqnvw3YZ8X;)FQzD!iw6LIY=EEWV5Vq3>P3wU{LXFT5VcuAvMSf-sp7(uuzP!(e z=Xu``=I6qDM)!>Zz@FKsrx$v2qE~x|UA=zz+v%$SE|@=YYNki~`uh6&`&};Az`(%Z z;NZ~E5QbsH!^0yZBVNDXPm&>)Wdwl}#i%Sxs;cI4g;J?(nswXmI1U*Ch6bJ+i$*<( z1fEnv=?tCA^TkrEQk82~rrFY20*laN66Z}ta7_#pWO7wytGP(6B-v}}wyk$NX4nTY z0+I}90#=l;YR26tdYqaMwL{2>p9yHh@&76|Axy~^`z@pvPZ+Ab7O zwdx~1e#RT(aXJ1o(JCWZkxWz8JDQ1BdBP)7zGRrlMChW(R%F3a z#YRqU8EU7R>skhCnQjjiAR;6cXV|15WJEEaOqMd4YN242%guVd)9E1aNf5|kWYNu5 zd_s+gH`#P6s<)Gsj#hU{?cGKfjS+4)<@JVfzd(dUnwB{}9qTPqN}23hv1FT;(_|pV zVY1*(#c(Y_`F6u}oNdGaL;z#}4Zr|c188A@df-{4$jH!<-QWWt zk&tDe90r>QBmk1UC_^HhN96>nrID?}E#oQRScvdgLiDDRL{O9eo z_)!c;sQ}88sLUXX>xG}17`uM!23}j36JYA^jWa#+&+POQrw%P$T<%*|@4sW_3i|Dr zprPD-VE;?;o7h)h>`U&PS)4lk@P{WI{Mz@Ix9|IJ^3Bdf-@RMdg=3e_t{eNccXo~+ z`u+W&)T}%>KK|IJ>)p50zaBHP_q_U0a^l%H&VBs4bZ{k4)%WHWznq>v^5@36&whMh zWzabv{O*;LKSwTYPwGpX|Ej?kwfQ2qH2!&pIP03-ymS4d(XGj$g9nZ`pSxk+{Apu5 za`f8N)?I~_)0?#M@(HE#$9szMd_H@4Irs>%apA}U6plV_Oop((20pp*%#|N@#)I^b ldDVE-d23O=cwKmx@q9ge`KiTR?->Bh&dg1J^W+QX{|5|;)NcR) literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_1.png b/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7f2837d7c8340da2563447793791d798fff3bba2 GIT binary patch literal 1110 zcmX9-e`p(Z6o37B?Xnu%l*KmIbjw&A$B68Na~|`i*O8SQyV{#(n9+b;*jS?lw4KqA7xUL2aHjD^Gqn=xp)SWDBQ6m->N9y`V)vp&;xgG#z95y%c%`Z{I2NF6BI{HFZcXr}C1OEk3dukzD_YC3nx${li+&e` zaEQ{N@mNO03UPZm<7kvzsOCeB5ZcrbDtZ7ofDnd>cDv$oXGJtK6pyn4859{Y#>LX1bWY5f zO3_M~wM=EBV5h;sgEI_n8N3=srk(z*H&~!WGZ3#xdR;4`1rB!zq$}#j;{hroFnNhL zRiT`es)kxGBsWY0Rf~29>BR#C8K#*i&&LHJ6^&-&@j^On=5m#lm3qC7z$Jn=i4hq) zlXvkYJX~R7)u3LB=Ih!@BU{@nZy+0Px06n%-|gXXpFmL(%f&*?V{$g0Sk7dvqS>g> z5MnWjw<{sH7Qs_8ZN&I|D!gncp(Crz zc|jx~K|{_D76*t2Bsx)?KstwV5mbsHONV>LlfW_%;IN3`RHAr7^JjD+pI1%OsMSo= z)N+M^kZrW)JxIGFJRyf!O^N6UC2u6m zqEWMos8JzV7Uck0fKbzmSX1skT&kR^R>@TIKBQ8K2?qH{M37~X@TsIPNfQP`6j>ky!FjM|G02r?zx`#{yVULYDj9`ziZ*fnO^m$<7&3|%Z};E|C}pE+^nf2`Q!mjD0& literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_2.png b/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..251476d3532a8d2dc3c050cb22b09314a37e9ff8 GIT binary patch literal 860 zcmX9-F^HpR6n-=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_3.png b/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..29cd1e87e380322a60e9f8bbbd2f12c89dcea34c GIT binary patch literal 5442 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_4.png b/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ada0ff145fff967e6c3cd78923f40187a904167d GIT binary patch literal 5165 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

NM(;ABcvSS7(HGE&A;EL$r% zDZ7!YZ5CY&xCQWp!50Hu$Eb`an8(E;qu8NjP0cp-5?bO3w@i7XK_VHVb23{{1v@TR z4Yh8@n?+;OHc`Fga#J`FBB?OLMg<`$%jsw|pG+1r8QZdItE!QwUuvdRX5Q9;c`(PPtfNVh=5GfD#s_J_Oe($nJVYl@>KLFlcoxM}WM+|5<#A9* zNHJgq!QlZ3fD{i(k|@g~D}pKsd$cH#(u29ITqwkC+iWy!)YkHb zfs73>x`)sDBnwv@T5pPGD_YnzDqB_!RhzgQC?6IKxJ1Sm5y)7W)3r!8r4`JST{0U^ z3AJhz#~}-l0|>RVNVMhdz#EUH>vbw^+<{uDu%akLB62LIkbyWAFc{Kg$s!k6<%vef zk0c+`aFiyI#UPt&A3wEwVEy(F9Gw^!;ORepdZkU8VK;P(1bmRP8 zKOC4i^ziGm`uwc#?B<@0l_BgU@w@A>Vsmxuv9*s*m48+S=hrWD2%Vfha%KLZ3m08qPYoR$e&JI7{@}cR ubMe`&X?8KqFJ5N8darMdUN+wUxAXV)sZZu=(n8xhjE#=wvfYv6jS`?u<*V2zW0jv72kWG-#yB& z?!LPNfL9Mc-@otc#Y+qaeSTg3kO2(f-7g>Bz6>ueE-x_aJ z33*E!xoB5bH}k9w_uaO6KAh2r!Ev4- zWNM-@tR)DJqAtvSnY#^^yUn&Ps_rO)sbG$VdnOgmn3XFg3oTnscZqk%SIwd5y01tC z&;cBP5Fi2A0h};EJyZ#~4oYHFA5X_^Z4TI3WscO-^{8dGLU+qDq3M$*l*b5uU3M|5cEG4K>7 zv$!ErGmUenO6bkvrI#hksz{o;K;4m76qEw00ioWDMKAXar0=dyCw>)ugHx80VQ90N z<+?V<`aBznTq1F~!tPb3(I?2HkVm5xhf)z$N`L(P_oIJbe&CPyj~e{=<)7dB=I-JC e&4=Ni*2kV-!o`2T|N2+Y;Nk7#{og-*{PaJsac8Ok literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_4_3.png b/resources/g2/track/bm/large_turn_right_bank_to_orthogonal_gentle_up_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..9076f6af53c03fd995f220b76c9fde06d1e73742 GIT binary patch literal 1346 zcmX9-acmNI6#lieLR%}HL|IEBOEJ=VDsI<$8l2~LZLr1lwAV=#6<4(A*mAKq$1H9* zu_H?DO);WjN;l?+K}AI7O-TdM(4yR;$(Nbo>2*aJWAfOQqAO0^mwOstdGQk(&-|-eqAucL^yjq;UN&dMp;0s#TJc})yv%s+G!<1PEEv5$NFr^m}fW@R!M*k z0VW)<6yHnpLv~@*D@sQsFsXoP9UNgH49fr@0nqXJv`}b~NLabtqf~a1WS_whwOEGS zZWszlP>~E5D@dtQCs)yk#)9fuCF3HjKD8rAc_O+%%pk=i3YAPrA!_(nS{@p3OR>4A54UWB212GP|Sc6CW^A_^)8diZ?}isZY~gr_xGn#DF`Gq zkUROPS4adUR0J`^30p$zNt%Kwwm*y3;-Ad5N5ovW#nE%Vl}%G3C!hu4JHyHv|7q& z)SJyTs<2`TCyx3EG^AGalSon{gE}d+$e{~`0UUDbO!%?s1rJ~Sz-RS!6qtYON>gTj zP*e3@!|WZcyS1NNXO68JfR}5t&m9|otVglGy^WZ5^~C5|!{Oo;<@ZlLm7IcS{Oeb~ z+&Q*sAMZtZ@x9&w)Ussm;;mHU%V{Ovvx{o?;oDpChDMj(GQH7T(mbP~`uU-6+od^| zlBELUw$sdvZu{fJ^t%hb?q7MjdG>dE$;gkr_a_f_{B?jgkK7tQQ>fgjC@=lv_U0+g z+N$$Ey{PK_t?N@JXoyYR*fBZud`;lS+QGJU_MX05;)?bO))kX3Ccm&g5r1>^;nJoG z-$3Fj^=#pPWtUGTE61L>+2qW++dVaV&k=5}L)?@)*8T6_Hym^J^R{1a8Ml%%ymgIx zr=v_KI5+D`?WK}R!6sp`uRXVC7qTgJc?0w2ocy7((OnOw$dSR9^=pfte%QRcup)om zz_Y#dYS+WvOP4=RR2JRjwcYki-_lx9+jxAJ-_p0?pQ$b1yFH&wo2cvAP8J*-omcns z&ep^6Cpp|lzt{e{c}KZXTBGf%4osM!y(g1g+%PygRomU_VmGTT&7y4wi(Jw9%NiC> zKB8>wJVCxIZK&*>b?4xhALos`)0jj;_19NDebm@-=w$|9swmykDQ@ zDurxhPC*U;U}Q!4-0Jk4nXWmU%yd^?%xeN56I9J#Se9NhGBSn@8l(-R3aop zfm#HNBw%R7qep@^ZjXnTjG!)QNa~|XTc5$5U_!8+67e(yYLtm= zN{L4!4H)RCMbqOj#JrY7(2iN)yLpKHeIvBA+)(xHqPXM_TC@Dmz z;hT*jJ0tVBHGzO78uiBGQJD5ZwE#Eek_?}6V`{%p&q|nt%9}I>QjW-De;@2g2zh|O z5Sf^(A~79}o3wJqtaIDV0k1t8^2XT^O!g6SIrIa_0tnMtSkrbdgj!6_Sd4HwUdRxM zNL4CYr_-2BdR%NF#10boO7Wmv+(n7vN&!@3&@6;b9QsKZm8an+igSma|G>Ix1r6T5 zbM<`yh8?Jw`_97h=5wv8hR|y-mG#2z0#dWM?%0Orw!$A3o{Yf5gN*~zW|!C0-r}qk zJnFw?yc>5Oec1Bdh5BX3#w)?cgky~zE7@ybb#;rJ*@is>!ik>`_h+meHErnt$_p{sYFc7FOx;@0vz zPog_gMU}myM=U?CoH;MPZtu1Vv}oH+Ui`?(l|PS9q-LJ@^7VouOYP>bJKI{?K7G(Jw7;@gI#gP*{@c@v`)4Z`Pu_j0Y{sL@&+^WnF)-sw zA8wt!wfD))V`Klmyd|DL#}Twxlh8$+7=RIP<%k!p`H} zKexV2pZMU^zP-1H4vd`q%a{$n|GBm@)U>Ss?yOVtLhN+cxM_!KLhXwtTzYdw1(FpW zT->~U{^1!_vFJSUkuh)Wy4u(=uy5|RmfDlr$>&y^T2`H3d1blpj~R{A-5cY%n`W`~ai+Los{j7Q(W8icZQlRFo;^9xYwo F^gr`6u?+wK literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/left_bank_to_gentle_up_left_bank_diag_1.png b/resources/g2/track/bm/left_bank_to_gentle_up_left_bank_diag_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fe1bd7aef574e72319576b95e0542b162803c4b4 GIT binary patch literal 1134 zcmX9-eP|nX7=GKVy?!{O%OBZx9U09ajzdm8wwoUFYOifpuj|#_FzBgK4;EM^=XNU* zq6;;HY=nB0Orr)H^q4{77THD*&9)2z7MJO%k)?QZ0mF=}YS=Q{Vqrfs2G9HT&-=jh zyzlXeaqrrmjXeOcc68U!o>m=b#fC0hE6;6TC2|v*isU#}6nR;eR8@&aqse4CmotjRvSl@zO^O7T0fFz8Bu6ml z3Wdp7oJppHOwOM#s3kLAt?3+r`IugXcSd|JP4=W!>THxNBz>ivV$H|umcHC5dU5a* z5Mn_Sv5bNh;`U0$(JbMpPNJqCt!fAr-2eiBAHx*8J%Zz!$D=dMSwWZ&1S*lpVmgfq z1)OrYStlvD7{AA>5WWZ{YmA!WqFFwX7xj|gumUa`C%tY)BzT#Y6i$f=v9v#JD25p+ zS_!kBsV*1nEI34P2EY{tkA~4{r#I)33an!K;#E~|Xhn2ZARID{hrC4G$7EzKuZm_= zt|Zl3Hrgm8m(47y73~h%L-;5>39jB2^uXfzPu3V4zjm9cYq zTr3fRDi^CsdOehHXys%CVN_m-`CH4vxp-nele3Cuv&w>> z$5hcC@w>DjkqWcfn3zum=ChGXAyuywo6SYU0{8$_01Y4uFb`0}0JR`+D6FEaj;xB{ z0fmAD3x*dg0gwntaiTbdbO9MbREi->hkM4;z;oaeu%PUWgouRZ&FFGIA2rQvy>6lw z7ajmA+{D3)u^IM!{Y$jg?UN4#JYka6%O!PB&a7M`E0^0 zX6sfFHLEnwBLk2H2(`S3wdn2xkA_pV8l6hshgvFek|YL$ayYC|WRxb8ES2S`0#B9& zqV97ezY9e?C`BQIMJC@me)`egTlaq8@SbrI2L4#s*XsL5ho0HHWBTMz&wUWx{6NRV zQsG?tV5Pl#g`S!i*eLydK0Pa5IKTeHf8KMGcLN8u*ZCvF^|#G;7CV=I_;~T^l?%pK zb63CCC%bDMyFQ6;$-l7Mgo#`I+R@ifUD_wvU~7^M-FW2gll`Ls$M1JWQ^Mg(v+A>> z-+dmM`?>3(oBh^-4UZrECH(Sh$5uXM-y8Y%3i;+i?K5R=1Rv7>g|^MNpI_-&dgAt= z)wb!<`LQjJojR16;jix$2HfRi(r*FB$(bYjx6a<28+y?_b&Z_b8|<6ew(0bt-TNC~ z{-ci^U4LTi;+-?69=7k8B>P_ZbebIe=8KOW#D9JN#iD6z q-uQ7{?efzT<1eYx)7So7*Te=croSH;KFzg6gVEvfq0@t}zWYC4o9{IM literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/left_bank_to_gentle_up_left_bank_diag_2.png b/resources/g2/track/bm/left_bank_to_gentle_up_left_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b508c1c835ac82bfc78bd13b4c9ee0ebeb59a44d GIT binary patch literal 1113 zcmX9-e`p(Z6n|aYTz^o4gc4j>g9OdoZJzAZ14B9WT4TA{+j^~0Zj$QFop`!qy4&I=*HMKJV8*?*pID zdmnC}3=a*g9{_-%i5JGEI(4`ckM?zU@*jH-&H;48_HEPSow2K{Yu&na-QC?iJw3g> zy)Ksv!?3=-zW)AxZy*pLNrGW$o@Yf-P*o+7NMtfO%PN%1D~{7@w@Cu%5OD0EAb4ci zABz*oR49|>@>aB1Qmb~V-Y^&(i-ZOh)~iMQx){u<2=Ni|KonaiP4 z$wztuw3p!gp=dCy;1P`!^^lrn5+<82@!V-mn!EO0;4}Qgzj6>1DLU;U1Cl#lmP)gB7|mF*rLVND=2~qP4dQM$<@JXB0UjsBP)KFDWVEv^Zl%(dyycYbcAbVO zi>bU@i~4mL&&Fvp$rrOy#nfu0Y_nEww{IdEAOfHQ=l~`_1)zZe>VRWVTt%jVoEjGd zg@iN>g)lfAARdt7MJW;)94g4DnnaEP_l&22Wgx;~vgp-fcv=tV4Y62E*tXeh+Ni_j zlYop5(z=&3{Lw;CaYA}aFx#=>YNonYsH0jd=mE-)g$cJn`(>VtORTQRMp`SHX}fGT zoib|IDV9YAKn@_(@gmuwyANL?o^3R!Z00`HYLyWLUY5mpTp@`BMPz8wWXKXrtZ;ZU z5Uq5_RL+dlo<^@fFCI<&S+m|t@rxiEicS7qAz zAhy49dH;#e=<^$PzV+Mduc@Q#jH`0|_(Qud)B@7`FIzLMvkz=o+H-1CjmIZl#?ce< zwU6dzWz%>1@YKb(kNvaf^0gg%7uJ3<_DKIOUYX&!k#C-O^+)>R9pUKp+g+!=Lb8x3^WHMQK zc{ze0a=E;sqC%zBYEjfc5I9YfENijbIhV`j^93T2Xd*G0PUi~+)BtcJpvX##MQO8X z98QDVWAyo{P=txa?Mcy-$p#5MVm4NCq>49d1XdTYqa!XN?lUJNTzbNtO9zYjgh>q; zJ#gSappg)V#65~sNLfg#Va@;x44e@lOlSe10ALV=Qz&?~TF~i&M&k%YO<1idp1&0c zz<6AZDz&)EKxvGO&cx}>Jjx12yPt4{NpFk}CYfm3s=?F-lh#P6I*|c9`@YvoXXH zF*_}~*p$zn4ZHGjUr`LhY(k;Lbb2$2S#iQa(;k-fI~);@Cmslh(P(CJGM~>wpyq(i zhoB(^5mVDiy){F)vzB1a5z7mcg-C8DRfLs#g#uHlOd2h%H?T&douu4MX_+(P@lJ#y z>4aFw;D8|!JFVaujbPLJop{(y$NbibFrSM1bE!n3a0}u9m;tZ@AOH{sU;=C1IVeM2ZccjMr|!2TnQ5=e7>G-k6%DYd0pl?+t4OU#gysp&8+FMq3 zx9$4o;+g}l`Wji+!}!uU><@DW%bwgYcMSa1H_^}Rm144kpLYEd`1te@fnRWIdaGp3 z#XjYh`guQn*Rf&VzJIIHZyzms+IY=L#oEv5hTpn%D>od7(+AF7?^(Bc?&iAt z<0wCR^pMuF`07w!u3f`!I=27xgPOG+J#8&S>+WU7=Q5*9Uf(placJq_xvH_+`)88f zPxdOC74`F*qsTTuogH0v_T=*SYwupFJ3M!UYI^A?OYc}X-dM3OdE(M-<+yCi>=wpx z?e5!O&Y#n*{~P&!H+xlPk=&D8ZZ6%o({kmMaxC>=wfym+W82BguU7BL*&Ures32jQ{5EC*da=$4LKsJUPC;#1yo*cD5XE HerMo+`W!Z3 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/left_bank_to_gentle_up_left_bank_diag_4.png b/resources/g2/track/bm/left_bank_to_gentle_up_left_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..c3621238f8562d2a4eebfe3d3301d70232ff2edb GIT binary patch literal 1104 zcmX9-acCQL82#3?y>7K;7)PMdWg75S4vp?6*Lh=Sy_T%It+(|iaool^4;pNc18*87 z=rLo-B#fhm5l8-r>-`b7um#=b!Q#j?NS&daEbB6MYQV@&S7$aO6y4a*l)?MHkN3~_ z;62_ayC*^eYX;WlZ~& zH0qDVgUJ+~$@2N4R4S`gE7fQkEP;jTeueXDVZScpIh8z{V9S|swW!$hNyj#pTa}Ox zBm!a#=mM5kuyV>>&wJWcA98}IEunilLX`jj4o@S$tQDC&QwfG ztJrDF$v2kEZU#I8cq8DC1FmCK&KoM?Vwq8_aH^piExm%y@`OjGe6bLb3e$O+EvbT) zkn0(>SxB_XnPsbhniaQ)!ig|RMHn_F2q{_4#$v@(s+`MNrrD^~TCElWp8|LWBlB*y z5bRC=hVY}<;ThS98<2T{^ zoPW<>Il6F;crf|s^pkTVr=I)tnKz7?4OfOf-x$3{koNOij^COYsDJH0G&r>F4AbEaCS(-DM$rYVkNc;4c02p*3o5D3L$@l-0C&zCC|!T^*JSVm#7sO)yF z(`E4bjDa8H6V$?$?1LjOj$fv!fe7IUpnKWR< z!AXJ0VG#jK`jokds*=&5k^xn$s3szm(gCmlRtyuAO1DNM>h)oxag=4#He1f^z7Yzc zWKu(@bd=h_YK>OCNx;o+f)|aBAnl1V{sb4!SmSw{med$bIwOZOJZTYV!OMC>)=*rC zOYT(OFO?#NYEnsoiUYL`v@Xz#7#UKVVtPxG5+t*);0Tw+6dGl56;EoMCfsK>MtC~m z;3N;93pk2VPdOQ=N>NlyDOIE%Hxs0dqMaP)-|rK9d#GFZx`DwP|E0x$zO07QT&KpLQk0ji6ok;{Ri zVU*9YdJqWkQxG>no(04K64b~?pfHQ#c9ij=d>9^pCxM~C%wl$4?RMgR(G&^uiG)Xz zqNS3A>RuWf5H1BJs@bsC8rKVXqgb{?E6zkUkg3HBC|B02fYf3pgVI82?Hu8AOlgkx~HN{m);w*88FE&W??1hmRlV z+y32>=3S%ci-r8y{D$+Ed3!r5$p|9`l?fgn}|B z|7}rZ6H%SRAGy6qDZf4R`{t{cp|wT6z0mJ_t8c}EJN}O7u`^dz$tTF_@Ziyx z*6z8i{<35I%)hT+TsN-yqaDVsw=LcTBdZ@+c9BW^R literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/right_bank_to_gentle_up_right_bank_diag_2.png b/resources/g2/track/bm/right_bank_to_gentle_up_right_bank_diag_2.png new file mode 100644 index 0000000000000000000000000000000000000000..38ed74398b1dc6c72c612d3cf25f48a2d2b5f0cc GIT binary patch literal 1054 zcmX9-Z;0D;7=G_>?sgkxD`&+hRjSMG;;axQgMitYJL(y|9G4r#bu5E8>s^QW5Vdec zf~#7zNR)zgR4Eu{C&3jxBx2EU2066TjH_5N2b~lx-icxK!+{6>%osfH`|^BwpAXOT zyt%lLICS8y0|0Pn{)yS8;7$fJJvJ2V%pW(l0fu1lspYwV4h#$o4h{|t4Gj+ukBp3r zj*em&Ha0dkK0Y3a#bOi{=Qvgrd09@Ws*=y=%jIglZaGfN^Zb6FiUZ4lz)z%7;Y=o) z&BY5vrd$zfb*W*iO}E(T8XSownF)oDXvwH96IGR3&vSM;*{mzxW})X9d%lyvK_Vf` zf-Yh;1+$Bxb}ig*;;0u#eF^RB2stqT0YJhqB^1(dTqg*FVb%pFELdWQ8BvB_)HmkVFVn;Q6-9hUD8J1~0n;?rxrY3U@Rdn-myR3H2 zyl+lHN46wq5D9oqm58u>eT`6+j0t0X6};7@zR0P&`KWQ)WNg*ef^ptqyAYL>TBOmWYQ^Y&0WMxiqh98Ka~%%#!PvJPLN1rbjE`Rj85xi&vLvwZB`FScfm>iw^u z;s)o8pT1mqPk9)1;l|MyD#QjmB~5*;Jo4D`+SO-Ie|UK0uSI_Mo=NKPN6+8=)yXC9 zx0UP4WOntnSL!=QVs!JYyt?u|xlNwAa*Da~!0$KzzTlz!)PFlm?>I8|aKoGyIxFZJl#Cw@Lr{+NF7p{M;H&)j+T_^02U|KXWC zK0CNEz3R`@?&DgMNAaD}_b(g^_r%QFTI<_4q`^yL=P$3l6*LE6er{p*>f`4w{trkZ B#N+?~ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/right_bank_to_gentle_up_right_bank_diag_3.png b/resources/g2/track/bm/right_bank_to_gentle_up_right_bank_diag_3.png new file mode 100644 index 0000000000000000000000000000000000000000..cfea637c67aa01f0f4b4d7403edeec3513e34ad1 GIT binary patch literal 1185 zcmX9-e{2(F82;#f+{VOWiWb);C3JEmm(l5|2Rro!H_~lqxVal?q(H$FOQ`XJN365K zOKh;i29Kmd(PFBcvmvKcx51gzcwkLxXyRcS?c_olSG5SyW+}1}#Lp6v=l%81`y|iv zzK2J)c$O{gTnYeKHZ(Xe+Nk}Fc(|>pkM{pV9=) zkaA|+sHV#cx|ISp4%h?083w3~5GlJSgZgwzFubv{sMO>foMtf_PdGvzEaoNCJe?Ie zBf^&wVnvPA^u&Up!b;9+BT&qX69I}2aa@e&lc7*17SmHHL(|H|Vy#w#z##xMf#7K? zopo>pEKsJS6`xWKWovS=o~hn0Ex-=UY9;J;kJH6rZk{AXhK>3g%fgvhJfF^(Iip^t zfS*A`&MNtxau7>~DK*MvlYzV{mGoq_l&jaTLka*d03rY~04e}^04fN84X`u}i%?ad zSz=Kj;2=%`%>zspKn_5`4r4e}Sf~YIAqq_e+%=v63=O<266Ebt2#d>}w8Cez5yMcc zRRcD-907obJ1E)CDo($K3MMJnd}=+ET}TveYh_rfp*BD`5s%yIqntqw4+j`o3Mz3a ztHzC-S~YX9UM3g@Y5o2Hib4BH?7ELL?LSAQlR=&&LIWd^jxN?g-&dP`FCt zI^!;~Sk>!-ekYVrn8cw*L4#==Khe`MfA z%_BGUnddCmM&I+)pZMvi=GF1_LkGJzyz%PkS8QMQ?0cyE;+3Pq^3VU7nwq+nztP^y zOkz`eZyg>z%8makoyzqcd$6~wSG)Z3-XlctzMbf;iQzr70ME-ZF4z)2_Gv2VtuQcmMzZ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/right_bank_to_gentle_up_right_bank_diag_4.png b/resources/g2/track/bm/right_bank_to_gentle_up_right_bank_diag_4.png new file mode 100644 index 0000000000000000000000000000000000000000..6c8fc3415254d36d88aba79eec7f6ece14dd743c GIT binary patch literal 1192 zcmX9-e{2(V6o319D-%jAtZ@YjHhAiZRW9z3jvR78hljh3W2>`~5>F^l%_SD7P|ZcE zX`sMO%B)F={i9~Zoveld)ih9&#!P6i(V`V@rep;wPH2`UEYjfD5|YpRmAt%9@;>h! z?CG}7p4C1J0A_FKTDz$h=htjSOGC{stuh+{8lY$6=5@8QuCA`WzP_QMp|P>Csi~>C zxf#Q-mX;QcMx!^GOeAS$7@FrbSq8MrX=ts{tGY zcxaG$EGA;9fHoh~RWb%tGNXzERb_l5-JcTw?`Q=yrxf{JOaj=~8WNjYi8!}9?_2zxy7Kp+)~WD|)(E>|v>5g0_kLl_y; zGD!oUA)E!qU$jR{o@80hRpO;;eg?G?S}mp5Ta6~3Fbfuoo8|nD+AwcC5FC%i)pWK} zpuxdnZeA-njIxUeduhebC&SKhMarkbrF^mfgN5WIUGGOB{m!OwCL{PTIqCzt1%Vw2Q zDT``c1}Bi-R$A6`QKKV)i>gH~+m(tZITOlM69tqn<2s;>nANPc(?%ChdY!B+xuQWS zsRXlWrKF}&r9iPPN&r#;p_&%{8r@?UeBN-eNQFa>;m%|jyPbEr1g}>l%|6N;qDh4z zQ>;115ha@mIgCicQJ6#t8fDqq@l(rMryu>m?oHi1tiJun_FCS*VeM<1R~$Kil|AQM z{6zEC`>C^P+js0QjZZF^=$toyVW{_E_ne#f^|@=ha@0isgCEX0&re&=96mg9@$TQF zeaG+qJ2d>y%DQuV_I#XN-*E3r!G*b(Pw#A-{rujWUp@Uzv-!`|jT6UE&qAa*?k`D`;b~X3Yxk1cx?#h*?zN+9 HwjTH&l!_6H literal 0 HcmV?d00001 diff --git a/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp b/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp index 88d7763af2..49cbab0635 100644 --- a/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp +++ b/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp @@ -15274,6 +15274,2232 @@ static void TwisterRCTrackRightEighthToOrthogonalDown25( TwisterRCTrackLeftEighthToDiagUp25(session, ride, trackSequence, (direction + 3) & 3, height, trackElement, supportType); } +static void TwisterRCTrackDiagUp25ToLeftBankedUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 0)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_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_BM_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_BM_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 TwisterRCTrackDiagUp25ToRightBankedUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_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_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 7)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_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_BM_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 TwisterRCTrackDiagLeftBankedUp25ToUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 10)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_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_BM_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_BM_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 TwisterRCTrackDiagRightBankedUp25ToUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_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_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 17)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_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_BM_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 TwisterRCTrackDiagDown25ToLeftBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackDiagRightBankedUp25ToUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackDiagDown25ToRightBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackDiagLeftBankedUp25ToUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackDiagLeftBankedDown25ToDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackDiagUp25ToRightBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackDiagRightBankedDown25ToDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackDiagUp25ToLeftBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackDiagLeftBankedFlatToLeftBankedUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_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_BM_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_BM_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_BM_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 TwisterRCTrackDiagRightBankedFlatToRightBankedUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_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_BM_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_BM_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_BM_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 TwisterRCTrackDiagLeftBankedUp25ToLeftBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_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_BM_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_BM_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_BM_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 TwisterRCTrackDiagRightBankedUp25ToRightBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_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_BM_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_BM_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_BM_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 TwisterRCTrackDiagLeftBankedFlatToLeftBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackDiagRightBankedUp25ToRightBankedFlat( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackDiagRightBankedFlatToRightBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackDiagLeftBankedUp25ToLeftBankedFlat( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackDiagLeftBankedDown25ToLeftBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackDiagRightBankedFlatToRightBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackDiagRightBankedDown25ToRightBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackDiagLeftBankedFlatToLeftBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackDiagUp25LeftBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_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_BM_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_BM_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_BM_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 TwisterRCTrackDiagUp25RightBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_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_BM_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_BM_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_BM_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 TwisterRCTrackDiagDown25LeftBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackDiagUp25RightBanked(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackDiagDown25RightBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackDiagUp25LeftBanked(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackDiagFlatToLeftBankedUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 44)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_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_BM_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_BM_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 TwisterRCTrackDiagFlatToRightBankedUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_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_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 51)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_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_BM_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 TwisterRCTrackDiagLeftBankedUp25ToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 54)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_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_BM_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_BM_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 TwisterRCTrackDiagRightBankedUp25ToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_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_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 61)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_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_BM_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 TwisterRCTrackDiagFlatToLeftBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackDiagRightBankedUp25ToFlat( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackDiagFlatToRightBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackDiagLeftBankedUp25ToFlat( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackDiagLeftBankedDown25ToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackDiagFlatToRightBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackDiagRightBankedDown25ToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackDiagFlatToLeftBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackLeftEighthBankToDiagUp25( + 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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 64)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height - 4, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 68)), + { 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_BM_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_BM_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_BM_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_BM_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_BM_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_BM_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_BM_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_BM_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_BM_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_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 67)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 1, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 71)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 79)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 7, 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 TwisterRCTrackRightEighthBankToDiagUp25( + 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_BM_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_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 88)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 92)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, 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_BM_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_BM_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_BM_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_BM_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_BM_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_BM_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_BM_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_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 83)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 7, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 91)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 95)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 1, 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 TwisterRCTrackLeftEighthBankToOrthogonalUp25( + 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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 96)), + { 0, 0, height }, { { 0, 0, height + 40 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 5, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 100)), + { 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_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 108)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 8, 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_BM_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_BM_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_BM_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_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 98)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 106)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 99)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 103)), + { 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_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 111)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 9, 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 TwisterRCTrackRightEighthBankToOrthogonalUp25( + 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_BM_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_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 120)), + { 0, 0, height }, { { 0, 0, height + 40 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 5, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 124)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 8, 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_BM_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_BM_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_BM_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_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 114)), + { 0, 0, height }, { { 0, 0, height }, { 16, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_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_BM_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_BM_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_BM_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_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 119)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 123)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 127)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 9, 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 TwisterRCTrackLeftEighthBankToDiagDown25( + 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]; + TwisterRCTrackRightEighthBankToOrthogonalUp25( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackRightEighthBankToDiagDown25( + 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]; + TwisterRCTrackLeftEighthBankToOrthogonalUp25( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackLeftEighthBankToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + TwisterRCTrackRightEighthBankToDiagUp25( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackRightEighthBankToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + TwisterRCTrackLeftEighthBankToDiagUp25( + session, ride, trackSequence, (direction + 3) & 3, height, trackElement, supportType); +} + static void TwisterRCTrackLeftLargeCorkscrewUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement, SupportType supportType) @@ -16542,6 +18768,82 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionTwisterRC(OpenRCT2::TrackElemType trac case TrackElemType::RightEighthToOrthogonalDown25: return TwisterRCTrackRightEighthToOrthogonalDown25; + // Diagonal unbanked to banked + case TrackElemType::DiagUp25ToLeftBankedUp25: + return TwisterRCTrackDiagUp25ToLeftBankedUp25; + case TrackElemType::DiagUp25ToRightBankedUp25: + return TwisterRCTrackDiagUp25ToRightBankedUp25; + case TrackElemType::DiagLeftBankedUp25ToUp25: + return TwisterRCTrackDiagLeftBankedUp25ToUp25; + case TrackElemType::DiagRightBankedUp25ToUp25: + return TwisterRCTrackDiagRightBankedUp25ToUp25; + case TrackElemType::DiagDown25ToLeftBankedDown25: + return TwisterRCTrackDiagDown25ToLeftBankedDown25; + case TrackElemType::DiagDown25ToRightBankedDown25: + return TwisterRCTrackDiagDown25ToRightBankedDown25; + case TrackElemType::DiagLeftBankedDown25ToDown25: + return TwisterRCTrackDiagLeftBankedDown25ToDown25; + case TrackElemType::DiagRightBankedDown25ToDown25: + return TwisterRCTrackDiagRightBankedDown25ToDown25; + case TrackElemType::DiagLeftBankedFlatToLeftBankedUp25: + return TwisterRCTrackDiagLeftBankedFlatToLeftBankedUp25; + case TrackElemType::DiagRightBankedFlatToRightBankedUp25: + return TwisterRCTrackDiagRightBankedFlatToRightBankedUp25; + case TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat: + return TwisterRCTrackDiagLeftBankedUp25ToLeftBankedFlat; + case TrackElemType::DiagRightBankedUp25ToRightBankedFlat: + return TwisterRCTrackDiagRightBankedUp25ToRightBankedFlat; + case TrackElemType::DiagLeftBankedFlatToLeftBankedDown25: + return TwisterRCTrackDiagLeftBankedFlatToLeftBankedDown25; + case TrackElemType::DiagRightBankedFlatToRightBankedDown25: + return TwisterRCTrackDiagRightBankedFlatToRightBankedDown25; + case TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat: + return TwisterRCTrackDiagLeftBankedDown25ToLeftBankedFlat; + case TrackElemType::DiagRightBankedDown25ToRightBankedFlat: + return TwisterRCTrackDiagRightBankedDown25ToRightBankedFlat; + case TrackElemType::DiagUp25LeftBanked: + return TwisterRCTrackDiagUp25LeftBanked; + case TrackElemType::DiagUp25RightBanked: + return TwisterRCTrackDiagUp25RightBanked; + case TrackElemType::DiagDown25LeftBanked: + return TwisterRCTrackDiagDown25LeftBanked; + case TrackElemType::DiagDown25RightBanked: + return TwisterRCTrackDiagDown25RightBanked; + case TrackElemType::DiagFlatToLeftBankedUp25: + return TwisterRCTrackDiagFlatToLeftBankedUp25; + case TrackElemType::DiagFlatToRightBankedUp25: + return TwisterRCTrackDiagFlatToRightBankedUp25; + case TrackElemType::DiagLeftBankedUp25ToFlat: + return TwisterRCTrackDiagLeftBankedUp25ToFlat; + case TrackElemType::DiagRightBankedUp25ToFlat: + return TwisterRCTrackDiagRightBankedUp25ToFlat; + case TrackElemType::DiagFlatToLeftBankedDown25: + return TwisterRCTrackDiagFlatToLeftBankedDown25; + case TrackElemType::DiagFlatToRightBankedDown25: + return TwisterRCTrackDiagFlatToRightBankedDown25; + case TrackElemType::DiagLeftBankedDown25ToFlat: + return TwisterRCTrackDiagLeftBankedDown25ToFlat; + case TrackElemType::DiagRightBankedDown25ToFlat: + return TwisterRCTrackDiagRightBankedDown25ToFlat; + + // Large banked curved slopes + case TrackElemType::LeftEighthBankToDiagUp25: + return TwisterRCTrackLeftEighthBankToDiagUp25; + case TrackElemType::RightEighthBankToDiagUp25: + return TwisterRCTrackRightEighthBankToDiagUp25; + case TrackElemType::LeftEighthBankToDiagDown25: + return TwisterRCTrackLeftEighthBankToDiagDown25; + case TrackElemType::RightEighthBankToDiagDown25: + return TwisterRCTrackRightEighthBankToDiagDown25; + case TrackElemType::LeftEighthBankToOrthogonalUp25: + return TwisterRCTrackLeftEighthBankToOrthogonalUp25; + case TrackElemType::RightEighthBankToOrthogonalUp25: + return TwisterRCTrackRightEighthBankToOrthogonalUp25; + case TrackElemType::LeftEighthBankToOrthogonalDown25: + return TwisterRCTrackLeftEighthBankToOrthogonalDown25; + case TrackElemType::RightEighthBankToOrthogonalDown25: + return TwisterRCTrackRightEighthBankToOrthogonalDown25; + // Large corkscrews case TrackElemType::LeftLargeCorkscrewUp: return TwisterRCTrackLeftLargeCorkscrewUp; diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index bf3d1810ff..6b779358a4 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1287,7 +1287,8 @@ enum : ImageIndex SPR_G2_BM_BOOSTER_NE_SW = SPR_G2_BM_DIAG_BRAKES + 6, SPR_G2_BM_BOOSTER_NW_SE, SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE, - SPR_G2_BM_TRACK_LARGE_CORKSCREW = SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 64, + SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE_BANKED = SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 64, + SPR_G2_BM_TRACK_LARGE_CORKSCREW = SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 128, SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP = SPR_G2_BM_TRACK_LARGE_CORKSCREW + 40, SPR_G2_BM_RC_END = SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 44,