diff --git a/distribution/changelog.txt b/distribution/changelog.txt index c69bf19bbc..cc81bb8a0c 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,5 +1,6 @@ 0.4.16 (in development) ------------------------------------------------------------------------ +- Improved: [#22937] Add banked sloped turns and many other pieces to the Corkscrew, Hypercoaster and Lay-down Roller Coaster. - Improved: [#22967] Add medium and large half loops to the Wooden and Classic Wooden Roller Coasters. - Improved: [#23010] Make AppImage compatible with Ubuntu 22.04 and Debian Bookworm again. - Fix: [#21221] Trains use unbanked sprites on flat to gentle diagonal banked track pieces. diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index fa6b492fef..4282107096 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -8302,6 +8302,3926 @@ "y": -8, "palette": "keep" }, + { + "path": "track/corkscrew/small_flat_to_steep_up_1.png", + "x": -24, + "y": -28, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_2_1.png", + "x": -24, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_2_2.png", + "x": -22, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_3_1.png", + "x": -20, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_3_2.png", + "x": -26, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_4.png", + "x": -26, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_1.png", + "x": -25, + "y": -28, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_2_1.png", + "x": -22, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_2_2.png", + "x": -25, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_3_1.png", + "x": -24, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_3_2.png", + "x": -15, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_4.png", + "x": -24, + "y": -28, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_diag_1.png", + "x": -32, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_diag_2.png", + "x": -14, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_diag_3.png", + "x": -32, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_flat_to_steep_up_diag_4.png", + "x": -14, + "y": -32, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_diag_1.png", + "x": -32, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_diag_2.png", + "x": -14, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_diag_3.png", + "x": -32, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_steep_to_flat_up_diag_4.png", + "x": -14, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/steep_to_vertical_up_1.png", + "x": -25, + "y": -51 + }, + { + "path": "track/corkscrew/steep_to_vertical_up_2.png", + "x": -26, + "y": -52 + }, + { + "path": "track/corkscrew/steep_to_vertical_up_3.png", + "x": -13, + "y": -51 + }, + { + "path": "track/corkscrew/steep_to_vertical_up_4.png", + "x": -13, + "y": -52 + }, + { + "path": "track/corkscrew/vertical_to_steep_up_1.png", + "x": -11, + "y": -60 + }, + { + "path": "track/corkscrew/vertical_to_steep_up_2.png", + "x": -10, + "y": -44 + }, + { + "path": "track/corkscrew/vertical_to_steep_up_3.png", + "x": -26, + "y": -44 + }, + { + "path": "track/corkscrew/vertical_to_steep_up_4.png", + "x": -27, + "y": -60 + }, + { + "path": "track/corkscrew/vertical_twist_left_up_1.png", + "x": -15, + "y": -92 + }, + { + "path": "track/corkscrew/vertical_twist_left_up_2_1.png", + "x": -10, + "y": -92 + }, + { + "path": "track/corkscrew/vertical_twist_left_up_2_2.png", + "x": -10, + "y": -84 + }, + { + "path": "track/corkscrew/vertical_twist_left_up_3.png", + "x": -15, + "y": -92 + }, + { + "path": "track/corkscrew/vertical_twist_left_up_4_1.png", + "x": -7, + "y": -91 + }, + { + "path": "track/corkscrew/vertical_twist_left_up_4_2.png", + "x": -13, + "y": -91 + }, + { + "path": "track/corkscrew/vertical_twist_right_up_1_1.png", + "x": -10, + "y": -89 + }, + { + "path": "track/corkscrew/vertical_twist_right_up_1_2.png", + "x": -10, + "y": -92 + }, + { + "path": "track/corkscrew/vertical_twist_right_up_2.png", + "x": -15, + "y": -91 + }, + { + "path": "track/corkscrew/vertical_twist_right_up_3_1.png", + "x": -7, + "y": -92 + }, + { + "path": "track/corkscrew/vertical_twist_right_up_3_2.png", + "x": -13, + "y": -90 + }, + { + "path": "track/corkscrew/vertical_twist_right_up_4.png", + "x": -15, + "y": -92 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_1.png", + "x": -24, + "y": -19 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_2_1.png", + "x": -10, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_2_2.png", + "x": -24, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_3.png", + "x": -23, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_4.png", + "x": -24, + "y": -24 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_1.png", + "x": -24, + "y": -24 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_2.png", + "x": -24, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_3_1.png", + "x": -8, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_3_2.png", + "x": -24, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_4.png", + "x": -23, + "y": -19 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_1.png", + "x": -20, + "y": -19 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_2_1.png", + "x": -22, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_2_2.png", + "x": -24, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_3.png", + "x": -24, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_4.png", + "x": -24, + "y": -19 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_1.png", + "x": -24, + "y": -19 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_2.png", + "x": -20, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_3_1.png", + "x": -24, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_3_2.png", + "x": 0, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_4.png", + "x": -24, + "y": -19 + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_1.png", + "x": -22, + "y": -11 + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_2.png", + "x": -23, + "y": -4 + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_3.png", + "x": -23, + "y": -9 + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_4.png", + "x": -24, + "y": -16 + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_1.png", + "x": -23, + "y": -16 + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_2.png", + "x": -22, + "y": -9 + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_3.png", + "x": -24, + "y": -4 + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_4.png", + "x": -23, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_1.png", + "x": -20, + "y": -12 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_2.png", + "x": -24, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_3.png", + "x": -23, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_4.png", + "x": -22, + "y": -17 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_1.png", + "x": -24, + "y": -17 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_2.png", + "x": -20, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_3.png", + "x": -22, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_4.png", + "x": -23, + "y": -12 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_1.png", + "x": -20, + "y": -19 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_2.png", + "x": -24, + "y": -6 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_3.png", + "x": -23, + "y": -12 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_4.png", + "x": -24, + "y": -24 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_1.png", + "x": -24, + "y": -24 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_2.png", + "x": -20, + "y": -12 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_3.png", + "x": -24, + "y": -6 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_4.png", + "x": -23, + "y": -19 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_1.png", + "x": -24, + "y": -11 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_2_1.png", + "x": -24, + "y": -4 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_2_2.png", + "x": -24, + "y": 3 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_3.png", + "x": -23, + "y": -4 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_4.png", + "x": -24, + "y": -16 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_1.png", + "x": -24, + "y": -16 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_2.png", + "x": -24, + "y": -4 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_3_1.png", + "x": -10, + "y": -4 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_3_2.png", + "x": -24, + "y": 3 + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_4.png", + "x": -23, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_1.png", + "x": -20, + "y": -12 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_2_1.png", + "x": -22, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_2_2.png", + "x": -24, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_3.png", + "x": -24, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_4.png", + "x": -24, + "y": -12 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_1.png", + "x": -24, + "y": -12 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_2.png", + "x": -20, + "y": -11 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_3_1.png", + "x": -24, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_3_2.png", + "x": -2, + "y": -5 + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_4.png", + "x": -24, + "y": -12 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_1_1.png", + "x": -26, + "y": -34 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_1_2.png", + "x": -17, + "y": -27 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_2_1.png", + "x": -17, + "y": -13 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_2_2.png", + "x": -38, + "y": -22 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_3_1.png", + "x": -23, + "y": -14 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_3_2.png", + "x": -26, + "y": -32 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_4_1.png", + "x": -26, + "y": -25 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_4_2.png", + "x": -28, + "y": -15 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_1_1.png", + "x": -29, + "y": -25 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_1_2.png", + "x": -26, + "y": -15 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_2_1.png", + "x": -17, + "y": -14 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_2_2.png", + "x": -29, + "y": -19 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_3_1.png", + "x": -38, + "y": -13 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_3_2.png", + "x": -16, + "y": -22 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_4_1.png", + "x": -9, + "y": -27 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_4_2.png", + "x": -23, + "y": -27 + }, + { + "path": "track/corkscrew/small_turn_left_bank_gentle_up_4_3.png", + "x": -16, + "y": -12 + }, + { + "path": "track/corkscrew/small_turn_right_bank_gentle_up_1_3.png", + "x": -16, + "y": -10 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_1_1.png", + "x": -20, + "y": -15 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_1_2.png", + "x": -30, + "y": -13 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_1_3.png", + "x": 0, + "y": 0 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_1_4.png", + "x": -32, + "y": -10 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_1_5.png", + "x": -24, + "y": -24 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_2_1.png", + "x": -24, + "y": -11 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_2_2.png", + "x": 0, + "y": -19 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_2_3.png", + "x": 0, + "y": -2 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_2_4.png", + "x": -13, + "y": -24 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_2_5.png", + "x": -17, + "y": -18 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_3_1.png", + "x": -26, + "y": -12 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_3_2.png", + "x": 0, + "y": 0 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_3_3.png", + "x": -30, + "y": -10 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_3_4.png", + "x": 0, + "y": 0 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_3_5.png", + "x": -24, + "y": -9 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_4_1.png", + "x": -31, + "y": -22 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_4_2.png", + "x": -32, + "y": -13 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_4_3.png", + "x": -19, + "y": -25 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_4_4.png", + "x": -23, + "y": -10 + }, + { + "path": "track/corkscrew/medium_turn_left_bank_gentle_up_4_5.png", + "x": -23, + "y": -12 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_1_1.png", + "x": -24, + "y": -22 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_1_2.png", + "x": -16, + "y": -13 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_1_3.png", + "x": -9, + "y": -25 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_1_4.png", + "x": -19, + "y": -10 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_1_5.png", + "x": -25, + "y": -12 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_2_1.png", + "x": -20, + "y": -12 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_2_2.png", + "x": 0, + "y": 0 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_2_3.png", + "x": 16, + "y": -10 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_2_4.png", + "x": 0, + "y": 0 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_2_5.png", + "x": -24, + "y": -9 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_3_1.png", + "x": -32, + "y": -11 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_3_2.png", + "x": -32, + "y": -19 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_3_3.png", + "x": -26, + "y": -2 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_3_4.png", + "x": -22, + "y": -24 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_3_5.png", + "x": -23, + "y": -18 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_4_1.png", + "x": -17, + "y": -15 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_4_2.png", + "x": 5, + "y": -13 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_4_3.png", + "x": 0, + "y": 0 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_4_4.png", + "x": 2, + "y": -10 + }, + { + "path": "track/corkscrew/medium_turn_right_bank_gentle_up_4_5.png", + "x": -23, + "y": -24 + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_1_1.png", + "x": -24, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_1_2.png", + "x": -32, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_1_3.png", + "x": 10, + "y": 8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_1_4.png", + "x": -19, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_2_1.png", + "x": -24, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_2_2.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_2_3.png", + "x": -24, + "y": 13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_2_4.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_3_1.png", + "x": -5, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_3_2.png", + "x": 8, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_3_3.png", + "x": -32, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_3_4.png", + "x": -14, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_4_1.png", + "x": -25, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_4_2.png", + "x": -26, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_4_3.png", + "x": 0, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_diag_gentle_up_4_4.png", + "x": 0, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_1_1.png", + "x": -24, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_1_2.png", + "x": -18, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_1_3.png", + "x": -13, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_1_4.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_2_1.png", + "x": -24, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_2_2.png", + "x": -33, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_2_3.png", + "x": 2, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_2_4.png", + "x": -12, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_3_1.png", + "x": -7, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_3_2.png", + "x": -8, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_3_3.png", + "x": 0, + "y": 13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_3_4.png", + "x": 0, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_4_1.png", + "x": -19, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_4_2.png", + "x": -10, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_4_3.png", + "x": -32, + "y": 8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_diag_gentle_up_4_4.png", + "x": -14, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_1.png", + "x": 0, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_3.png", + "x": -32, + "y": -17, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_4.png", + "x": -32, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_1.png", + "x": -14, + "y": 7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_3.png", + "x": -14, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_4.png", + "x": -16, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_1.png", + "x": -32, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_3.png", + "x": -17, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_4.png", + "x": -24, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_1.png", + "x": -16, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_3.png", + "x": -25, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_4.png", + "x": -24, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_1.png", + "x": 0, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_3.png", + "x": -32, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_4.png", + "x": -31, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_1.png", + "x": 7, + "y": 7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_3.png", + "x": -16, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_4.png", + "x": -24, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_1.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_3.png", + "x": -11, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_4.png", + "x": -24, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_1.png", + "x": -14, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_3.png", + "x": -11, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_4.png", + "x": -28, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_1_1.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_1_2.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_2.png", + "x": -15, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_3.png", + "x": -32, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_4.png", + "x": -14, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_1.png", + "x": -32, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_2.png", + "x": -14, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_1.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_2.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_4.png", + "x": -16, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_1_1.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_1_2.png", + "x": -32, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_2.png", + "x": -15, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_3.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_4.png", + "x": -14, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_1.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_2.png", + "x": -14, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_1.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_2.png", + "x": -32, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_4.png", + "x": -16, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_diag_1.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_diag_2.png", + "x": -15, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_diag_3.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/left_bank_to_gentle_up_left_bank_diag_4.png", + "x": -9, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_diag_1.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_diag_2.png", + "x": -9, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_diag_3.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/right_bank_to_gentle_up_right_bank_diag_4.png", + "x": -15, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_diag_1.png", + "x": -32, + "y": -3, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_diag_2.png", + "x": -15, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_diag_3.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_left_bank_diag_4.png", + "x": -9, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_diag_1.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_diag_2.png", + "x": -9, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_diag_3.png", + "x": -32, + "y": -3, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_right_bank_diag_4.png", + "x": -15, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_diag_1.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_diag_2.png", + "x": -15, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_diag_3.png", + "x": -32, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_diag_4.png", + "x": -9, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_diag_1.png", + "x": -32, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_diag_2.png", + "x": -9, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_diag_3.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_diag_4.png", + "x": -15, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_diag_1_1.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_diag_1_2.png", + "x": -32, + "y": -3, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_diag_2.png", + "x": -15, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_diag_3.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_left_bank_diag_4.png", + "x": -14, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_diag_1.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_diag_2.png", + "x": -14, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_diag_3_1.png", + "x": -32, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_diag_3_2.png", + "x": -32, + "y": -3, + "palette": "keep" + }, + { + "path": "track/corkscrew/flat_to_gentle_up_right_bank_diag_4.png", + "x": -15, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_diag_1_1.png", + "x": -32, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_diag_1_2.png", + "x": -32, + "y": 3, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_diag_2.png", + "x": -15, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_diag_3.png", + "x": -32, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_left_bank_to_flat_diag_4.png", + "x": -14, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_diag_1.png", + "x": -32, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_diag_2.png", + "x": -14, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_diag_3_1.png", + "x": -32, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_diag_3_2.png", + "x": -32, + "y": 3, + "palette": "keep" + }, + { + "path": "track/corkscrew/gentle_up_right_bank_to_flat_diag_4.png", + "x": -15, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_1.png", + "x": -20, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_2.png", + "x": -28, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_3.png", + "x": 15, + "y": 8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_4.png", + "x": -11, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_1.png", + "x": -24, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_2.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_3.png", + "x": -24, + "y": 14, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_4.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_1.png", + "x": -8, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_2.png", + "x": 0, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_3.png", + "x": -32, + "y": -2, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_4.png", + "x": -14, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_1.png", + "x": -26, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_2.png", + "x": -26, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_3.png", + "x": 0, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_4.png", + "x": 0, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_1.png", + "x": -24, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_2.png", + "x": -21, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_3.png", + "x": -15, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_4.png", + "x": -32, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_1.png", + "x": -20, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_2.png", + "x": -34, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_3.png", + "x": -1, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_4.png", + "x": -14, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_1.png", + "x": -8, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_2.png", + "x": -8, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_3.png", + "x": 0, + "y": 14, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_4.png", + "x": 0, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_1.png", + "x": -16, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_2.png", + "x": -5, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_3.png", + "x": -32, + "y": 8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_4.png", + "x": -15, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_1.png", + "x": 0, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_3.png", + "x": -32, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_4.png", + "x": -29, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_1.png", + "x": -15, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_3.png", + "x": -9, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_4.png", + "x": -16, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_1.png", + "x": -32, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_3.png", + "x": -24, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_4.png", + "x": -23, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_1.png", + "x": -11, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_3.png", + "x": -26, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_4.png", + "x": -24, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_1.png", + "x": 0, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_3.png", + "x": -32, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_4.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_1.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_3.png", + "x": -16, + "y": -10, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_4.png", + "x": -24, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_1.png", + "x": -32, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_3.png", + "x": -15, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_4.png", + "x": -23, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_1.png", + "x": -15, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_2.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_3.png", + "x": -14, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_4.png", + "x": -29, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_1_1.png", + "x": -27, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_1_2.png", + "x": -18, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_2_1.png", + "x": -17, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_2_2.png", + "x": -18, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_2_3.png", + "x": -38, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_3_1.png", + "x": -25, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_3_2.png", + "x": -11, + "y": -2, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_4_1.png", + "x": -10, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_4_2.png", + "x": -30, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_1_1.png", + "x": -29, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_1_2.png", + "x": -10, + "y": -1, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_2_1.png", + "x": -15, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_2_2.png", + "x": -30, + "y": -2, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_3_1.png", + "x": -38, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_3_2.png", + "x": -38, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_3_3.png", + "x": -18, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_4_1.png", + "x": -11, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_4_2.png", + "x": -25, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_4_3.png", + "x": -16, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_1_3.png", + "x": -16, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_left_bank_to_gentle_up_2_4.png", + "x": -38, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/small_turn_right_bank_to_gentle_up_3_4.png", + "x": -18, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_1_1.png", + "x": -24, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_1_2.png", + "x": -23, + "y": -71, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_1_3.png", + "x": -28, + "y": -36, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_1_4.png", + "x": -25, + "y": -48, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_1_5.png", + "x": -24, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_2_1.png", + "x": -24, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_2_2.png", + "x": -32, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_2_3.png", + "x": -25, + "y": -50, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_2_4.png", + "x": -20, + "y": -58, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_2_5.png", + "x": -15, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_3_1.png", + "x": -16, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_3_2.png", + "x": -17, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_3_3.png", + "x": 13, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_3_4.png", + "x": -19, + "y": -38, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_3_5.png", + "x": -26, + "y": -31, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_4_1.png", + "x": -26, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_4_2.png", + "x": -25, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_4_3.png", + "x": -16, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_4_4.png", + "x": -37, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_4_5.png", + "x": -24, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_1_1.png", + "x": -24, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_1_2.png", + "x": -25, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_1_3.png", + "x": -24, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_1_4.png", + "x": -30, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_1_5.png", + "x": -32, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_2_1.png", + "x": -24, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_2_2.png", + "x": -16, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_2_3.png", + "x": -24, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_2_4.png", + "x": -16, + "y": -38, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_2_5.png", + "x": -24, + "y": -31, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_3_1.png", + "x": -35, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_3_2.png", + "x": -16, + "y": -15, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_3_3.png", + "x": -27, + "y": -50, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_3_4.png", + "x": -32, + "y": -58, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_3_5.png", + "x": -24, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_4_1.png", + "x": -23, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_4_2.png", + "x": -11, + "y": -71, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_4_3.png", + "x": 13, + "y": -36, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_4_4.png", + "x": -14, + "y": -48, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_4_5.png", + "x": -21, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_left_4_4_2.png", + "x": -37, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_corkscrew_right_1_4_2.png", + "x": -20, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/quarter_loop_up_1_1.png", + "x": -22, + "y": -53 + }, + { + "path": "track/corkscrew/quarter_loop_up_1_2.png", + "x": -4, + "y": -35 + }, + { + "path": "track/corkscrew/quarter_loop_up_1_3.png", + "x": -24, + "y": -17 + }, + { + "path": "track/corkscrew/quarter_loop_up_2_1.png", + "x": -28, + "y": -78 + }, + { + "path": "track/corkscrew/quarter_loop_up_2_2.png", + "x": -32, + "y": -66 + }, + { + "path": "track/corkscrew/quarter_loop_up_2_3.png", + "x": -24, + "y": -25 + }, + { + "path": "track/corkscrew/quarter_loop_up_3_1.png", + "x": -13, + "y": -78 + }, + { + "path": "track/corkscrew/quarter_loop_up_3_2.png", + "x": -23, + "y": -68 + }, + { + "path": "track/corkscrew/quarter_loop_up_3_3.png", + "x": -10, + "y": -25 + }, + { + "path": "track/corkscrew/quarter_loop_up_4_1.png", + "x": -13, + "y": -54 + }, + { + "path": "track/corkscrew/quarter_loop_up_4_2.png", + "x": -24, + "y": -36 + }, + { + "path": "track/corkscrew/quarter_loop_up_4_3.png", + "x": -32, + "y": -17 + }, + { + "path": "track/corkscrew/quarter_loop_up_1_2_2.png", + "x": 0, + "y": -35 + }, + { + "path": "track/corkscrew/quarter_loop_up_4_2_2.png", + "x": -45, + "y": -36 + }, + { + "path": "track/corkscrew/medium_half_loop_left_1_1.png", + "x": -24, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_1_2.png", + "x": -24, + "y": -50, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_1_3.png", + "x": -32, + "y": -98, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_1_4.png", + "x": -40, + "y": -121, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_1_5.png", + "x": -23, + "y": -31, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_2_1.png", + "x": -24, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_2_2.png", + "x": 0, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_2_3.png", + "x": -32, + "y": -85, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_2_4.png", + "x": -33, + "y": -148, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_2_5.png", + "x": -24, + "y": -41, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_3_1.png", + "x": -24, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_3_2.png", + "x": 0, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_3_3.png", + "x": -7, + "y": -72, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_3_4.png", + "x": -39, + "y": -152, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_3_5.png", + "x": -16, + "y": -41, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_4_1.png", + "x": -23, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_4_2.png", + "x": -25, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_4_3.png", + "x": -32, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_4_4.png", + "x": -14, + "y": -123, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_4_5.png", + "x": -25, + "y": -34, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_1_1.png", + "x": -24, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_1_2.png", + "x": -21, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_1_3.png", + "x": -19, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_1_4.png", + "x": -37, + "y": -123, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_1_5.png", + "x": -24, + "y": -34, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_2_1.png", + "x": -24, + "y": -7, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_2_2.png", + "x": -32, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_2_3.png", + "x": -32, + "y": -72, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_2_4.png", + "x": -28, + "y": -152, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_2_5.png", + "x": -23, + "y": -41, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_3_1.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_3_2.png", + "x": -32, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_3_3.png", + "x": -32, + "y": -85, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_3_4.png", + "x": -14, + "y": -148, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_3_5.png", + "x": -12, + "y": -41, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_4_1.png", + "x": -24, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_4_2.png", + "x": -20, + "y": -50, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_4_3.png", + "x": -7, + "y": -98, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_4_4.png", + "x": -32, + "y": -121, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_4_5.png", + "x": -32, + "y": -31, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_1_4_2.png", + "x": -40, + "y": -121, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_2_1_2.png", + "x": -24, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_2_2_2.png", + "x": -32, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_left_4_4_2.png", + "x": -14, + "y": -123, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_1_4_2.png", + "x": -37, + "y": -123, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_3_1_2.png", + "x": -32, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_3_2_2.png", + "x": -32, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/medium_half_loop_right_4_4_2.png", + "x": -32, + "y": -121, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_half_loop_left_1_1.png", + "x": -24, + "y": -29 + }, + { + "path": "track/corkscrew/large_half_loop_left_1_2.png", + "x": -20, + "y": -42 + }, + { + "path": "track/corkscrew/large_half_loop_left_1_3.png", + "x": -32, + "y": -69 + }, + { + "path": "track/corkscrew/large_half_loop_left_1_4.png", + "x": -32, + "y": -84 + }, + { + "path": "track/corkscrew/large_half_loop_left_1_5.png", + "x": -18, + "y": -68 + }, + { + "path": "track/corkscrew/large_half_loop_left_1_6.png", + "x": -11, + "y": -177 + }, + { + "path": "track/corkscrew/large_half_loop_left_1_7.png", + "x": -23, + "y": -14 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_1.png", + "x": -24, + "y": -6 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_2.png", + "x": -6, + "y": -8 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_3.png", + "x": -9, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_4.png", + "x": -9, + "y": -116 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_5.png", + "x": -32, + "y": -136 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_6.png", + "x": -28, + "y": -195 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_7.png", + "x": -25, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_1.png", + "x": -25, + "y": -4 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_2.png", + "x": -31, + "y": -9 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_3.png", + "x": -28, + "y": -37 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_4.png", + "x": -10, + "y": -59 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_5.png", + "x": -11, + "y": -117 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_6.png", + "x": -23, + "y": -196 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_7.png", + "x": -26, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_left_4_1.png", + "x": -24, + "y": -17 + }, + { + "path": "track/corkscrew/large_half_loop_left_4_2.png", + "x": -32, + "y": -21 + }, + { + "path": "track/corkscrew/large_half_loop_left_4_3.png", + "x": -32, + "y": -55 + }, + { + "path": "track/corkscrew/large_half_loop_left_4_4.png", + "x": -32, + "y": -82 + }, + { + "path": "track/corkscrew/large_half_loop_left_4_5.png", + "x": 12, + "y": -60 + }, + { + "path": "track/corkscrew/large_half_loop_left_4_6.png", + "x": -19, + "y": -181 + }, + { + "path": "track/corkscrew/large_half_loop_left_4_7.png", + "x": -32, + "y": -16 + }, + { + "path": "track/corkscrew/large_half_loop_right_1_1.png", + "x": -24, + "y": -18 + }, + { + "path": "track/corkscrew/large_half_loop_right_1_2.png", + "x": -20, + "y": -21 + }, + { + "path": "track/corkscrew/large_half_loop_right_1_3.png", + "x": -14, + "y": -55 + }, + { + "path": "track/corkscrew/large_half_loop_right_1_4.png", + "x": 0, + "y": -82 + }, + { + "path": "track/corkscrew/large_half_loop_right_1_5.png", + "x": -32, + "y": -60 + }, + { + "path": "track/corkscrew/large_half_loop_right_1_6.png", + "x": -21, + "y": -181 + }, + { + "path": "track/corkscrew/large_half_loop_right_1_7.png", + "x": -25, + "y": -16 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_1.png", + "x": -24, + "y": -4 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_2.png", + "x": -12, + "y": -9 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_3.png", + "x": -6, + "y": -37 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_4.png", + "x": -28, + "y": -59 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_5.png", + "x": -26, + "y": -117 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_6.png", + "x": -20, + "y": -196 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_7.png", + "x": -23, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_1.png", + "x": -26, + "y": -6 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_2.png", + "x": -28, + "y": -8 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_3.png", + "x": -29, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_4.png", + "x": -32, + "y": -116 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_5.png", + "x": 12, + "y": -136 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_6.png", + "x": 0, + "y": -195 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_7.png", + "x": -19, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_1.png", + "x": -27, + "y": -29 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_2.png", + "x": -28, + "y": -41 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_3.png", + "x": -23, + "y": -69 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_4.png", + "x": -10, + "y": -84 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_5.png", + "x": -11, + "y": -68 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_6.png", + "x": -31, + "y": -177 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_7.png", + "x": -28, + "y": -14 + }, + { + "path": "track/corkscrew/large_half_loop_left_1_6_2.png", + "x": -11, + "y": -177 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_2_2.png", + "x": -6, + "y": -8 + }, + { + "path": "track/corkscrew/large_half_loop_left_2_3_2.png", + "x": -19, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_left_3_3_2.png", + "x": -28, + "y": -37 + }, + { + "path": "track/corkscrew/large_half_loop_right_2_3_2.png", + "x": -32, + "y": -37 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_2_2.png", + "x": -28, + "y": -8 + }, + { + "path": "track/corkscrew/large_half_loop_right_3_3_2.png", + "x": -29, + "y": -25 + }, + { + "path": "track/corkscrew/large_half_loop_right_4_6_2.png", + "x": -31, + "y": -177 + }, + { + "path": "track/corkscrew/barrel_roll_left_1_1.png", + "x": -24, + "y": 6, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_1_2.png", + "x": -15, + "y": 6, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_1_3.png", + "x": -22, + "y": -17, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_1_4.png", + "x": -21, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_1_5.png", + "x": -14, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_1_6.png", + "x": -13, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_2_1.png", + "x": -24, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_2_2.png", + "x": -25, + "y": 4, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_2_3.png", + "x": -28, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_2_4.png", + "x": -28, + "y": -8, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_2_5.png", + "x": -30, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_2_6.png", + "x": -32, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_3_1.png", + "x": -30, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_3_2.png", + "x": -31, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_3_3.png", + "x": -25, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_3_4.png", + "x": -28, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_3_5.png", + "x": -3, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_3_6.png", + "x": -25, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_4_1.png", + "x": -17, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_4_2.png", + "x": -7, + "y": 14, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_4_3.png", + "x": -13, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_4_4.png", + "x": -10, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_4_5.png", + "x": -22, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_left_4_6.png", + "x": -24, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_1_1.png", + "x": -25, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_1_2.png", + "x": -15, + "y": 15, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_1_3.png", + "x": -28, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_1_4.png", + "x": -27, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_1_5.png", + "x": -22, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_1_6.png", + "x": -24, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_2_1.png", + "x": -24, + "y": -5, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_2_2.png", + "x": -17, + "y": 10, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_2_3.png", + "x": -8, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_2_4.png", + "x": -1, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_2_5.png", + "x": -8, + "y": -12, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_2_6.png", + "x": -7, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_3_1.png", + "x": -4, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_3_2.png", + "x": -4, + "y": 4, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_3_3.png", + "x": 2, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_3_4.png", + "x": 0, + "y": -9, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_3_5.png", + "x": -10, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_3_6.png", + "x": -24, + "y": -24, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_4_1.png", + "x": -11, + "y": 6, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_4_2.png", + "x": -21, + "y": 6, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_4_3.png", + "x": -28, + "y": -18, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_4_4.png", + "x": -29, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_4_5.png", + "x": -23, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/barrel_roll_right_4_6.png", + "x": -24, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_1_1.png", + "x": -24, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_1_2.png", + "x": -10, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_1_3.png", + "x": -10, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_1_4.png", + "x": -11, + "y": -35, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_1_5.png", + "x": -19, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_1_6.png", + "x": -21, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_2_1.png", + "x": -14, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_2_2.png", + "x": -24, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_2_3.png", + "x": -23, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_2_4.png", + "x": -23, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_2_5.png", + "x": -21, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_2_6.png", + "x": -26, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_3_1.png", + "x": -21, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_3_2.png", + "x": -22, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_3_3.png", + "x": -25, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_3_4.png", + "x": -24, + "y": -27, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_4_1.png", + "x": -18, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_4_2.png", + "x": -12, + "y": -39, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_4_3.png", + "x": -22, + "y": -17, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_left_4_4.png", + "x": -22, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_1_1.png", + "x": -24, + "y": -30, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_1_2.png", + "x": -29, + "y": -39, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_1_3.png", + "x": -23, + "y": -17, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_1_4.png", + "x": -35, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_2_1.png", + "x": -24, + "y": -13, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_2_2.png", + "x": -17, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_2_3.png", + "x": -14, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_2_4.png", + "x": -23, + "y": -28, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_3_1.png", + "x": -9, + "y": -4, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_3_2.png", + "x": -9, + "y": -6, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_3_3.png", + "x": -11, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_3_4.png", + "x": -11, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_3_5.png", + "x": -22, + "y": -16, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_3_6.png", + "x": -22, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_4_1.png", + "x": -25, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_4_2.png", + "x": -31, + "y": -14, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_4_3.png", + "x": -25, + "y": -22, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_4_4.png", + "x": -39, + "y": -35, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_4_5.png", + "x": -19, + "y": -20, + "palette": "keep" + }, + { + "path": "track/corkscrew/zero_g_roll_right_4_6.png", + "x": -25, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_1_1.png", + "x": -25, + "y": -46, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_1_2.png", + "x": -26, + "y": -48, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_1_3.png", + "x": -17, + "y": -51, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_1_4.png", + "x": -11, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_1_5.png", + "x": -15, + "y": -40, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_1_6.png", + "x": -14, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_1_7.png", + "x": -19, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_1.png", + "x": -26, + "y": -17, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_2.png", + "x": -26, + "y": -43, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_3.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_4.png", + "x": -28, + "y": -34, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_5.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_6.png", + "x": -32, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_7.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_2_8.png", + "x": -30, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_1.png", + "x": -11, + "y": -32, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_2.png", + "x": -15, + "y": -31, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_3.png", + "x": -31, + "y": -41, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_4.png", + "x": -32, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_5.png", + "x": -24, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_6.png", + "x": -24, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_7.png", + "x": -24, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_3_8.png", + "x": -23, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_4_1.png", + "x": -17, + "y": -52, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_4_2.png", + "x": -16, + "y": -47, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_4_3.png", + "x": -11, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_4_4.png", + "x": -30, + "y": -57, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_4_5.png", + "x": -20, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_left_4_6.png", + "x": -23, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_1_1.png", + "x": -25, + "y": -54, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_1_2.png", + "x": -32, + "y": -47, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_1_3.png", + "x": -29, + "y": -33, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_1_4.png", + "x": -31, + "y": -57, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_1_5.png", + "x": -25, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_1_6.png", + "x": -28, + "y": -25, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_1.png", + "x": -18, + "y": -32, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_2.png", + "x": -26, + "y": -31, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_3.png", + "x": -25, + "y": -41, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_4.png", + "x": -23, + "y": -23, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_5.png", + "x": -18, + "y": -29, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_6.png", + "x": 15, + "y": -27, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_7.png", + "x": -8, + "y": -11, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_2_8.png", + "x": -28, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_1.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_2.png", + "x": -19, + "y": -43, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_3.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_4.png", + "x": -15, + "y": -34, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_5.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_6.png", + "x": -5, + "y": -26, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_7.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_3_8.png", + "x": -23, + "y": -21, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_4_1.png", + "x": -21, + "y": -46, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_4_2.png", + "x": -23, + "y": -50, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_4_3.png", + "x": -32, + "y": -51, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_4_4.png", + "x": -27, + "y": -36, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_4_5.png", + "x": -29, + "y": -40, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_4_6.png", + "x": -18, + "y": -19, + "palette": "keep" + }, + { + "path": "track/corkscrew/large_zero_g_roll_right_4_7.png", + "x": -25, + "y": -25, + "palette": "keep" + }, { "path": "track/lim/barrel_roll_left_1_1.png", "x": -22, diff --git a/resources/g2/track/corkscrew/barrel_roll_left_1_1.png b/resources/g2/track/corkscrew/barrel_roll_left_1_1.png new file mode 100644 index 0000000000..300d3ea5e6 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_1_1.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_1_2.png b/resources/g2/track/corkscrew/barrel_roll_left_1_2.png new file mode 100644 index 0000000000..f05203dc8f Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_1_2.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_1_3.png b/resources/g2/track/corkscrew/barrel_roll_left_1_3.png new file mode 100644 index 0000000000..d495e75e02 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_1_3.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_1_4.png b/resources/g2/track/corkscrew/barrel_roll_left_1_4.png new file mode 100644 index 0000000000..b8454b9100 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_1_4.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_1_5.png b/resources/g2/track/corkscrew/barrel_roll_left_1_5.png new file mode 100644 index 0000000000..90f9c9ca64 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_1_5.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_1_6.png b/resources/g2/track/corkscrew/barrel_roll_left_1_6.png new file mode 100644 index 0000000000..86423387b3 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_1_6.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_2_1.png b/resources/g2/track/corkscrew/barrel_roll_left_2_1.png new file mode 100644 index 0000000000..6b4a1bf450 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_2_1.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_2_2.png b/resources/g2/track/corkscrew/barrel_roll_left_2_2.png new file mode 100644 index 0000000000..ccba38e00b Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_2_2.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_2_3.png b/resources/g2/track/corkscrew/barrel_roll_left_2_3.png new file mode 100644 index 0000000000..2d820a308f Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_2_3.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_2_4.png b/resources/g2/track/corkscrew/barrel_roll_left_2_4.png new file mode 100644 index 0000000000..8d15197d9e Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_2_4.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_2_5.png b/resources/g2/track/corkscrew/barrel_roll_left_2_5.png new file mode 100644 index 0000000000..c30c5af663 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_2_5.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_2_6.png b/resources/g2/track/corkscrew/barrel_roll_left_2_6.png new file mode 100644 index 0000000000..9023a23450 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_2_6.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_3_1.png b/resources/g2/track/corkscrew/barrel_roll_left_3_1.png new file mode 100644 index 0000000000..bc461e9faf Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_3_1.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_3_2.png b/resources/g2/track/corkscrew/barrel_roll_left_3_2.png new file mode 100644 index 0000000000..cf79a31a6b Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_3_2.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_3_3.png b/resources/g2/track/corkscrew/barrel_roll_left_3_3.png new file mode 100644 index 0000000000..9c925922ca Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_3_3.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_3_4.png b/resources/g2/track/corkscrew/barrel_roll_left_3_4.png new file mode 100644 index 0000000000..27c5240950 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_3_4.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_3_5.png b/resources/g2/track/corkscrew/barrel_roll_left_3_5.png new file mode 100644 index 0000000000..f41ba84698 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_3_5.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_3_6.png b/resources/g2/track/corkscrew/barrel_roll_left_3_6.png new file mode 100644 index 0000000000..d414d96b06 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_3_6.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_4_1.png b/resources/g2/track/corkscrew/barrel_roll_left_4_1.png new file mode 100644 index 0000000000..786a7eb250 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_4_1.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_4_2.png b/resources/g2/track/corkscrew/barrel_roll_left_4_2.png new file mode 100644 index 0000000000..50d3a74fe2 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_4_2.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_4_3.png b/resources/g2/track/corkscrew/barrel_roll_left_4_3.png new file mode 100644 index 0000000000..2733e28088 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_4_3.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_4_4.png b/resources/g2/track/corkscrew/barrel_roll_left_4_4.png new file mode 100644 index 0000000000..81ffdc09b3 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_4_4.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_4_5.png b/resources/g2/track/corkscrew/barrel_roll_left_4_5.png new file mode 100644 index 0000000000..bb5ca9c55c Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_4_5.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_left_4_6.png b/resources/g2/track/corkscrew/barrel_roll_left_4_6.png new file mode 100644 index 0000000000..1f13667eb9 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_left_4_6.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_1_1.png b/resources/g2/track/corkscrew/barrel_roll_right_1_1.png new file mode 100644 index 0000000000..607ac9ce4a Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_1_1.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_1_2.png b/resources/g2/track/corkscrew/barrel_roll_right_1_2.png new file mode 100644 index 0000000000..1683853fe6 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_1_2.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_1_3.png b/resources/g2/track/corkscrew/barrel_roll_right_1_3.png new file mode 100644 index 0000000000..cd16e1c2bd Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_1_3.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_1_4.png b/resources/g2/track/corkscrew/barrel_roll_right_1_4.png new file mode 100644 index 0000000000..566af467db Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_1_4.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_1_5.png b/resources/g2/track/corkscrew/barrel_roll_right_1_5.png new file mode 100644 index 0000000000..69859643b6 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_1_5.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_1_6.png b/resources/g2/track/corkscrew/barrel_roll_right_1_6.png new file mode 100644 index 0000000000..081da33671 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_1_6.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_2_1.png b/resources/g2/track/corkscrew/barrel_roll_right_2_1.png new file mode 100644 index 0000000000..095af452dc Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_2_1.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_2_2.png b/resources/g2/track/corkscrew/barrel_roll_right_2_2.png new file mode 100644 index 0000000000..7366c8899f Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_2_2.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_2_3.png b/resources/g2/track/corkscrew/barrel_roll_right_2_3.png new file mode 100644 index 0000000000..52d6cb3510 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_2_3.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_2_4.png b/resources/g2/track/corkscrew/barrel_roll_right_2_4.png new file mode 100644 index 0000000000..089f34c8a2 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_2_4.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_2_5.png b/resources/g2/track/corkscrew/barrel_roll_right_2_5.png new file mode 100644 index 0000000000..d3b2510bc9 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_2_5.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_2_6.png b/resources/g2/track/corkscrew/barrel_roll_right_2_6.png new file mode 100644 index 0000000000..5db309e34b Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_2_6.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_3_1.png b/resources/g2/track/corkscrew/barrel_roll_right_3_1.png new file mode 100644 index 0000000000..7526d13a15 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_3_1.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_3_2.png b/resources/g2/track/corkscrew/barrel_roll_right_3_2.png new file mode 100644 index 0000000000..e120b69e62 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_3_2.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_3_3.png b/resources/g2/track/corkscrew/barrel_roll_right_3_3.png new file mode 100644 index 0000000000..296ae3a909 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_3_3.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_3_4.png b/resources/g2/track/corkscrew/barrel_roll_right_3_4.png new file mode 100644 index 0000000000..3803bb5361 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_3_4.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_3_5.png b/resources/g2/track/corkscrew/barrel_roll_right_3_5.png new file mode 100644 index 0000000000..29a9d391ed Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_3_5.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_3_6.png b/resources/g2/track/corkscrew/barrel_roll_right_3_6.png new file mode 100644 index 0000000000..8f53d91e5e Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_3_6.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_4_1.png b/resources/g2/track/corkscrew/barrel_roll_right_4_1.png new file mode 100644 index 0000000000..51295ff2e7 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_4_1.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_4_2.png b/resources/g2/track/corkscrew/barrel_roll_right_4_2.png new file mode 100644 index 0000000000..1e10c9b782 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_4_2.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_4_3.png b/resources/g2/track/corkscrew/barrel_roll_right_4_3.png new file mode 100644 index 0000000000..785f64a45b Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_4_3.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_4_4.png b/resources/g2/track/corkscrew/barrel_roll_right_4_4.png new file mode 100644 index 0000000000..b515bc70a8 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_4_4.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_4_5.png b/resources/g2/track/corkscrew/barrel_roll_right_4_5.png new file mode 100644 index 0000000000..a481433bc5 Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_4_5.png differ diff --git a/resources/g2/track/corkscrew/barrel_roll_right_4_6.png b/resources/g2/track/corkscrew/barrel_roll_right_4_6.png new file mode 100644 index 0000000000..e6f2762d5a Binary files /dev/null and b/resources/g2/track/corkscrew/barrel_roll_right_4_6.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_1.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_1.png new file mode 100644 index 0000000000..76c74fee72 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_1.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_2_1.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_2_1.png new file mode 100644 index 0000000000..b8792a1b7f Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_2_1.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_2_2.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_2_2.png new file mode 100644 index 0000000000..d278348e09 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_2_2.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_3.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_3.png new file mode 100644 index 0000000000..04f5315d95 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_3.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_4.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_4.png new file mode 100644 index 0000000000..ee7e037dc5 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_4.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_1_1.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_1_1.png new file mode 100644 index 0000000000..ed2bfa6be1 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_1_1.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_1_2.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_1_2.png new file mode 100644 index 0000000000..05fdfcae14 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_1_2.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_2.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_2.png new file mode 100644 index 0000000000..6a3593f567 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_2.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_3.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_3.png new file mode 100644 index 0000000000..71517ec9eb Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_3.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_4.png b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_4.png new file mode 100644 index 0000000000..adabbc32e4 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_left_bank_diag_4.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_1.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_1.png new file mode 100644 index 0000000000..c0f89bd1bb Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_1.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_2.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_2.png new file mode 100644 index 0000000000..51c960d1a1 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_2.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_3_1.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_3_1.png new file mode 100644 index 0000000000..512aebf457 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_3_1.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_3_2.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_3_2.png new file mode 100644 index 0000000000..bcbf4d0b36 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_3_2.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_4.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_4.png new file mode 100644 index 0000000000..d6b4ed8e3b Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_4.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_1.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_1.png new file mode 100644 index 0000000000..c0112e0e27 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_1.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_2.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_2.png new file mode 100644 index 0000000000..4688a1c2d1 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_2.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_3_1.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_3_1.png new file mode 100644 index 0000000000..80c2bfb032 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_3_1.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_3_2.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_3_2.png new file mode 100644 index 0000000000..ef044bbfe3 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_3_2.png differ diff --git a/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_4.png b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_4.png new file mode 100644 index 0000000000..7076466376 Binary files /dev/null and b/resources/g2/track/corkscrew/flat_to_gentle_up_right_bank_diag_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_1.png new file mode 100644 index 0000000000..9422ff97d9 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_2.png new file mode 100644 index 0000000000..8c3c739c12 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_3.png b/resources/g2/track/corkscrew/gentle_up_left_bank_3.png new file mode 100644 index 0000000000..96c2836aed Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_3.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_4.png b/resources/g2/track/corkscrew/gentle_up_left_bank_4.png new file mode 100644 index 0000000000..6f7012680f Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_diag_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_diag_1.png new file mode 100644 index 0000000000..962a4cd8cc Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_diag_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_diag_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_diag_2.png new file mode 100644 index 0000000000..961ca5620d Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_diag_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_diag_3.png b/resources/g2/track/corkscrew/gentle_up_left_bank_diag_3.png new file mode 100644 index 0000000000..abe3379c70 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_diag_3.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_diag_4.png b/resources/g2/track/corkscrew/gentle_up_left_bank_diag_4.png new file mode 100644 index 0000000000..e2155f6bb6 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_diag_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_1.png new file mode 100644 index 0000000000..cdd60b12a5 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_2_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_2_1.png new file mode 100644 index 0000000000..0cb46c5519 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_2_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_2_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_2_2.png new file mode 100644 index 0000000000..1c5f6467ac Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_2_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_3.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_3.png new file mode 100644 index 0000000000..2d731babb0 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_3.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_4.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_4.png new file mode 100644 index 0000000000..db0dd70248 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_1_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_1_1.png new file mode 100644 index 0000000000..8b884d17a1 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_1_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_1_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_1_2.png new file mode 100644 index 0000000000..2049df1505 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_1_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_2.png new file mode 100644 index 0000000000..009ba24a55 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_3.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_3.png new file mode 100644 index 0000000000..c8442614f1 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_3.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_4.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_4.png new file mode 100644 index 0000000000..5551b4b43a Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_flat_diag_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_1.png new file mode 100644 index 0000000000..9c8f8e9e2d Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_2_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..e016902d7f Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_2_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..651ebb0c1d Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_3.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_3.png new file mode 100644 index 0000000000..f3d2c6ee7d Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_3.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_4.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_4.png new file mode 100644 index 0000000000..39169932b8 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_1_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_1_1.png new file mode 100644 index 0000000000..9635c5399a Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_1_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_1_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_1_2.png new file mode 100644 index 0000000000..8c770bc14f Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_1_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..614d3002c8 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_3.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_3.png new file mode 100644 index 0000000000..95e364aa3c Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_3.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_4.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..f200848bee Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_1.png new file mode 100644 index 0000000000..160fd51139 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_2.png new file mode 100644 index 0000000000..0d8a707f29 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_3.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_3.png new file mode 100644 index 0000000000..aab7785f7f Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_3.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_4.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_4.png new file mode 100644 index 0000000000..7e1768e6fb Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_1.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_1.png new file mode 100644 index 0000000000..337d7c8969 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_2.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_2.png new file mode 100644 index 0000000000..b1a3d038ec Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_3.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_3.png new file mode 100644 index 0000000000..5892859de0 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_3.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_4.png b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_4.png new file mode 100644 index 0000000000..f8cf03e89d Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_left_bank_to_left_bank_diag_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_1.png new file mode 100644 index 0000000000..f8f4d3df6b Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_2.png new file mode 100644 index 0000000000..d3ec2f34cb Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_3.png b/resources/g2/track/corkscrew/gentle_up_right_bank_3.png new file mode 100644 index 0000000000..fae56c9883 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_3.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_4.png b/resources/g2/track/corkscrew/gentle_up_right_bank_4.png new file mode 100644 index 0000000000..b280e2f289 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_diag_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_diag_1.png new file mode 100644 index 0000000000..f5f7812f67 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_diag_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_diag_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_diag_2.png new file mode 100644 index 0000000000..46162c4a8d Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_diag_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_diag_3.png b/resources/g2/track/corkscrew/gentle_up_right_bank_diag_3.png new file mode 100644 index 0000000000..a5f26c7669 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_diag_3.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_diag_4.png b/resources/g2/track/corkscrew/gentle_up_right_bank_diag_4.png new file mode 100644 index 0000000000..dc2e6452e7 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_diag_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_1.png new file mode 100644 index 0000000000..c85c1c6331 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_2.png new file mode 100644 index 0000000000..72b9abae43 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_3_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_3_1.png new file mode 100644 index 0000000000..e65e47f83c Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_3_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_3_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_3_2.png new file mode 100644 index 0000000000..7adda450fb Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_3_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_4.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_4.png new file mode 100644 index 0000000000..26ea4a7deb Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_1.png new file mode 100644 index 0000000000..3764b5c21a Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_2.png new file mode 100644 index 0000000000..f8a481aa30 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_3_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_3_1.png new file mode 100644 index 0000000000..509523128e Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_3_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_3_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_3_2.png new file mode 100644 index 0000000000..5e4cf1a73e Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_3_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_4.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_4.png new file mode 100644 index 0000000000..23bae9e6bd Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_flat_diag_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_1.png new file mode 100644 index 0000000000..31197aa875 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_2.png new file mode 100644 index 0000000000..0b47fad82a Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_3_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..aaae065671 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_3_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..2016027e44 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_4.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_4.png new file mode 100644 index 0000000000..50bce22ece Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_1.png new file mode 100644 index 0000000000..7df31fec80 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..82cedc55a0 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_1.png new file mode 100644 index 0000000000..deb68081d0 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_2.png new file mode 100644 index 0000000000..38a274e595 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_3_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_4.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..6616a8594a Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_1.png new file mode 100644 index 0000000000..958ca3bab2 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_2.png new file mode 100644 index 0000000000..dc5eb730b9 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_3.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_3.png new file mode 100644 index 0000000000..b4b0ab0f6d Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_3.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_4.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_4.png new file mode 100644 index 0000000000..c3418825ec Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_1.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_1.png new file mode 100644 index 0000000000..b51a07b325 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_2.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_2.png new file mode 100644 index 0000000000..e57c81eaa0 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_3.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_3.png new file mode 100644 index 0000000000..8b905d236a Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_3.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_4.png b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_4.png new file mode 100644 index 0000000000..77b24c5f5b Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_right_bank_to_right_bank_diag_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_1.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_1.png new file mode 100644 index 0000000000..9e840387c4 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_2_1.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_2_1.png new file mode 100644 index 0000000000..861f53a4eb Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_2_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_2_2.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_2_2.png new file mode 100644 index 0000000000..48c96820b0 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_2_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_3.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_3.png new file mode 100644 index 0000000000..2fe31b86e0 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_3.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_4.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_4.png new file mode 100644 index 0000000000..a7f930bf8e Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_1_1.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_1_1.png new file mode 100644 index 0000000000..00647f6de6 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_1_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_1_2.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_1_2.png new file mode 100644 index 0000000000..d3e98d71e8 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_1_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_2.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_2.png new file mode 100644 index 0000000000..3dde06d52a Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_3.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_3.png new file mode 100644 index 0000000000..ab49f4f3a7 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_3.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_4.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_4.png new file mode 100644 index 0000000000..cb8b168aaa Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_left_bank_diag_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_1.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_1.png new file mode 100644 index 0000000000..1c1110e7b6 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_2.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_2.png new file mode 100644 index 0000000000..0bd93563cb Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_3_1.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_3_1.png new file mode 100644 index 0000000000..80985c5c61 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_3_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_3_2.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_3_2.png new file mode 100644 index 0000000000..36f132ed46 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_3_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_4.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_4.png new file mode 100644 index 0000000000..efa5f88c33 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_4.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_1.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_1.png new file mode 100644 index 0000000000..e564cbce98 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_2.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_2.png new file mode 100644 index 0000000000..60b54a7c6c Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_1.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_1.png new file mode 100644 index 0000000000..d7ec2f4173 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_1.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_2.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_2.png new file mode 100644 index 0000000000..268d2441d7 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_3_2.png differ diff --git a/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_4.png b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_4.png new file mode 100644 index 0000000000..e1a0c91380 Binary files /dev/null and b/resources/g2/track/corkscrew/gentle_up_to_gentle_up_right_bank_diag_4.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_1_1.png b/resources/g2/track/corkscrew/large_corkscrew_left_1_1.png new file mode 100644 index 0000000000..3b350782b1 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_1_1.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_1_2.png b/resources/g2/track/corkscrew/large_corkscrew_left_1_2.png new file mode 100644 index 0000000000..a4c5f6d56d Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_1_2.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_1_3.png b/resources/g2/track/corkscrew/large_corkscrew_left_1_3.png new file mode 100644 index 0000000000..9556fbf2fd Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_1_3.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_1_4.png b/resources/g2/track/corkscrew/large_corkscrew_left_1_4.png new file mode 100644 index 0000000000..f5cf0d1174 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_1_4.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_1_5.png b/resources/g2/track/corkscrew/large_corkscrew_left_1_5.png new file mode 100644 index 0000000000..5c5749479b Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_1_5.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_2_1.png b/resources/g2/track/corkscrew/large_corkscrew_left_2_1.png new file mode 100644 index 0000000000..64e3878fc4 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_2_1.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_2_2.png b/resources/g2/track/corkscrew/large_corkscrew_left_2_2.png new file mode 100644 index 0000000000..22a9f55524 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_2_3.png b/resources/g2/track/corkscrew/large_corkscrew_left_2_3.png new file mode 100644 index 0000000000..948a25b94d Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_2_3.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_2_4.png b/resources/g2/track/corkscrew/large_corkscrew_left_2_4.png new file mode 100644 index 0000000000..0e70f099c1 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_2_4.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_2_5.png b/resources/g2/track/corkscrew/large_corkscrew_left_2_5.png new file mode 100644 index 0000000000..28f65b73e1 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_2_5.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_3_1.png b/resources/g2/track/corkscrew/large_corkscrew_left_3_1.png new file mode 100644 index 0000000000..379eace14a Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_3_1.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_3_2.png b/resources/g2/track/corkscrew/large_corkscrew_left_3_2.png new file mode 100644 index 0000000000..47656c362f Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_3_3.png b/resources/g2/track/corkscrew/large_corkscrew_left_3_3.png new file mode 100644 index 0000000000..b6eec13f9f Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_3_3.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_3_4.png b/resources/g2/track/corkscrew/large_corkscrew_left_3_4.png new file mode 100644 index 0000000000..c8e84cd1a9 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_3_4.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_3_5.png b/resources/g2/track/corkscrew/large_corkscrew_left_3_5.png new file mode 100644 index 0000000000..9cd63c75be Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_3_5.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_4_1.png b/resources/g2/track/corkscrew/large_corkscrew_left_4_1.png new file mode 100644 index 0000000000..6d72e7e680 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_4_1.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_4_2.png b/resources/g2/track/corkscrew/large_corkscrew_left_4_2.png new file mode 100644 index 0000000000..143a505340 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_4_3.png b/resources/g2/track/corkscrew/large_corkscrew_left_4_3.png new file mode 100644 index 0000000000..69da645d7b Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_4_3.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_4_4.png b/resources/g2/track/corkscrew/large_corkscrew_left_4_4.png new file mode 100644 index 0000000000..ed68a096b4 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_4_4.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_4_4_2.png b/resources/g2/track/corkscrew/large_corkscrew_left_4_4_2.png new file mode 100644 index 0000000000..ccc19b778e Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_4_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_left_4_5.png b/resources/g2/track/corkscrew/large_corkscrew_left_4_5.png new file mode 100644 index 0000000000..fad9c6fdb2 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_left_4_5.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_1_1.png b/resources/g2/track/corkscrew/large_corkscrew_right_1_1.png new file mode 100644 index 0000000000..99603101fd Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_1_1.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_1_2.png b/resources/g2/track/corkscrew/large_corkscrew_right_1_2.png new file mode 100644 index 0000000000..1a772978e1 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_1_2.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_1_3.png b/resources/g2/track/corkscrew/large_corkscrew_right_1_3.png new file mode 100644 index 0000000000..169e9f471a Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_1_3.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_1_4.png b/resources/g2/track/corkscrew/large_corkscrew_right_1_4.png new file mode 100644 index 0000000000..9dadf857cf Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_1_4.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_1_4_2.png b/resources/g2/track/corkscrew/large_corkscrew_right_1_4_2.png new file mode 100644 index 0000000000..6927d6ff4c Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_1_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_1_5.png b/resources/g2/track/corkscrew/large_corkscrew_right_1_5.png new file mode 100644 index 0000000000..d02eda005e Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_1_5.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_2_1.png b/resources/g2/track/corkscrew/large_corkscrew_right_2_1.png new file mode 100644 index 0000000000..07f6ebb5d9 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_2_1.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_2_2.png b/resources/g2/track/corkscrew/large_corkscrew_right_2_2.png new file mode 100644 index 0000000000..6728e1cd9d Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_2_3.png b/resources/g2/track/corkscrew/large_corkscrew_right_2_3.png new file mode 100644 index 0000000000..dfffafb51d Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_2_3.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_2_4.png b/resources/g2/track/corkscrew/large_corkscrew_right_2_4.png new file mode 100644 index 0000000000..afdee1cd84 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_2_4.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_2_5.png b/resources/g2/track/corkscrew/large_corkscrew_right_2_5.png new file mode 100644 index 0000000000..3ca4176778 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_2_5.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_3_1.png b/resources/g2/track/corkscrew/large_corkscrew_right_3_1.png new file mode 100644 index 0000000000..d5ea29dcf0 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_3_1.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_3_2.png b/resources/g2/track/corkscrew/large_corkscrew_right_3_2.png new file mode 100644 index 0000000000..00b7d46d37 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_3_3.png b/resources/g2/track/corkscrew/large_corkscrew_right_3_3.png new file mode 100644 index 0000000000..2b8dbdf95e Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_3_3.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_3_4.png b/resources/g2/track/corkscrew/large_corkscrew_right_3_4.png new file mode 100644 index 0000000000..d293c81041 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_3_4.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_3_5.png b/resources/g2/track/corkscrew/large_corkscrew_right_3_5.png new file mode 100644 index 0000000000..eb1dd89d6e Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_3_5.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_4_1.png b/resources/g2/track/corkscrew/large_corkscrew_right_4_1.png new file mode 100644 index 0000000000..87c7f8ef4d Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_4_1.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_4_2.png b/resources/g2/track/corkscrew/large_corkscrew_right_4_2.png new file mode 100644 index 0000000000..2fa73d7f71 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_4_3.png b/resources/g2/track/corkscrew/large_corkscrew_right_4_3.png new file mode 100644 index 0000000000..e995b8778c Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_4_3.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_4_4.png b/resources/g2/track/corkscrew/large_corkscrew_right_4_4.png new file mode 100644 index 0000000000..8d157a579f Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_4_4.png differ diff --git a/resources/g2/track/corkscrew/large_corkscrew_right_4_5.png b/resources/g2/track/corkscrew/large_corkscrew_right_4_5.png new file mode 100644 index 0000000000..c847cb31e9 Binary files /dev/null and b/resources/g2/track/corkscrew/large_corkscrew_right_4_5.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_1_1.png b/resources/g2/track/corkscrew/large_half_loop_left_1_1.png new file mode 100644 index 0000000000..34ee4626ab Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_1_1.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_1_2.png b/resources/g2/track/corkscrew/large_half_loop_left_1_2.png new file mode 100644 index 0000000000..79c0bde4a3 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_1_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_1_3.png b/resources/g2/track/corkscrew/large_half_loop_left_1_3.png new file mode 100644 index 0000000000..59ce67456f Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_1_3.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_1_4.png b/resources/g2/track/corkscrew/large_half_loop_left_1_4.png new file mode 100644 index 0000000000..1b32f4c5e0 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_1_4.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_1_5.png b/resources/g2/track/corkscrew/large_half_loop_left_1_5.png new file mode 100644 index 0000000000..ec0f6a0b16 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_1_5.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_1_6.png b/resources/g2/track/corkscrew/large_half_loop_left_1_6.png new file mode 100644 index 0000000000..ae0a266729 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_1_6.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_1_6_2.png b/resources/g2/track/corkscrew/large_half_loop_left_1_6_2.png new file mode 100644 index 0000000000..c2fa660c8a Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_1_6_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_1_7.png b/resources/g2/track/corkscrew/large_half_loop_left_1_7.png new file mode 100644 index 0000000000..ef70b0a6e8 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_1_7.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_2_1.png b/resources/g2/track/corkscrew/large_half_loop_left_2_1.png new file mode 100644 index 0000000000..3a4be08b1e Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_2_1.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_2_2.png b/resources/g2/track/corkscrew/large_half_loop_left_2_2.png new file mode 100644 index 0000000000..b09e705342 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_2_2_2.png b/resources/g2/track/corkscrew/large_half_loop_left_2_2_2.png new file mode 100644 index 0000000000..cef4190e1c Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_2_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_2_3.png b/resources/g2/track/corkscrew/large_half_loop_left_2_3.png new file mode 100644 index 0000000000..7abd6bd840 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_2_3.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_2_3_2.png b/resources/g2/track/corkscrew/large_half_loop_left_2_3_2.png new file mode 100644 index 0000000000..cc64446712 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_2_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_2_4.png b/resources/g2/track/corkscrew/large_half_loop_left_2_4.png new file mode 100644 index 0000000000..f435b364bb Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_2_4.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_2_5.png b/resources/g2/track/corkscrew/large_half_loop_left_2_5.png new file mode 100644 index 0000000000..9cf39ad5f4 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_2_5.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_2_6.png b/resources/g2/track/corkscrew/large_half_loop_left_2_6.png new file mode 100644 index 0000000000..1b644b97db Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_2_6.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_2_7.png b/resources/g2/track/corkscrew/large_half_loop_left_2_7.png new file mode 100644 index 0000000000..00ca4cffd1 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_2_7.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_3_1.png b/resources/g2/track/corkscrew/large_half_loop_left_3_1.png new file mode 100644 index 0000000000..1ea3c65508 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_3_1.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_3_2.png b/resources/g2/track/corkscrew/large_half_loop_left_3_2.png new file mode 100644 index 0000000000..8d82612b35 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_3_3.png b/resources/g2/track/corkscrew/large_half_loop_left_3_3.png new file mode 100644 index 0000000000..cd216aa053 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_3_3.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_3_3_2.png b/resources/g2/track/corkscrew/large_half_loop_left_3_3_2.png new file mode 100644 index 0000000000..e20b4db71b Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_3_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_3_4.png b/resources/g2/track/corkscrew/large_half_loop_left_3_4.png new file mode 100644 index 0000000000..8eb6313037 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_3_4.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_3_5.png b/resources/g2/track/corkscrew/large_half_loop_left_3_5.png new file mode 100644 index 0000000000..9e342e0ec2 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_3_5.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_3_6.png b/resources/g2/track/corkscrew/large_half_loop_left_3_6.png new file mode 100644 index 0000000000..784f509d4c Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_3_6.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_3_7.png b/resources/g2/track/corkscrew/large_half_loop_left_3_7.png new file mode 100644 index 0000000000..b6412aa107 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_3_7.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_4_1.png b/resources/g2/track/corkscrew/large_half_loop_left_4_1.png new file mode 100644 index 0000000000..2faf914aa5 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_4_1.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_4_2.png b/resources/g2/track/corkscrew/large_half_loop_left_4_2.png new file mode 100644 index 0000000000..342e4da6ab Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_4_3.png b/resources/g2/track/corkscrew/large_half_loop_left_4_3.png new file mode 100644 index 0000000000..63faed0670 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_4_3.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_4_4.png b/resources/g2/track/corkscrew/large_half_loop_left_4_4.png new file mode 100644 index 0000000000..b7e1c8b15e Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_4_4.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_4_5.png b/resources/g2/track/corkscrew/large_half_loop_left_4_5.png new file mode 100644 index 0000000000..971473024d Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_4_5.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_4_6.png b/resources/g2/track/corkscrew/large_half_loop_left_4_6.png new file mode 100644 index 0000000000..1c5d72632e Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_4_6.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_left_4_7.png b/resources/g2/track/corkscrew/large_half_loop_left_4_7.png new file mode 100644 index 0000000000..530c35ad40 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_left_4_7.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_1_1.png b/resources/g2/track/corkscrew/large_half_loop_right_1_1.png new file mode 100644 index 0000000000..5434d24bac Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_1_1.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_1_2.png b/resources/g2/track/corkscrew/large_half_loop_right_1_2.png new file mode 100644 index 0000000000..6fe797b716 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_1_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_1_3.png b/resources/g2/track/corkscrew/large_half_loop_right_1_3.png new file mode 100644 index 0000000000..0c5d1b8e33 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_1_3.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_1_4.png b/resources/g2/track/corkscrew/large_half_loop_right_1_4.png new file mode 100644 index 0000000000..f5f51e175a Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_1_4.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_1_5.png b/resources/g2/track/corkscrew/large_half_loop_right_1_5.png new file mode 100644 index 0000000000..d2fd83a833 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_1_5.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_1_6.png b/resources/g2/track/corkscrew/large_half_loop_right_1_6.png new file mode 100644 index 0000000000..c4e576c6a6 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_1_6.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_1_7.png b/resources/g2/track/corkscrew/large_half_loop_right_1_7.png new file mode 100644 index 0000000000..e457d8c531 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_1_7.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_2_1.png b/resources/g2/track/corkscrew/large_half_loop_right_2_1.png new file mode 100644 index 0000000000..3ca2be553b Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_2_1.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_2_2.png b/resources/g2/track/corkscrew/large_half_loop_right_2_2.png new file mode 100644 index 0000000000..1b264aee74 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_2_3.png b/resources/g2/track/corkscrew/large_half_loop_right_2_3.png new file mode 100644 index 0000000000..1fe4c129e0 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_2_3.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_2_3_2.png b/resources/g2/track/corkscrew/large_half_loop_right_2_3_2.png new file mode 100644 index 0000000000..40f8c02596 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_2_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_2_4.png b/resources/g2/track/corkscrew/large_half_loop_right_2_4.png new file mode 100644 index 0000000000..c20c6f3f76 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_2_4.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_2_5.png b/resources/g2/track/corkscrew/large_half_loop_right_2_5.png new file mode 100644 index 0000000000..d7ba4c7b4d Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_2_5.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_2_6.png b/resources/g2/track/corkscrew/large_half_loop_right_2_6.png new file mode 100644 index 0000000000..c992b94dec Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_2_6.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_2_7.png b/resources/g2/track/corkscrew/large_half_loop_right_2_7.png new file mode 100644 index 0000000000..69e2a10db1 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_2_7.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_3_1.png b/resources/g2/track/corkscrew/large_half_loop_right_3_1.png new file mode 100644 index 0000000000..4fa735bab8 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_3_1.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_3_2.png b/resources/g2/track/corkscrew/large_half_loop_right_3_2.png new file mode 100644 index 0000000000..cddfe0be7b Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_3_2_2.png b/resources/g2/track/corkscrew/large_half_loop_right_3_2_2.png new file mode 100644 index 0000000000..483d9045eb Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_3_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_3_3.png b/resources/g2/track/corkscrew/large_half_loop_right_3_3.png new file mode 100644 index 0000000000..d7d520995b Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_3_3.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_3_3_2.png b/resources/g2/track/corkscrew/large_half_loop_right_3_3_2.png new file mode 100644 index 0000000000..d103e17dc1 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_3_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_3_4.png b/resources/g2/track/corkscrew/large_half_loop_right_3_4.png new file mode 100644 index 0000000000..bf62d9aee7 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_3_4.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_3_5.png b/resources/g2/track/corkscrew/large_half_loop_right_3_5.png new file mode 100644 index 0000000000..38a8a094fb Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_3_5.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_3_6.png b/resources/g2/track/corkscrew/large_half_loop_right_3_6.png new file mode 100644 index 0000000000..62dc7f0bff Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_3_6.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_3_7.png b/resources/g2/track/corkscrew/large_half_loop_right_3_7.png new file mode 100644 index 0000000000..0797622c9e Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_3_7.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_4_1.png b/resources/g2/track/corkscrew/large_half_loop_right_4_1.png new file mode 100644 index 0000000000..59508cf804 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_4_1.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_4_2.png b/resources/g2/track/corkscrew/large_half_loop_right_4_2.png new file mode 100644 index 0000000000..02dc3dbfd8 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_4_3.png b/resources/g2/track/corkscrew/large_half_loop_right_4_3.png new file mode 100644 index 0000000000..7427307a65 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_4_3.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_4_4.png b/resources/g2/track/corkscrew/large_half_loop_right_4_4.png new file mode 100644 index 0000000000..c2e2fb49e4 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_4_4.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_4_5.png b/resources/g2/track/corkscrew/large_half_loop_right_4_5.png new file mode 100644 index 0000000000..c132424fb8 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_4_5.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_4_6.png b/resources/g2/track/corkscrew/large_half_loop_right_4_6.png new file mode 100644 index 0000000000..45c8a28772 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_4_6.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_4_6_2.png b/resources/g2/track/corkscrew/large_half_loop_right_4_6_2.png new file mode 100644 index 0000000000..3376e15d35 Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_4_6_2.png differ diff --git a/resources/g2/track/corkscrew/large_half_loop_right_4_7.png b/resources/g2/track/corkscrew/large_half_loop_right_4_7.png new file mode 100644 index 0000000000..a344a5f5be Binary files /dev/null and b/resources/g2/track/corkscrew/large_half_loop_right_4_7.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_1.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_1.png new file mode 100644 index 0000000000..ff99a64267 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_2.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_2.png new file mode 100644 index 0000000000..5f4479a1ad Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_3.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_3.png new file mode 100644 index 0000000000..694f6f12ea Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_4.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_4.png new file mode 100644 index 0000000000..2a87ac8e07 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_1_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_1.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_1.png new file mode 100644 index 0000000000..d751750328 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_2.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_2.png new file mode 100644 index 0000000000..4c10fa8704 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_3.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_3.png new file mode 100644 index 0000000000..238d4da9cc Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_4.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_4.png new file mode 100644 index 0000000000..5ab732ff97 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_2_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_1.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_1.png new file mode 100644 index 0000000000..a8743e47c2 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_2.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_2.png new file mode 100644 index 0000000000..e3ddcdbd89 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_3.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_3.png new file mode 100644 index 0000000000..1c67bffb28 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_4.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_4.png new file mode 100644 index 0000000000..3eab91611c Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_3_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_1.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_1.png new file mode 100644 index 0000000000..a65a139480 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_2.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_2.png new file mode 100644 index 0000000000..2ccbc428a4 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_3.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_3.png new file mode 100644 index 0000000000..b72b836d15 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_4.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_4.png new file mode 100644 index 0000000000..6c4fcde035 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_diag_gentle_up_4_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_1.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_1.png new file mode 100644 index 0000000000..38d4032a74 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_2.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_3.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_3.png new file mode 100644 index 0000000000..f43e0f8a9c Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_4.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_4.png new file mode 100644 index 0000000000..c65ce13fef Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_1_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_1.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_1.png new file mode 100644 index 0000000000..79a1106c15 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_2.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_3.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_3.png new file mode 100644 index 0000000000..2e14765e41 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_4.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_4.png new file mode 100644 index 0000000000..8b55177d86 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_2_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_1.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_1.png new file mode 100644 index 0000000000..18d5ed86f3 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_2.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_3.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_3.png new file mode 100644 index 0000000000..78c1e5babb Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_4.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_4.png new file mode 100644 index 0000000000..1bb7209d85 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_3_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_1.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_1.png new file mode 100644 index 0000000000..1c751b636b Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_2.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_3.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_3.png new file mode 100644 index 0000000000..9be967168f Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_4.png b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_4.png new file mode 100644 index 0000000000..ab2e2f5ed8 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_bank_to_orthogonal_gentle_up_4_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_1.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_1.png new file mode 100644 index 0000000000..399df53045 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_2.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_2.png new file mode 100644 index 0000000000..ce83271484 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_3.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_3.png new file mode 100644 index 0000000000..690740c1d8 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_4.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_4.png new file mode 100644 index 0000000000..b1457093fa Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_1_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_1.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_1.png new file mode 100644 index 0000000000..13496ee003 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_2.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_2.png new file mode 100644 index 0000000000..18502ad12c Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_3.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_3.png new file mode 100644 index 0000000000..9d91b0d269 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_4.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_4.png new file mode 100644 index 0000000000..dd68cce0b9 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_2_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_1.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_1.png new file mode 100644 index 0000000000..82c0e90535 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_2.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_2.png new file mode 100644 index 0000000000..b253f81df1 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_3.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_3.png new file mode 100644 index 0000000000..8853c64c0d Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_4.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_4.png new file mode 100644 index 0000000000..0ffccc184c Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_3_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_1.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_1.png new file mode 100644 index 0000000000..f5d5ff3996 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_2.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_2.png new file mode 100644 index 0000000000..ab491ffe4b Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_3.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_3.png new file mode 100644 index 0000000000..4dfafd78aa Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_4.png b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_4.png new file mode 100644 index 0000000000..b6dd817a1b Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_diag_gentle_up_4_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_1.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_1.png new file mode 100644 index 0000000000..1e74b1a589 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_2.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_3.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_3.png new file mode 100644 index 0000000000..649741a36e Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_4.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_4.png new file mode 100644 index 0000000000..633e87f547 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_1_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_1.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_1.png new file mode 100644 index 0000000000..ec4768cef4 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_2.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_3.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_3.png new file mode 100644 index 0000000000..d34f059012 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_4.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_4.png new file mode 100644 index 0000000000..8a2ddf42c5 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_2_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_1.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_1.png new file mode 100644 index 0000000000..d1b3dec715 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_2.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_3.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_3.png new file mode 100644 index 0000000000..a5fed79b8d Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_4.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_4.png new file mode 100644 index 0000000000..cb1ece8ec1 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_3_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_1.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_1.png new file mode 100644 index 0000000000..0033a24ebb Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_2.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_3.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_3.png new file mode 100644 index 0000000000..cd1c5ebdd3 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_4.png b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_4.png new file mode 100644 index 0000000000..d3e4dc352c Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_left_to_orthogonal_gentle_up_4_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_1.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_1.png new file mode 100644 index 0000000000..7d282926e0 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_2.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_2.png new file mode 100644 index 0000000000..88b42651a2 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_3.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_3.png new file mode 100644 index 0000000000..097ffc61e8 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_4.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_4.png new file mode 100644 index 0000000000..cc800fa0c0 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_1_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_1.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_1.png new file mode 100644 index 0000000000..a811ef7786 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_2.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_2.png new file mode 100644 index 0000000000..f43fe0534e Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_3.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_3.png new file mode 100644 index 0000000000..72ae6370be Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_4.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_4.png new file mode 100644 index 0000000000..c8eef9e949 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_2_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_1.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_1.png new file mode 100644 index 0000000000..a72b05a3b4 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_2.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_2.png new file mode 100644 index 0000000000..1e2580f2a9 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_3.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_3.png new file mode 100644 index 0000000000..7e0dff534a Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_4.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_4.png new file mode 100644 index 0000000000..81cd0a9eb4 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_3_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_1.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_1.png new file mode 100644 index 0000000000..8e091bf2fc Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_2.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_2.png new file mode 100644 index 0000000000..ea2b1c9777 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_3.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_3.png new file mode 100644 index 0000000000..7b42feb939 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_4.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_4.png new file mode 100644 index 0000000000..e089e2b627 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_diag_gentle_up_4_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_1.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_1.png new file mode 100644 index 0000000000..1bd2c4239d Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_2.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_3.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_3.png new file mode 100644 index 0000000000..ceaf39f7aa Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_4.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_4.png new file mode 100644 index 0000000000..3e0e9304ca Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_1_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_1.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_1.png new file mode 100644 index 0000000000..6532371bdf Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_2.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_3.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_3.png new file mode 100644 index 0000000000..60ff711e32 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_4.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_4.png new file mode 100644 index 0000000000..2df458b6b1 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_2_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_1.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_1.png new file mode 100644 index 0000000000..c13c38f4a0 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_2.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_3.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_3.png new file mode 100644 index 0000000000..e118811a87 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_4.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_4.png new file mode 100644 index 0000000000..c977f74ef5 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_3_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_1.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_1.png new file mode 100644 index 0000000000..b4edce8600 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_2.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_3.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_3.png new file mode 100644 index 0000000000..5b4ea026e3 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_4.png b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_4.png new file mode 100644 index 0000000000..0dc722a23c Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_bank_to_orthogonal_gentle_up_4_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_1.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_1.png new file mode 100644 index 0000000000..d3a17520c7 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_2.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_2.png new file mode 100644 index 0000000000..87a46b0a86 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_3.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_3.png new file mode 100644 index 0000000000..e713488ba0 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_4.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_4.png new file mode 100644 index 0000000000..8b6e342692 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_1_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_1.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_1.png new file mode 100644 index 0000000000..ac40413111 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_2.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_2.png new file mode 100644 index 0000000000..84e26b69a5 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_3.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_3.png new file mode 100644 index 0000000000..b148a4e479 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_4.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_4.png new file mode 100644 index 0000000000..9e898eaf7f Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_2_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_1.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_1.png new file mode 100644 index 0000000000..2b58387d0a Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_2.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_2.png new file mode 100644 index 0000000000..39ae32d724 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_3.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_3.png new file mode 100644 index 0000000000..d0fc8830b4 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_4.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_4.png new file mode 100644 index 0000000000..6288af002b Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_3_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_1.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_1.png new file mode 100644 index 0000000000..9630ed7755 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_2.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_2.png new file mode 100644 index 0000000000..63da9b48a9 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_3.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_3.png new file mode 100644 index 0000000000..4891c1c9db Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_4.png b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_4.png new file mode 100644 index 0000000000..9fb97a1b9f Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_diag_gentle_up_4_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_1.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_1.png new file mode 100644 index 0000000000..47a00ab4be Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_2.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_3.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_3.png new file mode 100644 index 0000000000..cf79c0ce85 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_4.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_4.png new file mode 100644 index 0000000000..573ae10d89 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_1_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_1.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_1.png new file mode 100644 index 0000000000..103b1e8b9d Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_2.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_3.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_3.png new file mode 100644 index 0000000000..099ebd127b Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_4.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_4.png new file mode 100644 index 0000000000..a8febe3aee Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_2_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_1.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_1.png new file mode 100644 index 0000000000..c89552a25b Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_2.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_3.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_3.png new file mode 100644 index 0000000000..0a002edf94 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_4.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_4.png new file mode 100644 index 0000000000..56266cccbb Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_3_4.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_1.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_1.png new file mode 100644 index 0000000000..849681b379 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_2.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_3.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_3.png new file mode 100644 index 0000000000..4a08a028b4 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_3.png differ diff --git a/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_4.png b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_4.png new file mode 100644 index 0000000000..efb5774fe1 Binary files /dev/null and b/resources/g2/track/corkscrew/large_turn_right_to_orthogonal_gentle_up_4_4.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_1_1.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_1_1.png new file mode 100644 index 0000000000..f63b5004e1 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_1_1.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_1_2.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_1_2.png new file mode 100644 index 0000000000..2c8ca4e4bf Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_1_2.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_1_3.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_1_3.png new file mode 100644 index 0000000000..57faad0dd2 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_1_3.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_1_4.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_1_4.png new file mode 100644 index 0000000000..bb6a9cf549 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_1_4.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_1_5.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_1_5.png new file mode 100644 index 0000000000..7490901a4a Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_1_5.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_1_6.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_1_6.png new file mode 100644 index 0000000000..cc2877c065 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_1_6.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_1_7.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_1_7.png new file mode 100644 index 0000000000..78e2d5b401 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_1_7.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_2_1.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_1.png new file mode 100644 index 0000000000..6dd8ebe3db Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_1.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_2_2.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_2.png new file mode 100644 index 0000000000..bd2da62db7 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_2_3.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_3.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_2_4.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_4.png new file mode 100644 index 0000000000..df52253b2e Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_4.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_2_5.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_5.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_2_6.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_6.png new file mode 100644 index 0000000000..13d0134b71 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_6.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_2_7.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_7.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_7.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_2_8.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_8.png new file mode 100644 index 0000000000..7bc9ac7927 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_2_8.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_3_1.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_1.png new file mode 100644 index 0000000000..f5210eabc6 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_1.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_3_2.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_2.png new file mode 100644 index 0000000000..df85fc323b Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_3_3.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_3.png new file mode 100644 index 0000000000..1b17be7471 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_3.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_3_4.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_4.png new file mode 100644 index 0000000000..d14c809f54 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_4.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_3_5.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_5.png new file mode 100644 index 0000000000..12564cc676 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_5.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_3_6.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_6.png new file mode 100644 index 0000000000..9447d858e2 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_6.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_3_7.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_7.png new file mode 100644 index 0000000000..3a09224328 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_7.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_3_8.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_8.png new file mode 100644 index 0000000000..56bc3190e7 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_3_8.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_4_1.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_4_1.png new file mode 100644 index 0000000000..fff9430e05 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_4_1.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_4_2.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_4_2.png new file mode 100644 index 0000000000..c8dc77dc62 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_4_3.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_4_3.png new file mode 100644 index 0000000000..ebe4c05856 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_4_3.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_4_4.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_4_4.png new file mode 100644 index 0000000000..8d714e3bae Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_4_4.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_4_5.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_4_5.png new file mode 100644 index 0000000000..c4548ec137 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_4_5.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_left_4_6.png b/resources/g2/track/corkscrew/large_zero_g_roll_left_4_6.png new file mode 100644 index 0000000000..b8afed9505 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_left_4_6.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_1_1.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_1_1.png new file mode 100644 index 0000000000..e1387663af Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_1_1.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_1_2.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_1_2.png new file mode 100644 index 0000000000..1e79bb5b26 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_1_2.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_1_3.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_1_3.png new file mode 100644 index 0000000000..bbe36c9714 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_1_3.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_1_4.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_1_4.png new file mode 100644 index 0000000000..a50bb54b66 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_1_4.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_1_5.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_1_5.png new file mode 100644 index 0000000000..5e63ebbea6 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_1_5.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_1_6.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_1_6.png new file mode 100644 index 0000000000..445078acec Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_1_6.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_2_1.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_1.png new file mode 100644 index 0000000000..0fa989276a Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_1.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_2_2.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_2.png new file mode 100644 index 0000000000..5d9ce209b3 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_2.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_2_3.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_3.png new file mode 100644 index 0000000000..3458dbab1a Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_3.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_2_4.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_4.png new file mode 100644 index 0000000000..02fa5ff09a Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_4.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_2_5.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_5.png new file mode 100644 index 0000000000..2711075cfb Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_5.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_2_6.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_6.png new file mode 100644 index 0000000000..8ef3889ceb Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_6.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_2_7.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_7.png new file mode 100644 index 0000000000..ebc3740879 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_7.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_2_8.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_8.png new file mode 100644 index 0000000000..1e43e68997 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_2_8.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_3_1.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_1.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_1.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_3_2.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_2.png new file mode 100644 index 0000000000..a1b28d01ea Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_2.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_3_3.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_3.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_3_4.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_4.png new file mode 100644 index 0000000000..bc78e8a930 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_4.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_3_5.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_5.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_3_6.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_6.png new file mode 100644 index 0000000000..6c2334bd8a Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_6.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_3_7.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_7.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_7.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_3_8.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_8.png new file mode 100644 index 0000000000..aec3594bb5 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_3_8.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_4_1.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_4_1.png new file mode 100644 index 0000000000..09fbe4cab3 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_4_1.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_4_2.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_4_2.png new file mode 100644 index 0000000000..c9b887dddf Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_4_2.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_4_3.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_4_3.png new file mode 100644 index 0000000000..2380fb7866 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_4_3.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_4_4.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_4_4.png new file mode 100644 index 0000000000..546360aa38 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_4_4.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_4_5.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_4_5.png new file mode 100644 index 0000000000..081affcd4f Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_4_5.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_4_6.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_4_6.png new file mode 100644 index 0000000000..24f40320b2 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_4_6.png differ diff --git a/resources/g2/track/corkscrew/large_zero_g_roll_right_4_7.png b/resources/g2/track/corkscrew/large_zero_g_roll_right_4_7.png new file mode 100644 index 0000000000..d41a8bf460 Binary files /dev/null and b/resources/g2/track/corkscrew/large_zero_g_roll_right_4_7.png differ diff --git a/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_1.png b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_1.png new file mode 100644 index 0000000000..f7f10e76db Binary files /dev/null and b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_1.png differ diff --git a/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_2.png b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_2.png new file mode 100644 index 0000000000..f86a8e97f5 Binary files /dev/null and b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_2.png differ diff --git a/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_3.png b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_3.png new file mode 100644 index 0000000000..489f288acf Binary files /dev/null and b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_3.png differ diff --git a/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_4.png b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_4.png new file mode 100644 index 0000000000..3bad870d2b Binary files /dev/null and b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_4.png differ diff --git a/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_1.png b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_1.png new file mode 100644 index 0000000000..3a85c64ae5 Binary files /dev/null and b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_1.png differ diff --git a/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_2.png b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_2.png new file mode 100644 index 0000000000..170fdab495 Binary files /dev/null and b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_2.png differ diff --git a/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_3.png b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_3.png new file mode 100644 index 0000000000..39d9c6f628 Binary files /dev/null and b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_3.png differ diff --git a/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_4.png b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_4.png new file mode 100644 index 0000000000..9c0a063a31 Binary files /dev/null and b/resources/g2/track/corkscrew/left_bank_to_gentle_up_left_bank_diag_4.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_1_1.png b/resources/g2/track/corkscrew/medium_half_loop_left_1_1.png new file mode 100644 index 0000000000..437ad59a8f Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_1_1.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_1_2.png b/resources/g2/track/corkscrew/medium_half_loop_left_1_2.png new file mode 100644 index 0000000000..ab05b62383 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_1_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_1_3.png b/resources/g2/track/corkscrew/medium_half_loop_left_1_3.png new file mode 100644 index 0000000000..7bdaec4903 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_1_3.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_1_4.png b/resources/g2/track/corkscrew/medium_half_loop_left_1_4.png new file mode 100644 index 0000000000..5aaa326be3 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_1_4.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_1_4_2.png b/resources/g2/track/corkscrew/medium_half_loop_left_1_4_2.png new file mode 100644 index 0000000000..e2abb1a74f Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_1_4_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_1_5.png b/resources/g2/track/corkscrew/medium_half_loop_left_1_5.png new file mode 100644 index 0000000000..4216a52563 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_1_5.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_2_1.png b/resources/g2/track/corkscrew/medium_half_loop_left_2_1.png new file mode 100644 index 0000000000..39326e234f Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_2_1.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_2_1_2.png b/resources/g2/track/corkscrew/medium_half_loop_left_2_1_2.png new file mode 100644 index 0000000000..06c46ae587 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_2_1_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_2_2.png b/resources/g2/track/corkscrew/medium_half_loop_left_2_2.png new file mode 100644 index 0000000000..aca8aa7c86 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_2_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_2_2_2.png b/resources/g2/track/corkscrew/medium_half_loop_left_2_2_2.png new file mode 100644 index 0000000000..b65ce39ecc Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_2_2_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_2_3.png b/resources/g2/track/corkscrew/medium_half_loop_left_2_3.png new file mode 100644 index 0000000000..fb50e5a7a1 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_2_3.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_2_4.png b/resources/g2/track/corkscrew/medium_half_loop_left_2_4.png new file mode 100644 index 0000000000..dcfc746b7b Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_2_4.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_2_5.png b/resources/g2/track/corkscrew/medium_half_loop_left_2_5.png new file mode 100644 index 0000000000..43659009f9 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_2_5.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_3_1.png b/resources/g2/track/corkscrew/medium_half_loop_left_3_1.png new file mode 100644 index 0000000000..9dcb55394e Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_3_1.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_3_2.png b/resources/g2/track/corkscrew/medium_half_loop_left_3_2.png new file mode 100644 index 0000000000..41d31497aa Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_3_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_3_3.png b/resources/g2/track/corkscrew/medium_half_loop_left_3_3.png new file mode 100644 index 0000000000..fb6cf7db66 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_3_3.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_3_4.png b/resources/g2/track/corkscrew/medium_half_loop_left_3_4.png new file mode 100644 index 0000000000..5d6cbc480d Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_3_4.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_3_5.png b/resources/g2/track/corkscrew/medium_half_loop_left_3_5.png new file mode 100644 index 0000000000..3410802e6f Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_3_5.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_4_1.png b/resources/g2/track/corkscrew/medium_half_loop_left_4_1.png new file mode 100644 index 0000000000..c503568113 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_4_1.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_4_2.png b/resources/g2/track/corkscrew/medium_half_loop_left_4_2.png new file mode 100644 index 0000000000..82d6ff0091 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_4_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_4_3.png b/resources/g2/track/corkscrew/medium_half_loop_left_4_3.png new file mode 100644 index 0000000000..ad5f4a4d46 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_4_3.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_4_4.png b/resources/g2/track/corkscrew/medium_half_loop_left_4_4.png new file mode 100644 index 0000000000..9d91736c12 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_4_4.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_4_4_2.png b/resources/g2/track/corkscrew/medium_half_loop_left_4_4_2.png new file mode 100644 index 0000000000..c2a8834ded Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_4_4_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_left_4_5.png b/resources/g2/track/corkscrew/medium_half_loop_left_4_5.png new file mode 100644 index 0000000000..87204db71f Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_left_4_5.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_1_1.png b/resources/g2/track/corkscrew/medium_half_loop_right_1_1.png new file mode 100644 index 0000000000..8c69bb64ff Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_1_1.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_1_2.png b/resources/g2/track/corkscrew/medium_half_loop_right_1_2.png new file mode 100644 index 0000000000..37b4b7b693 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_1_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_1_3.png b/resources/g2/track/corkscrew/medium_half_loop_right_1_3.png new file mode 100644 index 0000000000..8345744113 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_1_3.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_1_4.png b/resources/g2/track/corkscrew/medium_half_loop_right_1_4.png new file mode 100644 index 0000000000..54888500ab Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_1_4.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_1_4_2.png b/resources/g2/track/corkscrew/medium_half_loop_right_1_4_2.png new file mode 100644 index 0000000000..826c200a69 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_1_4_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_1_5.png b/resources/g2/track/corkscrew/medium_half_loop_right_1_5.png new file mode 100644 index 0000000000..4eaba08631 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_1_5.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_2_1.png b/resources/g2/track/corkscrew/medium_half_loop_right_2_1.png new file mode 100644 index 0000000000..a3b013192e Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_2_1.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_2_2.png b/resources/g2/track/corkscrew/medium_half_loop_right_2_2.png new file mode 100644 index 0000000000..613beee3d5 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_2_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_2_3.png b/resources/g2/track/corkscrew/medium_half_loop_right_2_3.png new file mode 100644 index 0000000000..bcd259f9a2 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_2_3.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_2_4.png b/resources/g2/track/corkscrew/medium_half_loop_right_2_4.png new file mode 100644 index 0000000000..618b95fcb0 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_2_4.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_2_5.png b/resources/g2/track/corkscrew/medium_half_loop_right_2_5.png new file mode 100644 index 0000000000..a9e5b4875a Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_2_5.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_3_1.png b/resources/g2/track/corkscrew/medium_half_loop_right_3_1.png new file mode 100644 index 0000000000..723917d254 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_3_1.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_3_1_2.png b/resources/g2/track/corkscrew/medium_half_loop_right_3_1_2.png new file mode 100644 index 0000000000..00fdc0f30a Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_3_1_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_3_2.png b/resources/g2/track/corkscrew/medium_half_loop_right_3_2.png new file mode 100644 index 0000000000..61e29f6d4a Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_3_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_3_2_2.png b/resources/g2/track/corkscrew/medium_half_loop_right_3_2_2.png new file mode 100644 index 0000000000..ddb5f80cf1 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_3_2_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_3_3.png b/resources/g2/track/corkscrew/medium_half_loop_right_3_3.png new file mode 100644 index 0000000000..4803f39aa5 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_3_3.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_3_4.png b/resources/g2/track/corkscrew/medium_half_loop_right_3_4.png new file mode 100644 index 0000000000..8a51f454d6 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_3_4.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_3_5.png b/resources/g2/track/corkscrew/medium_half_loop_right_3_5.png new file mode 100644 index 0000000000..bbafa471d5 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_3_5.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_4_1.png b/resources/g2/track/corkscrew/medium_half_loop_right_4_1.png new file mode 100644 index 0000000000..2da1ed7f09 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_4_1.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_4_2.png b/resources/g2/track/corkscrew/medium_half_loop_right_4_2.png new file mode 100644 index 0000000000..3e2ee3dfcf Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_4_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_4_3.png b/resources/g2/track/corkscrew/medium_half_loop_right_4_3.png new file mode 100644 index 0000000000..1a88fc4468 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_4_3.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_4_4.png b/resources/g2/track/corkscrew/medium_half_loop_right_4_4.png new file mode 100644 index 0000000000..327f2e40d6 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_4_4.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_4_4_2.png b/resources/g2/track/corkscrew/medium_half_loop_right_4_4_2.png new file mode 100644 index 0000000000..28674c6c28 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_4_4_2.png differ diff --git a/resources/g2/track/corkscrew/medium_half_loop_right_4_5.png b/resources/g2/track/corkscrew/medium_half_loop_right_4_5.png new file mode 100644 index 0000000000..e3cccbd8dc Binary files /dev/null and b/resources/g2/track/corkscrew/medium_half_loop_right_4_5.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_1.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_1.png new file mode 100644 index 0000000000..dbb031b8a2 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_2.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_2.png new file mode 100644 index 0000000000..28f51b40cf Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_3.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_3.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_4.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_4.png new file mode 100644 index 0000000000..cd65e053cf Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_4.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_5.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_5.png new file mode 100644 index 0000000000..51d460f0a1 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_1_5.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_1.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_1.png new file mode 100644 index 0000000000..40d243e711 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_2.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_2.png new file mode 100644 index 0000000000..3bfaf892f3 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_3.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_3.png new file mode 100644 index 0000000000..dcc24cf5c0 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_3.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_4.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_4.png new file mode 100644 index 0000000000..83c1c6733f Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_4.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_5.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_5.png new file mode 100644 index 0000000000..7435d692f4 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_2_5.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_1.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_1.png new file mode 100644 index 0000000000..8b5c4a2ace Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_2.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_3.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_3.png new file mode 100644 index 0000000000..e72d88ce2c Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_3.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_4.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_4.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_4.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_5.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_5.png new file mode 100644 index 0000000000..58499a407a Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_3_5.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_1.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_1.png new file mode 100644 index 0000000000..a20d0b9e9b Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_2.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_2.png new file mode 100644 index 0000000000..e11e2ae36a Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_3.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_3.png new file mode 100644 index 0000000000..253108b600 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_3.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_4.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_4.png new file mode 100644 index 0000000000..5ed3864355 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_4.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_5.png b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_5.png new file mode 100644 index 0000000000..929181673e Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_left_bank_gentle_up_4_5.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_1.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_1.png new file mode 100644 index 0000000000..77d6e0a547 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_2.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_2.png new file mode 100644 index 0000000000..5f33eb113f Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_3.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_3.png new file mode 100644 index 0000000000..3b53661531 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_3.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_4.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_4.png new file mode 100644 index 0000000000..e79e8c62a1 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_4.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_5.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_5.png new file mode 100644 index 0000000000..7354490230 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_1_5.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_1.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_1.png new file mode 100644 index 0000000000..167aed60ae Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_2.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_3.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_3.png new file mode 100644 index 0000000000..2bafaf402f Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_3.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_4.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_4.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_4.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_5.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_5.png new file mode 100644 index 0000000000..7da7b605af Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_2_5.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_1.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_1.png new file mode 100644 index 0000000000..83ae034aef Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_2.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_2.png new file mode 100644 index 0000000000..6992c2cb7c Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_3.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_3.png new file mode 100644 index 0000000000..f43e637e71 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_3.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_4.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_4.png new file mode 100644 index 0000000000..fb76eafeaa Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_4.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_5.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_5.png new file mode 100644 index 0000000000..3292adeb65 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_3_5.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_1.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_1.png new file mode 100644 index 0000000000..bfae6fc530 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_2.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_2.png new file mode 100644 index 0000000000..94f2ca2e94 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_3.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_3.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_4.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_4.png new file mode 100644 index 0000000000..55d55ebb90 Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_4.png differ diff --git a/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_5.png b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_5.png new file mode 100644 index 0000000000..53376ed21a Binary files /dev/null and b/resources/g2/track/corkscrew/medium_turn_right_bank_gentle_up_4_5.png differ diff --git a/resources/g2/track/corkscrew/quarter_loop_up_1_1.png b/resources/g2/track/corkscrew/quarter_loop_up_1_1.png new file mode 100644 index 0000000000..e9e86f34c3 Binary files /dev/null and b/resources/g2/track/corkscrew/quarter_loop_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/quarter_loop_up_1_2.png b/resources/g2/track/corkscrew/quarter_loop_up_1_2.png new file mode 100644 index 0000000000..58b5816f70 Binary files /dev/null and b/resources/g2/track/corkscrew/quarter_loop_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/quarter_loop_up_1_2_2.png b/resources/g2/track/corkscrew/quarter_loop_up_1_2_2.png new file mode 100644 index 0000000000..9eb9edbeb2 Binary files /dev/null and b/resources/g2/track/corkscrew/quarter_loop_up_1_2_2.png differ diff --git a/resources/g2/track/corkscrew/quarter_loop_up_1_3.png b/resources/g2/track/corkscrew/quarter_loop_up_1_3.png new file mode 100644 index 0000000000..478ada6c75 Binary files /dev/null and b/resources/g2/track/corkscrew/quarter_loop_up_1_3.png differ diff --git a/resources/g2/track/corkscrew/quarter_loop_up_2_1.png b/resources/g2/track/corkscrew/quarter_loop_up_2_1.png new file mode 100644 index 0000000000..ff33eddbe4 Binary files /dev/null and b/resources/g2/track/corkscrew/quarter_loop_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/quarter_loop_up_2_2.png b/resources/g2/track/corkscrew/quarter_loop_up_2_2.png new file mode 100644 index 0000000000..ffadd20c90 Binary files /dev/null and b/resources/g2/track/corkscrew/quarter_loop_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/quarter_loop_up_2_3.png b/resources/g2/track/corkscrew/quarter_loop_up_2_3.png new file mode 100644 index 0000000000..efc54154a5 Binary files /dev/null and b/resources/g2/track/corkscrew/quarter_loop_up_2_3.png differ diff --git a/resources/g2/track/corkscrew/quarter_loop_up_3_1.png b/resources/g2/track/corkscrew/quarter_loop_up_3_1.png new file mode 100644 index 0000000000..16d797d4bc Binary files /dev/null and b/resources/g2/track/corkscrew/quarter_loop_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/quarter_loop_up_3_2.png b/resources/g2/track/corkscrew/quarter_loop_up_3_2.png new file mode 100644 index 0000000000..cf945b260b Binary files /dev/null and b/resources/g2/track/corkscrew/quarter_loop_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/quarter_loop_up_3_3.png b/resources/g2/track/corkscrew/quarter_loop_up_3_3.png new file mode 100644 index 0000000000..0c8ab65e03 Binary files /dev/null and b/resources/g2/track/corkscrew/quarter_loop_up_3_3.png differ diff --git a/resources/g2/track/corkscrew/quarter_loop_up_4_1.png b/resources/g2/track/corkscrew/quarter_loop_up_4_1.png new file mode 100644 index 0000000000..ca3713f056 Binary files /dev/null and b/resources/g2/track/corkscrew/quarter_loop_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/quarter_loop_up_4_2.png b/resources/g2/track/corkscrew/quarter_loop_up_4_2.png new file mode 100644 index 0000000000..79d52842fb Binary files /dev/null and b/resources/g2/track/corkscrew/quarter_loop_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/quarter_loop_up_4_2_2.png b/resources/g2/track/corkscrew/quarter_loop_up_4_2_2.png new file mode 100644 index 0000000000..d2b5c4fc4b Binary files /dev/null and b/resources/g2/track/corkscrew/quarter_loop_up_4_2_2.png differ diff --git a/resources/g2/track/corkscrew/quarter_loop_up_4_3.png b/resources/g2/track/corkscrew/quarter_loop_up_4_3.png new file mode 100644 index 0000000000..5c75558d29 Binary files /dev/null and b/resources/g2/track/corkscrew/quarter_loop_up_4_3.png differ diff --git a/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_1.png b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_1.png new file mode 100644 index 0000000000..5460aa8cf4 Binary files /dev/null and b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_1.png differ diff --git a/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_2.png b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_2.png new file mode 100644 index 0000000000..a9545e94fa Binary files /dev/null and b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_2.png differ diff --git a/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_3.png b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_3.png new file mode 100644 index 0000000000..1787b300cb Binary files /dev/null and b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_3.png differ diff --git a/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_4.png b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_4.png new file mode 100644 index 0000000000..38900d7789 Binary files /dev/null and b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_4.png differ diff --git a/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_1.png b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_1.png new file mode 100644 index 0000000000..674ee4acd7 Binary files /dev/null and b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_1.png differ diff --git a/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_2.png b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_2.png new file mode 100644 index 0000000000..3c5238cd90 Binary files /dev/null and b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_2.png differ diff --git a/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_3.png b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_3.png new file mode 100644 index 0000000000..4782fe757a Binary files /dev/null and b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_3.png differ diff --git a/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_4.png b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_4.png new file mode 100644 index 0000000000..d5f2aee300 Binary files /dev/null and b/resources/g2/track/corkscrew/right_bank_to_gentle_up_right_bank_diag_4.png differ diff --git a/resources/g2/track/corkscrew/small_flat_to_steep_up_1.png b/resources/g2/track/corkscrew/small_flat_to_steep_up_1.png new file mode 100644 index 0000000000..0c09a3e6f5 Binary files /dev/null and b/resources/g2/track/corkscrew/small_flat_to_steep_up_1.png differ diff --git a/resources/g2/track/corkscrew/small_flat_to_steep_up_2_1.png b/resources/g2/track/corkscrew/small_flat_to_steep_up_2_1.png new file mode 100644 index 0000000000..79c4a4d743 Binary files /dev/null and b/resources/g2/track/corkscrew/small_flat_to_steep_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/small_flat_to_steep_up_2_2.png b/resources/g2/track/corkscrew/small_flat_to_steep_up_2_2.png new file mode 100644 index 0000000000..2489486611 Binary files /dev/null and b/resources/g2/track/corkscrew/small_flat_to_steep_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/small_flat_to_steep_up_3_1.png b/resources/g2/track/corkscrew/small_flat_to_steep_up_3_1.png new file mode 100644 index 0000000000..6be3df78d8 Binary files /dev/null and b/resources/g2/track/corkscrew/small_flat_to_steep_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/small_flat_to_steep_up_3_2.png b/resources/g2/track/corkscrew/small_flat_to_steep_up_3_2.png new file mode 100644 index 0000000000..ada53aed1f Binary files /dev/null and b/resources/g2/track/corkscrew/small_flat_to_steep_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/small_flat_to_steep_up_4.png b/resources/g2/track/corkscrew/small_flat_to_steep_up_4.png new file mode 100644 index 0000000000..2fbbe95982 Binary files /dev/null and b/resources/g2/track/corkscrew/small_flat_to_steep_up_4.png differ diff --git a/resources/g2/track/corkscrew/small_flat_to_steep_up_diag_1.png b/resources/g2/track/corkscrew/small_flat_to_steep_up_diag_1.png new file mode 100644 index 0000000000..e44f11f69a Binary files /dev/null and b/resources/g2/track/corkscrew/small_flat_to_steep_up_diag_1.png differ diff --git a/resources/g2/track/corkscrew/small_flat_to_steep_up_diag_2.png b/resources/g2/track/corkscrew/small_flat_to_steep_up_diag_2.png new file mode 100644 index 0000000000..5b06677778 Binary files /dev/null and b/resources/g2/track/corkscrew/small_flat_to_steep_up_diag_2.png differ diff --git a/resources/g2/track/corkscrew/small_flat_to_steep_up_diag_3.png b/resources/g2/track/corkscrew/small_flat_to_steep_up_diag_3.png new file mode 100644 index 0000000000..19ed319bc9 Binary files /dev/null and b/resources/g2/track/corkscrew/small_flat_to_steep_up_diag_3.png differ diff --git a/resources/g2/track/corkscrew/small_flat_to_steep_up_diag_4.png b/resources/g2/track/corkscrew/small_flat_to_steep_up_diag_4.png new file mode 100644 index 0000000000..db14afa69d Binary files /dev/null and b/resources/g2/track/corkscrew/small_flat_to_steep_up_diag_4.png differ diff --git a/resources/g2/track/corkscrew/small_steep_to_flat_up_1.png b/resources/g2/track/corkscrew/small_steep_to_flat_up_1.png new file mode 100644 index 0000000000..2879bff2cf Binary files /dev/null and b/resources/g2/track/corkscrew/small_steep_to_flat_up_1.png differ diff --git a/resources/g2/track/corkscrew/small_steep_to_flat_up_2_1.png b/resources/g2/track/corkscrew/small_steep_to_flat_up_2_1.png new file mode 100644 index 0000000000..c56b7fe95d Binary files /dev/null and b/resources/g2/track/corkscrew/small_steep_to_flat_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/small_steep_to_flat_up_2_2.png b/resources/g2/track/corkscrew/small_steep_to_flat_up_2_2.png new file mode 100644 index 0000000000..9e62964df4 Binary files /dev/null and b/resources/g2/track/corkscrew/small_steep_to_flat_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/small_steep_to_flat_up_3_1.png b/resources/g2/track/corkscrew/small_steep_to_flat_up_3_1.png new file mode 100644 index 0000000000..1a9fe34f1a Binary files /dev/null and b/resources/g2/track/corkscrew/small_steep_to_flat_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/small_steep_to_flat_up_3_2.png b/resources/g2/track/corkscrew/small_steep_to_flat_up_3_2.png new file mode 100644 index 0000000000..e199df8fb4 Binary files /dev/null and b/resources/g2/track/corkscrew/small_steep_to_flat_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/small_steep_to_flat_up_4.png b/resources/g2/track/corkscrew/small_steep_to_flat_up_4.png new file mode 100644 index 0000000000..c5a366f1c9 Binary files /dev/null and b/resources/g2/track/corkscrew/small_steep_to_flat_up_4.png differ diff --git a/resources/g2/track/corkscrew/small_steep_to_flat_up_diag_1.png b/resources/g2/track/corkscrew/small_steep_to_flat_up_diag_1.png new file mode 100644 index 0000000000..5b1dbe980a Binary files /dev/null and b/resources/g2/track/corkscrew/small_steep_to_flat_up_diag_1.png differ diff --git a/resources/g2/track/corkscrew/small_steep_to_flat_up_diag_2.png b/resources/g2/track/corkscrew/small_steep_to_flat_up_diag_2.png new file mode 100644 index 0000000000..46c1a310e0 Binary files /dev/null and b/resources/g2/track/corkscrew/small_steep_to_flat_up_diag_2.png differ diff --git a/resources/g2/track/corkscrew/small_steep_to_flat_up_diag_3.png b/resources/g2/track/corkscrew/small_steep_to_flat_up_diag_3.png new file mode 100644 index 0000000000..9d6cd76ecf Binary files /dev/null and b/resources/g2/track/corkscrew/small_steep_to_flat_up_diag_3.png differ diff --git a/resources/g2/track/corkscrew/small_steep_to_flat_up_diag_4.png b/resources/g2/track/corkscrew/small_steep_to_flat_up_diag_4.png new file mode 100644 index 0000000000..1295e28f2b Binary files /dev/null and b/resources/g2/track/corkscrew/small_steep_to_flat_up_diag_4.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_1_1.png b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_1_1.png new file mode 100644 index 0000000000..1d940a36af Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_1_2.png b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_1_2.png new file mode 100644 index 0000000000..baa7020c38 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_2_1.png b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_2_1.png new file mode 100644 index 0000000000..dafb6f1b87 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_2_2.png b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_2_2.png new file mode 100644 index 0000000000..b17bb7f87d Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_3_1.png b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_3_1.png new file mode 100644 index 0000000000..b210606f52 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_3_2.png b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_3_2.png new file mode 100644 index 0000000000..212ed3088d Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_4_1.png b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_4_1.png new file mode 100644 index 0000000000..291cd5d910 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_4_2.png b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_4_2.png new file mode 100644 index 0000000000..257f85ab40 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_4_3.png b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_4_3.png new file mode 100644 index 0000000000..7657b9ae7d Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_gentle_up_4_3.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_1_1.png b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..cac07ab82d Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_1_2.png b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..3a511ec9fc Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_1.png b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..1a0e88bfd4 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_2.png b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..6ee193f6ad Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_3.png b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_3.png new file mode 100644 index 0000000000..e292a7fb8d Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_3.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_4.png b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_4.png new file mode 100644 index 0000000000..b67e32a8c8 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_2_4.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_3_1.png b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..61eba58419 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_3_2.png b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..904b7b5c33 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_4_1.png b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..3505b799db Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_4_2.png b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..c48673ce73 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_4_3.png b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_4_3.png new file mode 100644 index 0000000000..b7e6e9ba07 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_left_bank_to_gentle_up_4_3.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_1_1.png b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_1_1.png new file mode 100644 index 0000000000..efb14388c6 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_1_2.png b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_1_2.png new file mode 100644 index 0000000000..9ed3d30f8b Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_1_3.png b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_1_3.png new file mode 100644 index 0000000000..97c4754dee Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_1_3.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_2_1.png b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_2_1.png new file mode 100644 index 0000000000..63449956f6 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_2_2.png b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_2_2.png new file mode 100644 index 0000000000..e224f6b774 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_3_1.png b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_3_1.png new file mode 100644 index 0000000000..bb5ea6901f Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_3_2.png b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_3_2.png new file mode 100644 index 0000000000..396fbaf539 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_4_1.png b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_4_1.png new file mode 100644 index 0000000000..7c6f274d86 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_4_2.png b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_4_2.png new file mode 100644 index 0000000000..0bb061100a Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_gentle_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_1_1.png b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..e3edc1e828 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_1_2.png b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..1d6ced822e Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_1_3.png b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_1_3.png new file mode 100644 index 0000000000..e66474a565 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_1_3.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_2_1.png b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..603ab8cb96 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_2_2.png b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..8dd9fba1b3 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_1.png b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..20c1233ea0 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_2.png b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..990f893973 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_3.png b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_3.png new file mode 100644 index 0000000000..d5dde3a8b3 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_3.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_4.png b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_4.png new file mode 100644 index 0000000000..6136b39a56 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_3_4.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_4_1.png b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..a31e2a218e Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_4_2.png b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..a347827fd3 Binary files /dev/null and b/resources/g2/track/corkscrew/small_turn_right_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/steep_to_vertical_up_1.png b/resources/g2/track/corkscrew/steep_to_vertical_up_1.png new file mode 100644 index 0000000000..497cd88aa2 Binary files /dev/null and b/resources/g2/track/corkscrew/steep_to_vertical_up_1.png differ diff --git a/resources/g2/track/corkscrew/steep_to_vertical_up_2.png b/resources/g2/track/corkscrew/steep_to_vertical_up_2.png new file mode 100644 index 0000000000..690dd89b06 Binary files /dev/null and b/resources/g2/track/corkscrew/steep_to_vertical_up_2.png differ diff --git a/resources/g2/track/corkscrew/steep_to_vertical_up_3.png b/resources/g2/track/corkscrew/steep_to_vertical_up_3.png new file mode 100644 index 0000000000..9055e3c0b2 Binary files /dev/null and b/resources/g2/track/corkscrew/steep_to_vertical_up_3.png differ diff --git a/resources/g2/track/corkscrew/steep_to_vertical_up_4.png b/resources/g2/track/corkscrew/steep_to_vertical_up_4.png new file mode 100644 index 0000000000..232882d917 Binary files /dev/null and b/resources/g2/track/corkscrew/steep_to_vertical_up_4.png differ diff --git a/resources/g2/track/corkscrew/vertical_1.png b/resources/g2/track/corkscrew/vertical_1.png new file mode 100644 index 0000000000..8706cfb41e Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_1.png differ diff --git a/resources/g2/track/corkscrew/vertical_2.png b/resources/g2/track/corkscrew/vertical_2.png new file mode 100644 index 0000000000..d51931644f Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_2.png differ diff --git a/resources/g2/track/corkscrew/vertical_3.png b/resources/g2/track/corkscrew/vertical_3.png new file mode 100644 index 0000000000..10280ddc39 Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_3.png differ diff --git a/resources/g2/track/corkscrew/vertical_4.png b/resources/g2/track/corkscrew/vertical_4.png new file mode 100644 index 0000000000..a8c45c8c09 Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_4.png differ diff --git a/resources/g2/track/corkscrew/vertical_to_steep_up_1.png b/resources/g2/track/corkscrew/vertical_to_steep_up_1.png new file mode 100644 index 0000000000..fef7a4d385 Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_to_steep_up_1.png differ diff --git a/resources/g2/track/corkscrew/vertical_to_steep_up_2.png b/resources/g2/track/corkscrew/vertical_to_steep_up_2.png new file mode 100644 index 0000000000..d0f9d1f964 Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_to_steep_up_2.png differ diff --git a/resources/g2/track/corkscrew/vertical_to_steep_up_3.png b/resources/g2/track/corkscrew/vertical_to_steep_up_3.png new file mode 100644 index 0000000000..6c6893c94c Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_to_steep_up_3.png differ diff --git a/resources/g2/track/corkscrew/vertical_to_steep_up_4.png b/resources/g2/track/corkscrew/vertical_to_steep_up_4.png new file mode 100644 index 0000000000..45937e5776 Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_to_steep_up_4.png differ diff --git a/resources/g2/track/corkscrew/vertical_twist_left_up_1.png b/resources/g2/track/corkscrew/vertical_twist_left_up_1.png new file mode 100644 index 0000000000..9fac34d29e Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_twist_left_up_1.png differ diff --git a/resources/g2/track/corkscrew/vertical_twist_left_up_2_1.png b/resources/g2/track/corkscrew/vertical_twist_left_up_2_1.png new file mode 100644 index 0000000000..e128f38496 Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_twist_left_up_2_1.png differ diff --git a/resources/g2/track/corkscrew/vertical_twist_left_up_2_2.png b/resources/g2/track/corkscrew/vertical_twist_left_up_2_2.png new file mode 100644 index 0000000000..00b8f96f12 Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_twist_left_up_2_2.png differ diff --git a/resources/g2/track/corkscrew/vertical_twist_left_up_3.png b/resources/g2/track/corkscrew/vertical_twist_left_up_3.png new file mode 100644 index 0000000000..c247c32088 Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_twist_left_up_3.png differ diff --git a/resources/g2/track/corkscrew/vertical_twist_left_up_4_1.png b/resources/g2/track/corkscrew/vertical_twist_left_up_4_1.png new file mode 100644 index 0000000000..8f251c5ffc Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_twist_left_up_4_1.png differ diff --git a/resources/g2/track/corkscrew/vertical_twist_left_up_4_2.png b/resources/g2/track/corkscrew/vertical_twist_left_up_4_2.png new file mode 100644 index 0000000000..4ea5f2a4ac Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_twist_left_up_4_2.png differ diff --git a/resources/g2/track/corkscrew/vertical_twist_right_up_1_1.png b/resources/g2/track/corkscrew/vertical_twist_right_up_1_1.png new file mode 100644 index 0000000000..ce7616074a Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_twist_right_up_1_1.png differ diff --git a/resources/g2/track/corkscrew/vertical_twist_right_up_1_2.png b/resources/g2/track/corkscrew/vertical_twist_right_up_1_2.png new file mode 100644 index 0000000000..3ced9565ef Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_twist_right_up_1_2.png differ diff --git a/resources/g2/track/corkscrew/vertical_twist_right_up_2.png b/resources/g2/track/corkscrew/vertical_twist_right_up_2.png new file mode 100644 index 0000000000..467ecc5266 Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_twist_right_up_2.png differ diff --git a/resources/g2/track/corkscrew/vertical_twist_right_up_3_1.png b/resources/g2/track/corkscrew/vertical_twist_right_up_3_1.png new file mode 100644 index 0000000000..ac6cd61653 Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_twist_right_up_3_1.png differ diff --git a/resources/g2/track/corkscrew/vertical_twist_right_up_3_2.png b/resources/g2/track/corkscrew/vertical_twist_right_up_3_2.png new file mode 100644 index 0000000000..2e651f0eb5 Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_twist_right_up_3_2.png differ diff --git a/resources/g2/track/corkscrew/vertical_twist_right_up_4.png b/resources/g2/track/corkscrew/vertical_twist_right_up_4.png new file mode 100644 index 0000000000..237e6c8938 Binary files /dev/null and b/resources/g2/track/corkscrew/vertical_twist_right_up_4.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_1_1.png b/resources/g2/track/corkscrew/zero_g_roll_left_1_1.png new file mode 100644 index 0000000000..044d997ffb Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_1_1.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_1_2.png b/resources/g2/track/corkscrew/zero_g_roll_left_1_2.png new file mode 100644 index 0000000000..9c6f4b96bd Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_1_2.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_1_3.png b/resources/g2/track/corkscrew/zero_g_roll_left_1_3.png new file mode 100644 index 0000000000..de95ac4d81 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_1_3.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_1_4.png b/resources/g2/track/corkscrew/zero_g_roll_left_1_4.png new file mode 100644 index 0000000000..34837ce7df Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_1_4.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_1_5.png b/resources/g2/track/corkscrew/zero_g_roll_left_1_5.png new file mode 100644 index 0000000000..1b0a8d9eae Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_1_5.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_1_6.png b/resources/g2/track/corkscrew/zero_g_roll_left_1_6.png new file mode 100644 index 0000000000..803eb413b1 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_1_6.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_2_1.png b/resources/g2/track/corkscrew/zero_g_roll_left_2_1.png new file mode 100644 index 0000000000..7783ffb961 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_2_1.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_2_2.png b/resources/g2/track/corkscrew/zero_g_roll_left_2_2.png new file mode 100644 index 0000000000..d918e483f7 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_2_2.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_2_3.png b/resources/g2/track/corkscrew/zero_g_roll_left_2_3.png new file mode 100644 index 0000000000..5a36b66b41 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_2_3.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_2_4.png b/resources/g2/track/corkscrew/zero_g_roll_left_2_4.png new file mode 100644 index 0000000000..5d93e9d946 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_2_4.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_2_5.png b/resources/g2/track/corkscrew/zero_g_roll_left_2_5.png new file mode 100644 index 0000000000..12b6450ef0 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_2_5.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_2_6.png b/resources/g2/track/corkscrew/zero_g_roll_left_2_6.png new file mode 100644 index 0000000000..d88b3a48f0 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_2_6.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_3_1.png b/resources/g2/track/corkscrew/zero_g_roll_left_3_1.png new file mode 100644 index 0000000000..e45c141e38 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_3_1.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_3_2.png b/resources/g2/track/corkscrew/zero_g_roll_left_3_2.png new file mode 100644 index 0000000000..f78e18ffb5 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_3_2.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_3_3.png b/resources/g2/track/corkscrew/zero_g_roll_left_3_3.png new file mode 100644 index 0000000000..6e1f524c21 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_3_3.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_3_4.png b/resources/g2/track/corkscrew/zero_g_roll_left_3_4.png new file mode 100644 index 0000000000..5411256a62 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_3_4.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_4_1.png b/resources/g2/track/corkscrew/zero_g_roll_left_4_1.png new file mode 100644 index 0000000000..4531feba3f Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_4_1.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_4_2.png b/resources/g2/track/corkscrew/zero_g_roll_left_4_2.png new file mode 100644 index 0000000000..86eeffe0a1 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_4_2.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_4_3.png b/resources/g2/track/corkscrew/zero_g_roll_left_4_3.png new file mode 100644 index 0000000000..5d42f9e44b Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_4_3.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_left_4_4.png b/resources/g2/track/corkscrew/zero_g_roll_left_4_4.png new file mode 100644 index 0000000000..280511fb91 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_left_4_4.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_1_1.png b/resources/g2/track/corkscrew/zero_g_roll_right_1_1.png new file mode 100644 index 0000000000..60c1431798 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_1_1.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_1_2.png b/resources/g2/track/corkscrew/zero_g_roll_right_1_2.png new file mode 100644 index 0000000000..093dcdbd36 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_1_2.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_1_3.png b/resources/g2/track/corkscrew/zero_g_roll_right_1_3.png new file mode 100644 index 0000000000..edd1bc0dfb Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_1_3.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_1_4.png b/resources/g2/track/corkscrew/zero_g_roll_right_1_4.png new file mode 100644 index 0000000000..b23382c561 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_1_4.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_2_1.png b/resources/g2/track/corkscrew/zero_g_roll_right_2_1.png new file mode 100644 index 0000000000..2c0e9eff74 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_2_1.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_2_2.png b/resources/g2/track/corkscrew/zero_g_roll_right_2_2.png new file mode 100644 index 0000000000..8b851546e7 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_2_2.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_2_3.png b/resources/g2/track/corkscrew/zero_g_roll_right_2_3.png new file mode 100644 index 0000000000..26b59ed2d7 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_2_3.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_2_4.png b/resources/g2/track/corkscrew/zero_g_roll_right_2_4.png new file mode 100644 index 0000000000..84c2021046 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_2_4.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_3_1.png b/resources/g2/track/corkscrew/zero_g_roll_right_3_1.png new file mode 100644 index 0000000000..ca1e0c50d4 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_3_1.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_3_2.png b/resources/g2/track/corkscrew/zero_g_roll_right_3_2.png new file mode 100644 index 0000000000..654d93c1a4 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_3_2.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_3_3.png b/resources/g2/track/corkscrew/zero_g_roll_right_3_3.png new file mode 100644 index 0000000000..c520c0aaa9 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_3_3.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_3_4.png b/resources/g2/track/corkscrew/zero_g_roll_right_3_4.png new file mode 100644 index 0000000000..49a69dee56 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_3_4.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_3_5.png b/resources/g2/track/corkscrew/zero_g_roll_right_3_5.png new file mode 100644 index 0000000000..193e44f2a1 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_3_5.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_3_6.png b/resources/g2/track/corkscrew/zero_g_roll_right_3_6.png new file mode 100644 index 0000000000..6e5fab7c69 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_3_6.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_4_1.png b/resources/g2/track/corkscrew/zero_g_roll_right_4_1.png new file mode 100644 index 0000000000..d66f1f132a Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_4_1.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_4_2.png b/resources/g2/track/corkscrew/zero_g_roll_right_4_2.png new file mode 100644 index 0000000000..a4aa09c63a Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_4_2.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_4_3.png b/resources/g2/track/corkscrew/zero_g_roll_right_4_3.png new file mode 100644 index 0000000000..4fc420cfe2 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_4_3.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_4_4.png b/resources/g2/track/corkscrew/zero_g_roll_right_4_4.png new file mode 100644 index 0000000000..be44720ec7 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_4_4.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_4_5.png b/resources/g2/track/corkscrew/zero_g_roll_right_4_5.png new file mode 100644 index 0000000000..daebe6b834 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_4_5.png differ diff --git a/resources/g2/track/corkscrew/zero_g_roll_right_4_6.png b/resources/g2/track/corkscrew/zero_g_roll_right_4_6.png new file mode 100644 index 0000000000..1f1cb64091 Binary files /dev/null and b/resources/g2/track/corkscrew/zero_g_roll_right_4_6.png differ diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index 8dc1032cee..2e67630a3d 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -49,7 +49,7 @@ using namespace OpenRCT2; // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -constexpr uint8_t kNetworkStreamVersion = 8; +constexpr uint8_t kNetworkStreamVersion = 9; const std::string kNetworkStreamID = std::string(OPENRCT2_VERSION) + "-" + std::to_string(kNetworkStreamVersion); diff --git a/src/openrct2/paint/track/coaster/CorkscrewRollerCoaster.cpp b/src/openrct2/paint/track/coaster/CorkscrewRollerCoaster.cpp index f61f868de0..50cc3e3672 100644 --- a/src/openrct2/paint/track/coaster/CorkscrewRollerCoaster.cpp +++ b/src/openrct2/paint/track/coaster/CorkscrewRollerCoaster.cpp @@ -11046,6 +11046,8353 @@ static void LayDownRCTrackHalfLoopUninvertedDown( return; } +static void CorkscrewRCTrackFlatTo60DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 0), + { 0, 0, height }, { { 0, 2, height }, { 32, 27, 4 } }); + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 2), + { 0, 0, height }, { { 0, 29, height }, { 32, 1, 43 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 1), + { 0, 0, height }, { { 0, 4, height }, { 32, 2, 43 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 4, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 4), + { 0, 0, height }, { { 0, 29, height }, { 32, 1, 43 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 3), + { 0, 0, height }, { { 0, 4, height }, { 32, 2, 43 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 4, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 5), + { 0, 0, height }, { { 0, 2, height }, { 32, 27, 4 } }); + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 24, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); +} + +static void CorkscrewRCTrack60DegUpToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 6), + { 0, 0, height }, { { 0, 2, height }, { 32, 27, 4 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 7), + { 0, 0, height }, { { 0, 4, height }, { 32, 2, 43 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 8), + { 0, 0, height }, { { 29, 4, height + 2 }, { 1, 24, 43 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 10), + { 0, 0, height }, { { 29, 4, height + 2 }, { 1, 24, 43 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 9), + { 0, 0, height }, { { 0, 4, height }, { 32, 2, 43 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 11), + { 0, 0, height }, { { 0, 2, height }, { 32, 27, 4 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 16, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 24, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); +} + +static void CorkscrewRCTrackFlatTo60DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack60DegUpToFlat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack60DegDownToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackFlatTo60DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagFlatTo60DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 15), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 12), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 14), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 7, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 13), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 7, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 7, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 7, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + } +} + +static void CorkscrewRCTrackDiag60DegUpToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 19), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 16), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 18), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 20, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 17), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 20, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 20, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 20, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackDiagFlatTo60DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 17), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 18), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 16), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 16, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 19), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 16, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 16, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 16, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackDiag60DegDownToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 13), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 14), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 12), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 5, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 15), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 5, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 5, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 5, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + } +} + +static void CorkscrewRCTrack90DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(26607), { 0, 0, height + 8 }, + { { 4, 6, height }, { 2, 20, 31 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(26608), { 0, 0, height + 8 }, + { { 24, 6, height }, { 2, 20, 31 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(26605), { 0, 0, height + 8 }, + { { 24, 6, height }, { 2, 20, 31 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(26606), { 0, 0, height + 8 }, + { { 4, 6, height }, { 2, 20, 31 } }); + break; + } + PaintUtilSetVerticalTunnel(session, height + 32); + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); + break; + case 1: + break; + } +} + +static void CorkscrewRCTrack90DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack90DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack60DegUpTo90DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 0), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 1), + { 0, 0, height }, { { 24, 6, height }, { 2, 20, 55 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 2), + { 0, 0, height }, { { 24, 6, height }, { 2, 20, 55 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 3), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetVerticalTunnel(session, height + 56); + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + break; + } +} + +static void CorkscrewRCTrack90DegDownTo60DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack60DegUpTo90DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack90DegUpTo60DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 4), { 0, 0, height }, + { { 0, 6, height + 2 }, { 6, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 5), { 0, 0, height }, + { { 39, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 6), { 0, 0, height }, + { { 39, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 7), { 0, 0, height }, + { { 0, 6, height + 2 }, { 6, 20, 3 } }); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 48, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 48, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 80); +} + +static void CorkscrewRCTrack60DegDownTo90DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 6), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 80 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 7), + { 0, 0, height }, { { 0, 6, height + 2 }, { 6, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 4), + { 0, 0, height }, { { 0, 6, height + 2 }, { 6, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL + 5), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 80 } }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 48, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 80); + break; + case 1: + break; + } +} + +static void CorkscrewRCTrackLeftQuarterTurn190DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 0), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 63 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 1), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 63 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 2), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 63 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 3), + { 0, 0, height }, { { 24, 24, height + 8 }, { 2, 2, 63 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 4), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 63 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 5), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 63 } }); + break; + } + PaintUtilSetVerticalTunnel(session, height + 96); + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + break; + } +} + +static void CorkscrewRCTrackRightQuarterTurn190DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 6), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 63 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 7), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 63 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 8), + { 0, 0, height }, { { 24, 24, height + 8 }, { 2, 2, 63 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 9), + { 0, 0, height }, { { 6, 4, height + 8 }, { 20, 2, 63 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 10), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 63 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 11), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 63 } }); + break; + } + PaintUtilSetVerticalTunnel(session, height + 96); + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96); + break; + case 1: + break; + } +} + +static void CorkscrewRCTrackLeftQuarterTurn190DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightQuarterTurn190DegUp( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightQuarterTurn190DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftQuarterTurn190DegUp( + session, ride, trackSequence, (direction - 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack25DegUpToLeftBanked25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 1)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 2)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 3)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 4)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); +} + +static void CorkscrewRCTrack25DegUpToRightBanked25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 5)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 6)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 7)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 8)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 9)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); +} + +static void CorkscrewRCTrackLeftBanked25DegUpTo25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 10)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 11)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 12)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 13)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 14)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); +} + +static void CorkscrewRCTrackRightBanked25DegUpTo25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 15)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 17)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 18)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 19)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); +} + +static void CorkscrewRCTrackLeftBanked25DegDownTo25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack25DegUpToRightBanked25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightBanked25DegDownTo25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack25DegUpToLeftBanked25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack25DegDownToLeftBanked25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightBanked25DegUpTo25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack25DegDownToRightBanked25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftBanked25DegUpTo25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftBankedFlatToLeftBanked25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 20)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 21)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 22)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 23)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); +} + +static void CorkscrewRCTrackRightBankedFlatToRightBanked25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 24)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 25)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 26)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 27)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); +} + +static void CorkscrewRCTrackLeftBanked25DegUpToLeftBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 28)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 29)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 30)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 31)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::FlatTo25Deg); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); +} + +static void CorkscrewRCTrackRightBanked25DegUpToRightBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 32)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 33)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 34)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 35)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::FlatTo25Deg); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); +} + +static void CorkscrewRCTrackLeftBankedFlatToLeftBanked25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightBanked25DegUpToRightBankedFlat( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightBankedFlatToRightBanked25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftBanked25DegUpToLeftBankedFlat( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftBanked25DegDownToLeftBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightBankedFlatToRightBanked25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightBanked25DegDownToRightBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftBankedFlatToLeftBanked25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack25DegUpLeftBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 36)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 37)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 38)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 39)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); +} + +static void CorkscrewRCTrack25DegUpRightBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 40)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 41)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 42)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 43)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); +} + +static void CorkscrewRCTrack25DegDownLeftBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack25DegUpRightBanked(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack25DegDownRightBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack25DegUpLeftBanked(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackFlatToLeftBanked25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 44)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 45)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 46)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 47)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 48)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); +} + +static void CorkscrewRCTrackFlatToRightBanked25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 49)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 50)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 51)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 52)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 53)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); +} + +static void CorkscrewRCTrackLeftBanked25DegUpToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 54)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 55)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 56)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 57)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 58)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::FlatTo25Deg); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); +} + +static void CorkscrewRCTrackRightBanked25DegUpToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 59)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 60)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 61)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 62)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 63)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::Flat); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::FlatTo25Deg); + } + PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); +} + +static void CorkscrewRCTrackFlatToLeftBanked25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightBanked25DegUpToFlat( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackFlatToRightBanked25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftBanked25DegUpToFlat( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftBanked25DegDownToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackFlatToRightBanked25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightBanked25DegDownToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackFlatToLeftBanked25DegUp( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftBankedQuarterTurn3Tile25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 0)), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 2)), + { 0, 6, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 4)), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 6)), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 16)), + { 16, 16, height }, { 16, 16, 3 }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 1)), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 3)), + { 6, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 5)), + { 6, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 7)), + { 6, 0, height }, { 20, 32, 3 }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + case 3: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackRightBankedQuarterTurn3Tile25DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 8)), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 10)), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 12)), + { 0, 6, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 14)), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 17)), + { 16, 16, height }, { 16, 16, 3 }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 9)), + { 6, 0, height }, { 20, 32, 3 }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 11)), + { 6, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 13)), + { 6, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 10, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 15)), + { 6, 0, height }, { 20, 32, 3 }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + break; + } + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + case 1: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackLeftBankedQuarterTurn3Tile25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + CorkscrewRCTrackRightBankedQuarterTurn3Tile25DegUp( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightBankedQuarterTurn3Tile25DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + CorkscrewRCTrackLeftBankedQuarterTurn3Tile25DegUp( + session, ride, trackSequence, (direction - 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftBankedQuarterTurn525DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 5)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 10)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 15)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 1)), + { 0, 0, height }, { 32, 16, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 6)), + { 0, 0, height }, { { 30, 30, height }, { 1, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 11)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 16)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 2)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 7)), + { 0, 0, height }, { { 30, 30, height }, { 1, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 12)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 17)), + { 0, 0, height }, { 16, 16, 3 }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 4: + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 3)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 8)), + { 0, 0, height }, { { 30, 30, height }, { 1, 1, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 13)), + { 0, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 18)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 4)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 9)), + { 0, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 14)), + { 0, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 19)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + case 3: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackRightBankedQuarterTurn525DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 20)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 25)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 30)), + { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 35)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 21)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 26)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 31)), + { 0, 0, height }, { { 30, 30, height }, { 1, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 36)), + { 0, 0, height }, { 32, 16, 3 }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 22)), + { 0, 0, height }, { 16, 16, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 27)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 32)), + { 0, 0, height }, { { 30, 30, height }, { 1, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 37)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 4: + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 23)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 28)), + { 0, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 33)), + { 0, 0, height }, { { 30, 30, height }, { 1, 1, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 38)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 24)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 29)), + { 0, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 34)), + { 0, 0, height }, { { 27, 0, height }, { 1, 32, 34 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 39)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + case 1: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackLeftBankedQuarterTurn525DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + CorkscrewRCTrackRightBankedQuarterTurn525DegUp( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightBankedQuarterTurn525DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + CorkscrewRCTrackLeftBankedQuarterTurn525DegUp( + session, ride, trackSequence, (direction - 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftEighthToDiagUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 4)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 8)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 12)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 1)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 5)), + { 0, 0, height }, { { 0, 0, height }, { 34, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 9)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 13)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 2)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 6)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 10)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 14)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 3)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 12, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 7)), + { 0, 0, height }, { { 0, 16, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 5, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 11)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 3, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 15)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 3, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackRightEighthToDiagUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 20)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 24)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 28)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 17)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 21)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 25)), + { 0, 0, height }, { { 0, 0, height }, { 34, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 29)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 18)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 22)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 26)), + { 0, 0, height }, { { 4, 4, height }, { 28, 28, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 30)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 19)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 3, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 23)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 3, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 27)), + { 0, 0, height }, { { 0, 16, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 5, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 31)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 10, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackLeftEighthToOrthogonalUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 32)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 7, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 36)), + { 0, 0, height }, { { 16, 16, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 5, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 40)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 5, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 44)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 33)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 37)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 41)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 45)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 34)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 38)), + { 0, 0, height }, { { 0, 0, height }, { 34, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 42)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 46)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 35)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 39)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 43)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 10 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 47)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 5, height, session.SupportColours); + + if (direction == 1 || direction == 2) + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackRightEighthToOrthogonalUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 48)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 5, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 52)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 5, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 56)), + { 0, 0, height }, { { 16, 0, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 7, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 60)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 49)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 53)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 57)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 61)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 50)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 54)), + { 0, 0, height }, { { 0, 0, height }, { 16, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 58)), + { 0, 0, height }, { { 0, 0, height }, { 16, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 62)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 51)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 10 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 55)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 59)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 63)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 5, height, session.SupportColours); + if (direction == 0 || direction == 1) + { + PaintUtilPushTunnelRotated(session, direction + 1, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags(PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomRightSide), direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackLeftEighthToDiagDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + uint8_t map[5] = { 4, 3, 1, 2, 0 }; + trackSequence = map[trackSequence]; + CorkscrewRCTrackRightEighthToOrthogonalUp25( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightEighthToDiagDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + uint8_t map[5] = { 4, 3, 1, 2, 0 }; + trackSequence = map[trackSequence]; + CorkscrewRCTrackLeftEighthToOrthogonalUp25( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftEighthToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + CorkscrewRCTrackRightEighthToDiagUp25(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightEighthToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + CorkscrewRCTrackLeftEighthToDiagUp25(session, ride, trackSequence, (direction + 3) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagUp25ToLeftBankedUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 4)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 0)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 1)), + { -16, -16, height }, { { -16, -16, height + 48 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 3)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 5, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 2)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 10, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 10, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 10, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackDiagUp25ToRightBankedUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 9)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 5)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 7)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 8)), + { -16, -16, height }, { { -16, -16, height + 48 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 10, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 6)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 10, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 5, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 10, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackDiagLeftBankedUp25ToUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 14)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 10)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 11)), + { -16, -16, height }, { { -16, -16, height + 48 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 13)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 5, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 12)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 9, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 9, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 9, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagRightBankedUp25ToUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 19)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 15)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 17)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 18)), + { -16, -16, height }, { { -16, -16, height + 48 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 9, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 16)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 9, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 5, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 9, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagDown25ToLeftBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagRightBankedUp25ToUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagDown25ToRightBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagLeftBankedUp25ToUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagLeftBankedDown25ToDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagUp25ToRightBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagRightBankedDown25ToDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagUp25ToLeftBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagLeftBankedFlatToLeftBankedUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 23)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 20)), + { -16, -16, height }, { { -16, -16, height + 34 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 22)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 21)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackDiagRightBankedFlatToRightBankedUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 27)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 24)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 26)), + { -16, -16, height }, { { -16, -16, height + 34 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 25)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackDiagLeftBankedUp25ToLeftBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 31)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 28)), + { -16, -16, height }, { { -16, -16, height + 32 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 30)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 29)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 8, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 8, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagRightBankedUp25ToRightBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 35)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 32)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 34)), + { -16, -16, height }, { { -16, -16, height + 32 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 33)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 8, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagLeftBankedFlatToLeftBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagRightBankedUp25ToRightBankedFlat( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagRightBankedFlatToRightBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagLeftBankedUp25ToLeftBankedFlat( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagLeftBankedDown25ToLeftBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagRightBankedFlatToRightBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagRightBankedDown25ToRightBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagLeftBankedFlatToLeftBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagUp25LeftBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 39)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 36)), + { -16, -16, height }, { { -16, -16, height + 42 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 38)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 6, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 37)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 11, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 11, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 11, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagUp25RightBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 43)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 40)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 42)), + { -16, -16, height }, { { -16, -16, height + 42 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 11, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 41)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 11, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 6, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 11, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagDown25LeftBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagUp25RightBanked( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagDown25RightBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagUp25LeftBanked( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagFlatToLeftBankedUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 48)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 44)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 45)), + { -16, -16, height }, { { -16, -16, height + 34 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 47)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 46)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackDiagFlatToRightBankedUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 53)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 49)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 51)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 52)), + { -16, -16, height }, { { -16, -16, height + 34 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 50)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackDiagLeftBankedUp25ToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 58)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 54)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 55)), + { -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 57)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 56)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 6, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 6, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 6, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagRightBankedUp25ToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 63)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 59)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 61)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 62)), + { -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 6, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 60)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 6, height, session.SupportColours); + break; + case 2: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); + break; + case 3: + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 6, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + } +} + +static void CorkscrewRCTrackDiagFlatToLeftBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagRightBankedUp25ToFlat( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagFlatToRightBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagLeftBankedUp25ToFlat( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagLeftBankedDown25ToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagFlatToRightBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackDiagRightBankedDown25ToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackDiagFlatToLeftBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftEighthBankToDiagUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 64)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 9, height - 4, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 68)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 72)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 9, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 76)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 12, height, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 65)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 69)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 73)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 77)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 66)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 70)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 40, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 74)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 78)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 67)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 7, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 71)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 6, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 75)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 7, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 79)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 8, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackRightEighthBankToDiagUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 80)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 12, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 84)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 9, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 88)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 92)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 9, height - 4, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 81)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 85)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 89)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 93)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 82)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 86)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 90)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 40, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 94)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 83)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 87)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 7, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 91)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 6, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 95)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 7, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackLeftEighthBankToOrthogonalUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 96)), + { 0, 0, height }, { { 0, 0, height + 40 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 7, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 100)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 8, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 104)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 9, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 108)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 97)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 101)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 105)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 109)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 98)), + { 0, 0, height }, { { 0, 31, height + 32 }, { 32, 1, 32 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 102)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 106)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 10 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 110)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 99)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 103)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 107)), + { 0, 0, height }, { { 0, 0, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 111)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 11, height, session.SupportColours); + break; + } + if (direction == 1 || direction == 2) + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackRightEighthBankToOrthogonalUp25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 112)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 9, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 116)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 7, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 120)), + { 0, 0, height }, { { 0, 0, height + 40 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 7, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 124)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 3, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 113)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 117)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 121)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 125)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 114)), + { 0, 0, height }, { { 0, 0, height }, { 16, 32, 10 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 118)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 32 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 122)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 32 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 126)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 115)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 119)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 123)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours.WithIndex((SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 127)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 11, height, session.SupportColours); + break; + } + if (direction == 0 || direction == 1) + { + PaintUtilPushTunnelRotated(session, direction + 1, height + 8, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags(PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomRightSide), direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + } +} + +static void CorkscrewRCTrackLeftEighthBankToDiagDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + uint8_t map[5] = { 4, 3, 1, 2, 0 }; + trackSequence = map[trackSequence]; + CorkscrewRCTrackRightEighthBankToOrthogonalUp25( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightEighthBankToDiagDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + uint8_t map[5] = { 4, 3, 1, 2, 0 }; + trackSequence = map[trackSequence]; + CorkscrewRCTrackLeftEighthBankToOrthogonalUp25( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftEighthBankToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + CorkscrewRCTrackRightEighthBankToDiagUp25( + session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightEighthBankToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + CorkscrewRCTrackLeftEighthBankToDiagUp25( + session, ride, trackSequence, (direction + 3) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftBankToLeftQuarterTurn325DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 0), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 2), + { 0, 6, height }, { 32, 20, 3 }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 3), + { 0, 6, height }, { { 0, 27, height }, { 32, 1, 26 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 5), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 7), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 18), + { 16, 16, height }, { 16, 16, 3 }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 1), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 2, height - 6, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 4), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 20), + { 6, 0, height }, { { 0, 6, height + 32 }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height - 6, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 6), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height - 6, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 8), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 5, height - 6, session.SupportColours); + break; + } + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + case 3: + PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + } +} + +static void CorkscrewRCTrackRightBankToRightQuarterTurn325DegUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 9), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 11), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 13), + { 0, 6, height }, { 32, 20, 3 }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 14), + { 0, 6, height }, { { 0, 27, height }, { 32, 1, 26 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 16), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 19), + { 16, 16, height }, { 16, 16, 3 }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 10), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height - 6, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 12), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height - 6, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 15), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 21), + { 6, 0, height }, { { 0, 6, height + 32 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height - 6, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 17), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height - 6, session.SupportColours); + break; + } + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + case 1: + PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::SlopeEnd); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + } +} + +static void CorkscrewRCTrackLeftQuarterTurn325DegDownToLeftBank( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 12), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height - 6, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 15), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 21), + { 0, 6, height }, { { 0, 6, height + 32 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height - 6, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 17), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height - 6, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 10), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 6, height - 6, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 19), + { 16, 16, height }, { 16, 16, 3 }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 11), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 13), + { 6, 0, height }, { 20, 32, 3 }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 14), + { 6, 0, height }, { { 27, 0, height }, { 1, 32, 26 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 16), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 9), + { 6, 0, height }, { 20, 32, 3 }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::Flat); + break; + case 3: + PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + } +} + +static void CorkscrewRCTrackRightQuarterTurn325DegDownToRightBank( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 8), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 5, height - 6, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 1), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height - 6, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 4), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 20), + { 0, 6, height }, { { 0, 6, height + 32 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height - 6, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 6), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 8, height - 6, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::SlopeEnd); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 18), + { 16, 16, height }, { 16, 16, 3 }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 7), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 0), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 2), + { 6, 0, height }, { 20, 32, 3 }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 3), + { 6, 0, height }, { { 27, 0, height }, { 1, 32, 26 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 5), + { 6, 0, height }, { 20, 32, 3 }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::Flat); + break; + case 1: + PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + } +} + +static void CorkscrewRCTrackLeftLargeCorkscrewUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 0), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 5), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 10), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 15), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + } + + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 2, height, session.SupportColours); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 1), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 34, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 6), + { 0, 0, height }, { { 2, 2, height + 40 }, { 28, 28, 1 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 22, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 11), + { 0, 0, height }, { { 0, 6, height }, { 20, 20, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 24, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 16), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 17, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 2), + { 0, 0, height }, { { 0, 31, height }, { 48, 1, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 7), + { 0, 0, height }, { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 17), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 4: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomLeftSide, PaintSegment::bottomCorner, + PaintSegment::topLeftSide, PaintSegment::centre, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 3), + { 0, 0, height }, { { 2, 2, height + 50 }, { 28, 28, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 56, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 8), + { 0, 0, height }, { { 2, 2, height + 50 }, { 28, 28, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 56, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 13), + { 0, 0, height }, { { 0, 0, height + 50 }, { 26, 32, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 56, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 18), + { 0, 0, height }, { { 0, 0, height }, { 32, 32, 1 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 40), + { 0, 0, height }, { { 0, 0, height + 64 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 56, session.SupportColours); + break; + } + + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 4), + { 0, 0, height }, { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 9), + { 0, 0, height }, { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 14), + { 0, 0, height }, { { 2, 2, height + 40 }, { 26, 28, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 19), + { 0, 0, height }, { { 2, 2, height + 44 }, { 26, 28, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomLeftSide, PaintSegment::bottomCorner, + PaintSegment::topLeftSide, PaintSegment::centre, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 3: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackRightLargeCorkscrewUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 20), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 25), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 30), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 35), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + } + + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 2, height, session.SupportColours); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomRightSide, PaintSegment::centre, PaintSegment::rightCorner, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 21), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 16, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 26), + { 0, 0, height }, { { 0, 6, height }, { 20, 20, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 24, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 31), + { 0, 0, height }, { { 0, 29, height }, { 26, 1, 32 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 22, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 36), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 34, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, + PaintSegment::bottomRightSide, PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 22), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 32), + { 0, 0, height }, { { 2, 2, height + 48 }, { 28, 28, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 37), + { 0, 0, height }, { { 0, 31, height }, { 48, 1, 64 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 3: + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 4: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomLeftSide, PaintSegment::bottomCorner, + PaintSegment::topLeftSide, PaintSegment::centre, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 23), + { 0, 0, height }, { { 0, 0, height }, { 32, 32, 1 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 41), + { 0, 0, height }, { { 0, 0, height + 64 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 56, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 28), + { 0, 0, height }, { { 2, 2, height + 50 }, { 24, 28, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 58, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 33), + { 0, 0, height }, { { 2, 2, height + 50 }, { 28, 28, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 56, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 38), + { 0, 0, height }, { { 2, 2, height + 50 }, { 28, 28, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 56, session.SupportColours); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 24), + { 0, 0, height }, { { 2, 2, height + 44 }, { 26, 28, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 29), + { 0, 0, height }, { { 2, 2, height + 40 }, { 26, 28, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 34), + { 0, 0, height }, { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 39), + { 0, 0, height }, { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::bottomLeftSide, PaintSegment::bottomCorner, + PaintSegment::topLeftSide, PaintSegment::centre, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 1: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackLeftLargeCorkscrewDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightLargeCorkscrewUp( + session, ride, 5 - trackSequence, (direction + 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightLargeCorkscrewDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftLargeCorkscrewUp( + session, ride, 5 - trackSequence, (direction - 1) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrack90DegToInvertedFlatQuarterLoopUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 0), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 3), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 6), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 9), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 31 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags(PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomRightSide), direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 1), + { 0, 0, height }, { { -8, 6, height }, { 2, 20, 31 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 12), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 20, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 4), + { 0, 0, height }, { { 24, 6, height + 8 }, { 3, 20, 63 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 7), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 63 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 10), + { 0, 0, height }, { { -8, 6, height }, { 2, 20, 31 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 13), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 20, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags(PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomRightSide), direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 2), + { 0, 0, height }, { { 0, 6, height + 24 }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 5), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 8), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 11), + { 0, 0, height }, { { 0, 6, height + 24 }, { 32, 20, 3 } }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 16, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags(PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomRightSide), direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackInvertedFlatTo90DegQuarterLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrack90DegToInvertedFlatQuarterLoopUp( + session, ride, 2 - trackSequence, direction, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftMediumHalfLoopUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 0), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 5), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 41), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 10), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 15), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 1), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 6), + { 0, 0, height }, { { 0, 31, height }, { 0, 32, 64 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 42), + { 0, 0, height }, { { 0, 0, height + 64 }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 11), + { 0, 0, height }, { { 32, 32, height + 60 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 16), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::topCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 2), + { 0, 0, height }, { { 0, 0, height + 2 }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 14, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 7), + { 0, 0, height }, { { 29, 0, height }, { 1, 32, 96 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 16, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 12), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 96 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 18, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 17), + { 0, 0, height }, { { 0, 0, height }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 14, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::centre, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 3), + { 0, 0, height }, { { 0, 2, height }, { 32, 1, 160 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 40), + { 0, 0, height }, { { 0, 29, height }, { 32, 1, 160 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 8), + { 0, 0, height }, { { 0, 0, height + 140 }, { 32, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 13), + { 0, 0, height }, { { 29, 0, height }, { 1, 32, 160 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 18), + { 0, 0, height }, { { 0, 0, height }, { 1, 32, 160 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 43), + { 0, 0, height }, { { 0, 0, height + 140 }, { 32, 20, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::centre, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 4), + { 0, 0, height }, { { 0, 2, height + 48 }, { 32, 32, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 9), + { 0, 0, height }, { { 0, 2, height + 48 }, { 32, 32, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 14), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 19), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topRightSide, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 16, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackRightMediumHalfLoopUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 20), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 25), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 30), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 45), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 35), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 21), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 26), + { 0, 0, height }, { { 0, 32, height }, { 40, 0, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 31), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 46), + { 0, 0, height }, { { 0, 0, height + 64 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 36), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topRightSide, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::rightCorner), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 22), + { 0, 0, height }, { { 0, 0, height }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 14, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 27), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 96 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 18, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 32), + { 0, 0, height }, { { 0, 0, height }, { 32, 32, 96 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 16, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 37), + { 0, 0, height }, { { 0, 0, height + 2 }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 14, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::centre, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 23), + { 0, 0, height }, { { 0, 0, height }, { 1, 32, 160 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 44), + { 0, 0, height }, { { 0, 0, height + 140 }, { 32, 20, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 28), + { 0, 0, height }, { { 29, 0, height }, { 0, 32, 160 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 33), + { 0, 0, height }, { { 0, 0, height + 140 }, { 32, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 38), + { 0, 0, height }, { { 2, 0, height }, { 1, 32, 160 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 47), + { 0, 0, height }, { { 0, 0, height + 140 }, { 32, 20, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 24), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 29), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 34), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 39), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::topCorner), + direction), + 0xFFFF, 0); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 16, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackLeftMediumHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightMediumHalfLoopUp(session, ride, 4 - trackSequence, direction, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightMediumHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftMediumHalfLoopUp(session, ride, 4 - trackSequence, direction, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftLargeHalfLoopUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 0), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 7), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 14), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 21), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 1), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 13, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 8), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 57), + { 0, 0, height }, { { 0, 6, height + 48 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 15), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 22), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 1, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 2), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 9), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 58), + { 0, 0, height }, { { 0, 0, height + 70 }, { 32, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 16), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 59), + { 0, 0, height }, { { 0, 16, height + 76 }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 23), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 3), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 28, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 10), + { 0, 0, height }, { { 0, 0, height + 200 }, { 32, 16, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 26, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 17), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 26, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 24), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 22, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 224); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 4), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 11), + { 0, 0, height }, { { 0, 16, height + 110 }, { 16, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 18), + { 0, 0, height }, { { 0, 0, height + 100 }, { 16, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 25), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 128); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 5), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 56), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 12), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 19), + { 0, 0, height }, { { 0, 0, height + 200 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 26), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 224); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 6), + { 0, 0, height }, { { 0, 16, height + 32 }, { 32, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 13), + { 0, 0, height }, { { 0, 16, height + 32 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 20), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 27), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 16, 0 } }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void CorkscrewRCTrackRightLargeHalfLoopUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 28), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 35), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 42), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 49), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 6, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 29), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 1, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 36), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 43), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 9 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 61), + { 0, 0, height }, { { 0, 6, height + 64 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 7, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 50), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 13, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 30), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 37), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 60), + { 0, 0, height }, { { 0, 16, height + 76 }, { 32, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 44), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 62), + { 0, 0, height }, { { 0, 0, height + 70 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 51), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 31), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 22, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 38), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 28, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 45), + { 0, 0, height }, { { 0, 0, height + 200 }, { 32, 16, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 28, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 52), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 28, height, session.SupportColours); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 224); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 32), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 39), + { 0, 0, height }, { { 0, 0, height + 100 }, { 16, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 46), + { 0, 0, height }, { { 0, 16, height + 110 }, { 16, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 53), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 128); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 33), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 40), + { 0, 0, height }, { { 0, 0, height + 200 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 47), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 54), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 63), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 224); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 34), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 41), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 48), + { 0, 0, height }, { { 0, 16, height + 32 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 55), + { 0, 0, height }, { { 0, 16, height + 32 }, { 32, 16, 0 } }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void CorkscrewRCTrackLeftLargeHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightLargeHalfLoopUp(session, ride, 6 - trackSequence, direction, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightLargeHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftLargeHalfLoopUp(session, ride, 6 - trackSequence, direction, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftBarrelRollUpToDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 0), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 1), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 4, height + 1, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 6), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 7), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 4, height + 1, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 12), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 13), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 1, height + 1, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 18), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 19), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 1, height, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 2), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 3), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 8), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 9), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 14), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 15), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 20), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 21), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 4), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 5), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 10), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 11), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 16), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 17), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 22), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 23), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::Tall); + break; + case 2: + PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::Tall); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackRightBarrelRollUpToDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 24), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 25), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopCorner, 1, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 30), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 31), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::RightCorner, 1, height + 1, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 36), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 37), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomCorner, 4, height + 1, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 42), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 43), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::LeftCorner, 4, height + 1, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 26), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 27), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 32), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 33), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 38), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 39), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 44), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 45), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::topRightSide, PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 28), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 29), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 34), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 35), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 40), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 41), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 46), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 47), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::Tall); + break; + case 2: + PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::Tall); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + } +} + +static void CorkscrewRCTrackLeftBarrelRollDownToUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftBarrelRollUpToDown( + session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightBarrelRollDownToUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightBarrelRollUpToDown( + session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftZeroGRollUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 0), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 1), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 6), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 7), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 12), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 5, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 16), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 11, height, session.SupportColours); + break; + } + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 3), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 9), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 13), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 17), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 5), + { 0, 0, height }, { { 0, 6, height + 22 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 30, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 11), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 36, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 14), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 15), + { 0, 0, height }, { { 0, 6, height + 48 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 36, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 18), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 19), + { 0, 0, height }, { { 0, 6, height + 48 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 36, session.SupportColours); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void CorkscrewRCTrackRightZeroGRollUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 20), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 11, height, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 24), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 5, height, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 28), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 29), + { 0, 0, height }, { { 0, 31, height + 40 }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 3, height, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 34), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 35), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 21), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 25), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 31), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 37), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::rightCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::bottomRightSide, PaintSegment::rightCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 22), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 23), + { 0, 0, height }, { { 0, 6, height + 48 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 36, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 26), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 27), + { 0, 0, height }, { { 0, 6, height + 48 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 36, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 33), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 36, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 39), + { 0, 0, height }, { { 0, 6, height + 22 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::Centre, 0, height + 30, session.SupportColours); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void CorkscrewRCTrackLeftZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftZeroGRollUp(session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightZeroGRollUp(session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackLeftLargeZeroGRollUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 0), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 8), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 15), + { 0, 0, height }, { { 1, 6, height }, { 30, 20, 16 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 16), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 40 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 23), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 24, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 1), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 2), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 10), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 17), + { 0, 0, height }, { { -3, 0, height }, { 40, 8, 64 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 18), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 24), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 3), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 4), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 12), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 48 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 19), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 20), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 56 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 25), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 26), + { 0, 0, height }, { { 0, 29, height + 32 }, { 32, 1, 32 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner, + PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 6), + { 0, 0, height }, { { 0, 26, height }, { 32, 0, 20 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 28, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 14), + { 0, 0, height }, { { 0, 26, height }, { 32, 0, 20 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 28, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 21), + { 0, 0, height }, { { 0, 10, height }, { 32, 0, 28 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 22), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 28 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 30, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 27), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 28), + { 0, 0, height }, { { 0, 29, height }, { 32, 1, 40 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 32, session.SupportColours); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void CorkscrewRCTrackRightLargeZeroGRollUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 29), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 35), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 36), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 44), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 51), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 23, height, session.SupportColours); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 30), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 37), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 38), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 46), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 52), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 53), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 31), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 32), + { 0, 0, height }, { { 0, 29, height + 32 }, { 32, 1, 32 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 39), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 40), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 56 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 48), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 48 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 54), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 55), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 33), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 34), + { 0, 0, height }, { { 0, 29, height }, { 32, 1, 40 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 34, session.SupportColours); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 41), + { 0, 0, height }, { { 0, 10, height }, { 32, 0, 28 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 42), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 28 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 30, session.SupportColours); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 50), + { 0, 0, height }, { { 0, 26, height }, { 32, 0, 20 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 28, session.SupportColours); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 57), + { 0, 0, height }, { { 0, 26, height }, { 32, 0, 20 } }); + MetalASupportsPaintSetup( + session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 28, session.SupportColours); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 40); + break; + } +} + +static void CorkscrewRCTrackLeftLargeZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackLeftLargeZeroGRollUp( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + +static void CorkscrewRCTrackRightLargeZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + CorkscrewRCTrackRightLargeZeroGRollUp( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType); +} + TRACK_PAINT_FUNCTION GetTrackPaintFunctionCorkscrewRC(OpenRCT2::TrackElemType trackType) { switch (trackType) @@ -11297,6 +19644,299 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionCorkscrewRC(OpenRCT2::TrackElemType tr return LayDownRCTrackRightFlyerCorkscrewUp; case TrackElemType::FlyerHalfLoopUninvertedDown: return LayDownRCTrackHalfLoopUninvertedDown; + + // Added by OpenRCT2 + + // Small flat to steep + case TrackElemType::FlatToUp60: + return CorkscrewRCTrackFlatTo60DegUp; + case TrackElemType::Up60ToFlat: + return CorkscrewRCTrack60DegUpToFlat; + case TrackElemType::FlatToDown60: + return CorkscrewRCTrackFlatTo60DegDown; + case TrackElemType::Down60ToFlat: + return CorkscrewRCTrack60DegDownToFlat; + case TrackElemType::DiagFlatToUp60: + return CorkscrewRCTrackDiagFlatTo60DegUp; + case TrackElemType::DiagUp60ToFlat: + return CorkscrewRCTrackDiag60DegUpToFlat; + case TrackElemType::DiagFlatToDown60: + return CorkscrewRCTrackDiagFlatTo60DegDown; + case TrackElemType::DiagDown60ToFlat: + return CorkscrewRCTrackDiag60DegDownToFlat; + + // Vertical slopes + case TrackElemType::Up90: + return CorkscrewRCTrack90DegUp; + case TrackElemType::Down90: + return CorkscrewRCTrack90DegDown; + case TrackElemType::Up60ToUp90: + return CorkscrewRCTrack60DegUpTo90DegUp; + case TrackElemType::Down90ToDown60: + return CorkscrewRCTrack90DegDownTo60DegDown; + case TrackElemType::Up90ToUp60: + return CorkscrewRCTrack90DegUpTo60DegUp; + case TrackElemType::Down60ToDown90: + return CorkscrewRCTrack60DegDownTo90DegDown; + + // Vertical turns + case TrackElemType::LeftQuarterTurn1TileUp90: + return CorkscrewRCTrackLeftQuarterTurn190DegUp; + case TrackElemType::RightQuarterTurn1TileUp90: + return CorkscrewRCTrackRightQuarterTurn190DegUp; + case TrackElemType::LeftQuarterTurn1TileDown90: + return CorkscrewRCTrackLeftQuarterTurn190DegDown; + case TrackElemType::RightQuarterTurn1TileDown90: + return CorkscrewRCTrackRightQuarterTurn190DegDown; + + // Banked slope transitions + case TrackElemType::Up25ToLeftBankedUp25: + return CorkscrewRCTrack25DegUpToLeftBanked25DegUp; + case TrackElemType::Up25ToRightBankedUp25: + return CorkscrewRCTrack25DegUpToRightBanked25DegUp; + case TrackElemType::LeftBankedUp25ToUp25: + return CorkscrewRCTrackLeftBanked25DegUpTo25DegUp; + case TrackElemType::RightBankedUp25ToUp25: + return CorkscrewRCTrackRightBanked25DegUpTo25DegUp; + case TrackElemType::Down25ToLeftBankedDown25: + return CorkscrewRCTrack25DegDownToLeftBanked25DegDown; + case TrackElemType::Down25ToRightBankedDown25: + return CorkscrewRCTrack25DegDownToRightBanked25DegDown; + case TrackElemType::LeftBankedDown25ToDown25: + return CorkscrewRCTrackLeftBanked25DegDownTo25DegDown; + case TrackElemType::RightBankedDown25ToDown25: + return CorkscrewRCTrackRightBanked25DegDownTo25DegDown; + case TrackElemType::LeftBankedFlatToLeftBankedUp25: + return CorkscrewRCTrackLeftBankedFlatToLeftBanked25DegUp; + case TrackElemType::RightBankedFlatToRightBankedUp25: + return CorkscrewRCTrackRightBankedFlatToRightBanked25DegUp; + case TrackElemType::LeftBankedUp25ToLeftBankedFlat: + return CorkscrewRCTrackLeftBanked25DegUpToLeftBankedFlat; + case TrackElemType::RightBankedUp25ToRightBankedFlat: + return CorkscrewRCTrackRightBanked25DegUpToRightBankedFlat; + case TrackElemType::LeftBankedFlatToLeftBankedDown25: + return CorkscrewRCTrackLeftBankedFlatToLeftBanked25DegDown; + case TrackElemType::RightBankedFlatToRightBankedDown25: + return CorkscrewRCTrackRightBankedFlatToRightBanked25DegDown; + case TrackElemType::LeftBankedDown25ToLeftBankedFlat: + return CorkscrewRCTrackLeftBanked25DegDownToLeftBankedFlat; + case TrackElemType::RightBankedDown25ToRightBankedFlat: + return CorkscrewRCTrackRightBanked25DegDownToRightBankedFlat; + case TrackElemType::Down25LeftBanked: + return CorkscrewRCTrack25DegDownLeftBanked; + case TrackElemType::Down25RightBanked: + return CorkscrewRCTrack25DegDownRightBanked; + case TrackElemType::FlatToLeftBankedUp25: + return CorkscrewRCTrackFlatToLeftBanked25DegUp; + case TrackElemType::FlatToRightBankedUp25: + return CorkscrewRCTrackFlatToRightBanked25DegUp; + case TrackElemType::LeftBankedUp25ToFlat: + return CorkscrewRCTrackLeftBanked25DegUpToFlat; + case TrackElemType::RightBankedUp25ToFlat: + return CorkscrewRCTrackRightBanked25DegUpToFlat; + case TrackElemType::FlatToLeftBankedDown25: + return CorkscrewRCTrackFlatToLeftBanked25DegDown; + case TrackElemType::FlatToRightBankedDown25: + return CorkscrewRCTrackFlatToRightBanked25DegDown; + case TrackElemType::LeftBankedDown25ToFlat: + return CorkscrewRCTrackLeftBanked25DegDownToFlat; + case TrackElemType::RightBankedDown25ToFlat: + return CorkscrewRCTrackRightBanked25DegDownToFlat; + case TrackElemType::Up25LeftBanked: + return CorkscrewRCTrack25DegUpLeftBanked; + case TrackElemType::Up25RightBanked: + return CorkscrewRCTrack25DegUpRightBanked; + + // Small banked sloped curves + case TrackElemType::LeftBankedQuarterTurn3TileUp25: + return CorkscrewRCTrackLeftBankedQuarterTurn3Tile25DegUp; + case TrackElemType::RightBankedQuarterTurn3TileUp25: + return CorkscrewRCTrackRightBankedQuarterTurn3Tile25DegUp; + case TrackElemType::LeftBankedQuarterTurn3TileDown25: + return CorkscrewRCTrackLeftBankedQuarterTurn3Tile25DegDown; + case TrackElemType::RightBankedQuarterTurn3TileDown25: + return CorkscrewRCTrackRightBankedQuarterTurn3Tile25DegDown; + + // Medium banked sloped curves + case TrackElemType::LeftBankedQuarterTurn5TileUp25: + return CorkscrewRCTrackLeftBankedQuarterTurn525DegUp; + case TrackElemType::RightBankedQuarterTurn5TileUp25: + return CorkscrewRCTrackRightBankedQuarterTurn525DegUp; + case TrackElemType::LeftBankedQuarterTurn5TileDown25: + return CorkscrewRCTrackLeftBankedQuarterTurn525DegDown; + case TrackElemType::RightBankedQuarterTurn5TileDown25: + return CorkscrewRCTrackRightBankedQuarterTurn525DegDown; + + // Large sloped curves + case TrackElemType::LeftEighthToDiagUp25: + return CorkscrewRCTrackLeftEighthToDiagUp25; + case TrackElemType::RightEighthToDiagUp25: + return CorkscrewRCTrackRightEighthToDiagUp25; + case TrackElemType::LeftEighthToDiagDown25: + return CorkscrewRCTrackLeftEighthToDiagDown25; + case TrackElemType::RightEighthToDiagDown25: + return CorkscrewRCTrackRightEighthToDiagDown25; + case TrackElemType::LeftEighthToOrthogonalUp25: + return CorkscrewRCTrackLeftEighthToOrthogonalUp25; + case TrackElemType::RightEighthToOrthogonalUp25: + return CorkscrewRCTrackRightEighthToOrthogonalUp25; + case TrackElemType::LeftEighthToOrthogonalDown25: + return CorkscrewRCTrackLeftEighthToOrthogonalDown25; + case TrackElemType::RightEighthToOrthogonalDown25: + return CorkscrewRCTrackRightEighthToOrthogonalDown25; + + // Large banked sloped curves + case TrackElemType::DiagUp25ToLeftBankedUp25: + return CorkscrewRCTrackDiagUp25ToLeftBankedUp25; + case TrackElemType::DiagUp25ToRightBankedUp25: + return CorkscrewRCTrackDiagUp25ToRightBankedUp25; + case TrackElemType::DiagLeftBankedUp25ToUp25: + return CorkscrewRCTrackDiagLeftBankedUp25ToUp25; + case TrackElemType::DiagRightBankedUp25ToUp25: + return CorkscrewRCTrackDiagRightBankedUp25ToUp25; + case TrackElemType::DiagDown25ToLeftBankedDown25: + return CorkscrewRCTrackDiagDown25ToLeftBankedDown25; + case TrackElemType::DiagDown25ToRightBankedDown25: + return CorkscrewRCTrackDiagDown25ToRightBankedDown25; + case TrackElemType::DiagLeftBankedDown25ToDown25: + return CorkscrewRCTrackDiagLeftBankedDown25ToDown25; + case TrackElemType::DiagRightBankedDown25ToDown25: + return CorkscrewRCTrackDiagRightBankedDown25ToDown25; + case TrackElemType::DiagLeftBankedFlatToLeftBankedUp25: + return CorkscrewRCTrackDiagLeftBankedFlatToLeftBankedUp25; + case TrackElemType::DiagRightBankedFlatToRightBankedUp25: + return CorkscrewRCTrackDiagRightBankedFlatToRightBankedUp25; + case TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat: + return CorkscrewRCTrackDiagLeftBankedUp25ToLeftBankedFlat; + case TrackElemType::DiagRightBankedUp25ToRightBankedFlat: + return CorkscrewRCTrackDiagRightBankedUp25ToRightBankedFlat; + case TrackElemType::DiagLeftBankedFlatToLeftBankedDown25: + return CorkscrewRCTrackDiagLeftBankedFlatToLeftBankedDown25; + case TrackElemType::DiagRightBankedFlatToRightBankedDown25: + return CorkscrewRCTrackDiagRightBankedFlatToRightBankedDown25; + case TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat: + return CorkscrewRCTrackDiagLeftBankedDown25ToLeftBankedFlat; + case TrackElemType::DiagRightBankedDown25ToRightBankedFlat: + return CorkscrewRCTrackDiagRightBankedDown25ToRightBankedFlat; + case TrackElemType::DiagUp25LeftBanked: + return CorkscrewRCTrackDiagUp25LeftBanked; + case TrackElemType::DiagUp25RightBanked: + return CorkscrewRCTrackDiagUp25RightBanked; + case TrackElemType::DiagDown25LeftBanked: + return CorkscrewRCTrackDiagDown25LeftBanked; + case TrackElemType::DiagDown25RightBanked: + return CorkscrewRCTrackDiagDown25RightBanked; + case TrackElemType::DiagFlatToLeftBankedUp25: + return CorkscrewRCTrackDiagFlatToLeftBankedUp25; + case TrackElemType::DiagFlatToRightBankedUp25: + return CorkscrewRCTrackDiagFlatToRightBankedUp25; + case TrackElemType::DiagLeftBankedUp25ToFlat: + return CorkscrewRCTrackDiagLeftBankedUp25ToFlat; + case TrackElemType::DiagRightBankedUp25ToFlat: + return CorkscrewRCTrackDiagRightBankedUp25ToFlat; + case TrackElemType::DiagFlatToLeftBankedDown25: + return CorkscrewRCTrackDiagFlatToLeftBankedDown25; + case TrackElemType::DiagFlatToRightBankedDown25: + return CorkscrewRCTrackDiagFlatToRightBankedDown25; + case TrackElemType::DiagLeftBankedDown25ToFlat: + return CorkscrewRCTrackDiagLeftBankedDown25ToFlat; + case TrackElemType::DiagRightBankedDown25ToFlat: + return CorkscrewRCTrackDiagRightBankedDown25ToFlat; + + case TrackElemType::LeftEighthBankToDiagUp25: + return CorkscrewRCTrackLeftEighthBankToDiagUp25; + case TrackElemType::RightEighthBankToDiagUp25: + return CorkscrewRCTrackRightEighthBankToDiagUp25; + case TrackElemType::LeftEighthBankToDiagDown25: + return CorkscrewRCTrackLeftEighthBankToDiagDown25; + case TrackElemType::RightEighthBankToDiagDown25: + return CorkscrewRCTrackRightEighthBankToDiagDown25; + + case TrackElemType::LeftEighthBankToOrthogonalUp25: + return CorkscrewRCTrackLeftEighthBankToOrthogonalUp25; + case TrackElemType::RightEighthBankToOrthogonalUp25: + return CorkscrewRCTrackRightEighthBankToOrthogonalUp25; + case TrackElemType::LeftEighthBankToOrthogonalDown25: + return CorkscrewRCTrackLeftEighthBankToOrthogonalDown25; + case TrackElemType::RightEighthBankToOrthogonalDown25: + return CorkscrewRCTrackRightEighthBankToOrthogonalDown25; + + // Small banked to unbanked curves + case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25: + return CorkscrewRCTrackLeftBankToLeftQuarterTurn325DegUp; + case TrackElemType::RightBankToRightQuarterTurn3TilesUp25: + return CorkscrewRCTrackRightBankToRightQuarterTurn325DegUp; + case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank: + return CorkscrewRCTrackLeftQuarterTurn325DegDownToLeftBank; + case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank: + return CorkscrewRCTrackRightQuarterTurn325DegDownToRightBank; + + // Large corkscrews + case TrackElemType::LeftLargeCorkscrewUp: + return CorkscrewRCTrackLeftLargeCorkscrewUp; + case TrackElemType::RightLargeCorkscrewUp: + return CorkscrewRCTrackRightLargeCorkscrewUp; + case TrackElemType::LeftLargeCorkscrewDown: + return CorkscrewRCTrackLeftLargeCorkscrewDown; + case TrackElemType::RightLargeCorkscrewDown: + return CorkscrewRCTrackRightLargeCorkscrewDown; + + // Quarter loops + case TrackElemType::Up90ToInvertedFlatQuarterLoop: + return CorkscrewRCTrack90DegToInvertedFlatQuarterLoopUp; + case TrackElemType::InvertedFlatToDown90QuarterLoop: + return CorkscrewRCTrackInvertedFlatTo90DegQuarterLoopDown; + + // Medium half loops + case TrackElemType::LeftMediumHalfLoopUp: + return CorkscrewRCTrackLeftMediumHalfLoopUp; + case TrackElemType::RightMediumHalfLoopUp: + return CorkscrewRCTrackRightMediumHalfLoopUp; + case TrackElemType::LeftMediumHalfLoopDown: + return CorkscrewRCTrackLeftMediumHalfLoopDown; + case TrackElemType::RightMediumHalfLoopDown: + return CorkscrewRCTrackRightMediumHalfLoopDown; + + // Large half loops + case TrackElemType::LeftLargeHalfLoopUp: + return CorkscrewRCTrackLeftLargeHalfLoopUp; + case TrackElemType::RightLargeHalfLoopUp: + return CorkscrewRCTrackRightLargeHalfLoopUp; + case TrackElemType::LeftLargeHalfLoopDown: + return CorkscrewRCTrackLeftLargeHalfLoopDown; + case TrackElemType::RightLargeHalfLoopDown: + return CorkscrewRCTrackRightLargeHalfLoopDown; + + // Barrel rolls + case TrackElemType::LeftBarrelRollUpToDown: + return CorkscrewRCTrackLeftBarrelRollUpToDown; + case TrackElemType::RightBarrelRollUpToDown: + return CorkscrewRCTrackRightBarrelRollUpToDown; + case TrackElemType::LeftBarrelRollDownToUp: + return CorkscrewRCTrackLeftBarrelRollDownToUp; + case TrackElemType::RightBarrelRollDownToUp: + return CorkscrewRCTrackRightBarrelRollDownToUp; + + // Zero g rolls + case TrackElemType::LeftZeroGRollUp: + return CorkscrewRCTrackLeftZeroGRollUp; + case TrackElemType::RightZeroGRollUp: + return CorkscrewRCTrackRightZeroGRollUp; + case TrackElemType::LeftZeroGRollDown: + return CorkscrewRCTrackLeftZeroGRollDown; + case TrackElemType::RightZeroGRollDown: + return CorkscrewRCTrackRightZeroGRollDown; + + // Large zero g rolls + case TrackElemType::LeftLargeZeroGRollUp: + return CorkscrewRCTrackLeftLargeZeroGRollUp; + case TrackElemType::RightLargeZeroGRollUp: + return CorkscrewRCTrackRightLargeZeroGRollUp; + case TrackElemType::LeftLargeZeroGRollDown: + return CorkscrewRCTrackLeftLargeZeroGRollDown; + case TrackElemType::RightLargeZeroGRollDown: + return CorkscrewRCTrackRightLargeZeroGRollDown; + default: return nullptr; } diff --git a/src/openrct2/park/Legacy.cpp b/src/openrct2/park/Legacy.cpp index 3b99aa1d06..fa05855f0f 100644 --- a/src/openrct2/park/Legacy.cpp +++ b/src/openrct2/park/Legacy.cpp @@ -2423,6 +2423,146 @@ bool TrackTypeMustBeMadeInvisible(ride_type_t rideType, OpenRCT2::TrackElemType break; } } + else if ( + (rideType == RIDE_TYPE_CORKSCREW_ROLLER_COASTER || rideType == RIDE_TYPE_HYPERCOASTER + || rideType == RIDE_TYPE_LAY_DOWN_ROLLER_COASTER) + && parkFileVersion < kExtendedCorkscrewCoasterVersion) + { + switch (trackType) + { + case TrackElemType::FlatToUp60: + case TrackElemType::Up60ToFlat: + case TrackElemType::FlatToDown60: + case TrackElemType::Down60ToFlat: + case TrackElemType::DiagFlatToUp60: + case TrackElemType::DiagUp60ToFlat: + case TrackElemType::DiagFlatToDown60: + case TrackElemType::DiagDown60ToFlat: + case TrackElemType::Up90: + case TrackElemType::Down90: + case TrackElemType::Up60ToUp90: + case TrackElemType::Down90ToDown60: + case TrackElemType::Up90ToUp60: + case TrackElemType::Down60ToDown90: + case TrackElemType::LeftQuarterTurn1TileUp90: + case TrackElemType::RightQuarterTurn1TileUp90: + case TrackElemType::LeftQuarterTurn1TileDown90: + case TrackElemType::RightQuarterTurn1TileDown90: + case TrackElemType::Up25ToLeftBankedUp25: + case TrackElemType::Up25ToRightBankedUp25: + case TrackElemType::LeftBankedUp25ToUp25: + case TrackElemType::RightBankedUp25ToUp25: + case TrackElemType::Down25ToLeftBankedDown25: + case TrackElemType::Down25ToRightBankedDown25: + case TrackElemType::LeftBankedDown25ToDown25: + case TrackElemType::RightBankedDown25ToDown25: + case TrackElemType::LeftBankedFlatToLeftBankedUp25: + case TrackElemType::RightBankedFlatToRightBankedUp25: + case TrackElemType::LeftBankedUp25ToLeftBankedFlat: + case TrackElemType::RightBankedUp25ToRightBankedFlat: + case TrackElemType::LeftBankedFlatToLeftBankedDown25: + case TrackElemType::RightBankedFlatToRightBankedDown25: + case TrackElemType::LeftBankedDown25ToLeftBankedFlat: + case TrackElemType::RightBankedDown25ToRightBankedFlat: + case TrackElemType::Down25LeftBanked: + case TrackElemType::Down25RightBanked: + case TrackElemType::FlatToLeftBankedUp25: + case TrackElemType::FlatToRightBankedUp25: + case TrackElemType::LeftBankedUp25ToFlat: + case TrackElemType::RightBankedUp25ToFlat: + case TrackElemType::FlatToLeftBankedDown25: + case TrackElemType::FlatToRightBankedDown25: + case TrackElemType::LeftBankedDown25ToFlat: + case TrackElemType::RightBankedDown25ToFlat: + case TrackElemType::Up25LeftBanked: + case TrackElemType::Up25RightBanked: + case TrackElemType::LeftBankedQuarterTurn3TileUp25: + case TrackElemType::RightBankedQuarterTurn3TileUp25: + case TrackElemType::LeftBankedQuarterTurn3TileDown25: + case TrackElemType::RightBankedQuarterTurn3TileDown25: + case TrackElemType::LeftBankedQuarterTurn5TileUp25: + case TrackElemType::RightBankedQuarterTurn5TileUp25: + case TrackElemType::LeftBankedQuarterTurn5TileDown25: + case TrackElemType::RightBankedQuarterTurn5TileDown25: + case TrackElemType::LeftEighthToDiagUp25: + case TrackElemType::RightEighthToDiagUp25: + case TrackElemType::LeftEighthToDiagDown25: + case TrackElemType::RightEighthToDiagDown25: + case TrackElemType::LeftEighthToOrthogonalUp25: + case TrackElemType::RightEighthToOrthogonalUp25: + case TrackElemType::LeftEighthToOrthogonalDown25: + case TrackElemType::RightEighthToOrthogonalDown25: + case TrackElemType::DiagUp25ToLeftBankedUp25: + case TrackElemType::DiagUp25ToRightBankedUp25: + case TrackElemType::DiagLeftBankedUp25ToUp25: + case TrackElemType::DiagRightBankedUp25ToUp25: + case TrackElemType::DiagDown25ToLeftBankedDown25: + case TrackElemType::DiagDown25ToRightBankedDown25: + case TrackElemType::DiagLeftBankedDown25ToDown25: + case TrackElemType::DiagRightBankedDown25ToDown25: + case TrackElemType::DiagLeftBankedFlatToLeftBankedUp25: + case TrackElemType::DiagRightBankedFlatToRightBankedUp25: + case TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat: + case TrackElemType::DiagRightBankedUp25ToRightBankedFlat: + case TrackElemType::DiagLeftBankedFlatToLeftBankedDown25: + case TrackElemType::DiagRightBankedFlatToRightBankedDown25: + case TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat: + case TrackElemType::DiagRightBankedDown25ToRightBankedFlat: + case TrackElemType::DiagUp25LeftBanked: + case TrackElemType::DiagUp25RightBanked: + case TrackElemType::DiagDown25LeftBanked: + case TrackElemType::DiagDown25RightBanked: + case TrackElemType::DiagFlatToLeftBankedUp25: + case TrackElemType::DiagFlatToRightBankedUp25: + case TrackElemType::DiagLeftBankedUp25ToFlat: + case TrackElemType::DiagRightBankedUp25ToFlat: + case TrackElemType::DiagFlatToLeftBankedDown25: + case TrackElemType::DiagFlatToRightBankedDown25: + case TrackElemType::DiagLeftBankedDown25ToFlat: + case TrackElemType::DiagRightBankedDown25ToFlat: + case TrackElemType::LeftEighthBankToDiagUp25: + case TrackElemType::RightEighthBankToDiagUp25: + case TrackElemType::LeftEighthBankToDiagDown25: + case TrackElemType::RightEighthBankToDiagDown25: + case TrackElemType::LeftEighthBankToOrthogonalUp25: + case TrackElemType::RightEighthBankToOrthogonalUp25: + case TrackElemType::LeftEighthBankToOrthogonalDown25: + case TrackElemType::RightEighthBankToOrthogonalDown25: + case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25: + case TrackElemType::RightBankToRightQuarterTurn3TilesUp25: + case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank: + case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank: + case TrackElemType::LeftLargeCorkscrewUp: + case TrackElemType::RightLargeCorkscrewUp: + case TrackElemType::LeftLargeCorkscrewDown: + case TrackElemType::RightLargeCorkscrewDown: + case TrackElemType::Up90ToInvertedFlatQuarterLoop: + case TrackElemType::InvertedFlatToDown90QuarterLoop: + case TrackElemType::LeftMediumHalfLoopUp: + case TrackElemType::RightMediumHalfLoopUp: + case TrackElemType::LeftMediumHalfLoopDown: + case TrackElemType::RightMediumHalfLoopDown: + case TrackElemType::LeftLargeHalfLoopUp: + case TrackElemType::RightLargeHalfLoopUp: + case TrackElemType::LeftLargeHalfLoopDown: + case TrackElemType::RightLargeHalfLoopDown: + case TrackElemType::LeftBarrelRollUpToDown: + case TrackElemType::RightBarrelRollUpToDown: + case TrackElemType::LeftBarrelRollDownToUp: + case TrackElemType::RightBarrelRollDownToUp: + case TrackElemType::LeftZeroGRollUp: + case TrackElemType::RightZeroGRollUp: + case TrackElemType::LeftZeroGRollDown: + case TrackElemType::RightZeroGRollDown: + case TrackElemType::LeftLargeZeroGRollUp: + case TrackElemType::RightLargeZeroGRollUp: + case TrackElemType::LeftLargeZeroGRollDown: + case TrackElemType::RightLargeZeroGRollDown: + return true; + default: + break; + } + } return false; } diff --git a/src/openrct2/park/ParkFile.h b/src/openrct2/park/ParkFile.h index d6be3f4944..0dc6c046d0 100644 --- a/src/openrct2/park/ParkFile.h +++ b/src/openrct2/park/ParkFile.h @@ -11,7 +11,7 @@ namespace OpenRCT2 struct GameState_t; // Current version that is saved. - constexpr uint32_t PARK_FILE_CURRENT_VERSION = 41; + constexpr uint32_t PARK_FILE_CURRENT_VERSION = 42; // The minimum version that is forwards compatible with the current version. constexpr uint32_t PARK_FILE_MIN_VERSION = 40; @@ -32,6 +32,7 @@ namespace OpenRCT2 constexpr uint16_t k16BitParkHistoryVersion = 38; constexpr uint16_t kPeepNamesObjectsVersion = 39; constexpr uint16_t kWoodenRollerCoasterMediumLargeHalfLoopsVersion = 41; + constexpr uint16_t kExtendedCorkscrewCoasterVersion = 42; } // namespace OpenRCT2 class ParkFileExporter diff --git a/src/openrct2/ride/rtd/coaster/CorkscrewRollerCoaster.h b/src/openrct2/ride/rtd/coaster/CorkscrewRollerCoaster.h index eef28026ff..dfc385ca61 100644 --- a/src/openrct2/ride/rtd/coaster/CorkscrewRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/CorkscrewRollerCoaster.h @@ -22,8 +22,8 @@ constexpr RideTypeDescriptor CorkscrewRollerCoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .Drawer = GetTrackPaintFunctionCorkscrewRC, .supportType = MetalSupportType::Tubes, - .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes,TrackGroup::booster, TrackGroup::slopeSteepLong, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes}, - .extraTrackGroups = {TrackGroup::twist}, + .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes,TrackGroup::booster, TrackGroup::slopeSteepLong, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge, TrackGroup::corkscrewLarge, TrackGroup::halfLoopMedium, TrackGroup::halfLoopLarge}, + .extraTrackGroups = {TrackGroup::twist, TrackGroup::slopeVertical, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::barrelRoll, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge}, }), .InvertedTrackPaintFunctions = {}, .Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt | diff --git a/src/openrct2/ride/rtd/coaster/Hypercoaster.h b/src/openrct2/ride/rtd/coaster/Hypercoaster.h index 05ddd730fd..6e900c5df1 100644 --- a/src/openrct2/ride/rtd/coaster/Hypercoaster.h +++ b/src/openrct2/ride/rtd/coaster/Hypercoaster.h @@ -22,7 +22,7 @@ constexpr RideTypeDescriptor HypercoasterRTD = .TrackPaintFunctions = TrackDrawerDescriptor({ .Drawer = GetTrackPaintFunctionCorkscrewRC, .supportType = MetalSupportType::Tubes, - .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::slopeSteepLong, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes}, + .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::slopeSteepLong, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge}, .extraTrackGroups = {TrackGroup::verticalLoop, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::booster}, }), .InvertedTrackPaintFunctions = {}, diff --git a/src/openrct2/ride/rtd/coaster/LayDownRollerCoaster.h b/src/openrct2/ride/rtd/coaster/LayDownRollerCoaster.h index 0a6bc07583..69ad588bcd 100644 --- a/src/openrct2/ride/rtd/coaster/LayDownRollerCoaster.h +++ b/src/openrct2/ride/rtd/coaster/LayDownRollerCoaster.h @@ -23,7 +23,7 @@ constexpr RideTypeDescriptor LayDownRollerCoasterRTD = { .Drawer = GetTrackPaintFunctionCorkscrewRC, .supportType = MetalSupportType::TubesInverted, - .enabledTrackGroups = { TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::inlineTwistUninverted, TrackGroup::flyingHalfLoopUninvertedUp, TrackGroup::corkscrewUninverted, TrackGroup::slopeSteepLong, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes }, + .enabledTrackGroups = { TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::inlineTwistUninverted, TrackGroup::flyingHalfLoopUninvertedUp, TrackGroup::corkscrewUninverted, TrackGroup::slopeSteepLong, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeCurveBanked, TrackGroup::slopeCurveLarge }, .extraTrackGroups = { TrackGroup::flyingHalfLoopUninvertedDown, TrackGroup::booster }, } ), diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index 16c4b0b237..e827e024d1 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1344,7 +1344,23 @@ enum : ImageIndex SPR_G2_CORKSCREW_RC_BEGIN = SPR_G2_SLC_RC_END, SPR_G2_CORKSCREW_DIAG_BRAKES = SPR_G2_CORKSCREW_RC_BEGIN, - SPR_G2_CORKSCREW_RC_END = SPR_G2_CORKSCREW_DIAG_BRAKES + 6, + SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP = SPR_G2_CORKSCREW_DIAG_BRAKES + 6, + SPR_G2_CORKSCREW_TRACK_VERTICAL = SPR_G2_CORKSCREW_TRACK_SMALL_FLAT_TO_STEEP + 20, + SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST = SPR_G2_CORKSCREW_TRACK_VERTICAL + 8, + SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION = SPR_G2_CORKSCREW_TRACK_VERTICAL_TWIST + 12, + SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED = SPR_G2_CORKSCREW_TRACK_SLOPE_BANK_TRANSITION + 64, + SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED = SPR_G2_CORKSCREW_TRACK_GENTLE_SMALL_CURVE_BANKED + 18, + SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE = SPR_G2_CORKSCREW_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 40, + SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED = SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE + 64, + SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION = SPR_G2_CORKSCREW_TRACK_GENTLE_LARGE_CURVE_BANKED + 128, + SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW = SPR_G2_CORKSCREW_TRACK_TURN_BANK_TRANSITION + 22, + SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP = SPR_G2_CORKSCREW_TRACK_LARGE_CORKSCREW + 42, + SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP = SPR_G2_CORKSCREW_TRACK_QUARTER_LOOP + 14, + SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP = SPR_G2_CORKSCREW_TRACK_MEDIUM_HALF_LOOP + 48, + SPR_G2_CORKSCREW_TRACK_BARREL_ROLL = SPR_G2_CORKSCREW_TRACK_LARGE_HALF_LOOP + 64, + SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL = SPR_G2_CORKSCREW_TRACK_BARREL_ROLL + 48, + SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL = SPR_G2_CORKSCREW_TRACK_ZERO_G_ROLL + 40, + SPR_G2_CORKSCREW_RC_END = SPR_G2_CORKSCREW_TRACK_LARGE_ZERO_G_ROLL + 58, SPR_G2_LIM_LAUNCHED_TRACK_BEGIN = SPR_G2_CORKSCREW_RC_END, SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL = SPR_G2_LIM_LAUNCHED_TRACK_BEGIN + 0,