From c412cc29d486a9ca2ac7073d97b32d096b20b2d1 Mon Sep 17 00:00:00 2001 From: mix Date: Wed, 23 Oct 2024 04:42:58 +0100 Subject: [PATCH 01/12] Add large corkscrews to the Twister Roller Coaster --- resources/g2/sprites.json | 240 +++++++++ .../g2/track/bm/large_corkscrew_left_1_1.png | Bin 0 -> 1274 bytes .../g2/track/bm/large_corkscrew_left_1_2.png | Bin 0 -> 1329 bytes .../g2/track/bm/large_corkscrew_left_1_3.png | Bin 0 -> 1186 bytes .../g2/track/bm/large_corkscrew_left_1_4.png | Bin 0 -> 1249 bytes .../g2/track/bm/large_corkscrew_left_1_5.png | Bin 0 -> 1123 bytes .../g2/track/bm/large_corkscrew_left_2_1.png | Bin 0 -> 5238 bytes .../g2/track/bm/large_corkscrew_left_2_2.png | Bin 0 -> 5205 bytes .../g2/track/bm/large_corkscrew_left_2_3.png | Bin 0 -> 5448 bytes .../g2/track/bm/large_corkscrew_left_2_4.png | Bin 0 -> 1375 bytes .../g2/track/bm/large_corkscrew_left_2_5.png | Bin 0 -> 1172 bytes .../g2/track/bm/large_corkscrew_left_3_1.png | Bin 0 -> 1177 bytes .../g2/track/bm/large_corkscrew_left_3_2.png | Bin 0 -> 1169 bytes .../g2/track/bm/large_corkscrew_left_3_3.png | Bin 0 -> 995 bytes .../g2/track/bm/large_corkscrew_left_3_4.png | Bin 0 -> 1058 bytes .../g2/track/bm/large_corkscrew_left_3_5.png | Bin 0 -> 5211 bytes .../g2/track/bm/large_corkscrew_left_4_1.png | Bin 0 -> 1268 bytes .../g2/track/bm/large_corkscrew_left_4_2.png | Bin 0 -> 1407 bytes .../g2/track/bm/large_corkscrew_left_4_3.png | Bin 0 -> 1249 bytes .../g2/track/bm/large_corkscrew_left_4_4.png | Bin 0 -> 5457 bytes .../g2/track/bm/large_corkscrew_left_4_5.png | Bin 0 -> 5481 bytes .../g2/track/bm/large_corkscrew_right_1_1.png | Bin 0 -> 1287 bytes .../g2/track/bm/large_corkscrew_right_1_2.png | Bin 0 -> 1334 bytes .../g2/track/bm/large_corkscrew_right_1_3.png | Bin 0 -> 1186 bytes .../g2/track/bm/large_corkscrew_right_1_4.png | Bin 0 -> 5355 bytes .../g2/track/bm/large_corkscrew_right_1_5.png | Bin 0 -> 5209 bytes .../g2/track/bm/large_corkscrew_right_2_1.png | Bin 0 -> 1141 bytes .../g2/track/bm/large_corkscrew_right_2_2.png | Bin 0 -> 1128 bytes .../g2/track/bm/large_corkscrew_right_2_3.png | Bin 0 -> 989 bytes .../g2/track/bm/large_corkscrew_right_2_4.png | Bin 0 -> 1094 bytes .../g2/track/bm/large_corkscrew_right_2_5.png | Bin 0 -> 1112 bytes .../g2/track/bm/large_corkscrew_right_3_1.png | Bin 0 -> 5283 bytes .../g2/track/bm/large_corkscrew_right_3_2.png | Bin 0 -> 5261 bytes .../g2/track/bm/large_corkscrew_right_3_3.png | Bin 0 -> 1465 bytes .../g2/track/bm/large_corkscrew_right_3_4.png | Bin 0 -> 1336 bytes .../g2/track/bm/large_corkscrew_right_3_5.png | Bin 0 -> 1129 bytes .../g2/track/bm/large_corkscrew_right_4_1.png | Bin 0 -> 1242 bytes .../g2/track/bm/large_corkscrew_right_4_2.png | Bin 0 -> 5504 bytes .../g2/track/bm/large_corkscrew_right_4_3.png | Bin 0 -> 5324 bytes .../g2/track/bm/large_corkscrew_right_4_4.png | Bin 0 -> 1298 bytes .../g2/track/bm/large_corkscrew_right_4_5.png | Bin 0 -> 1194 bytes .../track/coaster/TwisterRollerCoaster.cpp | 458 ++++++++++++++++++ .../ride/rtd/coaster/TwisterRollerCoaster.h | 2 +- src/openrct2/sprites.h | 3 +- 44 files changed, 701 insertions(+), 2 deletions(-) create mode 100644 resources/g2/track/bm/large_corkscrew_left_1_1.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_1_2.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_1_3.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_1_4.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_1_5.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_2_1.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_2_2.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_2_3.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_2_4.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_2_5.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_3_1.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_3_2.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_3_3.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_3_4.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_3_5.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_4_1.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_4_2.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_4_3.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_4_4.png create mode 100644 resources/g2/track/bm/large_corkscrew_left_4_5.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_1_1.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_1_2.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_1_3.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_1_4.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_1_5.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_2_1.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_2_2.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_2_3.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_2_4.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_2_5.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_3_1.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_3_2.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_3_3.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_3_4.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_3_5.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_4_1.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_4_2.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_4_3.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_4_4.png create mode 100644 resources/g2/track/bm/large_corkscrew_right_4_5.png diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 7105f9b22a..6fa94c7119 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -6535,6 +6535,246 @@ "x": -25, "y": -5 }, + { + "path": "track/bm/large_corkscrew_left_1_1.png", + "x": -24, + "y": -11, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_1_2.png", + "x": -24, + "y": -72, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_1_3.png", + "x": -28, + "y": -38, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_1_4.png", + "x": -24, + "y": -50, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_1_5.png", + "x": -24, + "y": -37, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_2_1.png", + "x": -24, + "y": -4, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_2_2.png", + "x": -32, + "y": -16, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_2_3.png", + "x": -25, + "y": -52, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_2_4.png", + "x": -22, + "y": -58, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_2_5.png", + "x": -17, + "y": -38, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_3_1.png", + "x": -16, + "y": -5, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_3_2.png", + "x": -18, + "y": -21, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_3_3.png", + "x": 10, + "y": -31, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_3_4.png", + "x": -8, + "y": -38, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_3_5.png", + "x": -16, + "y": -30, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_4_1.png", + "x": -26, + "y": -11, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_4_2.png", + "x": -26, + "y": -28, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_4_3.png", + "x": -16, + "y": -14, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_4_4.png", + "x": -45, + "y": -39, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_left_4_5.png", + "x": -25, + "y": -31, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_1_1.png", + "x": -24, + "y": -11, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_1_2.png", + "x": -26, + "y": -28, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_1_3.png", + "x": -23, + "y": -13, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_1_4.png", + "x": -31, + "y": -38, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_1_5.png", + "x": -32, + "y": -30, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_2_1.png", + "x": -24, + "y": -4, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_2_2.png", + "x": -16, + "y": -19, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_2_3.png", + "x": -24, + "y": -30, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_2_4.png", + "x": -16, + "y": -38, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_2_5.png", + "x": -26, + "y": -30, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_3_1.png", + "x": -42, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_3_2.png", + "x": -16, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_3_3.png", + "x": -28, + "y": -51, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_3_4.png", + "x": -31, + "y": -57, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_3_5.png", + "x": -25, + "y": -38, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_4_1.png", + "x": -26, + "y": -11, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_4_2.png", + "x": -11, + "y": -73, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_4_3.png", + "x": 9, + "y": -38, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_4_4.png", + "x": -18, + "y": -51, + "palette": "keep" + }, + { + "path": "track/bm/large_corkscrew_right_4_5.png", + "x": -25, + "y": -37, + "palette": "keep" + }, { "path": "track/railway/quarter_turn_3_tiles_sw_se_part_3.png", "x": -8, diff --git a/resources/g2/track/bm/large_corkscrew_left_1_1.png b/resources/g2/track/bm/large_corkscrew_left_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b937ad056dfe5323bd149c0db71cee650ceb1716 GIT binary patch literal 1274 zcmX9-acmQH6#i}N){Zf6OK}C8*+GF5PON&6qE&9}hGm@W2Di{)l~XR*K!pQuP+672 z3Rb94q{AXL6fIeSlT|ZD#X_2_juI*~W=M$_QbK|LF{F@c>R9Aw3CZ`~_ufD6`{VoG z?v8e2?S$th003&+7Pl@h@vEgm6&0o4{b*DKpaOKf-MOf=mX(#2mzP&mRLEqq%F4>B zsw%l$u23kdtE*L7tro|1BuOv~#c^gq;GIsV&ld=XBk}l%B;^YQTn7jPps5v@P z0UH54j6B54V{RlJQWlbGnA5=m3&%YW#%;3u6T<&84IBpZ<|8ogR))EXF!;`C;o0G zB;|-p-c&A>DaH^2C>fx#0F51>9=SfCGKNuejNnrycSZ>2J#jcdV@gi1wiz+E$q?em zsKBJ0T-qmOMQ1+dE2c!4jU!4uikWb|g&=JV_63L8=z!X&qzkW{5!zVw`wY;4H&3CVVSelQwwJz+O zzxUuDZQnbaCW4N<<1{<(g9p?1Y~QeL=-8=A>sK^>T077(QzJ@y@?g zUBk+I<117ZLzDac)HCjrGn#MC@A|xdaLa<7k7jrGuDiWr&V{X3XRtsx;+B!ep`0P!0+pY() zm||UT-!FS9c4pb?J-3#Rxp&+?KV#tVH^`b<&F$VFs%N(_!N)`XtEQ@kHbp}~L|U+2 zTi55_`10lE#$N}Qb{qJX=a1eQ8Xi2`b!_*e)A_N&fn&W7UwfwWor#XVL*Mp<>XSdu zRc%rbjhDab=@v()C0Z^>@3t14ul{H>mCR^Bej#_r|%-O+LhBx1`bUdDd(Yn6l zFW#>g-@J6Kw|wRGubU41rZ~NGXnf0!9k(|&RoAV(_Sv*6_SOd5tO=VI4F7dGvS0S+ t8q-C5e{ESYN$%^r{~t{+dJEBPfXkK+b_b6n&Xo)VZHwAl`&-`c`5y=cEIa@J literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_1_2.png b/resources/g2/track/bm/large_corkscrew_left_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d6e0841d5a8ab568b51cda477b3e87a7042a87c9 GIT binary patch literal 1329 zcmX9-acmQH6#i}9=tf~3%+QSnySB*9oLbmH8dmU_x7n4B-Lk{gP@rfD9V>FmF$-4G zXon4!a6pk}6s)9R)ozwJ;lzrSG+3b15(X4jrC}8+f!Rp26=eFegyehgd+(q3{qenT zS9_a!`qbG|0RYoAElnK-mKADE8L!auV@-bmzys~AE1L^zQBhHGaWRj_D=8@{EiIig zWeT6qFDol6FE1C#<#G&D5Cl$9TBA|VFtpunce}m8AQy=YCzIJ+4pRVJ1xT$xudgzj zB^Il~;Z(Ujq(5i~g_&5~nM(Tzl&@0>XsyVmldwj_%V2|cBJ9@1f^;(K$RvIFY(y;v z1{7Fuz*2la%?~?;34c{CCWaXW%o*Tg7Q%=e01^NLpHB;gHnEsR5T8mlNRm;LDPgnS z^Lk-8EXJzjxJW@tR0c#%qdFUAWL1oZum`lR5ao**xTHy<6f4wn6@_YzN3>CK<6K*CQuxG>Wd^`Zt5n+`QL3NnYgcBBuavF^uizVoEhP~c6$EAjcv)L>J zVj3WBKIRt^Au$z0O)0{W*84J+P?jCe1v8Hmc_=`ILZwKgmdGhoVN|IYE$J{6j#-0F zSJWR&M&h{?4h&j8LkVpL32R0@Ry^RKLLO5zU`vEOnM5R)y9aRqbO0~_umA)Ahysx2 z16Tk_Kq~_SKA2392%s_G!U3lSNfJN`Kw1Qy81#{lGsBnzCVk+E@k*d2fR5ywjUt-` zb+Kx{&ln2Xs;j0xw zJuWd*nAN0ZZDya#77DoHkw7LHfw`1YtA!kZNdRHN3r9ijDa3ZGC!JP$+)u&8VuW5# znaxJ4mBtiyrNWJ40Rjta6~iQ&(aE7f0&NKNV35OMTw8d4<%@#9pJZTbM;ir}-MPM@ zFsC$4jVoJr{r;Nf-DC5ojsMGDTX$jSm#%HHa_2;Cov5*M)|tCq=d6=?`RySi^vx*knk~J97{{cXOAUxjk%PY0F?Di{4nZR~xp$~jklzG-ixtgE5> zgj!a!dftuu=j--O*68~dbk2(N`*SBYOX*9F8NJ=iOD8t7BhQ#`|GBob zGt<1k`n+cJ^&_s{t9^#Khbw+;sXoG-+cP$>3Hffaa`Bwc#(G!7Gi??9k!?G#2F&6s zT;-0E3F$-Y9Q&n;uDT6l@1aC$>$S7d;lEVKaLd8W+B?fHum4T+O;*z1I@ER$Ek9iU zsq}(i&#eQepF2D91Jd`(gC1#P!|I;JCtblMOUu`njknF!ez0kceBc`Iz|bnq%c{VJ zvlGWpx6k7`H4Qa`FZ}a~GS+{pw!<|3PHp$>`KR{3KT*b;BRe$n;fl|Dk4Bem{3>x> z+Hp*9Zc*R3jCZo$A{$+CXiN3wgG*`}>$jZ#X!O)uyOvw~&C*Bh3C;5z0~4X41-E`F zW0JQ=h4Q=49$oGj*q43v`|UUNJG|W0D~|+AdbZEd-|s4<002#MThrICto!hPeGN+z literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_1_3.png b/resources/g2/track/bm/large_corkscrew_left_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e47904d100e89cf673ae490eeb5a1dec52ea1f2d GIT binary patch literal 1186 zcmX9-Z)_8F7=Fk8T*sUR8?11eLrQYWMQS{tn2Vfno85M7H+l;d8d8!Y6exIxqE$<{ zKtqbDaG8ZP(3px9tDacQKJ-I1oit|7MvIQo!G$$aMg!;?ZLlBa{8>Wsy#KzuPx3tP z`~Kj7y>sERg#ggm+tcM})F&Fj8=4!rZ_OUhU_Y%C^CwLFe0R#bDNITfLt1wa6BW0-6-Dmbo^WP)Kv1YykMDJshScpPQ3 zIBl}9W~)FjZqhDOPKB0K#uwv)8Xw7siM%_ldk7nDwObgG;w76)=H!qNio4@!IbBe4 zdZbWEmg-p}3nmfF9v}ihs+cWqwx>u}mX!<6aLJdbsyQ?wP$tQS`|VWN$s{E%;}Z)( zsTlQ@wO}`r^JQIu0+M3sj3sTRAsJMM;(;WXfvDbghiyR62tg-A>?i>3#7u4v1Cfm6>23G z+&tzJjf$I4y;Ll~Y9TQb^NeXqF&nECbG6!i!~!@0d;ltd1~3Lt#sD=Sa46tIS_0`s zfdrX`2n%UD=mH=SkZeX_8YKjj_M&_U=?QpfybX8`oC4;R%!;3isP<$+%4C9tf>x;% zP=gEi03GOHRkM&F+-XwQ8MW%tYW_?;nx9LTP_asyz(!zptI@?0UXc!XcvbNxB1%S! z6mnWc&!Jk$#`7o*NC$)(UW6KSkAMdQv2xiKi#~!cpXXdI(d(500hzW2ZPqADYaE^B ztrG%Oaaxd@KnjUsG)l9mz&DQH_Cm*B4}aj0V?cyg?@aA(^n<-!8;91PJbrcC!QAr4 z+IHSV`}?=Gkb8fg-F*G&UB9mTb_SpS@Dkm&oNQvI$+6M7rdKA&zv;cdj12A@ zuhhmT3$Zt}m%+3KgO&ft^O-OD}Oe|T?l_})|xGjM`g zYQ~;PEq`N3bIgVutLI12nw8bA=!xL16^yIZv37iMU;U`I%5?cKF*W=8y5II=gIm8j zdS)eVc%b~)-hch=7w1NMj|_KD_w}zJ79MzacI}(vldt@F@!#ov4SZQ+Jm(gofVkfv&GN?L78B#;FRd literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_1_4.png b/resources/g2/track/bm/large_corkscrew_left_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f4dfc39086cf91d4e15b387486d39d4b9ccef789 GIT binary patch literal 1249 zcmXAoZ)_8F7{`BQY_~C?F@;oUv_Og7IG4kmq_AeW*<IxCb}34sGDT$W}uv5^y|7Cn=WHBfLbnzhjZgZwNZ`9A;NJl_|e z=h?ft+rDtYvIPKug+!Gfr%A8sggKRNfzgFv#=4>YAt%b-DsjwjI&w=2Nhte%e={8C=*Yr zX{C}U0P8>mTI*wtq8p8Pi9~=-MO>MLFDFNexpbv64G93800;nx03-m&08l^xtcoI` zSAdBaRCAOW@Hhw&K(Ygs0+0rf*TWzVV-%F!FdKks3_J#J0S*#4Da6g`eI7I<+T$@U zmGUb}qF7X5)yv=lxVMoI^;FErN@iZQiX|pd@uX(M**Pf>b0xD5Sd54r(=vq7P2*md zL-e_0AzvyHQqqZ{nue9U#o>SwfGU8n$|6v;dm@A18z~elk?<1<*(}L0wA;;jy*!Tj zEm)Yq6C^G>un7t+I!%x@LZ2B%a3~Q_aa51r($YBd_y>0Obkm^y_Ko+dz1X$k<=)P{ z2L_oVdzL>{`zQRPw|#u5i66!_>^gGKz|Of>nZ&7h`#a@*ifqgTAirx&kMFK*ZOU&78EJ2kz4Dqo$w zd}Hr=z+Kw*#_jHf;Zo4jicHH@(rEQvv zm3L^G-~H&r$-XaUE-v$RTKk!i!FeXWpK`u1(y$p+%S{O zU1{91n#nm+$RN0|=0lvv8n(_IENEnrl@Z5*Wu$UK(CFgULFh8YgPQh$1h`K~+^^u~;gV$>+^dY00)5%_ivwh6aIm1cR<{ z7>`8#@dTYp3%R^hD5_;EQLSZJ0t?U%g?DQKT$gFIV!~O;xte7Us{2t>LhCw0B`<&gAYqu|bZQ=t?(=17dO;8tL!pYMtz>y zS5j)th&76-HOoM?lG8=`hyY227&an`30Y1@BKbt3n8{eCSzTIcG#Usz3iwhOnRBuQ zk60!`RW@D=X6uncLtkp<>+6*@5CBjCbN~Zj5uk*%iSD z3JFODOb%=TkO)X|qXdbv0y4v>97lE*o*GX9&q6@J!m?Y75J{cOW#vL4W?4qPZlM;J zCj?~F!RT%wi%X_Yv1z>#G@6mZTB^KmR#Bzla{+~8oZlH_@UTcmL%gnqvq`OBB(0KB zw@av5rFb5hfNVghC`i*W$Wjx--ilgMO{#kY>1ddac+^anne7#CsqkLCAT{id*??p@jnA4?+cq=JbCShi_uS?YdbPD7eDdtt$k%%SBLLx9e(xv z8&gO7{`qj1bR6%w{Sk5hyI&u@eB<}Uqc`?-?p>Lmd?j#xoFpD8{~l=!4eUN(oqaO? z@rfTFvjZLJorBB%ksYhw%#4MOy}xnGz)<4m<_YKDdj`zY>Yg`PDrOz)tG$$Wk zNE+3i19Q@>b8vdolb=EduWxJEFTXij;Cg#kyOq>m%Z{nnDwoUW?w`MQbzAtsl{*T3eCX%ddK*2v!}|+6dF(WI e9Y6EmUB_tVIf#SRX literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_2_1.png b/resources/g2/track/bm/large_corkscrew_left_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..46c8168400849b9f6edd9128aafb4276d61c18cb GIT binary patch literal 5238 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_2_2.png b/resources/g2/track/bm/large_corkscrew_left_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..267bd68fb9a73cff1f81f25c7b574b0658c0d59a GIT binary patch literal 5205 zcmeHLe{d6Z7XS7aDJ@K}MXLs;Aw>fh)7@m#CQaG~NJ|?-o6__s(80LbY}44Ln`YA{ z(DNcxree?tJuF(ZVsxq(rQTJEHXa3fnuCtUvjaurQO=%L;iPmjPyxBUZ_)x~bmoSc z^FK2C>-+t__j&Jq-h1EK&5nxllKCn3rvL!vt4oV2;T?tN;^YK)4WG~41aC*TRIRsH z;tsCWM%9`dNUnXemE@96b1eYQFD(@-(~hFaA4XETpL<90KuB$QX_8f_FMZ?wX49YJ zp8sOOch0XUdz1B^-QaUjXTgi9AJ21o$@!n>?SJwG;lD;-F8?fj$+ivo7bn^K0f>9j ztWs5|RjTXJz!>&DzN?^gaK)mJ^fkrH?`9=DElYf}yk+g$VC6@=^~)^V*DYR?eQn!= z^VLtgy=OLBFA#q^d*_VZo%vfj5}`=FdoY|JVZ^zIm&kO{&_z%J$P4*M&e$ADZ+1gWC-&rrZ|S&bWfWioVA1Xz<`a^5fz| zhxeSkRLwd3761E-2k$A2zvAEOK6miJiMUS1;mCCmAhnBPEeHDKs z$L~K`Sf2UByyo|Qm#}D2{8;hvN2Z((%0w|Qn=ei!a6Ptvvo9Shf>qaIhSjycY>k|t zEZMk`GLYF$ixrj~0QpL%6({ORJJ&#(%#8)SiNFAlYc>|}s&mTFGOLQLGna0$k-9DA zRm7HhBG1TE7N+Do)!FS<+Y5L+xX!)qpT$~Mb_2eVo?!vH1VT2D z7AQ(XtD;*>mZ-}rZfHa)FqtjZm=+}a7D>Cg_9j`k_!eD>g)`d`sD1WX$;Cp$X8P~3l7t1 zw%{fbu{N4w3sJ)5D=X9mJaIO9bEcvJx7R`i*aPN9BjuoPE>)Q=q|S~<`4maTc~TK% zBx+uqmv>WW9ciOsEk;pAXf`$-Pc$)d7!ITsk5(!Kh-tuRvT1rWJ!~+?nu*JewS^ofrbD3d7Sb5=6Jkv-5p{T@iG=&dOu=5CH~&I0 z-C#uazj zOsbaOD(|Qxqj`Xo2}P)I7G*qSCRil8V_c6mANd&{`7wc6TMX2jo`YK#+zF8zTj2~} z(M{)9{LSRySF`}3?-;o)e(%tAhpyXV;I@SCRM#E4Zi|82624Pi|2Mi)ZhlOWjqnY~ z0Y8dbiAhOGbLPxpu~^B;$#dt<&B)5i!Z1Xo zQtEUXf~cWss;#Z9v$MOm*FQKo91c%JA{YXc3ZT`b*3_ie*JnCfk#@JDvrF64s}Bs& zLm~I*m{%oWRVz{{O@^yF(?jsPX{@hJHPBf-)Juhf?c-tZ)Wl#32j~UBp#&ZstA}C@ zxY;8;>5(B0GmbD3J#*E=FoRhDXaUf(SQMM>;&42CzE`2>(`thz(}>G;uDhEV7~o*( zS;`DVo2k(AODI9L3nM%Vx=YpO({u!M-XXm|Y|4~!kdiEgPM{&AHI#~K*S2@-yZw|u z1mFj2mOTTE<_`47D?1 zFNh{y3N$KEt!32{87_yQ!&B1ZB?5uAP{=nv9%7&^jtO9`sY*|V)|;vK^Qo}HGg0G< zI093hLs$Ky%*X^k9Y`}-B?!AlnOU#HT1^^{tKQq;3ivuggTC?bAQKstYBY==Fk!$j zFcOCcSC_9;3~xx=hR&OF<}~xz=i6D@-P`YahsZcv zv24@VZSu%9(KE$Q9r)bv*1IC_Bat`wXD@wxc}IVG$JF`1NSClP(-x0ceCiv+M0Bv} znT0*TAADh0`s|6iiIKUc&O%`aNAT<={i;WwTKegeISBvth28H*e*Dh#=DV#Q ztoU~F*udL+jx%8V(7otx^W2W^;EqEJ_a>s>nC4$SVmlK!pxN3N7IKg7nK*g=i0k>C z>3=?@_LX{Rs3$bq`Jyy(EHN4NbKT>_#g literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_2_3.png b/resources/g2/track/bm/large_corkscrew_left_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..62b43ff0945306bba7fa0c9334b6344ad3b52665 GIT binary patch literal 5448 zcmeHLeN+=y79SJ{AJynV1&x*%szK8*`GR}^rWz1vz#sup!IMrVlb8lFArlBnl@`?0 zqNbKwRBTaEsZxclbZMn+w6UUM4J#_vsI+36Zrv6ww%AoW`w|fGY|q)_IototnXmWW zy}x_!@80`PX4YpeNEs6{B?N+?F=?quS>P@JXJXK3aJ{hq$arvbuFPI+$wI7jlNs0Q z3oyE6g$bi$rFty{m0m8)%p2>ZKXcDDtHl48=rz5aThiK&ZF0PDZhyhyHNjlo%ubby zawRY*K*QQ@ID3koGdq?g5MS1$^Hx;M5ai!Gni8a8KP!CjzWC?5Rre$AUi{#4%>0#9 zM74GbT)leo!slq~=TDovbKUsr(1^gV99zs6%n!b}))n$=KxI<*C8N{*K~e(?tJc)NwirGdX@ir@!`bp zIow-s(AUxF>w?#BTgf}Tb*<;_5u3fqy70a4R{iYyN7ID#z`IG;#rtTJZU^2zvu`hP zjXC!4hkM4=g(;?3=3Y-Z)Dhz-iV;75>rC_J3|E+K{g+wc9m~#~UiV@`#?*z`8-H25 zqa(z_KKt@VXD<)jfS;MzvgMg>{U*k1GoIUA5j43tJ9F*Y=z~*c%{PzQwJ|Gt?48dq{nj2a?ozM4aXdeUnH{D1FD;FN~?cVD@7`JQMM z^x^pnzl<@Nf;QAdmtF0>y6Wm@56bpk?V;WaFkii6wcZD1SE2{ywKyYPg5rfShz3_< zF{OnjPFUWh@AB#c1KdXq(u8|hw5M2#0)5*ZAzPJifMp(!I{7~V(>u>kmhOA!;yjp4wB zh44rX!jfD9K!zOpQw<^;bSa#L5qPl~#ga=fqa|u2ga#efHx-);eBo$N7%RXEfhYm2 zavw99l9rJ z7JJ=GOG;#T?MpN`s@F(-k0L}X5@48sjcG(ewm>UD*kTbcmMs+Xv}!fR<*P-45m0GH z!h#r4%nJp;WAp$=pyg|Yu|fe`C`8n3fk=$95mcyVi%_*DR)q2pL7Zj;gu<)`Rf!ag z^vVmR0Z_3*A(w|DT6P>y9Lp96cv`kdtp&(&NNg;ZC(>}^L_R1DDw&U)3lWe`eIcU5 zV3SejTksMtnVXrG$l%3r9?fJHAQml906m~LYH%y@XenD?h$$_Imrt&cCytBd3u3uK zfq)aodnB|7GZUZ|y{KGH41drGZ(<}M96&ANtyBQu(*V&(WM&Mp;O1-`FGyr~ouYd+ zhnF)zLun8Tl7v_=0LtMBBwUV!$Is?~2cd+|WpTI?&Ioy2qt~wZU((+8p(hL`JylNt z`zw4?gFU6hiUvo6!vejpndo$1TSyReFa!cA!3NU>um+dV<%m&-f&F8sU?0xw|D+iB zA~nJhVj4CE63-T(0*tLjIUs{#4yq9e#F&^nNZv3yfom;R#Ei|=0UiNYpg?_G(W8e_ zHOt4^u)K9S=FJ13jLqe+M^MIqhk}K@JI2Fk6X5^iBf%#yVv7NKgL7c(0y`l*ycG`d z1#JJ7zo9(*l_u!)r$(NL-=}mvrR#|pcp~Aa)%BFFCt~1))(ul`yDL8GC}^z3Bty5;BRH)_lyWH-+{(e3TN#h}fJTxya%wUMLmch2F_?lWpLzAk_ zL3FsPdV1?+EJ|*CC@v2#&yBRB%sPU9xKie*$?a&u-R(AyyMCb0nL>k9EXXQ_>`F=l zPH|LGyBos#J7}Z_Ci_+7Jv&J{qaa8DK`IIbr&7ylG&_@7A0K~Mp=j6Xy35ON*42>? z2aO*VB@Krak?|^K3eL(c=cD#`qE=SfD6ei))_15{-MUC24Ni%QSF+@&Fb|jEHifND zRo9BQy2_pIYL};>XTU*~LSafMTn9y#K}q52nzDnX>yg=d^Xfg;wmy4Tf0O54_W&8nqEdz7;VF?( zN*0X9#}jgeO$ETpnyRYX8=BlsSAUNbQpqWVl3K2cv>RBpWzt5QvaMFv-dNu4sP%L^ z`}=Q_QV7b0AOeEy5Yz}k?GV&Ufk<#DWMmmZHrA8wZUqy<`B1eKYE6OM3W!ufBpyyy z@yU7x*=is=Y^1v$@+Mvg$z@Qkf?`0!%dM= zsE<^&GI4jjy)Un^-`X}%({Zo0hwScShC#weN(xNPlSUep{4$-~UT&zbE^lkBb~zh8 zZYSB_Bb3X@R)};%Bnfh11Lg(~T4h;nZ?CYnX7C_7I%IiyN`nC{E5rG4r4X)>@*8D* zhaB!wuspd@q$-juXOgvivQP4?9kiZ9}yt^PYat_8k#ml442ANT&P{5kaPN(9?B`w~9~ix!!Uhd&k~+H#yhpBr~_=5no{+I>=7WXfNbIQjWYzje}2 zaDtRYi$2&mW7j)2=AIAoY4TCc8=L))rF!C9mgB;i({TLRb24egkMrkGSvDj1yP2PI zzc#RGo}K>R{%fJ_#<6GTot^l0&$WoJZ)!@u%8`b4&oLfvzT2{K=GKy_k|>AxP~d*} zM8a1#a`Jh5b3m)JwCPemJnDe-B7Ml$N|8>Cn8FD*gk}vJj~N literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_2_4.png b/resources/g2/track/bm/large_corkscrew_left_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..462697c3468d4cb4e67b265ff2b8076038a3a42b GIT binary patch literal 1375 zcmXAoe{2$W7{T->FT5_8ni6pY7`x=Rh#TPjLGMH-@O04&mYhG z>}*)3FC8;}3;>|CesSIM+^o)(wn&ug8>7!edqiZ0IQlkNOO;FrDaer4zxC46m01 zlN#7D;GvKZjYQp&cu1O!$zfUpvnDv|fsj`MKmuSw5LzN}%HK|>NeBBx?%OA>dbjKQ=$lJWFq!|BoZ2rN-cBwCqFuTWBIjajF&5v0qMJLU+x zy*;6Df)}z$444SSMoF9|g~zJ)J22KoMf{c?))|lb({VnVeFQN83;@^w@BqL9&;vjU z0Wb%NLx&BrL70e>DnO&aivdm#5+r~WfV2#{Q5Ym4XN55rOa#GeaY+Vr#0wxMp&=Fv*`p6vq>#MKn}nJfH3EUD<}5`IpgrBQd+<74YpVeHySCc z)$DN4sD{yMd>G2&Xq3?Ok?OQT2~7&qJZ~dGjB6w zt*=|KV)4!+w^!~xJh4oC?>xM@YUQmqZ>68OJZWO-hxP3<=01OW*supHo;u(0e6UM# zS1dhvVP<1dXRl6qWBTJeI)1a{`h|uc1EG=!Cx+f1Kf4$I!@bA9Ni#MgxA?pDcSZXz z_3x|YPq&2^9epr&)gyo2i=QqH-0Ge3Vohgg!|mX=TlPJUY#SXIVI|a?AT9-Q(xZvuC8Xn_+MHIn{M=M*x$CT zAK5ZP#$?~^`2=m<+P}TypsG=lJ>wpl``@+Rt9MF&73|cGJra@c^s`-0MO@j*1C{*o zL)T%$w3d3|gU_A+i2uIS(fk`RE?vC-#Gl6!P2FvCG|k6q-s3W?iRq~L{<{ zZEsz>Tl$h_i1Q1-x_NbgdU>yUvRXVa{hf3AuIB91Ks)z?#Cv#2QOj_R<>bz;rfI5I zt+Cc~nnj_RE3R!;9=h5+3EkW4)pbsJ*vNHMC~6mm{Nt>lRGd(c8o* zDlY!q+*sGRdzXFNk;>0jFRlJdTpnD~vfAK|C+E9XS7hZ({;rR>(h6)V-oW1H`?oHw zpZsKKd*R2-sNsrfpsReSnR=_eys>>_Rd3mt@{9kjt2oMrs%m4K23HpOx~@EZwRCUs o%j$1nRqL?pNzHadbJm%MjecS4?w|L2?n^-Z!ew=xwQIKj51%+~UjP6A literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_2_5.png b/resources/g2/track/bm/large_corkscrew_left_2_5.png new file mode 100644 index 0000000000000000000000000000000000000000..8722af6b72279d3929435a40e5621e64e2df0bc1 GIT binary patch literal 1172 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_3_3.png b/resources/g2/track/bm/large_corkscrew_left_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b04b68d9d04643ca274f3e6a04776ed1213ca90f GIT binary patch literal 995 zcmX9-Z;0D;7=G_hFTI^-#o}^UFk=NH3nNOvfKj66j^2@ZIWLn;3Pvty)qV&py2=WM zT^Uu2WTTwns8TQ=DnwTCK4h$n;PTqelQ>er0)aJ)RH7bv!v0_cMPlTmhJZwNs~;VmdJ~F*!LoH8nLoJ)KA- zW@ctE3`-`Hv$L~!Hk)M_S`c_y7Bwwz7<#2rvF&EN?FGSp6phAXh6bJkNu0~))5RiD zD$~^(XE&r)TkZHpH>~vsjzD1wH>ZoZsSuV%HVtN{BKWq_ZR^o)br?AZqac?7m4Xrv zmW;J@%&(<-t@OB?K|>miRdi?}6l4J;02RaZRLaa`ERu9MZby=K3x%F(-f1?G?`N2F zmd9y{;8ZfFQ;NxG7H2esiYwMTveQ+)s6en8I+x{SO4QiAF6dRM+EkmK?uBL$)x%+{ zf8eKhNXvj1fG7iLVQdr6waL8C>!DKX8_viI(2hiKvm~W3Y=IX_vRu=&Myb@U)%<2N^t}H5{%ABpkkNs(F{YIgIvKf375YMT zkavcq&dAyyw}*$l12jjaQY?<=h^$P}8pj!;R8`|;<#w&U+iFKaIPUYHikKm%OqH;T zRHMwhRk_nB?7C*pZw!0Eczg%(01AKsU;(%Qy8r_WPz*^xWdpemih2?WIsQNzs=Rkw02N9%MdVdxHrA&Rv!1z^f^yoE~+ zp?ahqan>mBj!T^byL;&MQEx=1fhDjUoyzk>QD({o(K3rp-R!vaFmQ)afX01R6p;rg z0)*l$sM|sKFqQ zN1+%WKYMcS&wD@c?)s_>&;NSs&6r$XS$yI2!qzJ{Uw-)Fv1DTHFaN5opPXFz;nbIx z_LNrl^P6z%v0vu5ws)RB`}0F@B;Nk`(+@WnzIbA9T$ vuyl0W=QfuAJ-Rjhs&-y2zO;GmHTC*;k6-%a`zODR&B4mj>f)6bU*G&6RUWJ& literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_3_4.png b/resources/g2/track/bm/large_corkscrew_left_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..96e2458635c6203731b513b0e8e89f22229a519f GIT binary patch literal 1058 zcmX9-acCQL6n;(GUc0Qu8ESM9P8aN{hX%RAAt#>gwTtznS9XQqf}DC_+#;NMlOWj) znqk~hI9+s+Wf0*g5pEi!!*iT)vZK~6vQzp;g!?0#!DcWax_}wh@iSxaz4!S3c^@C& zdnc9_;}g5~?gD^`h3DoD4CZ}B{jL*_fJ8!u z1x>_i3T79B&046}h@egk^(3^TA>>2>1ON%clwdFyiD(3&Gt8PGY@|}nT<&_ciflVV zg`#XYCg6-j#1%4;qhyUyD_q{-OO~iNB-2abbR-s!G9t;#bW-7zf>5YRRZ}tDoa2?; zPOa6qgDiwZ2&Vwg0-<4aH5{)KNt;#NM6spnUClvj0vVF&NG47e6HHC!ELC*#ahZXrL8I0hJA~ zT3FC=$s`ny(Yi^am$CZg#*W!S%`OoF8pqU;Kk~^trw-k9{K4J(vq+!t9p0W= z{n9!0Xpy{mYhU-X*)zWBnK}9AiTn3iopaPbr=Q<^ro>E72mXBJUUzEQKXD;&*mvyg zoHq6A$IF}Cg_G+K-RPdU@x|p!cOTp93p~Ak@^$&hySvZ-@Wi*@`5t)ng!Sf=f4!fa z+%vo9!=o$nZvbv=FC6;nD)!^#RXbYxX4H4(^zkK(yx2+2uO8f-`RKp>_q=y`d7?RT zCHB+GAM%SAAIpBe{^^so(dw*S=1@AKckbkkp3Syd+gefZ$O8!XH( L&V4=m@(2F|odU=p literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_3_5.png b/resources/g2/track/bm/large_corkscrew_left_3_5.png new file mode 100644 index 0000000000000000000000000000000000000000..1a81938aa22f2b0dab419fe5ff68c827a60ce786 GIT binary patch literal 5211 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_4_2.png b/resources/g2/track/bm/large_corkscrew_left_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..bd44b2b32f162461ddcccbf8315548fcd54a726d GIT binary patch literal 1407 zcmXAoe^AnQ7{@>U>g$h;CS6oqF~<4w^SW$DuCi5(*`_`;nQQF3e%ADnAbltt5=eg&f=l#d~^)wX~ z3KHYz#RC8m^Ye0w!}H^Cp|Mfn9<-7h0Ehxb1tq!RH6kJ+GBPqMDk?fUIwmG&+O%m1 zg2cwg#>K_am`o;$a`=3VAcRt>SgBNKwOW(O;&3=Uolc~AP}1ZaqB658#Uym!vF_{ByiFIp@#_o4uAwf6cmbvPB*YvRvzypj`zuAevM|# zVu5Zq9i=ic8V6_aBrJh~Ez+P;15at@Ywbd#i?DhnPEy9;(m4Vqk6;U>T(N?$(BV3Z z#Nt#qeHssG^aX6g<8BHDs05(N07DH}283&&2^=i38&mj1`eCItXz;+3IGZZv(p3Vs zUc|FW`7R~l(@Om&<%nGybeqO~b~xgpP`NC&2<6H!zKS69QmI*`a_IGLi^b=34i63n zgFy)B3cxZUsExvR(FreGHq6(Jh^+yYD`*%DIRcaZahSlSP`EUjfWai#94U{d6yiEb z_?X(EH}=^aq{kN;#(+eKC<%&2!Z66$W;JHl5iYZ=&#v*i%>lnB6dHpV03raC02lzU z1JDP+2m)YOI3KE&&~AmKA7=pt3XB+V3IK@%NC2pyK|KnsICRRPR|iQecoRGq2>C#S zBXTKCqhcEk0-IIpa%p`&dm!M0VK2H2py~w7K*OyJiIb%ud4{0a9#Xl+P2Nf8F!Tpm zRKR5*0uDutG2{fQmI)0Sxz(s~*^NGrJwSS3XqYP$LMMPEfH0heE^PN!bgkMvGQu^R z-b(59^2K68E|;p+3Y4Sea!eR%=c8^RXAoxxL`*1QKn)9;QRu{=PZ)-uyEx&=n;)nt zE+jzqgBw)2gvUpGg;cg_IqA!YZr(X_PWq!t(9&-@~}@o*^_>$3Gwz*PWN2M`pF*3Fnc=HlwQBKQ{*%&u z&o=7^+8;N)*4@j#P?2#tKcQFE==-! zcWeK;bTf5cmEloa+mEfRq#Z*S%dSjj4Qabp|Ijt@NiR2jEYOnuew=RF;il%AQw{O0 zJ^kqQZ=2T-T~=IO8n{!sy+?jxdFtLRmAhum?eAJbL~f{R*z_m9>(dkIvp3$Au5hkC zu=b)Vr@e7e&CFDK^>|wYLwqyE*uFJyyt86vchNG!e)?CkQzyTc-SVO-A?11NXkqHc z@Ro4M;G-B%s;H(&o6^^GzIwW}GOJ`ucTV-Wf`Q+!s*KT>aw~ jm1@t5+c{lR>PZ-b`S4$CEBAMVDFXSqg*n|T%69$_VHbW> literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_4_3.png b/resources/g2/track/bm/large_corkscrew_left_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6dbd2985915c1f6f0b0e05be0f45359654898a66 GIT binary patch literal 1249 zcmXAoZ)_8F7{?#>?=}iFvy&1FmRQ392Xy3ur)kWM-L?WHJ=`HRc5=YMYSzesHz`7qm8N11k?knRC6H%%dBi@#Y!3}SqYmq*cVNh=4T1X_xbnc`M&r( z&+%<`>%#fZ%?E&mn>Tg!)+%0$)y?&_j1@230jP&`4M4R5{FvJCLMNUl45>5P|C-uWz}i` zo&XOGGKa-QEFIM5;<`%4fJ$am;nAFokZJ;80eB1(wOXISAmez%10GZ z$@znl(Nvk6pGwK@tX93>UT-y;IKnJgERu~4@U>;$WH2-yPv+HZ zr9cC3!z51YW7(4+_fsFwNi@628&qIV{Ydj{TQvPf< zQ7UCo&CB2d(yO6mJsUIf3NGd?a@m=vcv97HW=<)fTp8B^WyGvzt&=voInwL0$v$^1 zjI7 zKTi&om$!lZhOc>N!rt-uY@6$Y`fH{rzH(v@KeF*c=c-1!XU%A^+PCtV;hl?y!!3Vq z8|zqbt)pYZ^q~f+WwyQF`uzIA*1?hYADkT;>^e89`GLLDT@p@*Uo))V^6tXj6YKhK z#zt=Ze&$N$l=|SC4Z%lW|I;>lTphEo{%iQ|yOmM;5<5 zNxe6)XYWx-XVM&7acIqf0b%b^<A*DvngOv*(i!r|;D`!RBsz*ZIy} GL;nL_Fdw7< literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_4_4.png b/resources/g2/track/bm/large_corkscrew_left_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..9500e7fa175d50e745ede7d71260e5bdf56143d9 GIT binary patch literal 5457 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 D7hfV( literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_left_4_5.png b/resources/g2/track/bm/large_corkscrew_left_4_5.png new file mode 100644 index 0000000000000000000000000000000000000000..b53d083246723540c671b7f2cd4b345af4c76006 GIT binary patch literal 5481 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_right_1_1.png b/resources/g2/track/bm/large_corkscrew_right_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..30971a185b93404a7c7f82b143d9b4209b305868 GIT binary patch literal 1287 zcmX9-e{2(F82+|(>&C0ZF&!S*#0sZ5u!ar` z)TP5ZZcw1cnlxHnV;a_x0bM9kW0A!*a=;)Ro}plkHLFsvnKO*|Swix>zw##U^T+eN z2Rl0qbLT9Y0|1z7e6ej~v92x#T3J@id+z7L0F;5w_Dvg#V@XL#X=!O$S(!{GD=#mv zsHl+3<&~9{RaI3gjYfmxT9PCfhGJPW&vP!9%jXM3BGE)*LXz@@0^*{rnL z)OLr~?a}-EbSPqp#rdS@NoRs2CO7G;IZEX;sRb4d@c4*}jQdQ<2q%rXvr=#-pD-Z6 zf&n`L1V$d>!2)Lm2oo9rXaFp7Ij2xK5kx@Ipk6;h(_>a^%IVAn z0x%v&aHWP&X=%0If*Lr?B(InarDx&_0w@`vvI4aOpn_Z%P#GeqIZkk*$&==Tc_9HuXiUlK5W4~MnDil* zjPZ=) zC&xnyGKMfo%$g?M8FMgekL87lLL@tznt|1rLZMTs3~CL7X<5CVr)amOc+3&;c*jB! zDIpfp1h7zYo>4e0YQcv29Yom8#QfH=urn3+XH$tnAqNQnOaSlz2mlmqFa|(I4qy>9 z2^~BP2ceXrQNZEAOMs{WNHl;9fSd|?a2TXv)CQAoCMU=%kmU8H*i#O3g3GCIHS5%^@1G@BWljdeIU zT177{Pq43gC}HF#j}`TBo- zvf1}5O5SXaM_wn&lv{gD$1V$(-S6IcJUw4=xxLBqkEXGAVM}#e@8Q44PHIlQ^4+V{ zovOZ%#k;k&d+WP%m)456SFC@ByfysXZrNnbuJQAB+X>@GFJCy(&^5hc`)c-?FIumf zyFOe_&@U{T*FJvpL3{5ck2Gz0qKO<`KpA9RU-u6_UVgv9*Z4!OuX|_9+ro~zH-c9e zT{`t=zk6QeH`nSWSFImj(u_RY+IrhKK=k~yrvH|6NBeti=MiL6cd|x#Wa_?4Q{VH{ zxr;YDDyDKHy=Uvo#Fg{*G;H5x+&X-5-NkJ4XRh$d(b46L@67+NWqh!C4YMWJbZE5c zFPTBwf8+4Z9&+i%PDy!ve__bDVkuVJ2$fgJ`r`vibaQ{-HvN;8O(k^=wSBEVbV*0e zC!_bUZR7X$x%DNAF9$9?wyf(2&vun`O`YrbwER}fwSyP7FRt1rJzce6=gm3SzncE_ z$3yw=&kj{BJYz2|pO@|4dS?2>VCnMd%}n*TvuSPb2ScA9m|V5As3tIO=x7^i?LP27 DwKXp5 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_right_1_2.png b/resources/g2/track/bm/large_corkscrew_right_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..040838d28f83bcc00e7514071c0025b030b39fe3 GIT binary patch literal 1334 zcmXAoe{2(F7{}jHMmGx7c*epicB2Ugt6JO*ZpkqYxXrSZ?Ql2fTp?vSXbD9xSh0gT zD-e9X8O-0mal=Voiptqk#$qPHCiOWe#jefvH1ZOGv)YuYaEJAD`#x zSks`IIlW{$0AOa_s+z`pt;`2jB*^Eik8cG)0M@K-s?CoD1qD;4Oc4kKQ>RWXEG(Qh zZJJOhEGjB0E-seH<#G&DQWVKBYL?ZSOq|VTbGyC4U?>_*@O(Cx!<2v|0Ie2jwTRIu zGh38)2jTY6{-7=#F~#DJRN6-=gc?G`sU=p8%*mo&6ELZ8&njSJ3l2+@u z*9#*NDTc^NiISEPI#k6eG**mt5+)C23#eUT#uw9tc!La=DphiVQK(s5%Tb)2wtIEn z5EqJDqr5Ag@uwytViF(>kQji>0#K(A_exYjR2w0=xWWWj$td(BX)9z41^el}Kc>SqP*Y zK;1&jFQ&p$CZ;f?D0^D#%b3GiXCfEOOeQCwNFf&E5{XJCXB0}7AWUl7uFEg81Rbs+ ze~^#Hb14$&)It*@w(4X~qrzh$19m3tF$@K)$%rSDjOKFVkOV*jfC&I60097o07we~ z%!{U=#RLOB$R}wOa2RlrAfy634Il#`CxH$O`e+z3!k8WMKJXYk4%8IT&_W|Cv6>Yw zr^@eR!(m%I9>`?kFz+Qb0L&sHof6t7(}hruC!ASrAZHFwxMP!{6ijAO1mH5EN-5To zG9!ao3~Hy<=yO@a0arX4$na5^OW|rY3<1ak2=grLdAlc)+AN-Q8uz%L$P|lFS}kKV zvK9-6DQ&pYO=1BGi>Q?eT9MJnp-u*^DD+@3M8dc_fBg81qI-{j;H}061}q=FrqB1k z*VU|OTGjE5RfP8S?bFZU1K-%a>1XNA?~NKb7083GeIqJW!u&u3id9*Ux>g zt@FZtt`ofc?P9@sVTpVm@)PoG#z^>j_| zU3sbL=&vsgo-Zj(&puvq^+dC1;|!$n)zW391#DGs?z>qZ*V7)6d;Y==6?3~EUhdLR z59`WoZQJ%Q8A_hxe!J1N!%@BXi!r2e*@lZnXI^j+m3!ai7u_T`*u)19JJ8)0>j+(vsk)EvH@}Tvm28mqvA9!}~ z&_t`abSQGSqPyH*e{y)T&r)&s=+U-a3mSLAi+3(Go3|}k+CIA$L6F=vyBY^wOL{rnkkmA<+1&+w5M1IG^i`_F^& zcHL{l;d?b&avX!;p^?)<<#&cy86aXO|AOjPf{KI-ZADuW`6PR z`n###wpq9DUpvKEVNApwC^1pxV8Gp07+q#~kZ$IC15Xr*_b+rvOr&ey<^FNgr BROJ8w literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_right_1_3.png b/resources/g2/track/bm/large_corkscrew_right_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d3e9b08ec72d2de50da8ea673d249c88e063321d GIT binary patch literal 1186 zcmX9-Z)_8F82;@~cVpdBT@9D*qSaKnup3l3^n`+^+_20u+~9CEl0;g8e#43C^p@e;y@n;Fi^ZxttKFRaE z@4lf8zOIhm4gf&c;QE10jfyv7aeGT6zaRb~3_uGQdSUar#@N)<)ZE1Zi(?U$9^S>UO(H(!($`&$FT!kYyCq7MTC z0m3v;cqA(!g@mJ=b=FH5ta)Hvfb$B3MK=H(00M$Y4o4Kj6dYH*-U*JI3I@y3=#5MU z777^YbknGZb9n{aClUTADJot$&BQb|ndjA#pqoJ#g?W5#FHf){6_6My&c!oAMwfIW zS~QbJEnAr@IB4MH0U89Z2*4GD%Amd+9w^X~;ZIa#)l!OZf+L(Fg@t`Y!tc$BOkU=V zm{?B9RV`)}Qgem|t3`*C!U;b~1!*SC^9fN*hr_uV-2)bjq^ngbow^6PRAK@FJ`@ro5sCD~C{KzeHHIv( zo*9m)`Q1=(!6**XB-CkWu#MxVme_CJ{ehjEHt^t?KQF)1=!XUep56S^{{5E%-LZ!| zZ9{hoC;QHg+q%buuD!moZPUJ~>pg=@5A>2tFE2v(T)6|r$DTZkcizW*7yR@PInZx? zR_Z+T)^B8}d0%?%_ODO$^mk%d@!XDoo;&_a|Hbzn|8l%X{k`|r&Am&0vR_%8Dl9*M zzP{??`Q4*q)2DtOKJ-a&Nodc3$>KP@hJE?)x09~fm*jUQZXKK5w))5;KYp?NQQP8$ zlRMk?ANvS##T*YUCMj}F{||6*6$BNy?J-H*MvYIOY* zvv%@`{i{<={Q2{{{@xhZnOCo^xZeJJj#ftw=k{&&T^bsVT|3%wVb3YrbN+;I$I7qB wy;dXt+A`bnuK%0US@qc4=KK|O``I(M-&p;}nS(1&H-rX*>oyFGuif^+|5}*>i2wiq literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_right_1_4.png b/resources/g2/track/bm/large_corkscrew_right_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..1c1589c5b88418dc3d9d6588992edd3435dc48e7 GIT binary patch literal 5355 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_right_1_5.png b/resources/g2/track/bm/large_corkscrew_right_1_5.png new file mode 100644 index 0000000000000000000000000000000000000000..b3041ef5d7a60db81a123579ecaa251448e286a3 GIT binary patch literal 5209 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 o`!{{JbjhASI2FEfNm^|Hpa{{R30 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_right_2_3.png b/resources/g2/track/bm/large_corkscrew_right_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5f95313384b67b0e8666e6624ba6539b23fbcfe6 GIT binary patch literal 989 zcmX9-Z)oFm7=E{I%l!vqY-C%GWh~PQL81gLSTI7AD*X_> zDn+6MDbn+b6bxsDz!jMixPAy4jvZDF$8Z%Q^h4!xcwmtT0|)!raqztF%k$-ZK0MF! z@$Qbeym(;|0G78l*Z0ovWS*GMO!gTz{WU-acCYMjOz70q)b#XpCX<<&nVFrPotvA( zFl>H)eqmuDUnmq9h86@~Q6ybgP1C5=YRzW5+x5fnD2~Tz%Fw`bAWKWCnk$!yN|mnL zT(c#2x>_$V`;k2yxdMe1xg|r&TSdar$+pQH)P$f}?01d$u%5*3$v6~o&?uGdmk1W8#R8{LlFq7zVASP$TWkAJPkyjfB&6CJO zqcEFeNvg=OC0?i~immIdN~LStLAxFK{_yB%JRT#!4IrBs)5!`wT;GZc^!u zoujmyoDNRV5|z!e`MgLJ6pGe4&XnZ3HhEU<+Kt0bHx8q8$b%+frjoTZ!YNa&D(}^m zUaNHIS%aXJ48k;hfOvo+fC=CLcmRh0BMi_4vVf{4@>~=TWD*Pp8a((S#4;cSkda3= zgIpQ;Wz?^u*oAZBS&#%M%2-*?TNSF|h#gn&^=eV%B}s%PT6hVV>JsndWtY%=(ug@{ zta@pschc;i`a?7rlR01sOr*0aPm~p=T9O>A>^7{P*N8$di9?hQSxG`ZpcoLEcu}9o zJp^8>wnihi)qDuE-xpL>DVOzX)nMovOE-DO6PQ4vk7Oz-7LZ0Di$pC3`8MYk literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_right_2_4.png b/resources/g2/track/bm/large_corkscrew_right_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..6a129836433560fe3b3b095f59b254e8e0991195 GIT binary patch literal 1094 zcmX9-e`p(Z6o37B{b7j`T-L?*lqgZp63glCkNe}C*Ba|duk1E6h+T?@W*YRsTS>Rf zW!*8-5%93t$Yx++-ZVmHgR6Sj2!TacXoS-h8`(|c4DO~CQb}2-MZcyDKJPs~|GW=; zKJT3z8};^d?dSr4o{{H=b~onsM&TVTjlOj8-?sr;VC=;`!wuTh)YRPE+|tt0+S=OI z*4EzMj$v3wM@MI8r^DrPk)(%Z8A0Gg(J#xAqA1B^I+xRn#bwj1)$61O7#eu4+wZrB zLU=ghiN)z;iqGT%`GQY__P=sk+@7P0#cEVlY^aMpx5m zR46z}yNhvnc$^Nny%OPzlA=n>DOSmHiM*hd0=gN*DW}Klq6LBzDZj)@F+P?Kq;*L* zqD3=dSeeR3!N!1H07nq;2)I>@N;|wcx4*zhhA&=`wVGN)^E_b}DQDPA#C>!|Wb?9M zC}KG&SF=j3klZk`s9LnyDL3IGsUX9K1tBhqsc<+Kj~CKuL)RI?%RBuKT^LfQEvX*6_ zhL$r3WTcx>9lVAIbhl*EYR#Xmhw~fB(xzTP<(k_L6pnd4Ha~-h1Tqrj)M!XcMDy8% zQOsIq5!EXc#~~e%2?#Z^h&ANy!l^`3)hd-r-i2H$v3|c03W<@3M0ym;lVr#&OBOiK zGEZ1O7Yg7g>P9IN=?pTs#_>}F-G6QUz`@<40z7l`$JZKUePn3Yo=4xCyc)WsJlWAU zal7#OKL?InywLT~KC6HB@Zz4AZlmwI3NnOd@a^+S$2cIEoeJLL_3)1i6e^0vO4ht7TU`UB@aInXrt z#O0@^t_)Vc`|bChl9 z?|Wu)g74|x*9`zYqpu84HS5#O==_eSR;+<}Z6lBJ$a7sjsBz?)8k~6fT z88d3>%67rVf?WcKABYgRbc{(l_^iuYU=_m?t*EKGUPQ|xX_py1$dgfzJ1uj0RWibI zIj&YS;d&vyZDdfjXtOge(nB+TmJ3Q!RF)ILU^W^pB$GxiS6N@L*Xsyy1zd5APTROV zE|o}sg^N_Zsah~!*Vh}_+D>^JSxK9XaX5IwDUp=ycB_II@imu)veDRTI%^hM9L@ps~N3aNYu*3Mq>-H03HApKnKVGtO8UqKuw4o3aKcQLS|WX zfkH!!g&Ys22uK2?I8c;EDG}uYs1!kF3ho=vfWU!A!~(KI3z9LNPp9O3K5Q77TFpRB zF5C}v$ja&tF-7=tF2!`~b#JB-%x}j_JGlxf*IjmC2#lv}UX}<*bjUC0S|AnE@|l=X z%+$;xYE&3OKsi7rAk_3C(xiI;JRC|?t4t#P0BWhkdA(8~AcsNSY!yz<7fJqi zZ@$&{_tFo)=Kp!&+zIx!^~2KH)tQxNc6ZQV>fz-dgeaAx#w;RarN+%8;(2IKStl|8S15uoCz;ZCw}YjoZ??Q{&o43dE)Aq z)zJ38o7HOv-kYba)0ZMEC;joq@B{n%)C?66@j;P) zb?gv+`is}6dPl$QyHI`hp+}z@KeqpgeLMFS-#0$H?0BU3{gvyB>+JN|cb9frHjfSx Tzi+7nO?hB+WMX(}Xy)|)^-SRr literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_right_3_1.png b/resources/g2/track/bm/large_corkscrew_right_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c1b7b42f8b18c1a098b64cd4aa3c41b992c9bf0a GIT binary patch literal 5283 zcmeHLeNa5Az~Hqm7CV zYHYJEcIXsW)~2(xX5Ea#)@)68v5hTN#!a_YX*b=)T~umqH&SY8{pj19fQqx7*>Pt3 zpPBpe-aYr6-?`^^&bgD9oz+!kGt(bU2LQ~hC@-mj_vP?nq@}=bD&x%y@D|=sTkohr zoy=xCVX`#gOvn0WoQbzuOaQe0%~~Cu8Rn(kFzQ*=~h<%&(6qSdIbKckMN*6y&PuV4%_GVSfs#X0p@3ZP3w{BlOZ)N_?t&3(> z?DF`|J>7f-JN)IjfBnwi=4Yn8uvw~*Er^Ld=6i$c|BWrB}YGgW%O$Pd%f>OZpyChedh$|F3-V_qO*xv zk*25RBby9cUS6>M`+cqN{U+lDLdCtd=urQWzZWJYM~=OG z_PaX9vCr9;t{!=0Y4Ww;7SH7)i(*Ngien#j^M`DFUsd} zOIs~10@l)WW})3^lGl{1n1q0{B36UL(JV(0r_-756y_6lGs2h2WC%}y2n1ZH!6nz* z9B3=oM&`vKCNN5H60=*H9TvjIjANn(Vx6Oi#e(b1Tl=#%S61GJw~>=9Kt7OGv>D;& z^AM{QnQB2gN?Rbvh~2htUT1Gggk!`Iya~5L zRT6sT-{rEbqO$t7MVtb&#oC;(f@I&N>9CmYkagGI;wy=8rfvk9-^RU5`&R4;WvEqI zDK8ug67l$4)F?!`e5uLA!wseazCbhuLSwhU zszjTn?kWytgiul$pDz(g1zZzmFmgpaqk)SWq(ZJyfTOYk)PNiDf&`QildmA`Rurbw zVnxk3(rhy)7UG1|?NJCf=q)M0`Kum>zQBjF_PEY(`9xYmKj`Q%FkG6`QS zm5QZefs{AlDuK8fx0A3IpL6pcpe~STt1IGg)$a087vY%F>Xa$i2N5Hg$aczM+~%^kinx1o`lHl zqi~Y1_@VPNekSwqGkSo~_nq7mzxV07PuD#$a8JtjtLr{p_r$85hO08CnVLFl|+S=MWJG%pcU^sj_8jX#O2@#-F0F63Br^{+=%yqhuc8{X7OVbn3 zhx*8Yh-YZnr{d7-6d8m%+g+FI#n|1Xu(wUs*I73ZAfo;4BT?UYEL_F_dJb?ZfmciK zA?SUc%)y?lu>l4(f>2|6>bjSr!g&B_0MOIvL}sR&!SJ%#K82!JqvW+}sH=qwj&AAc=QkJLCa@3eaN2rK)O?$V# zJ4gg0?r^jtGSV|N-j}HaSz3^72DvW4_R=NY*<}H?u1`rs>O4cFFXjzXy&6syCSf?s zIG#F152gx{+DIEV*hvoi+hTp4;}JhK9L~&=usL-?iCL*~YPB8=>vB2+9#3C)cO)1b zI(<48i&20<0Cp!`*psOWF|-35^N^~2SmzsYhGO2+V}X(DgX2^NCo@x$on4ljr{y4+ zLP4rE?Rp623V1sDdjipLWNb(Y^lCb(&2;N?y^WkMm(t&^4Rx9O{qDiOu93m;*w|%C z2|yhHBmiCj`~dU=FiZy&92ynnA}PO*iVkYnfDnQXB?y**s0L74KoQxLM@acJRIrg6 zXs4n+5Kp`Ws8yg&LvO^g-A+!2x2(s9g+gtSh<{`xLP1{)GZ4Bml-_KOFIOLA6H$dX zrt^C0?SxWyRJ^P_Ww7H9<5on{RC|Oo39k{Uflwlil#V%s&wuli`m#k9DI`Z2gT0IPwZ2F)?K_oG`!=~OsQY_ z{rZnnzpux~h?BGmb58Ds9jpHIk1qG3ZT~!Z!8vQEr2OLUi{2kc7mxB&WA;P%=ilg3 zUOYT!8SPX+SNL_97+4Vewq`rhG@6t%?}d%O`0{YZR@&RPORGw+ZCE?*d1w9%<|>yw zwPR*M0ZsG93+vmfcaYY>@T1nkZ4W#%`-e1C{N4w$^We9~+x4$+Y>^(KjBVwMxt?p6 zXa4fXjUUTAwPzlvmoGhXbO3DXzC3TM%RN_dz_-=4?Y!g5LEZlIR8m9W)!ykZJ{jj8 ORFqbg{C@fKTmJ)Ha=^O) literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_right_3_2.png b/resources/g2/track/bm/large_corkscrew_right_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9c70daf17d1361ff97695e9a75636bd713f96864 GIT binary patch literal 5261 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_right_3_3.png b/resources/g2/track/bm/large_corkscrew_right_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..31440f8c9606136c67c27fde34974f128fb24df3 GIT binary patch literal 1465 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_right_4_1.png b/resources/g2/track/bm/large_corkscrew_right_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..23cbf7e7c217f78fb45c8a791982061bd9f9f2fd GIT binary patch literal 1242 zcmX9-Z)_8F82)t|+{OxJ)=;HL!457^w7O%S>D)nXv0)Xf zt5~48lT|F*kb+HCq=bIp&q1mwNex|6<mWPXhoYr4nWYBmro1z16CA zICM^z(d#1uK{^t%#S?s5^5ybj%79pidd{qITXX`8hIs6>he`x2=@=)cyahR2E+$P{ zU^4(G2?Pd-a7e5WxEd78clkFF_>B0%2Aw`_J(XB zkrO3%Qua%QNUoevkwDD=jUDJ*02L5Cq%p-%Yl7q?i!aBAi$W5frVVNq*E&rGpM{99 zRGeod51S3}`KYIu2$ZEL%qLZ995q-l+)h$XhVij%(CLi%e2Gv<62)95Q!ExC&~g9` zAXr32#kEY@V9!zByfs{K#*0Fx6e~<-%dp;{QsEknNvCHFMwTFWGwroij=5q!e<~7_ zlTs;10-G7(8I{|n6C8%1i;Q}ic+j4Ty0eL3A)73f#vuuS1ppoZ0f0&jQUK%;04ty= z=;C2C4CO410uBRy5{M=s(*QC6avJEvV3>xY1E#%D4ueO=mYnf&AU!GOV77>=0j@(#MwOM+IT*}k zHw$h@*zb-<{ZcYokdv^K!_8(W0w@CrD_(dja*v_)xPtjS9t=DNpH5R&E8}pmE*FOx zJ-9JIVo?f9n2j0QP_XEsO$Xg53}R3up=7RvAAhd?{-Yo0U)RZi*0HPGD)Zis_Lbc) ze|+f5hI5{IO3+nKoH^Ha=k*Vj4@*z95B>20^AiGBQFC}??Yic<7t4xg|HT^Xz(8ZS ze`(|OMYA?Pcwu+v0gP?@arx2X7XvGf_E9^z^-B-kGTr*R_|gP>vSny%ZOfkW1;yKK z%)LL~U-8*-W=`L(!>=v)O4F|%*mvUK*)s#1pS-)EWkP@K#w(egFUQXN6j!zChqs4L zeX;1;%&y4l#S<&P*~lrks+Km*mlf*SI-Mt|7eNB3<%GG~iF zaHwruy!mTCv+TRb7IN99d6U`On=WVmX&n3%UYo7i_h9jz6AaaV&^~mwK{Qv*} literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_right_4_2.png b/resources/g2/track/bm/large_corkscrew_right_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..571036237a70f54b8cb3e68f3699bb00af239690 GIT binary patch literal 5504 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_right_4_3.png b/resources/g2/track/bm/large_corkscrew_right_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6e283d52607988618daa7264d9891f9a5e310f6c GIT binary patch literal 5324 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 Hv2n-$`5#V5 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_corkscrew_right_4_5.png b/resources/g2/track/bm/large_corkscrew_right_4_5.png new file mode 100644 index 0000000000000000000000000000000000000000..886e59b61639eaddac6c55e621f7ff2d806eb005 GIT binary patch literal 1194 zcmX9-e~i;)82-3%*Mr@;z>paROxYjHSxpTk>0u#73RY5}K)DQDbYgQGFlO|1adA(j7$7q`3c~%etvMeczqG_pYHfI=R%W5>6I0h&ZaI8HLaE3yj za0H9RNiE4`vcY^oE}8LaEls0{pR`M?E9&>Cf-fcGqY7Qn{H3g96=QWP-D((&8w61h zrhv*L83`%G9hHo;S#rZV2Ae@Ru0m*d0pI`#B8cR0MBQ%H=S!31D905=u@a5mNu^++ z;KrR^%7t+rGU#I@)E~tKm6VgTqO*xSpDqP+mgphe7~>^*log18L`yL)mI|hFQqGJT zR>G`js;z>90!|*dMBs@4pNbGE7nAh`3Y28}<5fA`Pz^ZBp-zEthZ!{PCo=+_mw8hW zDwWe$a&CuZ zcu~Ks-JX*@QU2^A_vF^5V;@0de2XvzTkzB3{#!d@8Jhll-i@Kw>Cp@^mOutu?@`-r zKOTSgynbfZ^~Tm=^zemOUz5j<9o+o* Date: Wed, 23 Oct 2024 06:59:28 +0100 Subject: [PATCH 02/12] Add medium half loops to the Twister and Vertical Drop Roller Coaster --- resources/g2/sprites.json | 264 +++++++++++ .../g2/track/bm/medium_half_loop_left_1_1.png | Bin 0 -> 5401 bytes .../g2/track/bm/medium_half_loop_left_1_2.png | Bin 0 -> 5453 bytes .../g2/track/bm/medium_half_loop_left_1_3.png | Bin 0 -> 5552 bytes .../g2/track/bm/medium_half_loop_left_1_4.png | Bin 0 -> 5503 bytes .../g2/track/bm/medium_half_loop_left_1_5.png | Bin 0 -> 5270 bytes .../g2/track/bm/medium_half_loop_left_2_1.png | Bin 0 -> 5185 bytes .../g2/track/bm/medium_half_loop_left_2_2.png | Bin 0 -> 5103 bytes .../track/bm/medium_half_loop_left_2_2_2.png | Bin 0 -> 5451 bytes .../g2/track/bm/medium_half_loop_left_2_3.png | Bin 0 -> 5518 bytes .../g2/track/bm/medium_half_loop_left_2_4.png | Bin 0 -> 1519 bytes .../g2/track/bm/medium_half_loop_left_2_5.png | Bin 0 -> 1118 bytes .../g2/track/bm/medium_half_loop_left_3_1.png | Bin 0 -> 5209 bytes .../g2/track/bm/medium_half_loop_left_3_2.png | Bin 0 -> 5051 bytes .../track/bm/medium_half_loop_left_3_2_2.png | Bin 0 -> 5119 bytes .../g2/track/bm/medium_half_loop_left_3_3.png | Bin 0 -> 1471 bytes .../g2/track/bm/medium_half_loop_left_3_4.png | Bin 0 -> 5567 bytes .../g2/track/bm/medium_half_loop_left_3_5.png | Bin 0 -> 5246 bytes .../g2/track/bm/medium_half_loop_left_4_1.png | Bin 0 -> 1267 bytes .../g2/track/bm/medium_half_loop_left_4_2.png | Bin 0 -> 1375 bytes .../g2/track/bm/medium_half_loop_left_4_3.png | Bin 0 -> 1497 bytes .../g2/track/bm/medium_half_loop_left_4_4.png | Bin 0 -> 1671 bytes .../g2/track/bm/medium_half_loop_left_4_5.png | Bin 0 -> 1097 bytes .../track/bm/medium_half_loop_right_1_1.png | Bin 0 -> 1259 bytes .../track/bm/medium_half_loop_right_1_2.png | Bin 0 -> 1277 bytes .../track/bm/medium_half_loop_right_1_3.png | Bin 0 -> 1353 bytes .../track/bm/medium_half_loop_right_1_4.png | Bin 0 -> 1517 bytes .../track/bm/medium_half_loop_right_1_5.png | Bin 0 -> 5240 bytes .../track/bm/medium_half_loop_right_2_1.png | Bin 0 -> 5178 bytes .../track/bm/medium_half_loop_right_2_2.png | Bin 0 -> 5052 bytes .../track/bm/medium_half_loop_right_2_2_2.png | Bin 0 -> 5108 bytes .../track/bm/medium_half_loop_right_2_3.png | Bin 0 -> 1351 bytes .../track/bm/medium_half_loop_right_2_4.png | Bin 0 -> 1437 bytes .../track/bm/medium_half_loop_right_2_5.png | Bin 0 -> 1094 bytes .../track/bm/medium_half_loop_right_3_1.png | Bin 0 -> 5255 bytes .../track/bm/medium_half_loop_right_3_2.png | Bin 0 -> 5131 bytes .../track/bm/medium_half_loop_right_3_2_2.png | Bin 0 -> 5488 bytes .../track/bm/medium_half_loop_right_3_3.png | Bin 0 -> 5621 bytes .../track/bm/medium_half_loop_right_3_4.png | Bin 0 -> 5656 bytes .../track/bm/medium_half_loop_right_3_5.png | Bin 0 -> 5269 bytes .../track/bm/medium_half_loop_right_4_1.png | Bin 0 -> 5431 bytes .../track/bm/medium_half_loop_right_4_2.png | Bin 0 -> 5533 bytes .../track/bm/medium_half_loop_right_4_3.png | Bin 0 -> 5782 bytes .../track/bm/medium_half_loop_right_4_4.png | Bin 0 -> 1467 bytes .../track/bm/medium_half_loop_right_4_5.png | Bin 0 -> 5226 bytes .../track/coaster/TwisterRollerCoaster.cpp | 426 ++++++++++++++++++ .../ride/rtd/coaster/TwisterRollerCoaster.h | 2 +- .../ride/rtd/coaster/VerticalDropCoaster.h | 2 +- src/openrct2/sprites.h | 3 +- 49 files changed, 694 insertions(+), 3 deletions(-) create mode 100644 resources/g2/track/bm/medium_half_loop_left_1_1.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_1_2.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_1_3.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_1_4.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_1_5.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_2_1.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_2_2.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_2_2_2.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_2_3.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_2_4.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_2_5.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_3_1.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_3_2.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_3_2_2.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_3_3.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_3_4.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_3_5.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_4_1.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_4_2.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_4_3.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_4_4.png create mode 100644 resources/g2/track/bm/medium_half_loop_left_4_5.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_1_1.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_1_2.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_1_3.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_1_4.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_1_5.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_2_1.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_2_2.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_2_2_2.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_2_3.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_2_4.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_2_5.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_3_1.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_3_2.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_3_2_2.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_3_3.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_3_4.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_3_5.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_4_1.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_4_2.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_4_3.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_4_4.png create mode 100644 resources/g2/track/bm/medium_half_loop_right_4_5.png diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 6fa94c7119..d00ce327e2 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -6775,6 +6775,270 @@ "y": -37, "palette": "keep" }, + { + "path": "track/bm/medium_half_loop_left_1_1.png", + "x": -26, + "y": -34, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_1_2.png", + "x": -33, + "y": -55, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_1_3.png", + "x": -32, + "y": -95, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_1_4.png", + "x": -44, + "y": -123, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_1_5.png", + "x": -26, + "y": -35, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_2_1.png", + "x": -27, + "y": -10, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_2_2.png", + "x": -16, + "y": -38, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_2_3.png", + "x": -16, + "y": -85, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_2_4.png", + "x": -33, + "y": -148, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_2_5.png", + "x": -25, + "y": -45, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_3_1.png", + "x": -29, + "y": -12, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_3_2.png", + "x": 0, + "y": -14, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_3_3.png", + "x": -6, + "y": -69, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_3_4.png", + "x": -32, + "y": -154, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_3_5.png", + "x": -19, + "y": -45, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_4_1.png", + "x": -24, + "y": -19, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_4_2.png", + "x": -26, + "y": -27, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_4_3.png", + "x": -32, + "y": -31, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_4_4.png", + "x": -12, + "y": -126, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_4_5.png", + "x": -27, + "y": -38, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_1_1.png", + "x": -27, + "y": -20, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_1_2.png", + "x": -22, + "y": -27, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_1_3.png", + "x": -21, + "y": -31, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_1_4.png", + "x": -46, + "y": -125, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_1_5.png", + "x": -27, + "y": -38, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_2_1.png", + "x": -27, + "y": -17, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_2_2.png", + "x": -32, + "y": -16, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_2_3.png", + "x": -32, + "y": -62, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_2_4.png", + "x": -27, + "y": -153, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_2_5.png", + "x": -24, + "y": -45, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_3_1.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_3_2.png", + "x": -32, + "y": -35, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_3_3.png", + "x": -32, + "y": -85, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_3_4.png", + "x": -13, + "y": -149, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_3_5.png", + "x": -14, + "y": -45, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_4_1.png", + "x": -23, + "y": -33, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_4_2.png", + "x": -17, + "y": -52, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_4_3.png", + "x": -5, + "y": -102, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_4_4.png", + "x": -32, + "y": -125, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_4_5.png", + "x": -32, + "y": -35, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_2_2_2.png", + "x": -16, + "y": -38, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_left_3_2_2.png", + "x": 0, + "y": -14, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_2_2_2.png", + "x": -32, + "y": -16, + "palette": "keep" + }, + { + "path": "track/bm/medium_half_loop_right_3_2_2.png", + "x": -32, + "y": -35, + "palette": "keep" + }, { "path": "track/railway/quarter_turn_3_tiles_sw_se_part_3.png", "x": -8, diff --git a/resources/g2/track/bm/medium_half_loop_left_1_1.png b/resources/g2/track/bm/medium_half_loop_left_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2f3759ab876bab6e2aac99208d5df6d9eff708f2 GIT binary patch literal 5401 zcmeHLeN+=y79T*3fHrkwPgJmEgC)9Y$j1co0hnr_kcJR6)X=gv4wFfY5GH0K;iDB4 zT%hQt1zl>fqD93Ty0o=5t#OMQl`6Gqi;CM=p@Py@E!wn;)vdEH0Ts{ooIRei{m+~? znR)Ns`@8r4?!E71QkR{TJ~d)i1O!1-6&b0E!JQAT&wBe<>Ap9)gMC}G4$@e}bL!WA_-rl&g;bm5@@$1% zekT|Z!j_j_P08>)6@65vNt^fB#K@P$sk^g^7ftJ0e3Y3x*Sv1Y?9BLI*Tzj%yj`$@ZJO7UnMs;9ykuQWJF{8k!kp&-lFHF zLoZ!;l&y%kF1fyA0e#Nu!Tnc$j2e2=6Y8BZbMvX>m9@D~7Qb`uP`iHj5%>s_c6zSv zll|?M^B3BetY}}QzI}Mv3wa9SjZ1Sc4|Lz{8I-c(HHNSEbvn%M($E_%YuImJ?MSTr zNd4tyGv~z#KjC5YUbE_aSiHUR8`e_6ob(@irbkTd|8@Px^C(l!hptI*xz5bbim9Bk z>Vp@qc_i$>r`99S&Z{~EimuoMiYr%@DMfK}Jfg?*vG@|R z1ymgODa;_Q6g&r(xlBe-#8!~P%vEJGJ8GxsZWnVfLRK2xy@#ga=CW9J>Cw-<5nY=FOf*NJONiA-~b5@QCeg}N;pMC zYye^uBNZc1tI1+B;YEx9CX$b@vZXMYV4rcvKeI)px(i=KjIjXt;Fcg3EV=us|Kh?#*X0j%=x zGnuYXW#82ZP+&BfEkP|n_I;8zli?m&_xTps35GM?5ukn-_de-6u?K~Llu9K{#nDv( z_Y|oq%z%BV9!E`jY48z-VZB5T=W|4f1`$VSz%Y&&fejq705%v<7!e4?!f{ZFBEp6g zp;!P4fXABvju6h*i}@(VK_mhmM~LPNI1)X^VyHq4a-A2ik{`Jeu?j69Md( z2A4*AN`tK&osCWlO~GbjFoJC%MbOa@2&5R(2mJ(Cqg&{5q{xVY^JA=F@2s1CqZq^n z1i>(j&k-Pr2^^tB$miti`C^VfALa4&l0+c_kJ5SZ|uvlKpp^P96paTjxr{9ELd*f#JCe}GWWmuNDc~&J7R#|=o&b>z)8rxdlZiG z1$_NIKVy0LJxwqe4~;w!zYpnpNY?`~@Ib;3tLq_M55&L&2|ui^{~KKq_g<#3BJc~y z4qlbab;%z>P#Bb*nUe-yw?aZfLPJBt!ons@m@skT#7UDTQ7DwjlP8CVhtp$YV_}#p zm&-I7C5q+|1YT8D)zs9|(c$uVdVIcNzaQp8vLr~YjLgfU6%@qS%egi6Nlne_who=U zlj!!=_YJhl*%WP3B(9`aXk#2GtA&8~R>?b?wA~%Jud8Or*E%xnNsoebY{)Ky92!a+ zPU)<*jrI?xuu2d z?2LkGu`)VW9h0PErQ>XE1&lh9h-P_}Q`zX&w07%UK4Xk1iklvrq+u&jQ64VGYt%I@ zx)vAi@>Y0!jozWQzL8F<45Dcux)F*ghgc4ZsD+;1!OH8D;a+WhAJIDO@Q{1eY#J(x zvZu4_wMlKL+)Ze_RcLP$G2pBk?ra+II>`YKl_p}bwXn!2liM|#dK7K8+dJy(J6l@3 zE>~Yq&+zat2}R)$tBC@)QRVI^O*h-vC$AaEYaOz?haElsj-gw+pHJ{yrI`Q&I>GwL%x;C}202%bYbDceAm}S<&0sJk;y) z`!AC+2+~3j0YMH3azaoS1PxFi5)8GREGI~3E9vW1vmhLX8fB0x9rCFmQUj4Voveq+ zRyFA=AiHZwUn>+yya-atA+4HHfYK}M>_$g=TPx~zS9!h8p&>5`Y(*I%xI9wkpsQPB zbS@U|OL7e7IsJC`NK^MMS0C9s%%VY}7)m;qnkS1X(7@$JrK6&twXwqOZ1j4ZLp~4b z?-MDNqzfW_5J`eu)Btm%BdV&rd0;@)+%!6f?rwQro~EDxEicDmZk34JB!iuDxKqjP zQL~4%v7|1BtYDGNFzJ$!UL`1g5hwC`pa*P=voz3Cm(GH}wxE!FWqK-9J8^afn1ow0 zo&#h>(gIfq^!k<=V3A@|sM09kM$jLPmTu@r0iPjz6{!nyGPKKt+p#3H z!TjT#+}qtd1!wzrrSVhJS%ziDU2Z|6?<(B#3z=zI#Dg+>r&sn^HiRPwj#aO?x&PRX z{*RYF*ZahbMcTNo9?y>LyjO{oS=oCA-~UiBZE(v^r+62`cN?DIuX~Eq=&#*7?X~wK z{=M;}i(Uvg&0r_24_rti@Gt=}{&FMgLV_{hDaVRLr=pAHuHR=)m0_P)0c4%S9& zJW_q^%B_tj{o+?%JA0(SzFDD&dt}$vE#kA^&e}Ed^_ndHFENobvb!_q@62cp_j)p) zS$5)3eEg-W+kP&6JaOe`!fju8&imq)?W$>5JKMKMyQXaU@d;6{fV&#eQqpW#jW(*K>EwliEcbb4mK z;`XM0Bo!Slxt{st{L-vXM7}jcac9aS6D}W$tG?RrC{)z_wPR}YEAu}qU-fKQL!Dv8 z>A@#xCpV7JHY}!{JUg)Ey@K!cCwBFIUzXXf*d({Dj$5s;(zdz(j7OX~GGn{;9Yv^e tx9$+-T-Uca-SF=8fuo%n`(k(D>EAdt|J=ZD2N{JFX<4a%U$|`Te*hlu5l;XB literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_left_1_2.png b/resources/g2/track/bm/medium_half_loop_left_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b230401b3e9baaeba2bc18fd87a6a238286d8fb1 GIT binary patch literal 5453 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_left_1_3.png b/resources/g2/track/bm/medium_half_loop_left_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..9065c70cb83ef546983c4c900d19baa0bb51b8d2 GIT binary patch literal 5552 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_left_1_4.png b/resources/g2/track/bm/medium_half_loop_left_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f502821ecf6dcc5fe5515aa41ca9a663bffe1cb6 GIT binary patch literal 5503 zcmeHLeN+=y79T!?pkPHsi%JY?q%q`ULOzK>0|G_}OQ@h|<0P5HG=zysFnnm!iUnM{ z(v~U}aM4EOXewB78!cLtXjzMGY|*7h+R_#^ep98DMQvwa0xF*EIeR>3`=2>)GV|WM z_jm98-Fx53WJ^YR@`T_QgCPi-keZU13GU0lB@Xff-#$^{XThzbI4j4TiCBmRBc|5o zp+s|$0VSe^S~Ua}UessghB}GkAGl)HZ$7rvx$f%4)V7mb+Y`Rtm)E+P!C=ld9Q%9N zkpgZh_tVpNht4`zQq1aEG^ZeexMRiH4%3G3oSi*w^Idlr4!N&p2ha1{Kw9_KwX&pRi{jg~*XoD1 zI6qtvbIN@xJaF~f|9w_$$u%)~^2@djv)zX} ziYi-I9%#KM91al&=;t~MYHcZN#-;8dE?zQoN)|GEseQ>`x3F$?3Li#q6(z;)ST%)i zT(B!}%DeppytMDT+SAu!I5Cq6#qzud%JD%reGioBtx>(}Z}|T#^2=V?DcAX$8uoDb zD=!62`zA29Sx|e7uUBjIYG>v4{#&ps|H|11LKP ziWe0c5Ty<^6BVdNn=d2{w6&9nT9uHL9hXK=GlM286g(x^YTsnLLteE%LmV%Wg3a-6*23Cq@1)2q8KxxL{=;-mQGD7)UIce76udJ zjVd)iGjYi%1egg)Yt3c@pGLD-EU^|i7BgyS3?7e1qcdqtCKX6fO-1=;q>!3#iuOQ^ zU?id@rBQ1zYq5Ny2NO|X1!f_M1onxK{L>rK(jLR-n?_jxe9#IJ1C0?&r|I>yu^J|G z(s}?g>d+r*n6f~V(lSvKR$x@3N$b&kbM#mUmGZH^p}?5u4M(MAMR{~Jm4$M+R0Un3q^eaME{g-hDi}e=K&9rJ%t*cx z^*{meSS`R|ayU#x#pMERltX24xoRp8Mgbz5%T}utY?#Mpj)9OGwV*1Iys=(+pi}?~ z>> zi!xG$BxWrA$x22ZVpanM&;#0h6=pF#*~-%DQJER>@Cj`5*lZ4+#bL78JXYKjq2;L2 z1ZvTP%Am)>TY1KvlOWM;u#Q2e7JNiG5`qa?kE*=2&Hd_!Qx<~_f1YCgv^>Rg=KboqTr{yhc zQBNKKWmE>8`h+qLi8dN6&2wTriZ-71Uwp)S1;!jPKyPFX99`ffq&+?gNBQy`I)CD4 zG!K8G1pxir$TRW#oUZ3|Jre`ZB>cR(p40VA3_O$Y^XmG)(G~pUWeUv)zkn>@Rq5)X zltc*fgEE$7C4tv1A0HoIUtd2zKYxG!fPjF&z(4|l5EK+NZrr$t=;&w|risNOnM|To z=9)}cX=!OqO+!nI!|Ckq?Hw2#glUjS07)ewxw+vwU6iGSR$eKnsgpLf$lKaYU9QT$ zew&y=$QFcPk_c;dRF#t4V1ipq#qBlOT`gE|XSuuAHZ ziy~;!D1n@uj8U?!u(C>EsuP#mCDm;*TbJC?tBK-7(vqVEGKxgW$;HH2xwO1N-r&F- zE~~S*+U0KQ8)^>|LE$neLIXvWK;$X{ry(M_g`C?i!d%&veJ0yLl@o83Qo@y-NJ}!M zGF#B36t|gVu2N-Bjj7*WI?!G-nxU*%F6bJ2A9Lp z*WEoZFn~jm7(}iiz)fM|wn$kQMbjrP@6WZlEo}o;-GeRe2R%c02qi3x6A_Ud6)mIC zlmdZCA}yB#u#%R_>dvN?UZ-oYPXx&&1d}YxDvzqtQR+%W_HtQUou<=n?P;%b_c#X! zZ{Q*b%7!2l1XV$h9fCR`sGk7gU`WMyi3zvc@ZKIN8Ny(wS_C#UhQ()-MvnH zu#Y2=;0_4yg>W3?q8ykT8Ih$Wb^ZOEx|)$;>gp2b=E`(BWl0GJ(@HtC8WC(4!|f7U zx0K?}j>hFtxRs38!MH<&yCk6aIn}776Cmv?RjS;0S_0A^pDZbqMmEmYTRIE5~`DX7%<`;`ldP@y0C) z7j7p`+6IS-p|8HIzaMdT>4P1Yt}O9C^1^Fn#XlbJtfjZFx<5Dbz8~v)(3RiJzMs2q zFILasygD5E3evgwp&)DN%#+P?dtP~IaP!nJ&kx(?Sz(8b_(^iNwYKr1=-}mwz3b~S zX--&K&qHx{Q9gNQ_q>kp#qGNUdskmQ&h{C)US`2wsA*vp92mYhaeCL0tr;KgV_&UT zf4fF|^wOK++JA-mHd`&#h2Q#8SB zt=*fJyINo8SMJlK~Y;8Cyb(JL`54 zo4XrVgvaSy&$D%{d$ehv9^Q6-mb0T||B=_T-#Mr~oYXux9AJSrn2WJ<4w*A+ebLg$*Y4I~i@5jtanFk%MPtbKI%yG|} zS{q2>buEi-jRsn?KsU r`QR5)pL?5DUQzLGpnEBrdm*C99mfy;yh97h21-pzPi$ViX48KFNfa_s literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_left_1_5.png b/resources/g2/track/bm/medium_half_loop_left_1_5.png new file mode 100644 index 0000000000000000000000000000000000000000..f242002ca60eecb0c77abf973ee5ae4a82d7e002 GIT binary patch literal 5270 zcmeHLeN+=y7Ju>;1Qiu6R&ZNwNRUyv_i)PQ_M42RI7LK`QONk~I7kckAPHeInI zg*LUcWed2p8!c68X=PnbH+7>%m$kHpE-LM&UE1Pqv{qTmZn4F6_9Y}d;Uf+y$6vNxe?L`}Hg{Ylg zVI}m&a-444R)N#;YNH;2>c5x^O6GX!v&MZXRT1AU-!M&D^)QiQ9cP>eFT*6gJi$PEkK8d9P8j?pL!f4z+DKp17iGlf3?$Z((RNb{Q3l zf?S2-b~G@CwjFzAIo{PvPHWT$3Rlc|U_s@d3if^bCGG2thc-sU9yr{8sP@bOP5=I7 zxs{a*N@M3dz4Ec8rEOccRxFG-5jWRBV`e3!TzBNYk=01+{dcu}q;hP|+?Ge*Y>{zS zpI@20Z%@PfHxDhU&YG);UVVK3sr9ngHhpxGeCi8t@1T3R@4HoFflI|PkAy$PsBFBv zJL`ir8E)g{wy}Ee+bdH}1y03BJ^td2y;qL(5pBvju^Iew-N5K6RQuk!)7FIUBX7+2 z&COo$sOza^fg>lkHFR%2-2J`mhge0V`C;$Y7FW)enYsJvYu7DZScERi>s}K){@~qU?N*8jhD_@UV_|hHY@tuu*18}jwFB8m56`H z!;3ffYD{5d`+lKh^Tp^zpGKv=BW?MBR(cJ1RlnEeyl}B2WkJL7@dtOPf3fI;$ekt& zadk)ADzNFBCx3_%i6Z`}eEHb5>(~Bp?XS0F1J_1qZ#-;$-*H;1g;iH&gw?e%f4u}F z%&Dl3(Bi4p<_cJL0A$FkD^SdY+vr-{V6?~>BW@3aZq&&b#cBDR{0aqLX3W`c#nsz4 z6k*#`K&sIS zgqzAi%w}Y|1!>Ewf*_L%`bi722sSBFh?B%tD~4xP;TBu+bO;?bWnZz?S{@2Vhaq@5 zZicEP^vb=hF+s*V=+Jp>U=z1e#Cb-lcsz_K-5v z%FmZ%64=(@@^Uj}jG%vsj=+pMN$63)(du>SD9YApxk9!eO_#>ja?(X?oSUZCa??3l zj+j3UD%V2VPz#0!p&)pw5#sPg7>aV!xNKCX)v^T~zKAX2aJ6hPF2d7A9HCw)5KMzm zS>N(eml53PR~1l#t62q>068Y`p-7tI_KOY%wMlvH59y=p{W36?1hVC>zh`64qi6mCH%xi$dnX#7JN`kXkfYsSqF}htWtBRvfhv)*^x^ zmob76^q}R`bUth-9cn`}Q5z0HIXr=c%aQQ-MI4cY1E0Ap4p+jNrcdaM`fdM9JJ>$- zjESV@7)j`VTSzp~Q);|&Vl*)o6Ce(%$DpRRji;GUH4SJ!>I?umhWQodhZ|2Mi~ z?z~Ll7Wfay4qugWj(+(y0O6oueNh&C-I_6DMp#%_czAe3L_}m{WK>iXjYf-(j-EMl zWu>S}I)=tPadHr^1_=g`R0Eh!ny@_~yNg-kkrTe+h9S~5;`CD8 zDpouuOtfdS8j7VIn8Hn}eYMzNGdbK@JK|{`^L0|g-ne)nlU2+Y8srMQTHSzQt#*4? zLxZQi-PhAIG%zqSGD3kw0x+9t{Ej$H(A=P!!BX9dtKwB-Yln4i5`knY1F3rTxEI;(q&S$8&?3jp-lnXj5bcS^{TI)^RNJcV;hHCHC;gZ`8SDsSz9Jed6r?jY6XB;5CdfvU}eXWxsxCu(^00 zdB}V8)yFN0rnx(lW@9lXZ$V(E-&Sh0q<$Fl(EOLUgZc9+8?Os)mDYbVuMBH6E8jl4 zj&-K$L+A6urY+uS!?c(6DBM3N`mLciiV_qgGen>XUaE_A3juNtq-y%8BW|F`;oF{GoA PO^}3<`uPi#T>F}<&HC};Z$F5B|6W2xC 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 WX)ZsyYCen-6cwz>Kd@q5<9`5fLZQF_ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_left_2_2.png b/resources/g2/track/bm/medium_half_loop_left_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..bcd075348c2092a12c466cbdb6f41c9ca9a14c9a GIT binary patch literal 5103 zcmeHLe{@sz75~-(DXq}XszoYGmV!}2`jWh)Y0`#R(wc@)QkzPZZpN3Fmo&7=OY>5a zQf832l`Tprg_UE`$_ZLrHae*qC2Ej}okj`B&WctkvuIH^3)EwoMc=+jN-1Zav%@*_ zKXP8)kNds%bMO7!d%q_yzpGxYnwPmS696zzU0GfOuYCAjmXQw6xBfNu0K6RDQ2U^> z26M6O4$@?4B3RB=JHaB{783yOkFC{Zw;bkYygr`Uv+Xa7m&Dc9r!O#;>l^khY%w25 z`@=^$4W3U(XS4nG?FSmHFW==ASw7(%6CKMws-C}m)3#+jU%fq;b8@BIweHCu`k&Fy z8Tsn=o!JHR0cjEK$taHzp&K93pEc1Wg ziM;a0pHG%Na;l@_iL^!Ohx|DQv);Mc9Uwk+jBZ|NdS#oZO;)D;#mcWQ3)J+kMe+t#-5U;8HO zDbZqH;nvNKZ@uL|@<*?)fB*dbn^~9AKKtkCy=U1=en9SdY0HJvuQJEJmVbRJZAJg# z+I~*vzO^4z9>EPop{3tF{Eva0%?qN>zP(D`@$mbHS~h+fjShx0;ts{c=-Il9ccquI zn|FM9-;-{ydwu`&)G5yV7q{=t>B-eDbe4Ul+8>)AX)gSD+4=Xkb*MkcZQpXlkQe*a z`zwFDvQ&BJn%XBX{^n27%u(Lab?u$HrF;*M88l>M+Sch}_NH;x}atU7e4$lmhV z&vrZRJ%9W8KIt1TPc(lAjQfJ0=bt{Ev+M4fZx6=8lLy--Csu_c%+N*0;o-{}Pr$BQ zZ-L$QVAU!aPFf2wBWWNC-BvqnI{-=*ZaaoI5>A$ZFk5VL_EAZewl>))nOn|I;>zHCLX5CkNfl?Koc&-` zHA_i42$rZ&RLJL5xGn32?B$uPQistbt0}*43IaaK*$qyoU4|eom#ff)7LpD#B9Ka@ z2w#W@g*>RiqgriF%+0e=1qp~0Mma&@4vXDsA#JP#CT1X8oN_iBuCuPhXSG*VO~c!$ zDHb3fh#RvbfQEng(Y#L{9OY7mHcB2%%5CzTQ?&rl>0 zizWPGi2$}og7p-X+D17s8%`vkprp_Oaf^5_9AwjsTtXeH+3k&&ICDl!s(*zCR3|MSN(nVces%mmy& zrW*E&-11}1Ai_kr7&Y-wp@h#9;e?2X;ZiZrfC@2#2^V9<;#4zCqf?~G>B1aDnHlm3 zxq=Ov0ZUHsml>jqud#lUqb-{`IzbX^w%*QI=;yZ&!< zWnO)mB5d#%kPE&lz3^{YD*)-BdR1)&eBDY*OS|c&o6^(MXU&>5d-m)(bLKD@jEszo zxpU{{6%-VpD56vV1e`7g+MBHm=j&oz^RTjgq&_g}3Xl0ujQ5RB4o=Wn-0W;g zUY?3spyMKVNeQLVw(B8STc59Upto-*8Xq540KJAm>9Rd~roWNf-KGe(>%!gUfuLtF z(mgsD9UnhOD*&hifC9h|KoEcd07e*qhKE*3w^4L3Ko1RSIevmcpN> z4KVc~4mnifAFB_JyTTJ)vB}UdJvhe61rjDhg=E(&n2kEL&8+cz8Uvl4aIiBT4UP^) z>G5HSMni`HJp^bP)}kG{OC9;%w(gM;Nq1N3pkgs)eZ8)+5pQcFQN$}jx)f+oiAFTY z2`zWDu7K7vX%C0)M(L1(j%#4^OL$oq5;NeeS*-*2esL21w*}G+8dW*iGJ8=ae3)ym zdOdd2SD7T@m|{moqT-E6eL teA}giuQ4yLd2c}8-(?zZ{?fLKIp>K@0!?_wYcM9Du2@~Zf5ju4{{w=lek}k1 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_left_2_2_2.png b/resources/g2/track/bm/medium_half_loop_left_2_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d2f4d5e75c0ef910e182bed5b545e0bb340eac8a GIT binary patch literal 5451 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_left_2_5.png b/resources/g2/track/bm/medium_half_loop_left_2_5.png new file mode 100644 index 0000000000000000000000000000000000000000..9856862ded91cb0fc2cedb526b6bb36695b6e4b7 GIT binary patch literal 1118 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_left_3_2.png b/resources/g2/track/bm/medium_half_loop_left_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e0e7dc4cbd6eaaff841456c64125bbdecd0a7f93 GIT binary patch literal 5051 zcmeHLe{@p!75^qt!9-ut=teh-iChIMrd3zroF02XTNYu3X%2VTpV1@QZW+G7jh?a%Fv z8@=l>AII$>ZH^X#MUqk$-g`O{9hN?!hAeK)Nu6j-X{Uku0m!I-b}^`oLQ zpLQ2K>FRsJy7n)u4bQyJf91|ydlz%XCmw9veitKkaa$0WGnT3m`dm0-7HnR?tbeuD z_PF$-^5W^kPWOAfJ2usB=uUL=?t77Qv25(y!IV6-<&L()ThEKBSGmUviy zz5U&h-yAl+^zhWikN*bK4!T zwl?bTQ{tqv0<)49qN2^|hD8TJmAcK1;mw4XV+Yc<~ zF(MWVpoDuAt>DAaC;r3i<8B~EaWzCHJ1zbIoJGiy7l_&@GfeG z1;_`|hPe?@g%EK%k=YuQw{|-OnQ`cAHK<0|qR4uJBDZ;PqINss@|Mkpu;SPC-P=4Z zxp1sFLbMQ0C`v)AqMJLJPMI{nKjLN5>thn-C z(&NNnIvq~TP9ScVJ!d0JxbmI`Z8cY1A-u8D(1LkwPyzOU!(}CX)Qzo1hm$aRu`Hh= znOFgB$|@x?p+c;f4m^jrf$&hU7PF`#VFfDBsb>?TgyBGHv23M6fZRHaMyc@-n3wc4 zl4MIYHw(eZYF^*g!-leAUaSW55)f11%3foRtbACds=`DOK=CTv; z{Fo`&YwM1$DF&-mYO#rhLP4d15D6rNln`KYi(DWT2~i<|DZ~;Cy&0V%ZC)SdA?~q5 z9wAq-KyzGiR?eiV{APLIRwA1RNSQz+6wIQGi_8RzWKWE1(N-b<#Ya_6VAc@>^`_V0 z(FIRJZi(O9bls-wmKeAt;oH@9o32}8;Fg4MSJ(fI zuEHBHQ-llt0`kFErE&X)T>un-hWi?8;pT~Sk0Npo|l&yRHV zs6u^){sD6=PK_jbQWFskpJ7rJkvdj~sWgc5!W4QUpoxb}BLie|xGSBEOl5}Z*ucyO zJ~ap$8T}+9-cvl*Uotturqc*LX{Ij+X?my(00RJK27@dv?qIWnJYGblI$5&uHwy@jjn#prvFb|8 zjC=%FsVJSH%M8K%13kUN{R7FN#AHeh%sK{TEbcIu2AlbPes#3V80)hSM?1#ied)2G z$;k_}8UPaj6aYa0q5up7Fu?#c90m>Tr|4*ePL3IPfJ8yB8VuHfqyf-IK$9%G2c;th zda#)u>7tVnkWIV{=rq7&U^L^b4j;caSl1uHW3fOY5lyEPG_=LG1Jqxn4zdi9Qu82> zOsayJrs$+EHWeDVJeZ=#GQ1KXD`nIn#ZBtcW+Upi>w+E4k=~A2v^OynO(%!w$&^f| zqXz+<1T+nE(FM&-4|c%cH!&gW3r!DdWJJ@{WNdE6{eBWf0x~3|Mxz=uu0uu*{Iscz zHkZ;JJh~612i0^!2a8`OD7u*K0q^>CMzH4myYQbakY~}=)quTozf%t<^WF8EAX!Bv z*((n`dEidC$na|QwTw>+SxZY6-F>Poi?Bgkb5G;S#K&*^aS0GH3)Wmh7M(Wk)3==K zd~}QFRh4BiH+A~ySDvju#65Cw#mb9I_6&S^^kv3#uYLdBeJ3BSDOav2TvqAtTl3oL ol0a&7{OBduJ6C?$ac1t@U&`3~|JC~hv;efV>uQdz{qe5<0FT^TV*mgE literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_left_3_2_2.png b/resources/g2/track/bm/medium_half_loop_left_3_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1a8bbf2a65806a9997133ce3c0e387feab76a02e GIT binary patch literal 5119 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_left_3_4.png b/resources/g2/track/bm/medium_half_loop_left_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..2180a7dd8c7a4beef43fbf35ac312b52555b99a7 GIT binary patch literal 5567 zcmeHLeN+=y7Jqyh1u;EEjfyR4P-BhBB$>dF0F9VnU?T<$iW+SkCPT;q8At*_X~mja z?9v4kDpgc0L9orKtjZP@x2dv<9@-*`#!3}iRQzmIR_&JJ>;zEpY|q)_IototnXmWW zy}x_!@80{)Og>Cppa}Gz;tv1_jE|Eqr0x>xOdjn+U9VJi@~K

2&%81ddtccXCx zz1eGxU0Mzs=(%Mq=%E<|7o}iu5n_#7rV$TUS>_H58n>tgqeNC*abIr?KJPs~|GW>p z&*#mIjs*JFZ(0ukeZx=h+-J`%c5Uu%xBEjQg${sr7~Q>pmrdK++SaXG*WTXV(b3V_ z+1b_Ag<)8CcXv-ukIUonkfe`cXr5<9F(k{9s;au4&gJr@(z0bWTP@NDv>!OOHxzP4 zBJOC+7f<;06qm^fg`!+B6Sca*5LnRPE3qym=+;DUS|%4&rlz^h?Y+7-xoLq%FLgNd4KG_?|1LT3Q;>O6 z6|1^j&#KL$zG`Msz2tCGULr_RVVa5Zd_ojc(P%D_D5le9K3`j2ZZ?|;a0$FRMrIsL z0p}}3xW>fmA)^s3G_~bcuCZ2KMZJW>LAhK3w}&TuqTesGTwJi1#d3*cIg_(WW~)Yn zz+y7*Pz1LYAyP3q8|MqDa5<|~i>XGn)M~9D8XyQD184wQfHFWG17w3^P)tTy16fth z3la%Q8u9_KI6yog$%PUmGB}ivph_HB2HY{80+xXwhebq}5+#yaAY+Jyf@+%CM#Dt5 z79IvN)=O(H&TtEPuVnePW+>Z=7FPAjTE2#=O|KIuHx}?YLbN-=ld&+XDG?*76tYRP zlx7F2#8^xseJbVCX)?=@Mb@{> z5sjb+32vl#QHn%)8kwveerjv)-*RmpBs4K`mr-7GG<`M(Q~T$ z(e{@%+DH1~(|2Bd`?D6l_i*8xLx(3HduHhD)P+~@=`Jnz+QrWg8W+v`$E~+c9vpKn z?E2%%m;Zf#Wbi`YA;vLre%r~z7XH)4;_R_!&rUQyn0o%w<)QB;`p5rzle@(%EWK~! z=C8Y%`2#OZZ~pqZq45*n_TRVX#-2-0vNO{&+phimJNDJ79UpI1=k0U=4DTA*d2VQI F@_*E%-qZj9 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_3_1.png b/resources/g2/track/bm/medium_half_loop_right_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..49c7fc9b072da37dd301ee42512b1e143d9389c8 GIT binary patch literal 5255 zcmeHLeN+=y7JrBu1QjZ+Xk(i+lt#rcNhS~yJ|Yb?V89@uVx=`sCX<)~nV1O#r4>us z;%=<*tHqXfSvOkT(n=LQvCXkjQ%iTTX4S29%~q(`#;#qXVoO`Bvo8S^&-R=>p0oYW zocVh1-TS-u{_ef+Waf9J3l&phAB+V6OereNFN1d}JZHv4!)wJepEbeT;nn3!tYw&u zZMKklV>Q9Ht}+vBqTZ+np#DrvY2{QOd-AYCM|_q$B$#@3Zgu^f2SV&gQPED~ubJv&7wts?N%4ua95< z-m3jiH(mR~CmGDgUhmZ8ZGEdiu_!cCH}hlBfPX%v|@^Qqj&gO_swhje>YZhCn|QN1o3~5u4kE$$7`qr9{Y zO;v{vJCD9&cXaKZy1R+}W7N6t`gdI5q})K}>|1xG{{Sm=Dd*DJsK>jGly`AscP;&_ z@F=d$aL@gD*;m~OO*4Fd{J1!0)3RfSYM=Yk=j-*v_${)b;Dw5-k40y5R&M?FiC60F z^>tluQ)jtT_iWyg(3Yrr(3*EnvAbugcV*g{d6$oE+*I^gV)MGA+N7RmjxBh3LAHF> z;__FnzVxmyHpn~v?9St7hR!3C&+mU#)N91D+`R>;0N z$J+Btk>xMv=h`>nQBUsLSS|aJb^X%mdBrM8(F-&FHmrS$HL#XUT9H2Q;_w%HmvYw* z%{*{YdgIx|ZNrZqJaOWP;?SWC^U5zzoX_dEFlMYdnIhktf|P781!w&iS}pT0PruwL zIk}THi)%?qu@on3 z(l8yVCDQ6^%&_VJ$d=WcF}#YfvbBW4Xv*P)JYEjlsLSD0q?hnZ%yMFdv2eA8P_JHC zj<2r5B|45QH#WOo3IS>eE5@#`sWws4`W#LKR|=oQ(+Gzh5wTX~aF&#mvgM?OV2jd3 zX?$Kmy|GTn$&F=aTXcG9S^g8F5O9>kSz)!Br3hlP+0txi8fh^g0*OR|@P&v_$b%9* zYL&@~)$>eLau{L+BcGsfi_vT~k|uT-6VsBl)*KE8uCs6YS7R|utqSfisVFKby`>SRz+kK~N3cSu@|`rBmP;ahkm63$php!zM`JEU*M9ubC8 zB_+~)60Z%rSCpT_3EP+INZhECMjkT=ex_KL!RHC}>3p6@gk|tDGei=eL?RO5LLsUZ zVAvR_A`@lBOgIsSg5YUJh{MmsGQ{aZlt&08={ymN3wT&2pU)$-nHfS+MutEu#>YUY zEJj$BSoK)1!caO0rN<-?2+!b2FkHeDWx|Vuuh;T22{coW3i!C5AR1oQsli}6 zjWw8oK+GmXWFbtrG_SNMha*hm-<~P0#;kg%0DHh_(vddm_ENdAhEQ9vFrNakP$Cux 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_3_2_2.png b/resources/g2/track/bm/medium_half_loop_right_3_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..565747b91bedc167890d202848c420167df3f103 GIT binary patch literal 5488 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 E0%&Ugod5s; literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_3_3.png b/resources/g2/track/bm/medium_half_loop_right_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3c6b2a778c1a7af8b9765e593955aaec30a15a24 GIT binary patch literal 5621 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 K4`(m_`+orH&}}UM literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_3_4.png b/resources/g2/track/bm/medium_half_loop_right_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..71dd87e1ed8ec53858c5b108e9fe0990e7e9c130 GIT binary patch literal 5656 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 DmYIo7 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_3_5.png b/resources/g2/track/bm/medium_half_loop_right_3_5.png new file mode 100644 index 0000000000000000000000000000000000000000..f130b6a5bb8ab5f1129fd50811f28423e9af64fc GIT binary patch literal 5269 zcmeHLe{d3a7XQX1qKS&vv_>y&p`g-=u)q=sM2Z&DB!dW*Xw=k;n`I$1KNeXOG*eMg zV@)mEsPP)x^o%xDre$>ctEPDp~@lA(pdv;Is7VPPoS?Xy0V!Qe0qzl*VR}#01jx8wPdV6nYdyB6DAjbJ<3{#mxoFs19{$$7k$t-!dja~W6alR z?xq8i*zxLSRbFWNlb;nA>2?=9IrZ6{oBpDlpY+7ysdJ{TUVCb8>6uT@pF&DcZQ6Ap zD`j6YLp{zvMtI_5<$;vd-!s;?cx!joZ22{~>m=uMZ|{mjZ8r{7G2HcY-W#tHPk%|T zdV789!GG@^>&_YLy@o$t%RyVs7IA9#^(9PZadhXjj@xG&8V$nnqppoODt_{ZY+~0-GoF~dvvu#T@p-3Loc&B) ze#>5I}!GpAm@_4S7fcq^k5 z4$RKJvmkBzt%-*_J2|=2X_8R4+wD$X($XP(~3){qW@Efq?I zB0-MZwp7A-K7~EaVYVn|YhN6MfKMt;sncm!B8bc761q?!>98VVg+hUdB#1;JfEog7 zS)~(m3o0pY3}OI7OHjDOW_Q}iN_GqrDXGH)cn~ zLJ?9?fef{voHWYgL?>f2EnkZDwWsR%XE!B`BIHkjOEqKq|3d0;~kf5@eY%aaM_?L?$m0 z4}r?Bq?}kKPQ;)fxX=c1%o4E}%aY*&6cu3tsYNCeVCGCrAdx9h9G7HCC1S-82!q20 zyAmrO8dVI+456f`LI&;40x52ZpHKmePAovNOodD=lc8A>JPu{Xl`oQx3JjLhR)JXw z#9nEQ3u1&TXBhKU9EnhLf5ljiIW5ot&Va4bOuDH1q5@k5VRB+IKE-m0LMDS}i9#%c z;on!9OE@Uli!oHONQh>|C9%RNVLFgnEY_(IAifT>QED6n<|G{jBw4QF#DZeSEboc+ zaG=bX6VqZ&0)mPpQl(g=l%NG7nG(%ZN+f)dSScE!PnvC(W&cY%Ha_fW14YlXQPBUg z_|m{knTW*$PXmwTw)ily+3~SZV)#G`6ttF#hu{}^o8yX&^!XaQbCr?j0&U*LS{h~BB@0}Jcv$_7N-ky5HqZhN5~ay&^TA@X9r95 z+=KeAQX*CdNSQz^5)7e?gA68%#CD9k*-k_Li;rn>g&|uEv>RB1TNm63k$YR=AYZXf z=Xd-J*5P;b0HGf_c_@A#(e;R~hhpHNlpl51Bf1`nfrnCl)Ls8Kx>D}HOc9mv7my3S zDs9?t=K+uij57;z;OkaGLc*|N!x9q{lai8>laq%JAI@MfMvNFSa^%Q#E|-g#eJ6Xl@RKLZ>5dkR@ToYz31EnZEquCSw-jI>wxMH+8JL%A8Cm=9cP;4?9rNJg-R z+1-@Z-;qK0A#{H+ealDFAua$00E!t5lF9UBWcYZz#_a4CgQ4AO?e=&sH#E?}U$?T~(Mw!B1yt|I-^?Reix*K6X-5X-2$$9)jRBlykTqaWuj@P?f%{4W_hK6t;&~y59 zG#aHr1_^j|477=fWNpK37}Rce=m1?^gE>I+f34%G1+xSzHqz!Lzd| zouRrIf>kxw)V4P@M?&HL9yKV|F(?z$Q_S*}@$0M9{%TWOy|vx%=?>QSb%*-7 z=}04p68c=9pl;POVHT-bWhS)Bs`Giu8f!gm{@QTJ-xmqd{XKG>jt&4i z0%#i6q8hpzI5NCd^}W6F`nrLG>gdoE6`9J)@Tw{jMZ9vPPL29CXi$foHt_ojxpXm$ z_VDO>ln$urunsoAT#$M_HUrMtvrJ(6#joMNTOgrCm#YQqlb_0i4vI@Crlcox$K6iVLRrGpeC>>atd5Oc^T(`Vj{?T4o>r{j<*e5hjI&8{ zJ|kL7>DQ6g)|F#tuKeo{;@3BBmNza85o0HwzipB&IM)A4_~No9$3FMtvbhsBaDRSs zgKz@b!*;LwTfKAr)d}B>>^#c)@Q2OgpJAW!?Yt`Wmh9_fuQQw}UD(5I`RYq-xANRp z+f>*3dGpK89s4C2$n&;r(eL&pToidsHw!+vx?#<~l4ty5l5pl@uUuF$ciTM1Pw(qD z=bx#pigYg6GU4;F^>=n3f9j-r%7zn177d$~{LCbw?#l7U4r=+FCz6kU_4Wcb zX*@L6sudXJyvt`D!#^1H(f+Ql1iQ9Xi;%fpA7kWU*U?g6msi%mdX#M6i-PDU2fN=7 z)Oz=xGbG%21I*d?H0y|@@aDLiUk1LPLMI&EIQiYpf5I{$l^{Q7mUiC@i&p;!>uO+MGp_sbNor0RW~-vomwyl?~6-&=B|?M*F1%UXGXL71(l7JKby{ zwE7~PZd+r<>3FGL3qa{t#++l3Uiy?f<(s#GS3|VXUo_b-zSh@O*}3WUqvFUJ&0oGg za&ztJH`hD2&t0aJ#y{DVeR)-e_l0ZGRknf3!ji`CH=Lb%`1cOkT*VRbB_1SWXoOmWLEi`S*w?V~QrssaX_8Ih|cgoY%Pt|^AR1KUz>|))D zVGq`Xo~+z9>GZZ~t9V;xp4I{9>$qv;=1XaLI8p`=*8k3saSk3 z8<@l1mv^LRdtZqDNTtk*pFS~svmo=pqLRgt?YSQ@3g#F$E`54o!pJMLr%E^1IWH|Y zU&r45{?e7!mZ}zd=(M?%1YL2FCO+djP5nTw;R_p-@MkAT=|~j ziyw@vwG)0OLa1Fvc~3}!z4CJ03hpe)Pn}PMO}sR+<->T&l%C-ANiNs9=NH9PPAPtO zZAf%u(N+y#J}?#FF@`V^DP^dZ?}f`9dK^7!yzpp~e$Rjba)u%xUy_f9#&?+QZx+F^I>VF zLI_~QZ799eSY)yaOVb$vTp_&o4uEp zC`Kl3#VmTWO;4EUeoRzN6x-4n3^-4}w?3m;F24_NvW~F;`9MlhGr~z=BSs@K-ot9k zDuEzl3;I&^Ul+7h{AH}ji?Ss%qCr6 z!cVwxUXC=K!A)R47|AI@ZCdC6dq8i}5O(W>sXVUh4I$} zhDLiziLV}g8htF%2bzga54434#YR)Gq9wQ{uuh0II)$x7O*$OzA7g^OH?IE`F>nQH zK@yH>SZZ|&&PwD#DXEj8EI3eAII7_YIDGVBbSt5?*-;BVPX~E~TtR^bxT4P)D^>i% z_V$&yzYdTxC{orq${5I4vWS1jxR-4j@?U(U1q{Y*G0<;x3~pU;Cq(XVg=2jAH=W<` zGggP+Fam^r9ORMseN5M5x*myvM>2k_uE%se5(AH9{8(N8H@dYBxJ&b2@@wyoHS_?g+d7p4V^rBGBq|fmd8WHVv$lQ z!>~fDm8hz!s;_TsYjb(Mo!#AoLqj|Sh*E(<7G78wWiZ6p%aQ83)cOWRbDPTTv3B_C zdi$JWCM7>LoRCo~@?#uWT%(nDs7maq&+lj>y4$P!yPd;>UI`7Tn7}Rq4ke|Tpm^#c zx|*YgI%s4+LJq0OI}Vcc#sZ)KKt-Vt5fK$Mnj=I^O zerhu&c3YLcDy*yC+SgJw=&2v}wUB+@h$wy>GoQ!TiNtoLvJS%>L~%Bms>8arG2lbA;GUQ+6@zsw5^>$waW! zRI5x;t%6|XZFRfao7=j*zM)gJ2dnI zDFPrL04o3v09pWO2cVAvNO&m3WVw}WagyC#ia0>>yJRiu!AYVZ-VAKjbbC*NX?8MyeDxa^Vzu!l~STr5rm4}NQRE0A}<%%P^ zQyqhaEkkzqaDB%eS1;K$7#9WjF%$_BQ7DQrD0$^NnWMts+*RRj+2!-L^mlv7pq$?&QtMc znG;wZS5xx*tC^h37c*Ep8Q>o_;Sy=QyQZmf&ri0JRWm|7`_$)023Bo}R`E|Y#_YUm ze0F2pYdb92((d}60c!j$s=;}LvEceSUPg2B-r}nxN00^EkM%5Xy>nvIjdis-tu=pO zwbo?J-E^1z!S2hqH;lYT&fc1FaP{VFbk^2Ct*CvMk#=WfQI7i3Y1^!?2JOeWS6HHT z`Qe(G)GMu_vsfP=`QTcUTK-2_XlG>fKBTt%yYshahoqm`BuLqMGsC@QRIC*VQ?bNoOySbDm QSZ*NAT9o-##!IjK2TMH-NB{r; literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_4_2.png b/resources/g2/track/bm/medium_half_loop_right_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7e824fab687d0caa0f9e3d610d91b83ebd9022fc GIT binary patch literal 5533 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_4_3.png b/resources/g2/track/bm/medium_half_loop_right_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..feea7cff214b0066e1d39934c1b07ff4a95c689d GIT binary patch literal 5782 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_4_5.png b/resources/g2/track/bm/medium_half_loop_right_4_5.png new file mode 100644 index 0000000000000000000000000000000000000000..012cfc0e848f6359722c195a7d43c40ee1ec8837 GIT binary patch literal 5226 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 literal 0 HcmV?d00001 diff --git a/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp b/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp index 424a3d0fe5..21ca359236 100644 --- a/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp +++ b/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp @@ -15029,6 +15029,422 @@ static void TwisterRCTrackRightLargeCorkscrewDown( session, ride, 5 - trackSequence, (direction - 1) & 3, height, trackElement, supportType); } +static void TwisterRCTrackLeftMediumHalfLoopUp( + 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_MEDIUM_HALF_LOOP + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 5)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 10)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 15)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 1)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 6)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 40)), + { 0, 0, height }, { { 0, 31, height }, { 0, 32, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 11)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 41)), + { 0, 0, height }, { { 0, 32, height }, { 32, 0, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::topCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 2)), + { 0, 0, height }, { { 0, 0, height + 2 }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 14, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 7)), + { 0, 0, height }, { { 29, 0, height }, { 1, 32, 96 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 16, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 12)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 96 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 18, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 17)), + { 0, 0, height }, { { 0, 0, height }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 14, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::centre, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 3), + { 0, 0, height }, { { 2, 0, height }, { 1, 32, 160 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 8), + { 0, 0, height }, { { 0, 0, height + 140 }, { 32, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 13), + { 0, 0, height }, { { 29, 0, height }, { 1, 32, 160 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 18), + { 0, 0, height }, { { 0, 0, height }, { 1, 32, 160 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::centre, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 4)), + { 0, 0, height }, { { 0, 2, height + 48 }, { 32, 32, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 9)), + { 0, 0, height }, { { 0, 2, height + 48 }, { 32, 32, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 14)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 19)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topRightSide, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 16, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void TwisterRCTrackRightMediumHalfLoopUp( + 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_MEDIUM_HALF_LOOP + 20)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 25)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 30)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 35)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 21)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 26)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 42)), + { 0, 0, height }, { { 0, 32, height }, { 32, 0, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 31)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 43)), + { 0, 0, height }, { { 0, 31, height }, { 0, 32, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 36)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topRightSide, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 22)), + { 0, 0, height }, { { 0, 0, height }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 14, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 27)), + { 0, 0, height }, { { 30, 16, height }, { 0, 32, 96 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 18, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 32)), + { 0, 0, height }, { { 29, 0, height }, { 0, 32, 96 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 16, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 37)), + { 0, 0, height }, { { 0, 0, height + 2 }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 14, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::centre, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 23), + { 0, 0, height }, { { 0, 0, height }, { 1, 32, 160 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 28), + { 0, 0, height }, { { 29, 16, height }, { 0, 16, 160 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 33), + { 0, 0, height }, { { 0, 0, height + 140 }, { 32, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 38), + { 0, 0, height }, { { 2, 0, height }, { 1, 32, 160 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 24)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 29)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 34)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 39)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::topCorner), + direction), + 0xFFFF, 0); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 16, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void TwisterRCTrackLeftMediumHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackRightMediumHalfLoopUp(session, ride, 4 - trackSequence, direction, height, trackElement, supportType); +} + +static void TwisterRCTrackRightMediumHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackLeftMediumHalfLoopUp(session, ride, 4 - trackSequence, direction, height, trackElement, supportType); +} + TRACK_PAINT_FUNCTION GetTrackPaintFunctionTwisterRC(OpenRCT2::TrackElemType trackType) { switch (trackType) @@ -15426,6 +15842,16 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionTwisterRC(OpenRCT2::TrackElemType trac case TrackElemType::RightLargeCorkscrewDown: return TwisterRCTrackRightLargeCorkscrewDown; + // Medium half loops + case TrackElemType::LeftMediumHalfLoopUp: + return TwisterRCTrackLeftMediumHalfLoopUp; + case TrackElemType::RightMediumHalfLoopUp: + return TwisterRCTrackRightMediumHalfLoopUp; + case TrackElemType::LeftMediumHalfLoopDown: + return TwisterRCTrackLeftMediumHalfLoopDown; + case TrackElemType::RightMediumHalfLoopDown: + return TwisterRCTrackRightMediumHalfLoopDown; + default: return nullptr; } diff --git a/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h b/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h index 81a60da118..444e95d258 100644 --- a/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h @@ -23,7 +23,7 @@ constexpr RideTypeDescriptor TwisterRollerCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .Drawer = GetTrackPaintFunctionTwisterRC, .supportType = MetalSupportType::Tubes, - .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::corkscrewLarge}, + .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::corkscrewLarge, TrackGroup::halfLoopMedium}, .extraTrackGroups = {TrackGroup::liftHillSteep, TrackGroup::brakeForDrop}, }), .InvertedTrackPaintFunctions = {}, diff --git a/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h b/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h index 1ece6430ff..10759179c9 100644 --- a/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h +++ b/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h @@ -23,7 +23,7 @@ constexpr RideTypeDescriptor VerticalDropCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .Drawer = GetTrackPaintFunctionTwisterRC, .supportType = MetalSupportType::Boxed, - .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::liftHillSteep, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::flatToSteepSlope, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::curveVertical, TrackGroup::halfLoopLarge, TrackGroup::brakeForDrop, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes}, + .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::liftHillSteep, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::flatToSteepSlope, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::curveVertical, TrackGroup::halfLoopLarge, TrackGroup::brakeForDrop, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::halfLoopMedium}, .extraTrackGroups = {TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist}, }), .InvertedTrackPaintFunctions = {}, diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index 35129f442c..c01bc94fd8 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_LARGE_CORKSCREW, - SPR_G2_BM_RC_END = SPR_G2_BM_TRACK_LARGE_CORKSCREW + 40, + 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, SPR_G2_MINIATURE_RAILWAY_BEGIN = SPR_G2_BM_RC_END, SPR_G2_MINIATURE_RAILWAY_QUARTER_TURN_3_TILES_SW_SE_PART_3 = SPR_G2_MINIATURE_RAILWAY_BEGIN, From 95bc00d7f937f4809f66e6011e65750773b670ea Mon Sep 17 00:00:00 2001 From: mix Date: Thu, 24 Oct 2024 02:20:56 +0100 Subject: [PATCH 03/12] Add large sloped turns to Twister, Hyper Twister and Vertical Drop RC --- resources/g2/sprites.json | 384 ++++++++++ .../large_turn_left_to_diag_gentle_up_1_1.png | Bin 0 -> 1284 bytes .../large_turn_left_to_diag_gentle_up_1_2.png | Bin 0 -> 1227 bytes .../large_turn_left_to_diag_gentle_up_1_3.png | Bin 0 -> 1016 bytes .../large_turn_left_to_diag_gentle_up_1_4.png | Bin 0 -> 1182 bytes .../large_turn_left_to_diag_gentle_up_2_1.png | Bin 0 -> 5181 bytes .../large_turn_left_to_diag_gentle_up_2_2.png | Bin 0 -> 5137 bytes .../large_turn_left_to_diag_gentle_up_2_3.png | Bin 0 -> 1016 bytes .../large_turn_left_to_diag_gentle_up_2_4.png | Bin 0 -> 1069 bytes .../large_turn_left_to_diag_gentle_up_3_1.png | Bin 0 -> 1024 bytes .../large_turn_left_to_diag_gentle_up_3_2.png | Bin 0 -> 997 bytes .../large_turn_left_to_diag_gentle_up_3_3.png | Bin 0 -> 5108 bytes .../large_turn_left_to_diag_gentle_up_3_4.png | Bin 0 -> 1017 bytes .../large_turn_left_to_diag_gentle_up_4_1.png | Bin 0 -> 1288 bytes .../large_turn_left_to_diag_gentle_up_4_2.png | Bin 0 -> 1220 bytes .../large_turn_left_to_diag_gentle_up_4_3.png | Bin 0 -> 974 bytes .../large_turn_left_to_diag_gentle_up_4_4.png | Bin 0 -> 1128 bytes ..._turn_left_to_orthogonal_gentle_up_1_1.png | Bin 0 -> 1108 bytes ..._turn_left_to_orthogonal_gentle_up_1_2.png | Bin 0 -> 860 bytes ..._turn_left_to_orthogonal_gentle_up_1_3.png | Bin 0 -> 1181 bytes ..._turn_left_to_orthogonal_gentle_up_1_4.png | Bin 0 -> 1300 bytes ..._turn_left_to_orthogonal_gentle_up_2_1.png | Bin 0 -> 891 bytes ..._turn_left_to_orthogonal_gentle_up_2_2.png | Bin 0 -> 860 bytes ..._turn_left_to_orthogonal_gentle_up_2_3.png | Bin 0 -> 992 bytes ..._turn_left_to_orthogonal_gentle_up_2_4.png | Bin 0 -> 1112 bytes ..._turn_left_to_orthogonal_gentle_up_3_1.png | Bin 0 -> 1147 bytes ..._turn_left_to_orthogonal_gentle_up_3_2.png | Bin 0 -> 860 bytes ..._turn_left_to_orthogonal_gentle_up_3_3.png | Bin 0 -> 1197 bytes ..._turn_left_to_orthogonal_gentle_up_3_4.png | Bin 0 -> 1198 bytes ..._turn_left_to_orthogonal_gentle_up_4_1.png | Bin 0 -> 1088 bytes ..._turn_left_to_orthogonal_gentle_up_4_2.png | Bin 0 -> 860 bytes ..._turn_left_to_orthogonal_gentle_up_4_3.png | Bin 0 -> 1310 bytes ..._turn_left_to_orthogonal_gentle_up_4_4.png | Bin 0 -> 1367 bytes ...large_turn_right_to_diag_gentle_up_1_1.png | Bin 0 -> 1298 bytes ...large_turn_right_to_diag_gentle_up_1_2.png | Bin 0 -> 1171 bytes ...large_turn_right_to_diag_gentle_up_1_3.png | Bin 0 -> 960 bytes ...large_turn_right_to_diag_gentle_up_1_4.png | Bin 0 -> 1100 bytes ...large_turn_right_to_diag_gentle_up_2_1.png | Bin 0 -> 990 bytes ...large_turn_right_to_diag_gentle_up_2_2.png | Bin 0 -> 980 bytes ...large_turn_right_to_diag_gentle_up_2_3.png | Bin 0 -> 5086 bytes ...large_turn_right_to_diag_gentle_up_2_4.png | Bin 0 -> 1006 bytes ...large_turn_right_to_diag_gentle_up_3_1.png | Bin 0 -> 5225 bytes ...large_turn_right_to_diag_gentle_up_3_2.png | Bin 0 -> 5183 bytes ...large_turn_right_to_diag_gentle_up_3_3.png | Bin 0 -> 1059 bytes ...large_turn_right_to_diag_gentle_up_3_4.png | Bin 0 -> 1138 bytes ...large_turn_right_to_diag_gentle_up_4_1.png | Bin 0 -> 1267 bytes ...large_turn_right_to_diag_gentle_up_4_2.png | Bin 0 -> 1268 bytes ...large_turn_right_to_diag_gentle_up_4_3.png | Bin 0 -> 1014 bytes ...large_turn_right_to_diag_gentle_up_4_4.png | Bin 0 -> 1170 bytes ...turn_right_to_orthogonal_gentle_up_1_1.png | Bin 0 -> 1059 bytes ...turn_right_to_orthogonal_gentle_up_1_2.png | Bin 0 -> 860 bytes ...turn_right_to_orthogonal_gentle_up_1_3.png | Bin 0 -> 1122 bytes ...turn_right_to_orthogonal_gentle_up_1_4.png | Bin 0 -> 1141 bytes ...turn_right_to_orthogonal_gentle_up_2_1.png | Bin 0 -> 891 bytes ...turn_right_to_orthogonal_gentle_up_2_2.png | Bin 0 -> 860 bytes ...turn_right_to_orthogonal_gentle_up_2_3.png | Bin 0 -> 1032 bytes ...turn_right_to_orthogonal_gentle_up_2_4.png | Bin 0 -> 1112 bytes ...turn_right_to_orthogonal_gentle_up_3_1.png | Bin 0 -> 1147 bytes ...turn_right_to_orthogonal_gentle_up_3_2.png | Bin 0 -> 860 bytes ...turn_right_to_orthogonal_gentle_up_3_3.png | Bin 0 -> 1236 bytes ...turn_right_to_orthogonal_gentle_up_3_4.png | Bin 0 -> 1302 bytes ...turn_right_to_orthogonal_gentle_up_4_1.png | Bin 0 -> 1088 bytes ...turn_right_to_orthogonal_gentle_up_4_2.png | Bin 0 -> 860 bytes ...turn_right_to_orthogonal_gentle_up_4_3.png | Bin 0 -> 1307 bytes ...turn_right_to_orthogonal_gentle_up_4_4.png | Bin 0 -> 1378 bytes .../track/coaster/TwisterRollerCoaster.cpp | 710 ++++++++++++++++++ src/openrct2/ride/rtd/coaster/HyperTwister.h | 2 +- .../ride/rtd/coaster/TwisterRollerCoaster.h | 2 +- .../ride/rtd/coaster/VerticalDropCoaster.h | 2 +- src/openrct2/sprites.h | 3 +- 70 files changed, 1099 insertions(+), 4 deletions(-) create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_1_1.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_1_2.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_1_3.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_1_4.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_2_1.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_2_2.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_2_3.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_2_4.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_3_1.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_3_2.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_3_3.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_3_4.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_4_1.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_4_2.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_4_3.png create mode 100644 resources/g2/track/bm/large_turn_left_to_diag_gentle_up_4_4.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_1_1.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_1_2.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_1_3.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_1_4.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_2_1.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_2_2.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_2_3.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_2_4.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_3_1.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_3_2.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_3_3.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_3_4.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_4_1.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_4_2.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_4_3.png create mode 100644 resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_4_4.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_1_1.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_1_2.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_1_3.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_1_4.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_2_1.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_2_2.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_2_3.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_2_4.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_3_1.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_3_2.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_3_3.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_3_4.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_4_1.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_4_2.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_4_3.png create mode 100644 resources/g2/track/bm/large_turn_right_to_diag_gentle_up_4_4.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_1_1.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_1_2.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_1_3.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_1_4.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_2_1.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_2_2.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_2_3.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_2_4.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_3_1.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_3_2.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_3_3.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_3_4.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_4_1.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_4_2.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_4_3.png create mode 100644 resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_4_4.png diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index d00ce327e2..561997ab11 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -6535,6 +6535,390 @@ "x": -25, "y": -5 }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_1_1.png", + "x": -26, + "y": -22, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_1_2.png", + "x": -32, + "y": -24, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_1_3.png", + "x": 8, + "y": 8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_1_4.png", + "x": -18, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_2_1.png", + "x": -27, + "y": -9, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_2_2.png", + "x": -16, + "y": -14, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_2_3.png", + "x": -24, + "y": 12, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_2_4.png", + "x": -32, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_3_1.png", + "x": -6, + "y": -6, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_3_2.png", + "x": 6, + "y": -5, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_3_3.png", + "x": -32, + "y": -2, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_3_4.png", + "x": -12, + "y": -17, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_4_1.png", + "x": -27, + "y": -19, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_4_2.png", + "x": -27, + "y": -11, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_4_3.png", + "x": 0, + "y": -17, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_diag_gentle_up_4_4.png", + "x": 0, + "y": -14, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_1_1.png", + "x": -26, + "y": -19, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_1_2.png", + "x": -19, + "y": -11, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_1_3.png", + "x": -13, + "y": -18, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_1_4.png", + "x": -32, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_2_1.png", + "x": -27, + "y": -6, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_2_2.png", + "x": -34, + "y": -5, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_2_3.png", + "x": -2, + "y": -2, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_2_4.png", + "x": -14, + "y": -17, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_3_1.png", + "x": -16, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_3_2.png", + "x": -8, + "y": -13, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_3_3.png", + "x": 0, + "y": 13, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_3_4.png", + "x": 0, + "y": -14, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_4_1.png", + "x": -17, + "y": -20, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_4_2.png", + "x": -8, + "y": -24, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_4_3.png", + "x": -32, + "y": 8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_diag_gentle_up_4_4.png", + "x": -13, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_1_1.png", + "x": 0, + "y": -14, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_1_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_1_3.png", + "x": -32, + "y": -18, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_1_4.png", + "x": -32, + "y": -20, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_2_1.png", + "x": -12, + "y": 7, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_2_3.png", + "x": -10, + "y": -9, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_2_4.png", + "x": -19, + "y": -6, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_3_1.png", + "x": -32, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_3_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_3_3.png", + "x": -19, + "y": -3, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_3_4.png", + "x": -24, + "y": -6, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_4_1.png", + "x": -14, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_4_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_4_3.png", + "x": -25, + "y": -6, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_left_to_orthogonal_gentle_up_4_4.png", + "x": -24, + "y": -19, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_1_1.png", + "x": 0, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_1_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_1_3.png", + "x": -32, + "y": -3, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_1_4.png", + "x": -32, + "y": -5, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_2_1.png", + "x": 5, + "y": 7, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_2_3.png", + "x": -16, + "y": -9, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_2_4.png", + "x": -24, + "y": -6, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_3_1.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_3_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_3_3.png", + "x": -13, + "y": -18, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_3_4.png", + "x": -24, + "y": -19, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_4_1.png", + "x": -13, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_4_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_4_3.png", + "x": -11, + "y": -6, + "palette": "keep" + }, + { + "path": "track/bm/large_turn_right_to_orthogonal_gentle_up_4_4.png", + "x": -28, + "y": -20, + "palette": "keep" + }, { "path": "track/bm/large_corkscrew_left_1_1.png", "x": -24, diff --git a/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_1_1.png b/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bea103aeee6a0eb5799bcccb93d54ee092ccab9e GIT binary patch literal 1284 zcmXAoeQXnT7{`Bm?OuQa70amDk#6Z&g+gxeLMoo4C1sRwV>hfxB~?ynW`$F3(zp&T zdV^-vb zx|=teXICt$007KxT4!p>*ZO>{C@ae6=H`Wm0Vo2^8(P=q$AW@_!otF$qN3vB;*ye* z($Z3yOjcG_R$gAN)MzvaqBj~bg0PUJjixDStZI(b25DrFHOBqcWRwy|JQ*>RlM-eX zuQ?j^Mo(e0nNfpfKVb%_3I0zFO0B`{8G8rY8Gb$CQ)rJg)K^z}(I8qGr zAQ*)4xC&8dFr^+>8|+#$rL!^!$rMB&u?mbzZ9> zOd4Y}A+Ti1Pmf1fDelh+5jdWZD^RV@il7e6=pqO&Nd{c5sMi}01_ho^kB&-`1c8bI zTE7el%Z)J=k<>ZTM$fn{lySu*ZZsRs%%pO#QYV+AN~Kw?A#{4uV4y9y$DUv2j(U9~ z;i#ApvS|$1Ei#&rGj=uS)CJsF#6!daj*$qHiU%^OL^k^XVgOhHpaI|jhyXAGz_<*+ zyl^9Q(=ZZ(VhYy+3IRS0@Ma+501^OFO6Wyk2#35ACOuFLfv4b6U@-zKE_0Gf#-;Od z=5UCN#aKazWHJKGd#M}%aaUrT5)Y~Eyp|FToMek+U9p@$Im4%6O42F-s+O7cavP?0 z5{TPj;TUJg$HXE&ArZ-l37Acz77OG76aj>J7M{G_GpSg2V0;`6_@9YRCXF^5;dGL2 zH-+d~RPV=-h!Kff^rN^gW7R;r8ZufKKp>An!ID3IbXn!p(;sMW*+_ub?%vp*?+2Pp zjjijtdk)(M*y_2aTku-{rW5_9+fV*1?K)PtVEDU<>zCWnM8mD)cm4_9J^1#nZJ~(` zci!Lh>VduAPOx?JcD?wXP_uZa(E6l-nmqmYxnJ}_=SRNgr3Li^ z9<*v`-xqs7+dX-HUd6pmYwcKg!;wpC>23A={;rPR`0lwl|l ze01qDajk0g1yujStlD3f)L36`=v_Q@^UA`O?~k;vo^SK-6?bcV}60`H;_j9O=DZFjTCs9hFafB@9_6k~6BC&mDRvC$%*e z7^Lz&nsfDiA9v)|pYPfdSUKOkR2o_Ld3Y5pc*C^6qqU`dZXP9QTD#HIzvit^{s;cI BK^*`9 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_1_2.png b/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..bc65d9bd7b93c1a5ac5e22c47734f419def8f8fb GIT binary patch literal 1227 zcmXAoeQXnT7{`Bmz3z>=l~_ZCGghhbAY~q*n8O@;n`Io?4Q|qff(0(DV$n04Sg^VS znpkH;PA#FsDm8XevXfO9cnKvmSYSef2Q;pli)*mBN+48HV@WXlEFt+mZ~r{sKR(Yh z+}CSwYo5~#0BGx3(Y2;p=T~EquCAI_Zo4-JfI85(s=vEB*3{J0*4Eb5)z#P6H#9Uf zHZ~#%qSNV`nwpGevl+*&6h*Qu&2dga;QfAoI2=tRlyo|)X{B-*w*ry?4Bg^%8ay7< z>$3)eL^#646Ru=R$f&`5Ax2?{gJ|Jtqv${-&Jq>y2|twzJ2DAgn+z1SSf!MXa}xDbTb>qV1EvRGmSF~KmCZg)-;Z$+ap zl``Q5GikIkDB-f$dCVc=oJ0r_$}iKQBpb`P6wQs=Ojf&@U@@ArIeCf?FoCEms_=>` zrnQh-jOQyUJqZjfFuDQi0~QIfMUD1^#hD^`)e+1Kv67UA6AWhHY$mTA3p$86MewfP>}tlRJfwbu#napY!=Lc+uS7OW!WIdMZDfbFqn!)RYl2Xv!zlA0uv7`VFZus zsicX`VD3B>C^%z9Z?Yt1%ZcLsTm`mZdcDnPw4-JgvvLF>&`iKpUFJ&!LzD4@mR8Go z61ZqYVD+L4l{{F)N6G;<8F5d_VlEXa=F;WzEl2|306+jh0zd{}5`Y2%U{wqSeFBtY zP|GnEz~dl90>utA20#`--Ux#@j4@F0z)S#YG4K$)4bT*DFo=gUie4-v+2b)Tne?lw zTr8@v>Sb~R+}A=%Mka>36br8rQpqWoy~#>Ab6?5BT*+bpHWaa2^-dD?u(;1nOQI(h z5|eUBP0K|s4a<2OO+y7h4M13B5vbZdlF9Fj6biOT_>qK6hH^StkB9U5c--o@S;HhQ zQ+SHDW*MyLFhds#MGK7JP$8j8SC8Meu;uQ{5n|eclC6=+`n|+(fvIK z(oeN^?SS%&OGd6gGkC(buu)(0;O)0BHZJ<-y(7il%0U0M_HAzfaB=ecEjp}m`9v1(AKvm+WpI4& zsoJT}w$JJuxKuME{C#=-$ocx6&mNxlQfy?r<6hr&y>aOG%|lNge`4dNkLT*fJ`hJ2 z^md;)GTc1qy)jD+Uhev7Xm&52G0Cujvp9#N8g!yJh=73($`*C(s!c6 z{AKdf&of)sMb3Rv8g4#y@Ui01;o0Xd#cS5D8tK^kpgG&Vc3Inh+yAJ!u=UQ^yoF<1 z@H>m!?tJ~`TQ~eGMi+OMmARuo4^1`ThmE(txzhUYsrB;?tzLKV?ze*>_fF_?nhAQk s6va+1NN?*uE#4I6sk29s=*&$Nz1q2K{)foUDiP4r-P<+(%ErC_1I*AHqW}N^ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_1_3.png b/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..9e33894d4d557dc5ee7a85d92e23f59ca139986c GIT binary patch literal 1016 zcmX9-QHa}g82|2icj?_RtJgt?RU=f$Lm0V{hrmUMXYS~ZjLWf1Dn!jNV@3Orhj{j( zJ2F?XXoV=9RMv;e0u~I~V<&`BAwni)*M~5QR0*T7qESv)M%6=4`I|BLec#9L<@^2M z_kHhgZDx-xJh=b>$2Lx{osH&+s2-2UqR##!wg6(Vb>`f9M5m^vrl+T4vDnPa%=_P^@iALD;-zw`PJdb;z=yWE^0!`$l<0+GmPaMj?eJ3OX_o@-hG-fP!IKB4MP{CP7#%yC;g>e12dU2hApO-87xd za4AZ}S%t`IWX_;flhqr1*%oRY$?7RikjI%cmCdjcDX5IB@mfW!G?k{KIlkcqH9u?( z58VU@NeNPUz)L`w7}HE;+l1_LnxCrm$27 zcI$_}jYeJ~$q;0YX7U_gl%%SvHj2e|wdyvTzT*u0{qcB=AguvW$LLmq@1&(3nIH0% zk!*#<&e-fv+TqdQ5G|641d~c-@r*=LD$DAESW%*7rFON}ZM6f>pA0!r1WcC_hJu>~ zvQgsfiqvW3yS6cK8{xp4Ob!qSkOR;GOaL383oya}MG$#Z(vfYUU?38p(NN>S$wD9k zk^pHbRHcz6BBy|Q6%<(TFn9(89&#d9P*X;cteM%CrFJ@H-?ziiN0C-K4|HjfGgG34 zD-NLrtT~qLNwITS?;SZqG#C>}U~nu;C1egSNOUPLm`1^>86CUkdv+LjXfk930XcvI zKq$(h63IP6x?F0EMogpr2zsx_%d%7`sHKudQ)Py#bF|IVu0ZugGR$R=f+K@K4H`Kd z@`dR5nUjkT9{#{vXE!By;pZPNM&$F2wbgScK6zuUGg^Vg5AeY*Ai>=%E&hu40QudQ5q^UK7qm!B!@+_<^C7Jq)~ z_q!LiFU;TT6Cb^^Exxw7^4$mbZ~yf2+AEcn?Pb}wz2A~wtFK;~GMvBeuG|QJj2y$p M`sUhKFP^{hKgf)=Bme*a literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_1_4.png b/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a77bddedef39de7a2ab169a3394815ae4fda095f GIT binary patch literal 1182 zcmX9-Z)_8F7=HJU+t{!l8q(+iH?5;AMK5rKgEVmBZ7a*o9q!N?FXS*MR#Na159y$R z8Y(H!;03BSQlLTu{cw&(7gM!rqm?w!nNu5AwaMzzguWWHOb_7D}aBy-tz9IDqFmMbYf> z5MCb{3^^iEK9Q8t88vT&%9S{4$6St1g|qlwgeKc!Dm5NpGZ9xlsg!cTYAHTn%Q|t8 z?BHcU6R?DWWkRN6!d%bes7j)`gcdY}vQ_{dK*BJ^Wb)&N6F znG8;ut&D}_35R5JDt4Ejk~N1KWdk}FP7Cq8lq$Ii8Yi7rhhXPqT2xpi$OmImETyCj zf3_4hs)_P^#>9YG0E-(4AJ{aEj#->Zo0wq~!xbv4@tT%JT^<;ISIFCB*CKGM3I0>s@CuN62<@lh~SmsNH!ns7Ulr`#Q z1|$ws1(RPQG><*%WAvbqj=FQYznF~H=YKL1s9KbWQ*Tx4{OduTu!G0hM`xh z25NBOZlHXfjAr5Egp{%=C5KiM^}07bAIUGI%BWbgnSmxSCutHH!Xr>VH>deM@vuLw zhmEXWEoD)?OmiGc0V)AP4KIQXx(C1mzG$UFMg33l)8BTt z&mlhg_(1%?wPPo)y|m@(n(^nv{G*pYZ#y$^X~X)8>#yalug&lW|0BP=eY|(_O=+FA zN!B(7(Xy$Y-V5d(Cx88WYCyc$d*$q^f0yn(IyDwJRy<_sn;6?PG&j8+w)O~*-+&`4 zx7`f9`?c-J!CQ+*zS!^n=dI_L&g^X6fAE)c53kctESg{kqiu&ZUWO5|dxe t(Nm{;@tyO-UCbMBxbnx6(DdFJV&99_C$EkXg@(v5*gxEN<>{SA{s#sl3B~{b literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_2_1.png b/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..68f84e87876a5ff8fb989cdc79a25c4956bd5326 GIT binary patch literal 5181 zcmeHLe^48B7XJc;6tD!vN^R7nK`+HLY<|Ip1RC3rh8Ss((4#GQ>1MN}nUHLn4FpOn zt+djDW9;Ec6?)iDg91V~uU_7)6bDRB278R8iAfD|&IL4&Lp36KG3EXKp%k z{@2WRv-|yi-}}7xKJUHnWV5?`wPr!u;xquj0&QtY1-$d&wQznC{Js#4An+F4T)Ea= zfq6Ji7g=kqBRK9RC&3{at+fC&erzufF9>pO`_a<=^fvakyW6CdU#8p}X!xpf|7C3t zyDeivY7A*!yE{|1$y(9;mvtxhDKg6LSN#3NGe4Y9dUa=tO}Qd9;h1{y+qwgr=&ypq zZw5a&So73p_nmwtZC}v%##0|8ohf;45<3;#^+EFd)=$RYIi~YJj&(Qf{9e0i*`?FU z`q9gm)#FQsv=6O&zH|$CIk@}D)OXfjP}|m@d-i$ZyY40Ql$(1zA@}sUmFF}*8i0fy zR+Xw;t5RJJ2L{ozbx(0=u>8)Qdcz+p9?ZBa_tR(g%g?CQ_vjXOY}kKv;re=E(?zz_ zT3S(aPx9Ckt;&uyjBLwe_tqq@_=Yib=7jbi>W5!Pa*yu%_TaelI`pwW(;tKN(tF+5W4fE!<5# z7oSwWzM{x)z1VYQckm!LcPKK{nex~(-|xBf@(9^8l965{sryVE9l}h1JsWf}kF@W< zBb2FGxW>0-$>hr?n>voHw;g`J_=j|r+Wx>u{d&CAl$!g}l9j8H)|}d~WR-ta`|jKJ z@rr)*J*_Oud%k9k(6#KvjD^3QV9>4ONAh)}21muxgzo~Ur-o&jr;|S}3;$>NE0?EI z&$px;I(jH@F7b=yTC(BTh1-Qk7u3{v@|&2io=xEDUo)3J{aN1w&p!O-^xazx35(uH ze!}+kS$RaZ6}Y7RpR>-N&)mDzF!kE7pRqYIMd~e&EA{ue_AW>~a1xeXgB6z7+OkLF zIBCzr%%q9PYqUFI-2qUfY;u0Qo=~ zF()F*6C!pyGFO9gs~aH5tV2JmK~=&oMJfo2tassrx`A-GbLK*r@oW0ddRJXM95ap( zb%Y&?QqZdC29p|XS@|`M7zGxq-5J+{WZxj^w$@%J>jvLqJMnPlIs(*<6a>$+LL8AvQYc1cg#sy#7YL+;sX!nTOEH18z$_99P5CkrDx3qM zcUfUoVs&%9ib0tnRG}1;72qG?vHyBYMFx84=0+~!!AgV=0GO2jR8#69nMY`-5 zOsCb3SqQ}Gu*7Y|2$!!Y*A{cdc{5hyE9G^VyA~?I91#2;eDiY>NW_DtUk;8BxwOFiDA;8r*bmu3iUBVaqJ&wTFQ_dOm~+HHy_q$5bitDl zxpoxJ@)bLDe!Q~xIXNXIg~4FVpFck}H8ndY zCr2VdR4S#xpu_QMiXvNETf4e?2L=X%!O?JdG8&a2K&b$FU3ztOmd(cYG$U;timq;b z-+<8{phiL+;}bp=pHZbqCw18^RctTL>!l<|T2+Crs*wRQJlqxu`>sp|H7sD{1CJ7T z4U9gL5$Ir!^<_mzSabxTqegn#OVhy|0Q3MD84QxiY+PV z!NKv-(aFh48n8&f>taaym?}TZFv7QttJ)^2eG!j;(mNU*h)j=Nq0{+HCYqhCVdoh5 z2(D02I(?fFf;A6xbPo3ogoB~zxDpt349dW4F|xfjes{C7zs=z9whZ^Tj0L(QW5H1d~ov0(K?eTM8$s&eC;|tn{qd zl>lDoSp*juZf%*GaUpF{0_(vS_7r^%mp;^%tf*WX+Bf=WMl0vGl=J84jY;cIuQ|ML zao54hv%7{aPAM0yRAy!-9C~Z#wyw;#N_V*Le|Fx`+Va$PCpz#Up3l5}S?2H3BFFQ$ zujSzxC;Y5!72D6X?>>Kg^rOR5wR<*wStVck-onF0AFZ}8!$~DMnx7YLTz8kV`JI!| zQ$UgbhrMq9ztg_xJNDhsKZ_r&OI-fy9s1v(FEx8}&)mOt{-@TjcGQ2HIQ-({^J<^V z2k&h-$}kzo=<);U+u7eJr|yh4pl__rSG_;od^r2zf1McEaBNErqcLH6A{sjMr^H4W PAkeB;mmFHT;fenOFWZv@ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_2_2.png b/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ea21ab3fc48c50bf513086d59c8072a8e866be2b GIT binary patch literal 5137 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_3_1.png b/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b46205e74eab1f3b08438d8e723492afcb5a08a0 GIT binary patch literal 1024 zcmX9-QD_@=82{R|y>?v}CDR)_XNEy<<8XO6#v%7`U9Tn9lV06bg5=?f2c9m-AtwZh za@eqi8SpI8#hF5e$H>Fs;;48^#8i*AV9>+$A!CPRG-w_s91^7uE&Y3A@cX`x-^=&= z!SDO7E-s{|j+{IK08{fX&Rz`X>9Atsk+5&Qgf;;pu=w)QTu6t8hK7fSBaz6+$jIpE z=-Aj8hGFC5;}a7Tcp{OY=_Jo{k|ZcfM%T4Mp-`#R8V$#FcYHq>4Co|qEQrEnCKJnM zGcBNs-)Wu&EGEeeQPgpQv}Eq z({$`ttbaE32+tSc_2-Uso|*xnQ3vFmo9a6D==NOE>batA#y3IlxFJ+-_#|qpmZvF z&n^V5%ARMVo*RuZB$cKamE&`gR8o{`F4riPTD6+zINhC{AP5i;8jux?u1EPMA+;&B z%NKhYtDkEI=FXte-|y_9Nh%s;a6A=HNK{f`SzQo|a=0wtD3!PC4d3+!T@GXc)1{~( z$IUEN&2x59YF5>4+vv2a{f;{rJU|>k8bAjy0c?P6fF1@Ygvg`3j%*A09gzf$hB60E z3Vace1W3bCiAI))oGfY=k#E7n;298jNQ+oj!HpbMHdA#=X*LUyS z;-VFo9a8gIGsxJ3Tyw9|-gmmF6Ob`r;#evf&2aIoMCVn(G_qFNXxe4Zwfnw{23LseU?vP_y0>BZwWei@(m8dDzI-TLXmQJ0D{3g7={LFK~_1hay&AdJL-?@X8d`*0Bb$aBxmCDTdbGrwBzO{V#RqDgT bfA=C!yn-KWT)KNDbPn@#3$wRomRJ4<)Udh^ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_3_2.png b/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..015b44d34a2090ff4ddb7c2d59cb44a18231ca59 GIT binary patch literal 997 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_3_4.png b/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..1ef94b94514b4f5ccffebe9883f8d05734a258e3 GIT binary patch literal 1017 zcmX9-e~8<36n}TUUhc=X3Y|n&rLv0Ai(WXQ2F)MQ@adw4$L1FBSx&Q2XQM~g$xUpS#W64P7ge|uNi~SdymgQ@AHAr zd+!`tPVSu9GXnrSm!4Z(3Fe-l?w$$-UHx{~!vG;TbnwXjfR2rgjgOCqLZOL?iEubP zIXQ`8*wob2^z<~INF->Q;(1Pz1Vu?}np!9nDwSHJVY_a}_lKhqO##P(D9onQ(QG!J z%TvV?Td9imhTL?twpZ%)O`gP3?5rx_dMa)xL`|dD3%pZFwHvD6Dh_;ebLb{xAd`^e zz>u)IiaDi7w;mm}V`xC3k&Lzsgxmyx2q0sa8j0w!m_ZOG%dU%JE0gK!`psGmIZlj@ zCODiDI% z-rIB{97H9+GZ4=MVPH%RPd13O!>L}X)YHtN;i7esj4Dhlmn2Imwyy9^P4Ws#x1#l} z!qBN~dKT)tktjouDVoV}d`^-|ic-zx8l{p`t9iEF>vV?0A%d6+LTaT0G7@2MJQ+_&B&D#dCWu8jSe9>;%B_0CcfC=M16jZ{DWc19 zBTH8EoK=*X)lAFMyH0h`bw{I{hyzFgXaEL)1<(TMV}JsPJj!dxGLhdE2~cS$b6_XI z7Xe9tR2-FPWQxenqIMDaCfp950fC2a5{SdxmQxp-Eh^BKX=vu0UuT4m3*2EL0%Jw_0a z4af(Cf-H)G+#SRU`D(w&*Q-CVu(_9iMw0|G2aL z$LYQAvd0hpcjd~(A2#OEdhz`BRXee8*m>i-^BeA(wR+~B-4DLCaNx1%3y;6_$g^L5 zzVXfONdL*RN8daVer@J5WS>7tKb86ZuDSVpFFX*w&->_!f4(?yZQ--p@7vdaT2zqaG=_iz2V?^M)y@zQE*{;TVpbN2MVAHEts_nxqJ^6R}HTwOVK1N-q> WckP1sIg)h&8XzihSltVTUW-x4t69BbaE!g=%9&5yh)W} z4lGh;qZiX+XR4G?q1NJxSy+jcRZ?LKl^ofW4v$b`7n-q|W)^JXke?+a-{cSr)Byk*+Bdd#mg|~wG|4K<`6hqy696i~*3H{Z<*}loV&1%Ym6erMRaMp1 z)ipIW2!hCDvfA2OrADJcQ9X`h6h$zMmE%~K%jNe6W3hNDH7-eoViDB?%m_%L-fC6Y z?P`Zp@Aeq|0Wut;6G<*Dda}6?u0t%wdX`Y~7PY`=gB&{O!jpbWI>t&P?z|K#6;fsu zpmo530f9ooERyudGhszBt%7+yEYfgJfH0*2fCPX>5LPbdRVqQN4H=DtBspTUWq5u% z7=+2B3RP$@rJht9X|0*nS$LEYj9dVBMG0?$3Z?0|WK$bddb7qz=?KPPWpUO`x`T8u z&c;PPC3(esI9p1}F`%G;(gxH{pcN29P-%{7tx1d(EuJhFDhMe!Na_@fLFF*(JQib^ z!4n)Mx|ocg%SBySIYOrCrgQ7eP6L2_U9#1kD6yx#i_;{gEfI!6p ztsgGCpX%;Oyi z$E1{4%wm8h5RQ`bv|6z10!}RIrV;_$NR-bc1NlsNOr)z3cpf!@vz3aq;~v8UV*wYRR{ zzOnCw&pPCKO=kKU-ZgXk z2xHUlv_;m!TW@UI;u(_$+9F3537Q9DUB=S1Z2OI2aQfECre$3di$|MUsxB2iZtm)y z@kN5`DgBARKl}36RrkYlr>^g8RL`zkv1#J;WXsVG)2R3LPX}l2RG)pM1Xj(e_%z@4eS7e9Vx=a}) z(fP}|(Z1TXnads5q{i-Jy*=C94@;L<^i&-;A(xnJWU6iX{N^vTUk#rBXCQxQ|E~Sl zcli3PyO$nc-t*J8vGiEPclYGr%Y9?dk2dYucV*w|A+2ZO@5O_+he8ea8uMGed1P6+ zwdbXptFHf~*1F~^JMR3;`${e7%fM$Kl&dn C2SmpJ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_4_2.png b/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9d1de1a741409c5c74e7aec57cb7fc76489dc1c8 GIT binary patch literal 1220 zcmXAoZ)_8F7{`BGyIs37yQG9BE1`sD9C$zt2Nu1=>$uGW4|ik-6zGdXYN)fwDTUQo z&B3ZETJg*(UbK-C4sEou%WO;av&Bq6+{P03JaEt5tM3BotK$Vv=P`!C*xcZ>7_) zP;lTj7io91PJ%~i0rQD?KqA5^DwbuEc}^+wsvdND9B$f0a2ONt_ytOcv+*>aRs~fP zi+WP4XR31rD+z2Ium^!N3Q!60r0sML^%qD%^ChZbr6CpJB#YSs9!G@65i( ziv=ojxR#AI3i6zmg|(v9=0PzZ?g^4qgyRx{Kq?Z+B@%^nT2s~P^mL=qfWRRDR7UWO zmC8G~G8U{-@tR+$NAeA6x|yrrt;|6SX0>|kcG~IUFn53;!VDYdTg#%kM6#60=|!zs zB>~SMVa_V@PAP3`Fu>% zvh}(KTV9SJz@rvYva^blS5ZMHq=rA+jO6F!@?EtGD-F~JJWhmmTm7Un#Np8(BZ(m; zDdw|Dt(dLrMcAx*7zU~U>HxwPi+IcKp&YSjs#f!)s_cV*ueJ;p5p@_m14pkCrOzZePD=oJl{J??XAr5$FF7Ije`!^2sZ&`Qr*j8pi zZ1KG7_vy*O`O?W#>mPsCw0-J}^C#c9WNsFHpI&+`OP3#Er|#`KJrXahwf@Z_S5_Xl z^5!eOy1A#gE3?hA=psG%Z?FB&j8atIA_k8*7meqJ=JtF)@7Q|>o9GF-RQY;Id6qRj z_cJkZ{`m5bms-3xX7!t2Egcm7`21@(%tybyKgwT$=;F|toP5k+&Qd1W1czGIo0>$#BY!Onx{Tn)ji+1@9@gsx3B-_=7o{P zJHI(=e2PfTd>BF!W#hy$;9GF@PI$%X{bxQfUhUu7E^o74SbI3Px^Jv!)Hvcb{j{3v z>+jBw%j4eJWyZZTzo;8N>Dl}0=nrSx=~JVjCk`B1buE5S+Ejk2k0}k0k^RCu`-5k8 zzaH0QY+>$r?`&r0BgTpAfBpCTj@gM$_r;IA^{#zWYx@mP+8#UCae8>*yLs?$RbQ6khO zVwJk|kVAKkY{ja9Es|x5j+#TkfH@SbYz}kiLJmC?w!**$?cf~7$}FV)*;g9701L47_Re~`&dtru&(AL`EG#ZAE-fuB zFE3*lmdRvRR#pndVv%8JLEsfd(zLQ+==FNtaXP)8ABKlBg;DKbWjlBOuon$ zXqn(tQq-xE#b`EXw1v7Swfc%XRQW}fV45TQxJP(IpFoE)EpabVu$EJrt%t#nPg_7 zL>`)ixjai!C5El=f~hD?O>3KGuh|Sboyhmchlfd$Ai#AX9gOMbgg&kesmfSrOv>)m z>?ii&tT#O!ouDk0%dv%mNE8){);P|P&G=h}lS&xFrsmbM;SKi}K?#C`3%{KMnwho9Zi zU!Q;J^X(sZoiA@*eD_y%^_zdb`0L4kk3V|xH}QvSw{Pud2z2x^dhbE;Rdam0YQ|S@ zXKwuY(_6=Pci&lE-Fvck{r3yq<9}aZzFL3(kNe->%-*~IOJb1U?sM7eHgT7>cP?Jo R{yNnG8|#~E`&Vy#`adzNp)mje literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_4_4.png b/resources/g2/track/bm/large_turn_left_to_diag_gentle_up_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..e305c400f237f96a86a9d649461c96816c02fcad GIT binary patch literal 1128 zcmX9-Z;aD)7=G^`z2lAyS#X3!228A%s{2rrLZ<0KkIYLi*Yk=rGNfn&iMOG|dyBq*kj65|w(XQ*;v9Y(So%>!Qt^jnw_~?%9?XjbyqqDQKtE;QKySt~S zXW6o47>4!s_V)Gl`GUb9Nro7P=6P0~%Dm&atri&qIt(1!AB}qB z@jxOON@v2kJXb7J!%8Z=m(gm?#%BHPW zoUGj}))y@g4PG96F$g39*D$K!iM`B;^x{QYK>+3btw1=jUD5Mc|hK&tYWI!<7Ae zm59}ubR()a6J=MMZw3d^O%_OfItlbtJ;oQmD5(;%{# z!h2LPpv8%Nk~Y$OIUk!d)S8uV)+(*m0-^x~00lq;FaYKN8W^B9I0hvZWa!ALaX82% zWN9!X;BbI=K(Y^INThSfjH7BAIXc`mo&uHufy3gGPfZY6EmG8_ayez&Mzd+7HkUsJ zWU`;ue4HK-OKUb*z@Q99`E!M^vdyXZbsMJyYj2}(Z3#f?&t<> zHa7j)=%uYsPb?VA?;IV(51(Ckdg=W`4_w}B9{6?Y^xrGaXRqH7)^7R7`(oVH&OP&^ zcHgWz{MyI(g~IH7ko<*L>U5;^g!D_YM7b_@cKt+cPk<;gGiO$nKAi m;jcd?4sG(j^3LGbH?iBvpLhRJn;dP+1tZ(XhR<)?d*pu^SL~Gl literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_1_1.png b/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9b8975170904721c510ea6bf2f27dba14e012105 GIT binary patch literal 1108 zcmX9-eP|nX7=HVaUO!gzN2Z}hNHO3kw-U#Rw{ebZcP(kTtyg-JFmEH`LF0&W!c8LN zj|0Pu61I~?2y0|=hurNI&b6z#<*CafzkSj^Hk`332vRzHJY<<%)Lq3QQ z5NALWu!4+L((Zb})2{hYD~Q?=w5=gz1^{?~2!_dSx9an0IIh$53eQ)g(YmUx=kusi z@sXYY;|=nDI)aB}BCL{ggcpw}WLJL;!=!BBt}2u`9znUzy~Dj&(0*!pK%Q-B5H#Gtml9cqGaf4-x4wU69zaB3MbO zo>iJg(y3%OEdw=8w}--sFiAxjHZBNhNy^3J#dNxo&s(KZV{OfG90WcY@GM3a+-%t= z)QD(6uI?EEpbf#J;+NRZRFc9G| zMR2PTzZN5M3C2hXTvm@ zKqiJ5&CBclNC}s1T609B9WQTYYulv;syny`C_feox<$qx6UaoA)6|%rQOicgGL4pP zqIQGgI8*{;1411yQXRUd@Ff$uW|PWgpF*kCSWy&WF)5Ld$zYNSW*O38$qE--9Ja)9|J#ure6j!fKjta1x9_KO3kyrlPxtqI_ulv;qWALZTkGH7KYQxRN3X9w)?3qu zJ{3>(i-tP2YuPk4`c>$fbF1&D+e1_b5@e}9v#n>$f(73#J zevm)=+s?pq*E4t4@xbj{FMZ&;_TL7(k-z8KLzW*bo)O2+{TduT;54t&_wRP3ftjh< K$)){ofBZji^XKva literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_1_2.png b/resources/g2/track/bm/large_turn_left_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_left_to_orthogonal_gentle_up_1_3.png b/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..c97b87dc12b6aeec3986cd6269771d9aaddc6417 GIT binary patch literal 1181 zcmX9-Z;aD)82;Vg-k309A9ise&7b;3T(xL`E{8X0oIniOvw6VEtEfd$8<(IHb7!s#?4ITX#$5t8Tq_vL+(=Xu|E zHV*~n&be<60ATLm`u;7gx~vtC^mMfHfo+>70O$alH*Othjcsjh?d|Oy9UYyWon2jB z-QC>?g7ozCI2;a-&*viuKf};G&x&G5mZf++o=#`;d81e?+jgVbB>aG;0LMB*A$KH# zMq~a&l1gW|TwX8>a>+_oYZ`+iLCPty9wmsXB9@hj@i8j-1&5{?^{je#(+bV=b9{?Nx0)j{`m*VxR7^YFwILA$e!xcrjk zl9p?FyirKcS~{#1U2YP?g9I6-nJCXEMKKeN=99@nHftG1wOnpA8W4CTfTa;4=VDAR zU&6yxCQ%D%^{ClU%gucKc4ZbiahHqqcmk-8$NeHj$t;%;TFYYjWNIpxw~JP@N&|sK zWZtC+s2agDFd6yhThF&2{uf1LEEX+md+0_!hx zcs=NY0tyujW(a7|&|+K1PcC!*b>|0O+cLz1)z>bMw0d^1f6dmF`}U`vJ`i7g&%iXi zxbDpPFBUJ!Zt6WXy!YbhrE=^O(zSeK6?GO$-;ISvNPz5_|J14ZeU+>I& z{jV(Rof&!Jg_9EqG5Wn96>kPV{$}- zY-iZSN{Nq_+R-iNMA2^pp0{Y-R=vm>LjrcuLnQ;&bc~lLy^0(z6;fs$ zU{T;Cfyf{c9!dJt*@&i?)dOh?f|!CAX;j1EI;R=+S&0Zo zB?LzDaM^&6k9rEpKuLE6@~l z2{0Ola+Wp%9s_<7#LYma0b~H=wa|ybFb(4lnD#*^ za8rQ9q7;_2m@+h~SPhWXL$?tIF&HPIWOU+?Kyv#ERV z_b=oNv#qN3B23=tYDy$udH8r=>zUp7?V0la{X6YfYWrHZoE*C;kcokbr%fpZ`bG}_ z#co@*XxWj!8&96dOF?y;e_$)#+&@!u=-LMhj~soc-SKjI;wu?FTZfgJ?dwjTncC<3 zgANw29Xn_uuAe@#=AZkgj-6iBO*PCKX6oMlewTN=(Cq)kQ~sgpY{QuYsjJojcDQzU z^^QCBUBoW$NT2pw)fA`OHn9HFt8I--INiXqjhBbt=u`H6w*1Ex6N{%*o}m{<7mk!m z=a)`*x<6UcVD2;Q;a4u`8UOgaasK=CTEp~jO_vtbiW=cUKR#Ujrm}fOaM2#en5%Wi zj54(Fc<;lZ_NAHsZuQT5`ciSa|C%Xe%d~Y}7CJ{8h|#-cL;1j?RS)j^x<~r6s##>3 zt}AcmZcg{B!!3>PeuFyiyf*%*W9Ri-!J%+hdg{tz?YhT*4o)xk9O}Nmcgykdv8Kxt z=WejOw;M*z-;FYiKe literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_2_1.png b/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8847bad5eb422634e61bf5438ddd3bdd57a4101d GIT binary patch literal 891 zcmX9-F^HsQ6n?w2yUyNlSPVfD145>dAi;oz0SlA3hgl5kavqt0g#jT`OyPkCQwT9c z!X#K&Od(;4DJ-TCVzGq*3keoeOkrS(2}qb61Celr921y?J^15s@V)o(74Ln;_uh}U zH}b;=?>qp2hu5E7J#HCm>!RCf`$xY$y8`II?dMM(wesZTYbUtC;Z z7}o7}FE1~N!C=5~tR#t=rkJK~+m`2fVYo<=v?w-J)f^5S3!(t3($n?+cuY+kcIpe^ zTwNwcmfP#n-|Zub!G=Q5QV4fQ1tz_)xjRqF!{Iuys@1fvqGMCYBp3`#LC4k~LMQ3uBR5Y3UZ#tgM&2V~&f^*MJxS z@|6KEMv4U@IFs7 zLyjMb(nQmI)0|HxiSOr&MVY3%&8BG@1f&IYh;d6?%1CX^jCRs=uSfMHYl6)osqeQ( z)MId*CkUAuXbfu#f~}}iqh01C{%o~Os-isXL@*T0)^OLLf-y69#CWP@^U*4HxB0x@ z7Kg(NBmxWpY=8hD23P^?F+eR;2{|^3BUEiw8Y~WGBBU}@Dj*GzMIfI;k&4nWT2E0G z!Rz38P$U?t*w`f82{Q}iWn^ZVSC(;Im#Fn3N5DBfF(A~4GE&;AgrL#m!z4R~>-%(v zwhi3}p2B1n*F|cqan48y+;KE>vv^h(aa|SYu;Ud4rGP3xsLf*9+PwkkIrIIVpNDT? zuh){UYvZx$I2OlxJR6E!EOEKQZd9fo4v;}1mqv3Ar6MYo_W1b^dM{u9z_Z6U8hrfM z?_am#{p+hwo^*dQe|h@+w9|#Z6XV-|{_7Fny!!X$_s`$G{qq(6!`YX=zWw1PDDS=X V#VGmXz8!+=M>khLfBMyT{{ylacv%1d literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_2_2.png b/resources/g2/track/bm/large_turn_left_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_to_orthogonal_gentle_up_2_3.png b/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..631774c76f04005f9058c225543beca900f25f0b GIT binary patch literal 992 zcmX9-L5SmI6n-5j1+yF?y-pf}mCUkCYZhn3~l}arvEG#ZA zE-fu#7`D8;yt1;A%jfe9Lkj{g%c8253`4J0tIcM++x5b*AIFpFl%av=KoZlXQdZN5 zib>b%T(c#0x{4ndy{JAMIRb?hxwJ0ktRi8nWZPhlszT5#_PTm}TpP#E$s{b`piofZ z!IrU(js^A1pp%{Ua5SdTR6#Qvp)e010Vo)zXEGL!+a&35+>s<5m&*godeCm8Ai$Yy zp3l(|!6{@xr-~M%+MLl6s;=1ZWv8cjahYIox{&8&N>tgBF6cF>)>hh{?nPD@H==Q8 zcoJlI$jXo_17QMbV{AKD=#r&?*P~*6XgCu)L`M>pRav}Jpz1}gqYAzuM^$yuG)8W9 z5;RXD7mdP9mL;ho!kt#F$P-@Nv0Em4`xY zRC2}@e`5Ei-SKR2g3?qb!{%}YA}>?4%5jD$)s$qJ*{wH@JKZ>prb8YS5i{hBr4Y78 zwM^cv$$qPR>{^4MH6Dc1=>xhKvBXpHD^_*hF$15s_$2$$Q_R(lxX2)V9Ydc=Ol+v zJW`K2ds1?z75}8!n|VVtn2=du39LY8N<5*-j9C_KOLH2Q?>3^)9mgS>4p~t|9-tTy zO0uXWa*u#l&DLndwwjM%^m;<6Bx{;#nmR*QS-QzHuD}E$-Iu6wF^?1iStM#P$m3BY zCdbb{oBr$J54^L#E5p|P-`+~d$2;3ETzUGFcYhMs!Y7v(_x=sOd2Va4|Ivl?xtG*m z*!}Jk|G|xo`*#k>I|m=$Jbc^yl-L}mJ~+7jr}5(^@tAwle`dZg|HJENSKGZ){B-U5 z(rb4${PMl8Zhc-mU8CN-_4S2~!^eM?XYbFpDjVn4FI_`g>ip&3$#1{kdo`ua%<1Ol kQ&(T<_O18q;`4L={CfWGcYj}NCeC2z;_mjBFTQc`KlYQSwEzGB literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_2_4.png b/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..21f43870f3f9b046a9f33f3dd683a83ac0586719 GIT binary patch literal 1112 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_3_3.png b/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..df532007af50a19c39f0e31fc82ddef1e54fc50e GIT binary patch literal 1197 zcmX9-e{2(F82+{~uA{I@YAkxlO^T^_fsP!@%^b-&52#yVx9o;hFL>xh8m)T9BNk|4 z6KX88!Xce$q)3H}G~pbT5LQDqbzICeRSq3c@QjT#+x;;}#cCQE$!7`4^ZxqheUj&S z-_fB#-;za-ECK*5>3??PaI+H4SYc~x=83IW{{o;53~d?N)Erw{T3TCM+uGU|ELhOq z-o9|*LIgoOyMkdb2m|`kW%1P!_+%nZhP4}Td zz(JS>3WsDRq?mA&v(9=6g_alA1vsxjsJj7R0T2*GayX(Ws(3sqMV)2YsbH`ijm~8< zuvkP1r<-4I2+FhnY@%Y zqPm$htZb!GbkM-b0ap-U5#Uh}GUM{)JbaOsj6k9yt2IT3XIb1Sl4#h6CjwMfWC}88 z#Kdw+u4=JbG1V|MSk)a)(t`&GGDtIFj!TGQIvma=62(l$$mc85)3sU+0#pK?6hdSj zOabLec(B66tGsH33pHiBp0no54QR(54$|fFVQvohiWDXL*|^YL7Re=&Q`wxU8}$ke z1V18kj;MesAv_(SwK!Ku2dA`XxtO-fdc8geX#fHM$N(q+XaGzBP(=W2f@NSthMEe^ zGV1{n0g^Px`+&&;$N?z1V1j@u3-cjZibGQc_lzfjp8)|D35l*~7*8s`tSS}?F~iU- z%YaQTGzf@@omO0|iV1m-WKv3v*XrRyBUPHuS75p3aRL%Ud|n4nVFxuKMbgzOnNHn@Tq-d<&xJx_Bq9;s80k&XgvJm> zzjvC&t$-T}7>s&gnt*v48vf?-lWXj^@BP58;Xw{OJ$r3uv*-Ia_Kox&_~dZkL$R*K z?GdP+d$Mcy;Ul&mPV@tQeB#I##-9%Q_mRfe+gDged+w}!ZSUL%FLw?1WRFkGjqMy> zxh-<=d<9$baj&s_&*Qg8cPiuT)%{wvtaYc`t!3hNMAZVM^`6o-~BlMz`o~t zjDL4^53ai^920K+_v%+OSzJ1HXHkpe)7GuFo7eZB{5jOS^DTSJ3nR(ksNF_2mOkO! z&pnJi&)xX4@0!@{`zB70nP+BJ5C?_#kKWkRAyC_AJJ1vR_s(`M8;z}*^j*5UW0kUj z-Zb+Oz2%~Q&g$6QyGr}*`~J=AOIOx*Uzi;2eD{p&y=C2}Zu8h=Q*+S2X>jA|XLjuS EA2YWL4gdfE literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_3_4.png b/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..605a875b31a2c4bbbe42812a9e5eedd045d791c4 GIT binary patch literal 1198 zcmX9-e{2(F82(^CuA|Hb8Yxh;gN~i#U`M=!15P~P2HiN^;cl^xqDMHfV*fakLkiaH zfTE2QbA%d8tk{@y6mmcjrbQZZlFOK(LW46FZDJ!O7M-Dzs*6tiEFpQ`U;n&M@;vYR z&Zb^Z>$JJk006B$-Cce4y1X89EDiO{pLomwpaE>!*uSnmPMI=g>eQ(X4GoQrjZIBW z&CSgSf>nVfbjCEtip6TJM&N*^0LNN=K6@bG z3Wo4Vl!_;~R9eUyaxNb&l{E%Kyp&a99g5ebifB?M&W9Nz?#-p8;%KB&)F!H?#|Z=s z1Zkl1NJ>JCsI8E)*K$r+!C_5+lPZL!8vqUf0YN02O>sI^6xAr|Jjadt{RKrCPbQ&Z zI0?I(cHo?g5>StXc@;ubDLKJ}bvBmewVaSC`dy?G_qZt@V@1*@F;aw!B!y%~%H$QZ z7|T~ur3u4E13M2Ke&7lLR7J?7!;?mR1}){i(UPoHRTG})FuO=PgB~pErBWi3mHB*F zEX3uq9Gn3o{^G!x|cs3<0a!E`igB$N3}rZhHItyUp$N&t-`M9Riw zoqP`SmzYS|r&WU4sybFnS0)P+(2Ch?q{HEHxp@p1DN1I!h)`b^N=IX(sdUlI*Ge=H zSVZP+ir`WMSRzF05k8ynkLpUnNK^`Dtu_v60K5Rm0H^@y0E_}qMgXjXV_-;zx(15{ z4h0ecVl>EjK#>EG2T*drC;>GNW&$u5fkh2GFrEY~1H2p(5FJVoi>aQJCT6qYd|t0q z^03b3^aCPfrBw%~xr7WV6)Cmq(`&)(L_9Z{DZxS&wFA;VU97>eSWFr0$axTaCe0(4vhC&j7he z^aGdRjsBNDoowIGw$v6odtqy4Y}KEQ$-nh&YYVTN$M0f2_qSdfxbn*B+wE8A7e48K zduZug^N#lFN8jJNw6A;a<+s{8W)1XMZk!#d^)#<9EyVZE_~vAFa$o1s#qS+oHu!k3 zeYGXR-e&3P~7fn`{hDz!=;P&XR<_f!Lic8%Ogva6&F7oUfVq9(Sz$(+&DV# zZs%Zd$GN8#ywQ=`G1zf$<)I_nx=ZGGa`?OF`ZxCNINgeCD`)?J{zJBXd_8owZTRZ+yf3wdHx1QSh>;8G07L7>rhsb?fn#Nm(KU1#$ zWm)**FT~LR*nH-{(9^pgiC5P3E$Y~Vv_9Xpd*(L6_2n~-!kQE9H+Ox$z2o1(6L*@v zK2!O36 Mb-i6@)^6SZKOJ=n(f|Me literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_4_1.png b/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..28e1ccce5dbebe00d05f254a34505e7849c67967 GIT binary patch literal 1088 zcmX9-e`p(Z6o37->kns~K_WX#CK+Dk7!eM8ow2=c*O`S|ds}Z3Fv3kv&1Ne1$F+tv z;K9-@8-d+slnkN^a?CIf7Nv!BM0U7X3I@Gu(FpfP)C?o5G}Q>97WOq`@Okg?`R9H3 z@Okgj@hSiA{=NMGusd*cV!A!|w(IHMu6AF4eXs@41;>w_Jkq8e9UYyWon2jB-QC?i zJw3a2?ZPmux3{;iug~T2cqq!tvWy^bk`z)DIUbLv)7gB!P%5q4cB9#(yukQ?=LSL{ zXC&f|#=ME7FP-6Yd9i3JWh+^&=`4u_eFHM*QiE!DNR8i2&V!;l(Y254g_ym%Z=#b3H2|ke(vjw?e zsU0rPqfGZ5{7!VppXI=h05i%Ls3MQ+H-q1>DktdxJjYs`tGU&@mY*7)c zxKv3iH6z|I(=E$DwUWb06J(I0!wef0grp>8qS1UZX=bxlp-^34Z!{VRa2bd+M&%rA z5f{p2xXLDKA-x_gHnjC-zP?jwp#jq2pj|G%+ar)($>&ozJ|VW3#q!D2YA$b=tY(z~ zk;4?hp^9!TLS|x&kr0ZR@T#F!%uKyfYBo0z0}upI05kvtU=^T-0cwM1QA|OGj_e9g zfJ{M(fr1}w9*_V?cA+GNbRHEVsGLBy4iAH;fny=aV-d-vM#+@s&*@UJ7`H5=Ubj$N z3l9So8(=gSue-$pA=^H!5i*+5Vk=$VDO6FVK{$bSV}7qA#JD2@6$^8k8qrf~(MVY( zqi&Z_vr2OuDgd$pp>`IDw%jA&@mQu-qciD8P|9UC6cQp4DHf9{Z=Cj~8OmTOlk=|g zWIgCXq8q6M%224lAd71sKYd`}?}tAyJ3S@9_#eN#-6orXi9;ucuFm}sxqN=#V?Doa zs%P}zc$iok|Jtn#y)-WpS0~1Lm##SQJ#W1_IePe;o6B3tfNS{O*ES9Xwmw?H&#v8R zOmZg7ss!k{wK2U{>a^th4*KkT>70Dtp7`% z`*`xdt%;k?+jG=?k9p;(;h_h@SG_Ohj?L;r+dp5v@ZN{U;Ms%ES1$Z{LJ6({F1H}f;wUAKl8QghOsXWPypaAa!Y*5Om<{s()L+U@`V literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_4_2.png b/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_4_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_to_orthogonal_gentle_up_4_3.png b/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..7f38c16dd91df733e6c84736de4befd161f79d6a GIT binary patch literal 1310 zcmX9-e{2(F82(1LUB@=M*+7+|opf-60%be2ghCEHSlLQ?V>i-3V`?};HC2yTL&a`Z zs9Lcj2R2(F4eO-FGS1k@k5#F1CRIA=$N_V7Sg>kgC0STwIxSGbX9>yk{`%*A^5l8n zgB=E4?dTirs(WRhB~ z3cEw?_Go>6G88sPd0Rs8q%%Q6g&4Kfj9%t6Dp(o~*swD$g7+B{VI~!KXH&sKE~b+M zvkKU8z*0zvL3ocO8ItA`a+p=aycrf*2xBD;BmiavVI&f#T+X6sP^&#dl5vYA>2yv7 z0+8qBm{f_&)TBadMsPVbFU!Gt-IvM4liwN9y}RC-!tVhF}fx&!7w zgoy~wSjsD8L+Ju9!GV+lG7C^R0LmhofJ_%gO+3yBMo-!n%&{?ehEz#ujohwNd5qc+ zO+;;!;G&a0TZVJxcwa%_U?wJ!YEYFC(^zoAPEj73_S@}YkB1Kggh(VkHkQlfAdoWv z^&wbDLPX_MLS;!4?u;pzwMTR8SU#LBCJV4yC6Q=kGMz$6snoPqYtxf%b7`3)?D57! z;Z#h>r*UA`BQ{FnG%HxE%J0BAHx>0;;+!+d`?JYdK0gI<0E__G0AK;&0Eh#SK>#d) zB%s3vxgbm>Nfa;`@Zun%11S_yBU4p=6vjQw}$t?hLRO76S3@XeKlu2pXoQccZqXl207)irq4wV9p0@0}@CR|~q zFo#9YI;}ykGs<~|7?(}OU_PzU>tO`I6o9bgg}X%e6mpltpUG(azNfGy5`@V_S*^6g z!C-2aM(x8fj=*@mdW=+MjY?=%Kqm_Q7>wXh(3g&1v%LDBCqM9Rr-1_NCnt87`q8$H z8@g5>>gj6h53a1a^H|5#(Syv++Ihd7;E{%juCooRuNJ+xYY1~9W-qkx=X1|rT6@{N zzpJTcT7I|+>F#xkhE{(3sB*ACxlcCR_9;Sl%0`BJ(m`=w=5}(9a(d|HBeQ1)`X5|x z4lgvl{W<^Po|(BLD;oIw?7&q)U-7$PF!08OvVFW^?q*fpFYgKU-ywA)jWvy@u1^%& z&TVU1KeW(bH{N^H+5Ohgvii=u+rp`Fs`c8bPkP2)zrSwhO9Sr8o5!ewt!vwbiCwiV zM{f*2v-R?~sBQeh?qWsH@%b%F|GPK(a9sCM?V8CK(TD3!j5m+``KqDCj>2b^ni|rXADt2Zb0vd1Sc1>4%5Uj<+1%-aC|OZvBh9+i_)d zlsLDeo(SDy2V~{7U$*rQG(TPyS@XR_G0h!t9x4`o+B?&+?aKK=-xkB^*1D1Y_Qie6 z_Pm+fzGnC7qrZyTyOaKg#xC#0cj7nEYv|b=-_&@VYM;XYP7k(;tM@NDy=uZq1?~FzqubcY$vxWng ZptQHxdP`&tl}rY0n+zMjdF8bO{{uv*OC10J literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_4_4.png b/resources/g2/track/bm/large_turn_left_to_orthogonal_gentle_up_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..bc1351b1682cc682486cf9ad5c9fbf0c708148df GIT binary patch literal 1367 zcmXAoaZD3;6vux;p#|)!cG%2H8rNYNRcdx~M^g3F0}HEigu`|5bS2(G(FzwGcShr5AGA-I=Ea386jmhV|m-o;6{_%a^ z_UbAHH+Nnx0DxOrQC5?lNV-r?X1ag-eD7NTWP<9owdLt`#*7&m85xX3dD9iW zD!H4+{W>yiq9b-)++#`x?2};+j0bsqR3cR&s0PFJBx#{(hhFcsSOQLG*yoFlj3kpu z2!srf*x87ihx>(ONUDk9<~Zd_=>19SNXna-j!eQlDUXK=1PYOul*(wiT&E<=>hv*# z*J2xVd!xZ{Duw~IlC2|oMzzSQl{yTV$4vSinn8~-5^y9U!BlD-VgRTB&;eitzyrV_ z0C6^eX$Tw|bkO61(Fh>{3<7Kz@F_r)0FVTb5kLz9T?F)LVaN=lF7VoT6ew|^BG_75 zVAM-(R)yO|`~9YH*po=@#~k$_S*LP!%TF;t77Q34$Z^kFcpe4U8Jc`sgPV0%p!306M( ztsa1ktje-gwH57Shn1bCB{R!*Ls#Kf*!(OpRgZKwuIlWbJ+$M(iPO7Ie&Sh7-w#dI z{k(YEcx>H@x#R!MYMx(ytgYm6HRniaRZ;z-lG3c^l6@}02NyKG<@@jD)n4u@D;qs} zCri#Myj(MzuHQSC`|=mGaepyhpuJPzV-=jtuYYV5xAF)j?@+X6B}sFf0^iJb@x$;!10Iqzh*pn)VS>^pTip7-8S<$Yjd)7teSgsXa#5A zjZ4cH^tRSr&pZ51M(&)atz9`kl;676^GA1`Kj-EZ&$Hb{hJ6zor~JqM++Quc{ocdc zXNF#Ct8C(9Et*_2_SdTo9mSIG4wdzpFyOm2Xp}X#RQcrGAoNHR&)qbn}_ra2m zsYUl^N?MvXZhBtbd1&F7zqjhXXnV`~Ph0x?-kPeoxWd9M?d#_D4eeQ0IJ#)!?DeV6 zo&8@Fl%B4gC9*V`mNzyC`ZhGvnP(_(-@8}O-Z(S5#HpIYzuvO*>6Qm;I2-@|=0WaH zTZ31>B!AS-`@Hf)_h?&VM`6#?rq70LuMQlQFT2hCms@mjV1Np2IX`i?ZDGw&fmggT zwvBmv&rr`D_tIjOtKwp)_{H6#<{E}W3dSeC9^>4cx9Pla!P*|q`^(tZnmQU1r%p9> nH5_c1V%p{&NOG#iWS9|Tw^8wd+8s;N-vKJitIE!;uG{-RdX!yF literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_1_1.png b/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..88a64053fe334b017262f0bdda4bf4f2f8834fc9 GIT binary patch literal 1298 zcmXAoeQXkU7{`D1?b@PciYc|IxDiJksb_O8q`S@2ULEaVJ=1gIisrP}mKjnn@l05X z4kuGoVyL1;N0d37XqaW0FQ{xmq_IZYVM;eP&y6N*L#-VewluNXe#4l2pSORW?;oG% zIk>J(GpDk)5&$r#wWYbeP*)bBzPz}Qf3jXX1VAxZr(3_aFwUAatEi}`xVX5aq@=X8 zw5+TQL6GwD@`{QIsY0Q^Fq9+-n%1(cf#*4!&E|G{gTYWNmK20sK98Y*zyYNd84MDW zNp7~Fb_eeEQ2rnjj_~n>Bc1V)DnyTqIIYyGmpfUdm&Y#I$cS4X4|2k=JuCR8b1{t! zFe+dsfRjf291?MeQ+`Q4E`wPV<{3ESgfON6fC7L)5Kb(%%4ANZ(ud=hC~DYfOj)gy zUN4M9WSB%jNKs0TGfEAo(pxdsiSr)P7SOuFv@gzt1fyInLp2JVR%uzafg?FPW%n}P z5En{VV}dJ@^{1yJVgg8LATi|Zax#R6oHLmZW@l2<;Le;OkT-{?-SL@F8m4ke2~f)s4JtMe zaubbNj9RDF-*WKOF=4N5$?WETA!Yht`+pUm#aH$2ZN6LG@!-2Ni%;sx2D;B}X#D3x+Oz)g za>cRsnW^5(5B_Qhk9VxfHC!8woV}PD8(mRXe;WyYJ^jgh9S4pOJAbqKH*}Q@)x3&E zXL9qezrI*hlKXYp;WzG3boGy>WP&avN-rbs|ne&Uf20v{&zF&81 zd3dUBcJ#`Q#g)Fp0|$og^$tI*EqZODv%OO-d^s_`t9o0%(7N&a-ftFdUK_q$)Y-@1 z@2@z2ru$CO(Sc5McUQEBog2M6_0_5ID;GCzQQW?{1J5@9vAUz@+tRC5D@%6ut;08` zs-JId#C7{dxcf5Ni`FJ}%^zg^I-OSNg<`H9PTC}qLY>{{J?bEgs z(Pc|}dUx&%&MrMObTi7FFk$lvuJ#oe~ik&)5ShCR1*OWrI~VwWd&do8*~ z(Gy`I-yv<9S9?;tA+lzoLEH2L*3!6V#f|&>yPx&coa@_EMO)m_N_qrMela$2LhwB= PfCa5<+nNWPw(R{MGypxl literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_1_2.png b/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..39fe5903a6c5954ac438a00e0dbcf8eb54707fa8 GIT binary patch literal 1171 zcmX9-e{2(F82*+_4;%@mb5k1^MPkKZwH_WtbcK1e|>CdXlQI~Y-(z1Zf`Cc`lE~Ll8JkQyj;LA}`C5s;Y@ZDw{R(`6=73)@lR}C?8;%4xV?0 zLTFgQqcLA1$!4-b&XfyQtW-|Z7!vSxNQ^5IKsC{ul8I53HWPtDRn*>in7s^kTN90 zisbFMRmqfQO$P;>9B>5zssOKskSUix>*Y;KvI4P^oUUqlILcy9k#vXsSS;Ynh;&Zo zELAKfIY&f5wGft6C_T#MlEHC3QZ$p5V!l?p4JiNu0LTDn0O$aW15ic)tb?VYB11h5 z?IP<15&_~AF#Nz~0ptLbTrft!Gz*OoEJUH52KS980YifTi-bg1B#gy1elHf>YbBClpaGx_Agp^4tQwv4<0_W;k4Q_ zzyBJ%{PO<6#AA!!JKweP@lWud(aA5$H^xprb>!5OCk`}R%DeAu|4Uzc=eSyWWZxg# zI~TpK-2Uz1t6iVAe|~9O|M1bH)}qt*R-=t8ZoJuf;KRTB=I{CbiOIdogT>RYF725d z^32G)2fG#J%&*ZV`*33Vry=v=>JUG7V%L9#WN%~OdbDTp$%C$C(at|#d#khgn8!N0 z>%u0_*6)5lIdp+nCjNQG-@R~p+0d=&mdSB!$Gxjpu{U-|)buy+zjE#ROSgu1y4DUD z>fPYX-texrE$6zYj|Gf{mzQ0By=tQ?X{L_eWFO&^bI%IMZ`3IMTZN-I4P* jk+TzynF&@qHG%f^Fk3b)C?BsY3)b|n>l=A~@Pq#WWAFyV literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_1_3.png b/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f63dda7ac444b625aa0fe20b1b6c4fc535e47323 GIT binary patch literal 960 zcmXAoL5SmY6vp37XC|GkJ3$I|HHRz~3`@{38zEv?qGpCVL?-KIpfXh=#x+R693u1( zA+QyS28`0x9*PtRSTSJ15u@}Fmw-J)h*FjcIh5V5_ArMc6^hK^Z-#~My~n$}-{E`T zN7oN47cV?<0RS!@yu5egd}ehipUe7V&$QkF$iekjj`p*4ZEbCReLa`UZES38Zftw@X zS`Odo%Kd>l49z%krZZ2Zu_|9Mq>^1FU5)CQ>`7A$JJon#q@&h6^;V0hLV!v`LjYI7 z`UVy{_@rN4#sr!(XsMzz7on&OAOolvX5hF@5H3Y|Jbxm~BVC`^_Gzz&!jNE#Wue5# zB(G8xgRa`F=JIA&Z2D4rsCcm&q&mqFOr^{#w4`x0Lo`})tEct?BS`EhZ71{obQR(P z6cs4xKw3b#7}qOR22?E+jHK#JO>f~w=tQQA8b>rLv{U8#nm9C-q^V6h=FD#{!pC~l$DgLC6KkVL4;SY0dG4Z7`C`kpo%Hj~7k&l8lf2pw3fAh;#jBh`R1Qr=zE z{AFXf>cnTk6ipUX5jYa7FnCQM>k4b>l55w!wmtOQN#xJd2rZ|aB%uIM3J7Ihv@+a7 z5lyQ*n{nOFLz!_b)@n+`+s-w6wIgwzjpk*=)A< z_V$jB4h+LOJ3G6&x||-5hah}3O>rE<^C3|b5{X16lPeUoQfbjN>x~BC1IiC9(-R6g zqEUA&?n|cpnJk+xgp0aZHd57^LgQG_-y<+iDd?7YZ%!m86SSTQmJ5P8o3u=2tzHVa zAdEwd0-3||0;Z?zmAs=-b|K4$8ey~{BUJJLumE8U6YO@$<&wQ##qXbF+1W^>B1tQ` z9MW|c;qXvSAM5sqy#WCaN(3+a#VnmrnRJm;%3;lnxJj2U;PG=f!;>L_7Lsf-7tU#d zW=JJ7ZCLs0nr^4S!GSXZ?l^d5jLbO$1#d{F1S6QLib`EBp-C2Z@T4miz*9kgo~Mf< zXC(MaMy#ocx}I4xR8%Y39i$fz5@dv;V;q;_`D`p!NTu{#&d{{#;$ppCN8l2`o56^@ zoi4h#G9IbY$y!LUV#T_=*eF;Vl{M6Z+wG*&8E|_z+{gR|_;pSn~>|U#^GLMy$A&DQ{?1RH=I%K)SJj&mN-OQI3d57+H!cX{o5D zjgo4aCDf>r41+X4CLq+zBH6UN4_6|dt<}hE=03!7nGS`xXq1n~1;UpgeHn^SX+mdw zi!5#hJt*u(k{4wOq*2IVn&l^V_N?Cffp><7IM~0u^jcHg9UM4t?Aej`KW17>+d2on zLJOl$EVKXG? zU7z;6+5aD$8d2uXzxUSHU3v3-5#j(^UNto(TP8m%uqQu*WGmRombcJ)!~6Q?fy zQ@OC^o7D$xsXvz<<|e+lJ+?(}*S4a~f6IUEdj9xB19R5h#INnM>$Q`wCU-VF0x)=J LXkh%{%jf?GgOB70 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_2_1.png b/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f02de850ae08bdd688bd639246cee95572c56913 GIT binary patch literal 990 zcmX9-QHa}g82|2icj>LnGOJ`*FiM38LBbX#4-qq$+u{+u+%AV1M9d^$hkeK(N`)ek z71zxUqt+2v!9HYAN0@y$MjnDz2<{#_h;ojqK?;^xWDi9uE9{WJ8H3;Vef(a&-w%G@ zcWHA&Jb2)#0|0Pv{k65NbUvHbB7Ro;^JZ^lUZ6?T3%jW zSy{m_ESt@)uCC&xQi)+`LEsfdG7QbK%zC}#q89DzN-#;X0qFuB;I@)iAB&UsPf<_ zSl7h*&HS)im<@_(LZg|E_8o+x5`YY#W0;xG+r^?ok{-wH$ntKvJhbh5oet{vi%g-! z2ORZ4x26~W`3ARX!B~GCvgVjvIY{-p{-U-YgwxgsKPr9Rd zKhHx!0lW-E4M+!LJGj^*wLWjgYI9_HQzt?@GF33xVpXJ?D%UlH&{E>MF?6l5U!V5f zdF-QclrOL(r7~=p7pjWVG>mq&+G{rZolYDCqrJW9bcP_kE*H!p-mWk8ijLSw9X zlWI71_GZ1w{&0?RR6ft*xJZ-~iZ(dTlH`V-F01vLt=(=fiQ?Ia2VKG}C2#A5Q=!^5 z-ft*jyS(e$!+v`*jApZYhzC#sEC2_<2iOG|V}Me~0;*Za_fRsFNiZ2`@eqiR$bb|; zCXSj6@?;cL(4c`54;}{3f+T<{V-*9pt5nMoyPgq-^*Ht?lNhC1#WFCp9Pi+=N9X}* zCY&?X{8=@eyMz5;goabH04#xtbYA0$io(>&l4DoAmL2-7IPxb+gk~dFl28CB0ff>l z8mZhP6zjG2c+9rlN3aG1LDQ5<#i-RxhOV=;%QL>f^d)*vrY33$=>)P#)Mik?qgYCh zpM4?s&%+;he``a5V}JenZb~k%uf4kc{1;a~KlNDjO!nA!=+5@p>XlU@iQ)S7A8-8D zJoFs>>9rR#A79-3DGri=H^>VhrT)f#KlWrm$ZL>zIGdb zDQn)ptiMU!`TLK-?|0AKc;%<>!;jtx{&SBksSgfQ*{4qtS1+79|MG47?vugE!}rmx i53bHnzLz=r*#itecXaEBdSN~F1?wj^*1kP{=KTL+&7~~> literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_2_2.png b/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7f22eda49ce425da72a4cfc9151163146f6e32ac GIT binary patch literal 980 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 C60FJq literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_3_1.png b/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2b4d62009c01a11ab905c6b53c69e0caaec64c10 GIT binary patch literal 5225 zcmeHLe^it88vi0cCXh}q+E7g9$R@4v?k8gdoHlT*Imcxv=B)Yd-OE^GdvO~KBwI>e z(p5{TiwQTf*`Y2X6%^&lm1x}CyzLg=(B=t?uCwFOS#+S%dhd4w70>OQdpzg%pWFNE z`~5!8=Xsvb^E}_PcRNeh$Y-T2OaTDQQj`>x!TY`NoHsKbUQbwbeem|dmh$zEGSo@0 zu@RM~YMkz9sKM!Yy{Qs_`Y$Y{+S&0-W?l`?E8ITgaQ&iwpK43fVn6-VK?`$p{Zk9( z=IMfzGk5G=@J@A^wp;Px(;0QDyTw1BZLhx!#{c>K7tJS@y!3WSRztS%Qt+`~)9cUg zd)~eKjObgRy9t7Zf|oJY{2^GDlXAEZ6fa`ERKzpQ2*qo%)c5F<~vStHAS zp1tJ7=d!cYc2ZZ=rN7$t(!m`M_nrIO`&qE-V=+owq}+d8O>$*>`4t{p^0p>Ehx=%K7e1`}^i^sO2<#n<+4rlxRwBs86Uc9W8%uolw+qqRD4?ez`R9o^dQ41V?g6|jFT_Se%iO8Gx{ zyuUxO7dg0VTSda$ZPcvGiW4U_r;jfxxNzY`$!nMN1p!|qxUhWJJ@Jn+Hn)HKr{eck z7WhoxwomLFILOF87CzRJ^w6_E?!NG5fM^fQPA%Y9f5RI)hU(uqGhn0k?%Mx{;2in< zwcbaUMBY5w;O^aEe*KfepHgMTmZgE(4OodjIs3qp`&Y%UJ-KPgD&MMIJMZ`lv*4=t z8L2Agg^g=Dw)6)J}`*0N=BKlo3L59ZA|mH34!^y~7sFODalbtN6@ zJLLaz#<}GRqVBEpb2)vpHg0qZ8>sJ`iDRe_8%mz}rgQ0Y4}5TC!B$ON`jN!#=1XTJ z;k>QDCg}Qi#@VxT_Ab+mA0G5kwuHwCwec~jda-TqtQoHzg*8`ag0;0?wOWD^mK@YT z=<%F-OARbK01Bk_H7I7r9dtczG+7H75ucwyHyH{U6+#t9RU^ZzOeI@vxMs_ma%_tk z6B`)PI)e$TnT)RP9qF@OvGU>WUN<}(q)7VrweifIUIIz zy{V4JSe`;Juo)^PWksu|AmFHwQRQ&dND##7bmlnuIfTuKaK&OV!r>u29ve!q?G083 zTFbn};}$4t zhgP{anUpJ3rPnp06c|mGnwSZiOhV3JjY&4R*onk=Xh zM{2Cbn2jjml9i>3LIy8q((%|#X*KGogbJ_+OjZNowBHaeH(79v1C8>@74gI(KA$7x z6icpboSMb>I+`!xKoj90^ZQ&f&o;d}eXD63#Sv!eFXw_+Qe|_MsO{CcVUDhxQv{ zQITd2o#*@9eHN_tpgY$1<}3-fqlo&eR~jBY0?9ZuASuQWm)Ay=?KV_eafO{FUP zW_f279?b)!jLqe+r%}d0rh-MHJI1wW3y}ZfqaY?QZHs|=lXGzEf;%B{eJh;eE4u0Y zj-RPK{EikN^lc-z#P4moZqs#34BV3N?drNs*DWz{OTxFS>;Fbq%8i#P+zNjIIpM34 zd^C^`Ks+d2U0w`dx8maBX3UroA0MBPkdT;|n3R-6p-^VdoSB@QOv}p3;`0%iOsdf+ zF-&W>6HQG`t*sqBJ^cd%L!nS)Y>bZpX+BUZQ?=SOvpLh*h%~$NTieu~JvyJ?9tgTe zM!hl?r6NC-P|{o#nI4SUVdwWY$^5MqfgU0>*c=XdCn5v#44`8HrxbWJlum-;cTFja4{T&^_{{E4np-3b` zf(!yMTPgfbs?3+639yVKvgT2(H|+F9JVRqW;VZ)vWGahF713z&%q$HH!SeI%N_Ddi zf;INITLwFOLIc6E5h>6qDRvFjrOWh~S#6Edu4av|%{bWQ8uqt^hX=;SE|5|HDgdwp z-~pfufI$F8DS(8BT1Gb7$u2J$8dfs_!3Ql;&@TreH6S&BBxt0YPkPm4znKg)lOZpN zCSC-TGEkwWm@%5m$!hV)JH43C*AxtPg~LG-+R88jeq*ZCLsNS*b^S~tl<$dXyT+Wp ziPpfC{t<45BkR;4S zGc-4OWHdFljgE@iS|<;CARyCfHD)u`*huh^CK1vq<#);WekC%bW`!%VNL?oBVv=oq zvR_IDm9Y3l?9}g~J>V!?qX8?tfjGTVUId;@ysHEbl50vHgk+_rMb9{}uRR@3 zQXC3ZG39(pdR%(SuFuq$piY9KXl41b;PZP-wjK02PrOThy7Doy9+VQu5uMzhtqqkDu-Sqig-E&amvM>ad!9Rezfm% zb!z^PVuhBt`q=xtjS24BKaVfIfA4`g?Y{YkK3<&N(Ak+_Gc`6Ge&F=PyZ4o^d^(5L zoTz;bn|MC)z?17tJ2##DcxLF_>s93&lB$TyYgpMr-}x6F?|rqQukKyd8P190zEq^B zdujOPzQPZ7Q;p76=60U!tmpAz=$`Lc4wzJJ{VDFTY(HARQ+ H-?aTdLYJlZ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_3_2.png b/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..dff7f5ef7c333dd3dfbe95720b1ad338a2191bbd GIT binary patch literal 5183 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 Mzc_b!_T@AG1I_Hvp#T5? literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_3_4.png b/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5392091a501e85f867368f309bec5c06e4bd03 GIT binary patch literal 1138 zcmX9-eT>s|7=F30-f>=rjJUucJDf*Jnsb3ds;OFz9`26n6|cxR8!Sl^mbkoBN&lESL)9ZTFq2b{@NR*0^ZVqPDiS_V)IUj*iaG z&aSR548yv+yL)$I9-;{`5N5^`0^u);pd8wmPof#76HR9Gd!C$du3Pz+P6 zSSi!a*XPSF2HXO8!r+Smu47cz6D;ClnNiG8vaaSFy@Jm2gj=S((IAlw(RrCIse&1o zYiYGnh&$!y`Mq%3Em(PA=L&Sp)+sL#$ij)TCf0G`Ikyo)V) zg(?xQvx$b7v!f+PpKTWHh1xvoC0s7b;|cow0uhjDTIKkJ)LIrRCR5Y-qE#`Qbp|93 zQw5hM`Sb{pi7|zQP|Ad-3tFw5v1^rPa}F^8ApjLX2Pgnc12ix|E$}Rgsi=@cR*lC& zAtA+p5d@0|Bmh!8C`qCmkBkVaCXkhbJH}JMu@K_1i0sj#L`o0lb8@K^H_d`=o2bR* z4FehLWpodp^GOD-ShVhlg=VxgpRO(#byRb3H&8w-7;uS@*>fqy9;kTmT5GoO!_X=YLyj5Arg^eF@+4osX&?`3oKdY0<%0} zhx|zLAq__v5*Z9Kxz_PhgS|KI{J@LjV*+ft_S2qL-#jrZU4+GptU zGegfFAKoCy#la>WsK%(d(1jUy)xpZ+{>bH)0$ ziL0lRaQ`1WZF=UdH+~%)_~r(4bh7)v_%Yo5@6e36^2)^NCFIc);$Q}{;renj(`2}QS!~DgLNR!9DUL~aAp6Iz7g!Jfr$%yV?PW& zIypR$xw?Jze-B(EUby$e@2~GLe!F;m^K<;Ue4jD5vI4A literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_4_1.png b/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d87c823475a62b767204f55a413c316a2b82094b GIT binary patch literal 1267 zcmXAoZ)g*D7{`D8=cUFjNNgjGl8xxjd9HDuF2l@S?Nwrp^wiVE8RY5?8zs!cT`_~m zZd)Ab7TXh|jWcSfw;AMYV<|P8!JRWNI=Euy3X6J-$f8Dx7$vak3jP)mzR$lm&-caW zdA{4y?QELcIu`)Y)U~m5TeU8)Mw_m#n)e?K2msW9Et|J*sE#!?HMO<1b#-<1_4N%6 z4RhwqK@dcz(=|3WnygkUj@w9*plKJ&dU&1-27}RPJef>oGSiw?u2gUvARK^l={+8! z&u8%mY@x6t8lw_PCav&lHk>a=B!;*hdd_7M+!m2V<2*hdB$cRJO>){~sHjOZ<&4t| z7!3FcAks*JLzJ)~moQdTGc4L*g@Lmogc&OU6aWl@a0Y{5Hj5}KIUM5@HR<){1fdj< zLq##;Mk`^mQ5FY-IyuZO;H>E2V`NZvMbfmSGAYe#v72p9tAoZ|tlh(rT!;$AnRtpz zWrd6u$rcm&8O1;VBMnSmUg3G$Yd0r}u88}X1M%HfjJF&3akzmO* zPiKQ{F3K0=U|EUIWMx>$7>srlbK`a|LHcPr%(5}RKN$`y@pv|s%1=+1%Vh}696+N8 zo-mMUGp%CYJQ*r@q@q7v7N;x8;%sgP>M?`CZZbJ7RvNRh4hQd|LQHj8AQ_HKCX!kv zTgelEaUncy5EzT-!(stK4$%F6bS=7 zlqIO;C=_rwh!7y<1R4b(4IpQNVH`>nO!=T1f|>+gfwuz}3EULoV@-k|i-^vI#HQ21 zY*sE7v#{!A_5wVhCqxq^S(p^cX%4aMkt_c6OjMms%HW1)&ThMNc z61Ys_ipw@lVMVtUG8QPHFowev0kf{^@!Q|kKYR59ecQTe(Ei|7Z?zxp>RiA5gMoqL zp25tU^ETXuf8MFD_0$|~B3QEj&V|ZTYH8n*w&Iod9>C}E$aG_g?bC}}&6h*>)Q^-y zV=tenr}a-xT|0drZ8=xcjjZ|o=E7wSkCt~thUfkAw0+m^OKWu#(#8`f@1^r-%jNdP zBdc^>H~RFlcD?gL`{~4~hSK5o&QAwdCJru}Kg0~JI{!Zt(6tuiAfXZ0$fZi+30&#`=$s|NQHs`P+Ig zT`Nr;c$(?h`&mctSn0U1OOzKJZb>~MzgTdwE!aHN&#l<`)(^pT`#b)f@Wc+i*q>+} z{A=pB*h-T#jT<`@u*3oh6a|l)veEAt^3Y5+^(NG zx0zk+Te!kBwYNt&JL=v^=tpNat&&&Vxc>O!N&aOm)4IfFP|oBJssCN=8GU~C%#IKD zpt}mqt;EhN-P$ME#54cnQ>)(|X#ww4LNDG}(+EEQem>XrvUlFSX3Z}{nk|2kxB6CNT8rf zXcVSWdO~X?btc+iVKEzzJA4EuT7-zzAE!b|M#`|V>N1%1CY#a1;1p+e@>V`T2cm3L z=4Hi~Rzpf5mMf=F5@;Eqa{+@FU?O6U>TC(jnId_`5zGlvQB1>O8rO1Wy~ltK+85)EZH%mkn+fv4cjfU*Jyjkr0T&x40VTTJ4T zNx!1R3k3yMy!0+Wcr~P`qa_0?W4vk+i_Un-lPrfbkL4W97BMX_8xWfbb&>`*LwH@3 z=yOXUUosw2((!_thNYaDqM!_*3Lvbo2vqEzN$>YY@_BP4{7gb7V|6+ix0~~NdBWs3 zo5Ca!w-PDJG(qD9hY_*{=)+)yfHDacs&f41X3c}AKd_~{lL4)Ff9YvYFW(TCt*6&K{$6h*gYTjgj`QX~R@l=!d z;=nIQ4ZoY;HysW=JkQMhTZ{HIo#|TB@u#}*t@n1{Jg{*G^H1Qp&W;ZIhB@-ht|E?;?5n!RazU+$}AYN>I>C(BztF5J)$ExYsK9_*)ZyLfr@_N$|- z*9AMr<{qCraJFSokyAq%JJoiL*kbXgqu+d2YjbHurmThU@51OA( cp0M9WmR+UL@wT0ZE9ii|y|eAq>J2;p2a_f*NB{r; literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_4_3.png b/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b93d19129277a7f80b2641239ebcfdf6f4a55b4f GIT binary patch literal 1014 zcmX9-Ux?du9RJ?Gp^ogxxH9t) zw}Qnh8llVzMf(u3asfLyN05kl$goO0Jdq)NvsOsx{}9uEB3WAOQYzkFW4pNG%q z^X|#@?BT`bMF2Rw_Wa7m+)6>&4Gc&WZvvYHE zhYlUWFl>H)eqmuDmC0lnh86@~mPJ*~>$+Ahm+SRryX^)+FN(%-%+SDdAc={5K3Oah zC4;V1xq3rtwH43TyJ2-Ov;_*waS2UKnK{Bz$)?WimIc3_>$bJ1QyE3}-Z;pnL7||; zgC%1v4fCsbzm<%;X*8lyte|}hp&$bw0Vo)z;kcPjTO?_7+^!^b3WdID-flLL@28n$ zhELHF!6{@`qjDyrTAbbx%8pp`WV@@lQGsC7bT-4ul&G?KP0%V*rKvPs%?-^Us)eK0 zV9&>SNXn2Z0AT=WVQe#%ZIgMQ*TP(Npxa|BK)Vu^RM~VXOI34ROBFm_4$Er4t`D8^ z*st$}4jKk{k|n7e!xng=q6~Zb~ z4TE(S=pAYdR{pUozW;n6RmUs7$d=3Daj@j zm((K88t0w37GQ5av7u$$RtsNK`xI% zaT0#^SmN)44xHaum*JUPH{O_#PuEtSJ+*ZC^$*0mgClpX=*WKJyf|DAFjXs^3LFWhWPKXZ-2XVWw7TGOoZGUfAPks5-+N^MqPCVYbcJ=Fr z=l=QR26pA_FRN1@KDb@qIr~WQMf~!yZ$5e}*I7=!^RJgN9TTp;`TNpQiajVWtgWuE Kd~y8DrT+o!FtnQh literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_4_4.png b/resources/g2/track/bm/large_turn_right_to_diag_gentle_up_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f10f781762fb502ab55b2aa480ad5e5840814fc4 GIT binary patch literal 1170 zcmX9-eT>s|7=Gb^9-KIIni5CYg$V_V46LL;jYSF$s9ZUU3^QbgqD2=|xn5jgLJh+V z9nu^#PFT1l4wy1GIv@wb+Rve8&Eoh=uvMui1G zkExqbnFz6&h?q~v#f(-m617sH(YT9P055box-ZiR=9_VIBv(PDI$;OeiFw>MAL|T=R7mD^Es%<7`Ap0z zWNPICYE)>RM>#-cK&a(Kq(%1#j&LYZt{X=JWceZ~L zLY~B|RgCiW%=I|-pK^5mjf$!|6ktZIk{zw|mR)8?PLk zW}H45ZOr|7YxmZZyRRKEKRbPY&DuL#hWn|Di?;VQXOtd$_siTI@3Fz}f5KnClw7{x z&_;RAt$CAH4d)%Qd~4p}7Z2t?P%jgmN478IYztnM<=*~hdx}#FlMe+iU(H5)Hvh5n zw{z3?e9`sB%A|su*NzXTb{|xm`*vKId_?bE gd3fItvyDL4X3R2w>G^nPOITR3tZV6aOWxY`KhSXq(f|Me literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_1_1.png b/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ec3c4c09d43b317aa1211b9c28c96514b46f26f1 GIT binary patch literal 1059 zcmX9-e`p(Z6n{;BT+^&X$uwZlR5N$dV+1_(#Ot`Vmm0g9z0&Ip80030M#<#HPKX-x zU>O|UP0pH0l(=RPM&^zgp}PAcl%Ns%NB+3gDyiNivOuF&h$BeEs$Vk(pZ6Z0f8K`= zpZAs*=A+|d4~zl8_}sIR#r~Y=*Mp;j{r=C9)h_`CVd2=)Y@ZGc47gmb!NI|yp`qd7 z;gOLM48ul8N8N6>KNJd)WSC_cLEt1Qt|)RQlgZ@@<+4?)Z8=V-+a<%m(7}+Ulr`YS%q5%*I zNHJgtSV_jJy0=mCb?X7t4x_G!_6&q-Apjmg#4y?GRRaM7$BQ(*#`7DAL_<|~3k6iI z21s9s@rU^!E#gs`h^eGx&`O@om|V6Z6zihpB!W~R91YO|!AVqHW@U}n3Sz;MEnBTQ zS-V|o_Nrb6d;<6r5KIGZU{t{$E#vVjBik{(sT4a#4XyEnPoe^;D51yblEhXN!OlpH zoYFEgoocRUo2XUu`Y4=;kyL_VQ-YvNQa+U`>w2|Nuq~^(wbki#5Cmkva~N6jvXy{P zClXCoYsHK0RHb8Vb<6F&Mh|%iub1-sqrs3sge96*I9?O`%hF{%yHP4THM`qnK;$q* z@Ty|aND}!pV`@SrpV%26yZ+r6mTrWcq}RT)fAC6qNSo#sbp;1Y`1OH*9s(n zOnVr^&liKDh06|YbmC?=Rq5sGdsY)QI=Bz0AQlaK<4iCqkm&?xsL5hht(aN6X11Lg z>NY8kLlz(h5b9^4_2up&kV)rTEh?Y83#DFX<8dLGl+tOL3}>itjv-B!ta9Nko@mEH zNDLwsM|l!i46?cY@l%I9x9|MG8;kP-9NF1^rB62JBGXHct-SL={Qk_uzQ`K7eBX4> z_3*#H4_(m4&ohT_((dbz{#rEH`bozRGGBWez*~hJKf(2{g>a^?D#fOf~ z{B$+>!{Nkpr+O!@?R;{@Gj-Gb$HdV;KR@tW;<9+JDqqvy)ATPUA9?NMrz=nWyyzcV zdTZNstsXsos=Iw!d*=4H<@M#4FRgy;>_*OQAGmmHa%$|a`4{|*i~04;tp5I+o9n~p z|8r>f`pFynmsd9re)o|cIR4e8t?H{UK5=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_to_orthogonal_gentle_up_1_3.png b/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..10f53e8bcaa2dee6471846ca816d77ab6c5fbaaa GIT binary patch literal 1122 zcmX9-e{2(V6o319gE_0INrfX+Ql*KPd6IKE!hxqAv%oQq?B*(|dM0ORuzy^}87nE~ zqLox>@RUkw?6Ag*R=sEwM<}L)y40|lDrd4tNiNuhW)`!B4l8V=%GVN-&wHQu{&}B2 zKJWA1-aWp))oWJ+K;Om&x;iyKUhJ>0rLPZaN03czQ;&5mEArMZP#=|}$?q@PGmsdqA zDwmUL)r{5)$z{t#)uO{mdkH^92U#vGig8&^g~Qo+ypT>?xm;y-wqCCzz!mT&F)HKW z^0-(cf)y@S4H&g>zOK(UvbAP;8TAql2kmnC+#Zo2Wrk6CAttqsMY8e4bS7&Ttwx0f ziN{pYp-FB%M5H3D858rV;Iyfg3#nSU*k~*u7Qhdn0_XrHz%)P=1Jr`Rp@@o11KDN4 z3kn4Z7IHqY1wbMo#f9P&G6a+hp;8Rl2HY{82A%`IfQ4k27A6w9FJs90eAKecTFpW& zEj$QRq?grQg5j2OUd3kgdcbUi^UKLnGgm?7y4MM`8}pHl0P7BkR3ymjTF6Lfc{5=Z z&6-_AjS9{4CkA8D}>BFAKUo5Trc3>^T1wx09&F#XSS2qkU{WiYO z_-OPSU0!_u>c^vd-4!|VG0II{BU z_2&=1d%1#-{G1-U_QaJl4+euTXcrHkII!i=!pU3ZBX7-|d2>F~`I7(2J2x&3w-vr- z?#*m|{p_LU+5fg)m@0Qs>jpM)#SI(B)=#>B$dX;xTz?PEk3BZ|<&VuReM1+V;RjY` zhQ7bGGO*1YnQLtQ?5m^g+s-YV>fERP{?}4-lzQc-ho74YOp=d|?{8+f>c6vVstM|X iFSzT2Pv*b4-S*@o{pa}|;a2njb`I{@{@pV#zx_W@XZ4H# literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_1_4.png b/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..714e1c7cf653b5d312a259951edc0be09ac94941 GIT binary patch literal 1141 zcmX9-e{2(V6n|U0-F~o?(3lQt>|%wI97`h?J(g2%^EL|{a%8tqwS?O|v6x0ra+njF z*gmYBEt`i&n{}WWy&aZjRvtd}0DuK{Y#SSCjx8-Mt*xyVi^XcSwzajj zx3^;$*3r??+1crEyWIrgWf+?0Sy2qgvJ{O*lgV^0rx%M$rde+^2rtkSaBO!VU=M{{ zO4u8VQ^^#U$qD&_Tr%R7s>a}$pX!!aN5t<^MNe8L=Auj?=`ZCZb0JnUwdH!z=L7)< zg$9+!G7?sZ+sYYxqvS+2FKP(rmWoi(4Zr~i7$(_l5vNo2cr=QdvaT92|P)R$k>>? zlP}@H3KOdaw3?Eyt4obs?N)gib>lW0>2Ua5ZXWlF6eY7EkmR>>Sy2lQr3-ftx0ooPfiExlrBOxsj$!8Nr zFs8JzV7U_UYK&a_OtVwql&S*GQt&*waUC5;p6A193kQfe2gf~ihlQfZKhyv?f z;_#Z^jRY5pcu>jPu#MvWVYq?H6R}Fn| z|JdzsmG5WBOB=2p-TBa8)yezLJo8@kpY^{?jQ5K7rn@%3iTx2{XMJCz3yVy-Cq3g=KR^G+ynoO-RQr*b57rXqPOtPuU!)-+GkoPKc2Gg{;a>> z`qss-&wsM2ckA`>`H96N=A%r@y7bJGr~iEIr+~KWv8n#&j&lQJKmP8v9^1BWU;U%Q z4=#;;vGJ9a)2DmB8~U`dcXIv_X5+Qs`pd$~%eLv4j;R+;q}DXGgDoT5hi4xjKlDGO CL-o%9 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_2_1.png b/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7ef7c850d2182d5e49c9f7647111bcd781c0ff2a GIT binary patch literal 891 zcmX9-F^HsQ6n?w2yUyNlSPY2}3lFA{Ai;oz2Nq`I9%eDD$9XV?g$F{Wn1BHfrmzrB z$Pg?nrjRg%30Mq4h{YBbLM$wXFoj2^n1IC;6C&XX2?n;<;*ZC{_uj`>y!RE~dp|tC zl^;L)pT2#44bX$&luXlEKc7A?-adClR zSij%Dyu2hvqY=lkk|b)HVw$>bTb}2I;VMbeqS#ec)3zK7q5!Hg(DmVTO3fU0?hD~k zT_;AC+uPDV93zRr#=^i-2zN{cCcUz`J5S2P@iwul&AhIn`=*ddFc_GL5NO!i!g3$q zuZQiHL^X?A13d%?6(ax@z`!sI$6b;PXgU&vJ5}9GCVSU?w_2e*C%NHBBv_Ra3|h9B zvCEl(U@s*vRu-8SZH=^=P&~=XBSB*nlh-ZDnyd4bu}ZD9bco`v*H}f&$&C%+Tb?naucOVQos8t(Bg+5A9>@HFb%GaaLzys2sNUNl(s4%X!N+9W%uFsAw8gd zLl1$cFqy@5k(z3pGf@I}8ZF!`UX(>#R|RShyrQ5KPz4BeSBCIyD`~;#iMoLy?OmE?3x{%GBc#GAQKIXvv{eM5WRlKmXa_-}gW8`o*mVU;O>& zH=X$O=KAVo|3~u`ys>K*elLxy|LWxM+fOID7kZ QHv~7&Zm)m+^3|LF0j^wkcmMzZ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_2_2.png b/resources/g2/track/bm/large_turn_right_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_to_orthogonal_gentle_up_2_3.png b/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..07cffe6c1654e1c2348da6c8032a3546db39479a GIT binary patch literal 1032 zcmX9-e~8<36n}TUyWEeRg;njbqCKvEWFwqGf&}Rx+vP?*qL*ViRqP*w>7~=e@`0pZDRz z=e=`ltBKj^1JeL7yYkZVaep50>&eN0-@p3&)<*yVSbKT>m`_JWMn*?R1A)NU*x2~^ z_{78nhGCPFlT%Yu;aDt2Q6$SUg1|{qN>Su|K3^(TYBj6TXuEEIFrY|a;=pq=sZ=PF ziDq+TL5r8le6=RlZKdUC-JZb`STa5%b73_Z)g`>5P&;|nE+tzv*=-g)*BJI2i3o@U zWEs!}tSV!+7VK0*gH{B2BpQflPe-T`1KXnB=2z5l_fOQl%t4u9Vrl$rbB@(Go2;9i<~=A{G}2PNGvXD;M}eMXXq|<){s} z=y=uc&<-*X5+Iz0Xbx~4qbuP=4NuvO>?F0WV)XR}+Tn?iL`Sj-LQBT05?faUCogqM zO3%#q?b6UOQLhmU(KwN$=rqG-1woUfayDDjG`mu9EUVjY_xpVW5gG6jMpc7sJtDM- zbeApkQihkU_x1Lm=IwQcXod&|>2Np^jR^!P#p4Rc7es$quBH{6)tcLI23-b34pW4n zDn|7TQO+@DL8zD0O;hdIWv|m14DKQZAPJxV=l~`_6QG9y^1-txry$cnZimM~rl81x zl>nCqBmk1bNTZO!BP)Yi1>_p=D0mt;7Lq)ck-}=0DC&u-A=T@7$1y$6LB3Wb4ODK1 z(ZjqE6)jwL<9a`34zl%OskLWyQKyfGfR17bGMHkb8G*{BIbF>dMYV1gordYT4K(P| z9EU7GE+FJ*QSjv+Ba+XRdp){bdJLu2VpAz0laX>cnIiKvSz;)YrEHFD^Msd-Au)o{Ie+fo`FB4(`|#>7zgFkJ`+IKATKg#w*u1)V==$~jbHu*C9!!2Q()8Bf z{^rM}!^Fw$g|}YYI`}$&=g7vPuYcB-_HO@ndpGfk$6WdN#%wCHxNz#Zn0M>jGsE*& z?!VeCp1Pr(zIWzy@x|)3E$lz-V(;Sc_mkyk&ThW){JqvYZzglkF4T{rFWV2q!#Dpt i@x+!*VmB)n?gutjUYM@_uz1aP04v8s|7=G`A>v0DTnKEU>5vD1jl4%-g!u}}QgF$Mpa6QxDV(O*nFw0p&!Rbv? zWZ*a&ZO9U*Oc+TcBQ&^6F0jasG-k?arq}458A%hCIOCH0$bu6mobl%f$@6~w^FGP* zyzltl!O-fy^?d-ade82Gp>`$Ov9`CXo$vl#Ndt7j-j|1Ww#SZ+j?T``uCA``?(P*U zR`m4rU>Mfh+q-h*N{`>~C&>WA&^*sdQdm*sL?V$+XY=_&sWj_2jb@V!038I5?GK0D z(WoyL4Y7iV$o8{wpOhf41o#3ewp>Cf=`$5tU^vE7%MH5^RhFYtUE@lQ3`oM zBp^nE&SNqz9D@lQ7v-kvGa>!HM`NZy@9k@&qeUVVRMWTrw+W3v$6$ zOHRtJ=c+BsMT46MPXv5%z;%qudO~?TY|*kUXjR2%=p{7C5pId{#zKT91alHoRCqff zRnkh$Of;-?%QjK1j%WImI&Dw=Rb#}JVXdv*)fTuAs=VFRp zzDz`_OtKa>>ak)&pKa#r%as=DCtNPd;|clvJQ0wBL51a#VtZLUucfAQd8cGIt2Br# zrtmIR^yyI|6Q|82U(7_NO|@cW>XlNnxqxT@0YCxJ0Zf2tfEos<4UR!^1(^nNDjW_n z2`L&1A#gZAJRsSFG!hvcDnwB^i5vqS7*7GqfWTo<$)m=Ilpe|%Qn8q@ZL?mtQJc#f z0W#iC>mJVVi3MDCf_futHe+WpXG5`4fOSe1kZJW~$Z4-wN^nASLiPW*voeffJBPXtnjcpp8U^d9@w*UaNw(#UO)an38(4{ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_3_1.png b/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1bc591d792b3af8187a3527ccc85ebf9fd57abbd GIT binary patch literal 1147 zcmX9-e`phT6n|~nUTdeB#F4QGSB>tFn+x+~H_hu*wZGJXyB2Ta*I}OXnex#Whn|4;P_-6#OnCeBQ5r-UmLP z_dXjM zU0q!mhIMy$_w@9*yn*hD6?`>NajL0UDnNb z*-D#@d~MEfGT;)y9R@rGgo@EQH&-Nr1|yq+R87%rwT#9E(k0QJC`YCO{=CGN6wypb z)r?XvBy1xyXBJSs>~zrt8KCGe!$w6hB}v(6w3td6xtyu%wW%rFwh?$_ATk)0cd{jq zSRunTHdzm9jcCbMr<%pae02`>l1?Y>c5}E_Bz=Cf_=KdUfx^CqMAvjzJMN&P?xZ^{ck_Z`%3Vsl(~u=}-Ee8MuvZ zUUnSg_ifs8Me0yetW4P=4BPU-vIyw2@;EHed zbKQ$q55H+#Jbd>K?0a;gZ{!R<@c7>B;+1#$`>30KF{`VKNm+&{X*=X)Lq(o^U5E`Z!J0h zcmZv{p}Txj#OSf@3{Qa;j=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_to_orthogonal_gentle_up_3_3.png b/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..26a4d0ee42a67c01bc89b46a561d698c61702a42 GIT binary patch literal 1236 zcmXAoeQXnT7{`BmVYe5sn35Ddph7iAxNHZx>4`@?=55w-Y`5&tMjCVAB^1)c3m#BR z3761dB?V5bQn0}i3+o?^HafBziZs&T3d$BC%8|oy!#r!>rXv0x&e-xemA6 z>h;=vej*s6BT+t)5;IvPuZK$IIEy1Lx`lPSWF>D18g?p%BN&wJXkT}(`L?z z0ucv325173kdbW2QcPHDc@$O%SQFu_24T(t01tqOAhN}xqNs*pahe|G`Eie@sH*p3 zF__Jwq}9RL2;NSMm{Z1GDk*8S5@iEPE}RkKc`=a5k9khUR66KazImicNVk|AE zbv0*%^-7{NowYE)Dgc`Y*!=+05GrPKrZ9Jwk#$$7q{K}v2S<6_Dp9DKT+4#6!Ok=V^Yo(T`~$38MAl%+$+o|Dzz7dGCxzw^wE$v009EFPZNaggx0CrXO~X9lXrwdzaF zYo`}Ejn2D0yD`&OeVVC0`ePSg#V=t?E>BI}?wLD!??!j^r`d&j?OVK_^l|KimDqkU zc7Cf#(_fuiKb3j3ps>Lmy}B8Fb-!ix`dz=iI8vD8uZ-P3`u0@t@Ug3&qtA;EzuVgN z{fE(811s{y9m}tr`1$0!uM|7;)kBNf?O*&k^6eUZ*SYNj4`SCRCQhC1HZO)wTuxln znF~kujHSAwDqgBO=#k3KYne@r-@zZ?IvX^N@kEt8UfNfd0P0-mhQVwC{h6^eI#T literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_3_4.png b/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..0f83e8e6197c09b77d86bc071a262b6e65a2d87d GIT binary patch literal 1302 zcmX9-acmQH6#i}9){QY6HcXL{G_0@=PAGVW1FPKFb#$e&+jfL16;3^*gEB7JX)0Fe zw30FkUPfn%DbPqK1sZAMa1B%}v4aIWcDe-$IYtR{YXqTz4knrSvxMY(?|bi`_xLl8Jc85zdRajetn^m_f_a3mfd7R5|9i)sL_1*EamY_70c zl{UM^<<@$AWH3xeV_ZUTr$z$=A~k7CS)<%xQu2)2&!Ig|BIY$E!mQZuN{fNXOkA%3 zGy-fm;3;X4mB!q%WUwNeP{6bXW@$LZLl{>9KmtHZrL0WmP$+n{I-u3|kYvBbl5{xk z`TZ~!Q=kIQ}9ZXHeWH_jxfZPIJj2bI?lOiumk!$VEkcmi~|<8S|x+@oe@U!~rnnG5`P%KnQ?-07j(% z=0FnA&cRRsib+xpSQL105YYpX1dsxdl|wfQ10;-CVZsH)0C;XZ28;wSky0xoci0dQ zuMY;8Xw)ePp>$e+IW2_+p!QOnmy-b{9Z|EQmd}_&SzC0{o0y8EU^1hw0GLv$*T~Gc z(n_Iri;;I&10F{-1ok6lOHS2!JAhFz1CUC-(vhr`8T^K~~*lE=STKhZP0 zamU*7Pc9brNlI$&;v++o^~c(yy8W-sIsWqq9%#K`s2Z#6l6@9GS3dv8f5_WaJD$+t zrn#+Eb%&lUJoI;LQvms}?LqCucK_;aXOFzRF;7^$O)Nj;eW3g9^$maA#SdPZI*@<# z{DlKOclO+RuXgL1&d|~}epXhe9b34wrE6|=@Qw3D+`A92w|rHNbv#o4v_n7g`1h7x znzC)KIWe}lsdXlHiavAmrFZJrp0Z^>l@Hur7t$>|dGF3&i>DLwe;ez4{L8-l-8ZVg z{`Sb5>N2Lf?n1cRL>=!q)@smj{cVnCi%xg>iZ~t_TQd|rykKnQ?dG%m@&%I<8JVGI W`qkB&hPLO-1%|o?-Rau*zx*FJ9!OpQ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_4_1.png b/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6d3511c987d09d2fb5b623e3ad642727346cc083 GIT binary patch literal 1088 zcmX9-e`p(Z6o2WjOIybkqed1>ra{wsn^!pH!2EIBE;TJTd+V+v!Z}m8X@pP?Jh#ZQ zd9oF0f@}>j(gBnVs?P>&>mby5HX4>$PXcy8!*LchACfkJ@auzP`Tx{{Df1fx*GS zp`jrR!|ZnZ@bIwH%W8Kz6bXzEcy3e_9g&DT z8Y2@)Upm9*3!!33shY_~GshBG&^Ib`PBrM(ByU!s*5hm`9jq2)tCDD0xo*20a6yQG zCT+pbZ_eji=lM!FTvyd=*(@rR zT$IDZI7!~^3wZ-F5mYHj^C=lNu5+oPkgJ9aE9|CSWWeJS2u`9!nUxcKA{)vYvSF%a zD`mFwjcy5Nz#)J$4DJ|sHH^+W0|l>GVq`OzY$&<5Rz~YQ;gD!oG(aSSzP!X16~T;4 z^|aE|Me^ElBr6*V3o~IgMko- zDFUvB+**Xl#27sx6f@z9uGUMLR=wQmTtf^%5I_OY0Ca!~KobMh1J9zEg7h4+>bw_Z z3Q`Oh0kC*L0wCFmk`&7E$cUh70$Dk@9Xt&j3qc->NKQ3Mq_jXjCl!lv)6`on6ZN!Q zVW488jOOHX?vUY?EuYpF^-i?dO;iL)_9^7 z^q`O%sa}+!kij66>m5J6WAw)DA9#7+oB%t2|LKJu`E%C4YhmKlp;O}8>)Y<~$B?Kj z+dsM6PPUpuW0ln#hiwlZd-VAqfqdz&4~I{%@87fdU>K$^KG5#Y-}Il9&YyklkTQ97 zNcrK9?FWnlwj&C+_*meJvGrdL!@)CW`ra*C8z23%?Ui#QudW>2!>)h*wnSZ6TKf4y z@a#nT%F~@)zwUnLgNJl=`P-f2S66K3X1u){&sq-ivH>dg@Su3=sHa*sGxC2o!%oBUTh`lNcVI<~Rn s^X(>ng0(;Qx3FKmgdMjQ^8dk+@85W0?U_qgdd^{Xdd`1w_u}#Y0dD8m?EnA( literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_4_2.png b/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_4_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_to_orthogonal_gentle_up_4_3.png b/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..901c87e437ce708ff800fc7608fdc3687ab1be1a GIT binary patch literal 1307 zcmX9-e{2(F82;E;Z(|#k6fDwhg%v1Lv5|`@#o!i`l{N0CFysN~Qi6fL2F zItwf2Cf(?;NJ%=VSf$PZCp1|@>NaM9V;NY;Ar*@|b%X}1S0Jc-F|;C8s!p+Q9;P&a;O&QF+dngEf$&G zu5>uH9xvt(5aFmb7H5*YH=POL8pMp1(nh($WAa+Xba%g<4 zAsnJ&F*nagM3IMiE`<%C&Qd)qCqhaqr=|sr%~~QkM{L5MoaE9ll~v1tPKg+_Qj1<` zCsC)($hzzypDPye@rj5iBw#MBGa4ZWpa3Aud*R8`J%hsS3}iC8fd3hoWD>VnNV}bK zI%!nv)@l8EG=igXqjr?gh-MYEDxpga11RM5kT>R!U$?CE$7{4`z# zuWYAQuL^Y!F5w=?+FK?2nW|Y+XEy%j&YkVwvX~mmlz{%wrnWUZcQx(p89r3oqis)J z2$vkX+C8wR*BeQi`e5E54KM;`RzpnDsZo{dRopE_2tZ%O>l2aPqhS?A}TSiL`W<-f!B!C;lP zS^}yU&0!+c8e|btJ@sAs@t?hPL)-A*Rbu7NZ)P&hg98;`x1*mFdjcz+3-9g-e7y4B z(m`JA^N3BgC0%ctxFhVvI3#0V?p-#}+*AIjxpM4Qhqq#6={vP8YHQ8p{pKfUNUpg4Min`; ze@jPvwy*C*2Xm;~wBTXt$zt)shxc9>J^KCdgBvHF-&}K+`t39pWr|vqb(7qWul~Nl z@p#v{?y={buiO~Fc}aHk!0?r+Z`<9Xb@OGUt6mzr~Wp7tLWY72tFWqK0eKZ_@ YH$F8~F;aOw?=WbnH`Secee=Qp0saO`Hvj+t literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_4_4.png b/resources/g2/track/bm/large_turn_right_to_orthogonal_gentle_up_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..5301553d21d76be437f5aadde0cae7e7a892b1fc GIT binary patch literal 1378 zcmXAoe{hm@9LK-=`E25jDJ3cQ zhC8Ns!%4~ti%wivTrEXoN=D~QN@jSX_o#HCa^B{V;)T0q-|)P9eLkQ2{PTJL@qT~0 zR;`qmOqf0a08rA{P^ZjJG+T>{^0HlXdLaWq9$3}XT%TQYa&mHWbMx}@^7Hcx3JMAf z3lRh^2F6IgZ0u&X?WEepxC`zr@(`K{T;c)qU{!l2&FsXDJ6$4BPa0N@P=IC^M zgHdd;N*zwz<0At>eK=x`C)_d-qLQ*`1=pnF+bE$+j}Dk+L5C{rqnRN~l5uBJAvq6_ zB4EIPjX*p!611{o9!@&UgGn(=lW^PyVMqV~4giTDG@EVW@oYk&TPhvE@ga>SW-^Vq zTre2qp&S9m72|vC)g&EZ_|mKM$Bs=0#414*Axpnld(`bJpwTRQ~>A!umRu&U(g290{?bwehG3jvJ+I|lr6z~BH90McA&MWGvqejN;3AmawljF$j~45)BKM{!LC zk=-WuxT!$E9Eo_7$q3A9@iYK6vM?JLck@ZVkY=Q|l-ip%1Tv2BxIYeKDIo_)_=sH0 zR%3h}ff_Xmn@Q)kn*v^YB;-vpA()O!6bk4EkO2^8y|85Ep2IU6or#3R>3EJl9G0oo zgic2pjWjAYOT-Qg^~%toLL9|KNtFPSd}tCvCkp)-j3~0jCeD(wHDOVC;>AmY6 z0OXc7*3~vQblp1C*z?uGiS;A@$w%fi;(hrw7dN$4eg5N;Img$WT2%TmzvtY!5|Z>k zJVQR>uDgkqb&TN$RZXSBk7LJ)m&kSN+WR<>?VU9VHnUfZCYyvwYeJL9&b>BjFncRtRH{VAF| zd-2rqjoM3Fe;KTD7DURd?{|*neevYzrHW-weep@k8`_zbtG{op-qUmcr&$Cvs-_(` zUE54Q*lHvNrIopll>hARo39+g_uhSX-&1>Kc`w~Co0>nRwsu=($9}mSj3*~;y71TC zz0-bfKK$ZfQ}5aPOXfA&&v$IUL$#Fz_?NFT7hHn3TAjabY3*(}(T#mXe$9+d?>N6u z5?nuwzWv$lrpXzsrKU)5syKy~=!=0mdd zhKBy8;Z3iocc*IxT(>G(K5>5+9A00vr@u;jr20tjMElm!+~E!Ru5Hoov~52se9}GI z?piY?aCzRAYHuf=xmT5P_vDu$R|9KW2Pdsve3Y*#ekZ3Pxq}H#uTT0v?Rcs8ht1Gwj)Y9VWwhFD1>ifHv|H7Gji1y`;Qy09poLKkam6^v5 v_b0W>4{}z(vK3vAn|`2Ywe8&JBt!8*meStRUfY}v3TUifS@-R-wY&ZYiKkx% literal 0 HcmV?d00001 diff --git a/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp b/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp index 21ca359236..88d7763af2 100644 --- a/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp +++ b/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp @@ -14582,6 +14582,698 @@ static void TwisterRCTrackFlyerHalfLoopUp( } } +static void TwisterRCTrackLeftEighthToDiagUp25( + 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 + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 4)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 8)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 12)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 1)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 5)), + { 0, 0, height }, { { 0, 0, height }, { 34, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 9)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 13)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 2)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 6)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 10)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 14)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 3)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 2, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 7)), + { 0, 0, height }, { { 0, 16, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 3, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 11)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 2, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 15)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 1, 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 TwisterRCTrackRightEighthToDiagUp25( + 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 + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 20)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 24)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 28)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 17)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 21)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 25)), + { 0, 0, height }, { { 0, 0, height }, { 34, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 29)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 18)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 22)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 26)), + { 0, 0, height }, { { 4, 4, height }, { 28, 28, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 30)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 19)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 1, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 23)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 2, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 27)), + { 0, 0, height }, { { 0, 16, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 3, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 31)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 2, 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 TwisterRCTrackLeftEighthToOrthogonalUp25( + 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 + 32)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 5, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 36)), + { 0, 0, height }, { { 16, 16, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 5, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 40)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 3, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 44)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 33)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 37)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 41)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 45)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 34)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 38)), + { 0, 0, height }, { { 0, 0, height }, { 34, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 42)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 46)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 35)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 39)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 43)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 10 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 47)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 4, height, session.SupportColours); + + if (direction == 1 || direction == 2) + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void TwisterRCTrackRightEighthToOrthogonalUp25( + 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 + 48)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 3, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 52)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 5, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 56)), + { 0, 0, height }, { { 16, 0, height }, { 16, 18, 3 } }); + 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 + 60)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 49)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 53)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 57)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 61)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 50)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 54)), + { 0, 0, height }, { { 0, 0, height }, { 16, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 58)), + { 0, 0, height }, { { 0, 0, height }, { 16, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 62)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 51)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 10 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 55)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 59)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE + 63)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 4, height, session.SupportColours); + if (direction == 0 || direction == 1) + { + PaintUtilPushTunnelRotated(session, direction + 1, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags(PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomRightSide), direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void TwisterRCTrackLeftEighthToDiagDown25( + 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]; + TwisterRCTrackRightEighthToOrthogonalUp25( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackRightEighthToDiagDown25( + 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]; + TwisterRCTrackLeftEighthToOrthogonalUp25( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackLeftEighthToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + TwisterRCTrackRightEighthToDiagUp25(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackRightEighthToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + TwisterRCTrackLeftEighthToDiagUp25(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) @@ -15832,6 +16524,24 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionTwisterRC(OpenRCT2::TrackElemType trac case TrackElemType::FlyerHalfLoopUninvertedUp: return TwisterRCTrackFlyerHalfLoopUp; + // Large curved slopes + case TrackElemType::LeftEighthToDiagUp25: + return TwisterRCTrackLeftEighthToDiagUp25; + case TrackElemType::RightEighthToDiagUp25: + return TwisterRCTrackRightEighthToDiagUp25; + case TrackElemType::LeftEighthToDiagDown25: + return TwisterRCTrackLeftEighthToDiagDown25; + case TrackElemType::RightEighthToDiagDown25: + return TwisterRCTrackRightEighthToDiagDown25; + case TrackElemType::LeftEighthToOrthogonalUp25: + return TwisterRCTrackLeftEighthToOrthogonalUp25; + case TrackElemType::RightEighthToOrthogonalUp25: + return TwisterRCTrackRightEighthToOrthogonalUp25; + case TrackElemType::LeftEighthToOrthogonalDown25: + return TwisterRCTrackLeftEighthToOrthogonalDown25; + case TrackElemType::RightEighthToOrthogonalDown25: + return TwisterRCTrackRightEighthToOrthogonalDown25; + // Large corkscrews case TrackElemType::LeftLargeCorkscrewUp: return TwisterRCTrackLeftLargeCorkscrewUp; diff --git a/src/openrct2/ride/rtd/coaster/HyperTwister.h b/src/openrct2/ride/rtd/coaster/HyperTwister.h index f1d950cdfc..7a34b8c36b 100644 --- a/src/openrct2/ride/rtd/coaster/HyperTwister.h +++ b/src/openrct2/ride/rtd/coaster/HyperTwister.h @@ -23,7 +23,7 @@ constexpr RideTypeDescriptor HyperTwisterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .Drawer = GetTrackPaintFunctionTwisterRC, .supportType = MetalSupportType::Tubes, - .enabledTrackGroups = { TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::slopeVertical, TrackGroup::curveVertical, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes}, + .enabledTrackGroups = { TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::slopeVertical, TrackGroup::curveVertical, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge}, .extraTrackGroups = { TrackGroup::liftHillSteep, TrackGroup::brakeForDrop, TrackGroup::booster, TrackGroup::poweredLift }, }), .InvertedTrackPaintFunctions = {}, diff --git a/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h b/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h index 444e95d258..3bf805ad27 100644 --- a/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h @@ -23,7 +23,7 @@ constexpr RideTypeDescriptor TwisterRollerCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .Drawer = GetTrackPaintFunctionTwisterRC, .supportType = MetalSupportType::Tubes, - .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::corkscrewLarge, TrackGroup::halfLoopMedium}, + .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::corkscrewLarge, TrackGroup::halfLoopMedium}, .extraTrackGroups = {TrackGroup::liftHillSteep, TrackGroup::brakeForDrop}, }), .InvertedTrackPaintFunctions = {}, diff --git a/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h b/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h index 10759179c9..5880b6e87d 100644 --- a/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h +++ b/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h @@ -23,7 +23,7 @@ constexpr RideTypeDescriptor VerticalDropCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .Drawer = GetTrackPaintFunctionTwisterRC, .supportType = MetalSupportType::Boxed, - .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::liftHillSteep, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::flatToSteepSlope, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::curveVertical, TrackGroup::halfLoopLarge, TrackGroup::brakeForDrop, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::halfLoopMedium}, + .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::liftHillSteep, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::flatToSteepSlope, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::curveVertical, TrackGroup::halfLoopLarge, TrackGroup::brakeForDrop, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::halfLoopMedium}, .extraTrackGroups = {TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist}, }), .InvertedTrackPaintFunctions = {}, diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index c01bc94fd8..bf3d1810ff 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1286,7 +1286,8 @@ enum : ImageIndex SPR_G2_BM_DIAG_BRAKES = SPR_G2_BM_RC_BEGIN, SPR_G2_BM_BOOSTER_NE_SW = SPR_G2_BM_DIAG_BRAKES + 6, SPR_G2_BM_BOOSTER_NW_SE, - SPR_G2_BM_TRACK_LARGE_CORKSCREW, + 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_MEDIUM_HALF_LOOP = SPR_G2_BM_TRACK_LARGE_CORKSCREW + 40, SPR_G2_BM_RC_END = SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 44, From 16d5fd74a2f4269e3281533ba51aecdf1beadc16 Mon Sep 17 00:00:00 2001 From: mix Date: Thu, 24 Oct 2024 03:52:34 +0100 Subject: [PATCH 04/12] 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 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 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 zcmX9-e~8m|6o0*6>0Ld#t((;qmzzbZ%eD$(%gt^?&AEDJn$x(|Q6=6oEUb)7B6c%q z)gE+5r`f35VUY^`qhdS@DnzMUb`-3vZW$h1m26ZftP>fXbga5#epeAb?|t6;=Y9V8 zywCK+rr_|<^FshIJidNxOP5!7YmvRT+xLIu*bC4L6Yp$Y*IjKkTTf3ZihGBNQeQ;XS4Ce=CNCx!BNM6?C99HbTKP_^9Q1%d zK#T^J#|jc=q@1;at6lY=rXRHhG_N95_5yGK0)|OWXWZjaeZG7kaFOFGkw`5bzn9A) z!|;$UFYWeoctG$4B_b3jMKvI2nS{osOMJd6=vD-$JpQ0Jz!R)Ug(XHxa><;K(-7bg#rbUDapK< z5NjE^p(R>IrekWTQFgj09}yy{2+hQJJ|&9TSge>z8M&OP>-D+0R;z`;BY`i2kp(AH z^6*t6QfHElaK0HUwbZ$Gu{mGsAP3=eQf_w;_ws~a3qL6pB{aY}aWJ zSWM=faRFDOL{_1-Bwxx#Dq6f|WSg~eyL}JQ03iSwKn2hMDgX@(P!}A76d7rGWYsty zNF=0b(1T!cfOtTX8>L8;=a3#n)g-d=@Yr|?SO!8I78Tv`7?DSU_(dL7kTJ{M3p7W6yAG#=$iCBmxlXg(b;X=$^p zHLWsg*D01oIv@)W>Uxpv$~}Q6p=28kDw}x%xmsnyVLloa6-6Tb3Cf?LNsS>5)<4G) z&5#!fIEwpFmP9&@Ot$;{)GLnrk2A1m%O)OH|9)#%cgDxZ)@&U;a_Z*$C#FUg^iTX_ zycT|H`_SasM|Y=I-hSb^d;34#FtfdP?CVoYH!Qrr%JX*g;~Se#nlByS5}tl_!L`$G z^^YFSY+SMA-Rn1O=SGbUx6gdL^6={`@Ixn$J!4z4_Ux*CeCJ?cYW?mz%l2;7*W>T~ zGBTQJ-r){>cvq-iII8Tq6`lO^%D&6fv+cqkyRRSlLfNtKgURKKFCCoKVk0kq^VhbZ zP+NQK_;6`*hqi0vlZW=kuV=1KaW`UxZI{oUw||aLW6yq-a;Fd3f6k>8?}LR!WB$M! z=N4ZXKH}I|IsPTr+9eB4i0RX^%Jk__(J{+b zqKH)4zzs9nFpG+lIWik%4Vz3cYbGDaY#r4%OIoaK{zGLGwWhyeOwPUM-Y@rjIOm#I zH_8eNrWXJJ3LEOBO&Ko9R0T69)3JW{6##O;>i5>vX4b5%tnBRUoSdB8+}uf%CgtVj zF&GRclbN5N&*Ag=2qKb5FoKYiq*AM;j7Fow;qv+Xq0j(LCsQdz1TZnc~P{9pDGa4h9j0(+$|9@6k--7=NJ?`D=BbkkzS)D=um`x6y0x1(C&0HB;x{= z5a=*qB^Vxx5wx(Qo}yHk3lk!kQo(U6gdsivH~=aJgJQD{T&`6haErygINq;TM-7Ji zE*A_2xkwQoUf8@x6i1#$^c;0z7P zG3bPLtIXpj0|8?s;!PwXFr&p)14PfltQ_3UQ~3oHEw(0=-jptoc7(_MF&Iq>iU7)E z$V6-<#?ugpUM;s8G;X^g;I&6W-UJH5Es?kFB?bO5c+9!5g-U`IqvG1K!iKe|_>4efjZ=$}@ojJ;(OkTmR~* zyL;bfzCAH$``~<2<-v{Wmixo28ti)u+HC7?U5a+C&W_hC>$$%5?kHkzFQ}SYJF#qJ z>6e&>{(G*WdBzUglADj(-$h?c?Je&Ck+zFzWfr4RB(3#Q~;ZC%*Mc{w*f>+PP+QyR;5z_MMb_-*Tct&H?Jc&mRWqmj(!TfE zH1J}7XERx~7@JXco*Z60bJm=C`!{9TF;nT)BNOLr)8qTh($4K?CmVk%AHKC~R(02e z^F-g$8)j{aHPkj<^V@D){fX}$jZg4fpIIJXVf{hve>ife&RAKRcS(EZ&(O%;uCbY0 z>c04-qGk7ojr2k0&yPkntUO*fyKDRI=Y7&|2YZebj(s%P*mB|Yznwt7CHM}?Q~2tt zi%V-qQ(I4pFVD$6++4o49O-z!UQ<%Mvw6|H-gZ%L&R2(Tb~2gUt{uOSuI@;e-ubbW z;}-2>R&F2ad%Wb@czNN|?zzK9D`09T5emN1#2kUWK{~QSmn?Ij-||+-Nr$xba;e|6m9SZH5AgY zb9Pu*CkJbwkp`+cNsSjMIBN+V6sSqjCKj?Rot&YVl9dEUAqDqh(VrzG-{;?(=lkOG zJcqhEZOu(DHvs^eJJzq;P^+tJF~6a{mM4PPB>?I{*Lxe=Yhztqol2#uudi3D)f$av z)~s0wf;2QVG&VLG%w{u=V-!U)jGg109uM#L`@`XAJf6&C#uTMet>PFU2|(MmPN&}O zHhFzmAV`EGbS%!M(wn7*1b!ZHS{ESwP`%$Nb70bmh?*XabKQM6bjf*7Ictjkppg!|Db zOs9>w-b@-W+C;Dx8;?2!oD&I8g!0SwP>PXqY*KNVtVYacCK%MtS)Dw^2k1bQjVAeI zUdSk+d^uK}PU}dZXMn*4Og>-{5o^?7i(8y&lFvJWMUPYwGjN1P^_xk(8HVf*cp|dgH-hIvUL=ba&h?_GAUNj`yViK21 z`SW?XT+YLqm(c}qpOzF2v}9tF7G5F5ic_w7Q`6zxOtJ_I6^kBNO^6NCIZ2b7!F?{f zD7dANkdj0Bj9gYSuv)a*?Jx{e*N+oL~{7jx)j&eE~x100%cpURv zu`r3t6rQ$YV>DWJm?3L|f(1r!m?UA|UORqkoA%MuANXuTCj(YbPHeCBLdUu_8`mE? zy{Y5)fmfb;{GTIq^&Rbz8>uC&3t#K|cMG~7TcJ+$9Ouu^9hG*RIg?Q6fMwO`=Jz#+ zMxI zYYEIf!A|~lzFX|Pvg7NA6MuBrPBrvQ{eAA*uiXRlG>1>hQwx^m)xUAqexAAV&C;f> zp|tV`)>CN{f>Ph?cSE@eWRCt zxIz3bwD!KaMEmL3@`{?Vp6Z0^Is{jcv)o!>oTIX1NPr|HCm z_U=x(P2GB6v#&b|*EXMg{@eD;XWO^jni@E9t8nV=UCy@7ZiZNJByn)?Cf(Pw@JUy2 za!z8+aB)}N(GT{YiZ+hE@j$b?t?w)0Xg|5m- z@bJ9v#Y0Px9TU$@0KksL1M`Omb7oL4dp(1m_~X}K06cK$o#llA9U2-M9v=31JR>6` zqobo^V`CVGdA;88@$o<~7^J8$$FZWw%W_Orm2^6t&lk&Ot5$0|PPf;i!oV^h@RPBa zKan7kscVn;T9nY`P*J5e(p)tkZIl(Ko^c(c->pS( zkVr_fpo>^Z!KztbtK{!BaO8$jPeR)|LbV`(03czQ;`3=Zu7^Sf!)ypbJsxjq+Jj;d zRjWAV53+%B4GPe#aWlqtzvMHTI| z+{&vRGu^G``?iTXHJ_gjkx`0{vs_XXv$9-BCd=7uwOF(*tKDpNyIlmh0--!cm3&+U z7aL@}&1E_A00*(Mk1f&E|mO_SrtOROgkYm7;;A!AFhzeLj4roa-r$9$A1KKxmLfW+3+zcsf<+bm&6+9(0_jGB zNFtCHLInz0EVB8*@zbwP{`2Gq&K_P8Vc)%%)e@wgPbynER@6I{46_sw5#p7>&RZvVv5 z@Wa(hH*c-}{^ylvb!(2m-oK0w|FCu>c_*)YPgeGP`Q6V4@0%ZrQ!AZg>&x$MZavTZ zcs(K>ow!;$z2)82+jKuTJ@VNedi}(O`pWf*oiENbH_W}~iW9!o+4oXcu%^BB-=(RO z*LHhm51jq>v|BDxLZgS=u)`y}Ww+!AMQS))g%U63AdOaX zLP-uN%K;5EvB3_`P~;XWL8+mC97%x@8a-VNMG7{g3B_P+q{`H3zLt=D-mib&C;5Ed z+dnkun=`9t768myJJ3JetgD)_pwrUK7na{F0$5;Z-N>5e*wWI{+S+QdSlZg!+S}VZ zIyx{6>+J08>guw)TrQGy(=^3#j3D?WNsLCLi9{-s$>#ILa=G4UkZz#7z%t!_zbzDU zh9hnz=1nBobS989q=Ff%R5hBwcyG7J*k#_S3V2E)&qrw^!51=Oc~YsBwds1^=YRkK zVG2|ZON*EhvzF4fM!|tuUa!QkN}#zcl8MD9)0uMKY*Z)+ zFqp(y<$zNS5y=RpD_kxaoYdu#k*t;Sjm85+0q_74fC``kOafFfKuxeTibzP;P`Sk7 zAd(QLAnSuN3y1?G+EI)|8jG?aR8UY^gU7~ufT4kBv5;Vw!$e&5r8Oa!i<+ihtC^_D z84aWt2qN%Tr7Llx?gXEbJK~!Otykbb=(FXC+2fo{ggArk&z&y${{T-=k&Ol z*K6fGYE(Q7gR+3ifKby5rAhY$j%XxVt$LD)Cy)vS+VAH=At4eGNq5xaPEe#ylLq51 zvP6w{p@0*~I7*TzOCghK9>3@1?%yB(z>eWT4p!Z}Ioj-3ukC+hWX0I=qJLg=@$B}Y zN5-q0HYZL#b)UCwdUMDZF@D`~?~fP1*u3oAjUMgmW5Wmd4|a_nl$Q4VckR=EdX=R| zeq8vuH2dms$Hc(>+kM@aF3LxSKg{=jcmJ~!DSlqBvY-EC-PSwf$M3%T@N&!Id-%$I zeU2^TJEu;qJpFO+`%{1GbDzIz*?W;%*}7*@-^KpWSDh!`T9`Qc(}EW+y#BK?_d?q@ zA9XQf^KYD5y6+&QzdsOAT9@z5w;pw0TX<>7wh{a3>jV1G`u6Zpm3d{sM0|rhN<2Ee z+P-1y#O;@Ccb%lk|-EoWTkBXB_n4~1VSWLmHa3pw4GUOsBevXhl@2`K}CwZRt z{b1ujplja3c>sW}b!%4-w(5dbJlomU%INJUR|3!mHf|W|YmKvJ&6+)Xc3WH9oH=va z+uJ)jIuHcu?ChL7cdpy(_2M{2(-g-sqA19+6pO`DsZ1_s6pLlsZZw-X1}GA+j6)Dy z;V>GBV(|o-O0(Hquwcq1D^aa!v>)L~hs3xQ9#utOM#j&^Xfwr^a*{m}uiM&mqZsgj zpdUmipmIo7Ld=A-l65sp9$3dklYUqJHn3NEUooTg(slPqvrDQMUsl<;5yFUk2Ckq{(WinH-dFk?uD zr4;R?RnJzZO(z9h9B_vK8U;QTAu{ej&L^0ZWbuirtTogkJj?oBBH@Vy{0W}SigZEd zte99y$u&LJFjLc(4r@iHi}3k*oCr~LgyRyTn2tnpiG-QSScXw8mm7@+1Re?aQV5=P z(ghD!@`tK)ye4S%NTH#Yo4NW-Wg0sCPAB1Z2T(8P$3&8p88#klEsN$7$%$;vE?Uhh z1%eDBb513Qs$qXRO6hT~kPc1gO2tgqE5&B>CZqu10gwSu0nh=M0HB5d*aAz#s0?)t z+7;FZBpf6uU<8280>}X6 zy>7u4mnQ`9sDo17tcC^+pJbD2L(rR%!gQ)MV^m?K;d223MFN;ppwKXfM?;LNgteqn z(34hCuiHh~tP%_Z4FGKbVatnni|!#jv1qzhBhsmdkV_?65V&wyj7B9KixF6g!gU%q z8LZ6u>%12RQKGy56_f^!?7pk zcWk+9jz8}BeXw`mQ_pXB?1#PAcCMIuW9Cru-5tzV z4jlb!)A{Z%7XLE-t7k|5@!u}(9y?YDV|%uZgvM^%(-!uB3cmSdbk_y5KXm`6&iwl8 z{|rs-UVgCgTJN$e;mu`!-^s5cmD#+Fas8(NigTeh*^ z_{>}9`Q7J~TT8#Yvh?ne-o?DN{PH5{z{LED~MRoEFW8AVKpX9y!U*Y}Q?5IWL=014fKkp=fsGupg=f zR;28DN05G~P`E1LtP;6?*q}(2fJKK?2v}H^C{>Db3{6w<~UZ8L{*hdQ@3raSS(hn^=7lx>GYy#JehDThyp0`ysoEmIVxXZ zOJ$*2QyNX99oXHlJQ#WsgK5INB@>QDxh7q=xt*dERJCr?iuOvQ$U7Q$G9(xbL9`Itl`kOQl7E zRVcxrGZv#coaqX7O)C0wrLB5hqZMT-o@6s=L1ko<*Dc8^DW$qmZ&|I-=|q)q)EFEE zxCki~h%8VApk0iw6PYHh2ci{f<$>*u-45DOn3Tzr`3zImgoY`#Z8a>K{i;3mi{qer z6#8h`!BafVXdIsvrM#+^O|zEIH_PRqUJqNXL9aI+j}ed-&{d3U;8L4ZyG(W=E z%D2aEZ_*qc_m9v#gX26wWT>>tu%;l`vQjeQWrb$Bve#%vop3S`!H_Xq#T|okb4;xu z`X#kp%kKG3Kd6oRoyp`7i2xda4d4R!0DAyK3{VV3LIoT79*X)34HgF#5n36D6hJB< zi$G-#c?xRfP`8945AFodgDiojU^$a;@=V3eG(5B2E{35$8igpM=It4t1WmsGnshr9cva;*syo%HID`CeUMIAI5@Uo0rfFeLB z&Y~2{-33`J)P_U8R=o?m+m&=(&E?EO!Q$8=&sIgwm$*P?dkQns(#W8YL!%mpS|SSN z`1tuJ=5OBlflC+GR9O1!=eJ_=+3NDy^{201uju!7P9;}E5(f9J7XXXBrRxBuOL z?(-`@ow-f6AKv1>-r0UouG_@551Q4Q{o-%bYv(SN@-KZ$;?LZ;{@o`ZhL>ZE>hnC+7h?Ftu~{w(i)|)6?7A>+yK{`uh6& z`&X@6g<;shz`)?(pg#}@FbvJ}oFoZ~B5Rsz7)CmsEf!0a%9880I~|4wE(oG9B+I^7 zjEE;_GZ{>0#C$PQwzZm*Y&3H`g@uDds^Hhdgr$&KjhQ!iI~}eSRkv!k+}ujL62c)u zL7W3i!tyF+C%yH&uT#TOi$^%y5e!qkULD6RlFS8z^P*UdM(eu1oXsNJ z#u;CL^V1>`jF2If3hRtw1+@%s6ogb+%GDwzH%hQL9SQ^`N>Er?+ID)yDWGP>>tjhO%&<|8k4sWgQ8Mv(F`2ZpS*KKLEG@O$Z3MUqWEx}gUcQV= zH7eTR&8D1d#mjALsZ(q{sIQXkvi65P6i)P$7rhx=4b` zK#GG>2wV}61W5IxB!hAyD#cLEL~afq8qb2jLs-OOieHaYDJzuEDdn=^IE7ZrL0v99 z3QS^%v;1O?h?Gdx4O(rv(218<(zOSr2CBD7AFu=#qP;Rl#3UvW6)ZiLOX=l8%Bd7u zZUuE3tRSEgAQuqodSQ0y9sxHJnP!vCq#r@6)p%K!VlgF=P#M}_=`_a_c*Yj!C6Q`{ z11LfuokST1l{n-G-Q#DU8M^cE2j1H?DZ%*dYj1RW&yKAVySE=ceRX23vFWk?sXz4R zhi;C2HeP;fUC*|`FZAZGcmLb8`%89lZ)5uG$?ElM$IXLFuiB&Uy#D4gacAz(noCDM zpV;`*;GQ)z|1O-lxN&~nK_h?el)J~X{nks1XJ(IV{;;@s;KWho!u^?v6N3k~-0Gbf z*?0HC>~lAEE*$^%(EjBFy?#zI#XZi3;gPYCqqv+N`~BMZso8~nKVG@HvDokWetG)c zE0S#ajJ$vG8|EVb 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, From 2c3b3ee34e97f0bc27f9b3398e24486c888b3ed2 Mon Sep 17 00:00:00 2001 From: mix Date: Fri, 25 Oct 2024 08:38:55 +0100 Subject: [PATCH 05/12] Add zero g rolls to the Twister Roller Coaster --- resources/g2/sprites.json | 192 +++++++++++ .../g2/track/bm/zero_g_roll_left_1_1.png | Bin 0 -> 1128 bytes .../g2/track/bm/zero_g_roll_left_1_2.png | Bin 0 -> 1111 bytes .../g2/track/bm/zero_g_roll_left_1_3.png | Bin 0 -> 5332 bytes .../g2/track/bm/zero_g_roll_left_1_4.png | Bin 0 -> 1352 bytes .../g2/track/bm/zero_g_roll_left_2_1.png | Bin 0 -> 921 bytes .../g2/track/bm/zero_g_roll_left_2_2.png | Bin 0 -> 1047 bytes .../g2/track/bm/zero_g_roll_left_2_3.png | Bin 0 -> 1111 bytes .../g2/track/bm/zero_g_roll_left_2_4.png | Bin 0 -> 1092 bytes .../g2/track/bm/zero_g_roll_left_3_1.png | Bin 0 -> 1211 bytes .../g2/track/bm/zero_g_roll_left_3_2.png | Bin 0 -> 1268 bytes .../g2/track/bm/zero_g_roll_left_3_3.png | Bin 0 -> 950 bytes .../g2/track/bm/zero_g_roll_left_3_4.png | Bin 0 -> 5262 bytes .../g2/track/bm/zero_g_roll_left_4_1.png | Bin 0 -> 1411 bytes .../g2/track/bm/zero_g_roll_left_4_2.png | Bin 0 -> 1311 bytes .../g2/track/bm/zero_g_roll_left_4_3.png | Bin 0 -> 946 bytes .../g2/track/bm/zero_g_roll_left_4_4.png | Bin 0 -> 1103 bytes .../g2/track/bm/zero_g_roll_right_1_1.png | Bin 0 -> 1473 bytes .../g2/track/bm/zero_g_roll_right_1_2.png | Bin 0 -> 1394 bytes .../g2/track/bm/zero_g_roll_right_1_3.png | Bin 0 -> 938 bytes .../g2/track/bm/zero_g_roll_right_1_4.png | Bin 0 -> 1135 bytes .../g2/track/bm/zero_g_roll_right_2_1.png | Bin 0 -> 1128 bytes .../g2/track/bm/zero_g_roll_right_2_2.png | Bin 0 -> 1142 bytes .../g2/track/bm/zero_g_roll_right_2_3.png | Bin 0 -> 942 bytes .../g2/track/bm/zero_g_roll_right_2_4.png | Bin 0 -> 5181 bytes .../g2/track/bm/zero_g_roll_right_3_1.png | Bin 0 -> 924 bytes .../g2/track/bm/zero_g_roll_right_3_2.png | Bin 0 -> 1090 bytes .../g2/track/bm/zero_g_roll_right_3_3.png | Bin 0 -> 1177 bytes .../g2/track/bm/zero_g_roll_right_3_4.png | Bin 0 -> 5281 bytes .../g2/track/bm/zero_g_roll_right_4_1.png | Bin 0 -> 1125 bytes .../g2/track/bm/zero_g_roll_right_4_2.png | Bin 0 -> 1074 bytes .../g2/track/bm/zero_g_roll_right_4_3.png | Bin 0 -> 1217 bytes .../g2/track/bm/zero_g_roll_right_4_4.png | Bin 0 -> 1327 bytes .../track/coaster/TwisterRollerCoaster.cpp | 305 ++++++++++++++++++ .../ride/rtd/coaster/TwisterRollerCoaster.h | 2 +- .../ride/rtd/coaster/VerticalDropCoaster.h | 2 +- src/openrct2/sprites.h | 3 +- 37 files changed, 501 insertions(+), 3 deletions(-) create mode 100644 resources/g2/track/bm/zero_g_roll_left_1_1.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_1_2.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_1_3.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_1_4.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_2_1.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_2_2.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_2_3.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_2_4.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_3_1.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_3_2.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_3_3.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_3_4.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_4_1.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_4_2.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_4_3.png create mode 100644 resources/g2/track/bm/zero_g_roll_left_4_4.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_1_1.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_1_2.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_1_3.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_1_4.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_2_1.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_2_2.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_2_3.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_2_4.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_3_1.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_3_2.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_3_3.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_3_4.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_4_1.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_4_2.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_4_3.png create mode 100644 resources/g2/track/bm/zero_g_roll_right_4_4.png diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index ed71e33a82..dd71d6eb70 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -8191,6 +8191,198 @@ "y": -35, "palette": "keep" }, + { + "path": "track/bm/zero_g_roll_left_1_1.png", + "x": -26, + "y": -13, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_1_2.png", + "x": -13, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_1_3.png", + "x": -12, + "y": -27, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_1_4.png", + "x": -23, + "y": -29, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_2_1.png", + "x": -27, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_2_2.png", + "x": -28, + "y": -9, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_2_3.png", + "x": -23, + "y": -21, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_2_4.png", + "x": -21, + "y": -21, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_3_1.png", + "x": -22, + "y": -16, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_3_2.png", + "x": -23, + "y": -27, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_3_3.png", + "x": -8, + "y": -16, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_3_4.png", + "x": -27, + "y": -27, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_4_1.png", + "x": -18, + "y": -29, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_4_2.png", + "x": -11, + "y": -42, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_4_3.png", + "x": -22, + "y": -20, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_left_4_4.png", + "x": -23, + "y": -30, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_1_1.png", + "x": -26, + "y": -29, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_1_2.png", + "x": -30, + "y": -43, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_1_3.png", + "x": -22, + "y": -20, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_1_4.png", + "x": -27, + "y": -30, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_2_1.png", + "x": -27, + "y": -17, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_2_2.png", + "x": -16, + "y": -27, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_2_3.png", + "x": -14, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_2_4.png", + "x": -12, + "y": -27, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_3_1.png", + "x": -9, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_3_2.png", + "x": -9, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_3_3.png", + "x": -11, + "y": -21, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_3_4.png", + "x": -24, + "y": -21, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_4_1.png", + "x": -19, + "y": -13, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_4_2.png", + "x": -33, + "y": -15, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_4_3.png", + "x": -26, + "y": -26, + "palette": "keep" + }, + { + "path": "track/bm/zero_g_roll_right_4_4.png", + "x": -26, + "y": -29, + "palette": "keep" + }, { "path": "track/railway/quarter_turn_3_tiles_sw_se_part_3.png", "x": -8, diff --git a/resources/g2/track/bm/zero_g_roll_left_1_1.png b/resources/g2/track/bm/zero_g_roll_left_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c01f156f08141ffdb6b01a25e49cb79851c38fca GIT binary patch literal 1128 zcmX9-Z;aD)82)j`(K{wI+!7buhp7Ylp=ggZSg|2RdSq}l^thf3GLK@KFyqhyMMtu5 z4L8kz0gW!Y$j}9=j|!_juqXV?R@yckrx5z1cNUOZ)lJ6=FRKq=;-Y1oIihl zS6A191q%=a>F)0C>FMzWgF%ucSe6k4PLd*uA}5o{Y&Kskn&tA0W57NwnTVOgRmR~fCoTC5E(^PzhA>Jou(&vz7mbrRCP9= zhnD3hy+OuD@Bv!HLNXp!NlBxX9Gf(_Oi9qIqUl5fl%EI%X#wXXDk8ITicjUmyeXTu zT6QvavrwP2PzHDf;ERGl0$>_K<$a+d7O@!F4yWsi?rLQ?!Q)ujnK(VOv-tIf2E&3m;u=)qBx^7%r6pnww+O)DIq65GoX#dM}pC^}`kRcC<6 zA&P*iVnB=GxddaRgisWWvK}K3)%qCMG+y=0=QGyfl}s-ZSg4=3-tz1&|PdMwmcMAQMqeQ)7BYEg2cR zY&4xRY}F}_gC>9ufUxaFs!jJ0{$wK8Xi&NALnzfM8;J<9n3PD!B$1?uEJGSBX>r61 zk2k|XCG z9Xx#L(kuV25Z)P_{$tP7_H}Ic>$@)wbZlF@m^j4T{?(n>aAgQPINCcE8-HWR`TJik zUUc-U`}=R0tIkxmjn97a@vd9{TwHbLuXDtSN$2LPqd!RBpFg$wcXi9BPcF%ZrIE=W z@4S3_%Icog^lz@*SaayzsmXKbuAvW}>y?kAsme#!f1$IZ-e>xjTx@P%esiqi%zjrK zdiv(l$?5BV&xt+pzV|OU#=g_j_TA!78@V-}l^^b1e(=wew+`6cKF`_%t9w1iK0iCK pa{tk*-%fWFHoCjF9wn~%eh&A)`C0m{lWn=crVX3>zgWL>?0u7!e|kBuMPS8l>vYg)VB8OhUOruqnIEj7FCab%vRYj#m7cF?im8U)~3v z=Y3}mjX4JTxAz0Ufb-?y!|l4e9Xorw+IjlK`XWFV96E4hq&;?YbaZxhc6D`icX#V_ zx}KgM48wYRd;9wOOjfIvAnXi7^E@jEZb=eDp-?QA$Yzy7p{!|*W|Oc3O##R1-EO1L zXYmK@;RqFrbLp%nmzPRvq*_ZcIOd}CB5Mk|EV5urNW?;j$;Vu!tf&>kbuG2gC^*dE z!NE_1%wuU0%SQ~Aw6R$-qq-e6J!nfts9*))06Z8b8Vo_RS+?0y6t%!{MX$FK46Y{< zD4#bIMk{Tya~8^DbBMSrNC+||#hFlsjpq1N$)jjq3u(4HtQ3#40_heRG0cS%o`fPQ zYOtV1)q1+RkvGs_><(~qlpYd zo#NhT;TLXr!|3<0p6N?>+p1sl#JD?7g!((e8E5;eAJ*|K#Ft2QR$; zclU7T6_Qo4C@P5;W3shP6%LglF&;orYmOZqCO=H2%a;xpgQ zzBpaKI^H)o`1qb*l9PX3z4Yowjk&4g3zu%4U78E4zbKB77@=wC*N+(eZ8`4^x1zMPHxn)9UYyX{rIgj*Zx3%nvU&D V&O4v@YOt*iI7h~Y=U;m5{QnjC@*V&H literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_left_1_3.png b/resources/g2/track/bm/zero_g_roll_left_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..c6eecb30c437553d6385a8eba460899a434a7b18 GIT binary patch literal 5332 zcmeHLe^e7!7Jh+B5Ukizjfyrg*ha-LNhTpA7$b(C8!^;SK{?$xOeQfxGBFbfN-M3g zf{mIgb?HjGXsHV|D&6Xe6)V3`=2>8 znR)Ns``vrLd+$4W*^s+1^Wmt;Q2>C4v$N6`!RHh3o)sAmzr!aKeF-1l)p-T>MVNzQ zwUGu>3Bj?ivJxDk+++Zt{4;ZI>e%pUkw*qzn#*83Q@+{%&+N)`y{s3_=MUB-b5t4A zf9mSnVhMj$w({beEA}p1Mw~Qkc)lU$qhmF^x7YopYxVI7VM{m6-m2S`K`-&K!(-0A zV-s$zh#Z(TqpI!MNjsU7V>kU88UJwne3otEfmaXgF6lz9OiY3IJj;Bl9zSJdnk0l-*iQmJyY zRjNDTz#v|GZi^zzJ8#NKoz}H0Z_2eDS6<#JznGprMLpiNZ0CXTOG^ds{usSoJbh;3 z=C#G|zwbV|+v(cBZ|uIcoSzw2u3dif8}1XoAu|tD-?)5;9r!`LAYcjg?zt_uw?b<%C4+#R_ggPA*49+6ay~QJg5? zrPrfhLkRBO;W^WQah7h(vrS!KYSP z>{vP9Ld6Fm1~JkI3b&c8b`xpg1TnE9ved5Na^X7Xj(=urPR=mAg&JZ3@`03NRz#R6 zK+I-jqy}YAFM}XM4*jkMl?S^NSwv7|sSPL6%Lt1-ek6n*AJ(^)+Dby<=y8N7Awq1n9R)1$sN`RQeZThtsyN)_C1nzli@B|_xKiE357G#5vV?ldyn*;*h9ilDkn#t zM&hMG_p;Lz+@O8Ap2SUhdFT}r8-xZCit}YM0_BSZQj9N45+(7Il2BA66A^k`P&5K6 z+d|nf3r+-~Ab6q);)s(B5*!l?_=03i&llrjjE_kP179LZ7A0c@t``%@BOo+36Rb+C zWTaO?C_RJ{8KkICk0JzGE^Ysi=;9_DoK_QV!bc~rN`wNq|J=MbehbV zkwB~#V`w2rxI8sCTfr423hvJ2mSA=RRDeBTvgk<%b$2PxWG1wBEXb!&Dv~9OQ3)zQ z#Yw^>$z7qvgpGo=7(^8c64AkUf{BsCa3HlsFNCQSASJ?>6PTKNFvP8iRI>iZU z4ln1xhSFnpEDf_05L6%%%Y_2DNRlUz$psR*NR}WF$^|3jNxjLi>VHWG+lMn}FzHz) z3ff;4ni}jWEwOTNG&n3Vg_?=O3AKeB!v{m4urfj)@)KeWF5$~Di;;l)$56rEnK%7T zF(hL}A`Fuz^U)##Z#z8JVK;Rn_Af1@kv?qQ0s zz+XTPcvL!j%~}SJ`5<>eUOGH(F&K=nu(0s(@P{6HXw;}t5fKqgCNnZJa`foYtoZnN z6h%}jrB z*+??mTrpjZv3(tJbT2~p>F5DBO?%@3&;X!gGRc^j%D6Z;kJpfrvR|WVHyXPtE3ekq z(`{{WXl%Tag=p9*I$kE3kY9=7?i8v{<@Bg)TD1)wx)#5YEsaAm<5RQ=YFt`Ks>mu$ zRlTmhg>3Ovdi^!N-p20!wiqRd)dH3guqy!1&6L)&GMjmYZA#LY@9L%+0&Xw8Uy~4v zOXD1w39kHU9PtJ zdS6RRcV}lH5THRE33#solEKgAs=^z=De`)fM}TDs}30529u+00BNrclW))}j?gwY##op{BCcQ{(e`di`Fy zuUo2C(=CAZ1Db}psDkDOuQ+E#T~Cj+u6FREIyzK^h1%j`yrP0c5vLTXRiYjh+NMT2 zH3_}>@wARjSMumOlx|VdJ~b?UDL?u~um|jm7HYw~uP?wqw*aF^otXxzM@`LwgVENk zC6KJ>*x=0o+h3aqCz0eP&+QuZtRfu2_F-$p+(!#k&V~)=z$X=MRl*YVw|w z^RIvZ9VLGc?AW)}ENA5X<6noijU9LE(NEqvGoU5DI5>XMvTgl;JN~Kj%)65I!`Y|L zi`MUCzftwu=a+nxR>oeL?>uzj@};LwU2bZbb?E4Ae_3ST7|}=E@7gPg bskfM&yX4eUW@|A_1;|ccn6_{JvbFyKnDyvw literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_left_1_4.png b/resources/g2/track/bm/zero_g_roll_left_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..791a4d058985ec3c18e6661415d29a6a6203472d GIT binary patch literal 1352 zcmX9-e{2$W9R2o}*IFH`B*TgImXVG*GBG{lHDYo)TCw7K&TESq)$2T!Y$QD!+_0h} z6_r%9H%k?jI?R}3_MF6;c~Lr1Sz0H{Fm?_V4K2(P*KO3YNKMu6FedNw>!0`jc<+E*w4lW?WveIn+|ED zfK~uA0XPcru}IJ%iu%NvuoR}0Fhj#B4#JQO01^NiL0FNsd8xC+!~E zBd|im8j3k1DPKGr6cIp70f_;i79i&k+#}KW<@zAOMs$w2$(!av@I0vyGq}{OQ8;ue zAEOSKsECb;x=cylmJYhI5gsN(A~7yk=rG(ssLd4RU>LXA>~}bV9#2FN;zL8}bQ%IF z3*;^Y^NG{}DHT>2;%a+R?@gHlX>KUvPfbO$uv8%u;Sz}kl~D>Mqf(i)q@B)@S^N&? zpwAx*MKW;$&|1VqiL5lr85M2|!P}{T+c3ymqd|8n8p>qGAOV05022Tl06YML03;Cr zb0F2wVuHLE#-gMguo!R>K+u2~2_OX^D}fFSdPyi4Vb~61UhvX*9B9=*MVl^wA zoW|#60s&hj!lzOZnA4IP0A?vAI0@-RX+h4$R9srmXUu`DD?BB{VKgll0~|#(N|ByG zjTB}vXgRCV>$C=VXC%a@Vj-A`<612g0E__$b6(hUa<3q@S=`Aa?smO`DI8Yo^_0=b zSS&22wBbq@f$?fAs8tS;ij+ST=fROKyKs zTfMw~WyfKs@rdoM8GG--TPw;=ZL3(-ZSSewz79Fj`}E;_dV$N`eU861&{R29d2U`} z;ErW-;s6{LCZF2kBiYG{_*MoTZz@jpJQz+7X;>axatACfcZfr=DkKDhs-UfG< zUbCJY-ej0*T>2TeO}pqti}_jKo@JfKU+ntpA>z#ue3CECAL$(}OM#O(epIw@al5E} zeB}Gr>QQ{f(A7eo7}Ot}>}#1YEjd0smz^zr^yGf?k(~o&X_)AjeA7Xju1tLN!rK2& zjcel6;HhcJ$_1}gjoA+v*U8Yv9;$0j-PZZd-*RP5*PkVlO|7eurWyOYewW$aM(6&z zNOxm>eHGfhr|H7=vF#0(#7~dt-Zy{j+<8do-cg)rNOg|V`&$l_e|LRQh%LXo`Jj32 z=8`{mjZ*(T82|Ei)iIK0Dmc>)evTYpx@&nweB+}2fxY!lpNm`WZMb|@_@lPVop}9W z_)G$AoZDD=@fTxF>%MErjbB%Es4*Juy3T~x1*MQ*ca_Ezj^VpMt1hW!?`$s N+M2rRvmZ3?{vTtrZ9D(~ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_left_2_1.png b/resources/g2/track/bm/zero_g_roll_left_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..94d1e3695c4065f0fab062bf094fa1353d68d4e9 GIT binary patch literal 921 zcmX9-L5SmI82x5CGwDnniuMpS3t8++4ncxMjgUju%`9<4)=D)bPshkym=kVB9hg7gqDNDp1jp+eDuBNWM@he3X`EWGdgc$fDM?|q*= zxR6dyUOoYU)AM)FE~|T|nv;61+SiYt`v;%~58iupzoL74d;9zQwOZ}q;NbA^@aX6W z!?1e2etdk4x7%%&WkgX>RoO5)mSqkG1K*#_W>K0hieg)qECT`$irnaQTD>0Gx0#{K z`(tG~)8oX-a(A^3L>klhhAHEYMtTM{vDmADnD|;YGmH6fQv|zhDiNU5&=zV~XZb8BX*`WJbA@7NdMKUG0*l04){p zE|4}*9>z^@X-0Jt!OS&xWd&O=MOO;lGB~0y(XPf%4KcRVd|)hnYaI@@iNDK3v`(8X zj-oY|>k49DRb9gv_xm%~O(v5(idKuocDqGDm_Yd$J8g;Pv4o7(!Zi*C@D^8YC1gHRnsw{?;-7^pad%RwA zWB(bfEE78&wbwIj+hmym$M^ypifke?3x(cjZKRXPq0pE`k$`f!DnIvHSW` zpT3G;eiO$JZ+-pJJ^OXz_oHv^hqpic`|`ghci(`Izq|Fzoi+1)B?;&EFV23r_ra(C E1Fl|!4gdfE literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_left_2_2.png b/resources/g2/track/bm/zero_g_roll_left_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4313b70eda660c0c1c8bcd8530c7271f992b30a4 GIT binary patch literal 1047 zcmX9-Z;0D;7=CZ}CwIHeD0OC<4;8v2YS4l~0!D}~cl6GT%e-tWQfG!iD^$!z#+8u| z5qr{&Zp5RE4vMQT(+UBr9ukinR>)=lGd}?wrOtHYN**H znOK4+l2V*gsFX&hO-8jiy($zOvFyoqOL4<&oF$W~1Siv?%4Re{D@w(hQgbyoF#WI` z^y;0RCeA}l1|kb_11Jk)YecF+WtzMeq)Q#$?pr=uk?5GplKB)}N^^Bp@N_vSsO^g0 zbqf7vWhZb@*T-WlMW-1y%L{o~E~#oYpKp{(%~~yR-OlD_zu!kdYCu&mrj839DYxis zM<{kPb}#Sst<6EBx7*%9lQfRA1d)m-WICyGoGwa5C0b@QO6B!>BlLqohX+N(bQw35 zxRs-;2JaMQubN$V%yzTdYx{%2HsS%&06KsL-~g-xbTL2?Bmo&Za%>c~B?>eK$~?F! z2qi!=AdNsJ2H6sFbEs8Bp$!j$XF(JoEnzv8F!OZTO4V)E^9n)W^m+k`w8$(l#w2eM zk{wrEN((uwpK%6xZ>Q4Qbvvltr((dyu~ZVz@bR3?7+KLWb9UMEoO0khz0gO44l9bt z1r!28Q5MBW?jgv6QSElwYULsHR!hiaVM}yi}i#n%b(wCkmn9;dGF3&^_G5G&VN!n&tIHdz1cc5b(dIu z`^IlmjJNpo_3v)K!#=jQ^65ucroZ(Uwog|tEnQ{~#g<=se`Vi`*Cw(jo}2l7_Ny;( z{lb{Bc<1Zmy{)Au7q>3IwRRHw{zPl-h1j15Z&?j>4gdLzjo~+#qwz{->hA6kc7Ju`*VKJAG6Zuo^V8oPKK1ecE|W5E)aI8F5`S!8fE zHo1v2R9)f{r%oJk(GiB8WC=xw+3AVX6gkY`n#%|yE)mUg%s2_euOlR%_v@ecNj{(V z4vvonmM^<^82~IFd1~|ac3stum3>|9EU&)fV}LFg-!?Ja9y>ZZIy*bNy1Kf%yL)+kP(`+Po<^s_7@2%IbjRaMb-J(*1B^Mz7r-nJXfCg}%;2A*>SgRXGc z8;Sa3aXOjevw6uZs%0x)tz}pO6KRLSxi!&i$aq>MXLPoh6w7(Vo{QD(Osi1}ct9c` z!hj)QSp_S`ot3PsS@xj1A2lU(!$7Fy1K@04jh1kOPO$H6vy#S-w%IqDljI0p-O4erJ&Jh6OSj;tVaENoZy+VU==q zyM&rmisMiLkPQg6y@<8xZo{KTQ?(kEO5TQAF0;X)5Dv@Hs6zU6%AaJ&97`5C|2$9B zMIVy9NW)QzLJQ`M;%MIe&E&ZV*+ga{lfF@zGr0friq8%-J96){_OpI!;9$L z<#!h1L-$R6u<2p*&}-8AQ;tUl>Qh$^y#4s%k--zGEBl{rX`|7TCVPEi?V2q^Up;eZ zcHrjl4`P#J`$G1x4z!{UE=P;jw_SBM}JC6;5Hx9Ts9?rbg$bgp|+{^#V`!EfJuj88sD>gqYyvwi0`?D_flXQQcK zj}hI&TR%C#zIZCW;tzbw#WP1t$HH?vt)O1seddR|-fKy_X7=p<{3v<)Ki_ZEHEivy WxbO6~sl#n`U}Sh~^Rb~_Z~PD1IpuZ$ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_left_2_4.png b/resources/g2/track/bm/zero_g_roll_left_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a104413974c7339c2676743a69914e86d2ea26d6 GIT binary patch literal 1092 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 YEq?LTTkq_7wLt*%boX|RZsOV literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_left_3_2.png b/resources/g2/track/bm/zero_g_roll_left_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1bcce0d160b61ec6d47e0fff64e254a1afeec442 GIT binary patch literal 1268 zcmXAoZ)_8F7{`BGx843QiRV zcCT4Y)mGP40|07URy3_E*4f3-R4R&j@vrZ;0iXbDR<<@5$C8qg($Z3eLQz&$R$g9S zQBi>)NM&VZRaKQ*tJUJTo+Jr|F>xGgxAShd+wTvC!*VP(no8yJd0Y<&BcM$+EUU8F zP={0R@f!UBIuy1YCVk_Ejo(F%r2Z0jP?NOmQ20~BgQRq%8D8^dP-|#FcW8Bd6M_go}eWt z^K!x!OZgJnP`VIR57P)&t(Y?R;=W^dXq=7bm=qA?X`&^Rc}Yc_^B zGGb>EZZ7G!XC!wn>MtZDn29M>1|4R`4OW75FpQVu0uD#m>x~A330Y2$j^=VX2sAv< z`4K#%BqJIoj#<;BC&P+aMETk&v?41T1=KtN?e`5Q3T(QH!kOQ$``jN_j`5;Ez9((=eISsel1RD7}&;P#c3g zttP=`6Me3T}M1WcHU$8VTh^Vjnq=w7#)0S#j}HWd5AElrKB zi+Z>C*!{<+Pug)CURmBaxvfR+Gd&DcUwPC1^eTDtdiv+)`I9azKly!D%v?5BUfbnk5Z z+dT`n->m;|?Cdt1?_mGv?cT!M!_2$MOb#-#HZIg=VKuh!LrmvT^Z~q^WBRLZQ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_left_3_3.png b/resources/g2/track/bm/zero_g_roll_left_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..656fa2666890346dd9830653ba94a45f86b585e3 GIT binary patch literal 950 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_left_4_4.png b/resources/g2/track/bm/zero_g_roll_left_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..4f65dc867b0657302a58d49398ff9871fcf5cbd2 GIT binary patch literal 1103 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_right_1_2.png b/resources/g2/track/bm/zero_g_roll_right_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0c361f4699c95485f18be19ba66fc9d55ce91730 GIT binary patch literal 1394 zcmXAoaZr+X7{`B!il#%qXseSmDl4~sqwDVTJkLG`k)$Ve+eZC=zipFAy0Ek5Zm8B^ZOpS)4 z)d`Fyk=2GeTuP6Z@CQtxFe%~F<)SoP#?s3L zKG2GR8KXOJy4S=AI+!s(8%6{$ri9aG2z^`tPym#4I?iC|*=#e9M~Xx}C_1242le{< zc02TX*$9&>W(iP^NXe7pe7PP`nMH(6VsOeV9*p!W-ISUmWDBHR5yqFPgbG}O8&RWO zX?Nr9fZj)00ue`O%F7S~CI(n)z|jGonJ%=mq%NMqE5-wIQ-~m=W*_W9`An6Nt(Edk za*;zN@eo+RpbA=vu+tFrTBia|81^xkLLOg^2-RYV7Q;*`l})R4nM_{0J>YhShK8ci zCNsM6y8PR&8=AoD?G98?PX?zAl$YM!3T#PSJiA019H7euB zbS{%+z~Q2NfmlcklrlPjG4x7~S;M#K#7-mTv8e}~`k>bq3HoBO`%nyk8~_3UGXPEi z1^@`t0gQu6ppJk}5>i2w2XF*f#K0{D6bc{)AkKm&1d=FpYoOlTg*}isq%OXfq*j-3Bb4(TMZChn%K-jNsiLZ!zqzDs&K}%o++z;+8u(yD31w* z9J*A%P>4Ai4AH4&X1#{A=siwLz~_umJ{SuLWisdnkOC0Ky)ee*Ucol#Y~irbW_<nP3RzN90_n&auwzkGD4X5?_mrbBHPg^qdMJ8iXuv~6}vcKNt5hV9jlOaH_V5h^{|fF^fAN^!DZcn)mzB+x!mS z@Uo8gPVYK%ed}P~?Y{9@iS*V#4_TaclyIp}Kzm9s0(<88~Y{mk^Yrn@p9U)^1RlJ)iJkB0-F*Y$_a z9#@AK?=P5N^fzbnom&sINWXV*viHaTni83xjZB`qCEI+jb*z9ol>HUa-n_Z}AJ{&- zZ}d#_lLyLz0?kG4r#JttXd?Ump!CCduf48xPS<_a+V-<=33K~b_TR|6!>|=mV_599 R595ym%1X+M&lYWI`5zqSa*zN3 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_right_1_3.png b/resources/g2/track/bm/zero_g_roll_right_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e25ea83f1a4b7993d4aa74080f6e991700b4cc11 GIT binary patch literal 938 zcmXAoL5SmY6vp37XC|E;mkI>~6C_9vSqu^(U=9(ZW|lf+nXHqQ3Oz&&8rU3i$U=pP zQKJ;MBVj4nLt*O@)*@joIEO3*3=*Yak+>A8nuRI_b6BBB4;2Ren`Pm9@9|yU@9@3% z$>pQ^`E&c{0O0)LD+kBLe7dM7%B7-zaQnX)pahpMUAb7;jg5`X&COD&w6(Rhy}iA& zvx8w+xm@1e-NkFQ8p|@GC@6}gX-&&AUDxgP2BT4!B-1Qgu2w7q0uQpZ*KAe|gKXJM zyTkYT@^GX^u{B9M^MxzW=L3kA9^ZcnSk9B?KI1dH`6vqTxtqC|I zle|jRO}gQ*n#Wsx(G8?-r1%px%yg0?n0k#@Xi4Lmrf9b1_COtkW|%rj)=l%_d>vN= zs49T#K-xfg7&pM{BdQq-X4>e?Er01H=v1bw8b`G1bf>`&H8HZ3)YWD^YZ181xVKIN zv`8vdj-neZrwd|BQ97E|Z?#69PCOW-VK|>om&+vr!UU>^vBQcO5z2(t=VE)&^z&A< z^rov(el}a9J-SliaJ){|6q?a^-jd|DS}e0io$h!z%93<77eJLTOQ|?2=^1q27J{}C z_4RS!%;J7NOIE7~NC0R6SO6YC05AqvV1NqABC;(M_$Zsn6qqb@1qkbq$$%6!#;sWb)BP*_`+Jjd|6P84+0B*?P_t>&C0p%7382o+hh3)~|S zuH9cOxPI@EtjR=dHWkCrY};fRmt%SY8;EQyF;kh&8#Sbo$e~c5MWKLFsW^V_nZ3Us z{=l{4BL!ak^Ov^^^ZMbzOII%3xZ{1h3r{_^HFb=u$0wh^@O`9zck=u5Z{7dv`s4dw zUwHOTa`%t-ZeRO3FQ5Ey>(zgiUq5C>AAKh5bN{?=-~92L>&Z{ib8qJOYq!3<`p&2K dZoYft($N=BiudpSHYpfzc=71qtC!#S@P7o~l|cXi literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_right_1_4.png b/resources/g2/track/bm/zero_g_roll_right_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..df21e5782b5d1e86c1adc814ff16d72004301d4a GIT binary patch literal 1135 zcmX9-e{2(V6n|T{UAJWxEJ=wCUX~_Y@FImAaLB0#+@O%t9obX zBUVzi;F&a}iPcm*V>Lx9qR5FvB9qA#i=}FH&NS^-i}C}@fWQxiLhfi3 zkH!7T6qCsc`C_I-B4snP9Cbo3lyF)Z2D7;Ds;= zF%~ot%gb0L<*Mi1t(q5Ee$)!1WeuUK4?qA2W0>r6sa~%}5IV!06@=MHq^_z9xg4rg zyp-F=di(;;go%Jm231PZ7$wUk3VgaO>a}pmjNr7_AMi0E$xC!d=H#T1%!P9$xn!tS zGi_M;M!Vu-!7YL(0(cw<4Wo0OK#>SlSlI}s8j5afRdiM$-4gAM1;|v8$xB>W5sidY z&nV48!mec6MgcXeE;mh(L5hyBTuc;Gl9Y|bim6m3morMG#@w83+X%ce5E+chySTDf ztdWrhmu!Y~D^|9(xmM9yuD8)3>2lE?PXPCcq+enfg%^_H&a!whm7dKP&8pFAun^`k zMRciQT#J&~I9o`HjD8X z1!)#a0WbwXA|Tm=QWVk!REnZn5}7*OF`fpVgP?##C65{-(^?>}OXYIHFbbAspbnQe z0#tmE)jWcZhf9QPGMXJKv|{CUrnX#apt?=CfyS|b-xXrlyrxF=v|28tjcUO% ztEknWc^;JjnSfBoi)4rHF1(3&w%Me!nY&PGH7*nqqfsdymnnaO_GehCz)=<6KPQk@ z(1*e}QVEo$P>Dqb-#LEz!NKcye&FcXs0iDyUV6IIuh~1YWB=BZr+zs&k=U@JXWydw z%`=XPdw<@>J+a#{;#_&=M($$t*O$gupF8qej+y-EmeAhv&Zi^u^^H4z${zZFz4mTn za7J1G-_%#FH_g6BdaoW7|5k=uTzl19flKSxZ9PvMS{U2@>gB}HFe#vi z*6ZG#C!e*(H$B<^V$*qXdh+zp@b2QvGtd8db8@q5Y@lXr4qce|Y~uIPJ)h4X_~**f z`R9f&eyE>%z&?CtB*i=Bg>h$m@Xy&2!rl&^lU;1|X@qyYOs}`=0A5Bl*{Fu$& quwwX+p|v`*`S^tsx3|sSn8TGH_8fNhzHmo8*t=_VN literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_right_2_1.png b/resources/g2/track/bm/zero_g_roll_right_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a24bd77c98c00c7c6836739524393911fcffad0c GIT binary patch literal 1128 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 DRuS$e literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_right_2_3.png b/resources/g2/track/bm/zero_g_roll_right_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5060ed25a9996b2e4c47b02a98754a13dfd53e2d GIT binary patch literal 942 zcmXAoL5SmY6vp37XC|F3GXaZ4jS!)-QKCi+l0$^JW|qzvnJk+fi)0}}(1I0n$U>1I zkquZSV8ALBD%(R2MZ#L4NQ5F0a_FIl912?{NZBn|a1K>^C_0C~Sr)$c9^d8t4&QrU zTsy5ETzcvf034hgA6?JqlX>CALf$X`{Phf=0N38SaW%JFTU*=P+l4}5XJ==3cXw}Z z55urxvADm#PgE)uj$odnW@AXg|lU%tX60AZA zI$brHn!_2sV09%ol-naUnCMYfr+AXBRs@xi4PG-Pv!%3pdM`4g)Jd{-y6n$4F)l(` z1)>g=4YZH(J)%0GwOBOMnm4zCm7k!Y!jui3Y*rbsCiD$yWT~lZ%sSR0bXRd_lZI%K z;ANg>Y8+n|rKYNShS6;{2c8%AdTA8Rr_%sD3wm~HZ$9aONQWce94MDJErKRV~?19%F_Xk;$uID1?GG?i`qf>r^>Dpr0Qb*nT zICN%lcR5Se>vJRm)Br31A0Px611vB=xfBW6777ED%@i6;4%#9_Rmc=TDj<_U9)|)2 zMGZ7*p)7!h!Sf(XP*bpmK{!pO?N|GOF&epP8ZMV9%2{L`IJ+eJgc4ACM4Or5ue5O8 z9Bn$2i)fB!E4mCkg;iNx6RC#E*>%}>8bR9`h3zy6msx_=b6%EF1SkW9@+?|8?vY5> z?k*O5xAREWWFl#r+GrTIZE~#3vmKEOB`%iPslqI46{J(hp;4DZk%&?`KYsqj(mxM> z;MVn16<+`IxA${%^W^BtjVHdj`{k9xPhT$XY>+a1?>_s}nf=P$%Wogt`L6WgUJ;)8 z`}o$`@2|CIe|`J$_n&y1q5An({0HY}@4OVy_ijH=wthVP_rE`$d+f8P?-blOe|gq< fAU+tAzaDNWuRi|K#qkR{2Trb@9{upfySM)bfm@E* literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_right_2_4.png b/resources/g2/track/bm/zero_g_roll_right_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..80c2bae88b8b9e5f7e80852064d825b5b4fc34d4 GIT binary patch literal 5181 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 YJmEx6ZdaTY1_%oC*5w|3pz^W*0$=i#jQ{`u literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_right_3_1.png b/resources/g2/track/bm/zero_g_roll_right_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..895a1e3388cad07e96d99dd425cf5ee09780a382 GIT binary patch literal 924 zcmX9-L5SmI82x72naoUCa_Aw0L2~FJNRTY%5G9AKn;GjEnJk-yutv#Xz#e)CY?jTT zUFP zt9$3|TSu=Q0l=-Z_fPIum#pUKpjPcimw!A2sKLDtADmWnXJ==3cehrn)$8@Wy}kYY zeGJ164h{|v4~bT*#c`}8iK;4_rf%Do=Xt~7csh-JN^;GXNU#be z78~59k2n$3%Nd>#1nvn!mKeGRV-C!Zb~ublQxs2@_LFY&G}H#n4_wUYQQJd4yIO z-sEXUZoO38~JR&Qj{H^lo9|$JqgVu@$x)cuX9v+ksaWA4KW~;kTPQ0Dukfaqm7en zhx40wi54Z@1fIg$EUt@GSLJ#gIdHq-z)hk-o<-{-Lz^Wp%P0m^076w3{mSkYNUt|q zt@zRK73}$3(si}lHG4gaV?CZ7id-adsmxw0%vx(9gF-HiMjVPol*?85`8OLcUjD%2 z`{yd$dG_?PihOW(^6rDoIid1as6u#?*7gF z{NKO!KOg<}$(^^3PoL4hey6Xf?Cp!4&hh6L%`X8OFJ7NM$v(ZTRN?IO{N$Ir H7hn7j6JUkU literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_right_3_2.png b/resources/g2/track/bm/zero_g_roll_right_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..79683a3990888b4f0ceda5e60b86eae7989428d2 GIT binary patch literal 1090 zcmX9-acCQL6n<;kUb}Wg2^eh(8K#ioZDj5Shu$Bzd9ATr>D69YkVxZpbHS$Lgxd%s z8z(zw+~T}SWDz5aa!58JW^~wthI-gID~5S)nP%)Zf(tH#f^h^5qsq@4gYUh^_s{$I z_})7`H5uHpd1x~LY#D!LblRRiyPoQE*!{$%UylMfU}|D!%%+<*ZR+akayT5_-Q7Js zJ-xlX7>4!r_4W7nyL~<%K?E3v=6O~S!jdE^ijv9XibcI#u3A>B-6jG+Q^2tU;jk+f z^Trc_WQxjUxqLBFGNg)`sy8$S$3oPA$hzf_R~7s@iMXsVMkZ7#iq=}PX=$BSIp~21 z4sjY(9?OfEk#g4Zu6D(PngP^~pbZtFvh9Hbh+vrLbjlu&>i26Db(!PVqS2Zxujg{e zFg%3IN4o=@mx}mE}4tubWu0u zvXwTQ`Fh82(%|C39R+U!{3=G~+`*zhY|x?^O4TK;rIyiU4tEKpCmzI8Au2C0C5bl` zp_Y*v1*K(VI%WYi%1#&Q$3p}erI|R-rvxDzj~7!ZBbPIEycoaMdECV49iwSNyj;GaNUK2_s#WV}eripAV zPZWs60Ij+?%^T7EqD85#aG@P9buyI=y^d-vzY9n&77RGUv^T~Ri72beF)b~Z3Td-k zXj)~|u9GZ_bU+p$WM`4I0B#IDch#Lmzwc&EmQFYX;Rb(!YJzw%$u~ujN-%-@)LE>ab&G^}6`y&o`bKT$~#UotVD(+vJ&*1AiQ!UHEYOv+qv++jZsR^Fy7FYi9GYjz=bf9GoH!JWB-|LtrR|Gs^H z@%|ZWIh}ss+ILM^?pcyfYG=QECxy`PRmax#&%fVxY~wB4JB*J_j(+{p8z=t<8fxNW literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_right_3_3.png b/resources/g2/track/bm/zero_g_roll_right_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..0d523fc05305a854cef3bbde2e323f1ca6461f18 GIT binary patch literal 1177 zcmX9-eT>s|82-V1^ge{)EpdTj2JWP2g&`H{Wk}_E=QxU2pum7hYEsS_7wk!eiMv=r ziG$3eUWOTFmkcs+AyXzCNfU+^9I|*L)MUnKiY#$~#Sm%8A{RN#&k>U6{rcy9lIMBf zBO3<2vpVK=003qUtnJ&>sLwTGURzTm-~RTKWdJmR4eK}eH^vz=X3U&9v#F`6xw*Ne zrKPpC6+w`;wzl^6c8AO5A_zB4Qyj+#f?twEMN#7MWHzhi^Ci=?>UF{mC=XznPQTwC z3_3$$cO>eGC)jkB&*@Uph*qj88b^GdPLXlQKBp>RNr{+HXg%&LW<|3QshO!MEAK@C zkAn~eR1Qgth#s|-)Ao81g*7*<^Ke>)Fz*6@1%O8o(PooTRK>8A$1}mQg+QPz%XgDW zsOu-6xLSHyiXA*dcHK`R+1mg7=IUNZwu5_NlB9u8*&(l63tgpDNmq$X;H zoHt`eEnS(?Z4|I`z!3n>Fu+uVOgg+-%&$|T;fq$Jl%?k31dH1R5)FCrsLzuY=$ynE zicpSA)r?~4@hKw%t9hH9#Bd)$1}HkjaZy1?ghJV9R8J-iO{OD)y2wdwK{?8I$0(&6wrT^#NfJRXT*BYb07I2(->(pfWa)GHL= z8ARf2GVfG_cp^+?B3v#JC}iZao~V`c_4-{%0pJ5b0zd^I13&?QDgs~wEDggF%%q@M zW-%ZVAVvYr3rrS34nWZXqXbN`Pz%Ch1ez)E*mx2!H1M%VP;kg0Jf?cnDIu3r3?oyk z8L+{H1^^N6q*Mo+a`GA`njY2iXX>HcRJ=H?Rbbh|?0|G4UboFpIfEP#4lt@5OvU6} zCT8R_H8T(E6_R0~2A~NbY&nTS7uR4medKNk!N;jl=!71AB2hzw2W zjJw3*HJ=OePAFqAK|qay2Gclxa!Kd?$3O7lra=z8e&@G$8ohU*Z_Vb#V|z>O?<>pZ zv}~xrcMp&!uye27+8DUhedq$;(KlH|dxS+>qH_+`cMr+8AAQ;5-?!vn`a##}f4;Xq z>KPolvufY-w{~q`Fr>ePekv_Iy}9|PzpnHSudbEtD}TN4!LA(}t0z}pTe|+6`~4@j zUd)bj&NFYUy?yqnW5GS2AN-~JSl5wL_?umLq2D?czp~}l)zW_t*Ui29h}|>z^u6w~ z*t@v(_|+cAp8Z{$j(3c13y!{gX7vC)_TI(Im$#k2Gva+=`NO>n?32o&!(WNu`irs2 z(NlAJv1i6t?8bHsjf@@czCc}DICr{z_84PzUEh}e;>7OCXMZoAeg4m-ACvno`7bXY zpP1j;Gu*M_20r`Qj>7PR;hoqaH8%drTgPc;%}G3M{P4BaH@WiWtADJ!ad?00&5@n+ p^Lu~%{oZ!!Xj?N}wY73iUwB~X=kJt7T0>tj&_CFBw)gFW{{xkj|1$sp literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_right_3_4.png b/resources/g2/track/bm/zero_g_roll_right_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ec3f45229e5ed50ff9bf90b44bc1ae757888caa4 GIT binary patch literal 5281 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 n7DO& literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_right_4_2.png b/resources/g2/track/bm/zero_g_roll_right_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d78be9e9c7207acbe16171882a917e59e7538d05 GIT binary patch literal 1074 zcmXAoacCQL6vtniw%4w9_eU534~>$sSk5lG`{O!pa%-<6*3(|;b&Zhe38&2;Vcs7% z%p|zr@<))M2S$w=G~j{x}Sg0^WNkA z^S(U3@4dIU5S}>j=m7wjn16n5sb8o1F*)k#=TA;A{s`cK#TS=P_1l4gfx*E+kH<4K zG&DRsJTfwZVc6*C=-AkpFAxY&REXnPQRHPgs;WvlozCZr<+5p6O~-M2Jt_n&0|GxD zje6s8eNlOc1Pz(EW(T{ye}2;YjUutQk67U%SRez#i?hyj=t+! zVFDx)5-eyUR#LE97H^fjy#|50A=H!5o`#SW01yBq3{!ACMG#srs54AO5bCj5E0wxi zETUSCpu7Rr7ZUu86bvh5Bt^*@qZYWd!RM-?-jGZu=BJ5JIKYS`FVj(lQ!+xPC>2e` zv{ROov%97CZVhL_D}pZu{v-r7j4t}ZR&`giP(>iUGEF4HWH!Q-WUi`; zc3N)b)sB&NYx!NFb$|{AsE@#*q>2n3IV~Xw z3I#b9%rH0tAQ6z_Ls<&x0y5*MkwK0Q`^MA2a}W`*xa>2kH2wr!)^wNYP- zhyj%xXEmRo`z14|IE>~-jb5U^<1iI%hT^)zBzNydg76xlL*Dn zK6O}la_eXDvDwkm`Qw}B3;NCPmX^P|J$Soo-JeyOTIb(7diAekfB$!Rr6hlTl+r+nAmKCATtuO9jL#7P*;u8h)M^hQ1%Lwp5daB*6aYB@$_RiOSQ`38 zm`Xsk$eMwGg9rs=J5X5wIRFJC4C64tLfH%RA*d$6i{J^s(7?eWUfvk+St61>ncy>- zV4;wzR0>e@LOlTYw^EXkO<*qBEU2VZb*5^*%uF;tE03hppbLWmGmPO-reJ~5j-OcC`sBqAe732F1FNU+?9_T;L+1yZR}2kB zoC85y^V%tRbL4jC_Q5r4-oq5r#@yhi|Gax9$DF%pYv&IumFC)B*gbS)|J%#22>rkP zbpFEZep&KwoA!P;{q2FXN29$Jc(1MbRHZ^z-&Z-{q$W8>FKmF3Tl$>vc8;E~Jy`kClJoAZk-`3f{)szZoI5pg{GIfPU(~j-mR}Ec%>BC!3@mNj*){z0 zP;J%V$%EhQYrK@X(bIP(viIus$CPbkw5R{+SnaEpElsIE+HXBS(XsvZuHpW9Q|bP# z$im(mi;i|ox1a8-zuztXg`AxK>bgx`E1uZS)`i^NU%q*7*>ukE^tfr?_4!ww$DWc` f$E72epTj%`+lg&=AN;pK%K>ay+tWF=X2-z)dm|dS literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/zero_g_roll_right_4_4.png b/resources/g2/track/bm/zero_g_roll_right_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..7dc9a5450e260d0accee9d299d3521c1c3dd3fa0 GIT binary patch literal 1327 zcmX9-e{2(V6#wq$Z7WL$9qX`S+3HeAHwrtF0}H#sb#$|XgB@Dol$&d`V_hGAq@;^@Pr8^tFuUhMK)8kz%(2AT0-)9@AKY2@AJp! z^Ln>z)|Hk#R{{ViZE4oFWqC!mRu<)DyMO;g831`;OY63#?3$C4lbf5HmzS5HpI=Z= zP*_-qAV^VBQE_pxRH0CysG1;fiqad6G{>=ayWQpT1OmZGWIP^EXELZ7;2J>cMKmoj zo8=a(+Tql=+@vqSgu+}@a3+#oLWLMKB33W88RWcC>EX~JI}vsnq5(EO=19f8GwFy< z1{f8v;DDzPAB%*Y;+Rj8iOOI~4Koa!;8Hay*Dy*Qt1{S7Bd_7ygx#<23sK%E6O5bWm`trxXegE5h|w&;I!K3y z@dVkRV2i~2gp@Ba6Bgq@LIJ4>$gM!hBbZ033n=L@&I$%+g7c>N2pl3+5+f$F=u}RF z#%Cl#93|L|F&CHg+tXp!jNpgKh**LtRR$C@;e>^voJOPDVhK2%VUI@$1{34s>2w+b z84Hvy1oerDkc^6|ObNn~q`fIiD9w*&0;$>93>2xvVoWO4$rY4JZPaKuJ?UVw$E*Qo z-mipczITFzy9UjmLnV00t5<8>Kdj zs*l(Cyv9(-E(rcqN`P4{nF*j)5zb3Vubc@g*|>&J)BcPlG~tPVUIDjzgg(EBX3^KdbolIhG*E4X@C_&Sd z*=)30SyXMu)Gi$L6KGhk9w${Pg90*gXj4Kr3WGQl^x5!Zb)vtY{=f%qn<>!v$E~-s z^JI&5{kG=bfqr_}zGPn0QTX$YCAUsC=H3%Zb1wdNM|@9Ih99B|EfS``GHS+Kc5?1FnsymXn8|v3HHw9f#Xe2roRUb_WD|h`s`3M zH`Rarc0+jo!AGlK6%C&2KC$NH`bCE=m!|9fIa3>tHY7{SJ2dC_Zl5?19%~sme&gjw z|Fw%+t|ZsD?KspR*PmU=wmYw3*ZRBfZ>>F3S$$zu>tVO~!%L^>+H%DIR y+IV`Oju~3;WZmAHX-Rk0v|_Z3f7m)_dw^&q8yaq&I?<7J9keuU)(&oHKlndyvP2XB literal 0 HcmV?d00001 diff --git a/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp b/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp index 49cbab0635..7184283d3a 100644 --- a/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp +++ b/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp @@ -18363,6 +18363,301 @@ static void TwisterRCTrackRightMediumHalfLoopDown( TwisterRCTrackLeftMediumHalfLoopUp(session, ride, 4 - trackSequence, direction, height, trackElement, supportType); } +static void TwisterRCTrackLeftZeroGRollUp( + 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_ZERO_G_ROLL + 0)), { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 1)), { 0, 0, height }, + { { 0, 6, height + 32 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 4)), { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 5)), { 0, 0, height }, + { { 0, 31, height }, { 40, 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_ZERO_G_ROLL + 8)), { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 5, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 12)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 14, height, session.SupportColours); + break; + } + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 2)), { 0, 0, height }, + { { 0, 6, height + 32 }, { 32, 20, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 6)), { 0, 0, height }, + { { 0, 6, height + 32 }, { 40, 20, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 9)), { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 13)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 3)), { 0, 0, height }, + { { 0, 6, height + 32 }, { 40, 20, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 7)), { 0, 0, height }, + { { 0, 6, height + 32 }, { 32, 20, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 10)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 11)), + { 0, 0, height }, { { 0, 6, height + 36 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 14)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 15)), + { 0, 0, height }, { { 0, 6, height + 36 }, { 32, 20, 0 } }); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 42, session.SupportColours); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void TwisterRCTrackRightZeroGRollUp( + 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_ZERO_G_ROLL + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 14, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 20)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 5, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 24)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 25)), + { 0, 0, height }, { { 0, 31, height }, { 40, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 28)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 29)), + { 0, 0, height }, { { 0, 6, height + 32 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 17)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 21)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 26)), + { 0, 0, height }, { { 0, 31, height }, { 44, 1, 32 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 30)), + { 0, 0, height }, { { 0, 6, height + 32 }, { 32, 20, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::rightCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 18)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 19)), + { 0, 0, height }, { { 0, 6, height + 36 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 22)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 23)), + { 0, 0, height }, { { 0, 6, height + 36 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 27)), + { 0, 0, height }, { { 0, 6, height + 32 }, { 32, 20, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_ZERO_G_ROLL + 31)), + { 0, 0, height }, { { 0, 6, height + 32 }, { 40, 20, 1 } }); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::rightCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 42, session.SupportColours); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void TwisterRCTrackLeftZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackLeftZeroGRollUp(session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackRightZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackRightZeroGRollUp(session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + TRACK_PAINT_FUNCTION GetTrackPaintFunctionTwisterRC(OpenRCT2::TrackElemType trackType) { switch (trackType) @@ -18864,6 +19159,16 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionTwisterRC(OpenRCT2::TrackElemType trac case TrackElemType::RightMediumHalfLoopDown: return TwisterRCTrackRightMediumHalfLoopDown; + // Zero g rolls + case TrackElemType::LeftZeroGRollUp: + return TwisterRCTrackLeftZeroGRollUp; + case TrackElemType::RightZeroGRollUp: + return TwisterRCTrackRightZeroGRollUp; + case TrackElemType::LeftZeroGRollDown: + return TwisterRCTrackLeftZeroGRollDown; + case TrackElemType::RightZeroGRollDown: + return TwisterRCTrackRightZeroGRollDown; + default: return nullptr; } diff --git a/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h b/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h index 3bf805ad27..9f4e238553 100644 --- a/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h @@ -24,7 +24,7 @@ constexpr RideTypeDescriptor TwisterRollerCoasterRTD = .Drawer = GetTrackPaintFunctionTwisterRC, .supportType = MetalSupportType::Tubes, .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::corkscrewLarge, TrackGroup::halfLoopMedium}, - .extraTrackGroups = {TrackGroup::liftHillSteep, TrackGroup::brakeForDrop}, + .extraTrackGroups = {TrackGroup::liftHillSteep, TrackGroup::brakeForDrop, TrackGroup::zeroGRoll}, }), .InvertedTrackPaintFunctions = {}, .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt | diff --git a/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h b/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h index 5880b6e87d..8334f6df82 100644 --- a/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h +++ b/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h @@ -24,7 +24,7 @@ constexpr RideTypeDescriptor VerticalDropCoasterRTD = .Drawer = GetTrackPaintFunctionTwisterRC, .supportType = MetalSupportType::Boxed, .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::liftHillSteep, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::flatToSteepSlope, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::curveVertical, TrackGroup::halfLoopLarge, TrackGroup::brakeForDrop, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::halfLoopMedium}, - .extraTrackGroups = {TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist}, + .extraTrackGroups = {TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::zeroGRoll}, }), .InvertedTrackPaintFunctions = {}, .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt | diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index 6b779358a4..dee8b91898 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1290,7 +1290,8 @@ enum : ImageIndex 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, + SPR_G2_BM_TRACK_ZERO_G_ROLL = SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 44, + SPR_G2_BM_RC_END = SPR_G2_BM_TRACK_ZERO_G_ROLL + 32, SPR_G2_MINIATURE_RAILWAY_BEGIN = SPR_G2_BM_RC_END, SPR_G2_MINIATURE_RAILWAY_QUARTER_TURN_3_TILES_SW_SE_PART_3 = SPR_G2_MINIATURE_RAILWAY_BEGIN, From e2ccc159cc01cfdf9ea6e55a95e1bd0f26cafbdd Mon Sep 17 00:00:00 2001 From: mix Date: Fri, 25 Oct 2024 09:40:04 +0100 Subject: [PATCH 06/12] Add large zero g rolls to the Twister Roller Coaster --- resources/g2/sprites.json | 240 ++++++++++++ .../track/bm/large_zero_g_roll_left_1_1.png | Bin 0 -> 1358 bytes .../track/bm/large_zero_g_roll_left_1_2.png | Bin 0 -> 1122 bytes .../track/bm/large_zero_g_roll_left_1_3.png | Bin 0 -> 5479 bytes .../track/bm/large_zero_g_roll_left_1_4.png | Bin 0 -> 1355 bytes .../track/bm/large_zero_g_roll_left_1_5.png | Bin 0 -> 1268 bytes .../track/bm/large_zero_g_roll_left_2_1.png | Bin 0 -> 1236 bytes .../track/bm/large_zero_g_roll_left_2_2.png | Bin 0 -> 1230 bytes .../track/bm/large_zero_g_roll_left_2_3.png | Bin 0 -> 1204 bytes .../track/bm/large_zero_g_roll_left_2_4.png | Bin 0 -> 5247 bytes .../track/bm/large_zero_g_roll_left_3_1.png | Bin 0 -> 908 bytes .../track/bm/large_zero_g_roll_left_3_2.png | Bin 0 -> 5277 bytes .../track/bm/large_zero_g_roll_left_3_3.png | Bin 0 -> 1500 bytes .../track/bm/large_zero_g_roll_left_3_4.png | Bin 0 -> 1280 bytes .../track/bm/large_zero_g_roll_left_3_5.png | Bin 0 -> 918 bytes .../track/bm/large_zero_g_roll_left_3_6.png | Bin 0 -> 5220 bytes .../track/bm/large_zero_g_roll_left_4_1.png | Bin 0 -> 1562 bytes .../track/bm/large_zero_g_roll_left_4_2.png | Bin 0 -> 1679 bytes .../track/bm/large_zero_g_roll_left_4_3.png | Bin 0 -> 1175 bytes .../track/bm/large_zero_g_roll_left_4_4.png | Bin 0 -> 1093 bytes .../track/bm/large_zero_g_roll_left_4_5.png | Bin 0 -> 1192 bytes .../track/bm/large_zero_g_roll_right_1_1.png | Bin 0 -> 1396 bytes .../track/bm/large_zero_g_roll_right_1_2.png | Bin 0 -> 1710 bytes .../track/bm/large_zero_g_roll_right_1_3.png | Bin 0 -> 1202 bytes .../track/bm/large_zero_g_roll_right_1_4.png | Bin 0 -> 1085 bytes .../track/bm/large_zero_g_roll_right_1_5.png | Bin 0 -> 1251 bytes .../track/bm/large_zero_g_roll_right_2_1.png | Bin 0 -> 929 bytes .../track/bm/large_zero_g_roll_right_2_2.png | Bin 0 -> 1100 bytes .../track/bm/large_zero_g_roll_right_2_3.png | Bin 0 -> 1388 bytes .../track/bm/large_zero_g_roll_right_2_4.png | Bin 0 -> 1178 bytes .../track/bm/large_zero_g_roll_right_2_5.png | Bin 0 -> 910 bytes .../track/bm/large_zero_g_roll_right_2_6.png | Bin 0 -> 5167 bytes .../track/bm/large_zero_g_roll_right_3_1.png | Bin 0 -> 1304 bytes .../track/bm/large_zero_g_roll_right_3_2.png | Bin 0 -> 1291 bytes .../track/bm/large_zero_g_roll_right_3_3.png | Bin 0 -> 1243 bytes .../track/bm/large_zero_g_roll_right_3_4.png | Bin 0 -> 5329 bytes .../track/bm/large_zero_g_roll_right_4_1.png | Bin 0 -> 1444 bytes .../track/bm/large_zero_g_roll_right_4_2.png | Bin 0 -> 1122 bytes .../track/bm/large_zero_g_roll_right_4_3.png | Bin 0 -> 1457 bytes .../track/bm/large_zero_g_roll_right_4_4.png | Bin 0 -> 1378 bytes .../track/bm/large_zero_g_roll_right_4_5.png | Bin 0 -> 1230 bytes .../track/coaster/TwisterRollerCoaster.cpp | 361 ++++++++++++++++++ .../ride/rtd/coaster/TwisterRollerCoaster.h | 2 +- .../ride/rtd/coaster/VerticalDropCoaster.h | 2 +- src/openrct2/sprites.h | 3 +- 45 files changed, 605 insertions(+), 3 deletions(-) create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_1_1.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_1_2.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_1_3.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_1_4.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_1_5.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_2_1.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_2_2.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_2_3.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_2_4.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_3_1.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_3_2.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_3_3.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_3_4.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_3_5.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_3_6.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_4_1.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_4_2.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_4_3.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_4_4.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_left_4_5.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_1_1.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_1_2.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_1_3.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_1_4.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_1_5.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_2_1.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_2_2.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_2_3.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_2_4.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_2_5.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_2_6.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_3_1.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_3_2.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_3_3.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_3_4.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_4_1.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_4_2.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_4_3.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_4_4.png create mode 100644 resources/g2/track/bm/large_zero_g_roll_right_4_5.png diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index dd71d6eb70..7b2079f8a4 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -8383,6 +8383,246 @@ "y": -29, "palette": "keep" }, + { + "path": "track/bm/large_zero_g_roll_left_1_1.png", + "x": -25, + "y": -47, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_1_2.png", + "x": -26, + "y": -51, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_1_3.png", + "x": -17, + "y": -52, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_1_4.png", + "x": -17, + "y": -42, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_1_5.png", + "x": -21, + "y": -29, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_2_1.png", + "x": -25, + "y": -44, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_2_2.png", + "x": -28, + "y": -34, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_2_3.png", + "x": -32, + "y": -26, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_2_4.png", + "x": -30, + "y": -19, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_3_1.png", + "x": -9, + "y": -31, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_3_2.png", + "x": -17, + "y": -30, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_3_3.png", + "x": -31, + "y": -41, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_3_4.png", + "x": -24, + "y": -31, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_3_5.png", + "x": -9, + "y": -9, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_3_6.png", + "x": -27, + "y": -23, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_4_1.png", + "x": -18, + "y": -55, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_4_2.png", + "x": -17, + "y": -48, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_4_3.png", + "x": -10, + "y": -31, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_4_4.png", + "x": -9, + "y": -39, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_left_4_5.png", + "x": -23, + "y": -30, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_1_1.png", + "x": -25, + "y": -57, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_1_2.png", + "x": -32, + "y": -51, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_1_3.png", + "x": -32, + "y": -31, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_1_4.png", + "x": -32, + "y": -40, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_1_5.png", + "x": -32, + "y": -30, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_2_1.png", + "x": -24, + "y": -32, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_2_2.png", + "x": -25, + "y": -30, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_2_3.png", + "x": -24, + "y": -41, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_2_4.png", + "x": -19, + "y": -31, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_2_5.png", + "x": -8, + "y": -8, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_2_6.png", + "x": -8, + "y": -23, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_3_1.png", + "x": -19, + "y": -43, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_3_2.png", + "x": -14, + "y": -33, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_3_3.png", + "x": -5, + "y": -26, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_3_4.png", + "x": -25, + "y": -19, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_4_1.png", + "x": -23, + "y": -46, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_4_2.png", + "x": -21, + "y": -50, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_4_3.png", + "x": -32, + "y": -51, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_4_4.png", + "x": -29, + "y": -42, + "palette": "keep" + }, + { + "path": "track/bm/large_zero_g_roll_right_4_5.png", + "x": -25, + "y": -29, + "palette": "keep" + }, { "path": "track/railway/quarter_turn_3_tiles_sw_se_part_3.png", "x": -8, diff --git a/resources/g2/track/bm/large_zero_g_roll_left_1_1.png b/resources/g2/track/bm/large_zero_g_roll_left_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..583894dde0689dad33adf36997fe961a3e816619 GIT binary patch literal 1358 zcmX9-e{2(F82^2E-oo4DJ?B6D=V8Z zV+MjC<>loS6%{h2Qi-A(g1{+C&oD-gW9@dk$Kwlygjj4ioz9CQssXqbkoroaQEE0T zELM%fsr7itK!}b+xkS>L$@&R3V$fEydYR3j;2D*VL&J6=>M0B8hZB@&xl&Z|^@tu{=Oag!-!vyJ(D zFdCJkQY9|akP0oW(y?lT4P|&O=Oyexy(>cb6SR;vDKNQ4r_@qvJ%brpf_0D%AMF!Z zA!&=HUCCS^GZ~fOKuQ6b2`H>U#Uq$crVFWzQJhU0oEgra=VLHTs-+Ajx9HSPgEqhr z5spgQnUsgi2JQK%XEGUt*_cF%sniA(GvS1VqMQulwOB$%zl?G5_BbF!CX29#SEs`Ljk}vfUuy2qd@l})x-?fr|P&+D;Ts{QDAlosk z_C}}RzNDZ1-wJ%wx8sXWeU!&8@tbNJ&P{ANEVd8RJI}uNf^N>(>l4b>>0Nfkk6&&S ztQQ`dJC4@4V_8*pUQgdXY{Y$L&0I=Ey>vHqp!r@~jkju`PElGja_obbkG3aHQX1m& zP-6}6SpV_DB^0{d-#0R0TzvJu?7pe>&VgI^I;QMw_}b0BVt#PLZRf?CjiLG9+;(;# z+R<|9pgT6Q#@@8=(^2!XIfJ2t^?iGUclJKfKj#@QMgG|kerudj&0Tu^wV{=t93wXN zcU*7jykPCl_(lc!^z!WbzPmk3dx-D=SM_2q)1qFUJ92VWKQ>gMjGnqB+hne)>FwSq zc?z#OzHQILzvE2dDBftTjO_mGl`!}Gz~%*S=cePtvcGzX@U_#6TGR{Q+_B?&V<=pG z??JTe=OvfjahZ~@zH;?`$Je{>oHUI7I&*7f^#fn~Ab#8(_iSD$RhSa^hsyT;u78#U z&z|T|(*KqvM_gk?U+glB-l;qP>h#Len{aonG_C?*9S)N@zR) literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_1_2.png b/resources/g2/track/bm/large_zero_g_roll_left_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..39e123df82738b68804f983c1b7f1c0ea9206245 GIT binary patch literal 1122 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 NLC&J=eOW7N{{tA_9x4C; literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_1_4.png b/resources/g2/track/bm/large_zero_g_roll_left_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..150aec64a2eda63b2040baa1f9005469fd2456d7 GIT binary patch literal 1355 zcmX9-acmQH6#hZk+ELgUYSM+`POVbH1qz(xNDeq%H_NE(#%@qag`$Vlv@th4v2z70 zme7q3id5)GV=5NtutL#=)ve6S?8v~9m1HbMDi$nI>@*eXn7F~u5|Zz|@4bKC_s93X zw)#5l%;~eI0{~{$uBvV*@`7R!5>c^-+wgS&h(P@tjWxw}%9JTnr%n}#MAN2CD=8@{ zEiDy`#S)36tgK9~R4Q>?tbOjd`znV zMhsXf;AX@@PAs^PWKdR!D_~X)3r0BMhA^fCfCj)Q7IO$7rf(%5X{678KJ`TIANkRR)%r0tj}rd$n6hja~F4v+;22-;n$?IsRv3SfDc6kPa z;Z!V9NK?S56Y~sWH==F}=Ce^DClmFV21E9w;L9dsg~BML0MG-#1KCptVJHAoNm>Os9C#=Y(Sj5WAOj#Lhb|ljXc)1;xD%!V;EC}B&}o347F$@k-HLhK z+F*cCPKM1#5KN8=r`zVKT3h0Rk0k)rf&Y zEevim>D+cpz+;bwJc(E+n~K3gn$YQB1i%!4u;_)eDEAZ!hs~GC5I*ly@bS3DU|=j3 z)@I{ywS!Q5DLkaX1)X}B#RokJ%hVQ?9en!og@N)0k%HNK(&iiT|vD_8l1`I~><`w}_B~2)aUu9XT+W+CDsE^8PC6%N3j6V<#U2{$xXQ*M{*& zmHFEjG9z0qbyGL0E^_CVbpCk0XU@d0+Q#&a%g&Au(AvJdp$jR|wC{X&?9R>*Qn}}A zO-oH*bG~!sz&z^Ov7gPsQ}Tm3cFWtX68X~hi+k;R?b`n$YuleyEvrv0yMLxS)7?s*mQ)b)hnnil11k<~^!DnM?p*zus@%Y= zCFNM9bZ&p$t&Sn{$$`%|t@Ui1ET0?dd-3MuS1MT9nwVhrk9c>=a~%(NG{}A#$(>w} z%`b1%**d**BxT~I%ZHiuskjD4L!bZ7@_wwm);yqSQa82Ve&*hr z-Nz3vKCq*;y7%}(@}<94?oRqn-+SkqD_4%n_m-``-mM#62;)K1*`76s zt)~+eN>7;gS#!Ok=X)M(UiicIPpOa+F?Z@0HP%P7+@6M^zR|!xJfElfkJgx#=(1(S Pj{vnbb=9Y%$haJU^bg^9HS_bWoeFc2mdR>(EMl+Zzc^GW3oCeHXgN$I44_$Fy)WY!6d7soe9ltB8-^LY-LfJBOE-%2be&_8AZqiVO{4BS6(~5AqBmKRv*mcPnybK8RHq{h2Aj#uq8Mkj3N#aN)|UC=QgAXF*VIfo zPXZ^62&_(Ynq&_e_K~pwn+&@rV`459F6Pv7`8Fg0umd0fAOjEsU=n}=0$@!H1$_dH zDNxHX7Qo{mNP>h7XbgZXfV=@pI8+#z@W6BcY6^G^o&Yoj>EJ3f*Cbd)Kpl`6EqDI0BQij8jC>9?um?kU${^p!l5S;(rL=!U_Bnr=i_nAPhcSu zk5PDv#*)L0Se{cH7+mX@FBWpg&a?-LgfpE&as82Z@u>VSFp*gbvkYVrboNw;IL zG;oQzUzfi%f6X8^aAVJCL3+0Lgs@<{?D*}y=R|hP{_>*xe=Jx!)NZ(PHaB%%y3}^( z*em9f`1jrL?cWE>&8{CuuB97)T{1nh_3xVpj=DBA7d}!0m2UUE;?z|A*oWSZPy3qP zb1HWZpc5BdFAk2pk=CDCuo2$f@ba2z?~tTckLnb)@2d3r3+Q^~@^>?Qf380){IYlb zzTKbibsagp*nNBEVH3M!VaN1Ky~pvJUly~swzB=7eQeesijtjdSn-;cJZ@sy5<+$t4#Dkvkhn@e%#unWjNRB>JBDej}b=q&A zDqY^q-rIN1F*f$!{c>Ns>%=GHa}SV@HVmB}7~gfcaqeWeXMAWy*V3+Q1M#z1VVvT; zy9#|f*AP$Vt_#7fd;JHi>HRt1rY)V@_xyYVA4*&^4Szk7k6cu@z4a)xu{yJDL)Y$9 aC(NI^IQ>O?yS0W6tXi>l`8V&n_Wut9-a(uI literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_2_1.png b/resources/g2/track/bm/large_zero_g_roll_left_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3fcfec8f4d079b7c5982a2e975489dc81e652af0 GIT binary patch literal 1236 zcmXAoe{2(V7{4meC*iaC}E1&bD_(#VABiZ(LwYYEBc{q@iL{PE=J zS+&yEqRwBT*)ia;0T&Rt*)3aT-M&WFv1k1{`LQv&Ovmpg_wJM>fUhGr>|mUM(v&6L6ux zM*)#V5YK@cRAj4$b?pz=+7K=ey zHsJ;fWyBaW>9X2*)Dgfrk@QAsA!!e%*?86^<=tk&gxM@4i`qHD$!X zk`Jq;M4>9{DPUlM(GARgU=4BcK3^&nl4CJdk_w}v<#HJU6A!Er1W)Mc zw2954?gAYwI^!i@x-5=XQl*Jp6*i)JJz+H3%oY~KIFj_*nV_ro%%2K{Gl^7QQ7Z)s zxa^3R)dyT=(St_)R5Hk>qwY*HkdvdOoKmTbK?(o|0A2t@0FnS?04O2=)?jGp_rhcx z=5ve{@HhxlK(c{610V|^Z-gNn#u+GiU^WQzaq!4^0@!KbU=R;y4EWHnXiLPobXri= zWT~XWnwH58aDO8u8kxA+C0Y4ADVCkdiZ5M_WGAEo%$2PMK$sC5rgu_i4~zTVb}`_I zhXd(kSXGjxyaFo)!fuBWfO!C6&5K}7?lC68A1xM%Xyh^8Y?gL9S&xVF`*|D_2rNS3 zNg9{!*eHXR92V#@!+;e=aVSwxwLeP4+{Qm2W#FCFD_OAk_SG%5y}NTs`wVYiF8sGEtNUo@6TO{=W_iVyqjd6z?BLKh|L!{W*|L4}yP7Xw*h~3t(T0at&)vR7jQlJs*EOfVLR9taxxSVKrI|ag+N9NYd%7;nJ9A*$ zqAk}JZF}qWb({S=`d_%WBXalbp04G;PTOb+wUU<(tut>}->^_Pa{AU@ZLe|T?!PvB zzSb?9I^)2@PczYDzr0UqJL}xtM|6Lml#VxV=>JJ9UWx1(Z_#AWEIU4D=E%_g>92Bc z4}C0cpMC%EQ*FlwES|QFmGPHa|5?8E9y-gmx9QH)ZPkOBwd+STP3_95Z}$tck@SN* z{)VXAJ{`Ig~7#>S{Qb1>$)&s!JPtO1=%S1uWNc~kfQ-FPb1 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_2_2.png b/resources/g2/track/bm/large_zero_g_roll_left_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2e6d0dd1d3a41730a45decbc440050e4698bd808 GIT binary patch literal 1230 zcmXAoe{2(F7{}jH#%)X}W?&NzJxzh?3RXDeG&LM>on<@NF>awObrv|Y8Y^7jhJ_S! z8C422%fU)Gv@s=|rjZ(}o6@+#npnexf(H(*?4~s-p)Mm<=|)3_do3aPKEM8XzJGk4 z=ji4Z`<&SeX9ED{G;OeLsnmu_EUVE~@?zUa7XUi2d1G5+Wvr^InlWRBPN$nWb7pmQ z^{iR55Co~Isj024H5iRX9Jf#u$+9%ZIR%0D`~9*UiN_P^^suHCOC{U_NGo9II;XSV zOCV^K!%Q^pN~VO28qDPt%8WRybv$hl9hk(KA_Cs;r&6*b6X&&|KtWT=#k3s- zE;I0wKw^<7kEDY7Y_z_VL1DoHOD;GiL6|lIzyRPv5MHkrQB*RS6sxtLVTRo9tSF90 zA~2Og@p>a^urQd_WwP^Thlq2MRR~l57#&KoO2(DY+!%pc>_#hVra8jNQ+$94L|l;s zpHRiL7E%k*TsfsDK|Ko$Zh-lKNkWK-!5%j`QzWlCf;mAcN@>{7nCm$L_1eurhc(Jk zNr6@UTvitHF@G^7m(>`|r}g!O$?U)hH%WO}Hpp>duQwhHrXmqFk;n}X7mGy*P#&0M z1dr;eB+6#Y?i>}!JC%YrS(JuL@xoNL4C~B#Jz+4|F(YfXa8|28GXYm+nJ*p;4MpQx zS}o;B;Gz+M)r&4n@|eRuG8SNyVfRo>%%;MHY`Rn$ha>@U08If0gLpWD=rxBVdsN|) zNx!Pb3I!Ebyihm5eRZT{U=+-iF!7pIDmr5&Z?Y_BrV=@rEt={9fgyH_-brE}7WcVn zN%SZoF&PV~=~zKa!%~i*X_x>|0}xhN1S)oqh5CKre4Yr)k0oR>l+($2Je<$R;}$<* zkx4v8;VIfO%$N%fBXnU;8T816^BMSg`iaZ=IF?V3TcK+bcai zH`|}`Kl?=W=KHCat4HhRbw6CS*rG(Hi)WUHTKfV0zqU#4v9Dk|d@5vi|ZPT{9_kP`bwijV# z;(YTvD|Zeoei-KEuEfb{Z|B6SUFR(8uHgCjD$}XiEzO086Qldb-&@Ewtn6w>C;M_e zmu%?zTguMXyYbAZxL}ie`wL>vlHUB?6*XfQ z3#+})O}0)idQEc8-?w}4!nHRipB}q6I&u6$M{Z3`-;K!Xz`l>iu6J(2R#2b(<@o-e zn?BvZTiDWtch>&5|9tzJ*3;Vj`?r@o*;u?iX&pTFQ}^vXnZB!IXGPun(!mzB_uY2= vAH77=jgbTL?*j|YoeFMEK7V;l2dp}Lyk{`%*AlIMBf zef@o8=Pb)C06=H&tDb>IUC;=7o1u~CcVRsM7(oBp!PSkisi|qkj2Q-lp}D!arKP2{ zwG}~-wzjsJGiRFZb~}bS2?A#risO8Oz=y-(cs!ZS%DG%o*K74U<^;GK&{Vt6X9@&t z!H_c&b;lEQI?F1mP|%{~N{VnGUUxfBnMJQn;?SgkoeC3b+*`=wcTd>Ll%M#zAo|A5ZWRI+A3QGB0al zPLFBTba_fO;=sfJvme+(0F@9|(oAMipNjLEH(C}_H7N&A(GC;mvIa><)ay=jgd#9n zm@CDFN+w)W<5OA&R&qv@3w3xgmmepB3=`$JL@=0*M%83eljU-;SgX|_u<`(nBUsu< zC|0K6@Rx~5#h0oEm6}wnXRFhtDcJ5X8eL{HX|pp9C+Btx6dhq3%R<>`ET7KmIjvsC z0ZSnQV-#7N6mTR$cqYOq34cB#mefSGl&jY#Ar62S0096AfD8b604fN84bTJ(2{4m_ zdWl8>kAWBtWD@8!fDC}V8AdUfqM;msg$UGB;F0kzKoP)8BLU7V1|2bpOs6ov|NUz8fpSA8$vpbKHL^yu#lgU#6T)0 zDw&v;%T)Cote0IB1!Vwr0Aa(6NQ3S%tl?0iQgJ2Xk0BHagwMwW0$eD>W6rS48ON~< zfvJ?UNIR-tJ7jH8L}3DhG7dGWar~}D?ROsi!1jSY2E1}>d~>7U)azL}xb(oDQQw*H z+>VxOSHvwt-NHdnH$FB0+J<$3`bKYDxzzNP2j9A5#RY%U6a5d}+txSNK6}|@{3bea z{5om)?!=X6<;w?_jrg8AOWs(M>gnBo@w{d8yc@sun=3o-qSy$2tgYt_*s53gJ7dwT=u-6e0`EWW;LWIMOy>b+%O z9PI8m_F&Ey;@4G&JVR|)2TF!bFIm0RqBn-{O&<=^8rymRQE?~e}VyB91UL5p3Ve|mBjz5j@cU0ynGwho!5!L_z literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_2_4.png b/resources/g2/track/bm/large_zero_g_roll_left_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..604d2f4143cb517ecab82566e8ea6d5f0d40eb5a GIT binary patch literal 5247 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_3_1.png b/resources/g2/track/bm/large_zero_g_roll_left_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..808a681081d1e12dbe8492a2f9e1bf4783541fb7 GIT binary patch literal 908 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 Q8Uav{za(#W?i0`b2UtnX{Qv*} literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_3_3.png b/resources/g2/track/bm/large_zero_g_roll_left_3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d5203f821619ca384fa0aca5bcb4e77d3012afe9 GIT binary patch literal 1500 zcmXAoaZr+X7{`A~`Ic7PMHdxktg&LnC9b#iTI_nuR}U5IHD4VSZq%`&3+t_@<1Wsl z#w9sgR7_c8MTO?{?ZmW&#)^s>ce0I@CN{27vZ8cFj?`^Af1~T}^E}Tz|2*G6zR$O& zWUX{+`kZtCz|_Kmywc>vk|mkMO7^Gzel`FsP*Pl$pIlQ?Qc_b>SuECs2@@txoS2rD zh9JnKNs}f|p3D^p1Sl#d2%Ms1DwRU3rHw|T&E{~q+&*7-I2=zTP%*$IfRtq@6da9) zuhWZ7W{J&CHoBA^uQm`gN1{$bgvccsw2W(z^DQc&LyNW>39n5aaM5AEDHe8)#(h#A zP>O&K2Nnuxq!F)~9cttx0z4QK!-NvPwm|3;06+quL=c+IHt={Bq0lLjw3DP?tqvIs zgANDudU+^EfOEwpU!oLBX_4H3sw@(%oiH*otA}z1l?Iv9W?mD)?lnLGU{dHfI|VU8u0Z%XhARsSLzZfyf__{n|UfXDpfl(iug9$})6jS4bj-t#em0hQEnay5@Bj|QVy1V1? zI0QTz2yF=3$R<2IDj-rv2vbzyjOjdaOLxK*dmS2u86q|t<8q~Z0VNWvBoeKRG%1tE z^e(g2-{=baf{6$Ylrlt1u?>}o$_2zl+XkS~!Kgg5|l0JH#D0AK*{ z0}w?3OhOV+uZ4^ghC`$f&?vCtz%2z~5{F(4y=oJ2G# zu0bcVTBMCmmB(WY2ANna2$NboH9++lxP?nP`AWBt4ofU?1(VQuMs0!D?g$LUg&ctK z5viE1!1)>q)vIL|gT`q!co=KY$Hc-un22C98FT{}1`sB_FeT;Q!ZYga(I{rOy+s=c z5DEpQ(Wvx#8WkHcu?gWx~!n)RGsE1lRf3oeb~F=7$TdOvwM2IzS4c~>CyCs<9C+iNBUN-oL1Zo zFOL1Q<^7uj@lEX+nhw@@4nI2eXvgmWJ9l?1bY|0`xxZAgM(SqR&-?qMtvOe*a}{kB zhLmNG(z&nAeg3n{QwM9eV>|t|mKSrFn_F&5*Buc#dt`rp_f5;*iJZq>{ojgO7s?A( z>V>&is;;CpW!B`cxqaQ%yd&#HS(#(-cFvvDxa95JGfUcO$}wEu z8ehHQK;F+C`h;Jgqr)G|z4w zg4-@O44-Q|FnHup^OGKO@kV>WY|Xi%y1EZD#~;_y7y2@Hw4MCEX$9wA`^?DgEYCBl z2`_*Cyz5bOWoz#2?w-93m~KmtNk8Ch%Pp(dJP?oXsaeC{$9sCErY8HyuFhMY`U+OX zrKwq zw5_qtZYg~E@8j$l#l7=8s<+H2N2<@BX?WGDyHS+6zA5Kr!5Y_B^H}e#{Oj2HwC2`3 zwao)R5w(l{F229y#-8q6LG7G^-x>r9h6jF)F21Vyr0Rom)9F(C!S>#+{aJfvHSLvo zs=L~Y`-hG{GnX$eo6CMNRxy@w;(39!{D+Ze;*tlP*}TU;&VA@z)wJ*CvyVpJ9ZB0@ z%MjhGUQ~53M?QS!*2mMXZLchv*VZ$KNU-QB(+d}-w#+@8HFo5nC-=nVZC1j3_95dh z-S>`hR#DaP`o5`ZeckqTT{`+9nXMjAN3#XjZhc16o7*~0?%Z@@Xy&pVamMh+s|&;P TN$hs=ML}Wy+Ps$BO`rb{4jr;S literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_3_4.png b/resources/g2/track/bm/large_zero_g_roll_left_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..32e54b4a2123a384b5531a3e399eb0bce6d7562e GIT binary patch literal 1280 zcmXAoZ)_8F7{`BO8#frNkg5fWG*aS$CpLJD4vui(4a+F*<_;*ViPfB}!@js=H))_q zk&cvk+0Ic+m5wx8T;mSbkQu8~SEVeCR&tIebmm|U4(V`)vh+n^%luhF@_qijdA=_` z&(qb^Xj;5*#XZrM*F0 zFv>+`cS7;Wxp1}^SCK%?0F52!TmTgjV^Cv?pw>9a$rd5Yhw@?q4$+vJHENwEOt27P zmWuI=>|ry0enRr(lVJpw4LF?QD zegqGzsF;>XVfHNLov?;-&RAYd7b3aYOc7RNDwR>AG3oRSW?%_|H`88QX_+e`_>$p> zl8_5o64=ZLrso#?;iL`v4A}(xij%VE|Vw}rXUG`1ppoZ5daB*Bmff#fF;os zbn#FMK_x?@fWv{01W^-EXaE@iISmwW7@}d+0aIS6guqkqMqs9Zg+?5##_hy>qA46= zV=<2`OSzm3OI}(#z+Kg(sG&nTTNLFKLd;vGf-_e1r)HyBn8~ARVALTdgUU+k91QNV zn?<)Ht9AT`mqc zc#H-=iAxk7HyhG4mb2)gO$Xg54B#+ILfKq8e&hP;>8C%?(cH*@?f1u8OZ{L&{f@nL z-QDLLXaCt=b$SS1{${RY|JjY5pYFNw@vZCATP#nO#{Np)-Pp8zucr6t<29RveW$n8 z|1vQA*~7{HnN{O82lpL@R9tt6@7eJ6IewvEGjR35nR|WapTT^aZ?Gpm zSXa5O-@5y9=KQLWAKu>e_e|w$;bn=_tC8xu9bdH69PX-lVJ!6PSG^;h+k&Uk#G)m~ zHY}+{-%B>?|68H$Ti!<;n;Y2t`OOa0^;_HK>xJi<2WwZf6pk)i)$q_>9DR9-{lKM> zn*CjE_ow$?I9wck({THZPGMZ=Y7O`@@3$^}Y3$$ggF`>Je|T=!#qguwx0a7IbS{rh zJ)llnrz*y0A8ETj>3t;V7WKaPmC7w!LbNv;E5K zL*>Yox31m0b7pOpS^50!wu3$E>yR*CcW|y}P!e9h`{m5{?@YE|Yo5M=kM?^fXTJUJ zquSkDj-rQre_mL!LIRQGxj$=#jJgzNa1PwbI>j&R>_tgK(B0;VI literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_3_5.png b/resources/g2/track/bm/large_zero_g_roll_left_3_5.png new file mode 100644 index 0000000000000000000000000000000000000000..f62f82740d0e008a72feb9226cc5d43e035f1018 GIT binary patch literal 918 zcmX9-L5SmI82x5CopiRl6sZ_6hoC*=5S)NHLg3IPKa3E0CNa>yYI21{fa;ZgZ4VQbrDKC01AMPVP>mk6NF1q0ngtk%Cg_z*!BzGM@d4k?T&ym3d!q~ zWYRsGHC*1BiB2d_V>MXmQQjvxf{{ABO3MbPnW8yX#=h=HW|Y}!KFx~x_K>s$Xsdwt zfgAzlVw{gl3rb4_GwV&ZR#3Vrx>4x1!4X4=p7i*+A;y-PImX7bcA--y-XROoE^W0r zite#oUl50?Ix&pdaJZOE65r3FXuDpQWr=_=f$}hR-V$R%UD5rmINoVNF^o%hypcIHd;)k%lRTtv;9^8UB)c6W$UCnpl2f?9INrHzYOh7 zGAlOee*Xdq06hQ;zy$~amH;~pPz6OqBMXHA$~OuHCJR#mA_;N@kP67e(S${Tf}#Oh zjZq%J%iuYXMd&Hmz`*SxJ$0pdV8pSLWnocdsPZEEz>b=Niz@-CN0gcKZmEU)VSMmb zx6u}DN~#SUiAhXL6Uc$ej{34|4}z&3htn(#i#$d9Ehoz;0+a(nRTksQ?iC1UG~4aC znfD6TY9(r#Iv5zEk;yU+$9Mu8ifke?YlSX)9i)@UrqGN67BE-w)=+U&V8_pWQz>{|bHi{O#^Pce{Un)5Om| x>He!YPm1%8uYa!p`hD}eUw(WYe^2_Y0dIUpJbm`==YFLJmk+MGKi$9n`hS4!gr@)i literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_3_6.png b/resources/g2/track/bm/large_zero_g_roll_left_3_6.png new file mode 100644 index 0000000000000000000000000000000000000000..cb1caa331d4144874a3e3d73a7ee594120ea05c4 GIT binary patch literal 5220 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_4_1.png b/resources/g2/track/bm/large_zero_g_roll_left_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..222bc08d99e14e164b9f008c9ebaf6af42890f8f GIT binary patch literal 1562 zcmXAoe{@oH7{ZVWVcC2)T>?-lhe?# zi5qT|*sxHUVdEqz>O?H;kmDRzk+JrR3Kfes>a0Y?+MGYW;pv>u`@ZM>=Y9Top0{yX znW}K&6B7Xdg{39R^4y%CD>a9m>qUXVRsh&w*=s8n=hnQuJQj<^X0!A2^T&-FH-7wh z1VK0)&V&gQ1Y)rm!%&3+CrLF$X&HvLSS(Jb+wTuXBE5-3CY!}jfXe})=4!QkgF$38 zp;nvR=_0&-T`0^%W42_rMlDHYH!=eZ~HBmpE=(460o{>yMB?LMt zFyg>YB3>E^+jwy=KN}UoGzzmic-IbLL<|4{fDS=u9?vWk+9eW?T;4$tU3z`oY#w&I zVK^+r_+ngu5+b=yqN1f5Ge+6vj7wqhsU0EG6V(M1dXY?ss>E_qs-|RGT0vV0t6S#| z(!rQHl5oV*-sDJ_hXXzd1bQGc0f`-vxdke}L>tEGn8uc5JQ;fgb`VlNB@-G|QkzEZ zr4%8Cj9I9-lS%n3nXq#t=7XsSk1vx*HJD6~D~u#*qbQfr=(pLzZg(sgO!oF>G8qVj zG>|wE%*#`Rgk)5zPb#b_ttV{^W$e9KfBJ5G1ahT3o=hN6iNvH7rQ~u(O;~lgVvW z0Wb%lfF=g|JTMU_B!I?%0|!ABNDu&$0MY_z!=Q(NK?96hVZs9*8ZQHC1<(+PffAUF zQiomT^-!UZB^L9g(=nLS66yhF;^KAz;SuSA5;`HbXSBYoF*M?g-VG*UJR{))nFvv# zJS{FVkeErYwwnzehdJbP#3H_QA_B8XnOY5l044y0IWMd^x&IMbOs-T)=5qcI6OAgg zTGC*kOePvbEi%-JV?G5IR-?UyG_4Usod}vG(1pPu4rA(E_+<;YHy{4M*77nEyfpOF zS^!wzlqz3dQPTKf>#EbKnFWh~hCO3*iVjyy9{Q|u^0oM9d+LY8qQ1fxzx?u>slRQw zk_^6Ta5)ddSs(WH+&|EIBAb7!O8;rJ_yV;^LiD(8(h z>n3K~Hve#K;w?wusX3zZrtP=L%Y#LyEAI5QF0Q=UvA+1i+{35#vpWA+dSypR%S#)* zXv5JxYHw4bbJgAVRU6A^9}j&Vz_-Y^v?!Yfad}?v<(fr;BkUy+bXW1e#y^+V{rXEk z6?mYW`Sp!Z&z|?iCDIGkogG&Ps;>(ty;Ze(c*&&JL$ki78qPksRN1z-`GXA$M+5U6 zCBndu123dIiqCD|rR!W#x4#Mbw0}3faIB`F^oZcc4=7$MxL-cEymv{I1OQMa##{YdTLzTqv$xfU0<_V0^>L(X+8?_Fy6>EpE<&W7_Z|FyEM zu)nfoqj+=;`;j*iy9UZPmsQ(;<8-5rV`~~Yd(rjhyZu-Cv=vPi-|fg`FJ9!j*Df7q zSCv++8Pp@Af#po;^{=ogo3`yZqC0VhdCxVyIB&|?-S_AX-zIk(qM`%2M`x{p0Ovf#l#1=$Br ze^GsK+qcd`lD3(@J6oDp#}4>6#s#c`&YnO!|K!ct;e`ftUd57^{}}k!+~GV}cQVj7 zm5@JIz}eJ&yYJ1ld+jyKotAd~+k!Xu)}+~G4X?8{vFeMqzc8lU)mi19-o{VuBqv>4 zG)8pocF&tue{c5m+E12E+Hxu0U$y$qGjEUIm+TzC&Oc{7ccU45cmCL8-uh|vjBE11 ga@ibZoh%Aj)-#hEgHK_}T);u;;xgrlSKg@m4?Qc&#{d8T literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_4_2.png b/resources/g2/track/bm/large_zero_g_roll_left_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b76cb1e205354fa3e17cbff004aca98d26304873 GIT binary patch literal 1679 zcmXAoe^gWV8OFc-GCk z`Qv#%A8oFX&&r;k4FH%`URGL_oUbLTDl;wFZ{_z60+0qaZ``sjxu&F~q^72(rKP2( zr)Okj%$PBQ#bRYoAU2t$HaqU}sC|B2h%rZpotTKFl(H!W*Qi7+q|l*5+iA>iQ-(ZLBxs67 zoRjf@oCnk*pqBv)!E#Y7znK$uLM|pj$mjqY|{<9>A2rE$++QgfRif`ij=5CBg6CrVJ1ntUhgrR{SF7? z^+pE<;_)~HJPHVHEY!upd^{o~(nK-Su*wha=%~a10uB(CvhgFfIfX3am2Vm4gTlAORr7g=Q2wap={;kO@Yd;HTgv zK!E`z&eD=xqh4gS$X!m-=c5_M9g8tA>BZ9k)WDWmxVRHhdxca)YKg1d3B7O97Mk`( zVK^?#1rmfM7jslHL`$FsjlyEoI;}>Z+sXvou}Atb>xtGm+`aervW@cGM>WhLu2o=i(W9`k)j@1^JH1)p_X?3Q{z`}51nGnLOf zn!fw=xa0Af-Ub=AggnRJIqUso{^}ouwv15Z%vkUGq zXAV7j(C4}M@b;OB{Dxim^{p33*R{h9q`0*uM69%aJU=V1(|A(e{2}tM?6gyhDSWKZ zRH@~ceBH>^O?_V9^ss3Bf`BJDTJUi3c;95}hpvt%zshJR_-N~o*(c{TtT6oWUj1*D z9P(j??evD_Vt;>K&-o3@V)x&;^a*>v{jBMc?b?pIkv8kbZ`{{*76~Q`%8R>RU3J`g z_UVD$RxtB-r2hS&23_1F9vQr=8Cx}{eBkYun{Nkp2kV;N&%62Moj!Wsf}E=_{dH5n zvU$@754wWJ*PF?@tj5WnJbefL9PB-PWo62?+0C!BB)$K>{7+=wRc&Rz;Fm65{6PM* z{q5#X9#XVBt6Y4b^9|1{f=5l>mhV@n@2>Ym8vg#E=a!``GxgvGMSJ$i;P}DLA6IX# z{{64VGtX_AxO8N5hu60vvFGE=*ZRZO>UTT)_V9wkgU8P{em8pJlV`s$H{U7DnDMC1 zvcGTpUG_%bz3gv^$7>4zvdeYl7+2p_xNPid-?g@b_1|1?FIiM8Oj}>^wZXqHKXCa`$A$5OLlm*fMvWq09K&ymPsW zFWvE<)R*qRdYC`9>3DJP>DqI3PkvZmlg>RTzQi=rqme?S<6QTrySe;!{GCm0G;{g-k&?%{34HejvyA*;C}9G% z<1G`ZQ?Cr&F6zci(d!6YIdYUtxSovc9p{e9zJI~mrOS8J+%NMdsRHHeDoQV}efQY^ E0TKTMm;e9( literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_4_3.png b/resources/g2/track/bm/large_zero_g_roll_left_4_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e73b45b87c7c9eff3f5121eb8a705966887b4b82 GIT binary patch literal 1175 zcmX9-e{2(F82+|y+`2gnDWuUF8>pni3taF_4m|aM+fv4v9@`BYsLN??SfzxU9MFVH zPN~vB4F?pdrjY`dr9fdN{Hof-GuAk>Dklypa%hQ-HjY4JI#^_r&k~a7{q@iLB+v7{ zyH|VM?X6F?0sz{(S9bQ+>w*w|HD3I0h&ZuuPlJXAJ}# z!4MXSlJNwa%J4Z&D(KNtS*20LOSXxOP4+qz!IhNob75MGdkY!S7>QI2b+Vdw+X0V) zAO#c-Nr{LSwG>m6l}tiS zv*T7LWy4qp$-CSl>XmUpA*BQzPBXC_rxy6E;dc;r%*w3X_TmYqa{hLDtUO0MXds154zE)mrMzCPU7^i zP>f6EbhxU;C-pQe=Pg#kg?e$qPtie+iwZ&_7|cYYS~96;v!$`IYPAZ1T?DQ;f~PEW z&dwE3e~FHieQG6`t14r)Ol7J#3ENPMg|OM&4kw3V0!c~?8{zBALYZi6B$YApdaXnO zoO}={*km?)Do3qzE-;hDFD0xNB}4RqyZQKpo{=m2TQ|{1k)-s zimVHWIEYao>jnl3AP1mmgHar+EX)RAAp#8*JT#sF3=O<25)f>15REDBlq%$MVO>vG zDmtul+5G?ywNZ+VRULfRB^sns^`&dU++@5kl`X+y)nx^Q194*(ALR&ec*xHvazKsA zxpYj=rz=Jt)=C7!z$}0UfUxdGq)zt;_HZasE)$9PBS?h;?elSgfDj6aI2ITQc!2=$4@M5`{&^gZ0YrIVA)^S-mLds-JQ$(R_^}z;POqT zxsP>y0WUXR^JKoc_V?NE_VuhY8|z~qO-zhTBixw*+cYxt%-a2jyU#narV~-T*pnEIDTl)s~e8(+`Ht$#il*)U6_4m@%33p&Rm_NE?Hx? zJbrms>uAS(&u9DN5BAPH-LX*~p4t4t(1II>u4SFw|Kr+4J&(~GK2=lP?<=u7Y3efrAQU%tO&7EfFsf2Xf~$Ejt3(OEy4 z2m1Tg-g@!bKMrV}Kbi)&Q~Q3K?*08Jd;f(a!5(sAs%b;Vo$8%=?2T0Kwx#_m-?|<6 rZ_(t5=U-d(^5y}J-SX7^%D>3KP;lFv(XFTI>VobrPv`K8*LVI8yYmQs literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_4_4.png b/resources/g2/track/bm/large_zero_g_roll_left_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..e8dbb2f18aa19c0b2041e1dffd3994876cbc201f GIT binary patch literal 1093 zcmX9-e`phT6o0ipuC}_sB1R2s>H<6KvBmCiH@MN$U2ANw_Of2Pz~Xj=gJzn_$<8f| zDA~*(nPlUHxJAq)j%!IV*y#M@q?u&w1_gs0uH90+VgATi#1678l#X@qT}1f2_xSwt zK79DRcfmL2-QKmQ3jnqc9~~TT&c0^#ceXbBY5Mf50IlE~ofvA;mX?++Teh^ewzjpk zwYRr-baY@C*4f#)b?a7#+wCSv56d!wz)4a-QRG-GmP%#vdEGFUEvw#WkRD)Y;JNNV zz#a;@!VynAL8sDuHZK;6O36%Asv1jRe!5%c98teZmGF#0-j1=wl)sdht)+O)(l+Xb z*9js4VFpwI%gR_WVJm0tjgk}9Jg6a}O%)--4Zs747$)0nQKwVIagC;L^ZZgUSdK>5 zG8t4XI!U{mad>zaE#h98@JC5WrIj=r%W=tqpp``33c4t#$LppAf|IC#%*t^-o)I&; ztea88N}9E7Wus_gz%GCz2(Ad=Dn?}--aH;CGP3DUR1~eQ8t67p*d@vt_7Vv{ot4;v zBA79$oKmW}SiP9qFmtGC*z6Qe_(>|ruwg++NK!f+&LO}QLLnVo%0+*x)&@SkN`+_pah9D9_b-eiX%&dr@>RevEb*ikmQJliKObyYEq#PGtFGB zW}>E+GYDj)n^7IS<`Q*WwrI5;$Th-+jZ|q*)`i86Oki(C@3$P0|=1JUnsq!WS#tb4KsB zHeUtJe0guFzQJ?<^v+y9d~e(M^u?afe{vi(T4!JR5kGRZ z@gP3lyZ@H{+qua@j|aLhE&j28`>&giZ~k)s+IuJNPVfD>>xG+N9bE4}d+*xJgFD9- z-#L`sytsD#;lUo?@^zxzI|p?!Z!yH}1sId*^U(aQ1bqjz?G@-;Jmcje=O9S{4SAK8l^nAo>x zq+k1HcJh{QZfgGRp+{$Yqfc&p@4L|zf9;JO-wnJqHb47c`_9!XN3OnTyVSG~!$V_( J3vW)H{~z^t+t&a9 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_left_4_5.png b/resources/g2/track/bm/large_zero_g_roll_left_4_5.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4fd496bc130e937dcde5fa03ab4383fb20ae21 GIT binary patch literal 1192 zcmX9-e~i;)82;|ZuDjdeFcTJ8LXQlx;})4xq~HwY?49E*xx)2ykp&7=oN<8?dpN^L znlR185h@NXVIh+&I-q(pLZ~|8fTBwrT!|+srokmnZbvS<;1UPnkIxa3=l%81`y|iv zzK1rA2IloF>Hz@E8`&^4)~c&p(QoZ&<%59-od9%zO&iCDTVq>WTYGzZM@L6zXQ#zt z>FVl25X5S=c6WC>-EKFA`ACvr7>eUUg22b)aaqpf^Qxvzn`XVyziSuLx>|C5I%E5A;H%p0{nQhj!fD5o* z5G8=bAUPf>ChbPf(I~rM%?BGSd?-PvxdEU7U=f73+eMd4@_4d-|2dj2g~Ns@&Sf&N zSae|yH{tZrsGs!&cyCa|ILR-h$+$wL3QV@ls%99)UA}g5Ah_Qpc5H3qw=aQ zYGz8W8D}8x2^9%m4<;)@wk~P#9PM>*xGNg)CWHPQM-~J| zk8_4BRF!zWC^vNlRyDf=_jrRC9wx{r!z4K_9gXIb$zmp>t7>I>x?ZnC;NpQtMzEZn zEV!7mH(VhT)ljw;E!3syM!xpYXhNIUZpWR@0P1GEKF;qKC_2Hmmc{bPR4JD?HN8Pyi?aP(=W2fhJ*0fJzpc z2JHbn22uo21HhyKWB}xyFp0q|4b=!NC!m=HkBr9wMS>uWL^!7y^`@jiF3S}Paa~tx zH66CNTw#F4Y=q>bvnZ>2c+)S{LrNoBXv*b>Y6Ti~j|1Q+67bnW1R7zmSeTN;NH!%F zl$5S1HB*C)3Qkc_1<(W#w!BER=pMrrkEN?sJS{(lP%e|95EF@Tu^5l};Qw9a@n>xJ9{s??*eCd8~he->^$ zGiIa1yj7`s88#wb-x4CvjY4t+# zt$|;(DdYa^cPC~>-dO(cyQ3#BNbB~co7%O@x91(N9bUF9v%0o>bC>Tu^XT$p$Hw}8 z`@1l6M)h$@I002;@ZrR>hkOWJ<8? zq}K~05fRFlU_v=5RvM%#TBc=DBd26MxII9)!jvy&2qjHog-EWFC@C3XROo1&c90IQ z!5gAOaW5O>2@lYr=HkQd` zAP~_&>gJ(-1P_a-n9P*I9pgG*+8WMqW7%MOE-?dZWC)@V3RPkWC6gPKN`@dEhN74) z=yZ+xgUM(-o5FyB;4u`!8pNDM=CNS`2Nm|1Mgwdj;z=i>+3Y050MG)!0Kfqd0ALh= zaUOt0kT|q4FyMp91SthH3S1ZnsX&qhkOGhvLMIA+Bn(+#%mI@=@HBV@AaI~1c^0FP zwaQ$a%I`CV!}fSQkWR;8(Mx0ksI3O$grrYw2ubOrlFR4O6a=SwA#?SzcMhN*BDNAc5&>)7a6nan?!eE>zmS3^1X6oq=?CETyz?O+S zy8$R&souU-)6#SFZQ`@&^4i!uw_#P+$NlBC?;KU<7C&4PoER}Ty!h+;q1GY&Y}d;> zUO&}6w99c&-~8{RU5A#1Yb(ODppG8-eNVsPfPT6+r)BiQ=D|w$lZ_*=WPR6EZ~9zb zgXN4DZzN`~(zgzu+1l7!;D#jjlY18}(^A}T{da#{IM7x&`P1Xlnb8TY>%j|?Yx>TA zQ+mT&sK03Pm|sEIv&%0F7P!Rwm*$Kut|sKl!f%nn&yhQWmDe{-WnByR-+jIelbLzU z-2DrKEhlQ@nP29%Ep^u)njUFwyr2D|X`a%YUj1jv)^X%=d~<&;M9$a08fhAacSX0? zG|tH{ldb<;68rwxy|!-p5;>b6>>lE73+@cIYDSUMRPVM%EQgz~Z5r5`%7+Fn=fKOR+jY-Q2eQ%(kwB{{v+_ BeWw5b literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_1_2.png b/resources/g2/track/bm/large_zero_g_roll_right_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f635df1b5c7637c29127479ba62ad536e151d5e4 GIT binary patch literal 1710 zcmX9-aa5A`8vcnUptsPlL+e}PDseH$Vf#{c$BOLJONPhK{F-!P3y)N+(6~3cmy=BC zNE=ROR9I*!^ZNj#f~tybWyv)qC51pBq^72(rKK%e zv?x72ok%2-NF*|uOk*$@Fw8{|0fvcWGKos1)ai6)v(@QzdA;MIP%IvYxj?`Ns3=n+ zp(+$~wT7!V@XZ#~?v%PcDu2Kbj@S?mQOwU&ifCFf-6&&ORq!<(;xUW;PG!iakA`fC zm{$k^DF>(pz=#p;N}|U=3EHV~KZHlQcwCCl8*$vr000F*N+c>N6fFc9Su7i$e+@-_ za(Pgzov~VRj|YOO3;~Uc()m)BP{|Q%VVRMyvLHH#$mGUseyJ-Yr}H4Lkio||A{kGj zM3j0|Z@PZ4VeN_dpO~t2mloWG&!Ja0Lw_^S!qHiOX3kI17bs1Ws4cT_%)P6 zmGL08kYf<@?J~rz!U8&3(5#9$bTN-P5pduUFNMlual|lBEOoZ(e#0_D7jy#O$BNAIw?T#78afO*tZMPscks_vtNN


K zziN7h>2F21vulG06rJ9~?xuO7={?BA%xde?o&9;U9llDGRdZ&=*_v7S5Z0f6ark;( z)8z3r1&hxP`p@;S2{#pHCaw_+V<&7aw^02$!KInFT{rJ(aEbA(vZQHum z_6owC(tke5d*kCBW4F7C^IA@=DO#C!s=amN9uZ>xvVrmIrM=rn%C=N7O|CT~6&u$R zZY|^u4UFacu!bD+QrVFwQxlO(0}Rq%J{|ejSpN0>`}ohdo?UoQF|y^DsCRh{SZygj zzvt@oT8va%HL{Yhg8|(>P?@_9{4m`4de^SrR>GkRV&>I>?5!Bf1f5vLKoqc*LzEEPM-dLaCv^!gk zJ?mMrq^R&4p&WWtvmG(C->55Q@)|-ZKXF?xw%@QXyhdqxKKHI?Z)*MF_vp}i=12q@ z8p9+99wbgC+UlX>Q(s*ip3D2UoRK&ASakHcl-kfnRpmkw+}wC@92MRqXxp5KWt}xfA0(agT0xb9BjNpxc6Dmbop;{Br(bK z^8Eko=NmKbb`LK7>pPp=ce#YgRd>5zWe+X;`@PZ)xy!%U@bbuoK~#{s8{jjKBtQ0+ fH@6=}nawHiq1S(jj-4+`h7OdMRhIT{s%`l{=1v3e literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_1_3.png b/resources/g2/track/bm/large_zero_g_roll_right_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6a60203ec2deff9e97284d5c603956bffb5cbc06 GIT binary patch literal 1202 zcmX9-e{2(V6#s68-F`?K(}gCKP+gaFT#6!<( zd7t+_?C)ciG%srg04(X<+%sTurx{(17Bgr4Y8(Iy=zn!^quJKg)z#P6TP&7Eixw?j zyttvE0YQ+)#>S?mCcDe!!f}kIDV}Eq!7E8(I2?}0lj(FOpPw;|YORK2fFc3Mws^g^ zK)@LcVUZ{qPjIQUFPoDJdbCtlX%z90Eh1}|Jx)b%CnbC;Oy}aBLRvJYBNaoPujUyC z@Sz|`0fk3WB9e<*iz!>J;D8kj)_ib5fiUj^fCIpXAfnYOI~XVnG)!% z#Oq<97?;XgxSEU4>l!TQtv14qdT_!|(LtV%3PK_nOh==+WKz#$N;5OnY83*92;6Z5 zPg&`#gD;@|5*;af)k-j1Rc31G%0h7-wxCukVYf3*7ms2BNlGji@tMOy>1b>^l{WHv ztwaGIi%7gx_BoXRng~%^gwH1Y)0$k&B`U>yt#$`e0C)h908jwX0GI}#i~wkYqhUyb znhK2~=LRAUVid?Qz~BJn0Tk^pibIuynE)(AprL}t#uI?0frmo^f?W=xF@;H~LN*)L zb*)m-p{eEY13c71DRxeE`Z8|OAeE|Ds|B<3@xnr;1dCO-4G>O*!K_}&8Q}4dpH<|5 z8k4hHOwVf-BM)mOf@NU_Km$N%dJ!?@p1=_fCCX(Y5q|=yP@uhDJ`fN>ArZ&I1Qw@o zjmC2zF|_{Z z_s=xmgIuDwb*}T`j)TjWzPEGN`maw7jjSFEkKcZ3_itUHrn!4{wugU@AHRmQU;d+R zQ`_BJBjoJ-ijy}^`1_u_P44?*`JZp!3Uwm?fXK1hz~s%3Ey**p?IziK7~wzRV`~Katq&0GSTxNo%b#oX$=gt1r84pTXvmWj(ze# z>mM!5)otI}{H?l8ufO|ZPk!!@?f&qw@$%X)AH4SZmcfCPbGGoqp3Mh3_Y56a$8kT( z?{1h~@fBrlZ@afm@c%o0dT-*W^_S;ACobcYN3@-1jzj`u)3(XxcFV)hn59C;_J-oV z>zCrTZ!SE2xcg$8Mr>``PaR%1{04RP{!b^4MapkIx}yH|?0=Rc*zOPbv-=Tq@t}8O LU(cBhqlf+ntbGaQ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_1_4.png b/resources/g2/track/bm/large_zero_g_roll_right_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ca3715a209737919707fa1958fb0b59263084486 GIT binary patch literal 1085 zcmX9-e`p(Z6n|~nUVqpH%vkCoizC*c*Lu@KuJe@Jb{$!{+AF(iz#zAI(|{3g>xrqv z5x3LD8OGrPJ0aWRh>$-H8l}QHP8Mzc=roKQ3mElQBE%WBN*GzKSmbNQ;Pc+&^UwS6 z;q%_<*_qJr;PycP7@j&Xd9X7d?bH+fu1-HnAAJ(Q1+&w0`#ZF&tE;=a+vRfg^z`)h z_V)GlVHnom-#;)g;0*)#iCg*R~@I-Zj%HsH1OO|B;tw1 z{P6^lO4E9lFBC<$kV`6C(!-Ua?5w1kPJW|R4*5XD zAI#EC6BSHaMz&VME$gG^=Q#mnb%BGzx zI~luKsBe_q40r_aM!}zepoUR7Z>SiIlo;6#r|U|-rIpbVk9#D_7Z2g-FkO&XOA%~U zs_9C@P+KK^!!}T(?DkMWJWNtihK&nCT9UHycrl$W<#M)Z)~nT4tA)TPLr}-af}6E` zLIsc3*;FHvZ^o^bR&5uXo3#xzguC68*BkN&1e}m)TH*MV*jbh+rZX#rqEoipbp}KZ zQv`QX^lLFZn_!HTU}d8#MzU7QHf!Z}dkrxFVE_d{126zq02&ye4tN$N6lCO)Q{#gm zlaOJ+41vP~5&+3wlqON0M`jFFQpm}}-QX$USP1i2O!6kGIrT$ zI%U+ZQyhm(Kn@_($s*N}y9b||$Tk{OR=)?OQeh(zAr_Mo37I5RiqIL-V963kRC&A^ z4j|Ewl0lRuk;x#N>l{BdK6Lx;54?GBMu0uP{_tvttW8bsojY*)%#FS0)Lr+vW>?W` z$H%Yl82xh&(I!7aapW6$+2OwK?3 z{Lh!Kc)qmSS6|tD=Z)WQ&E;a(e_QA9;2<``sfiFORFs z%S+CD|MrWkJ!50fSl;dzww*h6d+Xo!r9-=0nevXQZ?;|Dwff27!+MW(B>l@nKb_q= rcJtfB!#@rqV&Vg@`KjCa>+JhzJ$ms3liDM6Y{S(4naRa{hfe+vO6b`q literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_1_5.png b/resources/g2/track/bm/large_zero_g_roll_right_1_5.png new file mode 100644 index 0000000000000000000000000000000000000000..2900f8586fac36aadb95261a756c955ee3479996 GIT binary patch literal 1251 zcmX9-acmQH6#i|4-Pne8bfjPtOQ@!77k9xkyTob^xh-Wm+>PC!)q*!Uq(}+JylELV z7AZ-Ym7G{f6KYbks?9i{WJ8*G!HaaVVTHpKEU}rD%~%knNF9w3_*r7|z4yKM&-?!P zzBk;{ZChCXL_GjtVb_|D-U_!@%2HQT>0%T8BLFp^XKi0+Wv!~Js;;iCsi~PaZ{Ga* z^J{Bs5d^8Lt6Q*Ofx&Dx<2Xi9B+Jq~?-WJB@Arqp(L^GdN@a4nVyT2AnE+A@9myPR7X(KFPu*AXp5`-x;01N;ef(SaD&uEk^mYCH#&M=cMSJvmd z8I3|!HR5_RX}}nhm9y9c)b7K1$tp%Dzf6Y|HkRg+IhTnrVm7mtMQNUJ3X~9F0#PoS z6q1@Rl?!Qwc)qOaNT6qd!39iSV380aYOp0NPL&iidoVA?ic$)WGpL>?j2;^rv|Hmm zrHHKN=d)pPR`wUwa9NY#Y)YpmET|nPTqNaT*&xqHJf1`_s79k&GMUe0ip3%XMgdsD z2p-o_ijhsDt~?c(b;b%Fr6^@eiNgJC88)Cg9bquoOlB6vc&k;UnE+Qg=1l}clkr3@ zrIqp|;Ali-bw17{xzUK1lmo01aZSp;tQsj~Q>D^PNCIH5WB>pO02zQu0A>*YD_|(- z6`>r1xh!J=0uDkXNZLS-0gweyFu))VV+>5XVLAYFG4RNE0?-t&Gl-iv_&jJxvc+S( zqWCpUE)+Ca(K5OK?rk6?0~0fGNsExPN=2t!@+jqS`hGGGvqg&@5GKTi>71m=&Ej4c zE&1HBkWZ0AT1qbDQm~XKXc{H~%mD~1UIZ#~|HJ6_MrLP;Ncew<=``hZvTir;^$IxV zC$KPy%M`BCScX9hb~EHm&}V@W941Mq(UtHM&oun~=m!RSyIHX6_p4hg^P#Sem-^NW zAHM7y^Dk?x?JujRG9N7e`r{+}Be-SRhIR5C@}KYC3kCbvzo^b{e=U2x|^1t znYbFSBhC$Rj;ZI{A1FSINkncn{7NoGaoxtBv&KYl0EcXqR{edM?p#@g@`$~&LE-m^*Ey8GCU*2tcr$<>>j(WM(ET(0rqa&Jq!XQ$)F?s%{7 z-IXn0m6e_YUBt>2$P{s8$=t>pgCot##t(O`07J#*b>6FYM`!TI_C9VH2ppYbueDa) z9^Kz~{pgu9i$+d3-^TTU4O{jtI{4e%rXAQD57sVwc4oBC8~o;C6Suuy_~V3nT%1B1 zAB;wAGuJ<@0!{ZqSz4>PQa7+zqrYelA36M|@@4ZtUwPO2O7p=v-L@aDtatnx*j{l8 Nbai%joLJqz?>{XsFTnr+ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_2_1.png b/resources/g2/track/bm/large_zero_g_roll_right_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab00a9f28d3c571e15d8e9287ead10999eb6d56 GIT binary patch literal 929 zcmX9-L5SmI82vh(nRK=c6^mq@9I`uI%pph)LE{o6?q+toW0uLdS;(P>EC%eMhk#KE z<`A@pAVsoJA%`A%2vQ_q4X!|l;QOL!#f2nl}cM%Tjg?jdwY9lXJ>bJ z7sIehrLwoThc_AxmSsdyP!vhmTc&CBdOgn@O(tQI%(85?Ub74cJjhbD)v9+oWY=Px zKJN|X@kEPabDH)SOJAfhm9H8SZmXoLQzMf->xr?aPA5io?&O)jStU&ZG#a`BxC%Bl zu()5FkL&9xfpP||HFW7Blr#Wj01d;8TFoX1m!f>0Ka=J2c6)By7o!o1V}h+W1e}pc zUZa`@t=g>a^5#(N1=1i={HYdZZIUCHW`kE~N#|OIXgIPn(ng^XrgoAI(tNzw#5Dox z3gB%ZEudVC8{y3f)rtipRr?FmU%3f7lj*w75#1);SNX9nMy8VX^top)gWf9kHfeyC zNv+ONw90aALF_6@U)P7-?xf$3N24?h7qi)FwL(A`KzSHDu89$$OzHMQbe1hY??x+k zww~md^9`!fwHk-xO|qfTjL!3>Bs*FmW=;Bo^YJ80()B_BO~Op2W^1I|p@)_bI7&2Z zp9l6l9_I68y}m#KfC^v&xBvmbIlvMFR6rJyWum}G*<7Z;U|}FY*n~_5qyRE-)Mt?| zqp*Xf4$6FZ9y|w<2&#;AblmRJ1GhQ$^(gA4X^`hBD!hm`uvS%YaoH!ekTNpfUA2OB zH`;j9%W#3_E2<70i8Yy8OCUQ6YqcfU?)U>c3I=Hs=41>X7lw+{*;A0OR%_|_MH41U;$YnAfv_8X_p*X8eSNr%^;Tz>fY-JkFODZTpU zS1*5ZulnAjXHOpAeZLbO{`hw3l^Y+IUi$Ca?TejHUpxNm+k>aSdZ$+I-n{zL!QC%! SUjL<#hT}UYN8j9j^x6MXb%&1t literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_2_2.png b/resources/g2/track/bm/large_zero_g_roll_right_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7bee0039e6e161dfee46e9e8b889776e0bbd654b GIT binary patch literal 1100 zcmX9-Z)h8J822|tUBgC0ODnYX~NH@3m)<7S}DS(QFbvKvRHY9l@Y0 z9QH(_J~d7yQ(QJL6b!j+#;dgqgChaTA+c^H;L$`ZEfcFT#z+RrdC4lNbt|*mDEd(# z;2=T+jYqN)V#J-5tgBf@VciFt0^HLeEP4Up01yyFayk_h)i5kWQL7wR3WX|)vYk#t z!$1j_mv;L&4<%rJ2@fcQs8Mo?iRIWtfzOl$-3oa~)aUn7JkE+_P+}yNQ`16PmvmDp zS_!kBt?n958n}4i4gpUTU>ZWE-TpilG-$~T#H(_qp%vjOhr2`)jrj3+fXa$YLFUbv zSV_vYT&!Uvcg-BE6`d{;!vh2vqL~QK$3-y}iR9yPBb_#Ny}G{MXfz-|C4eOnBI{%d zC||}yRYt7^GxbQJp{+Ob^}Wh2bl^@W>2~`)ULN;}6eY8qD%i`S`FNs~&09sYS*3x% zA~Nq(1dkTRQ&Bpn@`Y5Wlv653s$MBJo7<2EAOL_2fCfMg06Pga1V9@c1EVs`WuR5z zFdz{iK?B_nEDk^(K*+c<}tzoijH1XJlyb#IbYdehK!*4)5<6 zzi&MA=>4ffSA=ipT7T>Rb8|8D{Y!Tb%*zv_hh9H=W%X$9&&%I5-+uDU^_Dqlct^dx z7U=&{{I0M6-iOQkUpuuW{`l$Q>hUj5k4}C5w8*Z^^v#U?QR#hbXKDB1@{)UF{@`Zm z{N$=rn$$<)@C>#gPHUH-lBn$t};O5c&I! z&$d7L_1TvfPThKI*7(|ScMQ9B@}0?R|E4cqnEL(Wo0F0fa&kZ1{^+X>`wC!Wcx-6p Ih12u@1KGdddH?_b literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_2_3.png b/resources/g2/track/bm/large_zero_g_roll_right_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..9ae6c454faed44afa9003b021c41e876aa3cf052 GIT binary patch literal 1388 zcmXAoe^8Ql9LK+khDwcVv{*8Sj_WWVliD+7jq+)tL!)}kr$VDi^;DRYPxX{sV;xtl zn9@egAGpY4$~h`J>DKPZqwTpJZMJC9qMMaa!ZQs##_xgN3_xb1Z{^R}r zwAC(EOv%a30RT*?sjjR`&9YRzm&Ho;3k|C}0bqgJ#mlQwYg$@bdU`sG#mdOY$jr=~ zG-(o>&Cbfo%FfQ_i$o$6mB{57K`2R5P1BUgWU|>D9*@`W9|?!!i3BPEm<-@bj#|yr z>4bWN#B7n-?6}LL@iBBDXo*Cfa)hmtaVRCmzG;B7-0~&8wE0hW(3XzOJl%!Nm$tg2# zc4!=4${RHL!yUnxE0Scm7~m0ruLVK_5L?+&2Vdb4s~L<6sw@%O8Mpf3DIDREQh{E9 zSX43>DfiJt&_sr8bkuE%Gqz;V4WoW8Pbx-Ks8ox|^#oxdNxNR}u~-;~Bk1);Mn>ZC zI0OO;h;3}t#g+R6L;%r7?L?9AUCZmVvONuSRY47y{nAWUfqv;Z}5Fe@K-3N>Ca6_#1!YIj2KOWFbx-UtlE#XKMt zvK11p8WZXW)Sy*bjXGzC(dX_6`rWaxA0{GFr4o7p3Go5E{kMjzTX6gUVF+rL#GYUi`q0x}^kI zcxQAY0O`3kmG3XFZtLw*p2Fujfdn$$bz2#d>zl=(Yx|W}(TW9#|oL&8}NU>Q_Jg$-tuO}+reT%)0`TgwKJO4Hng>uvPEPVRRNM@C9 z9U_kH?>cO%n5cR>zdf)2{F9xNS438fufHhVQuOuO0(D>4pobN@cEY{3VBf(9Pad%@ zOkdPozd>?$rK7C-i(R90K5yM?*nRPg!`QS~JaeZL8l(-v+rRNwn*XBDs6-y|aL7q2W@T-bVOLFY(c zW4-E~0Z_21b>^3s7VVqUSJpbWX@1Y;x@!7-Sx;~E_0hu8f%<;$;HrwIeb3k2DMrSL z=0)?$=T%)?C!7B52WfW)?ggg(T6m*si6y7fk~s1z|F+{3>7Mb8WcO)sX-J)GJH{o9 z=eT=xovff~Ka)9F+c?hOye%|~ePEON!~EGjck>&*c{ue){ZwQ2>i(x67ghxe%}i!V z-DC2=F~#oES8mk)#lJ$f5B>M%GLxaY^ugSL>zwwXuD|o*0%pU2Joi@pE2+qUnyRIh JgB5G`{twa&WmEtF literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_2_4.png b/resources/g2/track/bm/large_zero_g_roll_right_2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..5f264c23e61c4bdec3306aa05aab3c082d581256 GIT binary patch literal 1178 zcmX9-e{2(F82+GaHyBIR5=yAykcv$>vBCvUZO9=vIO;7s+>sS&e_*`n0YkRrvxMY%fBo}5$@9GL zdmFpyjyVhG0027t8#;TM6>A3CW@~2u&eMJXY+z&8rghD6#*7&=XU??QY_n#~YH4X{ zZEZymq^+%O_UzeCx7&^5UWy_)juC{QB#E(DES1XS^94;CHw@FVa4#TzfMwc)K}R@@ zMxx$$!k0?3xjbJiNfkX&t7j<;3HaJY#wiC-Met-Kd?ZGdQh`cdG|KUYk)1R(+68zF zL`a};NKQmb341l?uqrOt@Is4+QwoHd8vqsn9zjIAU3R$?k00 zba53dRHNecV73t{n##D9Z%kDuVLN8G6HX_Mx;e}%_#`)&5Xg-lF=kkW8TQw5! z3?gxMnMai{mX4BYoGYe7WmT@0(v7NSS=S*6KmY&<00jUQfHDAe1i&U(3PvTUW}#7K zJwU`kk^}`B7%YGsfT9y7aF}IbAq*>VXk@`%;|ah}AiyGF!6`?uq(bMiLa`Xrb+ysZ zVUx=h0(i8YRGe%Uiwe~(Z5_t8>%Eu2G55Hg^K*pYE8#^=i_f_?)M;D*Fvg_S1cTOz2^Vk=k zEnC&nN1oa>fAIaEss(f3JKOFI^puN7jnf-#{ri-mZ_nMDSbB4C>r2#V@5`4DrpV7P zJexeTzvI~I?SnU3TURvZO?Bs199eR8>}=o34~M5a9DOTe^zyTRUFjV-_V0XK;J4}9 zM>an-w42+YelzdKQHfac$o3si?;TFR{>R}mHcCu%^uN*D)&9x;zR~M{pD-)@@vr^Q zQ}Ll!NObhp5(NV<+xkv?gzTu0>q9NpWw7zvc o96sd7_ncQw@;7}yyvDob2Zv*;FVg(Aroh0zuDkQAwJ+}bA1wtA_W%F@ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_2_5.png b/resources/g2/track/bm/large_zero_g_roll_right_2_5.png new file mode 100644 index 0000000000000000000000000000000000000000..9ee4ba0c92deff781e12eada001440e467ecdf23 GIT binary patch literal 910 zcmX9-F^J@382xrvyp6jS6NV2UY%Mi?+f z#2|x2NHIc?5mTg?BIpQPq)3s26jKabkSXRM$RGm-JtauM5x4lwaqzzH<2COU?|olA zxbEM*^ZFeCxO;W~@?mpdYv$~<)$Bih@h<^d@ZiHo_ZoU|aBz5d*lM+oj*gCxk55ic zFbq3AJv}=+!+X6R%QB)UD2k+ML(?=I$MOAOv52#5T@+PavkVA4$WnVa?2bm{*kUFw z@6Y7UK8sZoMK<$)H+Aw;n=S4?qS`G0f<6Y=ZD8D&+YaSzhY;#q z`UX9)SLqjws@+44$*obpGE2eol-|o|n09^%e z9Y_l(590#7zo3SxVB`aLYlfAVp&Oa*Y8)}{)9!$uYhq$5xub1-a~C;P>hJRi?Xpgn zqv!$4>4G>`6j#$`c)MO#RfT{sfbubR-VqZ*S<(7doa}~SIZi5XT`$Vp z%^tPsPKU$sKG{=fM&o%?k|$~-W-Z+5a=s|Cyxt0+N|>p1Y?bsz^vn{XiIU9pWn^#C zS-HvT`Z*E+1^_022M_@)0d^Rm2C|4O6Gb5^HZlbU3sV8&J`^$_1(1OwmqnqB;t^U+ zP!Yn5;5m>)7|7U2!|gFW_4@NrOA;r~qq59V<3;GeT5Z9@<&ack$|!iR8baz>)lfy;_uI^o5{`kS;Fa8ItQ-W{+ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_2_6.png b/resources/g2/track/bm/large_zero_g_roll_right_2_6.png new file mode 100644 index 0000000000000000000000000000000000000000..908cad8ed5a9e9462cec3ddb5de990cdebb80d72 GIT binary patch literal 5167 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 UwPmHXdAy*xp{0J{&G!%e4;9Exf&c&j literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_3_2.png b/resources/g2/track/bm/large_zero_g_roll_right_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1e5038341ae54ead7220779b8790d926c6c21e09 GIT binary patch literal 1291 zcmXAoe{2$G7{}j&Emf*);z|`$G&sowW#%?dC3?E6JL?&*_MA*f#Cj^3xZUiz;DQTA zy0FUJb;FD}RHkTf-W1#FE{G1ZtEnqdwsne%4OvLU)f%#4L$qe^FecyU*FVqqkI(aT zwyYs0PM9_U05Gw6Wm9XV&Z&f{R$j@on(pleKn_|~uUklR;}L#%B9{g>0l;ln5=b z8-WW0JgtbbilkqaiKo(JS}kudL@btGit2YbG9J&P za2O_&T12hKG-gU?u^R~1X!RfrZ{b3?S0DokI+C)BS%(hQnhCvyHj)f#V{z6;`NHQv?%5V2aClb1X>mt zf(j(6!V_9LWpw0lU)~lexDrKvuoNqdWy(-#RH;ynhS2G0qnWW-IFj<&E6dz5f1p1a z%S!1|4g+>l!O<#@UB^3(AvY%Y=tRiTFL*M^P$46gN{=80fE54^03HAVfPMh-3IHpj zaOmcs5P{hYWdJM!0vHepkfi{m0c17MkH828MJG)8U^W6?fJXs|11qI)G8&J|7~qL$ zgh?d4>9kNNq+!KN>i~#biSZgLqO*$zHf!OFHlgH7l!K`;F$Xh6gBqYZ1z}d%FrAY| z+zyiWI3od1LI|WKp^%keDTk6I6amZv2rDdn6}y+xdflOX9t{Owic6(%n~iol8Mm87 z%wE(S#1H{TlB9W%G8U|QXxBlH0frDLVlYisjvt+?{O83F>~38{gJloyY_Ih3=BDNA z79Ko!Xl=VRqpm3qZ*BA*ZM-(4>mgy4E$)7F@1edifQD|Z>WkwaespP5?1Q&<#zgCiM$=+xX!)d$zInH& z-*|hdLI2ws?)bxb@JZLla^}yQUGE<^p6j0C?(BIT62qG&Ef7A}PX3W9_P9<}1yFoXLJGNWa%pxUTM#XMk#!VY( z;t>id*pQ2KP)U^vCl;wv-t;n>r6g5KC~_e~N_Go{6|B6thFo-kL4KBye4n>}p6?%@ z=h?Hq%~n5i{!9QseQQf|N4YL8$D-OCHl*Jlj`iExCDC0xlApH+hSf<&Q+gQ(@~2EkzxSxc11&iJWR*pW?eY9>%rrO8s- zW&|!2cu62KNQ^^LL0vAU*Rn=fv_j1Vr$h+TW&mgaTnNJHbb`?+S}YPloT2HA+np1H z2hk`@rHq)~Od71TiEvqL9O@7-RwVcc<&WD#Nk+=LWYulLjaHkPU{E`YJ2{FA(1EBc zDs!?Tq}7m8jO8a&Iuhs^U~mJI4_HJ5j~Z+Vi!()XiX)ikrIMJ2XJ}N<;zq9x4LXPz zOC@Kfjd;C@U@#SpDzcm(87Y-Y5EwaN z2_slcM$y~&a|q9uw`xk*@y>U6llU^AH+)XEYBZ>IyU@-kl{7|O&F zYFg3qByiagp3w;|ljuPsJ~AF)k`Z?%F62^?VlJ&|4}7NV%vVc_23j(?WDBPfV#yiTyvfOMc1q5}T*;ybxCyaYbxzXcVKATD zE(#tgBqZY@B^@uSX{hCKyB*2^ssO?=i$K}#g^Ye*q)@;k;TPhwS<2~TJRa8P<1niq zw}we9PGKp#b%aKX4l{I_pkRR!49X-_?B(OfU$1@i{09a)+8D6Ft+StqV)K}!ul<_;kEsJhwFO2)t=7THaO?ffN$@zcOa J6HS|T{154aE^q(< literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_3_4.png b/resources/g2/track/bm/large_zero_g_roll_right_3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..cb4089fca5d6ec7927d33a769a8ac63d05a35834 GIT binary patch literal 5329 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_4_2.png b/resources/g2/track/bm/large_zero_g_roll_right_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..83e7d366dbed98a1dd47b8d30417b51b87ff8b6c GIT binary patch literal 1122 zcmX9-Z)_8F7=E`gZd-wZ4K`4v#>!4}nv)&N$@<~cD|YkdZsTSeR+7_Pw3rf3xsfJT zb7W^yvB1UjLk*2-pdlq3P$Ni`? z^StlT>8bGgp{+vzuzq4Zw5MCiZcGpKb@NZhZ+-#L2h)?YySrmgPfu@eZ(m>Enl)?s z`}^0fU5jDZz`(%Z;Gj1U2v8KsvWy^bk`z@GS<|#^HeV{0tJNjjcG_)<1SSYP=ZZ!> z@wh*cBva{NHpdrBV#QQyR=UwFumlzfx@69)M*O;j=N0Ob#+unktt8uvsg_;nIMuKZ zL;?~F=mJ)hF*EJ17d`Eo54A|t7STf;p=tnt2M{q#cDq%dPsi~>FnEdQ7h|!ys;=hq z$TWSFC%||~-X9e4uuMc$O45T$j@1kL6rakA`LbNL z)T*7aTE#}kbTi-)z#9X95^x=(^WJa?kD82ZMbZtW;OJF!i6=Y~?MsA-bR<}m*oq=p znpDp!O+$0cY{xQCv+DNHI1!=f7{ew6AuUO{M52^VoB6y|E;p8z9LGW6lL60SRME{= zd_s+gHP}=$T4*IIj=t0`wI0?x$VIr_wAUN<2LytYfVq~nU z(Xy+k-Jm%Rl>ym+P}hr8m+moqS~Ayc(z)zoD76|JjSBI&luXJLsnKMXp$wKXIdX|7 zT9E(}{Yb@8jzVPySzPz{>6cs&9{s@lo+$xdy|es&x8FDsdTn<6=%0}r8?KU+U`>fQCXSC&6K@)z~P z=z+$rxsfYx-keF9XMf*&e188gccdSu|DlFIo}5(2gCt8v1U7=kS$np2LTFxNG0{Ph87DgLQ>heMEoC$sEf$;0<@Wgo7$y>pqC$X+03l0PDA*be zPp21}%p!}GaJZBnuht(hhlcGE0U{TrQ!9#e3Od+PKNp6DFsg(TG=#o900;n-2tu(~1}>N8^X(#07eVx@)j@+{ z)MkTTFBfI!;T$2s6Dj#pN+36&Dq5tqN{mifn}@Xfm2O7O!?;3eo`@94RG5O2P$t4; zQ`+2=J7DlJZGo^OH11{LfK3998u0XhPa~L(BX#i=UYrWZ%^|HlLi=DBAz-U8u1+d2 z%S8^A#G@qxMpe+F9d;TcUdwpE35R_wHpUmoQA~|XbR=n3sjNDk%WU@AYyr1BG%yf} zL?GZ&fNw!i2TS7Nl74|YBry#u>|vcJLJve;;fdflOc$_N7>6U}<&grRN+i?)7P7zjAS;Q)+jan%6Tr{gq-u=A8|KE;UWh{74wdB!dN33mtvBYZZ% zc!*TUQs6udiR#rd+Muzw89dImfX^9bd@vfqWHRUmkO2_JyfDS&-hpe>TZe}+tK}WE ze!oPaAT=75UQeMyBPO)qs8fP^Wx@eM5SHgbB@Y_-(27Dg4g<1S_^}Vt|9SfZ&9zk| zSn~MpS^(me6-!I&R_-|_XF4AhPwI#8URg!MtEqQ}?k&@ZIKQpS7cbrp8oq4*x_2X~ zdb96koe$sSbJd`dA>28I2TNFEAj1HyF!FkTAnt5?sFI{9DWu>x9 zoo4X!DrZqjb>g{j)x!l#x;w?7r|9v<#q{Xv)?6&>hM3q<=Wkw+c0+u65ivF=Sl)R4 zaISKa+41^n$BOUa>%NZszCA1Y^=NtOoyvbpGwV-fB&P<>dpRSswqlF6;Z;?^g>7bz62x2|7JX_;Af|8U%f zwhtQzmSi28{_W>~a9f+BXZ9V;-jm*5-EAtHIlIH3)tW_5p0VrK_}Y1mpJMl$X0%s~ z9JKUa7&+fqQ=6Z5&tXki3$thDgtFZ0*vkqwNnTAnnp-^4V(+^;#4-18Kham1Kk^Nd z!*ttEIx_ot9a~#?ys`rg)7kdt3#n5_gtPbbE&S-h`n2OW3(JV{D-Sx&-+guR+T7C& z&bUrHroPW?1Am?vEy>!P5ZK)GwkKXgs=br literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_4_4.png b/resources/g2/track/bm/large_zero_g_roll_right_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a80a818ce7d33b7becb4fb45931ec8b79160f7ac GIT binary patch literal 1378 zcmXAoe{2$W7{D8VIDx0|B#L1THWDXlt zwxSYc?wquuVU}%JaiNyP+JIupCey~SNVKjPsX|9Bo1J5du4>)B!|ZeCtq zettfJAO!^lg@uIzu~>|vGP#_fX;Pz6>Gh1+Y_{8-Uav0{8jQu#nG7le1P&;&Sf%3Y zbRvUMX0hUS2j%vv13`T_VvQ$Vaw($3iy2a2Qi@oO#HmMn&GMjK8TK-<0ZS_8nn;Hf zLZFrc0|8hXaWhEJ%8R=BnXnM1WH6(KlPrWGF#r?*Y6M|;Jd;q!N+d2E@1>{#tu|^h zjXRw%7!;y>F(HsqB3vy|FjA!n)v&nUAvb$STYz?j)xMZkgb8H|F-}WK4W?q`jD@l| z)lMJdi9OplPc{<1iS!R%_7djQD)K7wWa0!+lZc+?nbaayCv_MJkA)66v;!VfH0Vf0Lz&DtBmhtXpa*~jzyrVl z07(SEER-A?_0Z#ju_z@03<_)n@F_ry0+0rf5kM;nT@>``VAujts3lpG&Sf(NJhn*4lZu64CXSIL^Z^(H5N5rwWaXYCG#eesB<8R`M;{K$ zRVrGi(-@5mDl=m;JAr!SXpoc*Qqq)C4AmlNl0XLveFTh<+3;hP#rK~5z^BcPG! zd5`MSkKX@cTU%>?<ztW%B z_~yyI2ZSek+BXS{{8!edh2GP5^0=O8&Smqkzvj|D0cZB3ob{Y|sKK*t_2sFRBdv;R zS>pEGr_~P{uC1vIA8~(Y`srzR^_@}XvV2FIq7qD-v*A%|=c4yU^-nxyYif=kaSpAu zCCHC|=l|G_{k+-Z_fIW++}%Zfez@V$lJ5SmmwtoKXgbfUTR83E{H14?wXJRSm%np! zy8XuV(jB+V!;Ag5wu6etClrE2N&m&oTk96i{I+P@m&KuRLwjl_w&CB^ub(?rE`!{f zWAn@Yx!GD;Gsi!k!T0DsI&a~^F@8eYHv-FtPu(~Rzo$rknN2rqxck5S@{o!Z9BR4$ z;UA0HEj+`@mNESA7TA&IR~^6I${~)<=-b^at$e9}vL>XzvSw48ikT~WU=sC|&O*=K z-5ze)f2lP&?TpQ`tzxknj@ddBL+|gR(<^_eB3?Vz<=WqJyZNug^e1=QCyF7J73ecS&rYHWxA literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/large_zero_g_roll_right_4_5.png b/resources/g2/track/bm/large_zero_g_roll_right_4_5.png new file mode 100644 index 0000000000000000000000000000000000000000..79546f9954fb4051d538602a3398bbf86909b7d1 GIT binary patch literal 1230 zcmX9-e{2(V6o1>;Zd(}@n%QVEH7QWBuu3kbBt;K6mNH5>+>JEQVUZIXZ00e~q+o|t zsx(mL{%D|NMM`X9qX$+X(t#uLZ45^?v@~*$#jvSi8EfyFNBFG&D9gHZ?U(n>MYv zxw)mK1;en`*4DPRHoeJY!f`7}5;W~(7&phUp-?CmOQh3cHd|1Xs;c5vAnZUnHEy@g z=QH{P)^Nlgi&LqzCnIrrIZ`SoNekw(Ygnf~=rZz*Il5ZOkJ-UmTtS@S?OdD;3C?JSPUbzL;x*a~R)@(>Tbzu|&5~@G3MV`X zkrm}&R*A}$RH-Iu3DD7?_kuA1W*)O8^p3RIEfK8jij=rymCvG+ltstb41R|t;B>~GhBOwf)~44xj3(M*W$bp&NrgT2Wr1`gnoFgX ztgMy@@HjD!)&@OB-e-vi2q8>o;@+GPEK2c8F{`R~5CPx<-~f040U!rZ#sJkpkto0+ zA&HbCWd;_9C;_4a6bcXxh}EMAj*=7-eJCGBN)nz2Zv!U@E(-H8`k>zuB9?{GycE0KsRDY%x%TI|VRIHkHU^8M4tJX~zeKa2MI{Bb4 z84YHHsGJolN*1Xlo70IzKnfsK&mvs6djUfz5HFW)@z@J+`8?@%(>@;)2(Y*{WV6Ny zTp)4DX)REeipzvNMiexoIF3XD$UyYW#j?J|-|ZiL z??CAF>CI~&NpEWw|GoEXQ1Kq<>}z?lmH%U8$L=qCr`j8?Othbvx1*IkonEqf(lsXC zc-G;)J6QSr=*HZ=tL!_*seQ>;0{2Ja8{S8w?+!BGZnWNXW$uS-Fz|Bs7x(gM;lGud z@0IaO%--RP;4VY1?99sxM~AQUpRsQUb*hg)zA>C^;V9UtElllt_3zVzeK z8T%H@@1C5H_Z#*un55S4D$SXCEjRX9M?Kth-2eN(>U`&=oo_wzbq!Sm181lwtA02? zv@TaOMdMwj#F6_m=#nOO{oK&<&9~R*ZobiZchTj}CNX&7kXM+!ZvMW>+VS5m_n+=x z)%&zfg+kYb#{-TB=1aNkwXsvfTect5d5DL{{+an#f7cA#SCjL8-9mrRXdD|E-`R3& o+x1Uo;i-+o=T7`oIJg5%XzOzQ%wx~QdMMD-y=KKP%Qx-%ABcS~82|tP literal 0 HcmV?d00001 diff --git a/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp b/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp index 7184283d3a..3bab58bd50 100644 --- a/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp +++ b/src/openrct2/paint/track/coaster/TwisterRollerCoaster.cpp @@ -18658,6 +18658,357 @@ static void TwisterRCTrackRightZeroGRollDown( TwisterRCTrackRightZeroGRollUp(session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); } +static void TwisterRCTrackLeftLargeZeroGRollUp( + 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_LARGE_ZERO_G_ROLL + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 5)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 9)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 10)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 15)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 21, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 1)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 2)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 6)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 11)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 3)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 7)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 48 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 12)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 48 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 17)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 18)), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 4)), + { 0, 0, height }, { { 0, 26, height }, { 32, 0, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 25, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 8)), + { 0, 0, height }, { { 0, 26, height }, { 32, 0, 20 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 32, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 13)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 14)), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 36, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 19)), + { 0, 0, height }, { { 0, 18, height }, { 32, 1, 30 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 37, session.SupportColours); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void TwisterRCTrackRightLargeZeroGRollUp( + 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_LARGE_ZERO_G_ROLL + 20)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 25)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 26)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 31)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 35)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 21, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 21)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 27)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 32)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 36)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 37)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 22)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 23)), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 28)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 48 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 33)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 48 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 38)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 24)), + { 0, 0, height }, { { 0, 18, height }, { 32, 1, 30 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 37, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 29)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 30)), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 36, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 34)), + { 0, 0, height }, { { 0, 26, height }, { 32, 0, 20 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 32, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 39)), + { 0, 0, height }, { { 0, 26, height }, { 40, 0, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 25, session.SupportColours); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void TwisterRCTrackLeftLargeZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackLeftLargeZeroGRollUp( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void TwisterRCTrackRightLargeZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + TwisterRCTrackRightLargeZeroGRollUp( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + TRACK_PAINT_FUNCTION GetTrackPaintFunctionTwisterRC(OpenRCT2::TrackElemType trackType) { switch (trackType) @@ -19169,6 +19520,16 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionTwisterRC(OpenRCT2::TrackElemType trac case TrackElemType::RightZeroGRollDown: return TwisterRCTrackRightZeroGRollDown; + // Large zero g rolls + case TrackElemType::LeftLargeZeroGRollUp: + return TwisterRCTrackLeftLargeZeroGRollUp; + case TrackElemType::RightLargeZeroGRollUp: + return TwisterRCTrackRightLargeZeroGRollUp; + case TrackElemType::LeftLargeZeroGRollDown: + return TwisterRCTrackLeftLargeZeroGRollDown; + case TrackElemType::RightLargeZeroGRollDown: + return TwisterRCTrackRightLargeZeroGRollDown; + default: return nullptr; } diff --git a/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h b/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h index 9f4e238553..8bbc15a869 100644 --- a/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h @@ -24,7 +24,7 @@ constexpr RideTypeDescriptor TwisterRollerCoasterRTD = .Drawer = GetTrackPaintFunctionTwisterRC, .supportType = MetalSupportType::Tubes, .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::corkscrewLarge, TrackGroup::halfLoopMedium}, - .extraTrackGroups = {TrackGroup::liftHillSteep, TrackGroup::brakeForDrop, TrackGroup::zeroGRoll}, + .extraTrackGroups = {TrackGroup::liftHillSteep, TrackGroup::brakeForDrop, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge}, }), .InvertedTrackPaintFunctions = {}, .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt | diff --git a/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h b/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h index 8334f6df82..9b7124caa4 100644 --- a/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h +++ b/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h @@ -24,7 +24,7 @@ constexpr RideTypeDescriptor VerticalDropCoasterRTD = .Drawer = GetTrackPaintFunctionTwisterRC, .supportType = MetalSupportType::Boxed, .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::liftHillSteep, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::flatToSteepSlope, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::curveVertical, TrackGroup::halfLoopLarge, TrackGroup::brakeForDrop, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::halfLoopMedium}, - .extraTrackGroups = {TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::zeroGRoll}, + .extraTrackGroups = {TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge}, }), .InvertedTrackPaintFunctions = {}, .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt | diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index dee8b91898..f1c63a15dc 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1291,7 +1291,8 @@ enum : ImageIndex 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_TRACK_ZERO_G_ROLL = SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 44, - SPR_G2_BM_RC_END = SPR_G2_BM_TRACK_ZERO_G_ROLL + 32, + SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL = SPR_G2_BM_TRACK_ZERO_G_ROLL + 32, + SPR_G2_BM_RC_END = SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 40, SPR_G2_MINIATURE_RAILWAY_BEGIN = SPR_G2_BM_RC_END, SPR_G2_MINIATURE_RAILWAY_QUARTER_TURN_3_TILES_SW_SE_PART_3 = SPR_G2_MINIATURE_RAILWAY_BEGIN, From 1dcb05f072c3628b7471496d781fd72f8327dd89 Mon Sep 17 00:00:00 2001 From: mix Date: Fri, 25 Oct 2024 10:10:33 +0100 Subject: [PATCH 07/12] Make pre-existing new Twister RC track pieces invisible --- src/openrct2/network/NetworkBase.cpp | 2 +- src/openrct2/park/Legacy.cpp | 76 ++++++++++++++++++++++++++++ src/openrct2/park/ParkFile.h | 3 +- 3 files changed, 79 insertions(+), 2 deletions(-) diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index 0c9016e54a..d8095e0b6e 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -49,7 +49,7 @@ using namespace OpenRCT2; // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -constexpr uint8_t kNetworkStreamVersion = 0; +constexpr uint8_t kNetworkStreamVersion = 1; const std::string kNetworkStreamID = std::string(OPENRCT2_VERSION) + "-" + std::to_string(kNetworkStreamVersion); diff --git a/src/openrct2/park/Legacy.cpp b/src/openrct2/park/Legacy.cpp index fa05855f0f..7bd6716041 100644 --- a/src/openrct2/park/Legacy.cpp +++ b/src/openrct2/park/Legacy.cpp @@ -2563,6 +2563,82 @@ bool TrackTypeMustBeMadeInvisible(ride_type_t rideType, OpenRCT2::TrackElemType break; } } + else if ( + (rideType == RIDE_TYPE_TWISTER_ROLLER_COASTER || rideType == RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER + || rideType == RIDE_TYPE_HYPER_TWISTER || rideType == RIDE_TYPE_FLYING_ROLLER_COASTER) + && parkFileVersion < kExtendedTwisterCoasterVersion) + { + switch (trackType) + { + case TrackElemType::LeftEighthToDiagUp25: + case TrackElemType::RightEighthToDiagUp25: + case TrackElemType::LeftEighthToDiagDown25: + case TrackElemType::RightEighthToDiagDown25: + case TrackElemType::LeftEighthToOrthogonalUp25: + case TrackElemType::RightEighthToOrthogonalUp25: + case TrackElemType::LeftEighthToOrthogonalDown25: + case TrackElemType::RightEighthToOrthogonalDown25: + case TrackElemType::DiagUp25ToLeftBankedUp25: + case TrackElemType::DiagUp25ToRightBankedUp25: + case TrackElemType::DiagLeftBankedUp25ToUp25: + case TrackElemType::DiagRightBankedUp25ToUp25: + case TrackElemType::DiagDown25ToLeftBankedDown25: + case TrackElemType::DiagDown25ToRightBankedDown25: + case TrackElemType::DiagLeftBankedDown25ToDown25: + case TrackElemType::DiagRightBankedDown25ToDown25: + case TrackElemType::DiagLeftBankedFlatToLeftBankedUp25: + case TrackElemType::DiagRightBankedFlatToRightBankedUp25: + case TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat: + case TrackElemType::DiagRightBankedUp25ToRightBankedFlat: + case TrackElemType::DiagLeftBankedFlatToLeftBankedDown25: + case TrackElemType::DiagRightBankedFlatToRightBankedDown25: + case TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat: + case TrackElemType::DiagRightBankedDown25ToRightBankedFlat: + case TrackElemType::DiagUp25LeftBanked: + case TrackElemType::DiagUp25RightBanked: + case TrackElemType::DiagDown25LeftBanked: + case TrackElemType::DiagDown25RightBanked: + case TrackElemType::DiagFlatToLeftBankedUp25: + case TrackElemType::DiagFlatToRightBankedUp25: + case TrackElemType::DiagLeftBankedUp25ToFlat: + case TrackElemType::DiagRightBankedUp25ToFlat: + case TrackElemType::DiagFlatToLeftBankedDown25: + case TrackElemType::DiagFlatToRightBankedDown25: + case TrackElemType::DiagLeftBankedDown25ToFlat: + case TrackElemType::DiagRightBankedDown25ToFlat: + case TrackElemType::LeftEighthBankToDiagUp25: + case TrackElemType::RightEighthBankToDiagUp25: + case TrackElemType::LeftEighthBankToDiagDown25: + case TrackElemType::RightEighthBankToDiagDown25: + case TrackElemType::LeftEighthBankToOrthogonalUp25: + case TrackElemType::RightEighthBankToOrthogonalUp25: + case TrackElemType::LeftEighthBankToOrthogonalDown25: + case TrackElemType::RightEighthBankToOrthogonalDown25: + case TrackElemType::LeftLargeCorkscrewUp: + case TrackElemType::RightLargeCorkscrewUp: + case TrackElemType::LeftLargeCorkscrewDown: + case TrackElemType::RightLargeCorkscrewDown: + case TrackElemType::LeftMediumHalfLoopUp: + case TrackElemType::RightMediumHalfLoopUp: + case TrackElemType::LeftMediumHalfLoopDown: + case TrackElemType::RightMediumHalfLoopDown: + case TrackElemType::LeftLargeHalfLoopUp: + case TrackElemType::RightLargeHalfLoopUp: + case TrackElemType::LeftLargeHalfLoopDown: + case TrackElemType::RightLargeHalfLoopDown: + case TrackElemType::LeftZeroGRollUp: + case TrackElemType::RightZeroGRollUp: + case TrackElemType::LeftZeroGRollDown: + case TrackElemType::RightZeroGRollDown: + case TrackElemType::LeftLargeZeroGRollUp: + case TrackElemType::RightLargeZeroGRollUp: + case TrackElemType::LeftLargeZeroGRollDown: + case TrackElemType::RightLargeZeroGRollDown: + return true; + default: + break; + } + } return false; } diff --git a/src/openrct2/park/ParkFile.h b/src/openrct2/park/ParkFile.h index 61c19360ed..69cb1289a6 100644 --- a/src/openrct2/park/ParkFile.h +++ b/src/openrct2/park/ParkFile.h @@ -11,7 +11,7 @@ namespace OpenRCT2 struct GameState_t; // Current version that is saved. - constexpr uint32_t PARK_FILE_CURRENT_VERSION = 42; + constexpr uint32_t PARK_FILE_CURRENT_VERSION = 43; // The minimum version that is forwards compatible with the current version. constexpr uint32_t PARK_FILE_MIN_VERSION = 42; @@ -33,6 +33,7 @@ namespace OpenRCT2 constexpr uint16_t kPeepNamesObjectsVersion = 39; constexpr uint16_t kWoodenRollerCoasterMediumLargeHalfLoopsVersion = 41; constexpr uint16_t kExtendedCorkscrewCoasterVersion = 42; + constexpr uint16_t kExtendedTwisterCoasterVersion = 43; } // namespace OpenRCT2 class ParkFileExporter From 0e9a64d20b2de459e74b38c6c751e0ef02db9cf2 Mon Sep 17 00:00:00 2001 From: mix Date: Fri, 25 Oct 2024 10:48:08 +0100 Subject: [PATCH 08/12] Add new Twister Roller Coaster track pieces to changelog --- distribution/changelog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index be76fc6ce6..8d1d041a3e 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,5 +1,6 @@ 0.4.17 (in development) ------------------------------------------------------------------------ +- Improved: [#23051] Add large sloped turns and new inversions to the Twister, Vertical Drop, Hyper and Flying Roller Coasters. - Improved: [#23123] Improve sorting of roller coasters in build new ride menu. 0.4.16 (2024-11-03) From c0810ed159a21f3711bb09796261d58bfd2e3de4 Mon Sep 17 00:00:00 2001 From: mix Date: Fri, 25 Oct 2024 21:03:21 +0100 Subject: [PATCH 09/12] Make large sloped turns available to the Flying Roller Coaster --- src/openrct2/ride/rtd/coaster/FlyingRollerCoaster.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openrct2/ride/rtd/coaster/FlyingRollerCoaster.h b/src/openrct2/ride/rtd/coaster/FlyingRollerCoaster.h index 3a8ef02700..e1b61c3e99 100644 --- a/src/openrct2/ride/rtd/coaster/FlyingRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/FlyingRollerCoaster.h @@ -23,7 +23,7 @@ constexpr RideTypeDescriptor FlyingRollerCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .Drawer = GetTrackPaintFunctionFlyingRC, .supportType = MetalSupportType::TubesInverted, - .enabledTrackGroups = {TrackGroup::straight, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::inlineTwistUninverted, TrackGroup::flyingHalfLoopUninvertedUp, TrackGroup::quarterLoopUninvertedUp, TrackGroup::flyingLargeHalfLoopUninvertedUp, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes}, + .enabledTrackGroups = {TrackGroup::straight, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::inlineTwistUninverted, TrackGroup::flyingHalfLoopUninvertedUp, TrackGroup::quarterLoopUninvertedUp, TrackGroup::flyingLargeHalfLoopUninvertedUp, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge}, .extraTrackGroups = {TrackGroup::booster, TrackGroup::slopeSteepLong, TrackGroup::flyingLargeHalfLoopUninvertedDown, TrackGroup::flyingHalfLoopUninvertedDown, TrackGroup::stationEnd, TrackGroup::verticalLoop, TrackGroup::poweredLift}, }), .InvertedTrackPaintFunctions = TrackDrawerDescriptor({ From b95e1bbf6b9212f6369c99e83c9eb11c7df5197b Mon Sep 17 00:00:00 2001 From: mix Date: Sat, 2 Nov 2024 21:53:10 +0000 Subject: [PATCH 10/12] Make Twister RC zero g rolls available if trains have sprites --- src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h b/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h index 8bbc15a869..e69594d296 100644 --- a/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h @@ -23,8 +23,8 @@ constexpr RideTypeDescriptor TwisterRollerCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .Drawer = GetTrackPaintFunctionTwisterRC, .supportType = MetalSupportType::Tubes, - .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::corkscrewLarge, TrackGroup::halfLoopMedium}, - .extraTrackGroups = {TrackGroup::liftHillSteep, TrackGroup::brakeForDrop, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge}, + .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::corkscrewLarge, TrackGroup::halfLoopMedium, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge}, + .extraTrackGroups = {TrackGroup::liftHillSteep, TrackGroup::brakeForDrop}, }), .InvertedTrackPaintFunctions = {}, .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt | From a56d2eec2c6d271c432a12a813fc9258afee5c22 Mon Sep 17 00:00:00 2001 From: mix Date: Wed, 6 Nov 2024 02:50:59 +0000 Subject: [PATCH 11/12] Add large corkscrews to Vertical Drop RC extra track piece list --- src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h b/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h index 9b7124caa4..da5422f8df 100644 --- a/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h +++ b/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h @@ -24,7 +24,7 @@ constexpr RideTypeDescriptor VerticalDropCoasterRTD = .Drawer = GetTrackPaintFunctionTwisterRC, .supportType = MetalSupportType::Boxed, .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::liftHillSteep, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::flatToSteepSlope, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::curveVertical, TrackGroup::halfLoopLarge, TrackGroup::brakeForDrop, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::halfLoopMedium}, - .extraTrackGroups = {TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge}, + .extraTrackGroups = {TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge, TrackGroup::corkscrewLarge}, }), .InvertedTrackPaintFunctions = {}, .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt | From 2e591a7382c49e721b9ca478439855b61cdc7e36 Mon Sep 17 00:00:00 2001 From: mix Date: Sun, 10 Nov 2024 21:11:19 +0000 Subject: [PATCH 12/12] Make corkscrews and zero g rolls available to Vertical Drop RC --- src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h b/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h index da5422f8df..a24af87074 100644 --- a/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h +++ b/src/openrct2/ride/rtd/coaster/VerticalDropCoaster.h @@ -23,8 +23,8 @@ constexpr RideTypeDescriptor VerticalDropCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .Drawer = GetTrackPaintFunctionTwisterRC, .supportType = MetalSupportType::Boxed, - .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::liftHillSteep, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::flatToSteepSlope, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::curveVertical, TrackGroup::halfLoopLarge, TrackGroup::brakeForDrop, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::halfLoopMedium}, - .extraTrackGroups = {TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge, TrackGroup::corkscrewLarge}, + .enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::liftHillSteep, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::flatToSteepSlope, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::curveVertical, TrackGroup::halfLoopLarge, TrackGroup::brakeForDrop, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::halfLoopMedium, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge, TrackGroup::corkscrew, TrackGroup::corkscrewLarge}, + .extraTrackGroups = {TrackGroup::halfLoop, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist}, }), .InvertedTrackPaintFunctions = {}, .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt |

f|Msg{YO8Z6eYP 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 H%60z%R;O!z literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_left_3_5.png b/resources/g2/track/bm/medium_half_loop_left_3_5.png new file mode 100644 index 0000000000000000000000000000000000000000..f540fb01340842eedbf729193d6fe2a7b5d501a9 GIT binary patch literal 5246 zcmeHLe{d6Z7T?lB`U8kswP@=krf7hWY?5u8UyY%rHPkeuG=&1yOE;TM8q;ReY-kEO z2@z`3dmL5`z9?==A5}<=KPP$ zH`)DuzwdqCd!P5-ce49>;XKup#K#jM2%3^VH@65}XM*pO@v-2SyyVycE(ezvFLD;4 zE~ecE3`UH_qA?BY5;&e8=ivL%py6JZbRe;zx&8A1#HT znAH}gvM^t%ycG|KV$;iS%jb5_N&8G+s@__hHhaeAwawDSagS8ZUNC#r>JtmgPyX%P z3Ap^k+AUq;#N88Vibva~^1k>)+LgHKENxAPw_$VLyT1gs9Ao{%JFwz_|9Y33R@1a# z+cddg&U}sh{WVD+|GM*mn!E?RL)gO&EM%Y2BuMJJvXoBOhc{>U+&trJ(ekEE9*RFG z*mmLRE0eDLxNS$(H|(h$duJs3lC|GEbN;2;t)3dF;+_8S{6%5zs+Ow%s%sDBw_BRCh#f2rp7g{B&;?}RtO`I_O%lSEvJiU3}&MnjC z_O3YdnWADuckZ3T3u4j_O?au0`PGUc#V=p)n!o7-$2-qf{gpB-W?*y5Qpz)DUmQ8L zcL{rC__3}c*>6jdH;hdG^!Ra>Y7UiUuloA<7Wr8RZQAk^xi9W}ilHI)#2@e-7oC6Q zl~QKccR&C0n?o03*KXato>=KsmL14FeUTTweChI~e&o_`E1<95avXEbqBB9^Ra-!T zEz%T7F`|-(8VLi=tEseu%7dV6MU5TBthkeDz|9t$oE7#5SWJsi&ML{&@HKWNUT&GY z+=1(s&nw23TQP}|rFbSWyG9BCDsd;utf{Q9kJ|4n|-PX4+byP&d zF=8-YfmZ@i5?B@7Wm1)|DZH%_p}=gZv`4i7*>_1gEv7qU-Q`$dwocLT;vrFX4+bQIyY@ zjDyfRETAgUit%1Wpo{>@WXKX{WgV1Y;;;-i8d3H8Ep$Gij9UqqSd%D>L~BJc#awH z2)F_T8s&;PV=PrO@0NF!c7%D4hPcN}Fbcq~{ra$?+yHXHsgKC+_%porg#K1iX->oc-)GKiJ35ALTqeoTwL75i4!MHnna_~;^X5J z5)x9<)6)?IRw@-bof^YRNs{n-y^W2&_V&*1?%q%+JUooRkU|D&)k&qL$yO`F<%VnP zWQ|SQ)^@!=K=uUd`UhH+99oGiiBP9_N*MJR+eacDUS*)Mq^F$-9jYA+wOkK(t5P97 z2XZN(dL6BmpatsaeXYsEJ*m_nObzR)k$Q^iPKO{Z1nFrsf=>6Orq;9BEize$R(r^7 z?(=vq`g~L%kcuRyD^g%BL#Ah|2u_Iy!RlpXlhWI!Zt&|`di0$kGeeXLtI}mUjv5n{ z5=x?0TkF&NI*HDpr#sXT9Bl2s9-u3rWF3@Zh8S*$T~8DFQdI5i(tv^pmelo=E#dlZ zszb|3#zd(u6{oI5)`}_pq%P>i`WnfBHg7o4cs6b*G`SURwK{*3`B0mu zFVHmD*F8LZky1cV33$x|LG=*S20@1)Xn+P$U}%+;o21%Ws8FAl4G{>`pny76P)G|= zI*1}ts5*pd(NdjOs;8C;wLp=?iy*ZUD$&xcSc=ERX{cAVwqSn0HyCUi91K#xR;n37 z+)0Z16m1Jb-^nIIvifjo+px=jy|HJcv!ChYNmn90;4GS_gXVm93cTKeVhn0kF0^Li z6LY~N!9I5}AS)?3@{NJs+cXU<(wzC4Jlgk(DHB;Ui>en9K^}IIn z8g9>N*LM(Ie>w1e+P_bpy>V6Yr@o)6RNJ;+|NH(mN2We>iYkx$VZA1x2q@nhd2r;& pX~$vVPgSuSs=s()A#u?2=XV%sA0_QM4=983^XBF5ezt7Ye*j{d!c71G literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_left_4_1.png b/resources/g2/track/bm/medium_half_loop_left_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c160e3ebf3fb6cc1dafafd19d19826f11b048d9b GIT binary patch literal 1267 zcmXAoZ)_8F7{`D6$8~hGgK8Qmv2&eNEKv1^Cm!a2E0l5Dj&PebX<}z?tYQf#9HG;0 z98j?=XL8JfRr{i{f>o;&sis01MXL-b*k~6E7E`rim0{{AI$*-j5|Z!p@6Gdl@p+!X zH65n<>9eN;0P0&;8P}HUs(PDD=I1~D=Vw2s;aB2Yieqy zO`C=wh)gD{t*upQwOSN4kR-t{6w6w8o^!ceUavnKjwTZ6Y_?b`p$0(UfTrXYi_&h_ zIGhHzhFl>#*`D9AWF!nofL z<8d{r)DkKKt--B26Q?%|C@bN-k9377PmBp9t8nLq~!J+p^reJ`L z#ayXWs8C43vX|NhP^X-bRCGXNjq128E)^}Ik|Q?hO-@B~FjLei0j5Dr28D&t*csGm zqa?u|@CdPxCzS{lvI$tqVH5?U0A>M%WftzT-94#YPG3Hc`MmeUCzGVb!r1Ms)5)O* z7iRDhXoy7Plp#&)3uY~}YM`KlJ`_d?n4-$Zk1dc--2H(qYdaXQ^!E$B<$iywaarf8 z!SiFkY<#V;4tY5TzuSm+_TS&|V)9{oh2v7wd%2ZQc#htwylsB6{h#m0w{Rc65^Fs% z*6;AbmCx^Qx;4G;r{=J^{fBj{X72uU&-P8m%>(nBLE|~QwBhN@=h3G`y^iG!yJqQ%m=xkp}~dD3_Fi*_hu+?FZq(1UdknXb<2OAIY~ zcb-wxbh`b%-r1(N1`o8&IsmtQBIg_4sUxI6(ZvY&)#RJwI}Ud}=NWrr3+OsKvJM@h z_9+jW&)~gi^Qo?(8OJ7$u7;88JAOVDJZqd+sI)#HtQU=ae_gwt|MmFC4fgY&qX*aZ gNSoUHJ@CeDWMO(_+#QVEERzGRD>{samUr*`9~#ClzW@LL literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_left_4_2.png b/resources/g2/track/bm/medium_half_loop_left_4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb61a6f7724ce562319b45aa60e6fa595350e84 GIT binary patch literal 1375 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 V-X!MK(O5n~@uJeAuM0og`ad);rZE5j literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_left_4_4.png b/resources/g2/track/bm/medium_half_loop_left_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..9b564d539167c5d3f826c00299403e7b2a47f2f5 GIT binary patch literal 1671 zcmX9-e^gWV9sPzN4@fk#@Fbd2T%jAsa$@YH)Qfh?BTeFE(8o5FcpBU1uy~etxS;idxL+?1n$=Sdebi%)`yJ$zm(JkBTnWNg2vH4=8|89~M&mRZJyxsV zxMh|R&dJh?!i z7Gnlk;+fWIG!5CEA+J9c76O?VQsZ=;j7=!H7Ol`>z}*(bkV6;rSRz4hEcPuaOvC^H zH2?$v4giJ#n1TSA0EUuUHR-UCp&$kW6#`5`;1Yol21p!`Dkf<}NE=4Fl%&rX+naD+1N4{tO^N;sMHbDxZ`Hu zqAN@Wqc8*T*^r1wmkQZR9MLMogidKQ>D&&J-|L8kyksoQ7mG<3AVYv86J8h+azBEl z*IK5g_!jezQ2TtSREjH=a;;W{@brA1S%^4L#3SYfFm6P`A!Te*2a^_rbO}knI1zsS zo3xidbl^x;1r7?HjlG*F#@5oJoz*ohS2~p+>2qFdc}hNdXXhv471IavP07D|JYG?E zvdUw!Os~v;eplUjeKB{guhEd3A=9fK{+C*3CN}(WK=}0j9|W&D+DCTHHb8;fJ?v!9 zbWe8O?VHR9dy)T5`&CL+`|ELHaN$$I=z*J8z4I3alFT2Bww_BYRJ(k)KD_z4f=% zwJ(!>1&?!bnqq76m1BVst*AKayL9*^W&3C*d+FA#Ri8IEjSsIIt&XeWksoQ(HS#-PaCu?0L*L{p-cx%&$Kz zygPa$ry+yZH8~I^Ui%6y@8hnootr)O`QX8V$-*=L$gHo>+b zQnKr+D0G~Ckb2_`?fiqBt%0ISX4^7tau}W8v%8$JHtmhxiX9VDO38ETY>#|DJ>$VV ze^t$$C%v2Q9FEm2G_8i$yvMy*bwXEhFVwt#&)Od4;q%WjcLWNWq`?yC;ks_-!y<0+ z7tmbc@2_4=9+*Ed+kB}rjCLS1m#05_eQSTE{v%QDe=_>$7hArZf7%_)$e&mt$?{a5 zmA|BXcl>{S3at9v@rBMUE${E`+~7Y|`Smoxc-}QRe5I*;qs#U2u}?}i9QoP4EfYEL zpK3S#LhnCR@ON=*%R5Qdw))=6mh98KdUoEx=H0JG&hHJ=x@(P3-`sGx}WTSOz&V(@84;-=FW?@&#t&&-xEupoB6BzP*wgd+P2QS z`1*d4ciYZK)pw1Q`UVSS`fX#@(SdtiD~D}aJMK4@?$gi)UXlO)KMtO}LPy=Z-M zJ6~#Q&gxKRitE4PXAf3%FM2fJV_!73>|RQm+!gFAZo6E+z9TLh7Z*a_8do8it>~+14SmQj|jb#w=&{Mr z@4ZvgQ-R@4TQ&i}@Z_`OGu^qnTaOJox_$E8y%7KhOz)qa=+d5^p5ESGhr`j=*Vo_Q zKQJ(WVc6i{;Ly;J$LI4=l%L~RQRHPgq^e3Hk;r6nhGCY=HQR1?I+Pz+1_a(23b`W@ zJR0*SQ%oi+ZkTn?2= zUdrubJ$?aaBqE@Y!8j#rjGE;V1wLIA^{QmrVVw5*13pG1d6^C=oRSohIVoo2%)-hTe^>ySVT`t<=3E)1F^vevR@X+(CcL zuD-BaJa=Pi0za|X7Ao=*e|qu!uaAGYES!fo&x~xjIrQY!lNXOoN2yy!+=)Zct=E5> z&dnu1`t;RP-)>9py_*?{u6_UFrSRgy@yq$SqyPSC42&9^SFXLgJb&T!&e*ld?ajBn zeKWq3H)7lMGTf#eaPYZbmW9u*n0ty72ku?^`t+^0-0zP)ji=Oyw^f$@-mB03F#OK- zUGvEncl@PeJHI=7_~O!K{h6T;M)zS?*LM88tN-j@4%y*h9{K&7(&~@@-Lya9o}W6D z`}~al+StlZJJ%*&`SQyCBgVnQ#-kg~13N0D6n-LnV(yDOqg@MNa$;)ytFf2o{|Cmr B-}3+f literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_1_1.png b/resources/g2/track/bm/medium_half_loop_right_1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f1c382ddcf9ed1b63590cba9716d8b0f40a22aeb GIT binary patch literal 1259 zcmXAoeQXnT7{`Bm>veR{kP1Z)D6ED86;C-#gC`#IMmnt7AqN(@;jvXMTY(d9SVMtM z%4|l#OKh-02}K&M<^sjccuK*->bAJ*N~p7tOQ={wRY(dpZpw&1OGv)Y+dt3ukI(b; zt!cGRo$}Ze0KnAMEzN5yb!jCqbxkFI_<83L05xFEOY2ru#;U5S>gwv6nwr|$+PbRc{^ z+k^Q7L?}$h;#?vrq%(nhAxfDMJE7ridavCeI!qA(@Apy3kUbsem0^ETiB6PKRuph% z;3k2{ATb_E2DG`DuAD|;5rbt8PKpqwi~!I8a0tR{wO$kzO{OS8^wadP)0y*nZ$%<7 znM84&kCtK#aMnKsU?Aq0eUAecz{VnED^mmZeo)ppRot>LbN2NU_WivIV`B#Y7W?mn1f0P zOvdNPg@l6SDCBwyBs$9MWNdW8s2mpuxNB|52P(T2zh^C-N zfKn7HIobqx90W-qTY*9Y$N|6zcPY3k6F!^iV=NO|dNFaydL69>;tZ zEJWfGg(q!TmNpmdM#veU*95~jlu4MeRgT}XM05AS4|K0>Wx&dtSKqAkM^`sDt!wE! zGRA&zU|vJrn(^e9ok#o^bPdzLeXmE|UDe2~SbyTuZ>sjK9e0oVyDrHS9V=eb3|;?d z;jC}Y-PdP+Jp0q@bBCTovDJN5^=b#K#-%MEi{j&kU{ z?HzFBtCKf};`E4i#}n^Nx3>SY^0US7KXMLQ=QQ=gTJ@rxoh%Y)-8}ctW$Vu#nE%CT zIuN0po9;;m&l~Sg9?UM+kHbFds!A<rlXjRQeW`&j6=H1dA%6JUD zTz|Wszp^(v-#Ry}G@Na_H(Kf%JD@INKc3s7+Hm@(#o*BC-RIH2WT&QADTbdkJ>Rwd zg66yJg9FamNAC=5JhNcqE?rOd%CT>LIkkLGf6EV>qV1jDJ==t7$gQ652hz_lLnLu= W^wsWn?~hlAfz_*8o6o$kdH??`NGi7g literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_1_2.png b/resources/g2/track/bm/medium_half_loop_right_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..47039a93ca3a5b451da20a765637d329e5e9f76c GIT binary patch literal 1277 zcmXAoe{2(F7{}jkYj0bb4OXqvY!#bu!4r#|F(;-TC1j7tZuBYG|)<%UwQCC-2UtizQ(4bT* zRVo#NAdQWUO-)TYqtS@tCbOAh7%R)#Jsytd`EWRzNF+0v$wHxAso*9+k$|?U?RKr( zZSeX`fgl-<(D8&bmGcK~Nb2@CxCAdO1AQxiQa>k+u zP7HV{ATUUrL()M_KCZ3g^iVdziWANY5N3=3&;U3QgwtsJdcA<6F_Iji>8#6@_xo=} zqcEM;<60x7GtmapiCQ?!=Eqrq^hC_OXbq*9Sk9R&xD15eWHFKqW@QOGXXXNQAnJ@J zxuoRJ6he|5FILkU3TPRia{+@7paMcfb(REbPg9&^3l=@GvXFrzG^S+P6vZHjL|UZhPePN#K3*y31Bq?8;!VGo!^Uv1WP=| zrc%5liLxxgnwH)LaG#nIbac$%Orl(Y6v}q7;!RbVtRE@!se8MmAD`8eFf z6Q(eQi)K7+HBHi(Y%@Zq0s2uG!C{hulC^gH#0vG?{U6w~bu$CnZ~U^O){EU8>wCHm z4h(c3d+*6b9pAy9?y8&mA6a(w-a9M!)}C!&^&jjUYG2xR;RkxUE$7oD zN1t#gFU<@64ZBpcisxP*&Jr((dl$AZ&g{K@;mnN>Z%zU}jvH!L2uZ)eKBDsk*@tt>*B)6$m zbocE$cWQ9of!=FJhoYgXbIyqB9s2@rO^>do`Y%qjjyd`ct(@UMI@SB~`){9K`+4MU zo5Z%x1e$&0$l_t;Fg@OSEjxYlVp`ldj*TwAa3>g*tI;F9*A2XT{UOE7Eplz@d0xF( j?p?a9ug2lOx)$mOJ^z5mR?Qx(c?h~YH+Kwgc;&$V8dW*N literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_1_3.png b/resources/g2/track/bm/medium_half_loop_right_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..266a859da7569c6583a132434b9d2bde3cfbdef7 GIT binary patch literal 1353 zcmX9-e{2$W6#vp+*IFIfP>Dr%i#VBLW%jyJdofpcRjg>wc(tsuj3&g=$kyAWmM9u( zF~dq5W?0H5RE*4!m0DEd*u;tPwsw(Ps#Q@>gBzx7s~g!a8FNm*!rBW$|DM*r_X|-OjHJKQj&E|IdLZJxDPH|k8=P?B!a6qZcwOWzU zh?*@5y90N7s6a>;jhW&JM=I?n<%k9^XVhY=26gIXJ`)zUkukR>9%8sLdxrDpvaCu1 zbaG%OfRjc73=(q)lK~MQm%xky@;dm$2_Y*5fC4~=AdFCGl}Ma2nIFf)6g6frB(2sN zpAW`j5=6H?*O776$ z0X-Qt(FvPA={BW6^fKHxdu}j2+~Z`4!z!EHisOJn9rApL{d{z*=!a9 z2?Jzq1PchssDzHo4Jp!|*7`H%Xx2H!hcZu+Ian?i3YB893YF4wg&xOEYRaz5AG3rU zuCYLfV-tLe06H~dqJ>r+>NLtd79wb;qaMRp(3*^SGD()_XCMK91^^QPP5^=ci~*2F z0L+6Tp~VD)e#j*$8DKErB0xk1I0`@-Kt>E581z#xVuW!!0k zcR5u7zdjnZB@)3*CIRzW5(B_2<%CmA`B7a&#&EbZs}1tzXwDsf5=p^iRwe>U6j3RJ zS^_oFn8l!WT8(~}H5zm!*kFcZA)ivJ)i44e2O!LQVb9CGfW&6;q|-`|`vpw#IH}dr zMx)+hVK9YFsc;imki=qY#S|saXrxewLaPjVFc=|VLY)u4vaw`JvmDnaUI z%}m|q;_o_sc=z_;VCCu2E1W6HKV;WyQghpnfK?jt5&eyYxpEM zJ$rZfP>>gN*WfMFNcR$Hzv%(~?<>_u_&uqP`@3yD1KxSmMORDx#E$BFy(J*q-4#Z= z<_oIZp6-tVkh^xNvi+F93|yLOIm|D&a3|kx>qj5|GFhb Q^LYRb>l*7v-f8XmAD6pYCIA2c literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_1_4.png b/resources/g2/track/bm/medium_half_loop_right_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..933d722bd13e3a92044f820735fd5080a2f8ed80 GIT binary patch literal 1517 zcmXAoad47#7{`Cx*cg&S#YII%iXJUm?0n649oDP9Gn}vaPG1xqD!a(B!ui%-6_qn| zw4+7(I?=-ul^L5XX>#f*DxPS#%|Z`#DJv>WoOouDl5%U>FFfx)&-2{#&-4A``+Zt# z=BY-GcxeOxU}W{|ss*`OnX5&`1-agRptA^o0#GwoJuA27<>lq)=NA+da5$X8!os4W zA}*I(TwKiK@kCOo6hRa?j!_h$*J~Muwpy)Dr`zujgv0&ucsi3o6aZ5KlHhB#LZeY) zGAnF$rPD=v{kmX?iA3#*qz9LCHA+5Bh%6cjtCzVMN18n8osk z+YLh@F(Q;=A_XZ?>SQWfuCX9`R>`<wKPuKNSj;d z4$y(9B^-A|Q{F^2B*1`>0wM#Dn1PJtqHdAOFVluFI;ycJ7*CoF!=t2Js7J*nmE5jT zdi8jap`uoO%*iBu)^y03jrw3RED)kHxduTE7;d5{yI$`ynf!Kp$nA~>0*U_qbUF=z zm_s&Hb64@W|TqMwwfG*YOOK#L5z5E#HnQAeYv8-T*EWydwQt&x{nMHMHW%?0-fBIJ^tjJ#K5n1(=Pb@?Sl{%KWQp!kdEcQ;!~DSaqu>$Z z#{Bl{>y7n${@c>K#5BMC$wTT8@$K%NSEuay=%rZCM!};UH`v=fwUh2tj(oiTNP0_z zy)tJAOaqc>c8g?eBXJq zVc*O2i61xcdUuk=_c|x>u6@``Q&(T;d~lIZO}PKybNh<>ojv-UTdUr#ZY*oF@J?@8 z*gWo{bMvaXk{e%3d9srOm$z-}JlQr;By{$kwQo{i2TW7zB3t*Ru74i9w`TRa?22V& zC#nVyCYO(P^UiNqmtN3*Rhn<^cHF5v@z0u`>95x{T-emSY~zCau<72^VWsp>7`7buzX zTyfW(i9dc)JELsOH*>tNoTqlgCO%j*m^b(E>Q77BnRQ=!-`vou4-edJETrz$ZaX)Y z=*S#K+sC%v)a*HJM=N>)v#-2)+>vK$oBi3+ORA2p8vEIDN!f&w(r!abvhCmoVYsb+ z@AI2IZFiaX_c9F~CtJ&ES5H>&>%zT@J9?UsMHN>+XelV%S1u^3-HoyhS?yZ!h0BdK km;Y=H*P#TZeIg250=oy=hEiLbbD0Izv*uMDnpxNUKg*}FQ2+n{ literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_1_5.png b/resources/g2/track/bm/medium_half_loop_right_1_5.png new file mode 100644 index 0000000000000000000000000000000000000000..55c4e2e21daf825aee95d64a91894322a07c87f3 GIT binary patch literal 5240 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_2_1.png b/resources/g2/track/bm/medium_half_loop_right_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..870a429c4807bcdbc93b552d95cc08bc1a18d365 GIT binary patch literal 5178 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/bm/medium_half_loop_right_2_3.png b/resources/g2/track/bm/medium_half_loop_right_2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..41f2df9e3c459f039cc9c46c76f1913b7a1971b5 GIT binary patch literal 1351 zcmX9-e@qj16#pW^@x!Jj%vHU`f<-EH(%~tmGm*{k&HSUhm)}HYD_-wect=$eg61- z-oBP*l^}0!9soeFs-dnm&Bf``b;xuBOmO5GNj9D45YeHToI%G*iT@%Tm z3I#eDFcN^L5I2Jatip)9AQeJkLJm_pILSj8lmI{iphFNwDCAI-mr7j<#Tk+u((5A} zH|BK0Kmf%GB!oy#iWNGkijiqJjOG=rLuvM?ZGOrX()pr#F^=R)Rj0c4UxKyUWa6O?kQk0dZ9Y&+qY7ID@VV^HHJe*7> zAwU@*wIi5YsPv;$NT!b|Epe?YVe}{Y;gmNq8JU3jGNBL`iBw_Mbd!xZ{DnLXQhZBcv2C7_bq*rvgzDKng%c1g#i!k(ld-Rduy(4f~FcyxkovoB>+Kxo?Z>H+e5M-)*kFnJqcn|Io_gUu1RtRMMd@+^enK zk#)h|x3*T+AJBZVZTJY-+WufRGh^4XM@V^FeQ`=~r+>eyZZVf}{@tSa-PgA6It;Y+ zC38uHU0>dM|2E%J79PB|`f%TzYn%5zUYn;zB_}_vS|i@nc<7h;ttaO-lFnjo;hObSjcJ7ZlY!=v>ir?`jxz%Wrh;{Jw}j=)TpGvv^srZ*lQa z?BK}DO=C=7RVm`msA-?k9BsAr3Of=@zQc1@SN|UQt+;xbVBGjk|37=5BtG7T&f;!_L)BAsiu|^WEE@99@liu2;u}; zFV53ms&UKK*fPsBtJHdgMVIlIny^%hl-$HFYlEuP1x2^}F3#QS^ZDH8pU?Y`_xn>{ zS|ZEInw$jy$SGP{up%)fi6S#n5`97?eFA_KQ2J5XlEj*nl$4yDoRX4~nwpxHmX@BL z&SJ4LGBPqVGr0nR071kUCM8K+rBZ0Ml+kFkTJ3JPhhcg{p;$bQh=EiB2s~S%;Ak{_ zonCA*ORP4+=~jAuT7SSCjyNz8OD@T#aIQhlr&U6`7U?izKC9gCrb1n&Xvi@VV`My_ z6ak$S&?L)Av3zEB(8-DWc`z!5aU~q3A!Gyq5CAAyEQ-xG@OZRP=#WS{2%<}^4jK%D zc02U>cnC)z<%$WuL@AU}BDn!k(Gsl5RBC$#$(c*+jnK-6* zn=M^VcZdnZ!&0EcSz3~9Q1WSw$flRNOr+PQ?s6G|K3g=%#N&fd3V<8{EdVqCE&#d! zh_C=mKwwa>g)RpS1qmUb5MYr4j|_we07(ETE;J+1K|qfN`b{w8056P30geGV!P2O> z2A#-4%bX6C*J}&}T+wI%CbW2JfatTOG?#Gjl^!7#lF%`QE3Wg7SpB1(Fbu|o9Dwp! zGBH~rjCxxng4(Pv(fa+E zLP2UYD!raU#70zXl_D+-@!{fLLKKw?ppp*_LTE#vM+yUYBK+u#?1wLYpms$G2|gU? z+W*`28*$xX)_C3CSJN< zKXYO9%EWN|&Xg$!7v$~VJA7ngF@MU8&C@tptagvt`Wp=(wY6f z%pLD<+t}T8y=CpwhX+kT>ghK>+y-aOI~Qb)d~L(})<(CyJEpMR-=ND`IQY!gwz)nS znzm!Ct#68^R(SSdnREKO>Xkjt%G-PF?^I2=KD~X0 z^IwdfuwWZ}Zs5bp(JKlFK=*f4L zKUsKb%co6yXES-_g>74ZZ)5Ui_jB{M#cEP7R-G>^y(%m{T2(MqWm$Pvfu1<9z2~ot z^EV%FKDG7g(9oAnnn4A6q2_M>qPOl9e{i}IfBgB4U#vBEcbl;b!IHj@t;Z%UYwqvK zq&kV7)zyE`DP5B>m_Kvy+G=9y7rv}PrEBl=sk={IZ4Hs*2iA>&W1lRp*mCApYx}0r z$>Z|VSN%GtbIr;9so`}E^|u>0H?MvzS9J@|c@`G!tnB{BpZnizA;@L0vTy6YF$|CcOjS=D;dh;b4b14T