diff --git a/distribution/changelog.txt b/distribution/changelog.txt index c875c50b88..d9a6ecc83d 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -12,6 +12,7 @@ - Feature: [#17877] Add three real-life flying roller coaster colour schemes. - Feature: [#17900] Add “Classic Wooden Coaster” with shallow banked turns. - Feature: [#18057] Staff members now wait for passing or stalled vehicles before crossing railway tracks. +- Feature: [#18168] Add additional track pieces to the LIM Launched Coaster and the Looping Coaster. - Feature: [objects#198] Add additional pirate roofs. - Feature: [objects#205] Add additional glass roofs. - Feature: [objects#209] Add the Steel Roller Coaster train and 2-across Inverted Train from RollerCoaster Tycoon 1. diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 9490ca65bc..a04f68bb3a 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -15942,5 +15942,2057 @@ "path": "track/wooden/classic_wooden_preview_supports.png", "x_offset": 2, "y_offset": 1 + }, + { + "path": "track/lim/barrel_roll_left_1_1.png", + "x_offset": -22, + "y_offset": 9, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_1_2.png", + "x_offset": -11, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_1_3.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_1_4.png", + "x_offset": -22, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_1_5.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_1_6.png", + "x_offset": -12, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_2_1.png", + "x_offset": -19, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_2_2.png", + "x_offset": -22, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_2_3.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_2_4.png", + "x_offset": -28, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_2_5.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_2_6.png", + "x_offset": -32, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_3_1.png", + "x_offset": -29, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_3_2.png", + "x_offset": -2, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_3_3.png", + "x_offset": -25, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_3_4.png", + "x_offset": -27, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_3_5.png", + "x_offset": 2, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_3_6.png", + "x_offset": -22, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_4_1.png", + "x_offset": -15, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_4_2.png", + "x_offset": 1, + "y_offset": 18, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_4_3.png", + "x_offset": -12, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_4_4.png", + "x_offset": -10, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_4_5.png", + "x_offset": 11, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_left_4_6.png", + "x_offset": -22, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_1_1.png", + "x_offset": -23, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_1_2.png", + "x_offset": -11, + "y_offset": 16, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_1_3.png", + "x_offset": -28, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_1_4.png", + "x_offset": -23, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_1_5.png", + "x_offset": -21, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_1_6.png", + "x_offset": -23, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_2_1.png", + "x_offset": -22, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_2_2.png", + "x_offset": -22, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_2_3.png", + "x_offset": -10, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_2_4.png", + "x_offset": 3, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_2_5.png", + "x_offset": -7, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_2_6.png", + "x_offset": -6, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_3_1.png", + "x_offset": -1, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_3_2.png", + "x_offset": -4, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_3_3.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_3_4.png", + "x_offset": 0, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_3_5.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_3_6.png", + "x_offset": -22, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_4_1.png", + "x_offset": -9, + "y_offset": 9, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_4_2.png", + "x_offset": -20, + "y_offset": 7, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_4_3.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_4_4.png", + "x_offset": -28, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_4_5.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/barrel_roll_right_4_6.png", + "x_offset": -23, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_1_1.png", + "x_offset": -28, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_1_2.png", + "x_offset": -22, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_1_3.png", + "x_offset": -15, + "y_offset": -82, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_1_4.png", + "x_offset": -22, + "y_offset": 24, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_2_1.png", + "x_offset": -16, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_2_2.png", + "x_offset": 1, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_2_3.png", + "x_offset": -38, + "y_offset": -114, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_2_4.png", + "x_offset": -22, + "y_offset": 12, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_3_1.png", + "x_offset": -25, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_3_2.png", + "x_offset": -27, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_3_3.png", + "x_offset": -1, + "y_offset": -121, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_3_4.png", + "x_offset": -24, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_4_1.png", + "x_offset": -14, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_4_2.png", + "x_offset": -16, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_4_3.png", + "x_offset": 5, + "y_offset": -91, + "palette": "keep" + }, + { + "path": "track/lim/half_loop_4_4.png", + "x_offset": 6, + "y_offset": 16, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_1_1.png", + "x_offset": -22, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_1_2.png", + "x_offset": -22, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_1_3.png", + "x_offset": -21, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_1_4.png", + "x_offset": -23, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_2_1.png", + "x_offset": -22, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_2_2.png", + "x_offset": -25, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_2_3.png", + "x_offset": -25, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_2_4.png", + "x_offset": -20, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_3_1.png", + "x_offset": -23, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_3_2.png", + "x_offset": -24, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_3_3.png", + "x_offset": -23, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_3_4.png", + "x_offset": -23, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_4_1.png", + "x_offset": -21, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_4_2.png", + "x_offset": -23, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_4_3.png", + "x_offset": -23, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/lim/flat_to_steep_up_4_4.png", + "x_offset": -22, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_1_1.png", + "x_offset": -24, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_1_2.png", + "x_offset": -24, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_1_3.png", + "x_offset": -24, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_1_4.png", + "x_offset": -23, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_2_1.png", + "x_offset": -24, + "y_offset": -26, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_2_2.png", + "x_offset": -19, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_2_3.png", + "x_offset": -12, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_2_4.png", + "x_offset": -15, + "y_offset": -2, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_3_1.png", + "x_offset": -14, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_3_2.png", + "x_offset": -13, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_3_3.png", + "x_offset": -18, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_3_4.png", + "x_offset": -22, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_4_1.png", + "x_offset": -21, + "y_offset": -41, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_4_2.png", + "x_offset": -20, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_4_3.png", + "x_offset": -19, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/lim/steep_to_flat_up_4_4.png", + "x_offset": -22, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_1_1.png", + "x_offset": -22, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_1_2.png", + "x_offset": -21, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_1_3.png", + "x_offset": -29, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_1_4.png", + "x_offset": -22, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_1_5.png", + "x_offset": -22, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_2_1.png", + "x_offset": -22, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_2_2.png", + "x_offset": -32, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_2_3.png", + "x_offset": -23, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_2_4.png", + "x_offset": -19, + "y_offset": -52, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_2_5.png", + "x_offset": -15, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_3_1.png", + "x_offset": -16, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_3_2.png", + "x_offset": -13, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_3_3.png", + "x_offset": 17, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_3_4.png", + "x_offset": -8, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_3_5.png", + "x_offset": -16, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_4_1.png", + "x_offset": -24, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_4_2.png", + "x_offset": -24, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_4_3.png", + "x_offset": -14, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_4_4.png", + "x_offset": -14, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_left_4_5.png", + "x_offset": -22, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_1_1.png", + "x_offset": -22, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_1_2.png", + "x_offset": -23, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_1_3.png", + "x_offset": -21, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_1_4.png", + "x_offset": -30, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_1_5.png", + "x_offset": -32, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_2_1.png", + "x_offset": -22, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_2_2.png", + "x_offset": -16, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_2_3.png", + "x_offset": -24, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_2_4.png", + "x_offset": -16, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_2_5.png", + "x_offset": -22, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_3_1.png", + "x_offset": -18, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_3_2.png", + "x_offset": -16, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_3_3.png", + "x_offset": -26, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_3_4.png", + "x_offset": -29, + "y_offset": -53, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_3_5.png", + "x_offset": -23, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_4_1.png", + "x_offset": -22, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_4_2.png", + "x_offset": -10, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_4_3.png", + "x_offset": 17, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_4_4.png", + "x_offset": -11, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/lim/large_corkscrew_right_4_5.png", + "x_offset": -18, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_left_bank_to_gentle_up_1_1.png", + "x_offset": -26, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_left_bank_to_gentle_up_1_2.png", + "x_offset": -18, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_left_bank_to_gentle_up_2_1.png", + "x_offset": 37, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_left_bank_to_gentle_up_2_2.png", + "x_offset": -16, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_left_bank_to_gentle_up_2_3.png", + "x_offset": -38, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_left_bank_to_gentle_up_3_1.png", + "x_offset": -19, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_left_bank_to_gentle_up_3_2.png", + "x_offset": -6, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_left_bank_to_gentle_up_4_1.png", + "x_offset": -26, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_left_bank_to_gentle_up_4_2.png", + "x_offset": -29, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_right_bank_to_gentle_up_1_1.png", + "x_offset": -28, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_right_bank_to_gentle_up_1_2.png", + "x_offset": -26, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_right_bank_to_gentle_up_2_1.png", + "x_offset": -14, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_right_bank_to_gentle_up_2_2.png", + "x_offset": -29, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_right_bank_to_gentle_up_3_1.png", + "x_offset": -38, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_right_bank_to_gentle_up_3_2.png", + "x_offset": -38, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_right_bank_to_gentle_up_3_3.png", + "x_offset": -17, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_right_bank_to_gentle_up_4_1.png", + "x_offset": -7, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/lim/small_turn_right_bank_to_gentle_up_4_2.png", + "x_offset": -19, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_1_1.png", + "x_offset": -23, + "y_offset": -29, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_1_2.png", + "x_offset": -23, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_1_3.png", + "x_offset": -30, + "y_offset": -80, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_1_4.png", + "x_offset": 0, + "y_offset": -114, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_1_5.png", + "x_offset": -22, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_2_1.png", + "x_offset": -22, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_2_2.png", + "x_offset": 0, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_2_3.png", + "x_offset": 0, + "y_offset": -82, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_2_4.png", + "x_offset": -31, + "y_offset": -143, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_2_5.png", + "x_offset": -23, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_3_1.png", + "x_offset": -17, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_3_2.png", + "x_offset": 0, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_3_3.png", + "x_offset": -2, + "y_offset": -52, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_3_4.png", + "x_offset": -32, + "y_offset": -148, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_3_5.png", + "x_offset": -16, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_4_1.png", + "x_offset": -22, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_4_2.png", + "x_offset": -24, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_4_3.png", + "x_offset": -30, + "y_offset": -26, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_4_4.png", + "x_offset": -9, + "y_offset": -118, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_left_4_5.png", + "x_offset": -23, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_1_1.png", + "x_offset": -22, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_1_2.png", + "x_offset": -20, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_1_3.png", + "x_offset": -18, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_1_4.png", + "x_offset": -15, + "y_offset": -118, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_1_5.png", + "x_offset": -23, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_2_1.png", + "x_offset": -22, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_2_2.png", + "x_offset": -32, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_2_3.png", + "x_offset": -32, + "y_offset": -52, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_2_4.png", + "x_offset": -25, + "y_offset": -148, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_2_5.png", + "x_offset": -22, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_3_1.png", + "x_offset": -32, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_3_2.png", + "x_offset": -32, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_3_3.png", + "x_offset": -32, + "y_offset": -82, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_3_4.png", + "x_offset": -9, + "y_offset": -143, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_3_5.png", + "x_offset": -12, + "y_offset": -35, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_4_1.png", + "x_offset": -22, + "y_offset": -29, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_4_2.png", + "x_offset": -16, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_4_3.png", + "x_offset": -2, + "y_offset": -80, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_4_4.png", + "x_offset": -32, + "y_offset": -115, + "palette": "keep" + }, + { + "path": "track/lim/medium_half_loop_right_4_5.png", + "x_offset": -32, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_1_1.png", + "x_offset": -23, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_1_2.png", + "x_offset": -20, + "y_offset": -38, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_1_3.png", + "x_offset": -20, + "y_offset": -65, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_1_4.png", + "x_offset": -24, + "y_offset": -80, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_1_5.png", + "x_offset": -15, + "y_offset": -64, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_1_6.png", + "x_offset": -9, + "y_offset": -171, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_1_7.png", + "x_offset": -21, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_2_1.png", + "x_offset": -22, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_2_2.png", + "x_offset": -6, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_2_3.png", + "x_offset": -9, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_2_4.png", + "x_offset": -8, + "y_offset": -90, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_2_5.png", + "x_offset": -32, + "y_offset": -126, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_2_6.png", + "x_offset": -26, + "y_offset": -192, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_2_7.png", + "x_offset": -23, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_3_1.png", + "x_offset": -24, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_3_2.png", + "x_offset": -29, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_3_3.png", + "x_offset": -24, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_3_4.png", + "x_offset": -5, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_3_5.png", + "x_offset": -6, + "y_offset": -112, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_3_6.png", + "x_offset": -21, + "y_offset": -192, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_3_7.png", + "x_offset": -26, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_4_1.png", + "x_offset": -23, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_4_2.png", + "x_offset": -29, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_4_3.png", + "x_offset": -32, + "y_offset": -48, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_4_4.png", + "x_offset": -32, + "y_offset": -79, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_4_5.png", + "x_offset": 17, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_4_6.png", + "x_offset": -14, + "y_offset": -176, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_left_4_7.png", + "x_offset": -19, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_1_1.png", + "x_offset": -22, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_1_2.png", + "x_offset": -19, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_1_3.png", + "x_offset": -14, + "y_offset": -49, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_1_4.png", + "x_offset": 0, + "y_offset": -79, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_1_5.png", + "x_offset": -32, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_1_6.png", + "x_offset": -19, + "y_offset": -175, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_1_7.png", + "x_offset": -23, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_2_1.png", + "x_offset": -22, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_2_2.png", + "x_offset": -10, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_2_3.png", + "x_offset": -6, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_2_4.png", + "x_offset": -16, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_2_5.png", + "x_offset": -24, + "y_offset": -112, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_2_6.png", + "x_offset": -17, + "y_offset": -192, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_2_7.png", + "x_offset": -22, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_3_1.png", + "x_offset": -26, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_3_2.png", + "x_offset": -26, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_3_3.png", + "x_offset": -28, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_3_4.png", + "x_offset": -32, + "y_offset": -89, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_3_5.png", + "x_offset": 17, + "y_offset": -125, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_3_6.png", + "x_offset": 0, + "y_offset": -192, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_3_7.png", + "x_offset": -17, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_4_1.png", + "x_offset": -23, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_4_2.png", + "x_offset": -24, + "y_offset": -38, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_4_3.png", + "x_offset": -21, + "y_offset": -65, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_4_4.png", + "x_offset": -4, + "y_offset": -80, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_4_5.png", + "x_offset": -6, + "y_offset": -64, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_4_6.png", + "x_offset": -28, + "y_offset": -172, + "palette": "keep" + }, + { + "path": "track/lim/large_half_loop_right_4_7.png", + "x_offset": -27, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_1_1.png", + "x_offset": -22, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_1_2.png", + "x_offset": -12, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_1_3.png", + "x_offset": -11, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_1_4.png", + "x_offset": -20, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_2_1.png", + "x_offset": -16, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_2_2.png", + "x_offset": -22, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_2_3.png", + "x_offset": -23, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_2_4.png", + "x_offset": -21, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_3_1.png", + "x_offset": -20, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_3_2.png", + "x_offset": -21, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_3_3.png", + "x_offset": -1, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_3_4.png", + "x_offset": -23, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_4_1.png", + "x_offset": -16, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_4_2.png", + "x_offset": -11, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_4_3.png", + "x_offset": 16, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_left_4_4.png", + "x_offset": -21, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_1_1.png", + "x_offset": -22, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_1_2.png", + "x_offset": -28, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_1_3.png", + "x_offset": -21, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_1_4.png", + "x_offset": -24, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_2_1.png", + "x_offset": -22, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_2_2.png", + "x_offset": -16, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_2_3.png", + "x_offset": -13, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_2_4.png", + "x_offset": -11, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_3_1.png", + "x_offset": 3, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_3_2.png", + "x_offset": -9, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_3_3.png", + "x_offset": -11, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_3_4.png", + "x_offset": -21, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_4_1.png", + "x_offset": -16, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_4_2.png", + "x_offset": -27, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_4_3.png", + "x_offset": -24, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/lim/zero_g_roll_right_4_4.png", + "x_offset": -23, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_1_1.png", + "x_offset": -24, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_1_2.png", + "x_offset": -24, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_1_3.png", + "x_offset": -18, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_1_4.png", + "x_offset": -14, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_1_5.png", + "x_offset": -18, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_2_1.png", + "x_offset": -24, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_2_2.png", + "x_offset": -27, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_2_3.png", + "x_offset": -32, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_2_4.png", + "x_offset": -29, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_3_1.png", + "x_offset": -8, + "y_offset": -29, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_3_2.png", + "x_offset": -11, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_3_3.png", + "x_offset": -28, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_3_4.png", + "x_offset": -24, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_3_5.png", + "x_offset": 3, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_3_6.png", + "x_offset": -23, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_4_1.png", + "x_offset": -15, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_4_2.png", + "x_offset": -14, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_4_3.png", + "x_offset": -6, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_4_4.png", + "x_offset": -9, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_left_4_5.png", + "x_offset": -22, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_1_1.png", + "x_offset": -24, + "y_offset": -48, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_1_2.png", + "x_offset": -32, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_1_3.png", + "x_offset": -30, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_1_4.png", + "x_offset": -31, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_1_5.png", + "x_offset": -26, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_2_1.png", + "x_offset": 5, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_2_2.png", + "x_offset": -24, + "y_offset": -29, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_2_3.png", + "x_offset": -25, + "y_offset": -37, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_2_4.png", + "x_offset": -17, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_2_5.png", + "x_offset": -8, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_2_6.png", + "x_offset": -8, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_3_1.png", + "x_offset": -16, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_3_2.png", + "x_offset": -12, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_3_3.png", + "x_offset": -5, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_3_4.png", + "x_offset": -22, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_4_1.png", + "x_offset": -16, + "y_offset": -42, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_4_2.png", + "x_offset": 5, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_4_3.png", + "x_offset": -29, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_4_4.png", + "x_offset": -27, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/lim/large_zero_g_roll_right_4_5.png", + "x_offset": -23, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/lim/small_flat_to_steep_up_1.png", + "x_offset": -22, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/lim/small_flat_to_steep_up_2_1.png", + "x_offset": -19, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/lim/small_flat_to_steep_up_2_2.png", + "x_offset": -22, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/lim/small_flat_to_steep_up_3_1.png", + "x_offset": -3, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/lim/small_flat_to_steep_up_3_2.png", + "x_offset": -23, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/lim/small_flat_to_steep_up_4.png", + "x_offset": -22, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/lim/small_steep_to_flat_up_1.png", + "x_offset": -24, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/lim/small_steep_to_flat_up_2_1.png", + "x_offset": -10, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/lim/small_steep_to_flat_up_2_2.png", + "x_offset": -24, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/lim/small_steep_to_flat_up_3_1.png", + "x_offset": -22, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/lim/small_steep_to_flat_up_3_2.png", + "x_offset": -11, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/lim/small_steep_to_flat_up_4.png", + "x_offset": -22, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/lim/small_flat_to_steep_up_diag_1.png", + "x_offset": -32, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/lim/small_flat_to_steep_up_diag_2.png", + "x_offset": -10, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/lim/small_flat_to_steep_up_diag_3.png", + "x_offset": -32, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/lim/small_flat_to_steep_up_diag_4.png", + "x_offset": -10, + "y_offset": -29, + "palette": "keep" + }, + { + "path": "track/lim/small_steep_to_flat_up_diag_1.png", + "x_offset": -32, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/lim/small_steep_to_flat_up_diag_2.png", + "x_offset": -10, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/lim/small_steep_to_flat_up_diag_3.png", + "x_offset": -32, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/lim/small_steep_to_flat_up_diag_4.png", + "x_offset": -10, + "y_offset": -29, + "palette": "keep" } ] diff --git a/resources/g2/track/lim/barrel_roll_left_1_1.png b/resources/g2/track/lim/barrel_roll_left_1_1.png new file mode 100644 index 0000000000..398081ce77 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_1_1.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_1_2.png b/resources/g2/track/lim/barrel_roll_left_1_2.png new file mode 100644 index 0000000000..ddb4b81416 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_1_2.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_1_3.png b/resources/g2/track/lim/barrel_roll_left_1_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_1_3.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_1_4.png b/resources/g2/track/lim/barrel_roll_left_1_4.png new file mode 100644 index 0000000000..eec461ea92 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_1_4.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_1_5.png b/resources/g2/track/lim/barrel_roll_left_1_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_1_5.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_1_6.png b/resources/g2/track/lim/barrel_roll_left_1_6.png new file mode 100644 index 0000000000..5b485cb5d1 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_1_6.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_2_1.png b/resources/g2/track/lim/barrel_roll_left_2_1.png new file mode 100644 index 0000000000..3cc4f28b82 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_2_1.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_2_2.png b/resources/g2/track/lim/barrel_roll_left_2_2.png new file mode 100644 index 0000000000..5b7fa45a1d Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_2_2.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_2_3.png b/resources/g2/track/lim/barrel_roll_left_2_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_2_3.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_2_4.png b/resources/g2/track/lim/barrel_roll_left_2_4.png new file mode 100644 index 0000000000..fb5f5a8429 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_2_4.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_2_5.png b/resources/g2/track/lim/barrel_roll_left_2_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_2_5.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_2_6.png b/resources/g2/track/lim/barrel_roll_left_2_6.png new file mode 100644 index 0000000000..d40a425a59 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_2_6.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_3_1.png b/resources/g2/track/lim/barrel_roll_left_3_1.png new file mode 100644 index 0000000000..8ec2793fee Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_3_1.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_3_2.png b/resources/g2/track/lim/barrel_roll_left_3_2.png new file mode 100644 index 0000000000..ed5c277897 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_3_2.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_3_3.png b/resources/g2/track/lim/barrel_roll_left_3_3.png new file mode 100644 index 0000000000..2ba061d0dc Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_3_3.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_3_4.png b/resources/g2/track/lim/barrel_roll_left_3_4.png new file mode 100644 index 0000000000..c559b1289c Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_3_4.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_3_5.png b/resources/g2/track/lim/barrel_roll_left_3_5.png new file mode 100644 index 0000000000..381d5608d9 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_3_5.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_3_6.png b/resources/g2/track/lim/barrel_roll_left_3_6.png new file mode 100644 index 0000000000..04c6ec0cc7 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_3_6.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_4_1.png b/resources/g2/track/lim/barrel_roll_left_4_1.png new file mode 100644 index 0000000000..76c34595dc Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_4_1.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_4_2.png b/resources/g2/track/lim/barrel_roll_left_4_2.png new file mode 100644 index 0000000000..478845f497 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_4_2.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_4_3.png b/resources/g2/track/lim/barrel_roll_left_4_3.png new file mode 100644 index 0000000000..5e3c42805c Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_4_3.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_4_4.png b/resources/g2/track/lim/barrel_roll_left_4_4.png new file mode 100644 index 0000000000..7f83373351 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_4_4.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_4_5.png b/resources/g2/track/lim/barrel_roll_left_4_5.png new file mode 100644 index 0000000000..3de2a9eba4 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_4_5.png differ diff --git a/resources/g2/track/lim/barrel_roll_left_4_6.png b/resources/g2/track/lim/barrel_roll_left_4_6.png new file mode 100644 index 0000000000..02d58e0402 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_left_4_6.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_1_1.png b/resources/g2/track/lim/barrel_roll_right_1_1.png new file mode 100644 index 0000000000..e27227e9ff Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_1_1.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_1_2.png b/resources/g2/track/lim/barrel_roll_right_1_2.png new file mode 100644 index 0000000000..212d509c64 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_1_2.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_1_3.png b/resources/g2/track/lim/barrel_roll_right_1_3.png new file mode 100644 index 0000000000..e7c7cff923 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_1_3.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_1_4.png b/resources/g2/track/lim/barrel_roll_right_1_4.png new file mode 100644 index 0000000000..f4f3098fd8 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_1_4.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_1_5.png b/resources/g2/track/lim/barrel_roll_right_1_5.png new file mode 100644 index 0000000000..f0feb77571 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_1_5.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_1_6.png b/resources/g2/track/lim/barrel_roll_right_1_6.png new file mode 100644 index 0000000000..9add0f12d5 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_1_6.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_2_1.png b/resources/g2/track/lim/barrel_roll_right_2_1.png new file mode 100644 index 0000000000..2c2445d151 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_2_1.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_2_2.png b/resources/g2/track/lim/barrel_roll_right_2_2.png new file mode 100644 index 0000000000..dc335241e0 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_2_2.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_2_3.png b/resources/g2/track/lim/barrel_roll_right_2_3.png new file mode 100644 index 0000000000..8e7ff731d2 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_2_3.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_2_4.png b/resources/g2/track/lim/barrel_roll_right_2_4.png new file mode 100644 index 0000000000..5921f1f986 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_2_4.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_2_5.png b/resources/g2/track/lim/barrel_roll_right_2_5.png new file mode 100644 index 0000000000..d61f53c726 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_2_5.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_2_6.png b/resources/g2/track/lim/barrel_roll_right_2_6.png new file mode 100644 index 0000000000..52f253a6ac Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_2_6.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_3_1.png b/resources/g2/track/lim/barrel_roll_right_3_1.png new file mode 100644 index 0000000000..5acc636dfa Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_3_1.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_3_2.png b/resources/g2/track/lim/barrel_roll_right_3_2.png new file mode 100644 index 0000000000..9e8845b6d7 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_3_2.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_3_3.png b/resources/g2/track/lim/barrel_roll_right_3_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_3_3.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_3_4.png b/resources/g2/track/lim/barrel_roll_right_3_4.png new file mode 100644 index 0000000000..5382875ed0 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_3_4.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_3_5.png b/resources/g2/track/lim/barrel_roll_right_3_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_3_5.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_3_6.png b/resources/g2/track/lim/barrel_roll_right_3_6.png new file mode 100644 index 0000000000..c4a49f63cf Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_3_6.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_4_1.png b/resources/g2/track/lim/barrel_roll_right_4_1.png new file mode 100644 index 0000000000..ba6ba2cc6b Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_4_1.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_4_2.png b/resources/g2/track/lim/barrel_roll_right_4_2.png new file mode 100644 index 0000000000..a8152c48e0 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_4_2.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_4_3.png b/resources/g2/track/lim/barrel_roll_right_4_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_4_3.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_4_4.png b/resources/g2/track/lim/barrel_roll_right_4_4.png new file mode 100644 index 0000000000..5496ce9c1c Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_4_4.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_4_5.png b/resources/g2/track/lim/barrel_roll_right_4_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_4_5.png differ diff --git a/resources/g2/track/lim/barrel_roll_right_4_6.png b/resources/g2/track/lim/barrel_roll_right_4_6.png new file mode 100644 index 0000000000..58339f4d6f Binary files /dev/null and b/resources/g2/track/lim/barrel_roll_right_4_6.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_1_1.png b/resources/g2/track/lim/flat_to_steep_up_1_1.png new file mode 100644 index 0000000000..22df0b3252 Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_1_1.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_1_2.png b/resources/g2/track/lim/flat_to_steep_up_1_2.png new file mode 100644 index 0000000000..79c919a18c Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_1_2.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_1_3.png b/resources/g2/track/lim/flat_to_steep_up_1_3.png new file mode 100644 index 0000000000..9bac72e4a7 Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_1_3.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_1_4.png b/resources/g2/track/lim/flat_to_steep_up_1_4.png new file mode 100644 index 0000000000..68be3b991e Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_1_4.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_2_1.png b/resources/g2/track/lim/flat_to_steep_up_2_1.png new file mode 100644 index 0000000000..ae34fe0527 Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_2_1.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_2_2.png b/resources/g2/track/lim/flat_to_steep_up_2_2.png new file mode 100644 index 0000000000..9fb114614a Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_2_2.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_2_3.png b/resources/g2/track/lim/flat_to_steep_up_2_3.png new file mode 100644 index 0000000000..3d5b5fba88 Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_2_3.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_2_4.png b/resources/g2/track/lim/flat_to_steep_up_2_4.png new file mode 100644 index 0000000000..98105ca86a Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_2_4.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_3_1.png b/resources/g2/track/lim/flat_to_steep_up_3_1.png new file mode 100644 index 0000000000..6758f0db39 Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_3_1.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_3_2.png b/resources/g2/track/lim/flat_to_steep_up_3_2.png new file mode 100644 index 0000000000..7f2cb575b3 Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_3_2.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_3_3.png b/resources/g2/track/lim/flat_to_steep_up_3_3.png new file mode 100644 index 0000000000..8ef3870059 Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_3_3.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_3_4.png b/resources/g2/track/lim/flat_to_steep_up_3_4.png new file mode 100644 index 0000000000..48260fbfea Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_3_4.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_4_1.png b/resources/g2/track/lim/flat_to_steep_up_4_1.png new file mode 100644 index 0000000000..a9569f313b Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_4_1.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_4_2.png b/resources/g2/track/lim/flat_to_steep_up_4_2.png new file mode 100644 index 0000000000..c0ef603615 Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_4_2.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_4_3.png b/resources/g2/track/lim/flat_to_steep_up_4_3.png new file mode 100644 index 0000000000..792d8d0c6d Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_4_3.png differ diff --git a/resources/g2/track/lim/flat_to_steep_up_4_4.png b/resources/g2/track/lim/flat_to_steep_up_4_4.png new file mode 100644 index 0000000000..05863402fa Binary files /dev/null and b/resources/g2/track/lim/flat_to_steep_up_4_4.png differ diff --git a/resources/g2/track/lim/half_loop_1_1.png b/resources/g2/track/lim/half_loop_1_1.png new file mode 100644 index 0000000000..0e33251680 Binary files /dev/null and b/resources/g2/track/lim/half_loop_1_1.png differ diff --git a/resources/g2/track/lim/half_loop_1_2.png b/resources/g2/track/lim/half_loop_1_2.png new file mode 100644 index 0000000000..ade857ca4c Binary files /dev/null and b/resources/g2/track/lim/half_loop_1_2.png differ diff --git a/resources/g2/track/lim/half_loop_1_3.png b/resources/g2/track/lim/half_loop_1_3.png new file mode 100644 index 0000000000..12dfcfac25 Binary files /dev/null and b/resources/g2/track/lim/half_loop_1_3.png differ diff --git a/resources/g2/track/lim/half_loop_1_4.png b/resources/g2/track/lim/half_loop_1_4.png new file mode 100644 index 0000000000..8773d77d07 Binary files /dev/null and b/resources/g2/track/lim/half_loop_1_4.png differ diff --git a/resources/g2/track/lim/half_loop_2_1.png b/resources/g2/track/lim/half_loop_2_1.png new file mode 100644 index 0000000000..3718652d68 Binary files /dev/null and b/resources/g2/track/lim/half_loop_2_1.png differ diff --git a/resources/g2/track/lim/half_loop_2_2.png b/resources/g2/track/lim/half_loop_2_2.png new file mode 100644 index 0000000000..046ecc50be Binary files /dev/null and b/resources/g2/track/lim/half_loop_2_2.png differ diff --git a/resources/g2/track/lim/half_loop_2_3.png b/resources/g2/track/lim/half_loop_2_3.png new file mode 100644 index 0000000000..6a2a0823f5 Binary files /dev/null and b/resources/g2/track/lim/half_loop_2_3.png differ diff --git a/resources/g2/track/lim/half_loop_2_4.png b/resources/g2/track/lim/half_loop_2_4.png new file mode 100644 index 0000000000..c90fbdbe49 Binary files /dev/null and b/resources/g2/track/lim/half_loop_2_4.png differ diff --git a/resources/g2/track/lim/half_loop_3_1.png b/resources/g2/track/lim/half_loop_3_1.png new file mode 100644 index 0000000000..b599c35a12 Binary files /dev/null and b/resources/g2/track/lim/half_loop_3_1.png differ diff --git a/resources/g2/track/lim/half_loop_3_2.png b/resources/g2/track/lim/half_loop_3_2.png new file mode 100644 index 0000000000..26ad80ad89 Binary files /dev/null and b/resources/g2/track/lim/half_loop_3_2.png differ diff --git a/resources/g2/track/lim/half_loop_3_3.png b/resources/g2/track/lim/half_loop_3_3.png new file mode 100644 index 0000000000..088f7bd206 Binary files /dev/null and b/resources/g2/track/lim/half_loop_3_3.png differ diff --git a/resources/g2/track/lim/half_loop_3_4.png b/resources/g2/track/lim/half_loop_3_4.png new file mode 100644 index 0000000000..369985ea0a Binary files /dev/null and b/resources/g2/track/lim/half_loop_3_4.png differ diff --git a/resources/g2/track/lim/half_loop_4_1.png b/resources/g2/track/lim/half_loop_4_1.png new file mode 100644 index 0000000000..278671de54 Binary files /dev/null and b/resources/g2/track/lim/half_loop_4_1.png differ diff --git a/resources/g2/track/lim/half_loop_4_2.png b/resources/g2/track/lim/half_loop_4_2.png new file mode 100644 index 0000000000..c0492ff12e Binary files /dev/null and b/resources/g2/track/lim/half_loop_4_2.png differ diff --git a/resources/g2/track/lim/half_loop_4_3.png b/resources/g2/track/lim/half_loop_4_3.png new file mode 100644 index 0000000000..a02407d328 Binary files /dev/null and b/resources/g2/track/lim/half_loop_4_3.png differ diff --git a/resources/g2/track/lim/half_loop_4_4.png b/resources/g2/track/lim/half_loop_4_4.png new file mode 100644 index 0000000000..a7ba6444f9 Binary files /dev/null and b/resources/g2/track/lim/half_loop_4_4.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_1_1.png b/resources/g2/track/lim/large_corkscrew_left_1_1.png new file mode 100644 index 0000000000..c7d5df2240 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_1_1.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_1_2.png b/resources/g2/track/lim/large_corkscrew_left_1_2.png new file mode 100644 index 0000000000..05664e31b3 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_1_2.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_1_3.png b/resources/g2/track/lim/large_corkscrew_left_1_3.png new file mode 100644 index 0000000000..364316468b Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_1_3.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_1_4.png b/resources/g2/track/lim/large_corkscrew_left_1_4.png new file mode 100644 index 0000000000..07f30b431e Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_1_4.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_1_5.png b/resources/g2/track/lim/large_corkscrew_left_1_5.png new file mode 100644 index 0000000000..d1ca673414 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_1_5.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_2_1.png b/resources/g2/track/lim/large_corkscrew_left_2_1.png new file mode 100644 index 0000000000..76552833f1 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_2_1.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_2_2.png b/resources/g2/track/lim/large_corkscrew_left_2_2.png new file mode 100644 index 0000000000..161180fd6f Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_2_2.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_2_3.png b/resources/g2/track/lim/large_corkscrew_left_2_3.png new file mode 100644 index 0000000000..0e0bd416cc Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_2_3.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_2_4.png b/resources/g2/track/lim/large_corkscrew_left_2_4.png new file mode 100644 index 0000000000..a8038b61d0 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_2_4.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_2_5.png b/resources/g2/track/lim/large_corkscrew_left_2_5.png new file mode 100644 index 0000000000..7d2e1da10e Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_2_5.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_3_1.png b/resources/g2/track/lim/large_corkscrew_left_3_1.png new file mode 100644 index 0000000000..42a6791efb Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_3_1.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_3_2.png b/resources/g2/track/lim/large_corkscrew_left_3_2.png new file mode 100644 index 0000000000..94f56c82fa Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_3_2.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_3_3.png b/resources/g2/track/lim/large_corkscrew_left_3_3.png new file mode 100644 index 0000000000..ef0e12e20f Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_3_3.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_3_4.png b/resources/g2/track/lim/large_corkscrew_left_3_4.png new file mode 100644 index 0000000000..61ab88c879 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_3_4.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_3_5.png b/resources/g2/track/lim/large_corkscrew_left_3_5.png new file mode 100644 index 0000000000..3415ee57d1 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_3_5.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_4_1.png b/resources/g2/track/lim/large_corkscrew_left_4_1.png new file mode 100644 index 0000000000..53c79e1a4e Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_4_1.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_4_2.png b/resources/g2/track/lim/large_corkscrew_left_4_2.png new file mode 100644 index 0000000000..bea0ae1a04 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_4_2.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_4_3.png b/resources/g2/track/lim/large_corkscrew_left_4_3.png new file mode 100644 index 0000000000..125a00f9c4 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_4_3.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_4_4.png b/resources/g2/track/lim/large_corkscrew_left_4_4.png new file mode 100644 index 0000000000..27537ddfee Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_4_4.png differ diff --git a/resources/g2/track/lim/large_corkscrew_left_4_5.png b/resources/g2/track/lim/large_corkscrew_left_4_5.png new file mode 100644 index 0000000000..eaa6415537 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_left_4_5.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_1_1.png b/resources/g2/track/lim/large_corkscrew_right_1_1.png new file mode 100644 index 0000000000..a5f9d67bcb Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_1_1.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_1_2.png b/resources/g2/track/lim/large_corkscrew_right_1_2.png new file mode 100644 index 0000000000..024610a721 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_1_2.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_1_3.png b/resources/g2/track/lim/large_corkscrew_right_1_3.png new file mode 100644 index 0000000000..d086e66d51 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_1_3.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_1_4.png b/resources/g2/track/lim/large_corkscrew_right_1_4.png new file mode 100644 index 0000000000..a66fad6962 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_1_4.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_1_5.png b/resources/g2/track/lim/large_corkscrew_right_1_5.png new file mode 100644 index 0000000000..483a0f732f Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_1_5.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_2_1.png b/resources/g2/track/lim/large_corkscrew_right_2_1.png new file mode 100644 index 0000000000..00a755e787 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_2_1.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_2_2.png b/resources/g2/track/lim/large_corkscrew_right_2_2.png new file mode 100644 index 0000000000..ad977228ed Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_2_2.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_2_3.png b/resources/g2/track/lim/large_corkscrew_right_2_3.png new file mode 100644 index 0000000000..170e7fa233 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_2_3.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_2_4.png b/resources/g2/track/lim/large_corkscrew_right_2_4.png new file mode 100644 index 0000000000..2bc0a17544 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_2_4.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_2_5.png b/resources/g2/track/lim/large_corkscrew_right_2_5.png new file mode 100644 index 0000000000..e235b824a5 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_2_5.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_3_1.png b/resources/g2/track/lim/large_corkscrew_right_3_1.png new file mode 100644 index 0000000000..2beae14770 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_3_1.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_3_2.png b/resources/g2/track/lim/large_corkscrew_right_3_2.png new file mode 100644 index 0000000000..17bd4c1822 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_3_2.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_3_3.png b/resources/g2/track/lim/large_corkscrew_right_3_3.png new file mode 100644 index 0000000000..1ff767e0b1 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_3_3.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_3_4.png b/resources/g2/track/lim/large_corkscrew_right_3_4.png new file mode 100644 index 0000000000..4a3ac19e95 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_3_4.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_3_5.png b/resources/g2/track/lim/large_corkscrew_right_3_5.png new file mode 100644 index 0000000000..c7ac9706ed Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_3_5.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_4_1.png b/resources/g2/track/lim/large_corkscrew_right_4_1.png new file mode 100644 index 0000000000..7662be1036 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_4_1.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_4_2.png b/resources/g2/track/lim/large_corkscrew_right_4_2.png new file mode 100644 index 0000000000..c1b1f29ffc Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_4_2.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_4_3.png b/resources/g2/track/lim/large_corkscrew_right_4_3.png new file mode 100644 index 0000000000..89b41b0eef Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_4_3.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_4_4.png b/resources/g2/track/lim/large_corkscrew_right_4_4.png new file mode 100644 index 0000000000..6ac7d4383b Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_4_4.png differ diff --git a/resources/g2/track/lim/large_corkscrew_right_4_5.png b/resources/g2/track/lim/large_corkscrew_right_4_5.png new file mode 100644 index 0000000000..7f48e8c162 Binary files /dev/null and b/resources/g2/track/lim/large_corkscrew_right_4_5.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_1_1.png b/resources/g2/track/lim/large_half_loop_left_1_1.png new file mode 100644 index 0000000000..236706398a Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_1_1.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_1_2.png b/resources/g2/track/lim/large_half_loop_left_1_2.png new file mode 100644 index 0000000000..82427afe60 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_1_2.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_1_3.png b/resources/g2/track/lim/large_half_loop_left_1_3.png new file mode 100644 index 0000000000..f57d9ffc12 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_1_3.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_1_4.png b/resources/g2/track/lim/large_half_loop_left_1_4.png new file mode 100644 index 0000000000..563e219597 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_1_4.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_1_5.png b/resources/g2/track/lim/large_half_loop_left_1_5.png new file mode 100644 index 0000000000..bb31d97215 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_1_5.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_1_6.png b/resources/g2/track/lim/large_half_loop_left_1_6.png new file mode 100644 index 0000000000..0318e4dc55 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_1_6.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_1_7.png b/resources/g2/track/lim/large_half_loop_left_1_7.png new file mode 100644 index 0000000000..90559da644 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_1_7.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_2_1.png b/resources/g2/track/lim/large_half_loop_left_2_1.png new file mode 100644 index 0000000000..8993064b37 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_2_1.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_2_2.png b/resources/g2/track/lim/large_half_loop_left_2_2.png new file mode 100644 index 0000000000..e19a66c766 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_2_2.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_2_3.png b/resources/g2/track/lim/large_half_loop_left_2_3.png new file mode 100644 index 0000000000..33b6431401 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_2_3.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_2_4.png b/resources/g2/track/lim/large_half_loop_left_2_4.png new file mode 100644 index 0000000000..761cd71794 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_2_4.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_2_5.png b/resources/g2/track/lim/large_half_loop_left_2_5.png new file mode 100644 index 0000000000..f6ea93349d Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_2_5.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_2_6.png b/resources/g2/track/lim/large_half_loop_left_2_6.png new file mode 100644 index 0000000000..a1bf0a150c Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_2_6.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_2_7.png b/resources/g2/track/lim/large_half_loop_left_2_7.png new file mode 100644 index 0000000000..31ce4384b6 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_2_7.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_3_1.png b/resources/g2/track/lim/large_half_loop_left_3_1.png new file mode 100644 index 0000000000..85c8a45e01 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_3_1.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_3_2.png b/resources/g2/track/lim/large_half_loop_left_3_2.png new file mode 100644 index 0000000000..bc7ca86f92 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_3_2.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_3_3.png b/resources/g2/track/lim/large_half_loop_left_3_3.png new file mode 100644 index 0000000000..4ea2458f33 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_3_3.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_3_4.png b/resources/g2/track/lim/large_half_loop_left_3_4.png new file mode 100644 index 0000000000..2d0ec0d977 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_3_4.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_3_5.png b/resources/g2/track/lim/large_half_loop_left_3_5.png new file mode 100644 index 0000000000..320ebb05ca Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_3_5.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_3_6.png b/resources/g2/track/lim/large_half_loop_left_3_6.png new file mode 100644 index 0000000000..8d4c3d1c22 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_3_6.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_3_7.png b/resources/g2/track/lim/large_half_loop_left_3_7.png new file mode 100644 index 0000000000..d90c62e5ce Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_3_7.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_4_1.png b/resources/g2/track/lim/large_half_loop_left_4_1.png new file mode 100644 index 0000000000..2cc553d3e0 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_4_1.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_4_2.png b/resources/g2/track/lim/large_half_loop_left_4_2.png new file mode 100644 index 0000000000..975099e2bd Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_4_2.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_4_3.png b/resources/g2/track/lim/large_half_loop_left_4_3.png new file mode 100644 index 0000000000..9e70887959 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_4_3.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_4_4.png b/resources/g2/track/lim/large_half_loop_left_4_4.png new file mode 100644 index 0000000000..7636d296d1 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_4_4.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_4_5.png b/resources/g2/track/lim/large_half_loop_left_4_5.png new file mode 100644 index 0000000000..18b03316fb Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_4_5.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_4_6.png b/resources/g2/track/lim/large_half_loop_left_4_6.png new file mode 100644 index 0000000000..9ad8ce1091 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_4_6.png differ diff --git a/resources/g2/track/lim/large_half_loop_left_4_7.png b/resources/g2/track/lim/large_half_loop_left_4_7.png new file mode 100644 index 0000000000..593be9141e Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_left_4_7.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_1_1.png b/resources/g2/track/lim/large_half_loop_right_1_1.png new file mode 100644 index 0000000000..3a66c9c719 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_1_1.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_1_2.png b/resources/g2/track/lim/large_half_loop_right_1_2.png new file mode 100644 index 0000000000..95738bb9cb Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_1_2.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_1_3.png b/resources/g2/track/lim/large_half_loop_right_1_3.png new file mode 100644 index 0000000000..da4b00117b Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_1_3.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_1_4.png b/resources/g2/track/lim/large_half_loop_right_1_4.png new file mode 100644 index 0000000000..b19f02a0f9 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_1_4.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_1_5.png b/resources/g2/track/lim/large_half_loop_right_1_5.png new file mode 100644 index 0000000000..d4372e387c Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_1_5.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_1_6.png b/resources/g2/track/lim/large_half_loop_right_1_6.png new file mode 100644 index 0000000000..913a3d4813 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_1_6.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_1_7.png b/resources/g2/track/lim/large_half_loop_right_1_7.png new file mode 100644 index 0000000000..0cb8250918 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_1_7.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_2_1.png b/resources/g2/track/lim/large_half_loop_right_2_1.png new file mode 100644 index 0000000000..72d00c3440 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_2_1.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_2_2.png b/resources/g2/track/lim/large_half_loop_right_2_2.png new file mode 100644 index 0000000000..88775428d5 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_2_2.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_2_3.png b/resources/g2/track/lim/large_half_loop_right_2_3.png new file mode 100644 index 0000000000..6a216c6572 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_2_3.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_2_4.png b/resources/g2/track/lim/large_half_loop_right_2_4.png new file mode 100644 index 0000000000..9c54a68b4f Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_2_4.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_2_5.png b/resources/g2/track/lim/large_half_loop_right_2_5.png new file mode 100644 index 0000000000..9e06633cf3 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_2_5.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_2_6.png b/resources/g2/track/lim/large_half_loop_right_2_6.png new file mode 100644 index 0000000000..a945490bf8 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_2_6.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_2_7.png b/resources/g2/track/lim/large_half_loop_right_2_7.png new file mode 100644 index 0000000000..a142de2d6e Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_2_7.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_3_1.png b/resources/g2/track/lim/large_half_loop_right_3_1.png new file mode 100644 index 0000000000..94ec7d811f Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_3_1.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_3_2.png b/resources/g2/track/lim/large_half_loop_right_3_2.png new file mode 100644 index 0000000000..fa995ebd87 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_3_2.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_3_3.png b/resources/g2/track/lim/large_half_loop_right_3_3.png new file mode 100644 index 0000000000..f085f3c3ec Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_3_3.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_3_4.png b/resources/g2/track/lim/large_half_loop_right_3_4.png new file mode 100644 index 0000000000..b7a2e0a2f9 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_3_4.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_3_5.png b/resources/g2/track/lim/large_half_loop_right_3_5.png new file mode 100644 index 0000000000..37f1e22597 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_3_5.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_3_6.png b/resources/g2/track/lim/large_half_loop_right_3_6.png new file mode 100644 index 0000000000..3ec372ba60 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_3_6.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_3_7.png b/resources/g2/track/lim/large_half_loop_right_3_7.png new file mode 100644 index 0000000000..2eb07c4ada Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_3_7.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_4_1.png b/resources/g2/track/lim/large_half_loop_right_4_1.png new file mode 100644 index 0000000000..6624139f83 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_4_1.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_4_2.png b/resources/g2/track/lim/large_half_loop_right_4_2.png new file mode 100644 index 0000000000..27b4cb7730 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_4_2.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_4_3.png b/resources/g2/track/lim/large_half_loop_right_4_3.png new file mode 100644 index 0000000000..ca6ce5eefe Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_4_3.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_4_4.png b/resources/g2/track/lim/large_half_loop_right_4_4.png new file mode 100644 index 0000000000..8c8fdccde6 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_4_4.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_4_5.png b/resources/g2/track/lim/large_half_loop_right_4_5.png new file mode 100644 index 0000000000..56699d4cc0 Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_4_5.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_4_6.png b/resources/g2/track/lim/large_half_loop_right_4_6.png new file mode 100644 index 0000000000..03bbdf559b Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_4_6.png differ diff --git a/resources/g2/track/lim/large_half_loop_right_4_7.png b/resources/g2/track/lim/large_half_loop_right_4_7.png new file mode 100644 index 0000000000..c9847d64ca Binary files /dev/null and b/resources/g2/track/lim/large_half_loop_right_4_7.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_1_1.png b/resources/g2/track/lim/large_zero_g_roll_left_1_1.png new file mode 100644 index 0000000000..1a292bd4bf Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_1_1.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_1_2.png b/resources/g2/track/lim/large_zero_g_roll_left_1_2.png new file mode 100644 index 0000000000..8eab036aea Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_1_2.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_1_3.png b/resources/g2/track/lim/large_zero_g_roll_left_1_3.png new file mode 100644 index 0000000000..ca11c84742 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_1_3.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_1_4.png b/resources/g2/track/lim/large_zero_g_roll_left_1_4.png new file mode 100644 index 0000000000..c8220bdafb Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_1_4.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_1_5.png b/resources/g2/track/lim/large_zero_g_roll_left_1_5.png new file mode 100644 index 0000000000..8cc7fb0139 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_1_5.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_2_1.png b/resources/g2/track/lim/large_zero_g_roll_left_2_1.png new file mode 100644 index 0000000000..feac097ae2 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_2_1.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_2_2.png b/resources/g2/track/lim/large_zero_g_roll_left_2_2.png new file mode 100644 index 0000000000..8fe9e0751c Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_2_2.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_2_3.png b/resources/g2/track/lim/large_zero_g_roll_left_2_3.png new file mode 100644 index 0000000000..d35eb555ac Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_2_3.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_2_4.png b/resources/g2/track/lim/large_zero_g_roll_left_2_4.png new file mode 100644 index 0000000000..5ea1e238f1 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_2_4.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_3_1.png b/resources/g2/track/lim/large_zero_g_roll_left_3_1.png new file mode 100644 index 0000000000..b2fe24cd5d Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_3_1.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_3_2.png b/resources/g2/track/lim/large_zero_g_roll_left_3_2.png new file mode 100644 index 0000000000..77a7b709b7 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_3_2.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_3_3.png b/resources/g2/track/lim/large_zero_g_roll_left_3_3.png new file mode 100644 index 0000000000..421e56f5a6 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_3_3.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_3_4.png b/resources/g2/track/lim/large_zero_g_roll_left_3_4.png new file mode 100644 index 0000000000..d86a8bf191 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_3_4.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_3_5.png b/resources/g2/track/lim/large_zero_g_roll_left_3_5.png new file mode 100644 index 0000000000..4ce89beb9c Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_3_5.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_3_6.png b/resources/g2/track/lim/large_zero_g_roll_left_3_6.png new file mode 100644 index 0000000000..5b16e153c3 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_3_6.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_4_1.png b/resources/g2/track/lim/large_zero_g_roll_left_4_1.png new file mode 100644 index 0000000000..eb21de73f0 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_4_1.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_4_2.png b/resources/g2/track/lim/large_zero_g_roll_left_4_2.png new file mode 100644 index 0000000000..7027f4e55f Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_4_2.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_4_3.png b/resources/g2/track/lim/large_zero_g_roll_left_4_3.png new file mode 100644 index 0000000000..202efe7029 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_4_3.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_4_4.png b/resources/g2/track/lim/large_zero_g_roll_left_4_4.png new file mode 100644 index 0000000000..a5d3045f7d Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_4_4.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_left_4_5.png b/resources/g2/track/lim/large_zero_g_roll_left_4_5.png new file mode 100644 index 0000000000..4d13f9f770 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_left_4_5.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_1_1.png b/resources/g2/track/lim/large_zero_g_roll_right_1_1.png new file mode 100644 index 0000000000..1c0cf66841 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_1_1.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_1_2.png b/resources/g2/track/lim/large_zero_g_roll_right_1_2.png new file mode 100644 index 0000000000..ab78173ce1 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_1_2.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_1_3.png b/resources/g2/track/lim/large_zero_g_roll_right_1_3.png new file mode 100644 index 0000000000..12ce670f78 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_1_3.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_1_4.png b/resources/g2/track/lim/large_zero_g_roll_right_1_4.png new file mode 100644 index 0000000000..394b3ea9b5 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_1_4.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_1_5.png b/resources/g2/track/lim/large_zero_g_roll_right_1_5.png new file mode 100644 index 0000000000..9a75167df5 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_1_5.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_2_1.png b/resources/g2/track/lim/large_zero_g_roll_right_2_1.png new file mode 100644 index 0000000000..bc6d47957f Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_2_1.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_2_2.png b/resources/g2/track/lim/large_zero_g_roll_right_2_2.png new file mode 100644 index 0000000000..1b71621f89 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_2_2.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_2_3.png b/resources/g2/track/lim/large_zero_g_roll_right_2_3.png new file mode 100644 index 0000000000..f56bc871db Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_2_3.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_2_4.png b/resources/g2/track/lim/large_zero_g_roll_right_2_4.png new file mode 100644 index 0000000000..86bd32bf53 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_2_4.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_2_5.png b/resources/g2/track/lim/large_zero_g_roll_right_2_5.png new file mode 100644 index 0000000000..74aaad6d80 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_2_5.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_2_6.png b/resources/g2/track/lim/large_zero_g_roll_right_2_6.png new file mode 100644 index 0000000000..6432fd00dc Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_2_6.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_3_1.png b/resources/g2/track/lim/large_zero_g_roll_right_3_1.png new file mode 100644 index 0000000000..b0f478d6e0 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_3_1.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_3_2.png b/resources/g2/track/lim/large_zero_g_roll_right_3_2.png new file mode 100644 index 0000000000..3aa1594046 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_3_2.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_3_3.png b/resources/g2/track/lim/large_zero_g_roll_right_3_3.png new file mode 100644 index 0000000000..612bd7eebb Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_3_3.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_3_4.png b/resources/g2/track/lim/large_zero_g_roll_right_3_4.png new file mode 100644 index 0000000000..d77a95632f Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_3_4.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_4_1.png b/resources/g2/track/lim/large_zero_g_roll_right_4_1.png new file mode 100644 index 0000000000..e2321001c7 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_4_1.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_4_2.png b/resources/g2/track/lim/large_zero_g_roll_right_4_2.png new file mode 100644 index 0000000000..3bfd3cff50 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_4_2.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_4_3.png b/resources/g2/track/lim/large_zero_g_roll_right_4_3.png new file mode 100644 index 0000000000..84bee933cb Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_4_3.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_4_4.png b/resources/g2/track/lim/large_zero_g_roll_right_4_4.png new file mode 100644 index 0000000000..eec51c946b Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_4_4.png differ diff --git a/resources/g2/track/lim/large_zero_g_roll_right_4_5.png b/resources/g2/track/lim/large_zero_g_roll_right_4_5.png new file mode 100644 index 0000000000..6ad49ac1b1 Binary files /dev/null and b/resources/g2/track/lim/large_zero_g_roll_right_4_5.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_1_1.png b/resources/g2/track/lim/medium_half_loop_left_1_1.png new file mode 100644 index 0000000000..e7d0a9f286 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_1_1.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_1_2.png b/resources/g2/track/lim/medium_half_loop_left_1_2.png new file mode 100644 index 0000000000..f1653e39c1 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_1_2.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_1_3.png b/resources/g2/track/lim/medium_half_loop_left_1_3.png new file mode 100644 index 0000000000..d15459bbdd Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_1_3.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_1_4.png b/resources/g2/track/lim/medium_half_loop_left_1_4.png new file mode 100644 index 0000000000..8bb76d7a85 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_1_4.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_1_5.png b/resources/g2/track/lim/medium_half_loop_left_1_5.png new file mode 100644 index 0000000000..e36a67489c Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_1_5.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_2_1.png b/resources/g2/track/lim/medium_half_loop_left_2_1.png new file mode 100644 index 0000000000..18852d0f31 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_2_1.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_2_2.png b/resources/g2/track/lim/medium_half_loop_left_2_2.png new file mode 100644 index 0000000000..a044ea6f66 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_2_2.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_2_3.png b/resources/g2/track/lim/medium_half_loop_left_2_3.png new file mode 100644 index 0000000000..ef70cf6f09 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_2_3.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_2_4.png b/resources/g2/track/lim/medium_half_loop_left_2_4.png new file mode 100644 index 0000000000..4d630aa2cd Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_2_4.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_2_5.png b/resources/g2/track/lim/medium_half_loop_left_2_5.png new file mode 100644 index 0000000000..f5731caf32 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_2_5.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_3_1.png b/resources/g2/track/lim/medium_half_loop_left_3_1.png new file mode 100644 index 0000000000..a535aee767 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_3_1.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_3_2.png b/resources/g2/track/lim/medium_half_loop_left_3_2.png new file mode 100644 index 0000000000..e6185ace79 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_3_2.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_3_3.png b/resources/g2/track/lim/medium_half_loop_left_3_3.png new file mode 100644 index 0000000000..66ad3a32fc Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_3_3.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_3_4.png b/resources/g2/track/lim/medium_half_loop_left_3_4.png new file mode 100644 index 0000000000..09d9762d76 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_3_4.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_3_5.png b/resources/g2/track/lim/medium_half_loop_left_3_5.png new file mode 100644 index 0000000000..04625189f0 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_3_5.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_4_1.png b/resources/g2/track/lim/medium_half_loop_left_4_1.png new file mode 100644 index 0000000000..8abdde07ff Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_4_1.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_4_2.png b/resources/g2/track/lim/medium_half_loop_left_4_2.png new file mode 100644 index 0000000000..a072b0769e Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_4_2.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_4_3.png b/resources/g2/track/lim/medium_half_loop_left_4_3.png new file mode 100644 index 0000000000..5fee7e460c Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_4_3.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_4_4.png b/resources/g2/track/lim/medium_half_loop_left_4_4.png new file mode 100644 index 0000000000..4a794d67a0 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_4_4.png differ diff --git a/resources/g2/track/lim/medium_half_loop_left_4_5.png b/resources/g2/track/lim/medium_half_loop_left_4_5.png new file mode 100644 index 0000000000..450c981ad8 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_left_4_5.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_1_1.png b/resources/g2/track/lim/medium_half_loop_right_1_1.png new file mode 100644 index 0000000000..1a744fad5c Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_1_1.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_1_2.png b/resources/g2/track/lim/medium_half_loop_right_1_2.png new file mode 100644 index 0000000000..ede99fe332 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_1_2.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_1_3.png b/resources/g2/track/lim/medium_half_loop_right_1_3.png new file mode 100644 index 0000000000..eaa1e2e2ce Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_1_3.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_1_4.png b/resources/g2/track/lim/medium_half_loop_right_1_4.png new file mode 100644 index 0000000000..88444d80ab Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_1_4.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_1_5.png b/resources/g2/track/lim/medium_half_loop_right_1_5.png new file mode 100644 index 0000000000..7153ad4037 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_1_5.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_2_1.png b/resources/g2/track/lim/medium_half_loop_right_2_1.png new file mode 100644 index 0000000000..a7c979811f Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_2_1.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_2_2.png b/resources/g2/track/lim/medium_half_loop_right_2_2.png new file mode 100644 index 0000000000..9b0eb8db24 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_2_2.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_2_3.png b/resources/g2/track/lim/medium_half_loop_right_2_3.png new file mode 100644 index 0000000000..c30ec3caa2 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_2_3.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_2_4.png b/resources/g2/track/lim/medium_half_loop_right_2_4.png new file mode 100644 index 0000000000..7a6851af3f Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_2_4.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_2_5.png b/resources/g2/track/lim/medium_half_loop_right_2_5.png new file mode 100644 index 0000000000..f0a50de015 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_2_5.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_3_1.png b/resources/g2/track/lim/medium_half_loop_right_3_1.png new file mode 100644 index 0000000000..a3efa5bc7c Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_3_1.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_3_2.png b/resources/g2/track/lim/medium_half_loop_right_3_2.png new file mode 100644 index 0000000000..6eb6662de4 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_3_2.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_3_3.png b/resources/g2/track/lim/medium_half_loop_right_3_3.png new file mode 100644 index 0000000000..395c40db88 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_3_3.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_3_4.png b/resources/g2/track/lim/medium_half_loop_right_3_4.png new file mode 100644 index 0000000000..e965ce52e2 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_3_4.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_3_5.png b/resources/g2/track/lim/medium_half_loop_right_3_5.png new file mode 100644 index 0000000000..cfa545bdae Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_3_5.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_4_1.png b/resources/g2/track/lim/medium_half_loop_right_4_1.png new file mode 100644 index 0000000000..2fc2b878ed Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_4_1.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_4_2.png b/resources/g2/track/lim/medium_half_loop_right_4_2.png new file mode 100644 index 0000000000..8c025ce958 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_4_2.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_4_3.png b/resources/g2/track/lim/medium_half_loop_right_4_3.png new file mode 100644 index 0000000000..03f5b04006 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_4_3.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_4_4.png b/resources/g2/track/lim/medium_half_loop_right_4_4.png new file mode 100644 index 0000000000..10680ffdc2 Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_4_4.png differ diff --git a/resources/g2/track/lim/medium_half_loop_right_4_5.png b/resources/g2/track/lim/medium_half_loop_right_4_5.png new file mode 100644 index 0000000000..f1fa5abacb Binary files /dev/null and b/resources/g2/track/lim/medium_half_loop_right_4_5.png differ diff --git a/resources/g2/track/lim/small_flat_to_steep_up_1.png b/resources/g2/track/lim/small_flat_to_steep_up_1.png new file mode 100644 index 0000000000..af4f1965c5 Binary files /dev/null and b/resources/g2/track/lim/small_flat_to_steep_up_1.png differ diff --git a/resources/g2/track/lim/small_flat_to_steep_up_2_1.png b/resources/g2/track/lim/small_flat_to_steep_up_2_1.png new file mode 100644 index 0000000000..e9fcd5cbc7 Binary files /dev/null and b/resources/g2/track/lim/small_flat_to_steep_up_2_1.png differ diff --git a/resources/g2/track/lim/small_flat_to_steep_up_2_2.png b/resources/g2/track/lim/small_flat_to_steep_up_2_2.png new file mode 100644 index 0000000000..a771b14b5f Binary files /dev/null and b/resources/g2/track/lim/small_flat_to_steep_up_2_2.png differ diff --git a/resources/g2/track/lim/small_flat_to_steep_up_3_1.png b/resources/g2/track/lim/small_flat_to_steep_up_3_1.png new file mode 100644 index 0000000000..52400fe1ce Binary files /dev/null and b/resources/g2/track/lim/small_flat_to_steep_up_3_1.png differ diff --git a/resources/g2/track/lim/small_flat_to_steep_up_3_2.png b/resources/g2/track/lim/small_flat_to_steep_up_3_2.png new file mode 100644 index 0000000000..f404c206f8 Binary files /dev/null and b/resources/g2/track/lim/small_flat_to_steep_up_3_2.png differ diff --git a/resources/g2/track/lim/small_flat_to_steep_up_4.png b/resources/g2/track/lim/small_flat_to_steep_up_4.png new file mode 100644 index 0000000000..3c1e45e0fa Binary files /dev/null and b/resources/g2/track/lim/small_flat_to_steep_up_4.png differ diff --git a/resources/g2/track/lim/small_flat_to_steep_up_diag_1.png b/resources/g2/track/lim/small_flat_to_steep_up_diag_1.png new file mode 100644 index 0000000000..50d4a90d4d Binary files /dev/null and b/resources/g2/track/lim/small_flat_to_steep_up_diag_1.png differ diff --git a/resources/g2/track/lim/small_flat_to_steep_up_diag_2.png b/resources/g2/track/lim/small_flat_to_steep_up_diag_2.png new file mode 100644 index 0000000000..c7075902ed Binary files /dev/null and b/resources/g2/track/lim/small_flat_to_steep_up_diag_2.png differ diff --git a/resources/g2/track/lim/small_flat_to_steep_up_diag_3.png b/resources/g2/track/lim/small_flat_to_steep_up_diag_3.png new file mode 100644 index 0000000000..7f0ddd24f0 Binary files /dev/null and b/resources/g2/track/lim/small_flat_to_steep_up_diag_3.png differ diff --git a/resources/g2/track/lim/small_flat_to_steep_up_diag_4.png b/resources/g2/track/lim/small_flat_to_steep_up_diag_4.png new file mode 100644 index 0000000000..1b205a028b Binary files /dev/null and b/resources/g2/track/lim/small_flat_to_steep_up_diag_4.png differ diff --git a/resources/g2/track/lim/small_steep_to_flat_up_1.png b/resources/g2/track/lim/small_steep_to_flat_up_1.png new file mode 100644 index 0000000000..3b9ca4d1f9 Binary files /dev/null and b/resources/g2/track/lim/small_steep_to_flat_up_1.png differ diff --git a/resources/g2/track/lim/small_steep_to_flat_up_2_1.png b/resources/g2/track/lim/small_steep_to_flat_up_2_1.png new file mode 100644 index 0000000000..3c804cb917 Binary files /dev/null and b/resources/g2/track/lim/small_steep_to_flat_up_2_1.png differ diff --git a/resources/g2/track/lim/small_steep_to_flat_up_2_2.png b/resources/g2/track/lim/small_steep_to_flat_up_2_2.png new file mode 100644 index 0000000000..5a11af75d7 Binary files /dev/null and b/resources/g2/track/lim/small_steep_to_flat_up_2_2.png differ diff --git a/resources/g2/track/lim/small_steep_to_flat_up_3_1.png b/resources/g2/track/lim/small_steep_to_flat_up_3_1.png new file mode 100644 index 0000000000..92d58a6fc1 Binary files /dev/null and b/resources/g2/track/lim/small_steep_to_flat_up_3_1.png differ diff --git a/resources/g2/track/lim/small_steep_to_flat_up_3_2.png b/resources/g2/track/lim/small_steep_to_flat_up_3_2.png new file mode 100644 index 0000000000..0da72ff142 Binary files /dev/null and b/resources/g2/track/lim/small_steep_to_flat_up_3_2.png differ diff --git a/resources/g2/track/lim/small_steep_to_flat_up_4.png b/resources/g2/track/lim/small_steep_to_flat_up_4.png new file mode 100644 index 0000000000..a2b72f1612 Binary files /dev/null and b/resources/g2/track/lim/small_steep_to_flat_up_4.png differ diff --git a/resources/g2/track/lim/small_steep_to_flat_up_diag_1.png b/resources/g2/track/lim/small_steep_to_flat_up_diag_1.png new file mode 100644 index 0000000000..e7fcbba5f8 Binary files /dev/null and b/resources/g2/track/lim/small_steep_to_flat_up_diag_1.png differ diff --git a/resources/g2/track/lim/small_steep_to_flat_up_diag_2.png b/resources/g2/track/lim/small_steep_to_flat_up_diag_2.png new file mode 100644 index 0000000000..5b42f0ba40 Binary files /dev/null and b/resources/g2/track/lim/small_steep_to_flat_up_diag_2.png differ diff --git a/resources/g2/track/lim/small_steep_to_flat_up_diag_3.png b/resources/g2/track/lim/small_steep_to_flat_up_diag_3.png new file mode 100644 index 0000000000..091bee9873 Binary files /dev/null and b/resources/g2/track/lim/small_steep_to_flat_up_diag_3.png differ diff --git a/resources/g2/track/lim/small_steep_to_flat_up_diag_4.png b/resources/g2/track/lim/small_steep_to_flat_up_diag_4.png new file mode 100644 index 0000000000..8453b31b69 Binary files /dev/null and b/resources/g2/track/lim/small_steep_to_flat_up_diag_4.png differ diff --git a/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_1_1.png b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..345e2f928c Binary files /dev/null and b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_1_2.png b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..751ac942cc Binary files /dev/null and b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_2_1.png b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..59ee432142 Binary files /dev/null and b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_2_2.png b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..c17d0f3a80 Binary files /dev/null and b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_2_3.png b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_2_3.png new file mode 100644 index 0000000000..d19f6bec6e Binary files /dev/null and b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_2_3.png differ diff --git a/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_3_1.png b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..fcc3b70131 Binary files /dev/null and b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_3_2.png b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..c1021ea572 Binary files /dev/null and b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_4_1.png b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..ce8b429ea6 Binary files /dev/null and b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_4_2.png b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..749890ec2d Binary files /dev/null and b/resources/g2/track/lim/small_turn_left_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_1_1.png b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..9f8baf79ca Binary files /dev/null and b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_1_2.png b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..a0fcf208b8 Binary files /dev/null and b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_2_1.png b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..e28cd10670 Binary files /dev/null and b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_2_2.png b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..c427e2b1bf Binary files /dev/null and b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_3_1.png b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..d6b05fbf07 Binary files /dev/null and b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_3_2.png b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..de73a77a4e Binary files /dev/null and b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_3_3.png b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_3_3.png new file mode 100644 index 0000000000..ab09c8c4ff Binary files /dev/null and b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_3_3.png differ diff --git a/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_4_1.png b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..472a5c7210 Binary files /dev/null and b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_4_2.png b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..f4aa1f5deb Binary files /dev/null and b/resources/g2/track/lim/small_turn_right_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_1_1.png b/resources/g2/track/lim/steep_to_flat_up_1_1.png new file mode 100644 index 0000000000..2c02cacae3 Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_1_1.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_1_2.png b/resources/g2/track/lim/steep_to_flat_up_1_2.png new file mode 100644 index 0000000000..a99da83785 Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_1_2.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_1_3.png b/resources/g2/track/lim/steep_to_flat_up_1_3.png new file mode 100644 index 0000000000..11d841b021 Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_1_3.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_1_4.png b/resources/g2/track/lim/steep_to_flat_up_1_4.png new file mode 100644 index 0000000000..3bac5b9a11 Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_1_4.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_2_1.png b/resources/g2/track/lim/steep_to_flat_up_2_1.png new file mode 100644 index 0000000000..06bae7b462 Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_2_1.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_2_2.png b/resources/g2/track/lim/steep_to_flat_up_2_2.png new file mode 100644 index 0000000000..345b65cecd Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_2_2.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_2_3.png b/resources/g2/track/lim/steep_to_flat_up_2_3.png new file mode 100644 index 0000000000..6e04697953 Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_2_3.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_2_4.png b/resources/g2/track/lim/steep_to_flat_up_2_4.png new file mode 100644 index 0000000000..116c27dd96 Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_2_4.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_3_1.png b/resources/g2/track/lim/steep_to_flat_up_3_1.png new file mode 100644 index 0000000000..f816853747 Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_3_1.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_3_2.png b/resources/g2/track/lim/steep_to_flat_up_3_2.png new file mode 100644 index 0000000000..76539c09ac Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_3_2.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_3_3.png b/resources/g2/track/lim/steep_to_flat_up_3_3.png new file mode 100644 index 0000000000..c0aee7497c Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_3_3.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_3_4.png b/resources/g2/track/lim/steep_to_flat_up_3_4.png new file mode 100644 index 0000000000..c61110ce1e Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_3_4.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_4_1.png b/resources/g2/track/lim/steep_to_flat_up_4_1.png new file mode 100644 index 0000000000..05728600d0 Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_4_1.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_4_2.png b/resources/g2/track/lim/steep_to_flat_up_4_2.png new file mode 100644 index 0000000000..6e29c0b91b Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_4_2.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_4_3.png b/resources/g2/track/lim/steep_to_flat_up_4_3.png new file mode 100644 index 0000000000..79050693df Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_4_3.png differ diff --git a/resources/g2/track/lim/steep_to_flat_up_4_4.png b/resources/g2/track/lim/steep_to_flat_up_4_4.png new file mode 100644 index 0000000000..cd23b6aacd Binary files /dev/null and b/resources/g2/track/lim/steep_to_flat_up_4_4.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_1_1.png b/resources/g2/track/lim/zero_g_roll_left_1_1.png new file mode 100644 index 0000000000..58d1160fc5 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_1_1.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_1_2.png b/resources/g2/track/lim/zero_g_roll_left_1_2.png new file mode 100644 index 0000000000..740b4b0128 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_1_2.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_1_3.png b/resources/g2/track/lim/zero_g_roll_left_1_3.png new file mode 100644 index 0000000000..0c957ac61d Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_1_3.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_1_4.png b/resources/g2/track/lim/zero_g_roll_left_1_4.png new file mode 100644 index 0000000000..207b50394c Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_1_4.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_2_1.png b/resources/g2/track/lim/zero_g_roll_left_2_1.png new file mode 100644 index 0000000000..4ab5758ab9 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_2_1.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_2_2.png b/resources/g2/track/lim/zero_g_roll_left_2_2.png new file mode 100644 index 0000000000..44f2a854e1 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_2_2.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_2_3.png b/resources/g2/track/lim/zero_g_roll_left_2_3.png new file mode 100644 index 0000000000..ce9d480aa5 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_2_3.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_2_4.png b/resources/g2/track/lim/zero_g_roll_left_2_4.png new file mode 100644 index 0000000000..e7f65291a0 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_2_4.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_3_1.png b/resources/g2/track/lim/zero_g_roll_left_3_1.png new file mode 100644 index 0000000000..4041a7d2b8 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_3_1.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_3_2.png b/resources/g2/track/lim/zero_g_roll_left_3_2.png new file mode 100644 index 0000000000..5f8427f6fb Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_3_2.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_3_3.png b/resources/g2/track/lim/zero_g_roll_left_3_3.png new file mode 100644 index 0000000000..3b25a4d02a Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_3_3.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_3_4.png b/resources/g2/track/lim/zero_g_roll_left_3_4.png new file mode 100644 index 0000000000..7c73baa7de Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_3_4.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_4_1.png b/resources/g2/track/lim/zero_g_roll_left_4_1.png new file mode 100644 index 0000000000..28b8d71764 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_4_1.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_4_2.png b/resources/g2/track/lim/zero_g_roll_left_4_2.png new file mode 100644 index 0000000000..d70e439d54 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_4_2.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_4_3.png b/resources/g2/track/lim/zero_g_roll_left_4_3.png new file mode 100644 index 0000000000..15142120db Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_4_3.png differ diff --git a/resources/g2/track/lim/zero_g_roll_left_4_4.png b/resources/g2/track/lim/zero_g_roll_left_4_4.png new file mode 100644 index 0000000000..3da1477ef0 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_left_4_4.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_1_1.png b/resources/g2/track/lim/zero_g_roll_right_1_1.png new file mode 100644 index 0000000000..aec7d46348 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_1_1.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_1_2.png b/resources/g2/track/lim/zero_g_roll_right_1_2.png new file mode 100644 index 0000000000..7958a23d3f Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_1_2.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_1_3.png b/resources/g2/track/lim/zero_g_roll_right_1_3.png new file mode 100644 index 0000000000..25b075a7b3 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_1_3.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_1_4.png b/resources/g2/track/lim/zero_g_roll_right_1_4.png new file mode 100644 index 0000000000..37ea78601b Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_1_4.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_2_1.png b/resources/g2/track/lim/zero_g_roll_right_2_1.png new file mode 100644 index 0000000000..b3495b3012 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_2_1.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_2_2.png b/resources/g2/track/lim/zero_g_roll_right_2_2.png new file mode 100644 index 0000000000..7fb32833d9 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_2_2.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_2_3.png b/resources/g2/track/lim/zero_g_roll_right_2_3.png new file mode 100644 index 0000000000..8058570df0 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_2_3.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_2_4.png b/resources/g2/track/lim/zero_g_roll_right_2_4.png new file mode 100644 index 0000000000..351785acab Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_2_4.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_3_1.png b/resources/g2/track/lim/zero_g_roll_right_3_1.png new file mode 100644 index 0000000000..9dca6b8fd2 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_3_1.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_3_2.png b/resources/g2/track/lim/zero_g_roll_right_3_2.png new file mode 100644 index 0000000000..6ae94ded68 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_3_2.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_3_3.png b/resources/g2/track/lim/zero_g_roll_right_3_3.png new file mode 100644 index 0000000000..3791c97e08 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_3_3.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_3_4.png b/resources/g2/track/lim/zero_g_roll_right_3_4.png new file mode 100644 index 0000000000..7e96d2175b Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_3_4.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_4_1.png b/resources/g2/track/lim/zero_g_roll_right_4_1.png new file mode 100644 index 0000000000..296cebdc72 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_4_1.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_4_2.png b/resources/g2/track/lim/zero_g_roll_right_4_2.png new file mode 100644 index 0000000000..0acd8e3f30 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_4_2.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_4_3.png b/resources/g2/track/lim/zero_g_roll_right_4_3.png new file mode 100644 index 0000000000..18fba5ea32 Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_4_3.png differ diff --git a/resources/g2/track/lim/zero_g_roll_right_4_4.png b/resources/g2/track/lim/zero_g_roll_right_4_4.png new file mode 100644 index 0000000000..ae4d1d71ef Binary files /dev/null and b/resources/g2/track/lim/zero_g_roll_right_4_4.png differ diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index a0965827ae..a480b80bbb 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 "23" +#define NETWORK_STREAM_VERSION "24" #define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION static Peep* _pickup_peep = nullptr; diff --git a/src/openrct2/ride/coaster/LimLaunchedRollerCoaster.cpp b/src/openrct2/ride/coaster/LimLaunchedRollerCoaster.cpp index f9fdc0229e..349c29c70e 100644 --- a/src/openrct2/ride/coaster/LimLaunchedRollerCoaster.cpp +++ b/src/openrct2/ride/coaster/LimLaunchedRollerCoaster.cpp @@ -1886,6 +1886,3871 @@ static void lim_launched_rc_track_right_quarter_turn_1_90_deg_down( session, ride, trackSequence, (direction - 1) & 3, height, trackElement); } +static void lim_launched_rc_track_left_barrel_roll_up_to_down( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 1), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 4, height + 1, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 6), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 7), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 4, height + 1, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 12), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 13), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height + 1, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 18), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 19), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + 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: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 2), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 3), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 8), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 9), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 14), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 15), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 20), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 21), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + 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 + 48, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 4), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 5), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 44 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 10), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 11), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 44 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 16), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 17), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 44 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 22), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 23), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 44 }); + break; + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height, TUNNEL_INVERTED_3); + break; + case 2: + paint_util_push_tunnel_left(session, height, TUNNEL_INVERTED_3); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } +} + +static void lim_launched_rc_track_right_barrel_roll_up_to_down( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 24), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 25), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 30), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 31), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height + 1, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 36), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 37), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 4, height + 1, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 42), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 43), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 4, height + 1, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + 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: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 26), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 27), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 32), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 33), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 38), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 39), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 44), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 45), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 28 }); + 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 + 48, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 28), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 29), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 44 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 34), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 35), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 44 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 40), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 41), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 44 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 46), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 47), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 44 }); + break; + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height, TUNNEL_INVERTED_3); + break; + case 2: + paint_util_push_tunnel_left(session, height, TUNNEL_INVERTED_3); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } +} + +static void lim_launched_rc_track_left_barrel_roll_down_to_up( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_left_barrel_roll_up_to_down( + session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void lim_launched_rc_track_right_barrel_roll_down_to_up( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_right_barrel_roll_up_to_down( + session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void lim_launched_rc_track_half_loop_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 0), { 0, 6, height }, + { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 4), { 0, 6, height }, + { 32, 20, 11 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 8), { 0, 6, height }, + { 32, 20, 9 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 12), + { 0, 6, height }, { 32, 20, 7 }); + break; + } + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 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_C4 | SEGMENT_CC | SEGMENT_D0, 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 1), { 0, 0, height }, + { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 20, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 5), + { 0, 14, height }, { 3, 20, 63 }, { 28, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 15, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 9), { 0, 6, height }, + { 3, 20, 63 }, { 28, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 16, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 13), + { 0, 6, height }, { 32, 20, 3 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 16, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 2), + { 16, 0, height }, { 2, 16, 119 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 6), + { 12, 0, height }, { 3, 16, 119 }, { 12, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 10), + { 10, 16, height }, { 4, 12, 119 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 14), + { 16, 16, height }, { 2, 16, 119 }, { 15, 6, 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 + 168, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 3), + { 0, 0, height + 32 }, { 32, 16, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 7), + { 0, 0, height + 32 }, { 32, 16, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 11), + { 0, 16, height + 32 }, { 32, 12, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 15), + { 0, 16, height + 32 }, { 32, 12, 3 }); + break; + } + 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 + 48, 0x20); + break; + } +} + +static void lim_launched_rc_track_half_loop_down( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_half_loop_up(session, ride, 3 - trackSequence, direction, height, trackElement); +} + +static void lim_launched_rc_track_flat_to_60_deg_up_long_base( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 4), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 8), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 12), + { 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, METAL_SUPPORTS_TUBES, 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_C4 | SEGMENT_CC | SEGMENT_D0, 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 1), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 5), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 9), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 13), + { 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, METAL_SUPPORTS_TUBES, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + } + 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); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 2), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 6), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 10), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 14), + { 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, METAL_SUPPORTS_TUBES, 4, 10, height, session.TrackColours[SCHEME_SUPPORTS]); + } + 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 + 64, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 3), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 7), + { 0, 0, height }, { 32, 1, 98 }, { 0, 27, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 11), + { 0, 0, height }, { 32, 1, 98 }, { 0, 27, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 15), + { 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, METAL_SUPPORTS_TUBES, 4, 19, height, session.TrackColours[SCHEME_SUPPORTS]); + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height + 24, TUNNEL_2); + break; + case 2: + paint_util_push_tunnel_left(session, height + 24, TUNNEL_2); + break; + } + 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 + 80, 0x20); + break; + } +} +static void lim_launched_rc_track_60_deg_up_to_flat_long_base( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 16), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 20), + { 0, 0, height }, { 32, 1, 98 }, { 0, 27, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 24), + { 0, 0, height }, { 32, 1, 98 }, { 0, 27, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 28), + { 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, METAL_SUPPORTS_TUBES, 4, 24, height, session.TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_1); + } + 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 + 80, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 17), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 21), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 25), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 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, METAL_SUPPORTS_TUBES, 4, 18, height, session.TrackColours[SCHEME_SUPPORTS]); + } + 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 + 80, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 18), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 22), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 26), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 30), + { 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, METAL_SUPPORTS_TUBES, 4, 13, height, session.TrackColours[SCHEME_SUPPORTS]); + } + 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); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 19), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 23), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 27), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 31), + { 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, METAL_SUPPORTS_TUBES, 4, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 2: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_0); + break; + } + 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); + break; + } +} + +static void lim_launched_rc_track_flat_to_60_deg_down_long_base( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_60_deg_up_to_flat_long_base( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void lim_launched_rc_track_60_deg_down_to_flat_long_base( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_flat_to_60_deg_up_long_base( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void lim_launched_rc_track_left_large_corkscrew_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height + 4 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 5), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height + 4 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 10), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height + 4 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 15), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height + 4 }); + break; + } + + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 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_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 1), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 34, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 6), + { 0, 0, height }, { 26, 1, 32 }, { 0, 29, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 22, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 11), + { 0, 0, height }, { 20, 20, 3 }, { 0, 6, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 24, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 16), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 16, 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 + 56, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 2), + { 0, 0, height }, { 48, 1, 64 }, { 0, 31, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 7), + { 0, 0, height }, { 28, 28, 1 }, { 2, 2, height + 40 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 12), + { 0, 0, height }, { 28, 28, 1 }, { 2, 2, height + 48 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 17), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, 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 + 48, 0x20); + break; + case 3: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 4: + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0 | SEGMENT_C8 | SEGMENT_C4 | SEGMENT_D4, direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 3), + { 0, 0, height }, { 28, 28, 0 }, { 2, 2, height + 50 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 0, height + 56, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 8), + { 0, 0, height }, { 28, 28, 0 }, { 2, 2, height + 50 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 0, height + 56, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 13), + { 0, 0, height }, { 24, 28, 0 }, { 2, 2, height + 50 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 0, height + 56, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 18), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 0, height + 56, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 4), + { 0, 0, height }, { 28, 28, 1 }, { 2, 2, height + 40 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 9), + { 0, 0, height }, { 28, 28, 1 }, { 2, 2, height + 40 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 14), + { 0, 0, height }, { 26, 28, 1 }, { 2, 2, height + 40 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 19), + { 0, 0, height }, { 26, 28, 1 }, { 2, 2, height + 40 }); + break; + } + + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0 | SEGMENT_C8 | SEGMENT_C4 | SEGMENT_D4, direction), + 0xFFFF, 0); + 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_general_support_height(session, height + 48, 0x20); + break; + } +} + +static void lim_launched_rc_track_right_large_corkscrew_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 20), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height + 4 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 25), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height + 4 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 30), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height + 4 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 35), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height + 4 }); + break; + } + + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 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_D4 | SEGMENT_C4 | SEGMENT_BC | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 21), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 16, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 26), + { 0, 0, height }, { 20, 20, 3 }, { 0, 6, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 24, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 31), + { 0, 0, height }, { 26, 1, 32 }, { 0, 29, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 22, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 36), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 34, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D4 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 22), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 27), + { 0, 0, height }, { 28, 28, 1 }, { 2, 2, height + 48 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 32), + { 0, 0, height }, { 28, 28, 1 }, { 2, 2, height + 48 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 37), + { 0, 0, height }, { 48, 1, 64 }, { 0, 31, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D4 | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 4: + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0 | SEGMENT_C8 | SEGMENT_C4 | SEGMENT_D4, direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 23), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 0, height + 56, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 28), + { 0, 0, height }, { 24, 28, 0 }, { 2, 2, height + 50 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 0, height + 56, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 33), + { 0, 0, height }, { 28, 28, 0 }, { 2, 2, height + 50 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 0, height + 56, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 38), + { 0, 0, height }, { 28, 28, 0 }, { 2, 2, height + 50 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 0, height + 56, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 24), + { 0, 0, height }, { 26, 28, 1 }, { 2, 2, height + 40 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 29), + { 0, 0, height }, { 26, 28, 1 }, { 2, 2, height + 40 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 34), + { 0, 0, height }, { 28, 28, 1 }, { 2, 2, height + 40 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 39), + { 0, 0, height }, { 28, 28, 1 }, { 2, 2, height + 40 }); + break; + } + + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0 | SEGMENT_C8 | SEGMENT_C4 | SEGMENT_D4, direction), + 0xFFFF, 0); + 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_general_support_height(session, height + 48, 0x20); + break; + } +} + +static void lim_launched_rc_track_left_large_corkscrew_down( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_right_large_corkscrew_up(session, ride, 5 - trackSequence, (direction + 1) & 3, height, trackElement); +} + +static void lim_launched_rc_track_right_large_corkscrew_down( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_left_large_corkscrew_up(session, ride, 5 - trackSequence, (direction - 1) & 3, height, trackElement); +} + +static void lim_launched_rc_track_left_medium_half_loop_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 5), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 10), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 15), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 7, 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_C4 | SEGMENT_CC | SEGMENT_D0, 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 1), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 6), + { 0, 0, height }, { 0, 32, 64 }, { 0, 31, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 11), + { 0, 0, height }, { 40, 0, 64 }, { 0, 32, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 16), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C8 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_B4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 2), + { 0, 0, height }, { 32, 32, 0 }, { 0, 0, height + 2 }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 7), + { 0, 0, height }, { 1, 32, 96 }, { 29, 0, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 16, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 12), + { 0, 0, height }, { 1, 32, 96 }, { 31, 0, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 18, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 17), + { 0, 0, height }, { 32, 32, 0 }, { 0, 0, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C8 | SEGMENT_C4 | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 144, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 3), + { 0, 0, height }, { 0, 32, 160 }, { 0, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 8), + { 0, 0, height }, { 0, 32, 160 }, { 30, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 13), + { 0, 0, height }, { 1, 32, 160 }, { 29, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 18), + { 0, 0, height }, { 1, 32, 160 }, { 0, 0, height }); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_D4 | SEGMENT_C4 | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 144, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 4), + { 0, 0, height }, { 32, 32, 1 }, { 0, 2, height + 48 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 9), + { 0, 0, height }, { 32, 32, 1 }, { 0, 2, height + 48 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 14), + { 0, 0, height }, { 32, 32, 1 }, { 0, 0, height + 48 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 19), + { 0, 0, height }, { 32, 32, 1 }, { 0, 0, height + 48 }); + break; + } + + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_CC | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC, direction), + 0xFFFF, 0); + + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 16, TUNNEL_0); + } + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } +} + +static void lim_launched_rc_track_right_medium_half_loop_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 20), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 25), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 30), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 35), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 7, 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_C4 | SEGMENT_CC | SEGMENT_D0, 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 21), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 26), + { 0, 0, height }, { 40, 0, 64 }, { 0, 32, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 31), + { 0, 0, height }, { 0, 32, 64 }, { 0, 31, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 36), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_CC | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 22), + { 0, 0, height }, { 32, 32, 0 }, { 0, 0, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 27), + { 0, 0, height }, { 0, 32, 96 }, { 30, 0, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 18, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 32), + { 0, 0, height }, { 0, 32, 96 }, { 29, 0, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 16, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 37), + { 0, 0, height }, { 32, 32, 0 }, { 0, 0, height + 2 }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_D4 | SEGMENT_C4 | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 144, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 23), + { 0, 0, height }, { 0, 32, 160 }, { -12, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 28), + { 0, 0, height }, { 0, 32, 160 }, { 29, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 33), + { 0, 0, height }, { 0, 32, 160 }, { 30, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 38), + { 0, 0, height }, { 1, 32, 160 }, { 2, 0, 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 + 144, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 24), + { 0, 0, height }, { 32, 32, 1 }, { 0, 0, height + 48 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 29), + { 0, 0, height }, { 32, 32, 1 }, { 0, 0, height + 48 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 34), + { 0, 0, height }, { 32, 32, 1 }, { 0, 0, height + 48 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 39), + { 0, 0, height }, { 32, 32, 1 }, { 0, 0, height + 48 }); + break; + } + + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C8 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_B4, direction), + 0xFFFF, 0); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 16, TUNNEL_0); + } + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } +} + +static void lim_launched_rc_track_left_medium_half_loop_down( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_right_medium_half_loop_up(session, ride, 4 - trackSequence, direction, height, trackElement); +} + +static void lim_launched_rc_track_right_medium_half_loop_down( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_left_medium_half_loop_up(session, ride, 4 - trackSequence, direction, height, trackElement); +} + +static void lim_launched_rc_track_left_zero_g_roll_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 1), + { 0, 0, height }, { 32, 20, 1 }, { 0, 6, height + 28 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 4), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 5), + { 0, 0, height }, { 32, 1, 32 }, { 0, 31, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 8), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 12), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + + 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_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 2), + { 0, 0, height }, { 32, 20, 1 }, { 0, 6, height + 28 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 6), + { 0, 0, height }, { 32, 20, 1 }, { 0, 6, height + 28 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 9), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 13), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C8 | SEGMENT_B4 | SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 3), + { 0, 0, height }, { 32, 20, 1 }, { 0, 6, height + 28 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 7), + { 0, 0, height }, { 32, 20, 1 }, { 0, 6, height + 28 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 10), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 11), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 33 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 14), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 15), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 33 }); + break; + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 2: + 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_C8 | SEGMENT_B4 | SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), + 0xFFFF, 0); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height + 38, session.TrackColours[SCHEME_SUPPORTS]); + paint_util_set_general_support_height(session, height + 40, 0x20); + break; + } +} + +static void lim_launched_rc_track_right_zero_g_roll_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 16), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 20), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 24), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 25), + { 0, 0, height }, { 32, 1, 32 }, { 0, 31, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 28), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 29), + { 0, 0, height }, { 32, 20, 1 }, { 0, 6, height + 28 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + 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_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 17), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 21), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 26), + { 0, 0, height }, { 32, 20, 1 }, { 0, 6, height + 28 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 30), + { 0, 0, height }, { 32, 20, 1 }, { 0, 6, height + 28 }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC | SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 18), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 19), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 33 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 22), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 23), + { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height + 33 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 27), + { 0, 0, height }, { 32, 20, 1 }, { 0, 6, height + 28 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 31), + { 0, 0, height }, { 32, 20, 1 }, { 0, 6, height + 28 }); + break; + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 2: + 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_D4 | SEGMENT_BC | SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), + 0xFFFF, 0); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height + 38, session.TrackColours[SCHEME_SUPPORTS]); + paint_util_set_general_support_height(session, height + 40, 0x20); + break; + } +} + +static void lim_launched_rc_track_left_zero_g_roll_down( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_left_zero_g_roll_up(session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void lim_launched_rc_track_right_zero_g_roll_down( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_right_zero_g_roll_up(session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void lim_launched_rc_track_left_large_zero_g_roll_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 5), + { 0, 0, height }, { 32, 0, 96 }, { 0, 30, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 9), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 10), + { 0, 0, height }, { 32, 0, 96 }, { 0, 30, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 15), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 25, 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_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 88, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 1), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 2), + { 0, 0, height }, { 32, 0, 96 }, { 0, 30, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 6), + { 0, 0, height }, { 32, 0, 64 }, { 0, 30, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 11), + { 0, 0, height }, { 32, 0, 64 }, { 0, 2, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 16), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + 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 + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 3), + { 0, 0, height }, { 32, 0, 64 }, { 0, 30, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 7), + { 0, 0, height }, { 32, 0, 48 }, { 0, 30, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 12), + { 0, 0, height }, { 32, 0, 48 }, { 0, 2, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 17), + { 0, 0, height }, { 32, 0, 32 }, { 0, 2, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 18), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height + 40 }); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C8 | SEGMENT_B4 | SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 3: + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C8 | SEGMENT_B4 | SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 4), + { 0, 0, height }, { 26, 0, 20 }, { 0, 26, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 0, height + 28, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 8), + { 0, 0, height }, { 26, 0, 20 }, { 0, 26, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 0, height + 28, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 13), + { 0, 0, height }, { 32, 0, 32 }, { 0, 2, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 14), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height + 40 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 0, height + 28, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 19), + { 0, 0, height }, { 32, 10, 20 }, { 0, 18, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 0, height + 28, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 2: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_0); + break; + } + paint_util_set_general_support_height(session, height + 40, 0x20); + break; + } +} + +static void lim_launched_rc_track_right_large_zero_g_roll_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 20), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 25), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 26), + { 0, 0, height }, { 32, 0, 96 }, { 0, 30, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 31), + { 0, 0, height }, { 32, 0, 96 }, { 0, 30, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 35), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 25, 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_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 88, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 21), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 27), + { 0, 0, height }, { 32, 0, 64 }, { 0, 2, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 32), + { 0, 0, height }, { 32, 0, 64 }, { 0, 30, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 36), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 37), + { 0, 0, height }, { 32, 0, 96 }, { 0, 30, height }); + break; + } + 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 + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 22), + { 0, 0, height }, { 32, 0, 32 }, { 0, 2, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 23), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height + 40 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 28), + { 0, 0, height }, { 32, 0, 48 }, { 0, 2, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 33), + { 0, 0, height }, { 32, 0, 48 }, { 0, 30, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 38), + { 0, 0, height }, { 32, 0, 64 }, { 0, 30, 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 + 64, 0x20); + break; + case 3: + 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); + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 24), + { 0, 0, height }, { 32, 10, 20 }, { 0, 18, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 0, height + 28, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 29), + { 0, 0, height }, { 32, 0, 32 }, { 0, 2, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 30), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height + 40 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 0, height + 28, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 34), + { 0, 0, height }, { 26, 0, 20 }, { 0, 26, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 0, height + 28, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 39), + { 0, 0, height }, { 26, 0, 20 }, { 0, 26, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 0, height + 28, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 2: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_0); + break; + } + paint_util_set_general_support_height(session, height + 40, 0x20); + break; + } +} + +static void lim_launched_rc_track_left_large_zero_g_roll_down( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_left_large_zero_g_roll_up( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void lim_launched_rc_track_right_large_zero_g_roll_down( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_right_large_zero_g_roll_up( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void lim_launched_rc_track_left_bank_to_left_quarter_turn_3_25_deg_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 0), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 2), + { 0, 6, height }, { 32, 20, 3 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 3), + { 0, 6, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 5), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 7), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 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].WithIndex(SPR_G2_LIM_LAUNCHED_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].WithIndex(SPR_G2_LIM_LAUNCHED_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].WithIndex(SPR_G2_LIM_LAUNCHED_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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 8), + { 6, 0, height }, { 20, 32, 3 }, { 0, 6, height - 6 }); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, 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 lim_launched_rc_track_right_bank_to_right_quarter_turn_3_25_deg_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 9), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 11), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 13), + { 0, 6, height }, { 32, 20, 3 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 14), + { 0, 6, height }, { 32, 1, 26 }, { 0, 27, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 16), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 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].WithIndex(SPR_G2_LIM_LAUNCHED_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].WithIndex(SPR_G2_LIM_LAUNCHED_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].WithIndex(SPR_G2_LIM_LAUNCHED_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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 17), + { 6, 0, height }, { 20, 32, 3 }, { 0, 6, height - 6 }); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, 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 lim_launched_rc_track_left_quarter_turn_3_25_deg_down_to_left_bank( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_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].WithIndex(SPR_G2_LIM_LAUNCHED_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].WithIndex(SPR_G2_LIM_LAUNCHED_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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 10), + { 0, 6, height }, { 32, 20, 3 }, { 0, 6, height - 6 }); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 11), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 13), + { 6, 0, height }, { 20, 32, 3 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 14), + { 6, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 16), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 9), + { 6, 0, height }, { 20, 32, 3 }); + break; + } + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 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_D4, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + } +} + +static void lim_launched_rc_track_right_quarter_turn_3_25_deg_down_to_right_bank( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_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].WithIndex(SPR_G2_LIM_LAUNCHED_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].WithIndex(SPR_G2_LIM_LAUNCHED_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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 6), + { 0, 6, height }, { 32, 20, 3 }, { 0, 6, height - 6 }); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 7), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 0), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 2), + { 6, 0, height }, { 20, 32, 3 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 3), + { 6, 0, height }, { 1, 32, 26 }, { 27, 0, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 5), + { 6, 0, height }, { 20, 32, 3 }); + break; + } + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 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_D4, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + } +} + +static void lim_launched_rc_track_left_large_half_loop_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 0), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 7), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 14), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 21), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 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_C4 | SEGMENT_CC | SEGMENT_D0, 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 1), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 15, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 8), + { 0, 0, height }, { 32, 20, 9 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 15), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 22), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + 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 + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 2), + { 0, 0, height }, { 32, 16, 3 }, { 0, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 9), + { 0, 0, height }, { 32, 16, 0 }, { 0, 0, height + 70 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 16), + { 0, 0, height }, { 32, 16, 0 }, { 0, 16, height + 70 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 23), + { 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 + 88, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 3), + { 0, 0, height }, { 32, 16, 3 }, { 0, 0, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 28, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 10), + { 0, 0, height }, { 32, 16, 0 }, { 0, 0, height + 200 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 28, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 17), + { 0, 0, height }, { 32, 16, 0 }, { 0, 16, height + 200 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 0, height + 28, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 24), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 28, 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 + 224, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 4), + { 0, 0, height }, { 16, 16, 3 }, { 16, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 11), + { 0, 0, height }, { 16, 16, 0 }, { 0, 16, height + 110 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 18), + { 0, 0, height }, { 16, 16, 0 }, { 0, 0, height + 100 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 25), + { 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 + 128, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 5), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 12), + { 0, 0, height }, { 32, 16, 0 }, { 0, 16, height + 200 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 19), + { 0, 0, height }, { 32, 16, 0 }, { 0, 0, height + 200 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 26), + { 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 + 224, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 6), + { 0, 0, height }, { 32, 16, 0 }, { 0, 16, height + 32 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 13), + { 0, 0, height }, { 32, 16, 0 }, { 0, 16, height + 32 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 20), + { 0, 0, height }, { 32, 16, 0 }, { 0, 0, height + 32 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 27), + { 0, 0, height }, { 32, 16, 0 }, { 0, 0, height + 32 }); + break; + } + 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_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + break; + } +} + +static void lim_launched_rc_track_right_large_half_loop_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 28), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 35), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 42), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 49), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + break; + } + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 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_C4 | SEGMENT_CC | SEGMENT_D0, 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 29), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 36), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 43), + { 0, 0, height }, { 32, 20, 9 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 50), + { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 15, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + 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 + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 30), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 37), + { 0, 0, height }, { 32, 16, 0 }, { 0, 16, height + 70 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 44), + { 0, 0, height }, { 32, 16, 0 }, { 0, 0, height + 70 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 51), + { 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 + 88, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 31), + { 0, 0, height }, { 32, 16, 3 }, { 0, 16, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 28, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 38), + { 0, 0, height }, { 32, 16, 0 }, { 0, 16, height + 200 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 0, height + 28, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 45), + { 0, 0, height }, { 32, 16, 0 }, { 0, 0, height + 200 }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 28, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 52), + { 0, 0, height }, { 32, 16, 3 }, { 0, 0, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 28, height, 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 + 224, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 32), + { 0, 0, height }, { 16, 16, 3 }, { 16, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 39), + { 0, 0, height }, { 16, 16, 0 }, { 0, 0, height + 100 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 46), + { 0, 0, height }, { 16, 16, 0 }, { 0, 16, height + 110 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 53), + { 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 + 128, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 33), + { 0, 0, height }, { 32, 16, 3 }, { 0, 0, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 40), + { 0, 0, height }, { 32, 16, 0 }, { 0, 0, height + 200 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 47), + { 0, 0, height }, { 32, 16, 0 }, { 0, 16, height + 200 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 54), + { 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 + 224, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 34), + { 0, 0, height }, { 32, 16, 0 }, { 0, 0, height + 32 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 41), + { 0, 0, height }, { 32, 16, 0 }, { 0, 0, height + 32 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 48), + { 0, 0, height }, { 32, 16, 0 }, { 0, 16, height + 32 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 55), + { 0, 0, height }, { 32, 16, 0 }, { 0, 16, height + 32 }); + break; + } + 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_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + break; + } +} + +static void lim_launched_rc_track_right_large_half_loop_down( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_right_large_half_loop_up(session, ride, 6 - trackSequence, direction, height, trackElement); +} + +static void lim_launched_rc_track_left_large_half_loop_down( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_left_large_half_loop_up(session, ride, 6 - trackSequence, direction, height, trackElement); +} + +static void lim_launched_rc_track_flat_to_60_deg_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 0), + { 0, 0, height }, { 32, 27, 4 }, { 0, 2, height }); + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 3, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 2), + { 0, 0, height }, { 1, 24, 43 }, { 29, 4, height + 2 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 1), + { 0, 0, height }, { 32, 2, 43 }, { 0, 4, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height + 4, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 4), + { 0, 0, height }, { 1, 24, 43 }, { 29, 4, height + 2 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 3), + { 0, 0, height }, { 32, 2, 43 }, { 0, 4, height }); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height + 4, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 5), + { 0, 0, height }, { 32, 27, 4 }, { 0, 2, height }); + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 3, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 24, 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 + 64, 0x20); +} + +static void lim_launched_rc_track_60_deg_up_to_flat( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 6), + { 0, 0, height }, { 32, 27, 4 }, { 0, 2, height }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 7), + { 0, 0, height }, { 32, 2, 43 }, { 0, 4, height }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 8), + { 0, 0, height }, { 1, 24, 43 }, { 29, 4, height + 2 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 10), + { 0, 0, height }, { 1, 24, 43 }, { 29, 4, height + 2 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 9), + { 0, 0, height }, { 32, 2, 43 }, { 0, 4, height }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 11), + { 0, 0, height }, { 32, 27, 4 }, { 0, 2, height }); + break; + } + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 16, 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 + 24, 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 + 72, 0x20); +} + +static void lim_launched_rc_track_flat_to_60_deg_down( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_60_deg_up_to_flat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void lim_launched_rc_track_60_deg_down_to_flat( + paint_session& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + lim_launched_rc_track_flat_to_60_deg_up(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void lim_launched_rc_track_diag_flat_to_60_deg_up( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 15), + { -16, -16, height }, { 32, 32, 4 }, { -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 + 64, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 12), + { -16, -16, height }, { 32, 32, 4 }, { -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 + 64, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 14), + { -16, -16, height }, { 32, 32, 4 }, { -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 + 64, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 13), + { -16, -16, height }, { 32, 32, 4 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 7, 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 + 64, 0x20); + break; + } +} + +static void lim_launched_rc_track_diag_60_deg_up_to_flat( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 19), + { -16, -16, height }, { 32, 32, 4 }, { -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 + 72, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 16), + { -16, -16, height }, { 32, 32, 4 }, { -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 + 72, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 18), + { -16, -16, height }, { 32, 32, 4 }, { -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 + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 20, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 17), + { -16, -16, height }, { 32, 32, 4 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 20, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 20, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 20, 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 + 72, 0x20); + break; + } +} + +static void lim_launched_rc_track_diag_flat_to_60_deg_down( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 17), + { -16, -16, height }, { 32, 32, 4 }, { -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 + 72, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 18), + { -16, -16, height }, { 32, 32, 4 }, { -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 + 72, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 16), + { -16, -16, height }, { 32, 32, 4 }, { -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 + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 16, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 19), + { -16, -16, height }, { 32, 32, 4 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 16, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 16, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 16, 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 + 72, 0x20); + break; + } +} + +static void lim_launched_rc_track_diag_60_deg_down_to_flat( + 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].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 13), + { -16, -16, height }, { 32, 32, 4 }, { -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 + 64, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 14), + { -16, -16, height }, { 32, 32, 4 }, { -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 + 64, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 12), + { -16, -16, height }, { 32, 32, 4 }, { -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 + 64, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 15), + { -16, -16, height }, { 32, 32, 4 }, { -16, -16, height }); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 5, 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 + 64, 0x20); + break; + } +} + +static void lim_launched_rc_track_booster( + 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].WithIndex(15012), { 0, 0, height }, { 32, 20, 3 }, + { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(15014), { 0, 0, height }, { 32, 1, 26 }, + { 0, 27, height }); + break; + case 1: + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(15013), { 0, 0, height }, { 32, 20, 3 }, + { 0, 6, height }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(15015), { 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, METAL_SUPPORTS_TUBES, 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); +} + TRACK_PAINT_FUNCTION get_track_paint_function_lim_launched_rc(int32_t trackType) { switch (trackType) @@ -2021,7 +5886,6 @@ TRACK_PAINT_FUNCTION get_track_paint_function_lim_launched_rc(int32_t trackType) case TrackElemType::LeftBankedDown25ToFlat: case TrackElemType::RightBankedDown25ToFlat: return get_track_paint_function_looping_rc(trackType); - case TrackElemType::EndStation: case TrackElemType::BeginStation: case TrackElemType::MiddleStation: @@ -2074,6 +5938,92 @@ TRACK_PAINT_FUNCTION get_track_paint_function_lim_launched_rc(int32_t trackType) return lim_launched_rc_track_left_quarter_turn_1_90_deg_down; case TrackElemType::RightQuarterTurn1TileDown90: return lim_launched_rc_track_right_quarter_turn_1_90_deg_down; + case TrackElemType::FlatToUp60LongBase: + return lim_launched_rc_track_flat_to_60_deg_up_long_base; + case TrackElemType::Up60ToFlatLongBase: + return lim_launched_rc_track_60_deg_up_to_flat_long_base; + case TrackElemType::FlatToDown60LongBase: + return lim_launched_rc_track_flat_to_60_deg_down_long_base; + case TrackElemType::Down60ToFlatLongBase: + return lim_launched_rc_track_60_deg_down_to_flat_long_base; + case TrackElemType::FlatToUp60: + return lim_launched_rc_track_flat_to_60_deg_up; + case TrackElemType::Up60ToFlat: + return lim_launched_rc_track_60_deg_up_to_flat; + case TrackElemType::FlatToDown60: + return lim_launched_rc_track_flat_to_60_deg_down; + case TrackElemType::Down60ToFlat: + return lim_launched_rc_track_60_deg_down_to_flat; + case TrackElemType::DiagFlatToUp60: + return lim_launched_rc_track_diag_flat_to_60_deg_up; + case TrackElemType::DiagUp60ToFlat: + return lim_launched_rc_track_diag_60_deg_up_to_flat; + case TrackElemType::DiagFlatToDown60: + return lim_launched_rc_track_diag_flat_to_60_deg_down; + case TrackElemType::DiagDown60ToFlat: + return lim_launched_rc_track_diag_60_deg_down_to_flat; + case TrackElemType::LeftBarrelRollUpToDown: + return lim_launched_rc_track_left_barrel_roll_up_to_down; + case TrackElemType::RightBarrelRollUpToDown: + return lim_launched_rc_track_right_barrel_roll_up_to_down; + case TrackElemType::LeftBarrelRollDownToUp: + return lim_launched_rc_track_left_barrel_roll_down_to_up; + case TrackElemType::RightBarrelRollDownToUp: + return lim_launched_rc_track_right_barrel_roll_down_to_up; + case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25: + return lim_launched_rc_track_left_bank_to_left_quarter_turn_3_25_deg_up; + case TrackElemType::RightBankToRightQuarterTurn3TilesUp25: + return lim_launched_rc_track_right_bank_to_right_quarter_turn_3_25_deg_up; + case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank: + return lim_launched_rc_track_left_quarter_turn_3_25_deg_down_to_left_bank; + case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank: + return lim_launched_rc_track_right_quarter_turn_3_25_deg_down_to_right_bank; + case TrackElemType::HalfLoopUp: + return lim_launched_rc_track_half_loop_up; + case TrackElemType::HalfLoopDown: + return lim_launched_rc_track_half_loop_down; + case TrackElemType::LeftMediumHalfLoopUp: + return lim_launched_rc_track_left_medium_half_loop_up; + case TrackElemType::RightMediumHalfLoopUp: + return lim_launched_rc_track_right_medium_half_loop_up; + case TrackElemType::LeftMediumHalfLoopDown: + return lim_launched_rc_track_left_medium_half_loop_down; + case TrackElemType::RightMediumHalfLoopDown: + return lim_launched_rc_track_right_medium_half_loop_down; + case TrackElemType::LeftLargeHalfLoopUp: + return lim_launched_rc_track_left_large_half_loop_up; + case TrackElemType::RightLargeHalfLoopUp: + return lim_launched_rc_track_right_large_half_loop_up; + case TrackElemType::RightLargeHalfLoopDown: + return lim_launched_rc_track_right_large_half_loop_down; + case TrackElemType::LeftLargeHalfLoopDown: + return lim_launched_rc_track_left_large_half_loop_down; + case TrackElemType::LeftLargeCorkscrewUp: + return lim_launched_rc_track_left_large_corkscrew_up; + case TrackElemType::RightLargeCorkscrewUp: + return lim_launched_rc_track_right_large_corkscrew_up; + case TrackElemType::LeftLargeCorkscrewDown: + return lim_launched_rc_track_left_large_corkscrew_down; + case TrackElemType::RightLargeCorkscrewDown: + return lim_launched_rc_track_right_large_corkscrew_down; + case TrackElemType::LeftZeroGRollUp: + return lim_launched_rc_track_left_zero_g_roll_up; + case TrackElemType::RightZeroGRollUp: + return lim_launched_rc_track_right_zero_g_roll_up; + case TrackElemType::LeftZeroGRollDown: + return lim_launched_rc_track_left_zero_g_roll_down; + case TrackElemType::RightZeroGRollDown: + return lim_launched_rc_track_right_zero_g_roll_down; + case TrackElemType::LeftLargeZeroGRollUp: + return lim_launched_rc_track_left_large_zero_g_roll_up; + case TrackElemType::RightLargeZeroGRollUp: + return lim_launched_rc_track_right_large_zero_g_roll_up; + case TrackElemType::LeftLargeZeroGRollDown: + return lim_launched_rc_track_left_large_zero_g_roll_down; + case TrackElemType::RightLargeZeroGRollDown: + return lim_launched_rc_track_right_large_zero_g_roll_down; + case TrackElemType::Booster: + return lim_launched_rc_track_booster; } return nullptr; } diff --git a/src/openrct2/ride/coaster/meta/LIMLaunchedRollerCoaster.h b/src/openrct2/ride/coaster/meta/LIMLaunchedRollerCoaster.h index b7d0a9623e..fb7889cf06 100644 --- a/src/openrct2/ride/coaster/meta/LIMLaunchedRollerCoaster.h +++ b/src/openrct2/ride/coaster/meta/LIMLaunchedRollerCoaster.h @@ -19,8 +19,8 @@ constexpr const RideTypeDescriptor LIMLaunchedRollerCoasterRTD = { SET_FIELD(AlternateType, RIDE_TYPE_NULL), SET_FIELD(Category, RIDE_CATEGORY_ROLLERCOASTER), - SET_FIELD(EnabledTrackPieces, {TRACK_STRAIGHT, TRACK_STATION_END, TRACK_FLAT_ROLL_BANKING, TRACK_VERTICAL_LOOP, TRACK_SLOPE, TRACK_SLOPE_STEEP_UP, TRACK_SLOPE_STEEP_DOWN, TRACK_SLOPE_CURVE, TRACK_SLOPE_CURVE_STEEP, TRACK_S_BEND, TRACK_CURVE_SMALL, TRACK_CURVE, TRACK_TWIST, TRACK_CORKSCREW, TRACK_HELIX_SMALL, TRACK_BRAKES, TRACK_ON_RIDE_PHOTO, TRACK_SLOPE_VERTICAL, TRACK_BLOCK_BRAKES, TRACK_SLOPE_ROLL_BANKING, TRACK_CURVE_VERTICAL, TRACK_QUARTER_LOOP}), - SET_FIELD(ExtraTrackPieces, {}), + SET_FIELD(EnabledTrackPieces, {TRACK_STRAIGHT, TRACK_STATION_END, TRACK_FLAT_ROLL_BANKING, TRACK_VERTICAL_LOOP, TRACK_SLOPE, TRACK_SLOPE_STEEP_UP, TRACK_SLOPE_STEEP_DOWN, TRACK_SLOPE_CURVE, TRACK_SLOPE_CURVE_STEEP, TRACK_S_BEND, TRACK_CURVE_SMALL, TRACK_CURVE, TRACK_TWIST, TRACK_CORKSCREW, TRACK_HELIX_SMALL, TRACK_BRAKES, TRACK_ON_RIDE_PHOTO, TRACK_SLOPE_VERTICAL, TRACK_BLOCK_BRAKES, TRACK_SLOPE_ROLL_BANKING, TRACK_CURVE_VERTICAL, TRACK_QUARTER_LOOP, TRACK_BARREL_ROLL, TRACK_SLOPE_CURVE_BANKED, TRACK_SLOPE_STEEP_LONG, TRACK_HALF_LOOP, TRACK_HALF_LOOP_MEDIUM, TRACK_HALF_LOOP_LARGE, TRACK_CORKSCREW_LARGE}), + SET_FIELD(ExtraTrackPieces, {TRACK_SLOPE_LONG, TRACK_ZERO_G_ROLL, TRACK_ZERO_G_ROLL_LARGE}), SET_FIELD(CoveredTrackPieces, {}), SET_FIELD(StartTrackPiece, TrackElemType::EndStation), SET_FIELD(TrackPaintFunction, get_track_paint_function_lim_launched_rc), @@ -29,7 +29,7 @@ constexpr const RideTypeDescriptor LIMLaunchedRollerCoasterRTD = RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS), SET_FIELD(RideModes, EnumsToFlags(RideMode::PoweredLaunchPasstrough, RideMode::PoweredLaunch, RideMode::PoweredLaunchBlockSectioned)), SET_FIELD(DefaultMode, RideMode::PoweredLaunchPasstrough), - SET_FIELD(OperatingSettings, { 10, 31, 26, 18, 18, 0 }), + SET_FIELD(OperatingSettings, { 10, 31, 26, 18, 52, 0 }), SET_FIELD(Naming, { STR_RIDE_NAME_LIM_LAUNCHED_ROLLER_COASTER, STR_RIDE_DESCRIPTION_LIM_LAUNCHED_ROLLER_COASTER }), SET_FIELD(NameConvention, { RideComponentType::Train, RideComponentType::Track, RideComponentType::Station }), SET_FIELD(EnumName, nameof(RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER)), diff --git a/src/openrct2/ride/coaster/meta/LoopingRollerCoaster.h b/src/openrct2/ride/coaster/meta/LoopingRollerCoaster.h index 38e06824d0..95d3f6c0a3 100644 --- a/src/openrct2/ride/coaster/meta/LoopingRollerCoaster.h +++ b/src/openrct2/ride/coaster/meta/LoopingRollerCoaster.h @@ -19,8 +19,8 @@ constexpr const RideTypeDescriptor LoopingRollerCoasterRTD = { SET_FIELD(AlternateType, RIDE_TYPE_NULL), SET_FIELD(Category, RIDE_CATEGORY_ROLLERCOASTER), - SET_FIELD(EnabledTrackPieces, {TRACK_STRAIGHT, TRACK_STATION_END, TRACK_LIFT_HILL, TRACK_FLAT_ROLL_BANKING, TRACK_VERTICAL_LOOP, TRACK_SLOPE, TRACK_SLOPE_STEEP_UP, TRACK_SLOPE_STEEP_DOWN, TRACK_SLOPE_CURVE, TRACK_SLOPE_CURVE_STEEP, TRACK_S_BEND, TRACK_CURVE_SMALL, TRACK_CURVE, TRACK_HELIX_SMALL, TRACK_BRAKES, TRACK_ON_RIDE_PHOTO, TRACK_BLOCK_BRAKES, TRACK_SLOPE_ROLL_BANKING, TRACK_BOOSTER}), - SET_FIELD(ExtraTrackPieces, {TRACK_SLOPE_VERTICAL, TRACK_TWIST, TRACK_CORKSCREW, TRACK_CURVE_VERTICAL, TRACK_QUARTER_LOOP}), + SET_FIELD(EnabledTrackPieces, {TRACK_STRAIGHT, TRACK_STATION_END, TRACK_LIFT_HILL, TRACK_FLAT_ROLL_BANKING, TRACK_VERTICAL_LOOP, TRACK_SLOPE, TRACK_SLOPE_STEEP_UP, TRACK_SLOPE_STEEP_DOWN, TRACK_SLOPE_CURVE, TRACK_SLOPE_CURVE_STEEP, TRACK_S_BEND, TRACK_CURVE_SMALL, TRACK_CURVE, TRACK_HELIX_SMALL, TRACK_BRAKES, TRACK_ON_RIDE_PHOTO, TRACK_BLOCK_BRAKES, TRACK_SLOPE_ROLL_BANKING, TRACK_BOOSTER, TRACK_SLOPE_CURVE_BANKED, TRACK_SLOPE_STEEP_LONG}), + SET_FIELD(ExtraTrackPieces, {TRACK_SLOPE_VERTICAL, TRACK_TWIST, TRACK_CORKSCREW, TRACK_CURVE_VERTICAL, TRACK_QUARTER_LOOP, TRACK_SLOPE_LONG, TRACK_BARREL_ROLL, TRACK_HALF_LOOP, TRACK_HALF_LOOP_MEDIUM, TRACK_HALF_LOOP_LARGE,TRACK_CORKSCREW_LARGE, TRACK_ZERO_G_ROLL, TRACK_ZERO_G_ROLL_LARGE}), SET_FIELD(CoveredTrackPieces, {}), SET_FIELD(StartTrackPiece, TrackElemType::EndStation), SET_FIELD(TrackPaintFunction, get_track_paint_function_looping_rc), diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index c202cb50c8..99ab63297a 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1176,7 +1176,20 @@ enum SPR_RIDE_DESIGN_PREVIEW_CLASSIC_WOODEN_ROLLER_COASTER_TRACK, SPR_RIDE_DESIGN_PREVIEW_CLASSIC_WOODEN_ROLLER_COASTER_SUPPORTS, - SPR_G2_END = SPR_RIDE_DESIGN_PREVIEW_CLASSIC_WOODEN_ROLLER_COASTER_SUPPORTS + 1, + SPR_G2_LIM_LAUNCHED_TRACK_BEGIN = SPR_RIDE_DESIGN_PREVIEW_CLASSIC_WOODEN_ROLLER_COASTER_SUPPORTS + 1, + SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL = SPR_G2_LIM_LAUNCHED_TRACK_BEGIN, + SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP = SPR_G2_LIM_LAUNCHED_TRACK_BARREL_ROLL + 48, + SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP = SPR_G2_LIM_LAUNCHED_TRACK_HALF_LOOP + 16, + SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW = SPR_G2_LIM_LAUNCHED_TRACK_FLAT_TO_STEEP + 32, + SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION = SPR_G2_LIM_LAUNCHED_TRACK_LARGE_CORKSCREW + 40, + SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP = SPR_G2_LIM_LAUNCHED_TRACK_TURN_BANK_TRANSITION + 18, + SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP = SPR_G2_LIM_LAUNCHED_TRACK_MEDIUM_HALF_LOOP + 40, + SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL = SPR_G2_LIM_LAUNCHED_TRACK_LARGE_HALF_LOOP + 56, + SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL = SPR_G2_LIM_LAUNCHED_TRACK_ZERO_G_ROLL + 32, + SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP = SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 40, + SPR_G2_LIM_LAUNCHED_TRACK_END = SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 20, + + SPR_G2_END = SPR_G2_LIM_LAUNCHED_TRACK_END, SPR_CSG_BEGIN = SPR_G2_END, SPR_CSG_END = SPR_CSG_BEGIN + RCT1::Limits::Num_LL_CSG_Entries,