diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index ec870eee37..8351bebb4b 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -96,6 +96,7 @@ STR_0091 :Unknown Ride (59) STR_0092 :LIM Launched Roller Coaster STR_0093 :Hybrid Coaster STR_0094 :Single Rail Roller Coaster +STR_0095 :Alpine Coaster STR_0512 :A compact roller coaster with a spiral lift hill and smooth, twisting drops. STR_0513 :A looping roller coaster where the riders ride in a standing position STR_0514 :Trains suspended beneath the roller coaster track swing out to the side around corners @@ -175,8 +176,9 @@ STR_0598 :Inverted roller coaster trains are accelerated out of the station t STR_0599 :A compact roller coaster with individual cars and smooth twisting drops STR_0600 :Powered mine trains career along a smooth and twisted track layout STR_0602 :Roller coaster trains are accelerated out of the station by linear induction motors to speed through twisting inversions -STR_0603 :A wooden style roller coaster with a steel track, allowing for steep drops and inversions. -STR_0604 :Riders ride single file on a narrow monorail track, as they race through tight inversions and direction changes. +STR_0603 :A wooden style roller coaster with a steel track, allowing for steep drops and inversions +STR_0604 :Riders ride single file on a narrow monorail track, as they race through tight inversions and direction changes +STR_0605 :Riders toboggan down a meandering steel track, braking to control their speed STR_0767 :Guest {INT32} STR_0768 :Handyman {INT32} STR_0769 :Mechanic {INT32} diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 7b046258ec..f5d9ae8fb0 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,5 +1,6 @@ 0.4.1 (in development) ------------------------------------------------------------------------ +- Feature: [#16825] Add Alpine Coaster track type. - Feature: [#17011] Option to show ride vehicles as separate entries when selecting a ride to construct. - Improved: [#13966] Music Style dropdown is now sorted by name. - Improved: [#16978] Tree placement is more natural during map generation. diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index ca5c1fad5d..31fa07ddd7 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -11793,5 +11793,2595 @@ "path": "track/raptor/small_steep_to_flat_up_diag_lift_4.png", "x_offset": -3, "y_offset": -30 + }, + { + "path": "track/alpine/preview_track.png", + "x_offset": 8, + "y_offset": 1 + }, + { + "path": "track/alpine/preview_support.png", + "x_offset": 25, + "y_offset": 11 + }, + { + "path": "track/alpine/flat_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/flat_2.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_1.png", + "x_offset": -19, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_2.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_3.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_4.png", + "x_offset": -19, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_flat_1.png", + "x_offset": -19, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_flat_2.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_flat_3.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_flat_4.png", + "x_offset": -19, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_1.png", + "x_offset": -19, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_2.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_3.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_4.png", + "x_offset": -19, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_1_1.png", + "x_offset": -19, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_1_2.png", + "x_offset": -32, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_1_3.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_2_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_2_2.png", + "x_offset": -2, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_2_3.png", + "x_offset": -32, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_3_1.png", + "x_offset": -4, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_3_2.png", + "x_offset": 24, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_3_3.png", + "x_offset": -8, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_4_1.png", + "x_offset": -26, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_4_2.png", + "x_offset": -8, + "y_offset": 24, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_4_3.png", + "x_offset": -19, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_1_1.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_1_2.png", + "x_offset": -28, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_1_3.png", + "x_offset": 9, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_1_4.png", + "x_offset": -24, + "y_offset": 9, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_1_5.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_2_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_2_2.png", + "x_offset": -8, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_2_3.png", + "x_offset": -28, + "y_offset": 17, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_2_4.png", + "x_offset": -14, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_2_5.png", + "x_offset": -30, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_3_1.png", + "x_offset": -14, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_3_2.png", + "x_offset": 11, + "y_offset": 9, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_3_3.png", + "x_offset": -22, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_3_4.png", + "x_offset": 12, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_3_5.png", + "x_offset": -10, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_4_1.png", + "x_offset": -22, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_4_2.png", + "x_offset": -28, + "y_offset": 17, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_4_3.png", + "x_offset": -14, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_4_4.png", + "x_offset": -16, + "y_offset": 17, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_4_5.png", + "x_offset": -19, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_1_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_1_2.png", + "x_offset": -26, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_1_3.png", + "x_offset": 17, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_1_4.png", + "x_offset": -8, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_2_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_2_2.png", + "x_offset": -10, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_2_3.png", + "x_offset": -20, + "y_offset": 21, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_2_4.png", + "x_offset": -28, + "y_offset": 9, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_3_1.png", + "x_offset": -16, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_3_2.png", + "x_offset": -1, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_3_3.png", + "x_offset": -32, + "y_offset": 11, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_3_4.png", + "x_offset": -4, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_4_1.png", + "x_offset": -20, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_4_2.png", + "x_offset": -32, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_4_3.png", + "x_offset": -3, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_4_4.png", + "x_offset": 0, + "y_offset": 10, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_1_1.png", + "x_offset": -19, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_1_2.png", + "x_offset": -18, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_1_3.png", + "x_offset": -4, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_1_4.png", + "x_offset": -32, + "y_offset": 10, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_2_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_2_2.png", + "x_offset": -22, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_2_3.png", + "x_offset": 23, + "y_offset": 11, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_2_4.png", + "x_offset": -6, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_3_1.png", + "x_offset": -28, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_3_2.png", + "x_offset": -24, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_3_3.png", + "x_offset": -12, + "y_offset": 21, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_3_4.png", + "x_offset": 0, + "y_offset": 9, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_4_1.png", + "x_offset": -12, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_4_2.png", + "x_offset": 1, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_4_3.png", + "x_offset": -31, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_4_4.png", + "x_offset": -4, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/alpine/flat_diag_1.png", + "x_offset": -32, + "y_offset": 10, + "palette": "keep" + }, + { + "path": "track/alpine/flat_diag_2.png", + "x_offset": -5, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/flat_diag_3.png", + "x_offset": -32, + "y_offset": 10, + "palette": "keep" + }, + { + "path": "track/alpine/flat_diag_4.png", + "x_offset": -5, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_diag_1.png", + "x_offset": -32, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_diag_2.png", + "x_offset": -5, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_diag_3.png", + "x_offset": -33, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_diag_4.png", + "x_offset": -5, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_to_flat_up_diag_1.png", + "x_offset": -32, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_to_flat_up_diag_2.png", + "x_offset": -5, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_to_flat_up_diag_3.png", + "x_offset": -32, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_to_flat_up_diag_4.png", + "x_offset": -5, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_diag_1.png", + "x_offset": -32, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_diag_2.png", + "x_offset": -5, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_diag_3.png", + "x_offset": -32, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_diag_4.png", + "x_offset": -5, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_left_bank_1_1.png", + "x_offset": -19, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_left_bank_1_2.png", + "x_offset": -1, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_left_bank_2_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_left_bank_2_2.png", + "x_offset": -19, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_left_bank_3.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_left_bank_4.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_right_bank_1.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_right_bank_2.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_right_bank_3_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_right_bank_3_2.png", + "x_offset": -15, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_right_bank_4_1.png", + "x_offset": -18, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_right_bank_4_2.png", + "x_offset": -19, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_to_gentle_up_1_1.png", + "x_offset": -19, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_to_gentle_up_1_2.png", + "x_offset": -15, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_to_gentle_up_2_1.png", + "x_offset": -18, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_to_gentle_up_2_2.png", + "x_offset": -19, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_to_gentle_up_3.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_to_gentle_up_4.png", + "x_offset": -19, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/right_bank_to_gentle_up_1.png", + "x_offset": -19, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/right_bank_to_gentle_up_2.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/right_bank_to_gentle_up_3_1.png", + "x_offset": -19, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/right_bank_to_gentle_up_3_2.png", + "x_offset": -5, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/right_bank_to_gentle_up_4_1.png", + "x_offset": -19, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/right_bank_to_gentle_up_4_2.png", + "x_offset": -18, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_left_bank_1_1.png", + "x_offset": -19, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_left_bank_1_2.png", + "x_offset": -1, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_left_bank_2_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_left_bank_2_2.png", + "x_offset": -16, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_left_bank_3.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_left_bank_4.png", + "x_offset": -19, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_right_bank_1.png", + "x_offset": -19, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_right_bank_2.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_right_bank_3_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_right_bank_3_2.png", + "x_offset": -15, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_right_bank_4_1.png", + "x_offset": -18, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_right_bank_4_2.png", + "x_offset": -19, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_1.png", + "x_offset": -19, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_2.png", + "x_offset": -19, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_3.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_4.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_left_bank_diag_1_1.png", + "x_offset": -32, + "y_offset": 10, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_left_bank_diag_1_2.png", + "x_offset": -32, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_left_bank_diag_2.png", + "x_offset": -5, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_left_bank_diag_3.png", + "x_offset": -32, + "y_offset": 9, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_left_bank_diag_4.png", + "x_offset": -4, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_right_bank_diag_1.png", + "x_offset": -32, + "y_offset": 9, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_right_bank_diag_2.png", + "x_offset": -4, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_right_bank_diag_3_1.png", + "x_offset": -32, + "y_offset": 10, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_right_bank_diag_3_2.png", + "x_offset": -32, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_right_bank_diag_4.png", + "x_offset": -5, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_to_gentle_up_diag_1_1.png", + "x_offset": -32, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_to_gentle_up_diag_1_2.png", + "x_offset": -32, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_to_gentle_up_diag_2.png", + "x_offset": -5, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_to_gentle_up_diag_3.png", + "x_offset": -33, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_to_gentle_up_diag_4.png", + "x_offset": -4, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/alpine/right_bank_to_gentle_up_diag_1.png", + "x_offset": -32, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/right_bank_to_gentle_up_diag_2.png", + "x_offset": -4, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/right_bank_to_gentle_up_diag_3_1.png", + "x_offset": -32, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/right_bank_to_gentle_up_diag_3_2.png", + "x_offset": -31, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/right_bank_to_gentle_up_diag_4.png", + "x_offset": -5, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_left_bank_diag_1_1.png", + "x_offset": -32, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_left_bank_diag_1_2.png", + "x_offset": -32, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_left_bank_diag_2.png", + "x_offset": -5, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_left_bank_diag_3.png", + "x_offset": -32, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_left_bank_diag_4.png", + "x_offset": -4, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_right_bank_diag_1.png", + "x_offset": -32, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_right_bank_diag_2.png", + "x_offset": -4, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_right_bank_diag_3_1.png", + "x_offset": -32, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_right_bank_diag_3_2.png", + "x_offset": -32, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_right_bank_diag_4.png", + "x_offset": -5, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_diag_1.png", + "x_offset": -32, + "y_offset": 11, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_diag_2.png", + "x_offset": -5, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_diag_3.png", + "x_offset": -32, + "y_offset": 9, + "palette": "keep" + }, + { + "path": "track/alpine/left_bank_diag_4.png", + "x_offset": -4, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_1_1.png", + "x_offset": -19, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_1_2.png", + "x_offset": -15, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_1_3.png", + "x_offset": -32, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_1_4.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_2_1.png", + "x_offset": -19, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_2_2.png", + "x_offset": -2, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_2_3.png", + "x_offset": -32, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_3_1.png", + "x_offset": -5, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_3_2.png", + "x_offset": 23, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_3_3.png", + "x_offset": -7, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_3_4.png", + "x_offset": -6, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_4_1.png", + "x_offset": -28, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_4_2.png", + "x_offset": -8, + "y_offset": 23, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_4_3.png", + "x_offset": -19, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_1_1.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_1_2.png", + "x_offset": -15, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_1_3.png", + "x_offset": -26, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_1_4.png", + "x_offset": 11, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_1_5.png", + "x_offset": -25, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_1_6.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_2_1.png", + "x_offset": -19, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_2_2.png", + "x_offset": -8, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_2_3.png", + "x_offset": -24, + "y_offset": 19, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_2_4.png", + "x_offset": -14, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_2_5.png", + "x_offset": -28, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_3_1.png", + "x_offset": -14, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_3_2.png", + "x_offset": 11, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_3_3.png", + "x_offset": -22, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_3_4.png", + "x_offset": 13, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_3_5.png", + "x_offset": -9, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_3_6.png", + "x_offset": -10, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_4_1.png", + "x_offset": -24, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_4_2.png", + "x_offset": -30, + "y_offset": 16, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_4_3.png", + "x_offset": -16, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_4_4.png", + "x_offset": -18, + "y_offset": 16, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_bank_4_5.png", + "x_offset": -19, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_1_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_1_2.png", + "x_offset": -24, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_1_3.png", + "x_offset": 19, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_1_4.png", + "x_offset": -13, + "y_offset": 11, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_2_1.png", + "x_offset": -19, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_2_2.png", + "x_offset": -32, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_2_3.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_2_4.png", + "x_offset": -32, + "y_offset": 10, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_3_1.png", + "x_offset": -17, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_3_2.png", + "x_offset": -2, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_3_3.png", + "x_offset": -32, + "y_offset": 11, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_3_4.png", + "x_offset": -4, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_4_1.png", + "x_offset": -22, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_4_2.png", + "x_offset": -32, + "y_offset": 11, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_4_3.png", + "x_offset": -4, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_left_to_diag_bank_4_4.png", + "x_offset": 0, + "y_offset": 9, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_1_1.png", + "x_offset": -19, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_1_2.png", + "x_offset": -20, + "y_offset": 11, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_1_3.png", + "x_offset": -6, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_1_4.png", + "x_offset": -32, + "y_offset": 9, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_2_1.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_2_2.png", + "x_offset": -22, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_2_3.png", + "x_offset": 23, + "y_offset": 11, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_2_4.png", + "x_offset": -6, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_3_1.png", + "x_offset": -26, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_3_2.png", + "x_offset": -32, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_3_3.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_3_4.png", + "x_offset": 0, + "y_offset": 10, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_4_1.png", + "x_offset": -25, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_4_2.png", + "x_offset": 1, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_4_3.png", + "x_offset": -31, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/alpine/large_turn_right_to_diag_bank_4_4.png", + "x_offset": -4, + "y_offset": 11, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_gentle_up_1_1.png", + "x_offset": -25, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_gentle_up_1_2.png", + "x_offset": -13, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_gentle_up_2_1.png", + "x_offset": -13, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_gentle_up_2_2.png", + "x_offset": -38, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_gentle_up_3_1.png", + "x_offset": -14, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_gentle_up_3_2.png", + "x_offset": -2, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_gentle_up_4_1.png", + "x_offset": -26, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_gentle_up_4_2.png", + "x_offset": -25, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_gentle_up_1_1.png", + "x_offset": -25, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_gentle_up_1_2.png", + "x_offset": -26, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_gentle_up_2_1.png", + "x_offset": -13, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_gentle_up_2_2.png", + "x_offset": -25, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_gentle_up_3_1.png", + "x_offset": -38, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_gentle_up_3_2.png", + "x_offset": -13, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_gentle_up_4_1.png", + "x_offset": -2, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_gentle_up_4_2.png", + "x_offset": -14, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_1_1.png", + "x_offset": -19, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_1_2.png", + "x_offset": -28, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_1_3.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_1_4.png", + "x_offset": -26, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_1_5.png", + "x_offset": -19, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_2_1.png", + "x_offset": -19, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_2_2.png", + "x_offset": 0, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_2_3.png", + "x_offset": 0, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_2_4.png", + "x_offset": -12, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_2_5.png", + "x_offset": -17, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_3_1.png", + "x_offset": -22, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_3_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_3_3.png", + "x_offset": -20, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_3_4.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_3_5.png", + "x_offset": -13, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_4_1.png", + "x_offset": -24, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_4_2.png", + "x_offset": -32, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_4_3.png", + "x_offset": -17, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_4_4.png", + "x_offset": -16, + "y_offset": 5, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_left_gentle_up_4_5.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_1_1.png", + "x_offset": -19, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_1_2.png", + "x_offset": -11, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_1_3.png", + "x_offset": 0, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_1_4.png", + "x_offset": -16, + "y_offset": 5, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_1_5.png", + "x_offset": -18, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_2_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_2_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_2_3.png", + "x_offset": 0, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_2_4.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_2_5.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_3_1.png", + "x_offset": -32, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_3_2.png", + "x_offset": -32, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_3_3.png", + "x_offset": -25, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_3_4.png", + "x_offset": -21, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_3_5.png", + "x_offset": -19, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_4_1.png", + "x_offset": -11, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_4_2.png", + "x_offset": 11, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_4_3.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_4_4.png", + "x_offset": 10, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/medium_turn_right_gentle_up_4_5.png", + "x_offset": -14, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_left_1_1.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_left_1_2.png", + "x_offset": -26, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_left_1_3.png", + "x_offset": 10, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_left_1_4.png", + "x_offset": -15, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_left_2_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_left_2_2.png", + "x_offset": -10, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_left_2_3.png", + "x_offset": -28, + "y_offset": 17, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_left_2_4.png", + "x_offset": -20, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_right_1_1.png", + "x_offset": -19, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_right_1_2.png", + "x_offset": -18, + "y_offset": 17, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_right_1_3.png", + "x_offset": -14, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_right_1_4.png", + "x_offset": -30, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_right_2_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_right_2_2.png", + "x_offset": -24, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_right_2_3.png", + "x_offset": 12, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/s_bend_right_2_4.png", + "x_offset": -12, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_left_up_1_1.png", + "x_offset": -18, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_left_up_1_2.png", + "x_offset": -15, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_left_up_1_3.png", + "x_offset": -32, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_left_up_1_4.png", + "x_offset": -19, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_left_up_2_1.png", + "x_offset": -19, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_left_up_2_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_left_up_2_3.png", + "x_offset": -32, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_left_up_3_1.png", + "x_offset": -6, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_left_up_3_2.png", + "x_offset": 23, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_left_up_3_3.png", + "x_offset": -5, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_left_up_3_4.png", + "x_offset": -5, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_left_up_4_1.png", + "x_offset": -26, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_left_up_4_2.png", + "x_offset": -8, + "y_offset": 19, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_left_up_4_3.png", + "x_offset": -18, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_right_up_1_1.png", + "x_offset": -19, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_right_up_1_2.png", + "x_offset": -6, + "y_offset": 19, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_right_up_1_3.png", + "x_offset": -26, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_right_up_2_1.png", + "x_offset": -19, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_right_up_2_2.png", + "x_offset": -32, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_right_up_2_3.png", + "x_offset": -19, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_right_up_2_4.png", + "x_offset": -16, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_right_up_3_1.png", + "x_offset": -32, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_right_up_3_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_right_up_3_3.png", + "x_offset": -19, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_right_up_4_1.png", + "x_offset": -6, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_right_up_4_2.png", + "x_offset": -6, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_right_up_4_3.png", + "x_offset": 23, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/small_helix_right_up_4_4.png", + "x_offset": -7, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_1_1.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_1_2.png", + "x_offset": -15, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_1_3.png", + "x_offset": -28, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_1_4.png", + "x_offset": 9, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_1_5.png", + "x_offset": -22, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_1_6.png", + "x_offset": -19, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_2_1.png", + "x_offset": -19, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_2_2.png", + "x_offset": -4, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_2_3.png", + "x_offset": -32, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_2_4.png", + "x_offset": 1, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_2_5.png", + "x_offset": -32, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_3_1.png", + "x_offset": -16, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_3_2.png", + "x_offset": 10, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_3_3.png", + "x_offset": -21, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_3_4.png", + "x_offset": 15, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_3_5.png", + "x_offset": -3, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_3_6.png", + "x_offset": -7, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_4_1.png", + "x_offset": -20, + "y_offset": 5, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_4_2.png", + "x_offset": -30, + "y_offset": 13, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_4_3.png", + "x_offset": -8, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_4_4.png", + "x_offset": -26, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_left_up_4_5.png", + "x_offset": -18, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_1_1.png", + "x_offset": -19, + "y_offset": 5, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_1_2.png", + "x_offset": -20, + "y_offset": 13, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_1_3.png", + "x_offset": -8, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_1_4.png", + "x_offset": -30, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_1_5.png", + "x_offset": -14, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_2_1.png", + "x_offset": -19, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_2_2.png", + "x_offset": -24, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_2_3.png", + "x_offset": 5, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_2_4.png", + "x_offset": -30, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_2_5.png", + "x_offset": -19, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_2_6.png", + "x_offset": -15, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_3_1.png", + "x_offset": -32, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_3_2.png", + "x_offset": -6, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_3_3.png", + "x_offset": -32, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_3_4.png", + "x_offset": -2, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_3_5.png", + "x_offset": -19, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_4_1.png", + "x_offset": -8, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_4_2.png", + "x_offset": -8, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_4_3.png", + "x_offset": 15, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_4_4.png", + "x_offset": -21, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_4_5.png", + "x_offset": 10, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/medium_helix_right_up_4_6.png", + "x_offset": -17, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_to_gentle_up_1_1.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_to_gentle_up_1_2.png", + "x_offset": -13, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_to_gentle_up_2_1.png", + "x_offset": -10, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_to_gentle_up_2_2.png", + "x_offset": -12, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_to_gentle_up_2_3.png", + "x_offset": -38, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_to_gentle_up_3_1.png", + "x_offset": -15, + "y_offset": -2, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_to_gentle_up_3_2.png", + "x_offset": -3, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_to_gentle_up_4_1.png", + "x_offset": -26, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_left_bank_to_gentle_up_4_2.png", + "x_offset": -25, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_bank_to_gentle_up_1_1.png", + "x_offset": -24, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_bank_to_gentle_up_1_2.png", + "x_offset": -26, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_bank_to_gentle_up_2_1.png", + "x_offset": -12, + "y_offset": -2, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_bank_to_gentle_up_2_2.png", + "x_offset": -25, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_bank_to_gentle_up_3_1.png", + "x_offset": -38, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_bank_to_gentle_up_3_2.png", + "x_offset": -38, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_bank_to_gentle_up_3_3.png", + "x_offset": -13, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_bank_to_gentle_up_4_1.png", + "x_offset": -2, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/alpine/small_turn_right_bank_to_gentle_up_4_2.png", + "x_offset": -15, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/alpine/flat_lift_1.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/flat_lift_2.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/flat_lift_3.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/flat_lift_4.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_lift_1.png", + "x_offset": -19, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_lift_2.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_lift_3.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_lift_4.png", + "x_offset": -19, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_flat_lift_1.png", + "x_offset": -19, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_flat_lift_2.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_flat_lift_3.png", + "x_offset": -19, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_up_to_flat_lift_4.png", + "x_offset": -19, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_lift_1.png", + "x_offset": -19, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_lift_2.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_lift_3.png", + "x_offset": -19, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_lift_4.png", + "x_offset": -19, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/alpine/flat_diag_lift_1.png", + "x_offset": -32, + "y_offset": 10, + "palette": "keep" + }, + { + "path": "track/alpine/flat_diag_lift_2.png", + "x_offset": -5, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/flat_diag_lift_3.png", + "x_offset": -32, + "y_offset": 10, + "palette": "keep" + }, + { + "path": "track/alpine/flat_diag_lift_4.png", + "x_offset": -5, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_diag_lift_1.png", + "x_offset": -32, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_diag_lift_2.png", + "x_offset": -5, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_diag_lift_3.png", + "x_offset": -33, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/flat_to_gentle_up_diag_lift_4.png", + "x_offset": -5, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_to_flat_up_diag_lift_1.png", + "x_offset": -32, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_to_flat_up_diag_lift_2.png", + "x_offset": -5, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_to_flat_up_diag_lift_3.png", + "x_offset": -32, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_to_flat_up_diag_lift_4.png", + "x_offset": -5, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_diag_lift_1.png", + "x_offset": -32, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_diag_lift_2.png", + "x_offset": -5, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_diag_lift_3.png", + "x_offset": -32, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/alpine/gentle_diag_lift_4.png", + "x_offset": -5, + "y_offset": -20, + "palette": "keep" } -] +] \ No newline at end of file diff --git a/resources/g2/track/alpine/block_brake_1.png b/resources/g2/track/alpine/block_brake_1.png new file mode 100644 index 0000000000..16b8a833fb Binary files /dev/null and b/resources/g2/track/alpine/block_brake_1.png differ diff --git a/resources/g2/track/alpine/block_brake_2.png b/resources/g2/track/alpine/block_brake_2.png new file mode 100644 index 0000000000..d7517a681d Binary files /dev/null and b/resources/g2/track/alpine/block_brake_2.png differ diff --git a/resources/g2/track/alpine/brake_1.png b/resources/g2/track/alpine/brake_1.png new file mode 100644 index 0000000000..488d8a15de Binary files /dev/null and b/resources/g2/track/alpine/brake_1.png differ diff --git a/resources/g2/track/alpine/brake_2.png b/resources/g2/track/alpine/brake_2.png new file mode 100644 index 0000000000..5c7fd7636a Binary files /dev/null and b/resources/g2/track/alpine/brake_2.png differ diff --git a/resources/g2/track/alpine/flat_1.png b/resources/g2/track/alpine/flat_1.png new file mode 100644 index 0000000000..6ae3cb0e4d Binary files /dev/null and b/resources/g2/track/alpine/flat_1.png differ diff --git a/resources/g2/track/alpine/flat_2.png b/resources/g2/track/alpine/flat_2.png new file mode 100644 index 0000000000..3ad76eaeb8 Binary files /dev/null and b/resources/g2/track/alpine/flat_2.png differ diff --git a/resources/g2/track/alpine/flat_diag_1.png b/resources/g2/track/alpine/flat_diag_1.png new file mode 100644 index 0000000000..61bbd4b959 Binary files /dev/null and b/resources/g2/track/alpine/flat_diag_1.png differ diff --git a/resources/g2/track/alpine/flat_diag_2.png b/resources/g2/track/alpine/flat_diag_2.png new file mode 100644 index 0000000000..f184ff5fb3 Binary files /dev/null and b/resources/g2/track/alpine/flat_diag_2.png differ diff --git a/resources/g2/track/alpine/flat_diag_3.png b/resources/g2/track/alpine/flat_diag_3.png new file mode 100644 index 0000000000..95135ee35c Binary files /dev/null and b/resources/g2/track/alpine/flat_diag_3.png differ diff --git a/resources/g2/track/alpine/flat_diag_4.png b/resources/g2/track/alpine/flat_diag_4.png new file mode 100644 index 0000000000..eb91b5d0f1 Binary files /dev/null and b/resources/g2/track/alpine/flat_diag_4.png differ diff --git a/resources/g2/track/alpine/flat_diag_lift_1.png b/resources/g2/track/alpine/flat_diag_lift_1.png new file mode 100644 index 0000000000..e6ffee868e Binary files /dev/null and b/resources/g2/track/alpine/flat_diag_lift_1.png differ diff --git a/resources/g2/track/alpine/flat_diag_lift_2.png b/resources/g2/track/alpine/flat_diag_lift_2.png new file mode 100644 index 0000000000..17e33c14c0 Binary files /dev/null and b/resources/g2/track/alpine/flat_diag_lift_2.png differ diff --git a/resources/g2/track/alpine/flat_diag_lift_3.png b/resources/g2/track/alpine/flat_diag_lift_3.png new file mode 100644 index 0000000000..e68ece0f0e Binary files /dev/null and b/resources/g2/track/alpine/flat_diag_lift_3.png differ diff --git a/resources/g2/track/alpine/flat_diag_lift_4.png b/resources/g2/track/alpine/flat_diag_lift_4.png new file mode 100644 index 0000000000..54ec48a3b2 Binary files /dev/null and b/resources/g2/track/alpine/flat_diag_lift_4.png differ diff --git a/resources/g2/track/alpine/flat_lift_1.png b/resources/g2/track/alpine/flat_lift_1.png new file mode 100644 index 0000000000..68b0e2832e Binary files /dev/null and b/resources/g2/track/alpine/flat_lift_1.png differ diff --git a/resources/g2/track/alpine/flat_lift_2.png b/resources/g2/track/alpine/flat_lift_2.png new file mode 100644 index 0000000000..c024d3359d Binary files /dev/null and b/resources/g2/track/alpine/flat_lift_2.png differ diff --git a/resources/g2/track/alpine/flat_lift_3.png b/resources/g2/track/alpine/flat_lift_3.png new file mode 100644 index 0000000000..d3c61e4bf0 Binary files /dev/null and b/resources/g2/track/alpine/flat_lift_3.png differ diff --git a/resources/g2/track/alpine/flat_lift_4.png b/resources/g2/track/alpine/flat_lift_4.png new file mode 100644 index 0000000000..87cec5b3ae Binary files /dev/null and b/resources/g2/track/alpine/flat_lift_4.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_1.png b/resources/g2/track/alpine/flat_to_gentle_up_1.png new file mode 100644 index 0000000000..98bf881526 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_1.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_2.png b/resources/g2/track/alpine/flat_to_gentle_up_2.png new file mode 100644 index 0000000000..bd5014108c Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_2.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_3.png b/resources/g2/track/alpine/flat_to_gentle_up_3.png new file mode 100644 index 0000000000..e0d7fb6fa9 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_3.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_4.png b/resources/g2/track/alpine/flat_to_gentle_up_4.png new file mode 100644 index 0000000000..98e0483d9f Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_4.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_diag_1.png b/resources/g2/track/alpine/flat_to_gentle_up_diag_1.png new file mode 100644 index 0000000000..edbb571e5d Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_diag_1.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_diag_2.png b/resources/g2/track/alpine/flat_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..c5059d08b9 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_diag_3.png b/resources/g2/track/alpine/flat_to_gentle_up_diag_3.png new file mode 100644 index 0000000000..d70815a127 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_diag_3.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_diag_4.png b/resources/g2/track/alpine/flat_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..a547729f5a Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_diag_lift_1.png b/resources/g2/track/alpine/flat_to_gentle_up_diag_lift_1.png new file mode 100644 index 0000000000..9abf5bdec1 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_diag_lift_1.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_diag_lift_2.png b/resources/g2/track/alpine/flat_to_gentle_up_diag_lift_2.png new file mode 100644 index 0000000000..50bb6d6625 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_diag_lift_2.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_diag_lift_3.png b/resources/g2/track/alpine/flat_to_gentle_up_diag_lift_3.png new file mode 100644 index 0000000000..3f7105d6fc Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_diag_lift_3.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_diag_lift_4.png b/resources/g2/track/alpine/flat_to_gentle_up_diag_lift_4.png new file mode 100644 index 0000000000..8c1d7bf2ee Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_diag_lift_4.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_lift_1.png b/resources/g2/track/alpine/flat_to_gentle_up_lift_1.png new file mode 100644 index 0000000000..a2f906d1f0 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_lift_1.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_lift_2.png b/resources/g2/track/alpine/flat_to_gentle_up_lift_2.png new file mode 100644 index 0000000000..1480e140f2 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_lift_2.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_lift_3.png b/resources/g2/track/alpine/flat_to_gentle_up_lift_3.png new file mode 100644 index 0000000000..809a4e36ee Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_lift_3.png differ diff --git a/resources/g2/track/alpine/flat_to_gentle_up_lift_4.png b/resources/g2/track/alpine/flat_to_gentle_up_lift_4.png new file mode 100644 index 0000000000..8e216de044 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_gentle_up_lift_4.png differ diff --git a/resources/g2/track/alpine/flat_to_left_bank_1_1.png b/resources/g2/track/alpine/flat_to_left_bank_1_1.png new file mode 100644 index 0000000000..3a6dbe82bd Binary files /dev/null and b/resources/g2/track/alpine/flat_to_left_bank_1_1.png differ diff --git a/resources/g2/track/alpine/flat_to_left_bank_1_2.png b/resources/g2/track/alpine/flat_to_left_bank_1_2.png new file mode 100644 index 0000000000..25d3fbc95d Binary files /dev/null and b/resources/g2/track/alpine/flat_to_left_bank_1_2.png differ diff --git a/resources/g2/track/alpine/flat_to_left_bank_2_1.png b/resources/g2/track/alpine/flat_to_left_bank_2_1.png new file mode 100644 index 0000000000..b46ccb1947 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_left_bank_2_1.png differ diff --git a/resources/g2/track/alpine/flat_to_left_bank_2_2.png b/resources/g2/track/alpine/flat_to_left_bank_2_2.png new file mode 100644 index 0000000000..e1f556bf21 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_left_bank_2_2.png differ diff --git a/resources/g2/track/alpine/flat_to_left_bank_3.png b/resources/g2/track/alpine/flat_to_left_bank_3.png new file mode 100644 index 0000000000..53188b4a17 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_left_bank_3.png differ diff --git a/resources/g2/track/alpine/flat_to_left_bank_4.png b/resources/g2/track/alpine/flat_to_left_bank_4.png new file mode 100644 index 0000000000..322e942905 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_left_bank_4.png differ diff --git a/resources/g2/track/alpine/flat_to_left_bank_diag_1_1.png b/resources/g2/track/alpine/flat_to_left_bank_diag_1_1.png new file mode 100644 index 0000000000..1456e67d62 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_left_bank_diag_1_1.png differ diff --git a/resources/g2/track/alpine/flat_to_left_bank_diag_1_2.png b/resources/g2/track/alpine/flat_to_left_bank_diag_1_2.png new file mode 100644 index 0000000000..1ed38d5429 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_left_bank_diag_1_2.png differ diff --git a/resources/g2/track/alpine/flat_to_left_bank_diag_2.png b/resources/g2/track/alpine/flat_to_left_bank_diag_2.png new file mode 100644 index 0000000000..bdbfdd72ee Binary files /dev/null and b/resources/g2/track/alpine/flat_to_left_bank_diag_2.png differ diff --git a/resources/g2/track/alpine/flat_to_left_bank_diag_3.png b/resources/g2/track/alpine/flat_to_left_bank_diag_3.png new file mode 100644 index 0000000000..d8212f5005 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_left_bank_diag_3.png differ diff --git a/resources/g2/track/alpine/flat_to_left_bank_diag_4.png b/resources/g2/track/alpine/flat_to_left_bank_diag_4.png new file mode 100644 index 0000000000..bc7006a75c Binary files /dev/null and b/resources/g2/track/alpine/flat_to_left_bank_diag_4.png differ diff --git a/resources/g2/track/alpine/flat_to_right_bank_1.png b/resources/g2/track/alpine/flat_to_right_bank_1.png new file mode 100644 index 0000000000..ba69cd1074 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_right_bank_1.png differ diff --git a/resources/g2/track/alpine/flat_to_right_bank_2.png b/resources/g2/track/alpine/flat_to_right_bank_2.png new file mode 100644 index 0000000000..14e2e8c615 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_right_bank_2.png differ diff --git a/resources/g2/track/alpine/flat_to_right_bank_3_1.png b/resources/g2/track/alpine/flat_to_right_bank_3_1.png new file mode 100644 index 0000000000..0e33d8a9be Binary files /dev/null and b/resources/g2/track/alpine/flat_to_right_bank_3_1.png differ diff --git a/resources/g2/track/alpine/flat_to_right_bank_3_2.png b/resources/g2/track/alpine/flat_to_right_bank_3_2.png new file mode 100644 index 0000000000..ff50cfc886 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_right_bank_3_2.png differ diff --git a/resources/g2/track/alpine/flat_to_right_bank_4_1.png b/resources/g2/track/alpine/flat_to_right_bank_4_1.png new file mode 100644 index 0000000000..0786883776 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_right_bank_4_1.png differ diff --git a/resources/g2/track/alpine/flat_to_right_bank_4_2.png b/resources/g2/track/alpine/flat_to_right_bank_4_2.png new file mode 100644 index 0000000000..bb976214d4 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_right_bank_4_2.png differ diff --git a/resources/g2/track/alpine/flat_to_right_bank_diag_1.png b/resources/g2/track/alpine/flat_to_right_bank_diag_1.png new file mode 100644 index 0000000000..18d1826a83 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_right_bank_diag_1.png differ diff --git a/resources/g2/track/alpine/flat_to_right_bank_diag_2.png b/resources/g2/track/alpine/flat_to_right_bank_diag_2.png new file mode 100644 index 0000000000..9bd65b1781 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_right_bank_diag_2.png differ diff --git a/resources/g2/track/alpine/flat_to_right_bank_diag_3_1.png b/resources/g2/track/alpine/flat_to_right_bank_diag_3_1.png new file mode 100644 index 0000000000..752271bd30 Binary files /dev/null and b/resources/g2/track/alpine/flat_to_right_bank_diag_3_1.png differ diff --git a/resources/g2/track/alpine/flat_to_right_bank_diag_3_2.png b/resources/g2/track/alpine/flat_to_right_bank_diag_3_2.png new file mode 100644 index 0000000000..78e40a637c Binary files /dev/null and b/resources/g2/track/alpine/flat_to_right_bank_diag_3_2.png differ diff --git a/resources/g2/track/alpine/flat_to_right_bank_diag_4.png b/resources/g2/track/alpine/flat_to_right_bank_diag_4.png new file mode 100644 index 0000000000..28a22340dc Binary files /dev/null and b/resources/g2/track/alpine/flat_to_right_bank_diag_4.png differ diff --git a/resources/g2/track/alpine/gentle_1.png b/resources/g2/track/alpine/gentle_1.png new file mode 100644 index 0000000000..b1fe6aa63d Binary files /dev/null and b/resources/g2/track/alpine/gentle_1.png differ diff --git a/resources/g2/track/alpine/gentle_2.png b/resources/g2/track/alpine/gentle_2.png new file mode 100644 index 0000000000..b8de7ea646 Binary files /dev/null and b/resources/g2/track/alpine/gentle_2.png differ diff --git a/resources/g2/track/alpine/gentle_3.png b/resources/g2/track/alpine/gentle_3.png new file mode 100644 index 0000000000..3673f4155a Binary files /dev/null and b/resources/g2/track/alpine/gentle_3.png differ diff --git a/resources/g2/track/alpine/gentle_4.png b/resources/g2/track/alpine/gentle_4.png new file mode 100644 index 0000000000..cdd770a0bf Binary files /dev/null and b/resources/g2/track/alpine/gentle_4.png differ diff --git a/resources/g2/track/alpine/gentle_diag_1.png b/resources/g2/track/alpine/gentle_diag_1.png new file mode 100644 index 0000000000..a63480e930 Binary files /dev/null and b/resources/g2/track/alpine/gentle_diag_1.png differ diff --git a/resources/g2/track/alpine/gentle_diag_2.png b/resources/g2/track/alpine/gentle_diag_2.png new file mode 100644 index 0000000000..c045a5399c Binary files /dev/null and b/resources/g2/track/alpine/gentle_diag_2.png differ diff --git a/resources/g2/track/alpine/gentle_diag_3.png b/resources/g2/track/alpine/gentle_diag_3.png new file mode 100644 index 0000000000..d1e5a44a06 Binary files /dev/null and b/resources/g2/track/alpine/gentle_diag_3.png differ diff --git a/resources/g2/track/alpine/gentle_diag_4.png b/resources/g2/track/alpine/gentle_diag_4.png new file mode 100644 index 0000000000..33e40aaa6a Binary files /dev/null and b/resources/g2/track/alpine/gentle_diag_4.png differ diff --git a/resources/g2/track/alpine/gentle_diag_lift_1.png b/resources/g2/track/alpine/gentle_diag_lift_1.png new file mode 100644 index 0000000000..09764ec53f Binary files /dev/null and b/resources/g2/track/alpine/gentle_diag_lift_1.png differ diff --git a/resources/g2/track/alpine/gentle_diag_lift_2.png b/resources/g2/track/alpine/gentle_diag_lift_2.png new file mode 100644 index 0000000000..b5dbb00272 Binary files /dev/null and b/resources/g2/track/alpine/gentle_diag_lift_2.png differ diff --git a/resources/g2/track/alpine/gentle_diag_lift_3.png b/resources/g2/track/alpine/gentle_diag_lift_3.png new file mode 100644 index 0000000000..303419389a Binary files /dev/null and b/resources/g2/track/alpine/gentle_diag_lift_3.png differ diff --git a/resources/g2/track/alpine/gentle_diag_lift_4.png b/resources/g2/track/alpine/gentle_diag_lift_4.png new file mode 100644 index 0000000000..a9af3e108e Binary files /dev/null and b/resources/g2/track/alpine/gentle_diag_lift_4.png differ diff --git a/resources/g2/track/alpine/gentle_lift_1.png b/resources/g2/track/alpine/gentle_lift_1.png new file mode 100644 index 0000000000..3ee8ecc211 Binary files /dev/null and b/resources/g2/track/alpine/gentle_lift_1.png differ diff --git a/resources/g2/track/alpine/gentle_lift_2.png b/resources/g2/track/alpine/gentle_lift_2.png new file mode 100644 index 0000000000..f0a9d2c342 Binary files /dev/null and b/resources/g2/track/alpine/gentle_lift_2.png differ diff --git a/resources/g2/track/alpine/gentle_lift_3.png b/resources/g2/track/alpine/gentle_lift_3.png new file mode 100644 index 0000000000..5cc6129c1a Binary files /dev/null and b/resources/g2/track/alpine/gentle_lift_3.png differ diff --git a/resources/g2/track/alpine/gentle_lift_4.png b/resources/g2/track/alpine/gentle_lift_4.png new file mode 100644 index 0000000000..4cf047fb44 Binary files /dev/null and b/resources/g2/track/alpine/gentle_lift_4.png differ diff --git a/resources/g2/track/alpine/gentle_to_flat_up_diag_1.png b/resources/g2/track/alpine/gentle_to_flat_up_diag_1.png new file mode 100644 index 0000000000..a1a3a7afe7 Binary files /dev/null and b/resources/g2/track/alpine/gentle_to_flat_up_diag_1.png differ diff --git a/resources/g2/track/alpine/gentle_to_flat_up_diag_2.png b/resources/g2/track/alpine/gentle_to_flat_up_diag_2.png new file mode 100644 index 0000000000..6fcd8b729d Binary files /dev/null and b/resources/g2/track/alpine/gentle_to_flat_up_diag_2.png differ diff --git a/resources/g2/track/alpine/gentle_to_flat_up_diag_3.png b/resources/g2/track/alpine/gentle_to_flat_up_diag_3.png new file mode 100644 index 0000000000..4c13372143 Binary files /dev/null and b/resources/g2/track/alpine/gentle_to_flat_up_diag_3.png differ diff --git a/resources/g2/track/alpine/gentle_to_flat_up_diag_4.png b/resources/g2/track/alpine/gentle_to_flat_up_diag_4.png new file mode 100644 index 0000000000..de97a80134 Binary files /dev/null and b/resources/g2/track/alpine/gentle_to_flat_up_diag_4.png differ diff --git a/resources/g2/track/alpine/gentle_to_flat_up_diag_lift_1.png b/resources/g2/track/alpine/gentle_to_flat_up_diag_lift_1.png new file mode 100644 index 0000000000..0660ce5853 Binary files /dev/null and b/resources/g2/track/alpine/gentle_to_flat_up_diag_lift_1.png differ diff --git a/resources/g2/track/alpine/gentle_to_flat_up_diag_lift_2.png b/resources/g2/track/alpine/gentle_to_flat_up_diag_lift_2.png new file mode 100644 index 0000000000..8981616697 Binary files /dev/null and b/resources/g2/track/alpine/gentle_to_flat_up_diag_lift_2.png differ diff --git a/resources/g2/track/alpine/gentle_to_flat_up_diag_lift_3.png b/resources/g2/track/alpine/gentle_to_flat_up_diag_lift_3.png new file mode 100644 index 0000000000..3b4cb7e15c Binary files /dev/null and b/resources/g2/track/alpine/gentle_to_flat_up_diag_lift_3.png differ diff --git a/resources/g2/track/alpine/gentle_to_flat_up_diag_lift_4.png b/resources/g2/track/alpine/gentle_to_flat_up_diag_lift_4.png new file mode 100644 index 0000000000..8398d7273d Binary files /dev/null and b/resources/g2/track/alpine/gentle_to_flat_up_diag_lift_4.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_flat_1.png b/resources/g2/track/alpine/gentle_up_to_flat_1.png new file mode 100644 index 0000000000..1cc45d87b5 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_flat_1.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_flat_2.png b/resources/g2/track/alpine/gentle_up_to_flat_2.png new file mode 100644 index 0000000000..48426fee76 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_flat_2.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_flat_3.png b/resources/g2/track/alpine/gentle_up_to_flat_3.png new file mode 100644 index 0000000000..02fb8cd4f4 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_flat_3.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_flat_4.png b/resources/g2/track/alpine/gentle_up_to_flat_4.png new file mode 100644 index 0000000000..6207e5baaf Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_flat_4.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_flat_lift_1.png b/resources/g2/track/alpine/gentle_up_to_flat_lift_1.png new file mode 100644 index 0000000000..d66edbe47c Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_flat_lift_1.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_flat_lift_2.png b/resources/g2/track/alpine/gentle_up_to_flat_lift_2.png new file mode 100644 index 0000000000..88a0630531 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_flat_lift_2.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_flat_lift_3.png b/resources/g2/track/alpine/gentle_up_to_flat_lift_3.png new file mode 100644 index 0000000000..1d701c94e0 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_flat_lift_3.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_flat_lift_4.png b/resources/g2/track/alpine/gentle_up_to_flat_lift_4.png new file mode 100644 index 0000000000..3e05b6aeb0 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_flat_lift_4.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_left_bank_1_1.png b/resources/g2/track/alpine/gentle_up_to_left_bank_1_1.png new file mode 100644 index 0000000000..c152b6dec0 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_left_bank_1_1.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_left_bank_1_2.png b/resources/g2/track/alpine/gentle_up_to_left_bank_1_2.png new file mode 100644 index 0000000000..4014329bc0 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_left_bank_1_2.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_left_bank_2_1.png b/resources/g2/track/alpine/gentle_up_to_left_bank_2_1.png new file mode 100644 index 0000000000..3892697cfa Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_left_bank_2_1.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_left_bank_2_2.png b/resources/g2/track/alpine/gentle_up_to_left_bank_2_2.png new file mode 100644 index 0000000000..359c08828d Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_left_bank_2_2.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_left_bank_3.png b/resources/g2/track/alpine/gentle_up_to_left_bank_3.png new file mode 100644 index 0000000000..273b5556ab Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_left_bank_3.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_left_bank_4.png b/resources/g2/track/alpine/gentle_up_to_left_bank_4.png new file mode 100644 index 0000000000..9237688bd2 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_left_bank_4.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_left_bank_diag_1_1.png b/resources/g2/track/alpine/gentle_up_to_left_bank_diag_1_1.png new file mode 100644 index 0000000000..97868b4774 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_left_bank_diag_1_1.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_left_bank_diag_1_2.png b/resources/g2/track/alpine/gentle_up_to_left_bank_diag_1_2.png new file mode 100644 index 0000000000..063585cb85 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_left_bank_diag_1_2.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_left_bank_diag_2.png b/resources/g2/track/alpine/gentle_up_to_left_bank_diag_2.png new file mode 100644 index 0000000000..c54f9f1a19 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_left_bank_diag_2.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_left_bank_diag_3.png b/resources/g2/track/alpine/gentle_up_to_left_bank_diag_3.png new file mode 100644 index 0000000000..3b50256a7a Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_left_bank_diag_3.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_left_bank_diag_4.png b/resources/g2/track/alpine/gentle_up_to_left_bank_diag_4.png new file mode 100644 index 0000000000..d0c69863f5 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_left_bank_diag_4.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_right_bank_1.png b/resources/g2/track/alpine/gentle_up_to_right_bank_1.png new file mode 100644 index 0000000000..faf4357c7b Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_right_bank_1.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_right_bank_2.png b/resources/g2/track/alpine/gentle_up_to_right_bank_2.png new file mode 100644 index 0000000000..8eb3c1ebd3 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_right_bank_2.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_right_bank_3_1.png b/resources/g2/track/alpine/gentle_up_to_right_bank_3_1.png new file mode 100644 index 0000000000..22ef705509 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_right_bank_3_1.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_right_bank_3_2.png b/resources/g2/track/alpine/gentle_up_to_right_bank_3_2.png new file mode 100644 index 0000000000..03fd1d3966 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_right_bank_3_2.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_right_bank_4_1.png b/resources/g2/track/alpine/gentle_up_to_right_bank_4_1.png new file mode 100644 index 0000000000..6914ea1e2f Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_right_bank_4_1.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_right_bank_4_2.png b/resources/g2/track/alpine/gentle_up_to_right_bank_4_2.png new file mode 100644 index 0000000000..74f97ed66b Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_right_bank_4_2.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_right_bank_diag_1.png b/resources/g2/track/alpine/gentle_up_to_right_bank_diag_1.png new file mode 100644 index 0000000000..8e3e425f42 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_right_bank_diag_1.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_right_bank_diag_2.png b/resources/g2/track/alpine/gentle_up_to_right_bank_diag_2.png new file mode 100644 index 0000000000..157ce1a4ca Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_right_bank_diag_2.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_right_bank_diag_3_1.png b/resources/g2/track/alpine/gentle_up_to_right_bank_diag_3_1.png new file mode 100644 index 0000000000..4236e342e3 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_right_bank_diag_3_1.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_right_bank_diag_3_2.png b/resources/g2/track/alpine/gentle_up_to_right_bank_diag_3_2.png new file mode 100644 index 0000000000..e0525f7062 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_right_bank_diag_3_2.png differ diff --git a/resources/g2/track/alpine/gentle_up_to_right_bank_diag_4.png b/resources/g2/track/alpine/gentle_up_to_right_bank_diag_4.png new file mode 100644 index 0000000000..2018833806 Binary files /dev/null and b/resources/g2/track/alpine/gentle_up_to_right_bank_diag_4.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_1_1.png b/resources/g2/track/alpine/large_turn_left_to_diag_1_1.png new file mode 100644 index 0000000000..17deeff0d5 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_1_1.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_1_2.png b/resources/g2/track/alpine/large_turn_left_to_diag_1_2.png new file mode 100644 index 0000000000..161a927215 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_1_2.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_1_3.png b/resources/g2/track/alpine/large_turn_left_to_diag_1_3.png new file mode 100644 index 0000000000..f112a47716 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_1_3.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_1_4.png b/resources/g2/track/alpine/large_turn_left_to_diag_1_4.png new file mode 100644 index 0000000000..d41294e6b9 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_1_4.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_2_1.png b/resources/g2/track/alpine/large_turn_left_to_diag_2_1.png new file mode 100644 index 0000000000..79c2f64af6 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_2_1.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_2_2.png b/resources/g2/track/alpine/large_turn_left_to_diag_2_2.png new file mode 100644 index 0000000000..2ab5c3667f Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_2_2.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_2_3.png b/resources/g2/track/alpine/large_turn_left_to_diag_2_3.png new file mode 100644 index 0000000000..de7d82c9f4 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_2_3.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_2_4.png b/resources/g2/track/alpine/large_turn_left_to_diag_2_4.png new file mode 100644 index 0000000000..cdad1d62b7 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_2_4.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_3_1.png b/resources/g2/track/alpine/large_turn_left_to_diag_3_1.png new file mode 100644 index 0000000000..c699524b0a Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_3_1.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_3_2.png b/resources/g2/track/alpine/large_turn_left_to_diag_3_2.png new file mode 100644 index 0000000000..ccd767aa9f Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_3_2.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_3_3.png b/resources/g2/track/alpine/large_turn_left_to_diag_3_3.png new file mode 100644 index 0000000000..7b45066d79 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_3_3.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_3_4.png b/resources/g2/track/alpine/large_turn_left_to_diag_3_4.png new file mode 100644 index 0000000000..df8b19f8e6 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_3_4.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_4_1.png b/resources/g2/track/alpine/large_turn_left_to_diag_4_1.png new file mode 100644 index 0000000000..30511674e4 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_4_1.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_4_2.png b/resources/g2/track/alpine/large_turn_left_to_diag_4_2.png new file mode 100644 index 0000000000..abc2d99ec9 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_4_2.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_4_3.png b/resources/g2/track/alpine/large_turn_left_to_diag_4_3.png new file mode 100644 index 0000000000..824438a517 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_4_3.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_4_4.png b/resources/g2/track/alpine/large_turn_left_to_diag_4_4.png new file mode 100644 index 0000000000..85cc4ed881 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_4_4.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_1_1.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_1_1.png new file mode 100644 index 0000000000..f9447a2f3d Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_1_1.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_1_2.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_1_2.png new file mode 100644 index 0000000000..16a6814b40 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_1_2.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_1_3.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_1_3.png new file mode 100644 index 0000000000..35fe685409 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_1_3.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_1_4.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_1_4.png new file mode 100644 index 0000000000..356c79996d Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_1_4.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_2_1.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_2_1.png new file mode 100644 index 0000000000..363a8e3646 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_2_1.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_2_2.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_2_2.png new file mode 100644 index 0000000000..bd23ce2f28 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_2_2.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_2_3.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_2_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_2_3.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_2_4.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_2_4.png new file mode 100644 index 0000000000..d4aba2727c Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_2_4.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_3_1.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_3_1.png new file mode 100644 index 0000000000..7c88d76144 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_3_1.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_3_2.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_3_2.png new file mode 100644 index 0000000000..f81acf91c3 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_3_2.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_3_3.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_3_3.png new file mode 100644 index 0000000000..90217b3eff Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_3_3.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_3_4.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_3_4.png new file mode 100644 index 0000000000..ac381f68f7 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_3_4.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_4_1.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_4_1.png new file mode 100644 index 0000000000..24d4016c5c Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_4_1.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_4_2.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_4_2.png new file mode 100644 index 0000000000..e34e4de8b6 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_4_2.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_4_3.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_4_3.png new file mode 100644 index 0000000000..c787d2b447 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_4_3.png differ diff --git a/resources/g2/track/alpine/large_turn_left_to_diag_bank_4_4.png b/resources/g2/track/alpine/large_turn_left_to_diag_bank_4_4.png new file mode 100644 index 0000000000..ebbc588d3a Binary files /dev/null and b/resources/g2/track/alpine/large_turn_left_to_diag_bank_4_4.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_1_1.png b/resources/g2/track/alpine/large_turn_right_to_diag_1_1.png new file mode 100644 index 0000000000..7f9d40a920 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_1_1.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_1_2.png b/resources/g2/track/alpine/large_turn_right_to_diag_1_2.png new file mode 100644 index 0000000000..4f0da3be7e Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_1_2.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_1_3.png b/resources/g2/track/alpine/large_turn_right_to_diag_1_3.png new file mode 100644 index 0000000000..8ecc72ea94 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_1_3.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_1_4.png b/resources/g2/track/alpine/large_turn_right_to_diag_1_4.png new file mode 100644 index 0000000000..6f27f32a14 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_1_4.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_2_1.png b/resources/g2/track/alpine/large_turn_right_to_diag_2_1.png new file mode 100644 index 0000000000..1a60fd6787 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_2_1.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_2_2.png b/resources/g2/track/alpine/large_turn_right_to_diag_2_2.png new file mode 100644 index 0000000000..7ab96b9ad0 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_2_2.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_2_3.png b/resources/g2/track/alpine/large_turn_right_to_diag_2_3.png new file mode 100644 index 0000000000..614c478637 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_2_3.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_2_4.png b/resources/g2/track/alpine/large_turn_right_to_diag_2_4.png new file mode 100644 index 0000000000..96d3234757 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_2_4.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_3_1.png b/resources/g2/track/alpine/large_turn_right_to_diag_3_1.png new file mode 100644 index 0000000000..4320e4b193 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_3_1.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_3_2.png b/resources/g2/track/alpine/large_turn_right_to_diag_3_2.png new file mode 100644 index 0000000000..557e753776 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_3_2.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_3_3.png b/resources/g2/track/alpine/large_turn_right_to_diag_3_3.png new file mode 100644 index 0000000000..e9359fe9a6 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_3_3.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_3_4.png b/resources/g2/track/alpine/large_turn_right_to_diag_3_4.png new file mode 100644 index 0000000000..7be59850e5 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_3_4.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_4_1.png b/resources/g2/track/alpine/large_turn_right_to_diag_4_1.png new file mode 100644 index 0000000000..1f6542358a Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_4_1.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_4_2.png b/resources/g2/track/alpine/large_turn_right_to_diag_4_2.png new file mode 100644 index 0000000000..4fd4a4796a Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_4_2.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_4_3.png b/resources/g2/track/alpine/large_turn_right_to_diag_4_3.png new file mode 100644 index 0000000000..23e654fd17 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_4_3.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_4_4.png b/resources/g2/track/alpine/large_turn_right_to_diag_4_4.png new file mode 100644 index 0000000000..855031a863 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_4_4.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_1_1.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_1_1.png new file mode 100644 index 0000000000..b46f6d6ec0 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_1_1.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_1_2.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_1_2.png new file mode 100644 index 0000000000..49e2fce0fb Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_1_2.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_1_3.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_1_3.png new file mode 100644 index 0000000000..dbff2d254d Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_1_3.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_1_4.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_1_4.png new file mode 100644 index 0000000000..320bc00aad Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_1_4.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_2_1.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_2_1.png new file mode 100644 index 0000000000..53767d1b25 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_2_1.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_2_2.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_2_2.png new file mode 100644 index 0000000000..7c22932970 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_2_2.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_2_3.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_2_3.png new file mode 100644 index 0000000000..70b93377eb Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_2_3.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_2_4.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_2_4.png new file mode 100644 index 0000000000..7db3223900 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_2_4.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_3_1.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_3_1.png new file mode 100644 index 0000000000..305889e567 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_3_1.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_3_2.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_3_2.png new file mode 100644 index 0000000000..aa7e2b7a77 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_3_2.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_3_3.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_3_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_3_3.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_3_4.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_3_4.png new file mode 100644 index 0000000000..fa2d6ff8ea Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_3_4.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_4_1.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_4_1.png new file mode 100644 index 0000000000..3558ddf132 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_4_1.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_4_2.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_4_2.png new file mode 100644 index 0000000000..04af735874 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_4_2.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_4_3.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_4_3.png new file mode 100644 index 0000000000..8d0cf62f3a Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_4_3.png differ diff --git a/resources/g2/track/alpine/large_turn_right_to_diag_bank_4_4.png b/resources/g2/track/alpine/large_turn_right_to_diag_bank_4_4.png new file mode 100644 index 0000000000..12d0ac8a57 Binary files /dev/null and b/resources/g2/track/alpine/large_turn_right_to_diag_bank_4_4.png differ diff --git a/resources/g2/track/alpine/left_bank_1.png b/resources/g2/track/alpine/left_bank_1.png new file mode 100644 index 0000000000..9aba7aa64a Binary files /dev/null and b/resources/g2/track/alpine/left_bank_1.png differ diff --git a/resources/g2/track/alpine/left_bank_2.png b/resources/g2/track/alpine/left_bank_2.png new file mode 100644 index 0000000000..49e268d3ab Binary files /dev/null and b/resources/g2/track/alpine/left_bank_2.png differ diff --git a/resources/g2/track/alpine/left_bank_3.png b/resources/g2/track/alpine/left_bank_3.png new file mode 100644 index 0000000000..dfff4af61e Binary files /dev/null and b/resources/g2/track/alpine/left_bank_3.png differ diff --git a/resources/g2/track/alpine/left_bank_4.png b/resources/g2/track/alpine/left_bank_4.png new file mode 100644 index 0000000000..a9d9cb1de9 Binary files /dev/null and b/resources/g2/track/alpine/left_bank_4.png differ diff --git a/resources/g2/track/alpine/left_bank_diag_1.png b/resources/g2/track/alpine/left_bank_diag_1.png new file mode 100644 index 0000000000..8f2bd3cac4 Binary files /dev/null and b/resources/g2/track/alpine/left_bank_diag_1.png differ diff --git a/resources/g2/track/alpine/left_bank_diag_2.png b/resources/g2/track/alpine/left_bank_diag_2.png new file mode 100644 index 0000000000..a5f9a07fe7 Binary files /dev/null and b/resources/g2/track/alpine/left_bank_diag_2.png differ diff --git a/resources/g2/track/alpine/left_bank_diag_3.png b/resources/g2/track/alpine/left_bank_diag_3.png new file mode 100644 index 0000000000..82d45ca62c Binary files /dev/null and b/resources/g2/track/alpine/left_bank_diag_3.png differ diff --git a/resources/g2/track/alpine/left_bank_diag_4.png b/resources/g2/track/alpine/left_bank_diag_4.png new file mode 100644 index 0000000000..ddd162912d Binary files /dev/null and b/resources/g2/track/alpine/left_bank_diag_4.png differ diff --git a/resources/g2/track/alpine/left_bank_to_gentle_up_1_1.png b/resources/g2/track/alpine/left_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..4dafe2d827 Binary files /dev/null and b/resources/g2/track/alpine/left_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/alpine/left_bank_to_gentle_up_1_2.png b/resources/g2/track/alpine/left_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..4a2154d7f4 Binary files /dev/null and b/resources/g2/track/alpine/left_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/alpine/left_bank_to_gentle_up_2_1.png b/resources/g2/track/alpine/left_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..c201e7ea02 Binary files /dev/null and b/resources/g2/track/alpine/left_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/alpine/left_bank_to_gentle_up_2_2.png b/resources/g2/track/alpine/left_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..e774ad2fa0 Binary files /dev/null and b/resources/g2/track/alpine/left_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/alpine/left_bank_to_gentle_up_3.png b/resources/g2/track/alpine/left_bank_to_gentle_up_3.png new file mode 100644 index 0000000000..a879bd03fa Binary files /dev/null and b/resources/g2/track/alpine/left_bank_to_gentle_up_3.png differ diff --git a/resources/g2/track/alpine/left_bank_to_gentle_up_4.png b/resources/g2/track/alpine/left_bank_to_gentle_up_4.png new file mode 100644 index 0000000000..338fc0f856 Binary files /dev/null and b/resources/g2/track/alpine/left_bank_to_gentle_up_4.png differ diff --git a/resources/g2/track/alpine/left_bank_to_gentle_up_diag_1_1.png b/resources/g2/track/alpine/left_bank_to_gentle_up_diag_1_1.png new file mode 100644 index 0000000000..33545835be Binary files /dev/null and b/resources/g2/track/alpine/left_bank_to_gentle_up_diag_1_1.png differ diff --git a/resources/g2/track/alpine/left_bank_to_gentle_up_diag_1_2.png b/resources/g2/track/alpine/left_bank_to_gentle_up_diag_1_2.png new file mode 100644 index 0000000000..79ccde6c1e Binary files /dev/null and b/resources/g2/track/alpine/left_bank_to_gentle_up_diag_1_2.png differ diff --git a/resources/g2/track/alpine/left_bank_to_gentle_up_diag_2.png b/resources/g2/track/alpine/left_bank_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..9a4d35961b Binary files /dev/null and b/resources/g2/track/alpine/left_bank_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/alpine/left_bank_to_gentle_up_diag_3.png b/resources/g2/track/alpine/left_bank_to_gentle_up_diag_3.png new file mode 100644 index 0000000000..5c3f069e96 Binary files /dev/null and b/resources/g2/track/alpine/left_bank_to_gentle_up_diag_3.png differ diff --git a/resources/g2/track/alpine/left_bank_to_gentle_up_diag_4.png b/resources/g2/track/alpine/left_bank_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..a5c720588c Binary files /dev/null and b/resources/g2/track/alpine/left_bank_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_1_1.png b/resources/g2/track/alpine/medium_helix_left_up_1_1.png new file mode 100644 index 0000000000..eab5d42496 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_1_1.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_1_2.png b/resources/g2/track/alpine/medium_helix_left_up_1_2.png new file mode 100644 index 0000000000..7ec5e3ea08 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_1_2.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_1_3.png b/resources/g2/track/alpine/medium_helix_left_up_1_3.png new file mode 100644 index 0000000000..e78b873acd Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_1_3.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_1_4.png b/resources/g2/track/alpine/medium_helix_left_up_1_4.png new file mode 100644 index 0000000000..df88f382a8 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_1_4.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_1_5.png b/resources/g2/track/alpine/medium_helix_left_up_1_5.png new file mode 100644 index 0000000000..3388770739 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_1_5.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_1_6.png b/resources/g2/track/alpine/medium_helix_left_up_1_6.png new file mode 100644 index 0000000000..63eb5ebd2a Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_1_6.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_2_1.png b/resources/g2/track/alpine/medium_helix_left_up_2_1.png new file mode 100644 index 0000000000..1b8724c15f Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_2_1.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_2_2.png b/resources/g2/track/alpine/medium_helix_left_up_2_2.png new file mode 100644 index 0000000000..46e1b42e16 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_2_2.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_2_3.png b/resources/g2/track/alpine/medium_helix_left_up_2_3.png new file mode 100644 index 0000000000..08149c1101 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_2_3.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_2_4.png b/resources/g2/track/alpine/medium_helix_left_up_2_4.png new file mode 100644 index 0000000000..4e2a5f0cae Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_2_4.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_2_5.png b/resources/g2/track/alpine/medium_helix_left_up_2_5.png new file mode 100644 index 0000000000..99226a3784 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_2_5.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_3_1.png b/resources/g2/track/alpine/medium_helix_left_up_3_1.png new file mode 100644 index 0000000000..33a2f2977b Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_3_1.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_3_2.png b/resources/g2/track/alpine/medium_helix_left_up_3_2.png new file mode 100644 index 0000000000..31e8713362 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_3_2.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_3_3.png b/resources/g2/track/alpine/medium_helix_left_up_3_3.png new file mode 100644 index 0000000000..23facc68eb Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_3_3.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_3_4.png b/resources/g2/track/alpine/medium_helix_left_up_3_4.png new file mode 100644 index 0000000000..3cdf2a63aa Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_3_4.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_3_5.png b/resources/g2/track/alpine/medium_helix_left_up_3_5.png new file mode 100644 index 0000000000..f2eb80dd68 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_3_5.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_3_6.png b/resources/g2/track/alpine/medium_helix_left_up_3_6.png new file mode 100644 index 0000000000..d536658f82 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_3_6.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_4_1.png b/resources/g2/track/alpine/medium_helix_left_up_4_1.png new file mode 100644 index 0000000000..124804d8d6 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_4_1.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_4_2.png b/resources/g2/track/alpine/medium_helix_left_up_4_2.png new file mode 100644 index 0000000000..1c4b304c3c Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_4_2.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_4_3.png b/resources/g2/track/alpine/medium_helix_left_up_4_3.png new file mode 100644 index 0000000000..6f32a4470f Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_4_3.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_4_4.png b/resources/g2/track/alpine/medium_helix_left_up_4_4.png new file mode 100644 index 0000000000..1bed2166c6 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_4_4.png differ diff --git a/resources/g2/track/alpine/medium_helix_left_up_4_5.png b/resources/g2/track/alpine/medium_helix_left_up_4_5.png new file mode 100644 index 0000000000..6e883c7d95 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_left_up_4_5.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_1_1.png b/resources/g2/track/alpine/medium_helix_right_up_1_1.png new file mode 100644 index 0000000000..ebff2e0e8e Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_1_1.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_1_2.png b/resources/g2/track/alpine/medium_helix_right_up_1_2.png new file mode 100644 index 0000000000..1e4de95ca8 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_1_2.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_1_3.png b/resources/g2/track/alpine/medium_helix_right_up_1_3.png new file mode 100644 index 0000000000..61be612814 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_1_3.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_1_4.png b/resources/g2/track/alpine/medium_helix_right_up_1_4.png new file mode 100644 index 0000000000..e68709b9f3 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_1_4.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_1_5.png b/resources/g2/track/alpine/medium_helix_right_up_1_5.png new file mode 100644 index 0000000000..4a816d7b46 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_1_5.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_2_1.png b/resources/g2/track/alpine/medium_helix_right_up_2_1.png new file mode 100644 index 0000000000..c276c6cac4 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_2_1.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_2_2.png b/resources/g2/track/alpine/medium_helix_right_up_2_2.png new file mode 100644 index 0000000000..6a45a1f2c2 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_2_2.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_2_3.png b/resources/g2/track/alpine/medium_helix_right_up_2_3.png new file mode 100644 index 0000000000..e7a7776cbc Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_2_3.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_2_4.png b/resources/g2/track/alpine/medium_helix_right_up_2_4.png new file mode 100644 index 0000000000..ec2f03176a Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_2_4.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_2_5.png b/resources/g2/track/alpine/medium_helix_right_up_2_5.png new file mode 100644 index 0000000000..2ea41812d7 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_2_5.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_2_6.png b/resources/g2/track/alpine/medium_helix_right_up_2_6.png new file mode 100644 index 0000000000..9215d09f9d Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_2_6.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_3_1.png b/resources/g2/track/alpine/medium_helix_right_up_3_1.png new file mode 100644 index 0000000000..950ad5363a Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_3_1.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_3_2.png b/resources/g2/track/alpine/medium_helix_right_up_3_2.png new file mode 100644 index 0000000000..53f4cf2104 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_3_2.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_3_3.png b/resources/g2/track/alpine/medium_helix_right_up_3_3.png new file mode 100644 index 0000000000..82bdbd5ee2 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_3_3.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_3_4.png b/resources/g2/track/alpine/medium_helix_right_up_3_4.png new file mode 100644 index 0000000000..f491d49316 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_3_4.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_3_5.png b/resources/g2/track/alpine/medium_helix_right_up_3_5.png new file mode 100644 index 0000000000..ac258484e1 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_3_5.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_4_1.png b/resources/g2/track/alpine/medium_helix_right_up_4_1.png new file mode 100644 index 0000000000..9fff2c0082 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_4_1.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_4_2.png b/resources/g2/track/alpine/medium_helix_right_up_4_2.png new file mode 100644 index 0000000000..02e0b3c9f2 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_4_2.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_4_3.png b/resources/g2/track/alpine/medium_helix_right_up_4_3.png new file mode 100644 index 0000000000..8500f1863b Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_4_3.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_4_4.png b/resources/g2/track/alpine/medium_helix_right_up_4_4.png new file mode 100644 index 0000000000..e0d6b74901 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_4_4.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_4_5.png b/resources/g2/track/alpine/medium_helix_right_up_4_5.png new file mode 100644 index 0000000000..167994d668 Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_4_5.png differ diff --git a/resources/g2/track/alpine/medium_helix_right_up_4_6.png b/resources/g2/track/alpine/medium_helix_right_up_4_6.png new file mode 100644 index 0000000000..52bab07c5f Binary files /dev/null and b/resources/g2/track/alpine/medium_helix_right_up_4_6.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_1_1.png b/resources/g2/track/alpine/medium_turn_left_1_1.png new file mode 100644 index 0000000000..86cd4f3e88 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_1_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_1_2.png b/resources/g2/track/alpine/medium_turn_left_1_2.png new file mode 100644 index 0000000000..c69e9bfe27 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_1_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_1_3.png b/resources/g2/track/alpine/medium_turn_left_1_3.png new file mode 100644 index 0000000000..d95b93f088 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_1_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_1_4.png b/resources/g2/track/alpine/medium_turn_left_1_4.png new file mode 100644 index 0000000000..901d71514d Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_1_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_1_5.png b/resources/g2/track/alpine/medium_turn_left_1_5.png new file mode 100644 index 0000000000..5d4678e9ed Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_1_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_2_1.png b/resources/g2/track/alpine/medium_turn_left_2_1.png new file mode 100644 index 0000000000..eea7e82bee Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_2_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_2_2.png b/resources/g2/track/alpine/medium_turn_left_2_2.png new file mode 100644 index 0000000000..5b7c8dadf2 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_2_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_2_3.png b/resources/g2/track/alpine/medium_turn_left_2_3.png new file mode 100644 index 0000000000..d7440015a5 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_2_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_2_4.png b/resources/g2/track/alpine/medium_turn_left_2_4.png new file mode 100644 index 0000000000..572da8c2b3 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_2_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_2_5.png b/resources/g2/track/alpine/medium_turn_left_2_5.png new file mode 100644 index 0000000000..199341c71f Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_2_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_3_1.png b/resources/g2/track/alpine/medium_turn_left_3_1.png new file mode 100644 index 0000000000..06ee0adfb5 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_3_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_3_2.png b/resources/g2/track/alpine/medium_turn_left_3_2.png new file mode 100644 index 0000000000..2ac1005347 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_3_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_3_3.png b/resources/g2/track/alpine/medium_turn_left_3_3.png new file mode 100644 index 0000000000..6bd162546a Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_3_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_3_4.png b/resources/g2/track/alpine/medium_turn_left_3_4.png new file mode 100644 index 0000000000..dc542ce912 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_3_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_3_5.png b/resources/g2/track/alpine/medium_turn_left_3_5.png new file mode 100644 index 0000000000..39a4404fbf Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_3_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_4_1.png b/resources/g2/track/alpine/medium_turn_left_4_1.png new file mode 100644 index 0000000000..80e7d583c6 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_4_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_4_2.png b/resources/g2/track/alpine/medium_turn_left_4_2.png new file mode 100644 index 0000000000..dfe1dfc325 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_4_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_4_3.png b/resources/g2/track/alpine/medium_turn_left_4_3.png new file mode 100644 index 0000000000..b38b42a642 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_4_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_4_4.png b/resources/g2/track/alpine/medium_turn_left_4_4.png new file mode 100644 index 0000000000..f9769e67fa Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_4_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_4_5.png b/resources/g2/track/alpine/medium_turn_left_4_5.png new file mode 100644 index 0000000000..df299bb51b Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_4_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_1_1.png b/resources/g2/track/alpine/medium_turn_left_bank_1_1.png new file mode 100644 index 0000000000..685ce4a539 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_1_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_1_2.png b/resources/g2/track/alpine/medium_turn_left_bank_1_2.png new file mode 100644 index 0000000000..f8cd9f75fb Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_1_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_1_3.png b/resources/g2/track/alpine/medium_turn_left_bank_1_3.png new file mode 100644 index 0000000000..1f426e8f31 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_1_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_1_4.png b/resources/g2/track/alpine/medium_turn_left_bank_1_4.png new file mode 100644 index 0000000000..49bb0b48e9 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_1_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_1_5.png b/resources/g2/track/alpine/medium_turn_left_bank_1_5.png new file mode 100644 index 0000000000..a762111b35 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_1_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_1_6.png b/resources/g2/track/alpine/medium_turn_left_bank_1_6.png new file mode 100644 index 0000000000..1a998f000c Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_1_6.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_2_1.png b/resources/g2/track/alpine/medium_turn_left_bank_2_1.png new file mode 100644 index 0000000000..8f4324c4b8 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_2_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_2_2.png b/resources/g2/track/alpine/medium_turn_left_bank_2_2.png new file mode 100644 index 0000000000..26f8712af1 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_2_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_2_3.png b/resources/g2/track/alpine/medium_turn_left_bank_2_3.png new file mode 100644 index 0000000000..faf8f3bb43 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_2_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_2_4.png b/resources/g2/track/alpine/medium_turn_left_bank_2_4.png new file mode 100644 index 0000000000..6eebee2f3e Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_2_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_2_5.png b/resources/g2/track/alpine/medium_turn_left_bank_2_5.png new file mode 100644 index 0000000000..356cb2ddcc Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_2_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_3_1.png b/resources/g2/track/alpine/medium_turn_left_bank_3_1.png new file mode 100644 index 0000000000..ba0efb16f9 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_3_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_3_2.png b/resources/g2/track/alpine/medium_turn_left_bank_3_2.png new file mode 100644 index 0000000000..f046362f85 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_3_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_3_3.png b/resources/g2/track/alpine/medium_turn_left_bank_3_3.png new file mode 100644 index 0000000000..19e10f3a0f Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_3_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_3_4.png b/resources/g2/track/alpine/medium_turn_left_bank_3_4.png new file mode 100644 index 0000000000..89a9566de1 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_3_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_3_5.png b/resources/g2/track/alpine/medium_turn_left_bank_3_5.png new file mode 100644 index 0000000000..eb18256b84 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_3_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_3_6.png b/resources/g2/track/alpine/medium_turn_left_bank_3_6.png new file mode 100644 index 0000000000..5a3057ca8c Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_3_6.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_4_1.png b/resources/g2/track/alpine/medium_turn_left_bank_4_1.png new file mode 100644 index 0000000000..129083de7f Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_4_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_4_2.png b/resources/g2/track/alpine/medium_turn_left_bank_4_2.png new file mode 100644 index 0000000000..1e351cdbc4 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_4_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_4_3.png b/resources/g2/track/alpine/medium_turn_left_bank_4_3.png new file mode 100644 index 0000000000..0285297e34 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_4_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_4_4.png b/resources/g2/track/alpine/medium_turn_left_bank_4_4.png new file mode 100644 index 0000000000..fccbb89dac Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_4_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_bank_4_5.png b/resources/g2/track/alpine/medium_turn_left_bank_4_5.png new file mode 100644 index 0000000000..be124aa67a Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_bank_4_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_1_1.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_1_1.png new file mode 100644 index 0000000000..e383842aba Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_1_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_1_2.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_1_2.png new file mode 100644 index 0000000000..8322df4fd4 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_1_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_1_3.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_1_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_1_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_1_4.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_1_4.png new file mode 100644 index 0000000000..49bfbc4e6c Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_1_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_1_5.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_1_5.png new file mode 100644 index 0000000000..e6605d73be Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_1_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_2_1.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_2_1.png new file mode 100644 index 0000000000..9f33073334 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_2_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_2_2.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_2_2.png new file mode 100644 index 0000000000..13790c89bc Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_2_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_2_3.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_2_3.png new file mode 100644 index 0000000000..7f7acac0f0 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_2_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_2_4.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_2_4.png new file mode 100644 index 0000000000..95614f7fe5 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_2_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_2_5.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_2_5.png new file mode 100644 index 0000000000..7d20fbddbc Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_2_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_3_1.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_3_1.png new file mode 100644 index 0000000000..a24a8f119d Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_3_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_3_2.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_3_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_3_3.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_3_3.png new file mode 100644 index 0000000000..885f8216a2 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_3_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_3_4.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_3_4.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_3_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_3_5.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_3_5.png new file mode 100644 index 0000000000..d168751d5d Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_3_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_4_1.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_4_1.png new file mode 100644 index 0000000000..5a835edf1a Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_4_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_4_2.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_4_2.png new file mode 100644 index 0000000000..9a85901e1c Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_4_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_4_3.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_4_3.png new file mode 100644 index 0000000000..8c0d5fad30 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_4_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_4_4.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_4_4.png new file mode 100644 index 0000000000..f1832e75c5 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_4_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_left_gentle_up_4_5.png b/resources/g2/track/alpine/medium_turn_left_gentle_up_4_5.png new file mode 100644 index 0000000000..9d9d178a0a Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_left_gentle_up_4_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_1_1.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_1_1.png new file mode 100644 index 0000000000..95a2d5f7ee Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_1_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_1_2.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_1_2.png new file mode 100644 index 0000000000..f38996ad01 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_1_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_1_3.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_1_3.png new file mode 100644 index 0000000000..7ae89debb2 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_1_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_1_4.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_1_4.png new file mode 100644 index 0000000000..0ae7c6430c Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_1_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_1_5.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_1_5.png new file mode 100644 index 0000000000..057d4182f2 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_1_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_2_1.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_2_1.png new file mode 100644 index 0000000000..23e0c00d96 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_2_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_2_2.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_2_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_2_3.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_2_3.png new file mode 100644 index 0000000000..df891c1802 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_2_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_2_4.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_2_4.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_2_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_2_5.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_2_5.png new file mode 100644 index 0000000000..37c392fbfc Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_2_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_3_1.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_3_1.png new file mode 100644 index 0000000000..08a1d546c6 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_3_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_3_2.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_3_2.png new file mode 100644 index 0000000000..9fc0ac1058 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_3_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_3_3.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_3_3.png new file mode 100644 index 0000000000..68b318531c Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_3_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_3_4.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_3_4.png new file mode 100644 index 0000000000..fc30f58df0 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_3_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_3_5.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_3_5.png new file mode 100644 index 0000000000..5e60d088ea Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_3_5.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_4_1.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_4_1.png new file mode 100644 index 0000000000..6ad2c74772 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_4_1.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_4_2.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_4_2.png new file mode 100644 index 0000000000..2a1b922dc3 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_4_2.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_4_3.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_4_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_4_3.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_4_4.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_4_4.png new file mode 100644 index 0000000000..c25e465aed Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_4_4.png differ diff --git a/resources/g2/track/alpine/medium_turn_right_gentle_up_4_5.png b/resources/g2/track/alpine/medium_turn_right_gentle_up_4_5.png new file mode 100644 index 0000000000..03c36182ed Binary files /dev/null and b/resources/g2/track/alpine/medium_turn_right_gentle_up_4_5.png differ diff --git a/resources/g2/track/alpine/preview_support.png b/resources/g2/track/alpine/preview_support.png new file mode 100644 index 0000000000..ce5c863892 Binary files /dev/null and b/resources/g2/track/alpine/preview_support.png differ diff --git a/resources/g2/track/alpine/preview_track.png b/resources/g2/track/alpine/preview_track.png new file mode 100644 index 0000000000..3529af073c Binary files /dev/null and b/resources/g2/track/alpine/preview_track.png differ diff --git a/resources/g2/track/alpine/right_bank_to_gentle_up_1.png b/resources/g2/track/alpine/right_bank_to_gentle_up_1.png new file mode 100644 index 0000000000..497ac705fb Binary files /dev/null and b/resources/g2/track/alpine/right_bank_to_gentle_up_1.png differ diff --git a/resources/g2/track/alpine/right_bank_to_gentle_up_2.png b/resources/g2/track/alpine/right_bank_to_gentle_up_2.png new file mode 100644 index 0000000000..a0a03245e3 Binary files /dev/null and b/resources/g2/track/alpine/right_bank_to_gentle_up_2.png differ diff --git a/resources/g2/track/alpine/right_bank_to_gentle_up_3_1.png b/resources/g2/track/alpine/right_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..4d445b8e77 Binary files /dev/null and b/resources/g2/track/alpine/right_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/alpine/right_bank_to_gentle_up_3_2.png b/resources/g2/track/alpine/right_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..6e763d9539 Binary files /dev/null and b/resources/g2/track/alpine/right_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/alpine/right_bank_to_gentle_up_4_1.png b/resources/g2/track/alpine/right_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..059dac69e4 Binary files /dev/null and b/resources/g2/track/alpine/right_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/alpine/right_bank_to_gentle_up_4_2.png b/resources/g2/track/alpine/right_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..28d21432c8 Binary files /dev/null and b/resources/g2/track/alpine/right_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/alpine/right_bank_to_gentle_up_diag_1.png b/resources/g2/track/alpine/right_bank_to_gentle_up_diag_1.png new file mode 100644 index 0000000000..8eb958c807 Binary files /dev/null and b/resources/g2/track/alpine/right_bank_to_gentle_up_diag_1.png differ diff --git a/resources/g2/track/alpine/right_bank_to_gentle_up_diag_2.png b/resources/g2/track/alpine/right_bank_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..46b3e0c7de Binary files /dev/null and b/resources/g2/track/alpine/right_bank_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/alpine/right_bank_to_gentle_up_diag_3_1.png b/resources/g2/track/alpine/right_bank_to_gentle_up_diag_3_1.png new file mode 100644 index 0000000000..b7a8093464 Binary files /dev/null and b/resources/g2/track/alpine/right_bank_to_gentle_up_diag_3_1.png differ diff --git a/resources/g2/track/alpine/right_bank_to_gentle_up_diag_3_2.png b/resources/g2/track/alpine/right_bank_to_gentle_up_diag_3_2.png new file mode 100644 index 0000000000..9a76056ee3 Binary files /dev/null and b/resources/g2/track/alpine/right_bank_to_gentle_up_diag_3_2.png differ diff --git a/resources/g2/track/alpine/right_bank_to_gentle_up_diag_4.png b/resources/g2/track/alpine/right_bank_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..6340650d0b Binary files /dev/null and b/resources/g2/track/alpine/right_bank_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/alpine/s_bend_left_1_1.png b/resources/g2/track/alpine/s_bend_left_1_1.png new file mode 100644 index 0000000000..9f39005edf Binary files /dev/null and b/resources/g2/track/alpine/s_bend_left_1_1.png differ diff --git a/resources/g2/track/alpine/s_bend_left_1_2.png b/resources/g2/track/alpine/s_bend_left_1_2.png new file mode 100644 index 0000000000..ec3b67c796 Binary files /dev/null and b/resources/g2/track/alpine/s_bend_left_1_2.png differ diff --git a/resources/g2/track/alpine/s_bend_left_1_3.png b/resources/g2/track/alpine/s_bend_left_1_3.png new file mode 100644 index 0000000000..5db0c3ef32 Binary files /dev/null and b/resources/g2/track/alpine/s_bend_left_1_3.png differ diff --git a/resources/g2/track/alpine/s_bend_left_1_4.png b/resources/g2/track/alpine/s_bend_left_1_4.png new file mode 100644 index 0000000000..ecf6e7662c Binary files /dev/null and b/resources/g2/track/alpine/s_bend_left_1_4.png differ diff --git a/resources/g2/track/alpine/s_bend_left_2_1.png b/resources/g2/track/alpine/s_bend_left_2_1.png new file mode 100644 index 0000000000..0d0cd838c5 Binary files /dev/null and b/resources/g2/track/alpine/s_bend_left_2_1.png differ diff --git a/resources/g2/track/alpine/s_bend_left_2_2.png b/resources/g2/track/alpine/s_bend_left_2_2.png new file mode 100644 index 0000000000..15b4850f1d Binary files /dev/null and b/resources/g2/track/alpine/s_bend_left_2_2.png differ diff --git a/resources/g2/track/alpine/s_bend_left_2_3.png b/resources/g2/track/alpine/s_bend_left_2_3.png new file mode 100644 index 0000000000..3bb27e7bbf Binary files /dev/null and b/resources/g2/track/alpine/s_bend_left_2_3.png differ diff --git a/resources/g2/track/alpine/s_bend_left_2_4.png b/resources/g2/track/alpine/s_bend_left_2_4.png new file mode 100644 index 0000000000..6225ed0351 Binary files /dev/null and b/resources/g2/track/alpine/s_bend_left_2_4.png differ diff --git a/resources/g2/track/alpine/s_bend_right_1_1.png b/resources/g2/track/alpine/s_bend_right_1_1.png new file mode 100644 index 0000000000..ad073d902d Binary files /dev/null and b/resources/g2/track/alpine/s_bend_right_1_1.png differ diff --git a/resources/g2/track/alpine/s_bend_right_1_2.png b/resources/g2/track/alpine/s_bend_right_1_2.png new file mode 100644 index 0000000000..f62aabcacd Binary files /dev/null and b/resources/g2/track/alpine/s_bend_right_1_2.png differ diff --git a/resources/g2/track/alpine/s_bend_right_1_3.png b/resources/g2/track/alpine/s_bend_right_1_3.png new file mode 100644 index 0000000000..c8fd6e5583 Binary files /dev/null and b/resources/g2/track/alpine/s_bend_right_1_3.png differ diff --git a/resources/g2/track/alpine/s_bend_right_1_4.png b/resources/g2/track/alpine/s_bend_right_1_4.png new file mode 100644 index 0000000000..c2917e938a Binary files /dev/null and b/resources/g2/track/alpine/s_bend_right_1_4.png differ diff --git a/resources/g2/track/alpine/s_bend_right_2_1.png b/resources/g2/track/alpine/s_bend_right_2_1.png new file mode 100644 index 0000000000..90be85d757 Binary files /dev/null and b/resources/g2/track/alpine/s_bend_right_2_1.png differ diff --git a/resources/g2/track/alpine/s_bend_right_2_2.png b/resources/g2/track/alpine/s_bend_right_2_2.png new file mode 100644 index 0000000000..913e09243f Binary files /dev/null and b/resources/g2/track/alpine/s_bend_right_2_2.png differ diff --git a/resources/g2/track/alpine/s_bend_right_2_3.png b/resources/g2/track/alpine/s_bend_right_2_3.png new file mode 100644 index 0000000000..24b598adf8 Binary files /dev/null and b/resources/g2/track/alpine/s_bend_right_2_3.png differ diff --git a/resources/g2/track/alpine/s_bend_right_2_4.png b/resources/g2/track/alpine/s_bend_right_2_4.png new file mode 100644 index 0000000000..98eb05bc7c Binary files /dev/null and b/resources/g2/track/alpine/s_bend_right_2_4.png differ diff --git a/resources/g2/track/alpine/small_helix_left_up_1_1.png b/resources/g2/track/alpine/small_helix_left_up_1_1.png new file mode 100644 index 0000000000..7dfef2262d Binary files /dev/null and b/resources/g2/track/alpine/small_helix_left_up_1_1.png differ diff --git a/resources/g2/track/alpine/small_helix_left_up_1_2.png b/resources/g2/track/alpine/small_helix_left_up_1_2.png new file mode 100644 index 0000000000..109ce45927 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_left_up_1_2.png differ diff --git a/resources/g2/track/alpine/small_helix_left_up_1_3.png b/resources/g2/track/alpine/small_helix_left_up_1_3.png new file mode 100644 index 0000000000..02e7101dcd Binary files /dev/null and b/resources/g2/track/alpine/small_helix_left_up_1_3.png differ diff --git a/resources/g2/track/alpine/small_helix_left_up_1_4.png b/resources/g2/track/alpine/small_helix_left_up_1_4.png new file mode 100644 index 0000000000..640605a3ab Binary files /dev/null and b/resources/g2/track/alpine/small_helix_left_up_1_4.png differ diff --git a/resources/g2/track/alpine/small_helix_left_up_2_1.png b/resources/g2/track/alpine/small_helix_left_up_2_1.png new file mode 100644 index 0000000000..654f8d33ec Binary files /dev/null and b/resources/g2/track/alpine/small_helix_left_up_2_1.png differ diff --git a/resources/g2/track/alpine/small_helix_left_up_2_2.png b/resources/g2/track/alpine/small_helix_left_up_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_left_up_2_2.png differ diff --git a/resources/g2/track/alpine/small_helix_left_up_2_3.png b/resources/g2/track/alpine/small_helix_left_up_2_3.png new file mode 100644 index 0000000000..d9a6563657 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_left_up_2_3.png differ diff --git a/resources/g2/track/alpine/small_helix_left_up_3_1.png b/resources/g2/track/alpine/small_helix_left_up_3_1.png new file mode 100644 index 0000000000..e8b755813c Binary files /dev/null and b/resources/g2/track/alpine/small_helix_left_up_3_1.png differ diff --git a/resources/g2/track/alpine/small_helix_left_up_3_2.png b/resources/g2/track/alpine/small_helix_left_up_3_2.png new file mode 100644 index 0000000000..84e070b6c2 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_left_up_3_2.png differ diff --git a/resources/g2/track/alpine/small_helix_left_up_3_3.png b/resources/g2/track/alpine/small_helix_left_up_3_3.png new file mode 100644 index 0000000000..fbeec21fc3 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_left_up_3_3.png differ diff --git a/resources/g2/track/alpine/small_helix_left_up_3_4.png b/resources/g2/track/alpine/small_helix_left_up_3_4.png new file mode 100644 index 0000000000..81760da542 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_left_up_3_4.png differ diff --git a/resources/g2/track/alpine/small_helix_left_up_4_1.png b/resources/g2/track/alpine/small_helix_left_up_4_1.png new file mode 100644 index 0000000000..a2ace9f1e2 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_left_up_4_1.png differ diff --git a/resources/g2/track/alpine/small_helix_left_up_4_2.png b/resources/g2/track/alpine/small_helix_left_up_4_2.png new file mode 100644 index 0000000000..c15e7f4964 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_left_up_4_2.png differ diff --git a/resources/g2/track/alpine/small_helix_left_up_4_3.png b/resources/g2/track/alpine/small_helix_left_up_4_3.png new file mode 100644 index 0000000000..c9f1de3a36 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_left_up_4_3.png differ diff --git a/resources/g2/track/alpine/small_helix_right_up_1_1.png b/resources/g2/track/alpine/small_helix_right_up_1_1.png new file mode 100644 index 0000000000..204551fcb4 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_right_up_1_1.png differ diff --git a/resources/g2/track/alpine/small_helix_right_up_1_2.png b/resources/g2/track/alpine/small_helix_right_up_1_2.png new file mode 100644 index 0000000000..601312faa1 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_right_up_1_2.png differ diff --git a/resources/g2/track/alpine/small_helix_right_up_1_3.png b/resources/g2/track/alpine/small_helix_right_up_1_3.png new file mode 100644 index 0000000000..eecddaba46 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_right_up_1_3.png differ diff --git a/resources/g2/track/alpine/small_helix_right_up_2_1.png b/resources/g2/track/alpine/small_helix_right_up_2_1.png new file mode 100644 index 0000000000..5032190573 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_right_up_2_1.png differ diff --git a/resources/g2/track/alpine/small_helix_right_up_2_2.png b/resources/g2/track/alpine/small_helix_right_up_2_2.png new file mode 100644 index 0000000000..dc7f53f44c Binary files /dev/null and b/resources/g2/track/alpine/small_helix_right_up_2_2.png differ diff --git a/resources/g2/track/alpine/small_helix_right_up_2_3.png b/resources/g2/track/alpine/small_helix_right_up_2_3.png new file mode 100644 index 0000000000..a47761eb37 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_right_up_2_3.png differ diff --git a/resources/g2/track/alpine/small_helix_right_up_2_4.png b/resources/g2/track/alpine/small_helix_right_up_2_4.png new file mode 100644 index 0000000000..51bb07ff97 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_right_up_2_4.png differ diff --git a/resources/g2/track/alpine/small_helix_right_up_3_1.png b/resources/g2/track/alpine/small_helix_right_up_3_1.png new file mode 100644 index 0000000000..fe88eed492 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_right_up_3_1.png differ diff --git a/resources/g2/track/alpine/small_helix_right_up_3_2.png b/resources/g2/track/alpine/small_helix_right_up_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_right_up_3_2.png differ diff --git a/resources/g2/track/alpine/small_helix_right_up_3_3.png b/resources/g2/track/alpine/small_helix_right_up_3_3.png new file mode 100644 index 0000000000..d29d6ed4df Binary files /dev/null and b/resources/g2/track/alpine/small_helix_right_up_3_3.png differ diff --git a/resources/g2/track/alpine/small_helix_right_up_4_1.png b/resources/g2/track/alpine/small_helix_right_up_4_1.png new file mode 100644 index 0000000000..926145f91e Binary files /dev/null and b/resources/g2/track/alpine/small_helix_right_up_4_1.png differ diff --git a/resources/g2/track/alpine/small_helix_right_up_4_2.png b/resources/g2/track/alpine/small_helix_right_up_4_2.png new file mode 100644 index 0000000000..c7d7745e1c Binary files /dev/null and b/resources/g2/track/alpine/small_helix_right_up_4_2.png differ diff --git a/resources/g2/track/alpine/small_helix_right_up_4_3.png b/resources/g2/track/alpine/small_helix_right_up_4_3.png new file mode 100644 index 0000000000..1e591916de Binary files /dev/null and b/resources/g2/track/alpine/small_helix_right_up_4_3.png differ diff --git a/resources/g2/track/alpine/small_helix_right_up_4_4.png b/resources/g2/track/alpine/small_helix_right_up_4_4.png new file mode 100644 index 0000000000..e95cac4da4 Binary files /dev/null and b/resources/g2/track/alpine/small_helix_right_up_4_4.png differ diff --git a/resources/g2/track/alpine/small_turn_left_1_1.png b/resources/g2/track/alpine/small_turn_left_1_1.png new file mode 100644 index 0000000000..023c010499 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_1_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_1_2.png b/resources/g2/track/alpine/small_turn_left_1_2.png new file mode 100644 index 0000000000..5227c8fd52 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_1_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_1_3.png b/resources/g2/track/alpine/small_turn_left_1_3.png new file mode 100644 index 0000000000..22eb6a49e6 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_1_3.png differ diff --git a/resources/g2/track/alpine/small_turn_left_2_1.png b/resources/g2/track/alpine/small_turn_left_2_1.png new file mode 100644 index 0000000000..4453e4d4a0 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_2_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_2_2.png b/resources/g2/track/alpine/small_turn_left_2_2.png new file mode 100644 index 0000000000..38562b1e9b Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_2_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_2_3.png b/resources/g2/track/alpine/small_turn_left_2_3.png new file mode 100644 index 0000000000..07ef7786f1 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_2_3.png differ diff --git a/resources/g2/track/alpine/small_turn_left_3_1.png b/resources/g2/track/alpine/small_turn_left_3_1.png new file mode 100644 index 0000000000..ef875750bc Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_3_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_3_2.png b/resources/g2/track/alpine/small_turn_left_3_2.png new file mode 100644 index 0000000000..3e41e7f5b5 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_3_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_3_3.png b/resources/g2/track/alpine/small_turn_left_3_3.png new file mode 100644 index 0000000000..b51dc0c4ec Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_3_3.png differ diff --git a/resources/g2/track/alpine/small_turn_left_4_1.png b/resources/g2/track/alpine/small_turn_left_4_1.png new file mode 100644 index 0000000000..4b079395cd Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_4_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_4_2.png b/resources/g2/track/alpine/small_turn_left_4_2.png new file mode 100644 index 0000000000..cc07c6f45a Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_4_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_4_3.png b/resources/g2/track/alpine/small_turn_left_4_3.png new file mode 100644 index 0000000000..5041c0482e Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_4_3.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_1_1.png b/resources/g2/track/alpine/small_turn_left_bank_1_1.png new file mode 100644 index 0000000000..bbbb08cf37 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_1_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_1_2.png b/resources/g2/track/alpine/small_turn_left_bank_1_2.png new file mode 100644 index 0000000000..83c3d21034 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_1_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_1_3.png b/resources/g2/track/alpine/small_turn_left_bank_1_3.png new file mode 100644 index 0000000000..2f2dda9646 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_1_3.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_1_4.png b/resources/g2/track/alpine/small_turn_left_bank_1_4.png new file mode 100644 index 0000000000..0a63445e85 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_1_4.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_2_1.png b/resources/g2/track/alpine/small_turn_left_bank_2_1.png new file mode 100644 index 0000000000..614d97c9af Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_2_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_2_2.png b/resources/g2/track/alpine/small_turn_left_bank_2_2.png new file mode 100644 index 0000000000..dea5f88413 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_2_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_2_3.png b/resources/g2/track/alpine/small_turn_left_bank_2_3.png new file mode 100644 index 0000000000..5b68eed06c Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_2_3.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_3_1.png b/resources/g2/track/alpine/small_turn_left_bank_3_1.png new file mode 100644 index 0000000000..737c75d93c Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_3_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_3_2.png b/resources/g2/track/alpine/small_turn_left_bank_3_2.png new file mode 100644 index 0000000000..b2c63c6949 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_3_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_3_3.png b/resources/g2/track/alpine/small_turn_left_bank_3_3.png new file mode 100644 index 0000000000..8992033f0a Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_3_3.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_3_4.png b/resources/g2/track/alpine/small_turn_left_bank_3_4.png new file mode 100644 index 0000000000..0b0cdd5d48 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_3_4.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_4_1.png b/resources/g2/track/alpine/small_turn_left_bank_4_1.png new file mode 100644 index 0000000000..1ff56671aa Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_4_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_4_2.png b/resources/g2/track/alpine/small_turn_left_bank_4_2.png new file mode 100644 index 0000000000..bff2d8a32c Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_4_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_4_3.png b/resources/g2/track/alpine/small_turn_left_bank_4_3.png new file mode 100644 index 0000000000..90c0942101 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_4_3.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_1_1.png b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..b4072fe360 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_1_2.png b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..d075cc4d0d Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_2_1.png b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..cf5599c413 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_2_2.png b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..3e60f837ab Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_2_3.png b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_2_3.png new file mode 100644 index 0000000000..32041631c0 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_2_3.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_3_1.png b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..1d32077fc7 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_3_2.png b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..fbc587357a Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_4_1.png b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..c438108ed5 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_4_2.png b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..ba132eda82 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_gentle_up_1_1.png b/resources/g2/track/alpine/small_turn_left_gentle_up_1_1.png new file mode 100644 index 0000000000..67f5a9f4ed Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_gentle_up_1_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_gentle_up_1_2.png b/resources/g2/track/alpine/small_turn_left_gentle_up_1_2.png new file mode 100644 index 0000000000..f7f864aa3f Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_gentle_up_1_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_gentle_up_2_1.png b/resources/g2/track/alpine/small_turn_left_gentle_up_2_1.png new file mode 100644 index 0000000000..3998203e10 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_gentle_up_2_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_gentle_up_2_2.png b/resources/g2/track/alpine/small_turn_left_gentle_up_2_2.png new file mode 100644 index 0000000000..a4f59da7f0 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_gentle_up_2_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_gentle_up_3_1.png b/resources/g2/track/alpine/small_turn_left_gentle_up_3_1.png new file mode 100644 index 0000000000..cbf09ef884 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_gentle_up_3_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_gentle_up_3_2.png b/resources/g2/track/alpine/small_turn_left_gentle_up_3_2.png new file mode 100644 index 0000000000..eb1b2201b7 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_gentle_up_3_2.png differ diff --git a/resources/g2/track/alpine/small_turn_left_gentle_up_4_1.png b/resources/g2/track/alpine/small_turn_left_gentle_up_4_1.png new file mode 100644 index 0000000000..6c346dfd3e Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_gentle_up_4_1.png differ diff --git a/resources/g2/track/alpine/small_turn_left_gentle_up_4_2.png b/resources/g2/track/alpine/small_turn_left_gentle_up_4_2.png new file mode 100644 index 0000000000..0774e3a1b6 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_left_gentle_up_4_2.png differ diff --git a/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_1_1.png b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..82f456d4f6 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_1_2.png b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..7ac34bc28d Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_2_1.png b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..ed1bfca430 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_2_2.png b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..c0944c6fdb Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_3_1.png b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..2451b7a894 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_3_2.png b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..786ef79f7e Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_3_3.png b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_3_3.png new file mode 100644 index 0000000000..2c5c2557bb Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_3_3.png differ diff --git a/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_4_1.png b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..3c515f3a52 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_4_2.png b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..880592aad0 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/alpine/small_turn_right_gentle_up_1_1.png b/resources/g2/track/alpine/small_turn_right_gentle_up_1_1.png new file mode 100644 index 0000000000..d0186d03ea Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_gentle_up_1_1.png differ diff --git a/resources/g2/track/alpine/small_turn_right_gentle_up_1_2.png b/resources/g2/track/alpine/small_turn_right_gentle_up_1_2.png new file mode 100644 index 0000000000..3c8eea7228 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_gentle_up_1_2.png differ diff --git a/resources/g2/track/alpine/small_turn_right_gentle_up_2_1.png b/resources/g2/track/alpine/small_turn_right_gentle_up_2_1.png new file mode 100644 index 0000000000..0ef40d7ebe Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_gentle_up_2_1.png differ diff --git a/resources/g2/track/alpine/small_turn_right_gentle_up_2_2.png b/resources/g2/track/alpine/small_turn_right_gentle_up_2_2.png new file mode 100644 index 0000000000..100d1e9075 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_gentle_up_2_2.png differ diff --git a/resources/g2/track/alpine/small_turn_right_gentle_up_3_1.png b/resources/g2/track/alpine/small_turn_right_gentle_up_3_1.png new file mode 100644 index 0000000000..78b31ada27 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_gentle_up_3_1.png differ diff --git a/resources/g2/track/alpine/small_turn_right_gentle_up_3_2.png b/resources/g2/track/alpine/small_turn_right_gentle_up_3_2.png new file mode 100644 index 0000000000..a2e7eb7ccc Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_gentle_up_3_2.png differ diff --git a/resources/g2/track/alpine/small_turn_right_gentle_up_4_1.png b/resources/g2/track/alpine/small_turn_right_gentle_up_4_1.png new file mode 100644 index 0000000000..0c330b50c0 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_gentle_up_4_1.png differ diff --git a/resources/g2/track/alpine/small_turn_right_gentle_up_4_2.png b/resources/g2/track/alpine/small_turn_right_gentle_up_4_2.png new file mode 100644 index 0000000000..9bfe99ef12 Binary files /dev/null and b/resources/g2/track/alpine/small_turn_right_gentle_up_4_2.png differ diff --git a/src/openrct2-ui/windows/NewRide.cpp b/src/openrct2-ui/windows/NewRide.cpp index 94cb2044f2..fc3982b23a 100644 --- a/src/openrct2-ui/windows/NewRide.cpp +++ b/src/openrct2-ui/windows/NewRide.cpp @@ -103,6 +103,7 @@ static constexpr const char RideTypeViewOrder[] = { RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER, RIDE_TYPE_HYBRID_COASTER, RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER, + RIDE_TYPE_ALPINE_COASTER, // Gentle rides RIDE_TYPE_MONORAIL_CYCLES, diff --git a/src/openrct2/libopenrct2.vcxproj b/src/openrct2/libopenrct2.vcxproj index 85e5e1446c..aa9e302d60 100644 --- a/src/openrct2/libopenrct2.vcxproj +++ b/src/openrct2/libopenrct2.vcxproj @@ -350,6 +350,7 @@ + @@ -828,6 +829,7 @@ + diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index 713016e5f1..7d6dc1fa85 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -111,6 +111,7 @@ enum : uint16_t STR_RIDE_NAME_LIM_LAUNCHED_ROLLER_COASTER = 92, STR_RIDE_NAME_HYBRID_COASTER = 93, STR_RIDE_NAME_SINGLE_RAIL_ROLLER_COASTER = 94, + STR_RIDE_NAME_ALPINE_COASTER = 95, STR_RIDE_DESCRIPTION_SPIRAL_ROLLER_COASTER = 512, STR_RIDE_DESCRIPTION_STAND_UP_ROLLER_COASTER = 513, @@ -202,6 +203,7 @@ enum : uint16_t STR_RIDE_DESCRIPTION_LIM_LAUNCHED_ROLLER_COASTER = 602, STR_RIDE_DESCRIPTION_HYBRID_COASTER = 603, STR_RIDE_DESCRIPTION_SINGLE_RAIL_ROLLER_COASTER = 604, + STR_RIDE_DESCRIPTION_ALPINE_COASTER = 605, STR_GUEST_X = 767, STR_HANDYMAN_X = 768, diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index 7c0a2f750f..84a36aac78 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -42,7 +42,7 @@ // This string specifies which version of network stream current build uses. // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -#define NETWORK_STREAM_VERSION "0" +#define NETWORK_STREAM_VERSION "1" #define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION static Peep* _pickup_peep = nullptr; diff --git a/src/openrct2/object/RideObject.cpp b/src/openrct2/object/RideObject.cpp index ff818b1235..40b009168a 100644 --- a/src/openrct2/object/RideObject.cpp +++ b/src/openrct2/object/RideObject.cpp @@ -1078,6 +1078,7 @@ static const EnumMap RideTypeLookupTable{ { "classic_mini_rc", RIDE_TYPE_CLASSIC_MINI_ROLLER_COASTER }, { "hybrid_rc", RIDE_TYPE_HYBRID_COASTER }, { "single_rail_rc", RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER }, + { "alpine_rc", RIDE_TYPE_ALPINE_COASTER }, }; uint8_t RideObject::ParseRideType(const std::string& s) diff --git a/src/openrct2/park/ParkFile.h b/src/openrct2/park/ParkFile.h index e445abefdd..2d3ae4e229 100644 --- a/src/openrct2/park/ParkFile.h +++ b/src/openrct2/park/ParkFile.h @@ -8,10 +8,10 @@ struct ObjectRepositoryItem; namespace OpenRCT2 { // Current version that is saved. - constexpr uint32_t PARK_FILE_CURRENT_VERSION = 0xB; + constexpr uint32_t PARK_FILE_CURRENT_VERSION = 0xC; // The minimum version that is forwards compatible with the current version. - constexpr uint32_t PARK_FILE_MIN_VERSION = 0xB; + constexpr uint32_t PARK_FILE_MIN_VERSION = 0xC; // The minimum version that is backwards compatible with the current version. // If this is increased beyond 0, uncomment the checks in ParkFile.cpp and Context.cpp! diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index b99e18571b..05bac254d5 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -580,6 +580,7 @@ enum RIDE_TYPE_CLASSIC_MINI_ROLLER_COASTER, RIDE_TYPE_HYBRID_COASTER, RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER, + RIDE_TYPE_ALPINE_COASTER, RIDE_TYPE_COUNT }; diff --git a/src/openrct2/ride/RideData.cpp b/src/openrct2/ride/RideData.cpp index 04cfebce6e..5c80115141 100644 --- a/src/openrct2/ride/RideData.cpp +++ b/src/openrct2/ride/RideData.cpp @@ -30,6 +30,7 @@ #include "Track.h" #include "Vehicle.h" #include "coaster/meta/AirPoweredVerticalCoaster.h" +#include "coaster/meta/AlpineCoaster.h" #include "coaster/meta/BobsleighCoaster.h" #include "coaster/meta/ClassicMiniRollerCoaster.h" #include "coaster/meta/CompactInvertedCoaster.h" @@ -313,6 +314,7 @@ constexpr const RideTypeDescriptor RideTypeDescriptors[RIDE_TYPE_COUNT] = { /* RIDE_TYPE_CLASSIC_MINI_ROLLER_COASTER, */ ClassicMiniRollerCoasterRTD, /* RIDE_TYPE_HYBRID_COASTER */ HybridCoasterRTD, /* RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER */ SingleRailRollerCoasterRTD, + /* RIDE_TYPE_ALPINE_COASTER */ AlpineCoasterRTD, }; bool RideTypeDescriptor::HasFlag(uint64_t flag) const diff --git a/src/openrct2/ride/RideRatings.cpp b/src/openrct2/ride/RideRatings.cpp index 19b3f71340..324d72e438 100644 --- a/src/openrct2/ride/RideRatings.cpp +++ b/src/openrct2/ride/RideRatings.cpp @@ -4440,6 +4440,43 @@ void ride_ratings_calculate_single_rail_roller_coaster(Ride* ride, RideRatingUpd ride->sheltered_eighths = get_num_of_sheltered_eighths(ride).TotalShelteredEighths; } +void ride_ratings_calculate_alpine_coaster(Ride* ride, RideRatingUpdateState& state) +{ + if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) + return; + + ride->unreliability_factor = 7; + set_unreliability_factor(ride); + + RatingTuple ratings; + ride_ratings_set(&ratings, RIDE_RATING(2, 30), RIDE_RATING(2, 10), RIDE_RATING(1, 4)); + ride_ratings_apply_length(&ratings, ride, 6000, 873); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 75), RIDE_RATING(0, 5)); + ride_ratings_apply_train_length(&ratings, ride, 187245); + ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); + ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); + ride_ratings_apply_duration(&ratings, ride, 300, 26214); + ride_ratings_apply_gforces(&ratings, ride, 20480, 23831, 49648); + ride_ratings_apply_turns(&ratings, ride, 29721, 34767, 45749); + ride_ratings_apply_drops(&ratings, ride, 8738, 5461, 6553); + ride_ratings_apply_sheltered_ratings(&ratings, ride, 15420, 32768, 35108); + ride_ratings_apply_proximity(state, &ratings, 22367); + ride_ratings_apply_scenery(&ratings, ride, 11155); + ride_ratings_apply_max_speed_penalty(&ratings, ride, 0x50000, 2, 2, 2); + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 40), 2, 2, 2); + ride_ratings_apply_first_length_penalty(&ratings, ride, 0x1720000, 2, 2, 2); + ride_ratings_apply_excessive_lateral_g_penalty(&ratings, ride, 40960, 35746, 49648); + ride_ratings_apply_intensity_penalty(&ratings); + ride_ratings_apply_adjustments(ride, &ratings); + + ride->ratings = ratings; + + ride->upkeep_cost = ride_compute_upkeep(state, ride); + ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_INCOME; + + ride->sheltered_eighths = get_num_of_sheltered_eighths(ride).TotalShelteredEighths; +} + #pragma endregion #pragma region Ride rating calculation function table diff --git a/src/openrct2/ride/RideRatings.h b/src/openrct2/ride/RideRatings.h index a40a335138..3eb340ef55 100644 --- a/src/openrct2/ride/RideRatings.h +++ b/src/openrct2/ride/RideRatings.h @@ -142,4 +142,5 @@ void ride_ratings_calculate_mine_ride(Ride* ride, RideRatingUpdateState& state); void ride_ratings_calculate_lim_launched_roller_coaster(Ride* ride, RideRatingUpdateState& state); void ride_ratings_calculate_hybrid_coaster(Ride* ride, RideRatingUpdateState& state); void ride_ratings_calculate_single_rail_roller_coaster(Ride* ride, RideRatingUpdateState& state); +void ride_ratings_calculate_alpine_coaster(Ride* ride, RideRatingUpdateState& state); void ride_ratings_calculate_drink_stall(Ride* ride, RideRatingUpdateState& state); diff --git a/src/openrct2/ride/TrackPaint.h b/src/openrct2/ride/TrackPaint.h index 3f42bc5959..7b2651bfa5 100644 --- a/src/openrct2/ride/TrackPaint.h +++ b/src/openrct2/ride/TrackPaint.h @@ -479,3 +479,7 @@ namespace SingleRailRC { TRACK_PAINT_FUNCTION GetTrackPaintFunction(int32_t trackType); } +namespace AlpineRC +{ + TRACK_PAINT_FUNCTION GetTrackPaintFunction(int32_t trackType); +} diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index aeefd662b9..def7e7fd6b 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -143,6 +143,7 @@ struct Vehicle : EntityBase int8_t ferris_wheel_var_0; int8_t ferris_wheel_var_1; }; + int16_t rider_speed_preference; }; union { diff --git a/src/openrct2/ride/coaster/AlpineCoaster.cpp b/src/openrct2/ride/coaster/AlpineCoaster.cpp new file mode 100644 index 0000000000..24a42395b6 --- /dev/null +++ b/src/openrct2/ride/coaster/AlpineCoaster.cpp @@ -0,0 +1,7296 @@ +#pragma region Copyright(c) 2014 - 2022 OpenRCT2 Developers +/***************************************************************************** + * OpenRCT2, an open source clone of Roller Coaster Tycoon 2. + * + * OpenRCT2 is the work of many authors, a full list can be found in contributors.md + * For more information, visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * A full copy of the GNU General Public License can be found in licence.txt + *****************************************************************************/ +#pragma endregion + +#include "../../drawing/Drawing.h" +#include "../../interface/Viewport.h" +#include "../../paint/Paint.h" +#include "../../paint/Supports.h" +#include "../../sprites.h" +#include "../../world/Map.h" +#include "../RideData.h" +#include "../TrackData.h" +#include "../TrackPaint.h" + +namespace AlpineRC +{ + static void TrackFlat( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_FLAT + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_FLAT + 1), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_FLAT + 2), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_FLAT + 3), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + } + else + { + switch (direction) + { + case 0: + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_FLAT + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_FLAT + 1), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + } + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void TrackStation( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + static constexpr const uint32_t imageIds[4][3] = { + { (SPR_G2_ALPINE_TRACK_FLAT + 0), (SPR_G2_ALPINE_TRACK_FLAT + 0), SPR_STATION_BASE_B_SW_NE }, + { (SPR_G2_ALPINE_TRACK_FLAT + 1), (SPR_G2_ALPINE_TRACK_FLAT + 1), SPR_STATION_BASE_B_NW_SE }, + { (SPR_G2_ALPINE_TRACK_FLAT + 0), (SPR_G2_ALPINE_TRACK_FLAT + 0), SPR_STATION_BASE_B_SW_NE }, + { (SPR_G2_ALPINE_TRACK_FLAT + 1), (SPR_G2_ALPINE_TRACK_FLAT + 1), SPR_STATION_BASE_B_NW_SE }, + }; + + if (trackElement.GetTrackType() == TrackElemType::EndStation) + { + PaintAddImageAsParentRotated( + session, direction, imageIds[direction][1] | session.TrackColours[SCHEME_TRACK], { 0, 0, height }, + { 32, 20, 1 }, { 0, 6, height + 3 }); + } + else + { + PaintAddImageAsParentRotated( + session, direction, imageIds[direction][0] | session.TrackColours[SCHEME_TRACK], { 0, 0, height }, + { 32, 20, 1 }, { 0, 6, height + 3 }); + } + PaintAddImageAsParentRotated( + session, direction, imageIds[direction][2] | session.TrackColours[SCHEME_MISC], { 0, 0, height - 2 }, { 32, 28, 2 }, + { 0, 2, height }); + track_paint_util_draw_station_metal_supports(session, direction, height, session.TrackColours[SCHEME_SUPPORTS]); + track_paint_util_draw_station_2(session, ride, direction, height, trackElement, 4, 7); + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void Track25DegUp( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE + 8), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE + 9), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE + 10), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE + 11), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 8, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE + 8), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE + 9), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE + 10), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE + 11), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 8, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + static void TrackFlatTo25DegUp( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE + 1), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE + 2), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE + 3), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 3, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE + 1), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE + 2), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE + 3), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 3, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + } + + static void Track25DegUpToFlat( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE + 4), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE + 5), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE + 6), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE + 7), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 6, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE + 4), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE + 5), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE + 6), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE + 7), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 6, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + } + + static void Track25DegDown( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + Track25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + } + + static void TrackFlatTo25DegDown( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + Track25DegUpToFlat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + } + + static void Track25DegDownToFlat( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + TrackFlatTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + } + + static void TrackLeftQuarterTurn3( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE + 3), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE + 6), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE + 9), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE + 1), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE + 4), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE + 7), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE + 10), + { 0, 0, height }, { 16, 16, 3 }, { 16, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE + 2), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE + 5), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE + 8), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE + 11), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackRightQuarterTurn3( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + TrackLeftQuarterTurn3(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + } + + static void TrackLeftQuarterTurn5( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 5), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 10), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 15), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 1), + { 0, 0, height }, { 32, 16, 3 }, { 0, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 6), + { 0, 0, height }, { 32, 16, 3 }, { 0, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 11), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 16), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 2), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 7), + { 0, 0, height }, { 16, 16, 3 }, { 16, 16, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 12), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 17), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 3), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 8), + { 0, 0, height }, { 16, 32, 3 }, { 0, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 13), + { 0, 0, height }, { 16, 32, 3 }, { 0, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 18), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 4), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 9), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 14), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 19), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackRightQuarterTurn5( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackLeftQuarterTurn5(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + } + + static void TrackLeftEighthToDiag( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 4), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 8), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 12), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 1), + { 0, 0, height }, { 32, 16, 3 }, { 0, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 5), + { 0, 0, height }, { 34, 16, 3 }, { 0, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 9), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 13), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 2), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 6), + { 0, 0, height }, { 16, 16, 3 }, { 16, 16, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 10), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 14), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 3), + { 0, 0, height }, { 16, 16, 3 }, { 16, 16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 7), + { 0, 0, height }, { 16, 18, 3 }, { 0, 16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 11), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 15), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackRightEighthToDiag( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 16), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 20), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 24), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 28), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 17), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 21), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 25), + { 0, 0, height }, { 34, 16, 3 }, { 0, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 29), + { 0, 0, height }, { 32, 16, 3 }, { 0, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 18), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 22), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 26), + { 0, 0, height }, { 28, 28, 3 }, { 4, 4, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 30), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 19), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 23), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 27), + { 0, 0, height }, { 16, 18, 3 }, { 0, 16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE + 31), + { 0, 0, height }, { 16, 16, 3 }, { 16, 16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackLeftEighthToOrthogonal( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + TrackRightEighthToDiag(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + } + + static void TrackRightEighthToOrthogonal( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + TrackLeftEighthToDiag(session, ride, trackSequence, (direction + 3) & 3, height, trackElement); + } + + static void TrackDiagFlat( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + if (trackElement.HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_FLAT_DIAGONAL + 3), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_FLAT_DIAGONAL + 3), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_FLAT_DIAGONAL + 0), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_FLAT_DIAGONAL + 0), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + if (trackElement.HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_FLAT_DIAGONAL + 2), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_FLAT_DIAGONAL + 2), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_FLAT_DIAGONAL + 1), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_FLAT_DIAGONAL + 1), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackDiag25DegUp( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + if (trackElement.HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 11), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 11), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 8), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 8), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + if (trackElement.HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 10), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 10), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 1), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 1), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + } + } + + static void TrackDiag25DegUpToFlat( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + if (trackElement.HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 7), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 7), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 4), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 4), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + if (trackElement.HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 6), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 6), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 5), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 5), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + } + } + + static void TrackDiagFlatTo25DegUp( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + if (trackElement.HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 3), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 3), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 0), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 0), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + if (trackElement.HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 2), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 2), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height + 2, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 1), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height + 2, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 2, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 1), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 2, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 2, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 2, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackDiag25DegDown( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + if (trackElement.HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 9), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 9), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 10), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 10), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + if (trackElement.HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 8), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 8), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 11), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 11), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + } + } + + static void TrackDiagFlatTo25DegDown( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + if (trackElement.HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 5), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 5), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + break; + case 1: + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 6), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 6), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + break; + case 2: + if (trackElement.HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 4), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 4), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + break; + case 3: + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 7), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 7), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + break; + } + + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + static void TrackDiag25DegDownToFlat( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + if (trackElement.HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 1), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 1), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 2), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 2), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + if (trackElement.HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 0), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 0), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + if (trackElement.HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 3), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 3), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackFlatToLeftBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 1), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 2), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 3), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 4), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 5), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void TrackFlatToRightBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 6), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 7), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 8), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 9), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 10), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 11), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void TrackLeftBankToFlat( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + TrackFlatToRightBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + } + + static void TrackRightBankToFlat( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + TrackFlatToLeftBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + } + + static void TrackLeftBankTo25DegUp( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 12), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 13), + { 0, 0, height }, { 32, 1, 34 }, { 0, 27, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 14), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 15), + { 0, 0, height }, { 32, 1, 34 }, { 0, 27, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 16), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 17), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 3, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + } + + static void TrackRightBankTo25DegUp( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 18), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 19), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 20), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 21), + { 0, 0, height }, { 32, 1, 34 }, { 0, 27, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 22), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 23), + { 0, 0, height }, { 32, 1, 34 }, { 0, 27, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 3, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + } + + static void Track25DegUpToLeftBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 24), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 25), + { 0, 0, height }, { 32, 1, 34 }, { 0, 27, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 26), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 27), + { 0, 0, height }, { 32, 1, 34 }, { 0, 27, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 28), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 29), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 6, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + } + + static void Track25DegUpToRightBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 30), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 31), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 32), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 33), + { 0, 0, height }, { 32, 1, 34 }, { 0, 27, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 34), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 35), + { 0, 0, height }, { 32, 1, 34 }, { 0, 27, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 6, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + } + + static void TrackLeftBankTo25DegDown( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + Track25DegUpToRightBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + } + + static void TrackRightBankTo25DegDown( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + Track25DegUpToLeftBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + } + + static void Track25DegDownToLeftBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + TrackRightBankTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + } + + static void Track25DegDownToRightBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + TrackLeftBankTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + } + + static void TrackLeftBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 36), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 37), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 38), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 39), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void TrackRightBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + TrackLeftBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + } + + static void TrackDiagFlatToLeftBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 4), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 0), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 1), + { -16, -16, height }, { 32, 32, 0 }, { -16, -16, height + 27 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 3), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 2), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackDiagFlatToRightBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 9), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 5), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 7), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 8), + { -16, -16, height }, { 32, 32, 0 }, { -16, -16, height + 27 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 6), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackDiagLeftBankToFlat( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 6), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 7), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 8), + { -16, -16, height }, { 32, 32, 0 }, { -16, -16, height + 27 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 5), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 9), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackDiagRightBankToFlat( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 2), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 3), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 0), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 1), + { -16, -16, height }, { 32, 32, 0 }, { -16, -16, height + 27 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 4), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackDiagLeftBankTo25DegUp( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 14), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 10), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 11), + { -16, -16, height }, { 32, 32, 0 }, { -16, -16, height + 35 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 13), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 12), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackDiagRightBankTo25DegUp( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 19), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 15), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 17), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 18), + { -16, -16, height }, { 32, 32, 0 }, { -16, -16, height + 35 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 16), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackDiag25DegUpToLeftBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 24), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 20), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 21), + { -16, -16, height }, { 32, 32, 0 }, { -16, -16, height + 35 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 23), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 22), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + } + } + + static void TrackDiag25DegUpToRightBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 29), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 25), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 27), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 28), + { -16, -16, height }, { 32, 32, 0 }, { -16, -16, height + 35 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 26), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + } + } + + static void TrackDiagLeftBankTo25DegDown( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 26), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 27), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 28), + { -16, -16, height }, { 32, 32, 0 }, { -16, -16, height + 35 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 25), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 29), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + break; + } + + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + static void TrackDiagRightBankTo25DegDown( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 22), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 23), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 20), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 21), + { -16, -16, height }, { 32, 32, 0 }, { -16, -16, height + 35 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 24), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + break; + } + + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + static void TrackDiag25DegDownToLeftBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 16), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 17), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 18), + { -16, -16, height }, { 32, 32, 0 }, { -16, -16, height + 35 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 15), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 19), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackDiag25DegDownToRightBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 12), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 13), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 10), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 11), + { -16, -16, height }, { 32, 32, 0 }, { -16, -16, height + 35 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 14), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackDiagLeftBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 33), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 30), + { -16, -16, height }, { 32, 32, 0 }, { -16, -16, height + 27 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 32), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 31), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackDiagRightBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 31), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 32), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 30), + { -16, -16, height }, { 32, 32, 0 }, { -16, -16, height + 27 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 33), + { -16, -16, height }, { 32, 32, 3 }, { -16, -16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackLeftQuarterTurn3Bank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 0), { 0, 0, height }, + { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 1), { 0, 0, height }, + { 32, 1, 26 }, { 0, 27, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 4), { 0, 0, height }, + { 32, 1, 26 }, { 0, 27, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 7), { 0, 0, height }, + { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 11), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 2, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 2), { 0, 0, height }, + { 16, 16, 3 }, { 16, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 5), { 0, 0, height }, + { 16, 16, 1 }, { 0, 0, height + 27 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 8), { 0, 0, height }, + { 16, 16, 3 }, { 0, 16, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 12), + { 0, 0, height }, { 16, 16, 3 }, { 16, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 3), { 0, 0, height }, + { 20, 32, 3 }, { 6, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 6), { 0, 0, height }, + { 1, 32, 26 }, { 27, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 9), { 0, 0, height }, + { 20, 32, 3 }, { 6, 0, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 10), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 13), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 2, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackRightQuarterTurn3Bank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + TrackLeftQuarterTurn3Bank(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + } + + static void TrackBankedLeftQuarterTurn5( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 1), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 6), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 11), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 17), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 1, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 2), + { 0, 0, height }, { 32, 16, 3 }, { 0, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 7), + { 0, 0, height }, { 32, 16, 1 }, { 0, 0, height + 27 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 12), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 18), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 3), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 8), + { 0, 0, height }, { 16, 16, 1 }, { 16, 16, height + 27 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 13), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 19), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 4), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 9), + { 0, 0, height }, { 16, 32, 1 }, { 0, 0, height + 27 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 14), + { 0, 0, height }, { 16, 32, 3 }, { 0, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 20), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 5), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 10), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 15), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 16), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 21), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 1, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackBankedRightQuarterTurn5( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackBankedLeftQuarterTurn5(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + } + + static void TrackLeftEighthBankToDiag( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 0), { 0, 0, height }, + { 32, 1, 26 }, { 0, 27, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 4), { 0, 0, height }, + { 32, 1, 26 }, { 0, 27, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 8), { 0, 0, height }, + { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 12), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 1), { 0, 0, height }, + { 32, 16, 3 }, { 0, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 5), { 0, 0, height }, + { 34, 16, 0 }, { 0, 0, height + 27 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 9), { 0, 0, height }, + { 32, 16, 3 }, { 0, 16, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 13), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 2), { 0, 0, height }, + { 16, 16, 3 }, { 0, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 6), { 0, 0, height }, + { 16, 16, 0 }, { 16, 16, height + 27 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 10), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 14), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 3), { 0, 0, height }, + { 16, 16, 3 }, { 16, 16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 7), { 0, 0, height }, + { 16, 18, 0 }, { 0, 16, height + 27 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 11), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 15), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackRightEighthBankToDiag( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 16), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 20), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 24), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 28), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 17), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 21), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 25), + { 0, 0, height }, { 34, 16, 0 }, { 0, 0, height + 27 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 29), + { 0, 0, height }, { 32, 16, 3 }, { 0, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 18), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 22), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 26), + { 0, 0, height }, { 28, 28, 0 }, { 4, 4, height + 27 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 30), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 19), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 23), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 27), + { 0, 0, height }, { 16, 18, 0 }, { 0, 16, height + 27 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 31), + { 0, 0, height }, { 16, 16, 3 }, { 16, 16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 3, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackLeftEighthBankToOrthogonal( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + TrackRightEighthBankToDiag(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + } + + static void TrackRightEighthBankToOrthogonal( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + TrackLeftEighthBankToDiag(session, ride, trackSequence, (direction + 3) & 3, height, trackElement); + } + + static void TrackLeftQuarterTurn3Tile25DegUp( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 0), { 0, 6, height }, + { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 2), { 0, 6, height }, + { 32, 20, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 4), { 0, 6, height }, + { 32, 20, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 6), { 0, 6, height }, + { 32, 20, 3 }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 8, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 1), { 6, 0, height }, + { 20, 32, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 3), { 6, 0, height }, + { 20, 32, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 5), { 6, 0, height }, + { 20, 32, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 7), { 6, 0, height }, + { 20, 32, 3 }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 8, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_2); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackRightQuarterTurn3Tile25DegUp( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 8), { 0, 6, height }, + { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 10), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 12), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 14), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 8, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 9), { 6, 0, height }, + { 20, 32, 3 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 11), + { 6, 0, height }, { 20, 32, 3 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 13), + { 6, 0, height }, { 20, 32, 3 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 4, 10, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 15), + { 6, 0, height }, { 20, 32, 3 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_2); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackLeftQuarterTurn3Tile25DegDown( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + TrackRightQuarterTurn3Tile25DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement); + } + + static void TrackRightQuarterTurn3Tile25DegDown( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + TrackLeftQuarterTurn3Tile25DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + } + + static void TrackLeftQuarterTurn525DegUp( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 5), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 10), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 15), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 8, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 1), + { 0, 0, height }, { 32, 16, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 6), + { 0, 0, height }, { 32, 16, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 11), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 16), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 2), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 7), + { 0, 0, height }, { 16, 16, 3 }, { 16, 16, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 12), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 17), + { 0, 0, height }, { 16, 16, 3 }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 4: + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 3), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 8), + { 0, 0, height }, { 16, 32, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 13), + { 0, 0, height }, { 16, 32, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 18), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 4), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 9), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 14), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 19), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 8, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_2); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackRightQuarterTurn525DegUp( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 20), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 25), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 30), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 35), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 8, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 21), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 26), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 31), + { 0, 0, height }, { 32, 16, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 36), + { 0, 0, height }, { 32, 16, 3 }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 22), + { 0, 0, height }, { 16, 16, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 27), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 32), + { 0, 0, height }, { 16, 16, 3 }, { 16, 16, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 37), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 4: + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 23), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 28), + { 0, 0, height }, { 16, 32, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 33), + { 0, 0, height }, { 16, 32, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 38), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 24), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 29), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 34), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 39), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 8, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_2); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackLeftQuarterTurn525DegDown( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackRightQuarterTurn525DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement); + } + + static void TrackRightQuarterTurn525DegDown( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackLeftQuarterTurn525DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + } + + static void TrackSBendLeft( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 4), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 3), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 7), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 1), + { 0, 0, height }, { 32, 26, 3 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 5, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 5), + { 0, 0, height }, { 32, 26, 3 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 6, 1, height - 1, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 2), + { 0, 0, height }, { 32, 26, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 6), + { 0, 0, height }, { 32, 26, 3 }, { 0, 6, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 2), + { 0, 0, height }, { 32, 26, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 6), + { 0, 0, height }, { 32, 26, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 1), + { 0, 0, height }, { 32, 26, 3 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 5, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 5), + { 0, 0, height }, { 32, 26, 3 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 6, 1, height - 1, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 3), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 7), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 4), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 2: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackSBendRight( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 8), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 12), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 11), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 15), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 9), + { 0, 0, height }, { 32, 26, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 8, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 13), + { 0, 0, height }, { 32, 26, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 7, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 10), + { 0, 0, height }, { 32, 26, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 14), + { 0, 0, height }, { 32, 26, 3 }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 10), + { 0, 0, height }, { 32, 26, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 14), + { 0, 0, height }, { 32, 26, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 9), + { 0, 0, height }, { 32, 26, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 8, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 13), + { 0, 0, height }, { 32, 26, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 7, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 11), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 15), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 8), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_S_BEND + 12), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 2: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackLeftHalfBankedHelixUpSmall( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 1), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 4), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 7), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 11), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 5, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 2), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 5), + { 0, 0, height }, { 16, 16, 1 }, { 0, 0, height + 27 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 8), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 12), + { 0, 0, height }, { 16, 16, 3 }, { 16, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 3), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 6), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 9), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 10), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 13), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 9, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 11), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 0), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 1), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 4), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 7), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 5, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 1: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 12), + { 0, 0, height }, { 16, 16, 3 }, { 16, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 2), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 5), + { 0, 0, height }, { 16, 16, 1 }, { 0, 0, height + 27 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 8), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 13), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 3), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 6), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 9), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 10), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 9, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackRightHalfBankedHelixUpSmall( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 14), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 17), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 21), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 24), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 25), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 5, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 15), + { 0, 0, height }, { 16, 16, 3 }, { 16, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 18), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 22), + { 0, 0, height }, { 16, 16, 1 }, { 0, 0, height + 27 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 26), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 16), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 19), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 20), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 23), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 27), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 9, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 17), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 21), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 24), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 25), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 14), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 5, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 18), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 22), + { 0, 0, height }, { 16, 16, 1 }, { 0, 0, height + 27 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 26), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 15), + { 0, 0, height }, { 16, 16, 3 }, { 16, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 19), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 20), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 23), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 27), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_SMALL_HELIX + 16), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 9, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackLeftHalfBankedHelixDownSmall( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + if (trackSequence >= 4) + { + trackSequence -= 4; + direction = (direction - 1) & 3; + } + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + TrackRightHalfBankedHelixUpSmall(session, ride, trackSequence, (direction + 1) & 3, height, trackElement); + } + + static void TrackRightHalfBankedHelixDownSmall( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + if (trackSequence >= 4) + { + trackSequence -= 4; + direction = (direction + 1) & 3; + } + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + TrackLeftHalfBankedHelixUpSmall(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + } + + static void TrackLeftHalfBankedHelixUpLarge( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 1), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 6), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 11), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 17), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 3, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 2), + { 0, 0, height }, { 32, 16, 3 }, { 0, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 7), + { 0, 0, height }, { 32, 16, 1 }, { 0, 0, height + 27 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 12), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 18), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 3), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 8), + { 0, 0, height }, { 16, 16, 1 }, { 16, 16, height + 27 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 13), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 19), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 4), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 9), + { 0, 0, height }, { 16, 32, 1 }, { 0, 0, height + 27 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 14), + { 0, 0, height }, { 16, 32, 3 }, { 0, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 20), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 5), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 10), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 15), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 16), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 21), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 9, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 17), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 0), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 1), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 6), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 11), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 3, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 1: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 8: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 9: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 18), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 2), + { 0, 0, height }, { 16, 32, 3 }, { 0, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 7), + { 0, 0, height }, { 16, 32, 1 }, { 0, 0, height + 27 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 12), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 10: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 19), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 3), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 8), + { 0, 0, height }, { 16, 16, 1 }, { 16, 16, height + 27 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 13), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 11: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 12: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 20), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 4), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 9), + { 0, 0, height }, { 32, 16, 1 }, { 0, 0, height + 27 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 14), + { 0, 0, height }, { 32, 16, 3 }, { 0, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 13: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 21), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 5), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 10), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 15), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 16), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 9, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + static void TrackRightHalfBankedHelixUpLarge( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 22), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 27), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 33), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 38), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 39), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 3, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 23), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 28), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 34), + { 0, 0, height }, { 32, 16, 1 }, { 0, 0, height + 27 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 40), + { 0, 0, height }, { 32, 16, 3 }, { 0, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 24), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 29), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 35), + { 0, 0, height }, { 16, 16, 1 }, { 16, 16, height + 27 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 41), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 25), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 30), + { 0, 0, height }, { 16, 32, 3 }, { 0, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 36), + { 0, 0, height }, { 16, 32, 1 }, { 0, 0, height + 27 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 42), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 26), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 31), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 32), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 4, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 37), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 43), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 27), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 33), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 38), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 39), + { 0, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 22), + { 0, 0, height }, { 20, 32, 3 }, { 6, 0, height }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 3, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 8: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 9: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 28), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 34), + { 0, 0, height }, { 16, 32, 1 }, { 0, 0, height + 27 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 40), + { 0, 0, height }, { 16, 32, 3 }, { 0, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 23), + { 0, 0, height }, { 16, 32, 3 }, { 16, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 10: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 29), + { 0, 0, height }, { 16, 16, 3 }, { 0, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 35), + { 0, 0, height }, { 16, 16, 1 }, { 16, 16, height + 27 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 41), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 24), + { 0, 0, height }, { 16, 16, 3 }, { 0, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 11: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 12: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 30), + { 0, 0, height }, { 32, 16, 3 }, { 0, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 36), + { 0, 0, height }, { 32, 16, 1 }, { 0, 0, height + 27 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 42), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 25), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 13: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 31), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 32), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 4, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 37), + { 0, 0, height }, { 32, 1, 26 }, { 0, 27, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 43), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_LARGE_HELIX + 26), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_FORK_ALT, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackLeftHalfBankedHelixDownLarge( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + if (trackSequence >= 7) + { + trackSequence -= 7; + direction = (direction - 1) & 3; + } + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackRightHalfBankedHelixUpLarge(session, ride, trackSequence, (direction + 1) & 3, height, trackElement); + } + + static void TrackRightHalfBankedHelixDownLarge( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + if (trackSequence >= 7) + { + trackSequence -= 7; + direction = (direction + 1) & 3; + } + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackLeftHalfBankedHelixUpLarge(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + } + + static void TrackBrakes( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (direction) + { + case 0: + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_FLAT + 0), { 0, 0, height }, + { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_FLAT + 1), { 0, 0, height }, + { 32, 20, 3 }, { 0, 6, height }); + break; + } + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 0, height, + session.TrackColours[SCHEME_SUPPORTS]); + } + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void TrackLeftBankToLeftQuarterTurn3Tile25DegUp( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 0), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 2), + { 0, 6, height }, { 32, 20, 3 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 3), + { 0, 6, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 5), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 7), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 3, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 1), + { 6, 0, height }, { 20, 32, 3 }, { 0, 6, height - 6 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 4), + { 6, 0, height }, { 20, 32, 3 }, { 0, 6, height - 6 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 6), + { 6, 0, height }, { 20, 32, 3 }, { 0, 6, height - 6 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 8), + { 6, 0, height }, { 20, 32, 3 }, { 0, 6, height - 6 }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 10, height - 6, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_2); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + } + } + + static void TrackRightBankToRightQuarterTurn3Tile25DegUp( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 9), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 11), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 13), + { 0, 6, height }, { 32, 20, 3 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 14), + { 0, 6, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 16), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 3, height, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 10), + { 6, 0, height }, { 20, 32, 3 }, { 0, 6, height - 6 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 12), + { 6, 0, height }, { 20, 32, 3 }, { 0, 6, height - 6 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 15), + { 6, 0, height }, { 20, 32, 3 }, { 0, 6, height - 6 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 17), + { 6, 0, height }, { 20, 32, 3 }, { 0, 6, height - 6 }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 10, height - 6, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height, TUNNEL_2); + break; + case 1: + paint_util_push_tunnel_left(session, height, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + } + } + + static void TrackLeftQuarterTurn3Tile25DegDownToLeftBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 12), + { 0, 6, height }, { 32, 20, 3 }, { 0, 6, height - 6 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 15), + { 0, 6, height }, { 32, 20, 3 }, { 0, 6, height - 6 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 17), + { 0, 6, height }, { 32, 20, 3 }, { 0, 6, height - 6 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 10), + { 0, 6, height }, { 32, 20, 3 }, { 0, 6, height - 6 }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 8, height - 6, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 11), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 13), + { 6, 0, height }, { 20, 32, 3 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 14), + { 6, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 16), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 9), + { 6, 0, height }, { 20, 32, 3 }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 5, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + } + } + + static void TrackRightQuarterTurn3Tile25DegDownToRightBank( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 8), + { 0, 6, height }, { 32, 20, 3 }, { 0, 6, height - 6 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 1), + { 0, 6, height }, { 32, 20, 3 }, { 0, 6, height - 6 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 4), + { 0, 6, height }, { 32, 20, 3 }, { 0, 6, height - 6 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 6), + { 0, 6, height }, { 32, 20, 3 }, { 0, 6, height - 6 }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK_ALT : METAL_SUPPORTS_FORK, 4, 8, height - 6, + session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 7), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 0), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 2), + { 6, 0, height }, { 20, 32, 3 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 3), + { 6, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK] | (SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 5), + { 6, 0, height }, { 20, 32, 3 }); + break; + } + metal_a_supports_paint_setup( + session, direction & 1 ? METAL_SUPPORTS_FORK : METAL_SUPPORTS_FORK_ALT, 4, 5, height, + session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 1: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + } + } + + TRACK_PAINT_FUNCTION GetTrackPaintFunction(int32_t trackType) + { + switch (trackType) + { + case TrackElemType::Flat: + return TrackFlat; + case TrackElemType::EndStation: + case TrackElemType::BeginStation: + case TrackElemType::MiddleStation: + return TrackStation; + case TrackElemType::Up25: + return Track25DegUp; + case TrackElemType::FlatToUp25: + return TrackFlatTo25DegUp; + case TrackElemType::Up25ToFlat: + return Track25DegUpToFlat; + case TrackElemType::Down25: + return Track25DegDown; + case TrackElemType::FlatToDown25: + return TrackFlatTo25DegDown; + case TrackElemType::Down25ToFlat: + return Track25DegDownToFlat; + case TrackElemType::LeftQuarterTurn5Tiles: + return TrackLeftQuarterTurn5; + case TrackElemType::RightQuarterTurn5Tiles: + return TrackRightQuarterTurn5; + case TrackElemType::FlatToLeftBank: + return TrackFlatToLeftBank; + case TrackElemType::FlatToRightBank: + return TrackFlatToRightBank; + case TrackElemType::LeftBankToFlat: + return TrackLeftBankToFlat; + case TrackElemType::RightBankToFlat: + return TrackRightBankToFlat; + case TrackElemType::BankedLeftQuarterTurn5Tiles: + return TrackBankedLeftQuarterTurn5; + case TrackElemType::BankedRightQuarterTurn5Tiles: + return TrackBankedRightQuarterTurn5; + case TrackElemType::LeftBankToUp25: + return TrackLeftBankTo25DegUp; + case TrackElemType::RightBankToUp25: + return TrackRightBankTo25DegUp; + case TrackElemType::Up25ToLeftBank: + return Track25DegUpToLeftBank; + case TrackElemType::Up25ToRightBank: + return Track25DegUpToRightBank; + case TrackElemType::LeftBankToDown25: + return TrackLeftBankTo25DegDown; + case TrackElemType::RightBankToDown25: + return TrackRightBankTo25DegDown; + case TrackElemType::Down25ToLeftBank: + return Track25DegDownToLeftBank; + case TrackElemType::Down25ToRightBank: + return Track25DegDownToRightBank; + case TrackElemType::LeftBank: + return TrackLeftBank; + case TrackElemType::RightBank: + return TrackRightBank; + case TrackElemType::LeftQuarterTurn5TilesUp25: + return TrackLeftQuarterTurn525DegUp; + case TrackElemType::RightQuarterTurn5TilesUp25: + return TrackRightQuarterTurn525DegUp; + case TrackElemType::LeftQuarterTurn5TilesDown25: + return TrackLeftQuarterTurn525DegDown; + case TrackElemType::RightQuarterTurn5TilesDown25: + return TrackRightQuarterTurn525DegDown; + case TrackElemType::SBendLeft: + return TrackSBendLeft; + case TrackElemType::SBendRight: + return TrackSBendRight; + case TrackElemType::LeftQuarterTurn3Tiles: + return TrackLeftQuarterTurn3; + case TrackElemType::RightQuarterTurn3Tiles: + return TrackRightQuarterTurn3; + case TrackElemType::LeftBankedQuarterTurn3Tiles: + return TrackLeftQuarterTurn3Bank; + case TrackElemType::RightBankedQuarterTurn3Tiles: + return TrackRightQuarterTurn3Bank; + case TrackElemType::LeftQuarterTurn3TilesUp25: + return TrackLeftQuarterTurn3Tile25DegUp; + case TrackElemType::RightQuarterTurn3TilesUp25: + return TrackRightQuarterTurn3Tile25DegUp; + case TrackElemType::LeftQuarterTurn3TilesDown25: + return TrackLeftQuarterTurn3Tile25DegDown; + case TrackElemType::RightQuarterTurn3TilesDown25: + return TrackRightQuarterTurn3Tile25DegDown; + case TrackElemType::LeftHalfBankedHelixUpSmall: + return TrackLeftHalfBankedHelixUpSmall; + case TrackElemType::RightHalfBankedHelixUpSmall: + return TrackRightHalfBankedHelixUpSmall; + case TrackElemType::LeftHalfBankedHelixDownSmall: + return TrackLeftHalfBankedHelixDownSmall; + case TrackElemType::RightHalfBankedHelixDownSmall: + return TrackRightHalfBankedHelixDownSmall; + case TrackElemType::LeftHalfBankedHelixUpLarge: + return TrackLeftHalfBankedHelixUpLarge; + case TrackElemType::RightHalfBankedHelixUpLarge: + return TrackRightHalfBankedHelixUpLarge; + case TrackElemType::LeftHalfBankedHelixDownLarge: + return TrackLeftHalfBankedHelixDownLarge; + case TrackElemType::RightHalfBankedHelixDownLarge: + return TrackRightHalfBankedHelixDownLarge; + case TrackElemType::Brakes: + return TrackBrakes; + case TrackElemType::LeftEighthToDiag: + return TrackLeftEighthToDiag; + case TrackElemType::RightEighthToDiag: + return TrackRightEighthToDiag; + case TrackElemType::LeftEighthToOrthogonal: + return TrackLeftEighthToOrthogonal; + case TrackElemType::RightEighthToOrthogonal: + return TrackRightEighthToOrthogonal; + case TrackElemType::LeftEighthBankToDiag: + return TrackLeftEighthBankToDiag; + case TrackElemType::RightEighthBankToDiag: + return TrackRightEighthBankToDiag; + case TrackElemType::LeftEighthBankToOrthogonal: + return TrackLeftEighthBankToOrthogonal; + case TrackElemType::RightEighthBankToOrthogonal: + return TrackRightEighthBankToOrthogonal; + case TrackElemType::DiagFlat: + return TrackDiagFlat; + case TrackElemType::DiagUp25: + return TrackDiag25DegUp; + case TrackElemType::DiagFlatToUp25: + return TrackDiagFlatTo25DegUp; + case TrackElemType::DiagUp25ToFlat: + return TrackDiag25DegUpToFlat; + case TrackElemType::DiagDown25: + return TrackDiag25DegDown; + case TrackElemType::DiagFlatToDown25: + return TrackDiagFlatTo25DegDown; + case TrackElemType::DiagDown25ToFlat: + return TrackDiag25DegDownToFlat; + case TrackElemType::DiagFlatToLeftBank: + return TrackDiagFlatToLeftBank; + case TrackElemType::DiagFlatToRightBank: + return TrackDiagFlatToRightBank; + case TrackElemType::DiagLeftBankToFlat: + return TrackDiagLeftBankToFlat; + case TrackElemType::DiagRightBankToFlat: + return TrackDiagRightBankToFlat; + case TrackElemType::DiagLeftBankToUp25: + return TrackDiagLeftBankTo25DegUp; + case TrackElemType::DiagRightBankToUp25: + return TrackDiagRightBankTo25DegUp; + case TrackElemType::DiagUp25ToLeftBank: + return TrackDiag25DegUpToLeftBank; + case TrackElemType::DiagUp25ToRightBank: + return TrackDiag25DegUpToRightBank; + case TrackElemType::DiagLeftBankToDown25: + return TrackDiagLeftBankTo25DegDown; + case TrackElemType::DiagRightBankToDown25: + return TrackDiagRightBankTo25DegDown; + case TrackElemType::DiagDown25ToLeftBank: + return TrackDiag25DegDownToLeftBank; + case TrackElemType::DiagDown25ToRightBank: + return TrackDiag25DegDownToRightBank; + case TrackElemType::DiagLeftBank: + return TrackDiagLeftBank; + case TrackElemType::DiagRightBank: + return TrackDiagRightBank; + case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25: + return TrackLeftBankToLeftQuarterTurn3Tile25DegUp; + case TrackElemType::RightBankToRightQuarterTurn3TilesUp25: + return TrackRightBankToRightQuarterTurn3Tile25DegUp; + case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank: + return TrackLeftQuarterTurn3Tile25DegDownToLeftBank; + case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank: + return TrackRightQuarterTurn3Tile25DegDownToRightBank; + } + return nullptr; + } + +} // namespace AlpineRC diff --git a/src/openrct2/ride/coaster/meta/AlpineCoaster.h b/src/openrct2/ride/coaster/meta/AlpineCoaster.h new file mode 100644 index 0000000000..b069decc51 --- /dev/null +++ b/src/openrct2/ride/coaster/meta/AlpineCoaster.h @@ -0,0 +1,52 @@ +/***************************************************************************** + * Copyright (c) 2014-2022 OpenRCT2 developers + * + * For a complete list of all authors, please refer to contributors.md + * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is licensed under the GNU General Public License version 3. + *****************************************************************************/ + +#pragma once + +#include "../../RideData.h" +#include "../../Track.h" + +// clang-format off +constexpr const RideTypeDescriptor AlpineCoasterRTD = +{ + SET_FIELD(AlternateType, RIDE_TYPE_NULL), + SET_FIELD(Category, RIDE_CATEGORY_ROLLERCOASTER), + SET_FIELD(EnabledTrackPieces, { TRACK_FLAT, TRACK_STRAIGHT, TRACK_STATION_END, TRACK_LIFT_HILL, TRACK_FLAT_ROLL_BANKING, TRACK_SLOPE, TRACK_SLOPE_LONG, TRACK_SLOPE_CURVE, TRACK_S_BEND, TRACK_CURVE_SMALL, TRACK_CURVE, TRACK_HELIX_SMALL}), + SET_FIELD(ExtraTrackPieces, {}), + SET_FIELD(CoveredTrackPieces, {}), + SET_FIELD(StartTrackPiece, TrackElemType::EndStation), + SET_FIELD(TrackPaintFunction, AlpineRC::GetTrackPaintFunction), + SET_FIELD(Flags, RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_MAIN | RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_SUPPORTS | + RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES | + RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG_UP_INCLINE_REQUIRES_LIFT), + SET_FIELD(RideModes, EnumsToFlags(RideMode::ContinuousCircuit)), + SET_FIELD(DefaultMode, RideMode::ContinuousCircuit), + SET_FIELD(OperatingSettings, { 0, 0, 0, 0, 0, 0 }), + SET_FIELD(Naming, { STR_RIDE_NAME_ALPINE_COASTER, STR_RIDE_DESCRIPTION_ALPINE_COASTER }), + SET_FIELD(NameConvention, { RideComponentType::Car, RideComponentType::Track, RideComponentType::Station }), + SET_FIELD(EnumName, nameof(RIDE_TYPE_ALPINE_ROLLER_COASTER)), + SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)), + SET_FIELD(Heights, {18, 24, 3, 7}), + SET_FIELD(MaxMass, 4), + SET_FIELD(LiftData, { OpenRCT2::Audio::SoundId::Null, 4, 5 }), + SET_FIELD(RatingsCalculationFunction, ride_ratings_calculate_alpine_coaster), + SET_FIELD(RatingsMultipliers, { 50, 30, 10 }), + SET_FIELD(UpkeepCosts, { 35, 20, 80, 8, 3, 10 }), + SET_FIELD(BuildCosts, { 22.50_GBP, 2.50_GBP, 50}), + SET_FIELD(DefaultPrices, { 20, 20 }), + SET_FIELD(DefaultMusic, MUSIC_OBJECT_GENTLE), + SET_FIELD(PhotoItem, ShopItem::Photo), + SET_FIELD(BonusValue, 65), + SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS( + { COLOUR_GREY, COLOUR_GREY, COLOUR_BLACK }, + )), + SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_ALPINE_COASTER_TRACK, SPR_RIDE_DESIGN_PREVIEW_ALPINE_COASTER_SUPPORTS }), + SET_FIELD(ColourKey, RideColourKey::Ride), +}; +// clang-format on diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index 900efba87a..fee025c4e0 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1124,7 +1124,34 @@ enum SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP = SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 12, SPR_G2_SINGLE_RAIL_END = SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 20, - SPR_G2_END = SPR_G2_SINGLE_RAIL_END, + SPR_RIDE_DESIGN_PREVIEW_ALPINE_COASTER_TRACK = SPR_G2_SINGLE_RAIL_END, + SPR_RIDE_DESIGN_PREVIEW_ALPINE_COASTER_SUPPORTS = SPR_RIDE_DESIGN_PREVIEW_ALPINE_COASTER_TRACK + 1, + SPR_G2_ALPINE_BEGIN = SPR_RIDE_DESIGN_PREVIEW_ALPINE_COASTER_TRACK + 2, + SPR_G2_ALPINE_TRACK_FLAT = SPR_G2_ALPINE_BEGIN, + SPR_G2_ALPINE_TRACK_GENTLE = SPR_G2_ALPINE_TRACK_FLAT + 2, + SPR_G2_ALPINE_TRACK_SMALL_CURVE = SPR_G2_ALPINE_TRACK_GENTLE + 12, + SPR_G2_ALPINE_TRACK_MEDIUM_CURVE = SPR_G2_ALPINE_TRACK_SMALL_CURVE + 12, + SPR_G2_ALPINE_TRACK_LARGE_CURVE = SPR_G2_ALPINE_TRACK_MEDIUM_CURVE + 20, + SPR_G2_ALPINE_TRACK_FLAT_DIAGONAL = SPR_G2_ALPINE_TRACK_LARGE_CURVE + 32, + SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL = SPR_G2_ALPINE_TRACK_FLAT_DIAGONAL + 4, + SPR_G2_ALPINE_TRACK_BANK_TRANSITION = SPR_G2_ALPINE_TRACK_GENTLE_DIAGONAL + 12, + SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL = SPR_G2_ALPINE_TRACK_BANK_TRANSITION + 40, + SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED = SPR_G2_ALPINE_TRACK_BANK_TRANSITION_DIAGONAL + 34, + SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED = SPR_G2_ALPINE_TRACK_SMALL_CURVE_BANKED + 14, + SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED = SPR_G2_ALPINE_TRACK_MEDIUM_CURVE_BANKED + 22, + SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE = SPR_G2_ALPINE_TRACK_LARGE_CURVE_BANKED + 32, + SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE = SPR_G2_ALPINE_TRACK_GENTLE_SMALL_CURVE + 16, + SPR_G2_ALPINE_TRACK_S_BEND = SPR_G2_ALPINE_TRACK_GENTLE_MEDIUM_CURVE + 40, + SPR_G2_ALPINE_TRACK_SMALL_HELIX = SPR_G2_ALPINE_TRACK_S_BEND + 16, + SPR_G2_ALPINE_TRACK_LARGE_HELIX = SPR_G2_ALPINE_TRACK_SMALL_HELIX + 28, + SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION = SPR_G2_ALPINE_TRACK_LARGE_HELIX + 44, + SPR_G2_ALPINE_LIFT_BEGIN = SPR_G2_ALPINE_TRACK_TURN_BANK_TRANSITION + 18, + SPR_G2_ALPINE_LIFT_TRACK_FLAT = SPR_G2_ALPINE_LIFT_BEGIN, + SPR_G2_ALPINE_LIFT_TRACK_GENTLE = SPR_G2_ALPINE_LIFT_TRACK_FLAT + 4, + SPR_G2_ALPINE_LIFT_TRACK_FLAT_DIAGONAL = SPR_G2_ALPINE_LIFT_TRACK_GENTLE + 12, + SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL = SPR_G2_ALPINE_LIFT_TRACK_FLAT_DIAGONAL + 4, + SPR_G2_ALPINE_END = SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 12, + SPR_G2_END = SPR_G2_ALPINE_END, SPR_CSG_BEGIN = SPR_G2_END, SPR_CSG_END = SPR_CSG_BEGIN + RCT1::Limits::Num_LL_CSG_Entries,