diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 1b6d0bc27e..ccad486698 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,5 +1,6 @@ 0.4.7 (in development) ------------------------------------------------------------------------ +- Feature: [#20141] Add additional track pieces to the Giga Coaster. - Feature: [OpenMusic#46] Added Mystic ride music style. - Change: [#20790] Default ride price set to free if park charges for entry. - Fix: [#20737] Spent money in player window underflows when getting refunds. diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 30e04cda64..40d397ca9c 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -1724,7 +1724,6 @@ "palette": "keep", "forceBmp": true }, - { "path": "font/latin/w-circumflex-uc-bold.png", "y_offset": -1, @@ -2651,10 +2650,3568 @@ "palette": "keep" }, { - "path": "track/bm/booster_1.png" + "path": "track/intamin/steep_to_vertical_up_1.png", + "x_offset": -21, + "y_offset": -54, + "palette": "keep" }, { - "path": "track/bm/booster_2.png" + "path": "track/intamin/steep_to_vertical_up_2.png", + "x_offset": -21, + "y_offset": -53, + "palette": "keep" + }, + { + "path": "track/intamin/steep_to_vertical_up_3.png", + "x_offset": -10, + "y_offset": -53, + "palette": "keep" + }, + { + "path": "track/intamin/steep_to_vertical_up_4.png", + "x_offset": -10, + "y_offset": -54, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_to_steep_up_1.png", + "x_offset": -6, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_to_steep_up_2.png", + "x_offset": -6, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_to_steep_up_3.png", + "x_offset": -25, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_to_steep_up_4.png", + "x_offset": -25, + "y_offset": -61, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_1.png", + "x_offset": -6, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_2.png", + "x_offset": -6, + "y_offset": -29, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_3.png", + "x_offset": -10, + "y_offset": -29, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_4.png", + "x_offset": -10, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_twist_left_up_1.png", + "x_offset": -10, + "y_offset": -95, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_twist_left_up_2_1.png", + "x_offset": -6, + "y_offset": -94, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_twist_left_up_2_2.png", + "x_offset": -6, + "y_offset": -45, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_twist_left_up_3.png", + "x_offset": -10, + "y_offset": -93, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_twist_left_up_4_1.png", + "x_offset": -13, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_twist_left_up_4_2.png", + "x_offset": -13, + "y_offset": -93, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_twist_right_up_1_1.png", + "x_offset": -6, + "y_offset": -45, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_twist_right_up_1_2.png", + "x_offset": -6, + "y_offset": -93, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_twist_right_up_2.png", + "x_offset": -10, + "y_offset": -93, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_twist_right_up_3_1.png", + "x_offset": -13, + "y_offset": -94, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_twist_right_up_3_2.png", + "x_offset": -13, + "y_offset": -45, + "palette": "keep" + }, + { + "path": "track/intamin/vertical_twist_right_up_4.png", + "x_offset": -10, + "y_offset": -94, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_1_1.png", + "x_offset": -22, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_1_2.png", + "x_offset": -17, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_1_3.png", + "x_offset": -22, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_1_4.png", + "x_offset": -20, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_1_5.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_1_6.png", + "x_offset": -11, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_2_1.png", + "x_offset": -22, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_2_2.png", + "x_offset": -20, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_2_3.png", + "x_offset": -28, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_2_4.png", + "x_offset": -28, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_2_5.png", + "x_offset": 10, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_2_6.png", + "x_offset": -32, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_3_1.png", + "x_offset": -29, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_3_2.png", + "x_offset": 10, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_3_3.png", + "x_offset": -26, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_3_4.png", + "x_offset": -28, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_3_5.png", + "x_offset": -1, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_3_6.png", + "x_offset": -22, + "y_offset": -29, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_4_1.png", + "x_offset": -15, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_4_2.png", + "x_offset": 13, + "y_offset": 23, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_4_3.png", + "x_offset": -12, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_4_4.png", + "x_offset": -10, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_4_5.png", + "x_offset": -12, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_left_4_6.png", + "x_offset": -22, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_1_1.png", + "x_offset": -22, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_1_2.png", + "x_offset": -17, + "y_offset": 22, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_1_3.png", + "x_offset": -26, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_1_4.png", + "x_offset": -15, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_1_5.png", + "x_offset": -22, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_1_6.png", + "x_offset": -26, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_2_1.png", + "x_offset": -22, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_2_2.png", + "x_offset": -17, + "y_offset": 9, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_2_3.png", + "x_offset": -7, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_2_4.png", + "x_offset": 14, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_2_5.png", + "x_offset": -7, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_2_6.png", + "x_offset": -6, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_3_1.png", + "x_offset": -2, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_3_2.png", + "x_offset": -4, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_3_3.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_3_4.png", + "x_offset": 0, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_3_5.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_3_6.png", + "x_offset": -22, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_4_1.png", + "x_offset": -12, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_4_2.png", + "x_offset": -25, + "y_offset": 5, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_4_3.png", + "x_offset": 8, + "y_offset": 14, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_4_4.png", + "x_offset": -28, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_4_5.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/barrel_roll_right_4_6.png", + "x_offset": -22, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_1_1.png", + "x_offset": -28, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_1_2.png", + "x_offset": -23, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_1_3.png", + "x_offset": -13, + "y_offset": -92, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_1_4.png", + "x_offset": -22, + "y_offset": 13, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_2_1.png", + "x_offset": -16, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_2_2.png", + "x_offset": 1, + "y_offset": -37, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_2_3.png", + "x_offset": -38, + "y_offset": -114, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_2_4.png", + "x_offset": -22, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_3_1.png", + "x_offset": -29, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_3_2.png", + "x_offset": -30, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_3_3.png", + "x_offset": -2, + "y_offset": -121, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_3_4.png", + "x_offset": -29, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_4_1.png", + "x_offset": -13, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_4_2.png", + "x_offset": -14, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_4_3.png", + "x_offset": 4, + "y_offset": -101, + "palette": "keep" + }, + { + "path": "track/intamin/half_loop_4_4.png", + "x_offset": 1, + "y_offset": 4, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_1_1.png", + "x_offset": -28, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_1_2.png", + "x_offset": -26, + "y_offset": -111, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_1_3.png", + "x_offset": -22, + "y_offset": -84, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_1_4.png", + "x_offset": -32, + "y_offset": 9, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_2_1.png", + "x_offset": -15, + "y_offset": -26, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_2_2.png", + "x_offset": 1, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_2_3.png", + "x_offset": -34, + "y_offset": -114, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_2_4.png", + "x_offset": -6, + "y_offset": -3, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_3_1.png", + "x_offset": -25, + "y_offset": -110, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_3_2.png", + "x_offset": -19, + "y_offset": -51, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_3_3.png", + "x_offset": 11, + "y_offset": -94, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_3_4.png", + "x_offset": -22, + "y_offset": 3, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_4_1.png", + "x_offset": -15, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_4_2.png", + "x_offset": -20, + "y_offset": -41, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_4_3.png", + "x_offset": -4, + "y_offset": -87, + "palette": "keep" + }, + { + "path": "track/intamin/left_vertical_loop_4_4.png", + "x_offset": -13, + "y_offset": 17, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_1_1.png", + "x_offset": -27, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_1_2.png", + "x_offset": -27, + "y_offset": -41, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_1_3.png", + "x_offset": -20, + "y_offset": -86, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_1_4.png", + "x_offset": -21, + "y_offset": 16, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_2_1.png", + "x_offset": -16, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_2_2.png", + "x_offset": -7, + "y_offset": -51, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_2_3.png", + "x_offset": -23, + "y_offset": -100, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_2_4.png", + "x_offset": -16, + "y_offset": 5, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_3_1.png", + "x_offset": -46, + "y_offset": -26, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_3_2.png", + "x_offset": -41, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_3_3.png", + "x_offset": 8, + "y_offset": -114, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_3_4.png", + "x_offset": -27, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_4_1.png", + "x_offset": -10, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_4_2.png", + "x_offset": -11, + "y_offset": -111, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_4_3.png", + "x_offset": 1, + "y_offset": -83, + "palette": "keep" + }, + { + "path": "track/intamin/right_vertical_loop_4_4.png", + "x_offset": -9, + "y_offset": 9, + "palette": "keep" + }, + { + "path": "track/intamin/quarter_loop_up_1_1.png", + "x_offset": -18, + "y_offset": -55, + "palette": "keep" + }, + { + "path": "track/intamin/quarter_loop_up_1_2.png", + "x_offset": 0, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/intamin/quarter_loop_up_1_3.png", + "x_offset": -22, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/intamin/quarter_loop_up_2_1.png", + "x_offset": -24, + "y_offset": -79, + "palette": "keep" + }, + { + "path": "track/intamin/quarter_loop_up_2_2.png", + "x_offset": -32, + "y_offset": -66, + "palette": "keep" + }, + { + "path": "track/intamin/quarter_loop_up_2_3.png", + "x_offset": -22, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/quarter_loop_up_3_1.png", + "x_offset": -10, + "y_offset": -78, + "palette": "keep" + }, + { + "path": "track/intamin/quarter_loop_up_3_2.png", + "x_offset": -21, + "y_offset": -68, + "palette": "keep" + }, + { + "path": "track/intamin/quarter_loop_up_3_3.png", + "x_offset": -11, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/quarter_loop_up_4_1.png", + "x_offset": -10, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/intamin/quarter_loop_up_4_2.png", + "x_offset": -28, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/intamin/quarter_loop_up_4_3.png", + "x_offset": -32, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_left_1_1.png", + "x_offset": -22, + "y_offset": -71, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_left_1_2.png", + "x_offset": -20, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_left_1_3.png", + "x_offset": -22, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_left_2_1.png", + "x_offset": -22, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_left_2_2.png", + "x_offset": -32, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_left_2_3.png", + "x_offset": -21, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_left_3_1.png", + "x_offset": -31, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_left_3_2.png", + "x_offset": -3, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_left_3_3.png", + "x_offset": -19, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_left_4_1.png", + "x_offset": -32, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_left_4_2.png", + "x_offset": -34, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_left_4_3.png", + "x_offset": -22, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_right_1_1.png", + "x_offset": -22, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_right_1_2.png", + "x_offset": -8, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_right_1_3.png", + "x_offset": -20, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_right_2_1.png", + "x_offset": -22, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_right_2_2.png", + "x_offset": -13, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_right_2_3.png", + "x_offset": -22, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_right_3_1.png", + "x_offset": -7, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_right_3_2.png", + "x_offset": -22, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_right_3_3.png", + "x_offset": -22, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_right_4_1.png", + "x_offset": -27, + "y_offset": -65, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_right_4_2.png", + "x_offset": -3, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/intamin/corkscrew_right_4_3.png", + "x_offset": -26, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_1_1.png", + "x_offset": -22, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_1_2.png", + "x_offset": -21, + "y_offset": -72, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_1_3.png", + "x_offset": -28, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_1_4.png", + "x_offset": -23, + "y_offset": -52, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_1_5.png", + "x_offset": -22, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_2_1.png", + "x_offset": -22, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_2_2.png", + "x_offset": -32, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_2_3.png", + "x_offset": -23, + "y_offset": -50, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_2_4.png", + "x_offset": -18, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_2_5.png", + "x_offset": -14, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_3_1.png", + "x_offset": -16, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_3_2.png", + "x_offset": -19, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_3_3.png", + "x_offset": 10, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_3_4.png", + "x_offset": -8, + "y_offset": -38, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_3_5.png", + "x_offset": -16, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_4_1.png", + "x_offset": -24, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_4_2.png", + "x_offset": -23, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_4_3.png", + "x_offset": -14, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_4_4.png", + "x_offset": -29, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_left_4_5.png", + "x_offset": -22, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_1_1.png", + "x_offset": -22, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_1_2.png", + "x_offset": -22, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_1_3.png", + "x_offset": -20, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_1_4.png", + "x_offset": -28, + "y_offset": -37, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_1_5.png", + "x_offset": -32, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_2_1.png", + "x_offset": -22, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_2_2.png", + "x_offset": -16, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_2_3.png", + "x_offset": -24, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_2_4.png", + "x_offset": -16, + "y_offset": -38, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_2_5.png", + "x_offset": -22, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_3_1.png", + "x_offset": -29, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_3_2.png", + "x_offset": -16, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_3_3.png", + "x_offset": -25, + "y_offset": -50, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_3_4.png", + "x_offset": -28, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_3_5.png", + "x_offset": -22, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_4_1.png", + "x_offset": -26, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_4_2.png", + "x_offset": -11, + "y_offset": -68, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_4_3.png", + "x_offset": 10, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_4_4.png", + "x_offset": -17, + "y_offset": -52, + "palette": "keep" + }, + { + "path": "track/intamin/large_corkscrew_right_4_5.png", + "x_offset": -24, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_left_bank_to_gentle_up_1_1.png", + "x_offset": -26, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_left_bank_to_gentle_up_1_2.png", + "x_offset": -16, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_left_bank_to_gentle_up_2_1.png", + "x_offset": 3, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_left_bank_to_gentle_up_2_2.png", + "x_offset": -17, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_left_bank_to_gentle_up_2_3.png", + "x_offset": -38, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_left_bank_to_gentle_up_3_1.png", + "x_offset": -18, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_left_bank_to_gentle_up_3_2.png", + "x_offset": -5, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_left_bank_to_gentle_up_4_1.png", + "x_offset": -26, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_left_bank_to_gentle_up_4_2.png", + "x_offset": -28, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_right_bank_to_gentle_up_1_1.png", + "x_offset": -29, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_right_bank_to_gentle_up_1_2.png", + "x_offset": -26, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_right_bank_to_gentle_up_2_1.png", + "x_offset": -13, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_right_bank_to_gentle_up_2_2.png", + "x_offset": -28, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_right_bank_to_gentle_up_3_1.png", + "x_offset": -38, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_right_bank_to_gentle_up_3_2.png", + "x_offset": -38, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_right_bank_to_gentle_up_3_3.png", + "x_offset": -16, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_right_bank_to_gentle_up_4_1.png", + "x_offset": -6, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/intamin/small_turn_right_bank_to_gentle_up_4_2.png", + "x_offset": -18, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_1_1.png", + "x_offset": -22, + "y_offset": -34, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_1_2.png", + "x_offset": -21, + "y_offset": -51, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_1_3.png", + "x_offset": -29, + "y_offset": -100, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_1_4.png", + "x_offset": -44, + "y_offset": -128, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_1_5.png", + "x_offset": -21, + "y_offset": -37, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_2_1.png", + "x_offset": -22, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_2_2.png", + "x_offset": 0, + "y_offset": -34, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_2_3.png", + "x_offset": 0, + "y_offset": -87, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_2_4.png", + "x_offset": -30, + "y_offset": -148, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_2_5.png", + "x_offset": -22, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_3_1.png", + "x_offset": -23, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_3_2.png", + "x_offset": 0, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_3_3.png", + "x_offset": -3, + "y_offset": -59, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_3_4.png", + "x_offset": -32, + "y_offset": -154, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_3_5.png", + "x_offset": -17, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_4_1.png", + "x_offset": -23, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_4_2.png", + "x_offset": -25, + "y_offset": -26, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_4_3.png", + "x_offset": -30, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_4_4.png", + "x_offset": -10, + "y_offset": -129, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_left_4_5.png", + "x_offset": -28, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_1_1.png", + "x_offset": -22, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_1_2.png", + "x_offset": -19, + "y_offset": -26, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_1_3.png", + "x_offset": -17, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_1_4.png", + "x_offset": -26, + "y_offset": -129, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_1_5.png", + "x_offset": -22, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_2_1.png", + "x_offset": -22, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_2_2.png", + "x_offset": -32, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_2_3.png", + "x_offset": -32, + "y_offset": -59, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_2_4.png", + "x_offset": -25, + "y_offset": -154, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_2_5.png", + "x_offset": -21, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_3_1.png", + "x_offset": -32, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_3_2.png", + "x_offset": -32, + "y_offset": -34, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_3_3.png", + "x_offset": -32, + "y_offset": -87, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_3_4.png", + "x_offset": -10, + "y_offset": -148, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_3_5.png", + "x_offset": -12, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_4_1.png", + "x_offset": -23, + "y_offset": -34, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_4_2.png", + "x_offset": -16, + "y_offset": -51, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_4_3.png", + "x_offset": -3, + "y_offset": -100, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_4_4.png", + "x_offset": -32, + "y_offset": -128, + "palette": "keep" + }, + { + "path": "track/intamin/medium_half_loop_right_4_5.png", + "x_offset": -32, + "y_offset": -37, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_1_1.png", + "x_offset": -22, + "y_offset": -29, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_1_2.png", + "x_offset": -18, + "y_offset": -42, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_1_3.png", + "x_offset": -19, + "y_offset": -70, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_1_4.png", + "x_offset": -24, + "y_offset": -85, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_1_5.png", + "x_offset": -16, + "y_offset": -70, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_1_6.png", + "x_offset": -9, + "y_offset": -183, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_1_7.png", + "x_offset": -21, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_2_1.png", + "x_offset": -22, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_2_2.png", + "x_offset": -6, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_2_3.png", + "x_offset": -9, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_2_4.png", + "x_offset": -8, + "y_offset": -94, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_2_5.png", + "x_offset": -32, + "y_offset": -130, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_2_6.png", + "x_offset": -25, + "y_offset": -197, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_2_7.png", + "x_offset": -22, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_3_1.png", + "x_offset": -24, + "y_offset": -3, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_3_2.png", + "x_offset": -32, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_3_3.png", + "x_offset": -29, + "y_offset": -38, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_3_4.png", + "x_offset": -7, + "y_offset": -61, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_3_5.png", + "x_offset": -7, + "y_offset": -117, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_3_6.png", + "x_offset": -22, + "y_offset": -197, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_3_7.png", + "x_offset": -28, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_4_1.png", + "x_offset": -24, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_4_2.png", + "x_offset": -30, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_4_3.png", + "x_offset": -32, + "y_offset": -52, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_4_4.png", + "x_offset": -32, + "y_offset": -84, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_4_5.png", + "x_offset": 16, + "y_offset": -62, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_4_6.png", + "x_offset": -16, + "y_offset": -186, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_left_4_7.png", + "x_offset": -24, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_1_1.png", + "x_offset": -22, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_1_2.png", + "x_offset": -18, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_1_3.png", + "x_offset": -13, + "y_offset": -52, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_1_4.png", + "x_offset": 0, + "y_offset": -84, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_1_5.png", + "x_offset": -32, + "y_offset": -62, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_1_6.png", + "x_offset": -19, + "y_offset": -186, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_1_7.png", + "x_offset": -22, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_2_1.png", + "x_offset": -22, + "y_offset": -3, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_2_2.png", + "x_offset": -13, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_2_3.png", + "x_offset": -6, + "y_offset": -38, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_2_4.png", + "x_offset": -16, + "y_offset": -61, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_2_5.png", + "x_offset": -23, + "y_offset": -117, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_2_6.png", + "x_offset": -17, + "y_offset": -197, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_2_7.png", + "x_offset": -21, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_3_1.png", + "x_offset": -26, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_3_2.png", + "x_offset": -30, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_3_3.png", + "x_offset": -29, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_3_4.png", + "x_offset": -32, + "y_offset": -94, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_3_5.png", + "x_offset": 16, + "y_offset": -130, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_3_6.png", + "x_offset": 0, + "y_offset": -197, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_3_7.png", + "x_offset": -17, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_4_1.png", + "x_offset": -24, + "y_offset": -29, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_4_2.png", + "x_offset": -25, + "y_offset": -42, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_4_3.png", + "x_offset": -21, + "y_offset": -70, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_4_4.png", + "x_offset": -5, + "y_offset": -85, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_4_5.png", + "x_offset": -7, + "y_offset": -70, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_4_6.png", + "x_offset": -32, + "y_offset": -183, + "palette": "keep" + }, + { + "path": "track/intamin/large_half_loop_right_4_7.png", + "x_offset": -31, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_1_1.png", + "x_offset": -22, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_1_2.png", + "x_offset": -10, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_1_3.png", + "x_offset": -11, + "y_offset": -26, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_1_4.png", + "x_offset": -19, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_2_1.png", + "x_offset": -22, + "y_offset": -3, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_2_2.png", + "x_offset": -22, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_2_3.png", + "x_offset": -23, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_2_4.png", + "x_offset": -21, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_3_1.png", + "x_offset": -20, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_3_2.png", + "x_offset": -22, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_3_3.png", + "x_offset": -11, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_3_4.png", + "x_offset": -23, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_4_1.png", + "x_offset": -15, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_4_2.png", + "x_offset": -11, + "y_offset": -45, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_4_3.png", + "x_offset": -3, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_left_4_4.png", + "x_offset": -21, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_1_1.png", + "x_offset": -22, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_1_2.png", + "x_offset": -27, + "y_offset": -45, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_1_3.png", + "x_offset": -22, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_1_4.png", + "x_offset": -27, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_2_1.png", + "x_offset": -22, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_2_2.png", + "x_offset": -17, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_2_3.png", + "x_offset": -13, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_2_4.png", + "x_offset": -11, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_3_1.png", + "x_offset": 3, + "y_offset": -3, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_3_2.png", + "x_offset": -9, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_3_3.png", + "x_offset": -11, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_3_4.png", + "x_offset": -21, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_4_1.png", + "x_offset": -20, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_4_2.png", + "x_offset": -35, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_4_3.png", + "x_offset": -24, + "y_offset": -26, + "palette": "keep" + }, + { + "path": "track/intamin/zero_g_roll_right_4_4.png", + "x_offset": -22, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_1_1.png", + "x_offset": -21, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_1_2.png", + "x_offset": -23, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_1_3.png", + "x_offset": -15, + "y_offset": -52, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_1_4.png", + "x_offset": -13, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_1_5.png", + "x_offset": -17, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_2_1.png", + "x_offset": -21, + "y_offset": -42, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_2_2.png", + "x_offset": -25, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_2_3.png", + "x_offset": -32, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_2_4.png", + "x_offset": -29, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_3_1.png", + "x_offset": -10, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_3_2.png", + "x_offset": -18, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_3_3.png", + "x_offset": -27, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_3_4.png", + "x_offset": -24, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_3_5.png", + "x_offset": 1, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_3_6.png", + "x_offset": -22, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_4_1.png", + "x_offset": -15, + "y_offset": -48, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_4_2.png", + "x_offset": -14, + "y_offset": -48, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_4_3.png", + "x_offset": -10, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_4_4.png", + "x_offset": -9, + "y_offset": -42, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_left_4_5.png", + "x_offset": -21, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_1_1.png", + "x_offset": -21, + "y_offset": -48, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_1_2.png", + "x_offset": -31, + "y_offset": -48, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_1_3.png", + "x_offset": -31, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_1_4.png", + "x_offset": -30, + "y_offset": -42, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_1_5.png", + "x_offset": -32, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_2_1.png", + "x_offset": -21, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_2_2.png", + "x_offset": -21, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_2_3.png", + "x_offset": -24, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_2_4.png", + "x_offset": -15, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_2_5.png", + "x_offset": -8, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_2_6.png", + "x_offset": -8, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_3_1.png", + "x_offset": -17, + "y_offset": -42, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_3_2.png", + "x_offset": -11, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_3_3.png", + "x_offset": -5, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_3_4.png", + "x_offset": -21, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_4_1.png", + "x_offset": -23, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_4_2.png", + "x_offset": -6, + "y_offset": -26, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_4_3.png", + "x_offset": -32, + "y_offset": -52, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_4_4.png", + "x_offset": -26, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/intamin/large_zero_g_roll_right_4_5.png", + "x_offset": -22, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/intamin/small_flat_to_steep_up_1.png", + "x_offset": -22, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/intamin/small_flat_to_steep_up_2_1.png", + "x_offset": -22, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/intamin/small_flat_to_steep_up_2_2.png", + "x_offset": -18, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/small_flat_to_steep_up_3_1.png", + "x_offset": -6, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/small_flat_to_steep_up_3_2.png", + "x_offset": -25, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/small_flat_to_steep_up_4.png", + "x_offset": -25, + "y_offset": -29, + "palette": "keep" + }, + { + "path": "track/intamin/small_steep_to_flat_up_1.png", + "x_offset": -21, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/intamin/small_steep_to_flat_up_2_1.png", + "x_offset": -12, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/small_steep_to_flat_up_2_2.png", + "x_offset": -21, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/intamin/small_steep_to_flat_up_3_1.png", + "x_offset": -22, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/small_steep_to_flat_up_3_2.png", + "x_offset": -17, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/intamin/small_steep_to_flat_up_4.png", + "x_offset": -22, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/intamin/small_flat_to_steep_up_diag_1.png", + "x_offset": -32, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/intamin/small_flat_to_steep_up_diag_2.png", + "x_offset": -8, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/intamin/small_flat_to_steep_up_diag_3.png", + "x_offset": -32, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/intamin/small_flat_to_steep_up_diag_4.png", + "x_offset": -8, + "y_offset": -34, + "palette": "keep" + }, + { + "path": "track/intamin/small_steep_to_flat_up_diag_1.png", + "x_offset": -32, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/intamin/small_steep_to_flat_up_diag_2.png", + "x_offset": -8, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/small_steep_to_flat_up_diag_3.png", + "x_offset": -32, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/intamin/small_steep_to_flat_up_diag_4.png", + "x_offset": -8, + "y_offset": -34, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_1_1.png", + "x_offset": -22, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_1_2.png", + "x_offset": -31, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_1_3.png", + "x_offset": 13, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_1_4.png", + "x_offset": -13, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_2_1.png", + "x_offset": -22, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_2_2.png", + "x_offset": -32, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_2_3.png", + "x_offset": -24, + "y_offset": 14, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_2_4.png", + "x_offset": -32, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_3_1.png", + "x_offset": -5, + "y_offset": -3, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_3_2.png", + "x_offset": 8, + "y_offset": -3, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_3_3.png", + "x_offset": -31, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_3_4.png", + "x_offset": -8, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_4_1.png", + "x_offset": -25, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_4_2.png", + "x_offset": -26, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_4_3.png", + "x_offset": 0, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_diag_gentle_up_4_4.png", + "x_offset": 0, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_1_1.png", + "x_offset": -22, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_1_2.png", + "x_offset": -18, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_1_3.png", + "x_offset": -12, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_1_4.png", + "x_offset": -32, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_2_1.png", + "x_offset": -22, + "y_offset": -3, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_2_2.png", + "x_offset": -34, + "y_offset": -3, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_2_3.png", + "x_offset": -2, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_2_4.png", + "x_offset": -13, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_3_1.png", + "x_offset": -6, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_3_2.png", + "x_offset": -8, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_3_3.png", + "x_offset": 0, + "y_offset": 14, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_3_4.png", + "x_offset": 0, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_4_1.png", + "x_offset": -13, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_4_2.png", + "x_offset": -3, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_4_3.png", + "x_offset": -32, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_diag_gentle_up_4_4.png", + "x_offset": -8, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_1_1.png", + "x_offset": 0, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_1_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_1_3.png", + "x_offset": -32, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_1_4.png", + "x_offset": -31, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_2_1.png", + "x_offset": -8, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_2_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_2_3.png", + "x_offset": -7, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_2_4.png", + "x_offset": -19, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_3_1.png", + "x_offset": -32, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_3_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_3_3.png", + "x_offset": -17, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_3_4.png", + "x_offset": -22, + "y_offset": -3, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_4_1.png", + "x_offset": -9, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_4_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_4_3.png", + "x_offset": -21, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_to_orthogonal_gentle_up_4_4.png", + "x_offset": -22, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_1_1.png", + "x_offset": 0, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_1_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_1_3.png", + "x_offset": -32, + "y_offset": -1, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_1_4.png", + "x_offset": -32, + "y_offset": -3, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_2_1.png", + "x_offset": 0, + "y_offset": 6, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_2_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_2_3.png", + "x_offset": -16, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_2_4.png", + "x_offset": -22, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_3_1.png", + "x_offset": -32, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_3_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_3_3.png", + "x_offset": -11, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_3_4.png", + "x_offset": -22, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_4_1.png", + "x_offset": -8, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_4_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_4_3.png", + "x_offset": -6, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_to_orthogonal_gentle_up_4_4.png", + "x_offset": -24, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_to_gentle_up_left_bank_diag_1_1.png", + "x_offset": -32, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_to_gentle_up_left_bank_diag_1_2.png", + "x_offset": -32, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_to_gentle_up_left_bank_diag_2.png", + "x_offset": -10, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_to_gentle_up_left_bank_diag_3.png", + "x_offset": -32, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_to_gentle_up_left_bank_diag_4.png", + "x_offset": -8, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_to_gentle_up_right_bank_diag_1.png", + "x_offset": -32, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_to_gentle_up_right_bank_diag_2.png", + "x_offset": -8, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_to_gentle_up_right_bank_diag_3_1.png", + "x_offset": -31, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_to_gentle_up_right_bank_diag_3_2.png", + "x_offset": -32, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_to_gentle_up_right_bank_diag_4.png", + "x_offset": -10, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_to_gentle_up_diag_1_1.png", + "x_offset": -21, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_to_gentle_up_diag_1_2.png", + "x_offset": -32, + "y_offset": -2, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_to_gentle_up_diag_2.png", + "x_offset": -10, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_to_gentle_up_diag_3.png", + "x_offset": -32, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_to_gentle_up_diag_4.png", + "x_offset": -8, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_to_gentle_up_diag_1.png", + "x_offset": -32, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_to_gentle_up_diag_2.png", + "x_offset": -8, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_to_gentle_up_diag_3_1.png", + "x_offset": -32, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_to_gentle_up_diag_3_2.png", + "x_offset": -32, + "y_offset": -2, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_to_gentle_up_diag_4.png", + "x_offset": -10, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/intamin/left_bank_to_gentle_up_left_bank_diag_1.png", + "x_offset": -32, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/left_bank_to_gentle_up_left_bank_diag_2.png", + "x_offset": -11, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/intamin/left_bank_to_gentle_up_left_bank_diag_3.png", + "x_offset": -32, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/left_bank_to_gentle_up_left_bank_diag_4.png", + "x_offset": -6, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/intamin/right_bank_to_gentle_up_right_bank_diag_1.png", + "x_offset": -32, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/right_bank_to_gentle_up_right_bank_diag_2.png", + "x_offset": -6, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/right_bank_to_gentle_up_right_bank_diag_3.png", + "x_offset": -32, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/right_bank_to_gentle_up_right_bank_diag_4.png", + "x_offset": -11, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_to_left_bank_diag_1.png", + "x_offset": -32, + "y_offset": -3, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_to_left_bank_diag_2.png", + "x_offset": -11, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_to_left_bank_diag_3.png", + "x_offset": -32, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_to_left_bank_diag_4.png", + "x_offset": -6, + "y_offset": -21, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_to_right_bank_diag_1.png", + "x_offset": -32, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_to_right_bank_diag_2.png", + "x_offset": -6, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_to_right_bank_diag_3.png", + "x_offset": -32, + "y_offset": -3, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_to_right_bank_diag_4.png", + "x_offset": -11, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_diag_1.png", + "x_offset": -32, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_diag_2.png", + "x_offset": -10, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_diag_3.png", + "x_offset": -32, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_diag_4.png", + "x_offset": -6, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_diag_1.png", + "x_offset": -32, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_diag_2.png", + "x_offset": -6, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_diag_3.png", + "x_offset": -32, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_diag_4.png", + "x_offset": -10, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/intamin/flat_to_gentle_up_left_bank_diag_1_1.png", + "x_offset": -32, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/flat_to_gentle_up_left_bank_diag_1_2.png", + "x_offset": -32, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/flat_to_gentle_up_left_bank_diag_2.png", + "x_offset": -10, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/intamin/flat_to_gentle_up_left_bank_diag_3.png", + "x_offset": -32, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/flat_to_gentle_up_left_bank_diag_4.png", + "x_offset": -8, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/intamin/flat_to_gentle_up_right_bank_diag_1.png", + "x_offset": -32, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/intamin/flat_to_gentle_up_right_bank_diag_2.png", + "x_offset": -8, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/intamin/flat_to_gentle_up_right_bank_diag_3_1.png", + "x_offset": -31, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/flat_to_gentle_up_right_bank_diag_3_2.png", + "x_offset": -32, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/flat_to_gentle_up_right_bank_diag_4.png", + "x_offset": -10, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_to_flat_diag_1_1.png", + "x_offset": -19, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_to_flat_diag_1_2.png", + "x_offset": -32, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_to_flat_diag_2.png", + "x_offset": -10, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_to_flat_diag_3.png", + "x_offset": -32, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_left_bank_to_flat_diag_4.png", + "x_offset": -8, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_to_flat_diag_1.png", + "x_offset": -32, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_to_flat_diag_2.png", + "x_offset": -8, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_to_flat_diag_3_1.png", + "x_offset": -32, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_to_flat_diag_3_2.png", + "x_offset": -32, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/intamin/gentle_up_right_bank_to_flat_diag_4.png", + "x_offset": -9, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_1_1.png", + "x_offset": -18, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_1_2.png", + "x_offset": -27, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_1_3.png", + "x_offset": 17, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_1_4.png", + "x_offset": -10, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_2_1.png", + "x_offset": -22, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_2_2.png", + "x_offset": -32, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_2_3.png", + "x_offset": -24, + "y_offset": 13, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_2_4.png", + "x_offset": -32, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_3_1.png", + "x_offset": -7, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_3_2.png", + "x_offset": 1, + "y_offset": -7, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_3_3.png", + "x_offset": -32, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_3_4.png", + "x_offset": -10, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_4_1.png", + "x_offset": -23, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_4_2.png", + "x_offset": -24, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_4_3.png", + "x_offset": 0, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_diag_gentle_up_4_4.png", + "x_offset": 0, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_1_1.png", + "x_offset": -23, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_1_2.png", + "x_offset": -20, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_1_3.png", + "x_offset": -14, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_1_4.png", + "x_offset": -32, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_2_1.png", + "x_offset": -19, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_2_2.png", + "x_offset": -31, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_2_3.png", + "x_offset": 10, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_2_4.png", + "x_offset": -8, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_3_1.png", + "x_offset": -7, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_3_2.png", + "x_offset": -8, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_3_3.png", + "x_offset": 0, + "y_offset": 13, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_3_4.png", + "x_offset": 0, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_4_1.png", + "x_offset": -18, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_4_2.png", + "x_offset": -6, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_4_3.png", + "x_offset": -32, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_diag_gentle_up_4_4.png", + "x_offset": -10, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_1.png", + "x_offset": 0, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_3.png", + "x_offset": -32, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_4.png", + "x_offset": -29, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_1.png", + "x_offset": -8, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_3.png", + "x_offset": -10, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_4.png", + "x_offset": -17, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_1.png", + "x_offset": -32, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_3.png", + "x_offset": -22, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_4.png", + "x_offset": -26, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_1.png", + "x_offset": -8, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_3.png", + "x_offset": -21, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_4.png", + "x_offset": -22, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_1.png", + "x_offset": 0, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_3.png", + "x_offset": -32, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_4.png", + "x_offset": -26, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_1.png", + "x_offset": 0, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_3.png", + "x_offset": -16, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_4.png", + "x_offset": -21, + "y_offset": -6, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_1.png", + "x_offset": -32, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_3.png", + "x_offset": -13, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_4.png", + "x_offset": -26, + "y_offset": -18, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_1.png", + "x_offset": -10, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_2.png", + "x_offset": 0, + "y_offset": 0, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_3.png", + "x_offset": -7, + "y_offset": -5, + "palette": "keep" + }, + { + "path": "track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_4.png", + "x_offset": -24, + "y_offset": -22, + "palette": "keep" }, { "path": "track/mini/booster_1.png" @@ -2662,6 +6219,12 @@ { "path": "track/mini/booster_2.png" }, + { + "path": "track/bm/booster_1.png" + }, + { + "path": "track/bm/booster_2.png" + }, { "path": "track/railway/quarter_turn_3_tiles_sw_se_part_3.png", "x_offset": -8, diff --git a/resources/g2/track/intamin/barrel_roll_left_1_1.png b/resources/g2/track/intamin/barrel_roll_left_1_1.png new file mode 100644 index 0000000000..6578bbdad9 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_1_1.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_1_2.png b/resources/g2/track/intamin/barrel_roll_left_1_2.png new file mode 100644 index 0000000000..ee9add13ed Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_1_2.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_1_3.png b/resources/g2/track/intamin/barrel_roll_left_1_3.png new file mode 100644 index 0000000000..2b62820641 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_1_3.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_1_4.png b/resources/g2/track/intamin/barrel_roll_left_1_4.png new file mode 100644 index 0000000000..6231dfa73b Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_1_4.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_1_5.png b/resources/g2/track/intamin/barrel_roll_left_1_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_1_5.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_1_6.png b/resources/g2/track/intamin/barrel_roll_left_1_6.png new file mode 100644 index 0000000000..15f880eec1 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_1_6.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_2_1.png b/resources/g2/track/intamin/barrel_roll_left_2_1.png new file mode 100644 index 0000000000..784f20a19e Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_2_1.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_2_2.png b/resources/g2/track/intamin/barrel_roll_left_2_2.png new file mode 100644 index 0000000000..3a3925d02c Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_2_2.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_2_3.png b/resources/g2/track/intamin/barrel_roll_left_2_3.png new file mode 100644 index 0000000000..1681ba7aa9 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_2_3.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_2_4.png b/resources/g2/track/intamin/barrel_roll_left_2_4.png new file mode 100644 index 0000000000..c3688fad47 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_2_4.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_2_5.png b/resources/g2/track/intamin/barrel_roll_left_2_5.png new file mode 100644 index 0000000000..a454c521a5 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_2_5.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_2_6.png b/resources/g2/track/intamin/barrel_roll_left_2_6.png new file mode 100644 index 0000000000..071d8929b6 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_2_6.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_3_1.png b/resources/g2/track/intamin/barrel_roll_left_3_1.png new file mode 100644 index 0000000000..fa2b341f07 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_3_1.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_3_2.png b/resources/g2/track/intamin/barrel_roll_left_3_2.png new file mode 100644 index 0000000000..62803a9474 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_3_2.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_3_3.png b/resources/g2/track/intamin/barrel_roll_left_3_3.png new file mode 100644 index 0000000000..f892a55535 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_3_3.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_3_4.png b/resources/g2/track/intamin/barrel_roll_left_3_4.png new file mode 100644 index 0000000000..efc87e71c6 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_3_4.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_3_5.png b/resources/g2/track/intamin/barrel_roll_left_3_5.png new file mode 100644 index 0000000000..bb878d04b7 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_3_5.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_3_6.png b/resources/g2/track/intamin/barrel_roll_left_3_6.png new file mode 100644 index 0000000000..f18b658862 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_3_6.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_4_1.png b/resources/g2/track/intamin/barrel_roll_left_4_1.png new file mode 100644 index 0000000000..e6483731d5 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_4_1.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_4_2.png b/resources/g2/track/intamin/barrel_roll_left_4_2.png new file mode 100644 index 0000000000..548e864a34 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_4_2.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_4_3.png b/resources/g2/track/intamin/barrel_roll_left_4_3.png new file mode 100644 index 0000000000..2e90ab9d5b Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_4_3.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_4_4.png b/resources/g2/track/intamin/barrel_roll_left_4_4.png new file mode 100644 index 0000000000..596c264a14 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_4_4.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_4_5.png b/resources/g2/track/intamin/barrel_roll_left_4_5.png new file mode 100644 index 0000000000..aa801e3f96 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_4_5.png differ diff --git a/resources/g2/track/intamin/barrel_roll_left_4_6.png b/resources/g2/track/intamin/barrel_roll_left_4_6.png new file mode 100644 index 0000000000..392d1d505b Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_left_4_6.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_1_1.png b/resources/g2/track/intamin/barrel_roll_right_1_1.png new file mode 100644 index 0000000000..56428104bf Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_1_1.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_1_2.png b/resources/g2/track/intamin/barrel_roll_right_1_2.png new file mode 100644 index 0000000000..a29eb17545 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_1_2.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_1_3.png b/resources/g2/track/intamin/barrel_roll_right_1_3.png new file mode 100644 index 0000000000..f8fedbb746 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_1_3.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_1_4.png b/resources/g2/track/intamin/barrel_roll_right_1_4.png new file mode 100644 index 0000000000..f19c646025 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_1_4.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_1_5.png b/resources/g2/track/intamin/barrel_roll_right_1_5.png new file mode 100644 index 0000000000..d14a3b2f59 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_1_5.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_1_6.png b/resources/g2/track/intamin/barrel_roll_right_1_6.png new file mode 100644 index 0000000000..cde84e3d7f Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_1_6.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_2_1.png b/resources/g2/track/intamin/barrel_roll_right_2_1.png new file mode 100644 index 0000000000..a43148f7c6 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_2_1.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_2_2.png b/resources/g2/track/intamin/barrel_roll_right_2_2.png new file mode 100644 index 0000000000..4958ec508c Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_2_2.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_2_3.png b/resources/g2/track/intamin/barrel_roll_right_2_3.png new file mode 100644 index 0000000000..5902a39098 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_2_3.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_2_4.png b/resources/g2/track/intamin/barrel_roll_right_2_4.png new file mode 100644 index 0000000000..8cd6721e1a Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_2_4.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_2_5.png b/resources/g2/track/intamin/barrel_roll_right_2_5.png new file mode 100644 index 0000000000..3e457bef7b Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_2_5.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_2_6.png b/resources/g2/track/intamin/barrel_roll_right_2_6.png new file mode 100644 index 0000000000..00b2c8aeea Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_2_6.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_3_1.png b/resources/g2/track/intamin/barrel_roll_right_3_1.png new file mode 100644 index 0000000000..d050059fa5 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_3_1.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_3_2.png b/resources/g2/track/intamin/barrel_roll_right_3_2.png new file mode 100644 index 0000000000..3e07140327 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_3_2.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_3_3.png b/resources/g2/track/intamin/barrel_roll_right_3_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_3_3.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_3_4.png b/resources/g2/track/intamin/barrel_roll_right_3_4.png new file mode 100644 index 0000000000..dff40baa8a Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_3_4.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_3_5.png b/resources/g2/track/intamin/barrel_roll_right_3_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_3_5.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_3_6.png b/resources/g2/track/intamin/barrel_roll_right_3_6.png new file mode 100644 index 0000000000..9e0b0940fb Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_3_6.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_4_1.png b/resources/g2/track/intamin/barrel_roll_right_4_1.png new file mode 100644 index 0000000000..430f0153c2 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_4_1.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_4_2.png b/resources/g2/track/intamin/barrel_roll_right_4_2.png new file mode 100644 index 0000000000..e09de59cc5 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_4_2.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_4_3.png b/resources/g2/track/intamin/barrel_roll_right_4_3.png new file mode 100644 index 0000000000..0ac429cc39 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_4_3.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_4_4.png b/resources/g2/track/intamin/barrel_roll_right_4_4.png new file mode 100644 index 0000000000..2e4f47969f Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_4_4.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_4_5.png b/resources/g2/track/intamin/barrel_roll_right_4_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_4_5.png differ diff --git a/resources/g2/track/intamin/barrel_roll_right_4_6.png b/resources/g2/track/intamin/barrel_roll_right_4_6.png new file mode 100644 index 0000000000..6037ed4832 Binary files /dev/null and b/resources/g2/track/intamin/barrel_roll_right_4_6.png differ diff --git a/resources/g2/track/intamin/corkscrew_left_1_1.png b/resources/g2/track/intamin/corkscrew_left_1_1.png new file mode 100644 index 0000000000..6195047ec1 Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_left_1_1.png differ diff --git a/resources/g2/track/intamin/corkscrew_left_1_2.png b/resources/g2/track/intamin/corkscrew_left_1_2.png new file mode 100644 index 0000000000..e82443580e Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_left_1_2.png differ diff --git a/resources/g2/track/intamin/corkscrew_left_1_3.png b/resources/g2/track/intamin/corkscrew_left_1_3.png new file mode 100644 index 0000000000..0c0ce1152c Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_left_1_3.png differ diff --git a/resources/g2/track/intamin/corkscrew_left_2_1.png b/resources/g2/track/intamin/corkscrew_left_2_1.png new file mode 100644 index 0000000000..2f164ded27 Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_left_2_1.png differ diff --git a/resources/g2/track/intamin/corkscrew_left_2_2.png b/resources/g2/track/intamin/corkscrew_left_2_2.png new file mode 100644 index 0000000000..eb46629426 Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_left_2_2.png differ diff --git a/resources/g2/track/intamin/corkscrew_left_2_3.png b/resources/g2/track/intamin/corkscrew_left_2_3.png new file mode 100644 index 0000000000..2086310502 Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_left_2_3.png differ diff --git a/resources/g2/track/intamin/corkscrew_left_3_1.png b/resources/g2/track/intamin/corkscrew_left_3_1.png new file mode 100644 index 0000000000..03009038e6 Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_left_3_1.png differ diff --git a/resources/g2/track/intamin/corkscrew_left_3_2.png b/resources/g2/track/intamin/corkscrew_left_3_2.png new file mode 100644 index 0000000000..277a001afe Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_left_3_2.png differ diff --git a/resources/g2/track/intamin/corkscrew_left_3_3.png b/resources/g2/track/intamin/corkscrew_left_3_3.png new file mode 100644 index 0000000000..e3514bd184 Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_left_3_3.png differ diff --git a/resources/g2/track/intamin/corkscrew_left_4_1.png b/resources/g2/track/intamin/corkscrew_left_4_1.png new file mode 100644 index 0000000000..eb3f4b7a5d Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_left_4_1.png differ diff --git a/resources/g2/track/intamin/corkscrew_left_4_2.png b/resources/g2/track/intamin/corkscrew_left_4_2.png new file mode 100644 index 0000000000..e603a333b1 Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_left_4_2.png differ diff --git a/resources/g2/track/intamin/corkscrew_left_4_3.png b/resources/g2/track/intamin/corkscrew_left_4_3.png new file mode 100644 index 0000000000..00e35bc61e Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_left_4_3.png differ diff --git a/resources/g2/track/intamin/corkscrew_right_1_1.png b/resources/g2/track/intamin/corkscrew_right_1_1.png new file mode 100644 index 0000000000..f80fe5aeac Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_right_1_1.png differ diff --git a/resources/g2/track/intamin/corkscrew_right_1_2.png b/resources/g2/track/intamin/corkscrew_right_1_2.png new file mode 100644 index 0000000000..e4ef7b9ba3 Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_right_1_2.png differ diff --git a/resources/g2/track/intamin/corkscrew_right_1_3.png b/resources/g2/track/intamin/corkscrew_right_1_3.png new file mode 100644 index 0000000000..991e2a77e5 Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_right_1_3.png differ diff --git a/resources/g2/track/intamin/corkscrew_right_2_1.png b/resources/g2/track/intamin/corkscrew_right_2_1.png new file mode 100644 index 0000000000..021a359ffc Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_right_2_1.png differ diff --git a/resources/g2/track/intamin/corkscrew_right_2_2.png b/resources/g2/track/intamin/corkscrew_right_2_2.png new file mode 100644 index 0000000000..7ee76937ee Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_right_2_2.png differ diff --git a/resources/g2/track/intamin/corkscrew_right_2_3.png b/resources/g2/track/intamin/corkscrew_right_2_3.png new file mode 100644 index 0000000000..67ce0db881 Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_right_2_3.png differ diff --git a/resources/g2/track/intamin/corkscrew_right_3_1.png b/resources/g2/track/intamin/corkscrew_right_3_1.png new file mode 100644 index 0000000000..970c45165f Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_right_3_1.png differ diff --git a/resources/g2/track/intamin/corkscrew_right_3_2.png b/resources/g2/track/intamin/corkscrew_right_3_2.png new file mode 100644 index 0000000000..77c618aed9 Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_right_3_2.png differ diff --git a/resources/g2/track/intamin/corkscrew_right_3_3.png b/resources/g2/track/intamin/corkscrew_right_3_3.png new file mode 100644 index 0000000000..a51cb0ca70 Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_right_3_3.png differ diff --git a/resources/g2/track/intamin/corkscrew_right_4_1.png b/resources/g2/track/intamin/corkscrew_right_4_1.png new file mode 100644 index 0000000000..c19b143b8e Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_right_4_1.png differ diff --git a/resources/g2/track/intamin/corkscrew_right_4_2.png b/resources/g2/track/intamin/corkscrew_right_4_2.png new file mode 100644 index 0000000000..c6f1fe28fd Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_right_4_2.png differ diff --git a/resources/g2/track/intamin/corkscrew_right_4_3.png b/resources/g2/track/intamin/corkscrew_right_4_3.png new file mode 100644 index 0000000000..b26a78937d Binary files /dev/null and b/resources/g2/track/intamin/corkscrew_right_4_3.png differ diff --git a/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_1_1.png b/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_1_1.png new file mode 100644 index 0000000000..ccc5092ccf Binary files /dev/null and b/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_1_1.png differ diff --git a/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_1_2.png b/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_1_2.png new file mode 100644 index 0000000000..4ef1330768 Binary files /dev/null and b/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_1_2.png differ diff --git a/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_2.png b/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_2.png new file mode 100644 index 0000000000..e8ee455615 Binary files /dev/null and b/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_2.png differ diff --git a/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_3.png b/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_3.png new file mode 100644 index 0000000000..8d011a7a3b Binary files /dev/null and b/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_3.png differ diff --git a/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_4.png b/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_4.png new file mode 100644 index 0000000000..edc97af070 Binary files /dev/null and b/resources/g2/track/intamin/flat_to_gentle_up_left_bank_diag_4.png differ diff --git a/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_1.png b/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_1.png new file mode 100644 index 0000000000..c51b5bb982 Binary files /dev/null and b/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_1.png differ diff --git a/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_2.png b/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_2.png new file mode 100644 index 0000000000..7c0e77a980 Binary files /dev/null and b/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_2.png differ diff --git a/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_3_1.png b/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_3_1.png new file mode 100644 index 0000000000..413df9a49f Binary files /dev/null and b/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_3_1.png differ diff --git a/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_3_2.png b/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_3_2.png new file mode 100644 index 0000000000..b73731b0a6 Binary files /dev/null and b/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_3_2.png differ diff --git a/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_4.png b/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_4.png new file mode 100644 index 0000000000..bba6ddfa82 Binary files /dev/null and b/resources/g2/track/intamin/flat_to_gentle_up_right_bank_diag_4.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_diag_1.png b/resources/g2/track/intamin/gentle_up_left_bank_diag_1.png new file mode 100644 index 0000000000..7cf978987a Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_diag_1.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_diag_2.png b/resources/g2/track/intamin/gentle_up_left_bank_diag_2.png new file mode 100644 index 0000000000..5855be3659 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_diag_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_diag_3.png b/resources/g2/track/intamin/gentle_up_left_bank_diag_3.png new file mode 100644 index 0000000000..17aed2a300 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_diag_3.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_diag_4.png b/resources/g2/track/intamin/gentle_up_left_bank_diag_4.png new file mode 100644 index 0000000000..9e1eef0ca0 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_diag_4.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_1_1.png b/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_1_1.png new file mode 100644 index 0000000000..76194a011b Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_1_1.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_1_2.png b/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_1_2.png new file mode 100644 index 0000000000..5fea64d444 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_1_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_2.png b/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_2.png new file mode 100644 index 0000000000..2dca8f21ca Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_3.png b/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_3.png new file mode 100644 index 0000000000..d3400357ff Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_3.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_4.png b/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_4.png new file mode 100644 index 0000000000..b0bcc95c65 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_to_flat_diag_4.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_1_1.png b/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_1_1.png new file mode 100644 index 0000000000..36da6981d8 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_1_1.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_1_2.png b/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_1_2.png new file mode 100644 index 0000000000..869aecdb4e Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_1_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_2.png b/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..6beef5fccb Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_3.png b/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_3.png new file mode 100644 index 0000000000..595027a3eb Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_3.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_4.png b/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..07dc2413b5 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_to_left_bank_diag_1.png b/resources/g2/track/intamin/gentle_up_left_bank_to_left_bank_diag_1.png new file mode 100644 index 0000000000..f50823fc06 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_to_left_bank_diag_1.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_to_left_bank_diag_2.png b/resources/g2/track/intamin/gentle_up_left_bank_to_left_bank_diag_2.png new file mode 100644 index 0000000000..85f64e99c3 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_to_left_bank_diag_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_to_left_bank_diag_3.png b/resources/g2/track/intamin/gentle_up_left_bank_to_left_bank_diag_3.png new file mode 100644 index 0000000000..809ec9e46a Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_to_left_bank_diag_3.png differ diff --git a/resources/g2/track/intamin/gentle_up_left_bank_to_left_bank_diag_4.png b/resources/g2/track/intamin/gentle_up_left_bank_to_left_bank_diag_4.png new file mode 100644 index 0000000000..0f4f3e00fa Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_left_bank_to_left_bank_diag_4.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_diag_1.png b/resources/g2/track/intamin/gentle_up_right_bank_diag_1.png new file mode 100644 index 0000000000..a5ff07c5e3 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_diag_1.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_diag_2.png b/resources/g2/track/intamin/gentle_up_right_bank_diag_2.png new file mode 100644 index 0000000000..d1975a9766 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_diag_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_diag_3.png b/resources/g2/track/intamin/gentle_up_right_bank_diag_3.png new file mode 100644 index 0000000000..9257e8ed03 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_diag_3.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_diag_4.png b/resources/g2/track/intamin/gentle_up_right_bank_diag_4.png new file mode 100644 index 0000000000..0ec67bd3d1 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_diag_4.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_1.png b/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_1.png new file mode 100644 index 0000000000..14c530851e Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_1.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_2.png b/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_2.png new file mode 100644 index 0000000000..2b7f1e09da Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_3_1.png b/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_3_1.png new file mode 100644 index 0000000000..2b8c8db92c Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_3_1.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_3_2.png b/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_3_2.png new file mode 100644 index 0000000000..b3b9256573 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_3_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_4.png b/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_4.png new file mode 100644 index 0000000000..6eabac1f49 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_to_flat_diag_4.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_1.png b/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_1.png new file mode 100644 index 0000000000..0642b3c8ac Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_1.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_2.png b/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..2f0b3d4b48 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_3_1.png b/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_3_1.png new file mode 100644 index 0000000000..4b846a9c54 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_3_1.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_3_2.png b/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_3_2.png new file mode 100644 index 0000000000..710e070a14 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_3_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_4.png b/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..e4e939aa34 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_to_right_bank_diag_1.png b/resources/g2/track/intamin/gentle_up_right_bank_to_right_bank_diag_1.png new file mode 100644 index 0000000000..6f7d695b40 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_to_right_bank_diag_1.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_to_right_bank_diag_2.png b/resources/g2/track/intamin/gentle_up_right_bank_to_right_bank_diag_2.png new file mode 100644 index 0000000000..0f1246bed4 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_to_right_bank_diag_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_to_right_bank_diag_3.png b/resources/g2/track/intamin/gentle_up_right_bank_to_right_bank_diag_3.png new file mode 100644 index 0000000000..e8563d4b77 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_to_right_bank_diag_3.png differ diff --git a/resources/g2/track/intamin/gentle_up_right_bank_to_right_bank_diag_4.png b/resources/g2/track/intamin/gentle_up_right_bank_to_right_bank_diag_4.png new file mode 100644 index 0000000000..2d4d08f4a0 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_right_bank_to_right_bank_diag_4.png differ diff --git a/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_1_1.png b/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_1_1.png new file mode 100644 index 0000000000..325a032a87 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_1_1.png differ diff --git a/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_1_2.png b/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_1_2.png new file mode 100644 index 0000000000..aef8093875 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_1_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_2.png b/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_2.png new file mode 100644 index 0000000000..04721574e7 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_3.png b/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_3.png new file mode 100644 index 0000000000..00886ea788 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_3.png differ diff --git a/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_4.png b/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_4.png new file mode 100644 index 0000000000..12f56ed98c Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_to_gentle_up_left_bank_diag_4.png differ diff --git a/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_1.png b/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_1.png new file mode 100644 index 0000000000..5f4ce1c0eb Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_1.png differ diff --git a/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_2.png b/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_2.png new file mode 100644 index 0000000000..a57996fa8c Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_3_1.png b/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_3_1.png new file mode 100644 index 0000000000..b6996212f3 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_3_1.png differ diff --git a/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_3_2.png b/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_3_2.png new file mode 100644 index 0000000000..2c4bedffbb Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_3_2.png differ diff --git a/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_4.png b/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_4.png new file mode 100644 index 0000000000..27e3b88f13 Binary files /dev/null and b/resources/g2/track/intamin/gentle_up_to_gentle_up_right_bank_diag_4.png differ diff --git a/resources/g2/track/intamin/half_loop_1_1.png b/resources/g2/track/intamin/half_loop_1_1.png new file mode 100644 index 0000000000..68ce4a9d62 Binary files /dev/null and b/resources/g2/track/intamin/half_loop_1_1.png differ diff --git a/resources/g2/track/intamin/half_loop_1_2.png b/resources/g2/track/intamin/half_loop_1_2.png new file mode 100644 index 0000000000..0e277397a3 Binary files /dev/null and b/resources/g2/track/intamin/half_loop_1_2.png differ diff --git a/resources/g2/track/intamin/half_loop_1_3.png b/resources/g2/track/intamin/half_loop_1_3.png new file mode 100644 index 0000000000..19f8427c75 Binary files /dev/null and b/resources/g2/track/intamin/half_loop_1_3.png differ diff --git a/resources/g2/track/intamin/half_loop_1_4.png b/resources/g2/track/intamin/half_loop_1_4.png new file mode 100644 index 0000000000..5dc6856e39 Binary files /dev/null and b/resources/g2/track/intamin/half_loop_1_4.png differ diff --git a/resources/g2/track/intamin/half_loop_2_1.png b/resources/g2/track/intamin/half_loop_2_1.png new file mode 100644 index 0000000000..b31c3f0353 Binary files /dev/null and b/resources/g2/track/intamin/half_loop_2_1.png differ diff --git a/resources/g2/track/intamin/half_loop_2_2.png b/resources/g2/track/intamin/half_loop_2_2.png new file mode 100644 index 0000000000..d4831cec98 Binary files /dev/null and b/resources/g2/track/intamin/half_loop_2_2.png differ diff --git a/resources/g2/track/intamin/half_loop_2_3.png b/resources/g2/track/intamin/half_loop_2_3.png new file mode 100644 index 0000000000..e803970c4f Binary files /dev/null and b/resources/g2/track/intamin/half_loop_2_3.png differ diff --git a/resources/g2/track/intamin/half_loop_2_4.png b/resources/g2/track/intamin/half_loop_2_4.png new file mode 100644 index 0000000000..058d06c09e Binary files /dev/null and b/resources/g2/track/intamin/half_loop_2_4.png differ diff --git a/resources/g2/track/intamin/half_loop_3_1.png b/resources/g2/track/intamin/half_loop_3_1.png new file mode 100644 index 0000000000..e2fdeae4ab Binary files /dev/null and b/resources/g2/track/intamin/half_loop_3_1.png differ diff --git a/resources/g2/track/intamin/half_loop_3_2.png b/resources/g2/track/intamin/half_loop_3_2.png new file mode 100644 index 0000000000..0957f98787 Binary files /dev/null and b/resources/g2/track/intamin/half_loop_3_2.png differ diff --git a/resources/g2/track/intamin/half_loop_3_3.png b/resources/g2/track/intamin/half_loop_3_3.png new file mode 100644 index 0000000000..291fe876fa Binary files /dev/null and b/resources/g2/track/intamin/half_loop_3_3.png differ diff --git a/resources/g2/track/intamin/half_loop_3_4.png b/resources/g2/track/intamin/half_loop_3_4.png new file mode 100644 index 0000000000..48a3f977fd Binary files /dev/null and b/resources/g2/track/intamin/half_loop_3_4.png differ diff --git a/resources/g2/track/intamin/half_loop_4_1.png b/resources/g2/track/intamin/half_loop_4_1.png new file mode 100644 index 0000000000..4be4e6a817 Binary files /dev/null and b/resources/g2/track/intamin/half_loop_4_1.png differ diff --git a/resources/g2/track/intamin/half_loop_4_2.png b/resources/g2/track/intamin/half_loop_4_2.png new file mode 100644 index 0000000000..7843fc4ff3 Binary files /dev/null and b/resources/g2/track/intamin/half_loop_4_2.png differ diff --git a/resources/g2/track/intamin/half_loop_4_3.png b/resources/g2/track/intamin/half_loop_4_3.png new file mode 100644 index 0000000000..0d60cd60ed Binary files /dev/null and b/resources/g2/track/intamin/half_loop_4_3.png differ diff --git a/resources/g2/track/intamin/half_loop_4_4.png b/resources/g2/track/intamin/half_loop_4_4.png new file mode 100644 index 0000000000..d380cd4ea5 Binary files /dev/null and b/resources/g2/track/intamin/half_loop_4_4.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_1_1.png b/resources/g2/track/intamin/large_corkscrew_left_1_1.png new file mode 100644 index 0000000000..e2580ecc6d Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_1_1.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_1_2.png b/resources/g2/track/intamin/large_corkscrew_left_1_2.png new file mode 100644 index 0000000000..5df20f2b8a Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_1_2.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_1_3.png b/resources/g2/track/intamin/large_corkscrew_left_1_3.png new file mode 100644 index 0000000000..e95c76395b Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_1_3.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_1_4.png b/resources/g2/track/intamin/large_corkscrew_left_1_4.png new file mode 100644 index 0000000000..2748daa720 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_1_4.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_1_5.png b/resources/g2/track/intamin/large_corkscrew_left_1_5.png new file mode 100644 index 0000000000..07fd478b57 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_1_5.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_2_1.png b/resources/g2/track/intamin/large_corkscrew_left_2_1.png new file mode 100644 index 0000000000..f01ee5e65d Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_2_1.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_2_2.png b/resources/g2/track/intamin/large_corkscrew_left_2_2.png new file mode 100644 index 0000000000..e9ad075045 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_2_2.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_2_3.png b/resources/g2/track/intamin/large_corkscrew_left_2_3.png new file mode 100644 index 0000000000..5b2a73702b Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_2_3.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_2_4.png b/resources/g2/track/intamin/large_corkscrew_left_2_4.png new file mode 100644 index 0000000000..336ea864cc Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_2_4.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_2_5.png b/resources/g2/track/intamin/large_corkscrew_left_2_5.png new file mode 100644 index 0000000000..b545ce2d9e Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_2_5.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_3_1.png b/resources/g2/track/intamin/large_corkscrew_left_3_1.png new file mode 100644 index 0000000000..0c81dfb316 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_3_1.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_3_2.png b/resources/g2/track/intamin/large_corkscrew_left_3_2.png new file mode 100644 index 0000000000..9ee4985797 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_3_2.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_3_3.png b/resources/g2/track/intamin/large_corkscrew_left_3_3.png new file mode 100644 index 0000000000..8492f60c35 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_3_3.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_3_4.png b/resources/g2/track/intamin/large_corkscrew_left_3_4.png new file mode 100644 index 0000000000..d238ab96c7 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_3_4.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_3_5.png b/resources/g2/track/intamin/large_corkscrew_left_3_5.png new file mode 100644 index 0000000000..9a2d47e2c3 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_3_5.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_4_1.png b/resources/g2/track/intamin/large_corkscrew_left_4_1.png new file mode 100644 index 0000000000..89ac20d6f0 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_4_1.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_4_2.png b/resources/g2/track/intamin/large_corkscrew_left_4_2.png new file mode 100644 index 0000000000..0fdda174f7 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_4_2.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_4_3.png b/resources/g2/track/intamin/large_corkscrew_left_4_3.png new file mode 100644 index 0000000000..00320ebd1b Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_4_3.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_4_4.png b/resources/g2/track/intamin/large_corkscrew_left_4_4.png new file mode 100644 index 0000000000..d8db161bb3 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_4_4.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_left_4_5.png b/resources/g2/track/intamin/large_corkscrew_left_4_5.png new file mode 100644 index 0000000000..21debd85f8 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_left_4_5.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_1_1.png b/resources/g2/track/intamin/large_corkscrew_right_1_1.png new file mode 100644 index 0000000000..ca90468622 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_1_1.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_1_2.png b/resources/g2/track/intamin/large_corkscrew_right_1_2.png new file mode 100644 index 0000000000..53751760da Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_1_2.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_1_3.png b/resources/g2/track/intamin/large_corkscrew_right_1_3.png new file mode 100644 index 0000000000..8472c4ac29 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_1_3.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_1_4.png b/resources/g2/track/intamin/large_corkscrew_right_1_4.png new file mode 100644 index 0000000000..885856c24c Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_1_4.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_1_5.png b/resources/g2/track/intamin/large_corkscrew_right_1_5.png new file mode 100644 index 0000000000..41b520e700 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_1_5.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_2_1.png b/resources/g2/track/intamin/large_corkscrew_right_2_1.png new file mode 100644 index 0000000000..3898d162f1 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_2_1.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_2_2.png b/resources/g2/track/intamin/large_corkscrew_right_2_2.png new file mode 100644 index 0000000000..1c918de053 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_2_2.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_2_3.png b/resources/g2/track/intamin/large_corkscrew_right_2_3.png new file mode 100644 index 0000000000..682042b017 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_2_3.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_2_4.png b/resources/g2/track/intamin/large_corkscrew_right_2_4.png new file mode 100644 index 0000000000..3c55ae6362 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_2_4.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_2_5.png b/resources/g2/track/intamin/large_corkscrew_right_2_5.png new file mode 100644 index 0000000000..54ed2f090b Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_2_5.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_3_1.png b/resources/g2/track/intamin/large_corkscrew_right_3_1.png new file mode 100644 index 0000000000..8d7ab59846 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_3_1.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_3_2.png b/resources/g2/track/intamin/large_corkscrew_right_3_2.png new file mode 100644 index 0000000000..c67c917896 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_3_2.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_3_3.png b/resources/g2/track/intamin/large_corkscrew_right_3_3.png new file mode 100644 index 0000000000..aad5913fc8 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_3_3.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_3_4.png b/resources/g2/track/intamin/large_corkscrew_right_3_4.png new file mode 100644 index 0000000000..7d31c18aad Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_3_4.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_3_5.png b/resources/g2/track/intamin/large_corkscrew_right_3_5.png new file mode 100644 index 0000000000..440f179765 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_3_5.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_4_1.png b/resources/g2/track/intamin/large_corkscrew_right_4_1.png new file mode 100644 index 0000000000..fe3fbaec80 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_4_1.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_4_2.png b/resources/g2/track/intamin/large_corkscrew_right_4_2.png new file mode 100644 index 0000000000..6162cc6d0d Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_4_2.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_4_3.png b/resources/g2/track/intamin/large_corkscrew_right_4_3.png new file mode 100644 index 0000000000..243717a413 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_4_3.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_4_4.png b/resources/g2/track/intamin/large_corkscrew_right_4_4.png new file mode 100644 index 0000000000..443b55fe4f Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_4_4.png differ diff --git a/resources/g2/track/intamin/large_corkscrew_right_4_5.png b/resources/g2/track/intamin/large_corkscrew_right_4_5.png new file mode 100644 index 0000000000..80c4c15ec6 Binary files /dev/null and b/resources/g2/track/intamin/large_corkscrew_right_4_5.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_1_1.png b/resources/g2/track/intamin/large_half_loop_left_1_1.png new file mode 100644 index 0000000000..d250e706c7 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_1_1.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_1_2.png b/resources/g2/track/intamin/large_half_loop_left_1_2.png new file mode 100644 index 0000000000..7ee32f9e11 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_1_2.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_1_3.png b/resources/g2/track/intamin/large_half_loop_left_1_3.png new file mode 100644 index 0000000000..252ab21979 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_1_3.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_1_4.png b/resources/g2/track/intamin/large_half_loop_left_1_4.png new file mode 100644 index 0000000000..1512509986 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_1_4.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_1_5.png b/resources/g2/track/intamin/large_half_loop_left_1_5.png new file mode 100644 index 0000000000..5313a9cef6 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_1_5.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_1_6.png b/resources/g2/track/intamin/large_half_loop_left_1_6.png new file mode 100644 index 0000000000..62b36e9589 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_1_6.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_1_7.png b/resources/g2/track/intamin/large_half_loop_left_1_7.png new file mode 100644 index 0000000000..502c058ffc Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_1_7.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_2_1.png b/resources/g2/track/intamin/large_half_loop_left_2_1.png new file mode 100644 index 0000000000..2a67cbf019 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_2_1.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_2_2.png b/resources/g2/track/intamin/large_half_loop_left_2_2.png new file mode 100644 index 0000000000..a49c585fe0 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_2_2.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_2_3.png b/resources/g2/track/intamin/large_half_loop_left_2_3.png new file mode 100644 index 0000000000..010a360535 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_2_3.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_2_4.png b/resources/g2/track/intamin/large_half_loop_left_2_4.png new file mode 100644 index 0000000000..cc1dd9fc14 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_2_4.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_2_5.png b/resources/g2/track/intamin/large_half_loop_left_2_5.png new file mode 100644 index 0000000000..fbccdfb390 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_2_5.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_2_6.png b/resources/g2/track/intamin/large_half_loop_left_2_6.png new file mode 100644 index 0000000000..faf6002894 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_2_6.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_2_7.png b/resources/g2/track/intamin/large_half_loop_left_2_7.png new file mode 100644 index 0000000000..28b3a2a5fa Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_2_7.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_3_1.png b/resources/g2/track/intamin/large_half_loop_left_3_1.png new file mode 100644 index 0000000000..c27973afa0 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_3_1.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_3_2.png b/resources/g2/track/intamin/large_half_loop_left_3_2.png new file mode 100644 index 0000000000..671e40889d Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_3_2.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_3_3.png b/resources/g2/track/intamin/large_half_loop_left_3_3.png new file mode 100644 index 0000000000..077e982530 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_3_3.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_3_4.png b/resources/g2/track/intamin/large_half_loop_left_3_4.png new file mode 100644 index 0000000000..cca5f8af46 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_3_4.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_3_5.png b/resources/g2/track/intamin/large_half_loop_left_3_5.png new file mode 100644 index 0000000000..f0c0aba7ca Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_3_5.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_3_6.png b/resources/g2/track/intamin/large_half_loop_left_3_6.png new file mode 100644 index 0000000000..0e701fff59 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_3_6.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_3_7.png b/resources/g2/track/intamin/large_half_loop_left_3_7.png new file mode 100644 index 0000000000..7ae88b8ea9 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_3_7.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_4_1.png b/resources/g2/track/intamin/large_half_loop_left_4_1.png new file mode 100644 index 0000000000..71c6f0ce59 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_4_1.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_4_2.png b/resources/g2/track/intamin/large_half_loop_left_4_2.png new file mode 100644 index 0000000000..8654140e03 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_4_2.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_4_3.png b/resources/g2/track/intamin/large_half_loop_left_4_3.png new file mode 100644 index 0000000000..3bd2197c20 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_4_3.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_4_4.png b/resources/g2/track/intamin/large_half_loop_left_4_4.png new file mode 100644 index 0000000000..2cd225fb79 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_4_4.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_4_5.png b/resources/g2/track/intamin/large_half_loop_left_4_5.png new file mode 100644 index 0000000000..3aec63e23e Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_4_5.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_4_6.png b/resources/g2/track/intamin/large_half_loop_left_4_6.png new file mode 100644 index 0000000000..33a1dee65f Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_4_6.png differ diff --git a/resources/g2/track/intamin/large_half_loop_left_4_7.png b/resources/g2/track/intamin/large_half_loop_left_4_7.png new file mode 100644 index 0000000000..95cae67d1a Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_left_4_7.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_1_1.png b/resources/g2/track/intamin/large_half_loop_right_1_1.png new file mode 100644 index 0000000000..cc84fc166a Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_1_1.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_1_2.png b/resources/g2/track/intamin/large_half_loop_right_1_2.png new file mode 100644 index 0000000000..4608a6564d Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_1_2.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_1_3.png b/resources/g2/track/intamin/large_half_loop_right_1_3.png new file mode 100644 index 0000000000..88df37b72f Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_1_3.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_1_4.png b/resources/g2/track/intamin/large_half_loop_right_1_4.png new file mode 100644 index 0000000000..794255ed1f Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_1_4.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_1_5.png b/resources/g2/track/intamin/large_half_loop_right_1_5.png new file mode 100644 index 0000000000..53a3f63e90 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_1_5.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_1_6.png b/resources/g2/track/intamin/large_half_loop_right_1_6.png new file mode 100644 index 0000000000..7c4b24db72 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_1_6.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_1_7.png b/resources/g2/track/intamin/large_half_loop_right_1_7.png new file mode 100644 index 0000000000..c22e50dd49 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_1_7.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_2_1.png b/resources/g2/track/intamin/large_half_loop_right_2_1.png new file mode 100644 index 0000000000..727cae6798 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_2_1.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_2_2.png b/resources/g2/track/intamin/large_half_loop_right_2_2.png new file mode 100644 index 0000000000..9055f35170 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_2_2.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_2_3.png b/resources/g2/track/intamin/large_half_loop_right_2_3.png new file mode 100644 index 0000000000..d556677a0f Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_2_3.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_2_4.png b/resources/g2/track/intamin/large_half_loop_right_2_4.png new file mode 100644 index 0000000000..208f46fa30 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_2_4.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_2_5.png b/resources/g2/track/intamin/large_half_loop_right_2_5.png new file mode 100644 index 0000000000..e143c882a4 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_2_5.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_2_6.png b/resources/g2/track/intamin/large_half_loop_right_2_6.png new file mode 100644 index 0000000000..501fdd625b Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_2_6.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_2_7.png b/resources/g2/track/intamin/large_half_loop_right_2_7.png new file mode 100644 index 0000000000..a563fc76de Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_2_7.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_3_1.png b/resources/g2/track/intamin/large_half_loop_right_3_1.png new file mode 100644 index 0000000000..77e2a5056e Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_3_1.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_3_2.png b/resources/g2/track/intamin/large_half_loop_right_3_2.png new file mode 100644 index 0000000000..40a94becb5 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_3_2.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_3_3.png b/resources/g2/track/intamin/large_half_loop_right_3_3.png new file mode 100644 index 0000000000..4504a2d1f6 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_3_3.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_3_4.png b/resources/g2/track/intamin/large_half_loop_right_3_4.png new file mode 100644 index 0000000000..c642a40adc Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_3_4.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_3_5.png b/resources/g2/track/intamin/large_half_loop_right_3_5.png new file mode 100644 index 0000000000..7084bf978f Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_3_5.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_3_6.png b/resources/g2/track/intamin/large_half_loop_right_3_6.png new file mode 100644 index 0000000000..704c93f20b Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_3_6.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_3_7.png b/resources/g2/track/intamin/large_half_loop_right_3_7.png new file mode 100644 index 0000000000..9314209f22 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_3_7.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_4_1.png b/resources/g2/track/intamin/large_half_loop_right_4_1.png new file mode 100644 index 0000000000..78ac8c458a Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_4_1.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_4_2.png b/resources/g2/track/intamin/large_half_loop_right_4_2.png new file mode 100644 index 0000000000..92feca1326 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_4_2.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_4_3.png b/resources/g2/track/intamin/large_half_loop_right_4_3.png new file mode 100644 index 0000000000..69b42cac5b Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_4_3.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_4_4.png b/resources/g2/track/intamin/large_half_loop_right_4_4.png new file mode 100644 index 0000000000..d843908a93 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_4_4.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_4_5.png b/resources/g2/track/intamin/large_half_loop_right_4_5.png new file mode 100644 index 0000000000..5ab153f20b Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_4_5.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_4_6.png b/resources/g2/track/intamin/large_half_loop_right_4_6.png new file mode 100644 index 0000000000..9a5cb9e07d Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_4_6.png differ diff --git a/resources/g2/track/intamin/large_half_loop_right_4_7.png b/resources/g2/track/intamin/large_half_loop_right_4_7.png new file mode 100644 index 0000000000..00630c45b9 Binary files /dev/null and b/resources/g2/track/intamin/large_half_loop_right_4_7.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_1_1.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_1_1.png new file mode 100644 index 0000000000..89f580b2a0 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_1_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_1_2.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_1_2.png new file mode 100644 index 0000000000..fb5a407ec3 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_1_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_1_3.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_1_3.png new file mode 100644 index 0000000000..59a042b171 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_1_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_1_4.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_1_4.png new file mode 100644 index 0000000000..f1e1b5503b Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_1_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_2_1.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_2_1.png new file mode 100644 index 0000000000..91120aedbb Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_2_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_2_2.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_2_2.png new file mode 100644 index 0000000000..737b4144d3 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_2_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_2_3.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_2_3.png new file mode 100644 index 0000000000..bcb89b70d1 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_2_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_2_4.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_2_4.png new file mode 100644 index 0000000000..a390e17578 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_2_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_3_1.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_3_1.png new file mode 100644 index 0000000000..2abb250ce0 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_3_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_3_2.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_3_2.png new file mode 100644 index 0000000000..82edef20ee Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_3_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_3_3.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_3_3.png new file mode 100644 index 0000000000..d48f37bb7d Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_3_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_3_4.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_3_4.png new file mode 100644 index 0000000000..3300e63ca8 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_3_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_4_1.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_4_1.png new file mode 100644 index 0000000000..dd7de4b56c Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_4_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_4_2.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_4_2.png new file mode 100644 index 0000000000..65df1189b4 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_4_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_4_3.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_4_3.png new file mode 100644 index 0000000000..afeadd2c6c Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_4_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_4_4.png b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_4_4.png new file mode 100644 index 0000000000..77bfd24e43 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_diag_gentle_up_4_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_1.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_1.png new file mode 100644 index 0000000000..7719a92aaa Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_2.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_3.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_3.png new file mode 100644 index 0000000000..11cfa92a3d Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_4.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_4.png new file mode 100644 index 0000000000..93e45290f5 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_1_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_1.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_1.png new file mode 100644 index 0000000000..b89328f7af Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_2.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_3.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_3.png new file mode 100644 index 0000000000..6eb7caf56f Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_4.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_4.png new file mode 100644 index 0000000000..1e54575b6a Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_2_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_1.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_1.png new file mode 100644 index 0000000000..9f50f47567 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_2.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_3.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_3.png new file mode 100644 index 0000000000..2a9679a138 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_4.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_4.png new file mode 100644 index 0000000000..43c790d3aa Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_3_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_1.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_1.png new file mode 100644 index 0000000000..8152911979 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_2.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_3.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_3.png new file mode 100644 index 0000000000..2a879d54f3 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_4.png b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_4.png new file mode 100644 index 0000000000..21732f559e Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_bank_to_orthogonal_gentle_up_4_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_1_1.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_1_1.png new file mode 100644 index 0000000000..67af624952 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_1_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_1_2.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_1_2.png new file mode 100644 index 0000000000..2cba3a74a3 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_1_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_1_3.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_1_3.png new file mode 100644 index 0000000000..5230cdc774 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_1_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_1_4.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_1_4.png new file mode 100644 index 0000000000..d40955bd4e Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_1_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_2_1.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_2_1.png new file mode 100644 index 0000000000..ef4e0cb769 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_2_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_2_2.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_2_2.png new file mode 100644 index 0000000000..367075792f Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_2_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_2_3.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_2_3.png new file mode 100644 index 0000000000..f3736b869a Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_2_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_2_4.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_2_4.png new file mode 100644 index 0000000000..d025bcb5da Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_2_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_3_1.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_3_1.png new file mode 100644 index 0000000000..55440b3060 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_3_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_3_2.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_3_2.png new file mode 100644 index 0000000000..2099b51e12 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_3_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_3_3.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_3_3.png new file mode 100644 index 0000000000..8c09cd3f5c Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_3_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_3_4.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_3_4.png new file mode 100644 index 0000000000..13a427e570 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_3_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_4_1.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_4_1.png new file mode 100644 index 0000000000..280ce72f02 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_4_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_4_2.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_4_2.png new file mode 100644 index 0000000000..699def7017 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_4_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_4_3.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_4_3.png new file mode 100644 index 0000000000..a116e044ba Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_4_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_4_4.png b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_4_4.png new file mode 100644 index 0000000000..7047c24679 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_diag_gentle_up_4_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_1_1.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_1_1.png new file mode 100644 index 0000000000..28c1e42232 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_1_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_1_2.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_1_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_1_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_1_3.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_1_3.png new file mode 100644 index 0000000000..e6b51779de Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_1_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_1_4.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_1_4.png new file mode 100644 index 0000000000..9a763329a1 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_1_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_2_1.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_2_1.png new file mode 100644 index 0000000000..e220d20571 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_2_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_2_2.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_2_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_2_3.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_2_3.png new file mode 100644 index 0000000000..c845ea9d49 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_2_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_2_4.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_2_4.png new file mode 100644 index 0000000000..e6a86a34ec Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_2_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_3_1.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_3_1.png new file mode 100644 index 0000000000..6efc4b98cc Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_3_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_3_2.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_3_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_3_3.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_3_3.png new file mode 100644 index 0000000000..9a02070f04 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_3_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_3_4.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_3_4.png new file mode 100644 index 0000000000..b43460750a Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_3_4.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_4_1.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_4_1.png new file mode 100644 index 0000000000..54b400a52d Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_4_1.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_4_2.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_4_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_4_2.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_4_3.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_4_3.png new file mode 100644 index 0000000000..cd83955798 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_4_3.png differ diff --git a/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_4_4.png b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_4_4.png new file mode 100644 index 0000000000..89233ab5a7 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_left_to_orthogonal_gentle_up_4_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_1_1.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_1_1.png new file mode 100644 index 0000000000..a92db13213 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_1_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_1_2.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_1_2.png new file mode 100644 index 0000000000..3d31bf69b4 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_1_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_1_3.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_1_3.png new file mode 100644 index 0000000000..b03356dcc3 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_1_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_1_4.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_1_4.png new file mode 100644 index 0000000000..be91af0f14 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_1_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_2_1.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_2_1.png new file mode 100644 index 0000000000..7e2d84d818 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_2_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_2_2.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_2_2.png new file mode 100644 index 0000000000..28cdcaa51b Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_2_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_2_3.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_2_3.png new file mode 100644 index 0000000000..5826d3cc71 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_2_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_2_4.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_2_4.png new file mode 100644 index 0000000000..760791eb80 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_2_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_3_1.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_3_1.png new file mode 100644 index 0000000000..0892140add Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_3_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_3_2.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_3_2.png new file mode 100644 index 0000000000..9939a8b078 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_3_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_3_3.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_3_3.png new file mode 100644 index 0000000000..125311cfa4 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_3_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_3_4.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_3_4.png new file mode 100644 index 0000000000..7ca5edd06c Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_3_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_4_1.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_4_1.png new file mode 100644 index 0000000000..a6a2232aab Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_4_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_4_2.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_4_2.png new file mode 100644 index 0000000000..e89c81665c Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_4_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_4_3.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_4_3.png new file mode 100644 index 0000000000..3a07b4bd29 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_4_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_4_4.png b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_4_4.png new file mode 100644 index 0000000000..582ed0cdb6 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_diag_gentle_up_4_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_1.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_1.png new file mode 100644 index 0000000000..f06d541d91 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_2.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_3.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_3.png new file mode 100644 index 0000000000..833dbdba20 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_4.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_4.png new file mode 100644 index 0000000000..fdc48c6ecd Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_1_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_1.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_1.png new file mode 100644 index 0000000000..177fd9315f Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_2.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_3.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_3.png new file mode 100644 index 0000000000..1d0b13db23 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_4.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_4.png new file mode 100644 index 0000000000..1c81060ca4 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_2_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_1.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_1.png new file mode 100644 index 0000000000..bca8adc34f Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_2.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_3.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_3.png new file mode 100644 index 0000000000..c1ffccb611 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_4.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_4.png new file mode 100644 index 0000000000..b65058ccaa Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_3_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_1.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_1.png new file mode 100644 index 0000000000..b4cf3336e0 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_2.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_3.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_3.png new file mode 100644 index 0000000000..a054ea482b Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_4.png b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_4.png new file mode 100644 index 0000000000..be5f86a317 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_bank_to_orthogonal_gentle_up_4_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_1_1.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_1_1.png new file mode 100644 index 0000000000..f716ae2f94 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_1_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_1_2.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_1_2.png new file mode 100644 index 0000000000..f707dc22ca Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_1_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_1_3.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_1_3.png new file mode 100644 index 0000000000..a42bd59982 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_1_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_1_4.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_1_4.png new file mode 100644 index 0000000000..3e5befa632 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_1_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_2_1.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_2_1.png new file mode 100644 index 0000000000..cdd435137e Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_2_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_2_2.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_2_2.png new file mode 100644 index 0000000000..32c73af74b Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_2_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_2_3.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_2_3.png new file mode 100644 index 0000000000..43bea947af Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_2_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_2_4.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_2_4.png new file mode 100644 index 0000000000..633ef975e2 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_2_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_3_1.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_3_1.png new file mode 100644 index 0000000000..9daf0077d5 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_3_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_3_2.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_3_2.png new file mode 100644 index 0000000000..fd7cef2b45 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_3_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_3_3.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_3_3.png new file mode 100644 index 0000000000..1fde4052fd Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_3_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_3_4.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_3_4.png new file mode 100644 index 0000000000..6a1413be6d Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_3_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_4_1.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_4_1.png new file mode 100644 index 0000000000..c8bfbcea75 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_4_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_4_2.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_4_2.png new file mode 100644 index 0000000000..f44c06599c Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_4_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_4_3.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_4_3.png new file mode 100644 index 0000000000..057eeba94c Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_4_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_4_4.png b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_4_4.png new file mode 100644 index 0000000000..bb2f1cfaaa Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_diag_gentle_up_4_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_1_1.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_1_1.png new file mode 100644 index 0000000000..69bdcffc5b Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_1_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_1_2.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_1_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_1_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_1_3.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_1_3.png new file mode 100644 index 0000000000..1aac8c0b3f Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_1_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_1_4.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_1_4.png new file mode 100644 index 0000000000..ad1ae8de3d Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_1_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_2_1.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_2_1.png new file mode 100644 index 0000000000..11e587cfa0 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_2_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_2_2.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_2_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_2_3.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_2_3.png new file mode 100644 index 0000000000..337ef6d4c0 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_2_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_2_4.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_2_4.png new file mode 100644 index 0000000000..5253a4f02c Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_2_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_3_1.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_3_1.png new file mode 100644 index 0000000000..267588fae6 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_3_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_3_2.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_3_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_3_3.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_3_3.png new file mode 100644 index 0000000000..e36c7620fd Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_3_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_3_4.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_3_4.png new file mode 100644 index 0000000000..524c7ddb80 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_3_4.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_4_1.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_4_1.png new file mode 100644 index 0000000000..c9e156519d Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_4_1.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_4_2.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_4_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_4_2.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_4_3.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_4_3.png new file mode 100644 index 0000000000..4ea09ec0f9 Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_4_3.png differ diff --git a/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_4_4.png b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_4_4.png new file mode 100644 index 0000000000..9ccee12b7d Binary files /dev/null and b/resources/g2/track/intamin/large_turn_right_to_orthogonal_gentle_up_4_4.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_1_1.png b/resources/g2/track/intamin/large_zero_g_roll_left_1_1.png new file mode 100644 index 0000000000..ca96b4213c Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_1_1.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_1_2.png b/resources/g2/track/intamin/large_zero_g_roll_left_1_2.png new file mode 100644 index 0000000000..169b5bcd43 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_1_2.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_1_3.png b/resources/g2/track/intamin/large_zero_g_roll_left_1_3.png new file mode 100644 index 0000000000..012e2ed25e Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_1_3.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_1_4.png b/resources/g2/track/intamin/large_zero_g_roll_left_1_4.png new file mode 100644 index 0000000000..462db472f6 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_1_4.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_1_5.png b/resources/g2/track/intamin/large_zero_g_roll_left_1_5.png new file mode 100644 index 0000000000..f7c513fbd0 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_1_5.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_2_1.png b/resources/g2/track/intamin/large_zero_g_roll_left_2_1.png new file mode 100644 index 0000000000..0f7fa97c17 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_2_1.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_2_2.png b/resources/g2/track/intamin/large_zero_g_roll_left_2_2.png new file mode 100644 index 0000000000..7588b500ac Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_2_2.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_2_3.png b/resources/g2/track/intamin/large_zero_g_roll_left_2_3.png new file mode 100644 index 0000000000..622535cf32 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_2_3.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_2_4.png b/resources/g2/track/intamin/large_zero_g_roll_left_2_4.png new file mode 100644 index 0000000000..85f34c39ef Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_2_4.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_3_1.png b/resources/g2/track/intamin/large_zero_g_roll_left_3_1.png new file mode 100644 index 0000000000..599f8522f2 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_3_1.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_3_2.png b/resources/g2/track/intamin/large_zero_g_roll_left_3_2.png new file mode 100644 index 0000000000..06a68dd054 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_3_2.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_3_3.png b/resources/g2/track/intamin/large_zero_g_roll_left_3_3.png new file mode 100644 index 0000000000..4cf216aeed Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_3_3.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_3_4.png b/resources/g2/track/intamin/large_zero_g_roll_left_3_4.png new file mode 100644 index 0000000000..4205c1e7e5 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_3_4.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_3_5.png b/resources/g2/track/intamin/large_zero_g_roll_left_3_5.png new file mode 100644 index 0000000000..546feb98ce Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_3_5.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_3_6.png b/resources/g2/track/intamin/large_zero_g_roll_left_3_6.png new file mode 100644 index 0000000000..652975ded9 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_3_6.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_4_1.png b/resources/g2/track/intamin/large_zero_g_roll_left_4_1.png new file mode 100644 index 0000000000..b3083dc199 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_4_1.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_4_2.png b/resources/g2/track/intamin/large_zero_g_roll_left_4_2.png new file mode 100644 index 0000000000..b5dc5027ea Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_4_2.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_4_3.png b/resources/g2/track/intamin/large_zero_g_roll_left_4_3.png new file mode 100644 index 0000000000..1d0b5f8509 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_4_3.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_4_4.png b/resources/g2/track/intamin/large_zero_g_roll_left_4_4.png new file mode 100644 index 0000000000..5264b45964 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_4_4.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_left_4_5.png b/resources/g2/track/intamin/large_zero_g_roll_left_4_5.png new file mode 100644 index 0000000000..5f5d8bb208 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_left_4_5.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_1_1.png b/resources/g2/track/intamin/large_zero_g_roll_right_1_1.png new file mode 100644 index 0000000000..22e670a5e0 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_1_1.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_1_2.png b/resources/g2/track/intamin/large_zero_g_roll_right_1_2.png new file mode 100644 index 0000000000..0375fe7741 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_1_2.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_1_3.png b/resources/g2/track/intamin/large_zero_g_roll_right_1_3.png new file mode 100644 index 0000000000..fe79ea78df Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_1_3.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_1_4.png b/resources/g2/track/intamin/large_zero_g_roll_right_1_4.png new file mode 100644 index 0000000000..32981b5eeb Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_1_4.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_1_5.png b/resources/g2/track/intamin/large_zero_g_roll_right_1_5.png new file mode 100644 index 0000000000..6a3c535f1a Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_1_5.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_2_1.png b/resources/g2/track/intamin/large_zero_g_roll_right_2_1.png new file mode 100644 index 0000000000..e27119f182 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_2_1.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_2_2.png b/resources/g2/track/intamin/large_zero_g_roll_right_2_2.png new file mode 100644 index 0000000000..4d740cda17 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_2_2.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_2_3.png b/resources/g2/track/intamin/large_zero_g_roll_right_2_3.png new file mode 100644 index 0000000000..2c509ef02c Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_2_3.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_2_4.png b/resources/g2/track/intamin/large_zero_g_roll_right_2_4.png new file mode 100644 index 0000000000..43b350c43a Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_2_4.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_2_5.png b/resources/g2/track/intamin/large_zero_g_roll_right_2_5.png new file mode 100644 index 0000000000..70d26488d4 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_2_5.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_2_6.png b/resources/g2/track/intamin/large_zero_g_roll_right_2_6.png new file mode 100644 index 0000000000..7061b7f3fd Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_2_6.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_3_1.png b/resources/g2/track/intamin/large_zero_g_roll_right_3_1.png new file mode 100644 index 0000000000..6fc1e802f4 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_3_1.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_3_2.png b/resources/g2/track/intamin/large_zero_g_roll_right_3_2.png new file mode 100644 index 0000000000..3006a2d8a8 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_3_2.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_3_3.png b/resources/g2/track/intamin/large_zero_g_roll_right_3_3.png new file mode 100644 index 0000000000..7be8f9399a Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_3_3.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_3_4.png b/resources/g2/track/intamin/large_zero_g_roll_right_3_4.png new file mode 100644 index 0000000000..844b1e5101 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_3_4.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_4_1.png b/resources/g2/track/intamin/large_zero_g_roll_right_4_1.png new file mode 100644 index 0000000000..20ecef35f4 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_4_1.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_4_2.png b/resources/g2/track/intamin/large_zero_g_roll_right_4_2.png new file mode 100644 index 0000000000..9b19027683 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_4_2.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_4_3.png b/resources/g2/track/intamin/large_zero_g_roll_right_4_3.png new file mode 100644 index 0000000000..2543693f51 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_4_3.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_4_4.png b/resources/g2/track/intamin/large_zero_g_roll_right_4_4.png new file mode 100644 index 0000000000..d9458ee41c Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_4_4.png differ diff --git a/resources/g2/track/intamin/large_zero_g_roll_right_4_5.png b/resources/g2/track/intamin/large_zero_g_roll_right_4_5.png new file mode 100644 index 0000000000..98a4bb9909 Binary files /dev/null and b/resources/g2/track/intamin/large_zero_g_roll_right_4_5.png differ diff --git a/resources/g2/track/intamin/left_bank_to_gentle_up_left_bank_diag_1.png b/resources/g2/track/intamin/left_bank_to_gentle_up_left_bank_diag_1.png new file mode 100644 index 0000000000..ae15a079e3 Binary files /dev/null and b/resources/g2/track/intamin/left_bank_to_gentle_up_left_bank_diag_1.png differ diff --git a/resources/g2/track/intamin/left_bank_to_gentle_up_left_bank_diag_2.png b/resources/g2/track/intamin/left_bank_to_gentle_up_left_bank_diag_2.png new file mode 100644 index 0000000000..09bf153294 Binary files /dev/null and b/resources/g2/track/intamin/left_bank_to_gentle_up_left_bank_diag_2.png differ diff --git a/resources/g2/track/intamin/left_bank_to_gentle_up_left_bank_diag_3.png b/resources/g2/track/intamin/left_bank_to_gentle_up_left_bank_diag_3.png new file mode 100644 index 0000000000..95279bb2b2 Binary files /dev/null and b/resources/g2/track/intamin/left_bank_to_gentle_up_left_bank_diag_3.png differ diff --git a/resources/g2/track/intamin/left_bank_to_gentle_up_left_bank_diag_4.png b/resources/g2/track/intamin/left_bank_to_gentle_up_left_bank_diag_4.png new file mode 100644 index 0000000000..1d238d7c14 Binary files /dev/null and b/resources/g2/track/intamin/left_bank_to_gentle_up_left_bank_diag_4.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_1_1.png b/resources/g2/track/intamin/left_vertical_loop_1_1.png new file mode 100644 index 0000000000..dd2944c29c Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_1_1.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_1_2.png b/resources/g2/track/intamin/left_vertical_loop_1_2.png new file mode 100644 index 0000000000..1a1f0c160e Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_1_2.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_1_3.png b/resources/g2/track/intamin/left_vertical_loop_1_3.png new file mode 100644 index 0000000000..f2a4eb26ea Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_1_3.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_1_4.png b/resources/g2/track/intamin/left_vertical_loop_1_4.png new file mode 100644 index 0000000000..c757c4845f Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_1_4.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_2_1.png b/resources/g2/track/intamin/left_vertical_loop_2_1.png new file mode 100644 index 0000000000..30cae600e8 Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_2_1.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_2_2.png b/resources/g2/track/intamin/left_vertical_loop_2_2.png new file mode 100644 index 0000000000..0c3af4a40e Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_2_2.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_2_3.png b/resources/g2/track/intamin/left_vertical_loop_2_3.png new file mode 100644 index 0000000000..d2c8201790 Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_2_3.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_2_4.png b/resources/g2/track/intamin/left_vertical_loop_2_4.png new file mode 100644 index 0000000000..691d3b68ab Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_2_4.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_3_1.png b/resources/g2/track/intamin/left_vertical_loop_3_1.png new file mode 100644 index 0000000000..02cad2a546 Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_3_1.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_3_2.png b/resources/g2/track/intamin/left_vertical_loop_3_2.png new file mode 100644 index 0000000000..10980378b3 Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_3_2.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_3_3.png b/resources/g2/track/intamin/left_vertical_loop_3_3.png new file mode 100644 index 0000000000..9901f5876a Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_3_3.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_3_4.png b/resources/g2/track/intamin/left_vertical_loop_3_4.png new file mode 100644 index 0000000000..6309e993aa Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_3_4.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_4_1.png b/resources/g2/track/intamin/left_vertical_loop_4_1.png new file mode 100644 index 0000000000..b4716cda9d Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_4_1.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_4_2.png b/resources/g2/track/intamin/left_vertical_loop_4_2.png new file mode 100644 index 0000000000..a268ed4552 Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_4_2.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_4_3.png b/resources/g2/track/intamin/left_vertical_loop_4_3.png new file mode 100644 index 0000000000..0585120a7f Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_4_3.png differ diff --git a/resources/g2/track/intamin/left_vertical_loop_4_4.png b/resources/g2/track/intamin/left_vertical_loop_4_4.png new file mode 100644 index 0000000000..875ec1a15e Binary files /dev/null and b/resources/g2/track/intamin/left_vertical_loop_4_4.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_1_1.png b/resources/g2/track/intamin/medium_half_loop_left_1_1.png new file mode 100644 index 0000000000..a1a06f7600 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_1_1.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_1_2.png b/resources/g2/track/intamin/medium_half_loop_left_1_2.png new file mode 100644 index 0000000000..b216b22be3 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_1_2.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_1_3.png b/resources/g2/track/intamin/medium_half_loop_left_1_3.png new file mode 100644 index 0000000000..a7fd91b5ef Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_1_3.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_1_4.png b/resources/g2/track/intamin/medium_half_loop_left_1_4.png new file mode 100644 index 0000000000..a6cfbea16d Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_1_4.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_1_5.png b/resources/g2/track/intamin/medium_half_loop_left_1_5.png new file mode 100644 index 0000000000..4f625df482 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_1_5.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_2_1.png b/resources/g2/track/intamin/medium_half_loop_left_2_1.png new file mode 100644 index 0000000000..176ecfb2be Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_2_1.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_2_2.png b/resources/g2/track/intamin/medium_half_loop_left_2_2.png new file mode 100644 index 0000000000..a7b628a86b Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_2_2.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_2_3.png b/resources/g2/track/intamin/medium_half_loop_left_2_3.png new file mode 100644 index 0000000000..2f114d20d2 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_2_3.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_2_4.png b/resources/g2/track/intamin/medium_half_loop_left_2_4.png new file mode 100644 index 0000000000..1d0bc53360 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_2_4.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_2_5.png b/resources/g2/track/intamin/medium_half_loop_left_2_5.png new file mode 100644 index 0000000000..67697158d2 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_2_5.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_3_1.png b/resources/g2/track/intamin/medium_half_loop_left_3_1.png new file mode 100644 index 0000000000..f335de3bf4 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_3_1.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_3_2.png b/resources/g2/track/intamin/medium_half_loop_left_3_2.png new file mode 100644 index 0000000000..4968a7dabf Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_3_2.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_3_3.png b/resources/g2/track/intamin/medium_half_loop_left_3_3.png new file mode 100644 index 0000000000..dfbd6af46c Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_3_3.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_3_4.png b/resources/g2/track/intamin/medium_half_loop_left_3_4.png new file mode 100644 index 0000000000..c167b289ca Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_3_4.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_3_5.png b/resources/g2/track/intamin/medium_half_loop_left_3_5.png new file mode 100644 index 0000000000..1c8f176af3 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_3_5.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_4_1.png b/resources/g2/track/intamin/medium_half_loop_left_4_1.png new file mode 100644 index 0000000000..50d8e9ff07 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_4_1.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_4_2.png b/resources/g2/track/intamin/medium_half_loop_left_4_2.png new file mode 100644 index 0000000000..86c8c2cbb0 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_4_2.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_4_3.png b/resources/g2/track/intamin/medium_half_loop_left_4_3.png new file mode 100644 index 0000000000..e185ca81b3 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_4_3.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_4_4.png b/resources/g2/track/intamin/medium_half_loop_left_4_4.png new file mode 100644 index 0000000000..3ff92a28f2 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_4_4.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_left_4_5.png b/resources/g2/track/intamin/medium_half_loop_left_4_5.png new file mode 100644 index 0000000000..560a48419f Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_left_4_5.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_1_1.png b/resources/g2/track/intamin/medium_half_loop_right_1_1.png new file mode 100644 index 0000000000..52fee4bea8 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_1_1.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_1_2.png b/resources/g2/track/intamin/medium_half_loop_right_1_2.png new file mode 100644 index 0000000000..7e019890ba Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_1_2.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_1_3.png b/resources/g2/track/intamin/medium_half_loop_right_1_3.png new file mode 100644 index 0000000000..8377ee9ee1 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_1_3.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_1_4.png b/resources/g2/track/intamin/medium_half_loop_right_1_4.png new file mode 100644 index 0000000000..61a6d37f34 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_1_4.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_1_5.png b/resources/g2/track/intamin/medium_half_loop_right_1_5.png new file mode 100644 index 0000000000..4ff09c5874 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_1_5.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_2_1.png b/resources/g2/track/intamin/medium_half_loop_right_2_1.png new file mode 100644 index 0000000000..efe0001507 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_2_1.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_2_2.png b/resources/g2/track/intamin/medium_half_loop_right_2_2.png new file mode 100644 index 0000000000..f29d7fdb76 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_2_2.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_2_3.png b/resources/g2/track/intamin/medium_half_loop_right_2_3.png new file mode 100644 index 0000000000..91b98408b9 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_2_3.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_2_4.png b/resources/g2/track/intamin/medium_half_loop_right_2_4.png new file mode 100644 index 0000000000..a3d001aaf5 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_2_4.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_2_5.png b/resources/g2/track/intamin/medium_half_loop_right_2_5.png new file mode 100644 index 0000000000..44de03f039 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_2_5.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_3_1.png b/resources/g2/track/intamin/medium_half_loop_right_3_1.png new file mode 100644 index 0000000000..6246c5542e Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_3_1.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_3_2.png b/resources/g2/track/intamin/medium_half_loop_right_3_2.png new file mode 100644 index 0000000000..e5f37a4a70 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_3_2.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_3_3.png b/resources/g2/track/intamin/medium_half_loop_right_3_3.png new file mode 100644 index 0000000000..0111094342 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_3_3.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_3_4.png b/resources/g2/track/intamin/medium_half_loop_right_3_4.png new file mode 100644 index 0000000000..0aadbb6dec Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_3_4.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_3_5.png b/resources/g2/track/intamin/medium_half_loop_right_3_5.png new file mode 100644 index 0000000000..62fe3fb186 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_3_5.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_4_1.png b/resources/g2/track/intamin/medium_half_loop_right_4_1.png new file mode 100644 index 0000000000..f5d96f970e Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_4_1.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_4_2.png b/resources/g2/track/intamin/medium_half_loop_right_4_2.png new file mode 100644 index 0000000000..af0593fb25 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_4_2.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_4_3.png b/resources/g2/track/intamin/medium_half_loop_right_4_3.png new file mode 100644 index 0000000000..c2b98feff5 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_4_3.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_4_4.png b/resources/g2/track/intamin/medium_half_loop_right_4_4.png new file mode 100644 index 0000000000..8f54d350d0 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_4_4.png differ diff --git a/resources/g2/track/intamin/medium_half_loop_right_4_5.png b/resources/g2/track/intamin/medium_half_loop_right_4_5.png new file mode 100644 index 0000000000..9fc1581a25 Binary files /dev/null and b/resources/g2/track/intamin/medium_half_loop_right_4_5.png differ diff --git a/resources/g2/track/intamin/quarter_loop_up_1_1.png b/resources/g2/track/intamin/quarter_loop_up_1_1.png new file mode 100644 index 0000000000..b06e5e021b Binary files /dev/null and b/resources/g2/track/intamin/quarter_loop_up_1_1.png differ diff --git a/resources/g2/track/intamin/quarter_loop_up_1_2.png b/resources/g2/track/intamin/quarter_loop_up_1_2.png new file mode 100644 index 0000000000..4be29c7725 Binary files /dev/null and b/resources/g2/track/intamin/quarter_loop_up_1_2.png differ diff --git a/resources/g2/track/intamin/quarter_loop_up_1_3.png b/resources/g2/track/intamin/quarter_loop_up_1_3.png new file mode 100644 index 0000000000..06c9eff5ab Binary files /dev/null and b/resources/g2/track/intamin/quarter_loop_up_1_3.png differ diff --git a/resources/g2/track/intamin/quarter_loop_up_2_1.png b/resources/g2/track/intamin/quarter_loop_up_2_1.png new file mode 100644 index 0000000000..f1b4473bd6 Binary files /dev/null and b/resources/g2/track/intamin/quarter_loop_up_2_1.png differ diff --git a/resources/g2/track/intamin/quarter_loop_up_2_2.png b/resources/g2/track/intamin/quarter_loop_up_2_2.png new file mode 100644 index 0000000000..4c397872f8 Binary files /dev/null and b/resources/g2/track/intamin/quarter_loop_up_2_2.png differ diff --git a/resources/g2/track/intamin/quarter_loop_up_2_3.png b/resources/g2/track/intamin/quarter_loop_up_2_3.png new file mode 100644 index 0000000000..d32594fd24 Binary files /dev/null and b/resources/g2/track/intamin/quarter_loop_up_2_3.png differ diff --git a/resources/g2/track/intamin/quarter_loop_up_3_1.png b/resources/g2/track/intamin/quarter_loop_up_3_1.png new file mode 100644 index 0000000000..aae462094a Binary files /dev/null and b/resources/g2/track/intamin/quarter_loop_up_3_1.png differ diff --git a/resources/g2/track/intamin/quarter_loop_up_3_2.png b/resources/g2/track/intamin/quarter_loop_up_3_2.png new file mode 100644 index 0000000000..007f5506e9 Binary files /dev/null and b/resources/g2/track/intamin/quarter_loop_up_3_2.png differ diff --git a/resources/g2/track/intamin/quarter_loop_up_3_3.png b/resources/g2/track/intamin/quarter_loop_up_3_3.png new file mode 100644 index 0000000000..4a92e56422 Binary files /dev/null and b/resources/g2/track/intamin/quarter_loop_up_3_3.png differ diff --git a/resources/g2/track/intamin/quarter_loop_up_4_1.png b/resources/g2/track/intamin/quarter_loop_up_4_1.png new file mode 100644 index 0000000000..86b8e83207 Binary files /dev/null and b/resources/g2/track/intamin/quarter_loop_up_4_1.png differ diff --git a/resources/g2/track/intamin/quarter_loop_up_4_2.png b/resources/g2/track/intamin/quarter_loop_up_4_2.png new file mode 100644 index 0000000000..8f3fdf5b23 Binary files /dev/null and b/resources/g2/track/intamin/quarter_loop_up_4_2.png differ diff --git a/resources/g2/track/intamin/quarter_loop_up_4_3.png b/resources/g2/track/intamin/quarter_loop_up_4_3.png new file mode 100644 index 0000000000..c096f24e1a Binary files /dev/null and b/resources/g2/track/intamin/quarter_loop_up_4_3.png differ diff --git a/resources/g2/track/intamin/right_bank_to_gentle_up_right_bank_diag_1.png b/resources/g2/track/intamin/right_bank_to_gentle_up_right_bank_diag_1.png new file mode 100644 index 0000000000..83e7cf7193 Binary files /dev/null and b/resources/g2/track/intamin/right_bank_to_gentle_up_right_bank_diag_1.png differ diff --git a/resources/g2/track/intamin/right_bank_to_gentle_up_right_bank_diag_2.png b/resources/g2/track/intamin/right_bank_to_gentle_up_right_bank_diag_2.png new file mode 100644 index 0000000000..ccb60ad954 Binary files /dev/null and b/resources/g2/track/intamin/right_bank_to_gentle_up_right_bank_diag_2.png differ diff --git a/resources/g2/track/intamin/right_bank_to_gentle_up_right_bank_diag_3.png b/resources/g2/track/intamin/right_bank_to_gentle_up_right_bank_diag_3.png new file mode 100644 index 0000000000..5108758409 Binary files /dev/null and b/resources/g2/track/intamin/right_bank_to_gentle_up_right_bank_diag_3.png differ diff --git a/resources/g2/track/intamin/right_bank_to_gentle_up_right_bank_diag_4.png b/resources/g2/track/intamin/right_bank_to_gentle_up_right_bank_diag_4.png new file mode 100644 index 0000000000..b9f4182458 Binary files /dev/null and b/resources/g2/track/intamin/right_bank_to_gentle_up_right_bank_diag_4.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_1_1.png b/resources/g2/track/intamin/right_vertical_loop_1_1.png new file mode 100644 index 0000000000..b1985d0579 Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_1_1.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_1_2.png b/resources/g2/track/intamin/right_vertical_loop_1_2.png new file mode 100644 index 0000000000..7b84fb2970 Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_1_2.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_1_3.png b/resources/g2/track/intamin/right_vertical_loop_1_3.png new file mode 100644 index 0000000000..9fc3e0b23a Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_1_3.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_1_4.png b/resources/g2/track/intamin/right_vertical_loop_1_4.png new file mode 100644 index 0000000000..74305c4728 Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_1_4.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_2_1.png b/resources/g2/track/intamin/right_vertical_loop_2_1.png new file mode 100644 index 0000000000..5f9f94dd81 Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_2_1.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_2_2.png b/resources/g2/track/intamin/right_vertical_loop_2_2.png new file mode 100644 index 0000000000..198ea28f12 Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_2_2.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_2_3.png b/resources/g2/track/intamin/right_vertical_loop_2_3.png new file mode 100644 index 0000000000..440df3fb4f Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_2_3.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_2_4.png b/resources/g2/track/intamin/right_vertical_loop_2_4.png new file mode 100644 index 0000000000..04fe64d89d Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_2_4.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_3_1.png b/resources/g2/track/intamin/right_vertical_loop_3_1.png new file mode 100644 index 0000000000..cade790acd Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_3_1.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_3_2.png b/resources/g2/track/intamin/right_vertical_loop_3_2.png new file mode 100644 index 0000000000..702de75d66 Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_3_2.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_3_3.png b/resources/g2/track/intamin/right_vertical_loop_3_3.png new file mode 100644 index 0000000000..2967d72b9c Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_3_3.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_3_4.png b/resources/g2/track/intamin/right_vertical_loop_3_4.png new file mode 100644 index 0000000000..f0af860652 Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_3_4.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_4_1.png b/resources/g2/track/intamin/right_vertical_loop_4_1.png new file mode 100644 index 0000000000..eb438b2833 Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_4_1.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_4_2.png b/resources/g2/track/intamin/right_vertical_loop_4_2.png new file mode 100644 index 0000000000..e59097117d Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_4_2.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_4_3.png b/resources/g2/track/intamin/right_vertical_loop_4_3.png new file mode 100644 index 0000000000..951cebd062 Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_4_3.png differ diff --git a/resources/g2/track/intamin/right_vertical_loop_4_4.png b/resources/g2/track/intamin/right_vertical_loop_4_4.png new file mode 100644 index 0000000000..3909c446c8 Binary files /dev/null and b/resources/g2/track/intamin/right_vertical_loop_4_4.png differ diff --git a/resources/g2/track/intamin/small_flat_to_steep_up_1.png b/resources/g2/track/intamin/small_flat_to_steep_up_1.png new file mode 100644 index 0000000000..93c923be10 Binary files /dev/null and b/resources/g2/track/intamin/small_flat_to_steep_up_1.png differ diff --git a/resources/g2/track/intamin/small_flat_to_steep_up_2_1.png b/resources/g2/track/intamin/small_flat_to_steep_up_2_1.png new file mode 100644 index 0000000000..91f21b2435 Binary files /dev/null and b/resources/g2/track/intamin/small_flat_to_steep_up_2_1.png differ diff --git a/resources/g2/track/intamin/small_flat_to_steep_up_2_2.png b/resources/g2/track/intamin/small_flat_to_steep_up_2_2.png new file mode 100644 index 0000000000..da0a0b7574 Binary files /dev/null and b/resources/g2/track/intamin/small_flat_to_steep_up_2_2.png differ diff --git a/resources/g2/track/intamin/small_flat_to_steep_up_3_1.png b/resources/g2/track/intamin/small_flat_to_steep_up_3_1.png new file mode 100644 index 0000000000..728bab501c Binary files /dev/null and b/resources/g2/track/intamin/small_flat_to_steep_up_3_1.png differ diff --git a/resources/g2/track/intamin/small_flat_to_steep_up_3_2.png b/resources/g2/track/intamin/small_flat_to_steep_up_3_2.png new file mode 100644 index 0000000000..14ace4e613 Binary files /dev/null and b/resources/g2/track/intamin/small_flat_to_steep_up_3_2.png differ diff --git a/resources/g2/track/intamin/small_flat_to_steep_up_4.png b/resources/g2/track/intamin/small_flat_to_steep_up_4.png new file mode 100644 index 0000000000..62e2160ebb Binary files /dev/null and b/resources/g2/track/intamin/small_flat_to_steep_up_4.png differ diff --git a/resources/g2/track/intamin/small_flat_to_steep_up_diag_1.png b/resources/g2/track/intamin/small_flat_to_steep_up_diag_1.png new file mode 100644 index 0000000000..f820a0f89f Binary files /dev/null and b/resources/g2/track/intamin/small_flat_to_steep_up_diag_1.png differ diff --git a/resources/g2/track/intamin/small_flat_to_steep_up_diag_2.png b/resources/g2/track/intamin/small_flat_to_steep_up_diag_2.png new file mode 100644 index 0000000000..0d5b8881af Binary files /dev/null and b/resources/g2/track/intamin/small_flat_to_steep_up_diag_2.png differ diff --git a/resources/g2/track/intamin/small_flat_to_steep_up_diag_3.png b/resources/g2/track/intamin/small_flat_to_steep_up_diag_3.png new file mode 100644 index 0000000000..01033fb147 Binary files /dev/null and b/resources/g2/track/intamin/small_flat_to_steep_up_diag_3.png differ diff --git a/resources/g2/track/intamin/small_flat_to_steep_up_diag_4.png b/resources/g2/track/intamin/small_flat_to_steep_up_diag_4.png new file mode 100644 index 0000000000..255e855653 Binary files /dev/null and b/resources/g2/track/intamin/small_flat_to_steep_up_diag_4.png differ diff --git a/resources/g2/track/intamin/small_steep_to_flat_up_1.png b/resources/g2/track/intamin/small_steep_to_flat_up_1.png new file mode 100644 index 0000000000..fbfb634c74 Binary files /dev/null and b/resources/g2/track/intamin/small_steep_to_flat_up_1.png differ diff --git a/resources/g2/track/intamin/small_steep_to_flat_up_2_1.png b/resources/g2/track/intamin/small_steep_to_flat_up_2_1.png new file mode 100644 index 0000000000..9c815f3a2c Binary files /dev/null and b/resources/g2/track/intamin/small_steep_to_flat_up_2_1.png differ diff --git a/resources/g2/track/intamin/small_steep_to_flat_up_2_2.png b/resources/g2/track/intamin/small_steep_to_flat_up_2_2.png new file mode 100644 index 0000000000..788f50160e Binary files /dev/null and b/resources/g2/track/intamin/small_steep_to_flat_up_2_2.png differ diff --git a/resources/g2/track/intamin/small_steep_to_flat_up_3_1.png b/resources/g2/track/intamin/small_steep_to_flat_up_3_1.png new file mode 100644 index 0000000000..03fca82dc2 Binary files /dev/null and b/resources/g2/track/intamin/small_steep_to_flat_up_3_1.png differ diff --git a/resources/g2/track/intamin/small_steep_to_flat_up_3_2.png b/resources/g2/track/intamin/small_steep_to_flat_up_3_2.png new file mode 100644 index 0000000000..49e994ec0a Binary files /dev/null and b/resources/g2/track/intamin/small_steep_to_flat_up_3_2.png differ diff --git a/resources/g2/track/intamin/small_steep_to_flat_up_4.png b/resources/g2/track/intamin/small_steep_to_flat_up_4.png new file mode 100644 index 0000000000..889d494424 Binary files /dev/null and b/resources/g2/track/intamin/small_steep_to_flat_up_4.png differ diff --git a/resources/g2/track/intamin/small_steep_to_flat_up_diag_1.png b/resources/g2/track/intamin/small_steep_to_flat_up_diag_1.png new file mode 100644 index 0000000000..7c1fa76b31 Binary files /dev/null and b/resources/g2/track/intamin/small_steep_to_flat_up_diag_1.png differ diff --git a/resources/g2/track/intamin/small_steep_to_flat_up_diag_2.png b/resources/g2/track/intamin/small_steep_to_flat_up_diag_2.png new file mode 100644 index 0000000000..766de49738 Binary files /dev/null and b/resources/g2/track/intamin/small_steep_to_flat_up_diag_2.png differ diff --git a/resources/g2/track/intamin/small_steep_to_flat_up_diag_3.png b/resources/g2/track/intamin/small_steep_to_flat_up_diag_3.png new file mode 100644 index 0000000000..ddb39a1ea1 Binary files /dev/null and b/resources/g2/track/intamin/small_steep_to_flat_up_diag_3.png differ diff --git a/resources/g2/track/intamin/small_steep_to_flat_up_diag_4.png b/resources/g2/track/intamin/small_steep_to_flat_up_diag_4.png new file mode 100644 index 0000000000..7ff1a8605c Binary files /dev/null and b/resources/g2/track/intamin/small_steep_to_flat_up_diag_4.png differ diff --git a/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_1_1.png b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..0b7a442a5b Binary files /dev/null and b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_1_2.png b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..ef76130b79 Binary files /dev/null and b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_2_1.png b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..f7c15310ca Binary files /dev/null and b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_2_2.png b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..92fad07867 Binary files /dev/null and b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_2_3.png b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_2_3.png new file mode 100644 index 0000000000..974fd978b2 Binary files /dev/null and b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_2_3.png differ diff --git a/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_3_1.png b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..55434a30ec Binary files /dev/null and b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_3_2.png b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..888de9a281 Binary files /dev/null and b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_4_1.png b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..3b6a192657 Binary files /dev/null and b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_4_2.png b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..520636c37b Binary files /dev/null and b/resources/g2/track/intamin/small_turn_left_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_1_1.png b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..52106c0913 Binary files /dev/null and b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_1_2.png b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..80adb48602 Binary files /dev/null and b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_2_1.png b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..10104eaeb5 Binary files /dev/null and b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_2_2.png b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..2a52877720 Binary files /dev/null and b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_3_1.png b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..179a877747 Binary files /dev/null and b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_3_2.png b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..93897b133a Binary files /dev/null and b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_3_3.png b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_3_3.png new file mode 100644 index 0000000000..b0cef627db Binary files /dev/null and b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_3_3.png differ diff --git a/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_4_1.png b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..49e42877a1 Binary files /dev/null and b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_4_2.png b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..fd20a46d5c Binary files /dev/null and b/resources/g2/track/intamin/small_turn_right_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/intamin/steep_to_vertical_up_1.png b/resources/g2/track/intamin/steep_to_vertical_up_1.png new file mode 100644 index 0000000000..409fc71bfc Binary files /dev/null and b/resources/g2/track/intamin/steep_to_vertical_up_1.png differ diff --git a/resources/g2/track/intamin/steep_to_vertical_up_2.png b/resources/g2/track/intamin/steep_to_vertical_up_2.png new file mode 100644 index 0000000000..9bd4ece997 Binary files /dev/null and b/resources/g2/track/intamin/steep_to_vertical_up_2.png differ diff --git a/resources/g2/track/intamin/steep_to_vertical_up_3.png b/resources/g2/track/intamin/steep_to_vertical_up_3.png new file mode 100644 index 0000000000..0a3c8cea03 Binary files /dev/null and b/resources/g2/track/intamin/steep_to_vertical_up_3.png differ diff --git a/resources/g2/track/intamin/steep_to_vertical_up_4.png b/resources/g2/track/intamin/steep_to_vertical_up_4.png new file mode 100644 index 0000000000..e8bf25b3d8 Binary files /dev/null and b/resources/g2/track/intamin/steep_to_vertical_up_4.png differ diff --git a/resources/g2/track/intamin/vertical_1.png b/resources/g2/track/intamin/vertical_1.png new file mode 100644 index 0000000000..f9a7b56177 Binary files /dev/null and b/resources/g2/track/intamin/vertical_1.png differ diff --git a/resources/g2/track/intamin/vertical_2.png b/resources/g2/track/intamin/vertical_2.png new file mode 100644 index 0000000000..8b32e02510 Binary files /dev/null and b/resources/g2/track/intamin/vertical_2.png differ diff --git a/resources/g2/track/intamin/vertical_3.png b/resources/g2/track/intamin/vertical_3.png new file mode 100644 index 0000000000..c66fe9cce8 Binary files /dev/null and b/resources/g2/track/intamin/vertical_3.png differ diff --git a/resources/g2/track/intamin/vertical_4.png b/resources/g2/track/intamin/vertical_4.png new file mode 100644 index 0000000000..1620684912 Binary files /dev/null and b/resources/g2/track/intamin/vertical_4.png differ diff --git a/resources/g2/track/intamin/vertical_to_steep_up_1.png b/resources/g2/track/intamin/vertical_to_steep_up_1.png new file mode 100644 index 0000000000..6f5bf7e220 Binary files /dev/null and b/resources/g2/track/intamin/vertical_to_steep_up_1.png differ diff --git a/resources/g2/track/intamin/vertical_to_steep_up_2.png b/resources/g2/track/intamin/vertical_to_steep_up_2.png new file mode 100644 index 0000000000..3404691d28 Binary files /dev/null and b/resources/g2/track/intamin/vertical_to_steep_up_2.png differ diff --git a/resources/g2/track/intamin/vertical_to_steep_up_3.png b/resources/g2/track/intamin/vertical_to_steep_up_3.png new file mode 100644 index 0000000000..4dfd845af4 Binary files /dev/null and b/resources/g2/track/intamin/vertical_to_steep_up_3.png differ diff --git a/resources/g2/track/intamin/vertical_to_steep_up_4.png b/resources/g2/track/intamin/vertical_to_steep_up_4.png new file mode 100644 index 0000000000..e276809d92 Binary files /dev/null and b/resources/g2/track/intamin/vertical_to_steep_up_4.png differ diff --git a/resources/g2/track/intamin/vertical_twist_left_up_1.png b/resources/g2/track/intamin/vertical_twist_left_up_1.png new file mode 100644 index 0000000000..21d67f7a5d Binary files /dev/null and b/resources/g2/track/intamin/vertical_twist_left_up_1.png differ diff --git a/resources/g2/track/intamin/vertical_twist_left_up_2_1.png b/resources/g2/track/intamin/vertical_twist_left_up_2_1.png new file mode 100644 index 0000000000..1d327d997b Binary files /dev/null and b/resources/g2/track/intamin/vertical_twist_left_up_2_1.png differ diff --git a/resources/g2/track/intamin/vertical_twist_left_up_2_2.png b/resources/g2/track/intamin/vertical_twist_left_up_2_2.png new file mode 100644 index 0000000000..36a8efaacd Binary files /dev/null and b/resources/g2/track/intamin/vertical_twist_left_up_2_2.png differ diff --git a/resources/g2/track/intamin/vertical_twist_left_up_3.png b/resources/g2/track/intamin/vertical_twist_left_up_3.png new file mode 100644 index 0000000000..7e42f5dc95 Binary files /dev/null and b/resources/g2/track/intamin/vertical_twist_left_up_3.png differ diff --git a/resources/g2/track/intamin/vertical_twist_left_up_4_1.png b/resources/g2/track/intamin/vertical_twist_left_up_4_1.png new file mode 100644 index 0000000000..1c57e83538 Binary files /dev/null and b/resources/g2/track/intamin/vertical_twist_left_up_4_1.png differ diff --git a/resources/g2/track/intamin/vertical_twist_left_up_4_2.png b/resources/g2/track/intamin/vertical_twist_left_up_4_2.png new file mode 100644 index 0000000000..7d187f4f83 Binary files /dev/null and b/resources/g2/track/intamin/vertical_twist_left_up_4_2.png differ diff --git a/resources/g2/track/intamin/vertical_twist_right_up_1_1.png b/resources/g2/track/intamin/vertical_twist_right_up_1_1.png new file mode 100644 index 0000000000..2d72d6e5e1 Binary files /dev/null and b/resources/g2/track/intamin/vertical_twist_right_up_1_1.png differ diff --git a/resources/g2/track/intamin/vertical_twist_right_up_1_2.png b/resources/g2/track/intamin/vertical_twist_right_up_1_2.png new file mode 100644 index 0000000000..dca6c84a32 Binary files /dev/null and b/resources/g2/track/intamin/vertical_twist_right_up_1_2.png differ diff --git a/resources/g2/track/intamin/vertical_twist_right_up_2.png b/resources/g2/track/intamin/vertical_twist_right_up_2.png new file mode 100644 index 0000000000..ab9505a1b9 Binary files /dev/null and b/resources/g2/track/intamin/vertical_twist_right_up_2.png differ diff --git a/resources/g2/track/intamin/vertical_twist_right_up_3_1.png b/resources/g2/track/intamin/vertical_twist_right_up_3_1.png new file mode 100644 index 0000000000..1afc468ddf Binary files /dev/null and b/resources/g2/track/intamin/vertical_twist_right_up_3_1.png differ diff --git a/resources/g2/track/intamin/vertical_twist_right_up_3_2.png b/resources/g2/track/intamin/vertical_twist_right_up_3_2.png new file mode 100644 index 0000000000..68005755e0 Binary files /dev/null and b/resources/g2/track/intamin/vertical_twist_right_up_3_2.png differ diff --git a/resources/g2/track/intamin/vertical_twist_right_up_4.png b/resources/g2/track/intamin/vertical_twist_right_up_4.png new file mode 100644 index 0000000000..4109a6bac9 Binary files /dev/null and b/resources/g2/track/intamin/vertical_twist_right_up_4.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_1_1.png b/resources/g2/track/intamin/zero_g_roll_left_1_1.png new file mode 100644 index 0000000000..6471b67ccd Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_1_1.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_1_2.png b/resources/g2/track/intamin/zero_g_roll_left_1_2.png new file mode 100644 index 0000000000..3cfbad76b2 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_1_2.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_1_3.png b/resources/g2/track/intamin/zero_g_roll_left_1_3.png new file mode 100644 index 0000000000..2b1122a252 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_1_3.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_1_4.png b/resources/g2/track/intamin/zero_g_roll_left_1_4.png new file mode 100644 index 0000000000..d30eb46960 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_1_4.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_2_1.png b/resources/g2/track/intamin/zero_g_roll_left_2_1.png new file mode 100644 index 0000000000..bcaede6485 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_2_1.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_2_2.png b/resources/g2/track/intamin/zero_g_roll_left_2_2.png new file mode 100644 index 0000000000..af063f858c Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_2_2.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_2_3.png b/resources/g2/track/intamin/zero_g_roll_left_2_3.png new file mode 100644 index 0000000000..c5dd442cdc Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_2_3.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_2_4.png b/resources/g2/track/intamin/zero_g_roll_left_2_4.png new file mode 100644 index 0000000000..a17ee95a64 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_2_4.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_3_1.png b/resources/g2/track/intamin/zero_g_roll_left_3_1.png new file mode 100644 index 0000000000..aa5b42f11b Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_3_1.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_3_2.png b/resources/g2/track/intamin/zero_g_roll_left_3_2.png new file mode 100644 index 0000000000..5098ad90e1 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_3_2.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_3_3.png b/resources/g2/track/intamin/zero_g_roll_left_3_3.png new file mode 100644 index 0000000000..c4d6f2f31a Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_3_3.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_3_4.png b/resources/g2/track/intamin/zero_g_roll_left_3_4.png new file mode 100644 index 0000000000..c95d67fc3e Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_3_4.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_4_1.png b/resources/g2/track/intamin/zero_g_roll_left_4_1.png new file mode 100644 index 0000000000..8b2cd5820f Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_4_1.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_4_2.png b/resources/g2/track/intamin/zero_g_roll_left_4_2.png new file mode 100644 index 0000000000..0d9f30c349 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_4_2.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_4_3.png b/resources/g2/track/intamin/zero_g_roll_left_4_3.png new file mode 100644 index 0000000000..857b1cd524 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_4_3.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_left_4_4.png b/resources/g2/track/intamin/zero_g_roll_left_4_4.png new file mode 100644 index 0000000000..fa8f58abf3 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_left_4_4.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_1_1.png b/resources/g2/track/intamin/zero_g_roll_right_1_1.png new file mode 100644 index 0000000000..2dfdfa55bc Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_1_1.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_1_2.png b/resources/g2/track/intamin/zero_g_roll_right_1_2.png new file mode 100644 index 0000000000..8f391203f5 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_1_2.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_1_3.png b/resources/g2/track/intamin/zero_g_roll_right_1_3.png new file mode 100644 index 0000000000..abd7dd0e14 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_1_3.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_1_4.png b/resources/g2/track/intamin/zero_g_roll_right_1_4.png new file mode 100644 index 0000000000..44f564c6c5 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_1_4.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_2_1.png b/resources/g2/track/intamin/zero_g_roll_right_2_1.png new file mode 100644 index 0000000000..43fc36667b Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_2_1.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_2_2.png b/resources/g2/track/intamin/zero_g_roll_right_2_2.png new file mode 100644 index 0000000000..67ffe3f245 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_2_2.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_2_3.png b/resources/g2/track/intamin/zero_g_roll_right_2_3.png new file mode 100644 index 0000000000..a1c4d26c90 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_2_3.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_2_4.png b/resources/g2/track/intamin/zero_g_roll_right_2_4.png new file mode 100644 index 0000000000..2f723aa270 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_2_4.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_3_1.png b/resources/g2/track/intamin/zero_g_roll_right_3_1.png new file mode 100644 index 0000000000..7d7c8c8966 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_3_1.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_3_2.png b/resources/g2/track/intamin/zero_g_roll_right_3_2.png new file mode 100644 index 0000000000..4561156dfb Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_3_2.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_3_3.png b/resources/g2/track/intamin/zero_g_roll_right_3_3.png new file mode 100644 index 0000000000..5ead86a23f Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_3_3.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_3_4.png b/resources/g2/track/intamin/zero_g_roll_right_3_4.png new file mode 100644 index 0000000000..44c65e086f Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_3_4.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_4_1.png b/resources/g2/track/intamin/zero_g_roll_right_4_1.png new file mode 100644 index 0000000000..7f5ca4200b Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_4_1.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_4_2.png b/resources/g2/track/intamin/zero_g_roll_right_4_2.png new file mode 100644 index 0000000000..6b325b81fb Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_4_2.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_4_3.png b/resources/g2/track/intamin/zero_g_roll_right_4_3.png new file mode 100644 index 0000000000..c2387869f3 Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_4_3.png differ diff --git a/resources/g2/track/intamin/zero_g_roll_right_4_4.png b/resources/g2/track/intamin/zero_g_roll_right_4_4.png new file mode 100644 index 0000000000..5a97ccccef Binary files /dev/null and b/resources/g2/track/intamin/zero_g_roll_right_4_4.png differ diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index fbef0267f8..f0afd9e816 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -43,7 +43,7 @@ // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -#define NETWORK_STREAM_VERSION "2" +#define NETWORK_STREAM_VERSION "3" #define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION diff --git a/src/openrct2/park/ParkFile.h b/src/openrct2/park/ParkFile.h index 3965c43d22..536923e2d2 100644 --- a/src/openrct2/park/ParkFile.h +++ b/src/openrct2/park/ParkFile.h @@ -9,7 +9,7 @@ struct ObjectRepositoryItem; namespace OpenRCT2 { // Current version that is saved. - constexpr uint32_t PARK_FILE_CURRENT_VERSION = 30; + constexpr uint32_t PARK_FILE_CURRENT_VERSION = 31; // The minimum version that is forwards compatible with the current version. constexpr uint32_t PARK_FILE_MIN_VERSION = 30; diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index 3bbf1b048b..9b90e52cfa 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -946,6 +946,113 @@ bool TrackTypeMustBeMadeInvisible(ride_type_t rideType, track_type_t trackType, return true; } } + else if (rideType == RIDE_TYPE_GIGA_COASTER && parkFileVersion <= 30) + { + switch (trackType) + { + case TrackElemType::Up90: + case TrackElemType::Down90: + case TrackElemType::Up60ToUp90: + case TrackElemType::Down90ToDown60: + case TrackElemType::Up90ToUp60: + case TrackElemType::Down60ToDown90: + case TrackElemType::LeftQuarterTurn1TileUp90: + case TrackElemType::RightQuarterTurn1TileUp90: + case TrackElemType::LeftQuarterTurn1TileDown90: + case TrackElemType::RightQuarterTurn1TileDown90: + case TrackElemType::LeftBarrelRollUpToDown: + case TrackElemType::RightBarrelRollUpToDown: + case TrackElemType::LeftBarrelRollDownToUp: + case TrackElemType::RightBarrelRollDownToUp: + case TrackElemType::HalfLoopUp: + case TrackElemType::HalfLoopDown: + case TrackElemType::LeftVerticalLoop: + case TrackElemType::RightVerticalLoop: + case TrackElemType::LeftCorkscrewUp: + case TrackElemType::RightCorkscrewUp: + case TrackElemType::LeftCorkscrewDown: + case TrackElemType::RightCorkscrewDown: + case TrackElemType::LeftLargeCorkscrewUp: + case TrackElemType::RightLargeCorkscrewUp: + case TrackElemType::LeftLargeCorkscrewDown: + case TrackElemType::RightLargeCorkscrewDown: + case TrackElemType::LeftZeroGRollUp: + case TrackElemType::RightZeroGRollUp: + case TrackElemType::LeftZeroGRollDown: + case TrackElemType::RightZeroGRollDown: + case TrackElemType::LeftLargeZeroGRollUp: + case TrackElemType::RightLargeZeroGRollUp: + case TrackElemType::LeftLargeZeroGRollDown: + case TrackElemType::RightLargeZeroGRollDown: + case TrackElemType::Up90ToInvertedFlatQuarterLoop: + case TrackElemType::InvertedFlatToDown90QuarterLoop: + case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25: + case TrackElemType::RightBankToRightQuarterTurn3TilesUp25: + case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank: + case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank: + case TrackElemType::LeftMediumHalfLoopUp: + case TrackElemType::RightMediumHalfLoopUp: + case TrackElemType::LeftMediumHalfLoopDown: + case TrackElemType::RightMediumHalfLoopDown: + case TrackElemType::LeftLargeHalfLoopUp: + case TrackElemType::RightLargeHalfLoopUp: + case TrackElemType::RightLargeHalfLoopDown: + case TrackElemType::LeftLargeHalfLoopDown: + case TrackElemType::FlatToUp60: + case TrackElemType::Up60ToFlat: + case TrackElemType::FlatToDown60: + case TrackElemType::Down60ToFlat: + case TrackElemType::DiagFlatToUp60: + case TrackElemType::DiagUp60ToFlat: + case TrackElemType::DiagFlatToDown60: + case TrackElemType::DiagDown60ToFlat: + case TrackElemType::LeftEighthToDiagUp25: + case TrackElemType::RightEighthToDiagUp25: + case TrackElemType::LeftEighthToDiagDown25: + case TrackElemType::RightEighthToDiagDown25: + case TrackElemType::LeftEighthToOrthogonalUp25: + case TrackElemType::RightEighthToOrthogonalUp25: + case TrackElemType::LeftEighthToOrthogonalDown25: + case TrackElemType::RightEighthToOrthogonalDown25: + case TrackElemType::DiagUp25ToLeftBankedUp25: + case TrackElemType::DiagUp25ToRightBankedUp25: + case TrackElemType::DiagLeftBankedUp25ToUp25: + case TrackElemType::DiagRightBankedUp25ToUp25: + case TrackElemType::DiagDown25ToLeftBankedDown25: + case TrackElemType::DiagDown25ToRightBankedDown25: + case TrackElemType::DiagLeftBankedDown25ToDown25: + case TrackElemType::DiagRightBankedDown25ToDown25: + case TrackElemType::DiagLeftBankedFlatToLeftBankedUp25: + case TrackElemType::DiagRightBankedFlatToRightBankedUp25: + case TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat: + case TrackElemType::DiagRightBankedUp25ToRightBankedFlat: + case TrackElemType::DiagLeftBankedFlatToLeftBankedDown25: + case TrackElemType::DiagRightBankedFlatToRightBankedDown25: + case TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat: + case TrackElemType::DiagRightBankedDown25ToRightBankedFlat: + case TrackElemType::DiagUp25LeftBanked: + case TrackElemType::DiagUp25RightBanked: + case TrackElemType::DiagDown25LeftBanked: + case TrackElemType::DiagDown25RightBanked: + case TrackElemType::DiagFlatToLeftBankedUp25: + case TrackElemType::DiagFlatToRightBankedUp25: + case TrackElemType::DiagLeftBankedUp25ToFlat: + case TrackElemType::DiagRightBankedUp25ToFlat: + case TrackElemType::DiagFlatToLeftBankedDown25: + case TrackElemType::DiagFlatToRightBankedDown25: + case TrackElemType::DiagLeftBankedDown25ToFlat: + case TrackElemType::DiagRightBankedDown25ToFlat: + case TrackElemType::LeftEighthBankToDiagUp25: + case TrackElemType::RightEighthBankToDiagUp25: + case TrackElemType::LeftEighthBankToDiagDown25: + case TrackElemType::RightEighthBankToDiagDown25: + case TrackElemType::LeftEighthBankToOrthogonalUp25: + case TrackElemType::RightEighthBankToOrthogonalUp25: + case TrackElemType::LeftEighthBankToOrthogonalDown25: + case TrackElemType::RightEighthBankToOrthogonalDown25: + return true; + } + } return false; } diff --git a/src/openrct2/ride/coaster/GigaCoaster.cpp b/src/openrct2/ride/coaster/GigaCoaster.cpp index 9a86ba20b8..b36f3b2b38 100644 --- a/src/openrct2/ride/coaster/GigaCoaster.cpp +++ b/src/openrct2/ride/coaster/GigaCoaster.cpp @@ -9410,6 +9410,7159 @@ static void GigaRCTrackPoweredLift( PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); } +static void GigaRCTrack90DegUp( + PaintSession& 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_GIGA_TRACK_VERTICAL + 8)), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL + 9)), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL + 10)), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL + 11)), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 31 } }); + break; + } + PaintUtilSetVerticalTunnel(session, height + 32); + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20); + break; + case 1: + break; + } +} + +static void GigaRCTrack90DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrack90DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrack60DegUpTo90DegUp( + PaintSession& 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_GIGA_TRACK_VERTICAL + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL + 1)), + { 0, 0, height }, { { 24, 6, height }, { 2, 20, 55 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL + 2)), + { 0, 0, height }, { { 24, 6, height }, { 2, 20, 55 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL + 3)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) + { + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 36, height, session.TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetVerticalTunnel(session, height + 56); + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 1: + break; + } +} + +static void GigaRCTrack90DegDownTo60DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrack60DegUpTo90DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrack90DegUpTo60DegUp( + PaintSession& 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_GIGA_TRACK_VERTICAL + 4)), + { 0, 0, height }, { { 0, 6, height + 8 }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL + 5)), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL + 6)), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL + 7)), + { 0, 0, height }, { { 0, 6, height + 8 }, { 32, 20, 3 } }); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 48, TUNNEL_2); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 48, TUNNEL_2); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 80, 0x20); +} + +static void GigaRCTrack60DegDownTo90DegDown( + PaintSession& 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_GIGA_TRACK_VERTICAL + 6)), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL + 7)), + { 0, 0, height }, { { 0, 6, height + 8 }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL + 4)), + { 0, 0, height }, { { 0, 6, height + 8 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL + 5)), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 48, TUNNEL_2); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 80, 0x20); + break; + case 1: + break; + } +} + +static void GigaRCTrackLeftQuarterTurn190DegUp( + PaintSession& 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_GIGA_TRACK_VERTICAL_TWIST + 0)), { 0, 0, height }, + { { 4, 6, height + 8 }, { 2, 20, 96 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL_TWIST + 1)), { 0, 0, height }, + { { 4, 6, height + 8 }, { 2, 20, 96 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL_TWIST + 2)), { 0, 0, height }, + { { 24, 6, height + 8 }, { 2, 20, 96 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL_TWIST + 3)), { 0, 0, height }, + { { 24, 6, height + 8 }, { 2, 20, 96 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL_TWIST + 4)), { 0, 0, height }, + { { 4, 6, height + 8 }, { 2, 20, 96 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL_TWIST + 5)), { 0, 0, height }, + { { 24, 6, height + 8 }, { 2, 20, 96 } }); + break; + } + PaintUtilSetVerticalTunnel(session, height + 96); + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96, 0x20); + break; + case 1: + break; + } +} + +static void GigaRCTrackRightQuarterTurn190DegUp( + PaintSession& 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_GIGA_TRACK_VERTICAL_TWIST + 6)), { 0, 0, height }, + { { 4, 6, height + 8 }, { 2, 20, 96 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL_TWIST + 7)), { 0, 0, height }, + { { 24, 6, height + 8 }, { 2, 20, 96 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL_TWIST + 8)), { 0, 0, height }, + { { 24, 6, height + 8 }, { 2, 20, 96 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL_TWIST + 9)), { 0, 0, height }, + { { 4, 6, height + 8 }, { 2, 20, 96 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL_TWIST + 10)), { 0, 0, height }, + { { 24, 6, height + 8 }, { 2, 20, 96 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_VERTICAL_TWIST + 11)), { 0, 0, height }, + { { 4, 6, height + 8 }, { 2, 20, 96 } }); + break; + } + PaintUtilSetVerticalTunnel(session, height + 96); + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 96, 0x20); + break; + case 1: + break; + } +} + +static void GigaRCTrackLeftQuarterTurn190DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackRightQuarterTurn190DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement); +} + +static void GigaRCTrackRightQuarterTurn190DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackLeftQuarterTurn190DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); +} + +static void GigaRCTrackLeftBarrelRollUpToDown( + PaintSession& 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_GIGA_TRACK_BARREL_ROLL + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 1)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 4, height - 2, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 6)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 7)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 4, height - 2, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 12)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 13)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 0, height + 1, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 18)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 19)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 0, height + 1, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 2)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 3)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 8)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 9)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 14)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 15)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 20)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 21)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 4)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 5)), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 10)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 11)), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 17)), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 22)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 23)), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height, TUNNEL_INVERTED_3); + break; + case 2: + PaintUtilPushTunnelLeft(session, height, TUNNEL_INVERTED_3); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + } +} + +static void GigaRCTrackRightBarrelRollUpToDown( + PaintSession& 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_GIGA_TRACK_BARREL_ROLL + 24)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 25)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 0, height + 1, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 30)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 31)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 0, height + 1, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 36)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 37)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 4, height - 2, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 42)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 43)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 4, height - 2, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 26)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 27)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 32)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 33)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 38)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 39)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 44)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 45)), + { 0, 0, height }, { { 0, 6, height + 28 }, { 32, 20, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 28)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 29)), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 34)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 35)), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 40)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 41)), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 46)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_BARREL_ROLL + 47)), + { 0, 0, height }, { { 0, 6, height + 44 }, { 32, 20, 0 } }); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height, TUNNEL_INVERTED_3); + break; + case 2: + PaintUtilPushTunnelLeft(session, height, TUNNEL_INVERTED_3); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + } +} + +static void GigaRCTrackLeftBarrelRollDownToUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackLeftBarrelRollUpToDown(session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackRightBarrelRollDownToUp( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackRightBarrelRollUpToDown(session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackHalfLoopUp( + PaintSession& 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_GIGA_TRACK_HALF_LOOP + 0)), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 4)), + { 0, 6, height }, { 32, 20, 11 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 8)), + { 0, 6, height }, { 32, 20, 9 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 12)), + { 0, 6, height }, { 32, 20, 7 }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 1)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 20, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 5)), + { 0, 14, height }, { { 28, 6, height }, { 3, 20, 63 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 15, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 9)), + { 0, 6, height }, { { 28, 6, height }, { 3, 20, 63 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 16, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 13)), + { 0, 6, height }, { 32, 20, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 16, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight(session, SEGMENTS_ALL, 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 2)), + { 16, 0, height }, { 2, 16, 119 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 6)), + { 12, 0, height }, { { 12, 0, height }, { 3, 16, 119 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 10)), + { 10, 16, height }, { 4, 12, 119 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 14)), + { 16, 16, height }, { { 15, 6, height }, { 2, 16, 119 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 168, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 3)), + { 0, 0, height + 32 }, { 32, 16, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 7)), + { 0, 0, height + 32 }, { 32, 16, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 11)), + { 0, 16, height + 32 }, { 32, 12, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_HALF_LOOP + 15)), + { 0, 16, height + 32 }, { 32, 12, 3 }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + } +} + +static void GigaRCTrackHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackHalfLoopUp(session, ride, 3 - trackSequence, direction, height, trackElement); +} + +static void GigaRCTrackLeftVerticalLoop( + PaintSession& 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_GIGA_TRACK_VERTICAL_LOOP + 0), + { 0, 6, height }, { 32, 20, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 4), + { 0, 6, height }, { 32, 20, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 8), + { 0, 6, height }, { 32, 20, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 12), + { 0, 6, height }, { 32, 20, 7 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 1), + { 0, 0, height }, { 32, 26, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 26, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 5), + { 0, 14, height }, { 32, 2, 63 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height + 10, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 9), + { 0, 6, height }, { 32, 26, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 13), + { 0, 6, height }, { 32, 26, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 2), + { 16, 0, height }, { { 16, 0, height }, { 3, 16, 119 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 6), + { 12, 0, height }, { { 12, 0, height }, { 3, 16, 119 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 10), + { 10, 16, height }, { { 10, 16, height }, { 4, 16, 119 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 14), + { 16, 16, height }, { { 16, 16, height }, { 2, 16, 119 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 168, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 3), + { 0, 0, height + 32 }, { 32, 16, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 7), + { 0, 0, height + 32 }, { 32, 16, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 11), + { 0, 16, height + 32 }, { 32, 16, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 15), + { 0, 16, height + 32 }, { 32, 16, 3 }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 4: + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 5: + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 11), + { 0, 16, height + 32 }, { 32, 16, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 15), + { 0, 16, height + 32 }, { 32, 16, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 3), + { 0, 0, height + 32 }, { 32, 16, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 7), + { 0, 0, height + 32 }, { 32, 16, 3 }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 10), + { 10, 16, height }, { { 10, 16, height }, { 4, 16, 119 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 14), + { 16, 16, height }, { { 16, 16, height }, { 2, 16, 119 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 2), + { 16, 0, height }, { { 16, 0, height }, { 3, 16, 119 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 6), + { 12, 0, height }, { { 12, 0, height }, { 3, 16, 119 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 168, 0x20); + break; + case 8: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 9), + { 0, 6, height }, { 32, 26, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 13), + { 0, 6, height }, { 32, 26, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 1), + { 0, 0, height }, { 32, 26, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 26, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 5), + { 0, 14, height }, { 32, 2, 63 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height + 10, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 9: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 8), + { 0, 6, height }, { 32, 20, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 12), + { 0, 6, height }, { 32, 20, 7 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 0), + { 0, 6, height }, { 32, 20, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 4), + { 0, 6, height }, { 32, 20, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height - 8, TUNNEL_1); + break; + case 2: + PaintUtilPushTunnelLeft(session, height - 8, TUNNEL_1); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + } +} + +static void GigaRCTrackRightVerticalLoop( + PaintSession& 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_GIGA_TRACK_VERTICAL_LOOP + 16), + { 0, 6, height }, { 32, 20, 7 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 20), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 24), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 28), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 17), + { 0, 6, height }, { 32, 26, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 21), + { 0, 6, height }, { 32, 26, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 25), + { 0, 14, height }, { 32, 2, 63 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height + 10, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 29), + { 0, 0, height }, { 32, 26, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 26, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 18), + { 16, 16, height }, { { 16, 16, height }, { 2, 16, 119 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 22), + { 10, 16, height }, { { 10, 16, height }, { 4, 16, 119 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 26), + { 12, 0, height }, { { 12, 0, height }, { 3, 16, 119 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 30), + { 16, 0, height }, { { 16, 0, height }, { 2, 16, 119 } }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 168, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 19), + { 0, 16, height + 32 }, { 32, 16, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 23), + { 0, 16, height + 32 }, { 32, 16, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 27), + { 0, 0, height + 32 }, { 32, 16, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 31), + { 0, 0, height + 32 }, { 32, 16, 3 }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 4: + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 5: + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 27), + { 0, 0, height + 32 }, { 32, 16, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 31), + { 0, 0, height + 32 }, { 32, 16, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 19), + { 0, 16, height + 32 }, { 32, 16, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 23), + { 0, 16, height + 32 }, { 32, 16, 3 }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 26), + { 12, 0, height }, { { 12, 0, height }, { 3, 16, 119 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 30), + { 16, 0, height }, { { 16, 0, height }, { 2, 16, 119 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 18), + { 16, 16, height }, { { 16, 16, height }, { 2, 16, 119 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 22), + { 10, 16, height }, { { 10, 16, height }, { 4, 16, 119 } }); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 168, 0x20); + break; + case 8: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 25), + { 0, 14, height }, { 32, 2, 63 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height + 10, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 29), + { 0, 0, height }, { 32, 26, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 26, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 17), + { 0, 6, height }, { 32, 26, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 21), + { 0, 6, height }, { 32, 26, 3 }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 9: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 24), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 28), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 16), + { 0, 6, height }, { 32, 20, 7 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex(SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 20), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height - 8, TUNNEL_1); + break; + case 2: + PaintUtilPushTunnelLeft(session, height - 8, TUNNEL_1); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + } + + TrackPaintUtilRightVerticalLoopSegments(session, direction, trackSequence); +} + +static void GigaRCTrackLeftCorkscrewUp( + PaintSession& 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_GIGA_TRACK_CORKSCREW + 0)), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height - 3, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 3)), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 6)), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 9)), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height + 3, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 1)), + { 0, 0, height }, { { 6, 6, height + 10 }, { 20, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 4)), + { 0, 0, height }, { { 6, 6, height + 10 }, { 20, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 7)), + { 0, 0, height }, { { 6, 6, height + 10 }, { 20, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 10)), + { 0, 0, height }, { { 6, 6, height + 10 }, { 20, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight(session, SEGMENTS_ALL, 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 2)), + { 0, 0, height }, { { 6, 0, height + 24 }, { 20, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 5)), + { 0, 0, height }, { { 6, 0, height + 24 }, { 20, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 8)), + { 0, 0, height }, { { 6, 0, height + 24 }, { 20, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 11)), + { 0, 0, height }, { { 6, 0, height + 24 }, { 20, 32, 3 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height + 40, session.TrackColours[SCHEME_SUPPORTS]); + + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height + 8, TUNNEL_0); + break; + case 3: + PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_0); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + } +} + +static void GigaRCTrackRightCorkscrewUp( + PaintSession& 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_GIGA_TRACK_CORKSCREW + 12)), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height + 3, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 15)), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 18)), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 21)), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height - 3, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 13)), + { 0, 0, height }, { { 6, 6, height + 10 }, { 20, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 16)), + { 0, 0, height }, { { 6, 6, height + 10 }, { 20, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 19)), + { 0, 0, height }, { { 6, 6, height + 10 }, { 20, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 22)), + { 0, 0, height }, { { 6, 6, height + 10 }, { 20, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight(session, SEGMENTS_ALL, 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 14)), + { 0, 0, height }, { { 6, 0, height + 24 }, { 20, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 17)), + { 0, 0, height }, { { 6, 0, height + 24 }, { 20, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 20)), + { 0, 0, height }, { { 6, 0, height + 24 }, { 20, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_CORKSCREW + 23)), + { 0, 0, height }, { { 6, 0, height + 24 }, { 20, 32, 3 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height + 40, session.TrackColours[SCHEME_SUPPORTS]); + + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height + 8, TUNNEL_0); + break; + case 1: + PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_0); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + } +} + +static void GigaRCTrackLeftCorkscrewDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackRightCorkscrewUp(session, ride, 2 - trackSequence, (direction + 1) & 3, height, trackElement); +} +static void GigaRCTrackRightCorkscrewDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackLeftCorkscrewUp(session, ride, 2 - trackSequence, (direction - 1) & 3, height, trackElement); +} + +static void GigaRCTrackLeftLargeCorkscrewUp( + PaintSession& 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_GIGA_TRACK_LARGE_CORKSCREW + 0)), { 0, 0, height }, + { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 5)), { 0, 0, height }, + { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 10)), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 15)), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + } + + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 1)), { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 6, 21, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 6)), { 0, 0, height }, + { { 0, 29, height }, { 26, 1, 32 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 8, 19, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 11)), + { 0, 0, height }, { { 0, 6, height }, { 20, 20, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 7, 19, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 5, 16, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 2)), { 0, 0, height }, + { { 0, 31, height }, { 48, 1, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 7)), { 0, 0, height }, + { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 12)), + { 0, 0, height }, { { 2, 2, height + 48 }, { 28, 28, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 17)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 3: + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 4: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(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_GIGA_TRACK_LARGE_CORKSCREW + 3)), { 0, 0, height }, + { { 2, 2, height + 50 }, { 28, 28, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 5, 0, height + 65, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 8)), { 0, 0, height }, + { { 2, 2, height + 50 }, { 28, 28, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 6, 0, height + 65, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 13)), + { 0, 0, height }, { { 2, 2, height + 50 }, { 24, 28, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 8, 0, height + 65, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 18)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 7, 0, height + 65, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 4)), { 0, 0, height }, + { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 9)), { 0, 0, height }, + { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 14)), + { 0, 0, height }, { { 2, 2, height + 40 }, { 26, 28, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 19)), + { 0, 0, height }, { { 2, 2, height + 40 }, { 26, 28, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0 | SEGMENT_C8 | SEGMENT_C4 | SEGMENT_D4, direction), + 0xFFFF, 0); + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height + 8, TUNNEL_0); + break; + case 3: + PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_0); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + } +} + +static void GigaRCTrackRightLargeCorkscrewUp( + PaintSession& 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_GIGA_TRACK_LARGE_CORKSCREW + 20)), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 25)), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 30)), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 35)), + { 0, 0, height }, { { 0, 6, height + 4 }, { 32, 20, 3 } }); + break; + } + + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_D4 | SEGMENT_C4 | SEGMENT_BC | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 21)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 6, 16, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 26)), + { 0, 0, height }, { { 0, 6, height }, { 20, 20, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 8, 19, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 31)), + { 0, 0, height }, { { 0, 29, height }, { 26, 1, 32 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 7, 19, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 36)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 5, 21, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D4 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 22)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 27)), + { 0, 0, height }, { { 2, 2, height + 48 }, { 28, 28, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 32)), + { 0, 0, height }, { { 2, 2, height + 48 }, { 28, 28, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 37)), + { 0, 0, height }, { { 0, 31, height }, { 48, 1, 64 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D4 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 3: + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 4: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(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_GIGA_TRACK_LARGE_CORKSCREW + 23)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 8, 0, height + 65, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 28)), + { 0, 0, height }, { { 2, 2, height + 50 }, { 24, 28, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 7, 0, height + 65, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 33)), + { 0, 0, height }, { { 2, 2, height + 50 }, { 28, 28, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 5, 0, height + 65, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 38)), + { 0, 0, height }, { { 2, 2, height + 50 }, { 28, 28, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 6, 0, height + 65, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 24)), + { 0, 0, height }, { { 2, 2, height + 40 }, { 26, 28, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 29)), + { 0, 0, height }, { { 2, 2, height + 40 }, { 26, 28, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 34)), + { 0, 0, height }, { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 39)), + { 0, 0, height }, { { 2, 2, height + 40 }, { 28, 28, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0 | SEGMENT_C8 | SEGMENT_C4 | SEGMENT_D4, direction), + 0xFFFF, 0); + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height + 8, TUNNEL_0); + break; + case 1: + PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_0); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + } +} + +static void GigaRCTrackLeftLargeCorkscrewDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackRightLargeCorkscrewUp(session, ride, 5 - trackSequence, (direction + 1) & 3, height, trackElement); +} + +static void GigaRCTrackRightLargeCorkscrewDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackLeftLargeCorkscrewUp(session, ride, 5 - trackSequence, (direction - 1) & 3, height, trackElement); +} + +static void GigaRCTrackLeftMediumHalfLoopUp( + PaintSession& 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_GIGA_TRACK_MEDIUM_HALF_LOOP + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 5)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 10)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 15)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 1)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 6)), + { 0, 0, height }, { { 0, 31, height }, { 0, 32, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 11)), + { 0, 0, height }, { { 0, 32, height }, { 40, 0, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C8 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_B4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 2)), + { 0, 0, height }, { { 0, 0, height + 2 }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 5, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 7)), + { 0, 0, height }, { { 29, 0, height }, { 1, 32, 96 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 6, 16, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 12)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 96 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 8, 18, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 17)), + { 0, 0, height }, { { 0, 0, height }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 7, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C8 | SEGMENT_C4 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 3)), + { 0, 0, height }, { { 2, 0, height }, { 1, 32, 160 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 8)), + { 0, 0, height }, { { 30, 24, height }, { 0, 8, 160 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 13)), + { 0, 0, height }, { { 29, 0, height }, { 1, 32, 160 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 18)), + { 0, 0, height }, { { 0, 0, height }, { 1, 32, 160 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_D4 | SEGMENT_C4 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 4)), + { 0, 0, height }, { { 0, 2, height + 48 }, { 32, 32, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 9)), + { 0, 0, height }, { { 0, 2, height + 48 }, { 32, 32, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 14)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 19)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_CC | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC, direction), + 0xFFFF, 0); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 16, TUNNEL_0); + } + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + } +} + +static void GigaRCTrackRightMediumHalfLoopUp( + PaintSession& 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_GIGA_TRACK_MEDIUM_HALF_LOOP + 20)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 25)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 30)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 35)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 21)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 26)), + { 0, 0, height }, { { 0, 32, height }, { 40, 0, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 31)), + { 0, 0, height }, { { 0, 31, height }, { 0, 32, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 36)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_CC | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 22)), + { 0, 0, height }, { { 0, 0, height }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 8, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 27)), + { 0, 0, height }, { { 30, 16, height }, { 0, 32, 96 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 7, 18, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 32)), + { 0, 0, height }, { { 29, 0, height }, { 0, 32, 96 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 5, 16, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 37)), + { 0, 0, height }, { { 0, 0, height + 2 }, { 32, 32, 0 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 6, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_D4 | SEGMENT_C4 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 23)), + { 0, 0, height }, { { 0, 0, height }, { 1, 32, 160 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 28)), + { 0, 0, height }, { { 29, 16, height }, { 0, 16, 160 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 33)), + { 0, 0, height }, { { 30, 0, height }, { 0, 32, 160 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 38)), + { 0, 0, height }, { { 2, 0, height }, { 1, 32, 160 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 144, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 24)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 29)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 34)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 39)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C8 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_B4, direction), + 0xFFFF, 0); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 16, TUNNEL_0); + } + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + } +} + +static void GigaRCTrackLeftMediumHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackRightMediumHalfLoopUp(session, ride, 4 - trackSequence, direction, height, trackElement); +} + +static void GigaRCTrackRightMediumHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackLeftMediumHalfLoopUp(session, ride, 4 - trackSequence, direction, height, trackElement); +} + +static void GigaRCTrackLeftZeroGRollUp( + PaintSession& 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_GIGA_TRACK_ZERO_G_ROLL + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 1)), + { 0, 0, height }, { { 0, 6, height + 32 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 4)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 5)), + { 0, 0, height }, { { 0, 31, height }, { 40, 1, 32 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 3, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 8)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 12)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 11, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 2)), + { 0, 0, height }, { { 0, 6, height + 32 }, { 32, 20, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 6)), + { 0, 0, height }, { { 0, 6, height + 32 }, { 40, 20, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 9)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 13)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C8 | SEGMENT_B4 | SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 3)), + { 0, 0, height }, { { 0, 6, height + 32 }, { 40, 20, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 7)), + { 0, 0, height }, { { 0, 6, height + 32 }, { 32, 20, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 10)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 11)), + { 0, 0, height }, { { 0, 6, height + 36 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 14)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 15)), + { 0, 0, height }, { { 0, 6, height + 36 }, { 32, 20, 0 } }); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, TUNNEL_0); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_0); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C8 | SEGMENT_B4 | SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), + 0xFFFF, 0); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height + 42, session.TrackColours[SCHEME_SUPPORTS]); + PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20); + break; + } +} + +static void GigaRCTrackRightZeroGRollUp( + PaintSession& 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_GIGA_TRACK_ZERO_G_ROLL + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 11, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 20)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 24)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 25)), + { 0, 0, height }, { { 0, 31, height }, { 40, 1, 32 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 3, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 28)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 29)), + { 0, 0, height }, { { 0, 6, height + 32 }, { 32, 20, 1 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 17)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 21)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 26)), + { 0, 0, height }, { { 0, 31, height }, { 44, 1, 32 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 30)), + { 0, 0, height }, { { 0, 6, height + 32 }, { 32, 20, 1 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC | SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 18)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 19)), + { 0, 0, height }, { { 0, 6, height + 36 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 22)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 32 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 23)), + { 0, 0, height }, { { 0, 6, height + 36 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 27)), + { 0, 0, height }, { { 0, 6, height + 32 }, { 32, 20, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 31)), + { 0, 0, height }, { { 0, 6, height + 32 }, { 40, 20, 1 } }); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, TUNNEL_0); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_0); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC | SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), + 0xFFFF, 0); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height + 42, session.TrackColours[SCHEME_SUPPORTS]); + PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20); + break; + } +} + +static void GigaRCTrackLeftZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackLeftZeroGRollUp(session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackRightZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackRightZeroGRollUp(session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackLeftLargeZeroGRollUp( + PaintSession& 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_GIGA_TRACK_LARGE_ZERO_G_ROLL + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 5)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 9)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 10)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 15)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 21, height, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 1)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 2)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 6)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 11)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 3)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 7)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 48 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 12)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 48 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 17)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 18)), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C8 | SEGMENT_B4 | SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(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_GIGA_TRACK_LARGE_ZERO_G_ROLL + 4)), + { 0, 0, height }, { { 0, 26, height }, { 32, 0, 32 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 7, 0, height + 37, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 8)), + { 0, 0, height }, { { 0, 26, height }, { 26, 0, 20 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 5, 0, height + 37, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 13)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 14)), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 6, 0, height + 37, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 19)), + { 0, 0, height }, { { 0, 18, height }, { 32, 1, 30 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 8, 0, height + 37, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, TUNNEL_0); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_0); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20); + break; + } +} + +static void GigaRCTrackRightLargeZeroGRollUp( + PaintSession& 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_GIGA_TRACK_LARGE_ZERO_G_ROLL + 20)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 25)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 26)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 31)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 35)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 21, height, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 21)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 27)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 64 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 32)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 36)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 37)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 22)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 23)), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 28)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 48 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 33)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 48 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 38)), + { 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } }); + break; + } + + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(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_GIGA_TRACK_LARGE_ZERO_G_ROLL + 24)), + { 0, 0, height }, { { 0, 18, height }, { 32, 1, 30 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 7, 0, height + 37, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 29)), + { 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 30)), + { 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 5, 0, height + 37, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 34)), + { 0, 0, height }, { { 0, 26, height }, { 32, 0, 30 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 6, 0, height + 37, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 39)), + { 0, 0, height }, { { 0, 26, height }, { 40, 0, 32 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 8, 0, height + 37, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + switch (direction) + { + case 1: + PaintUtilPushTunnelRight(session, height + 8, TUNNEL_0); + break; + case 2: + PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_0); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20); + break; + } +} + +static void GigaRCTrackLeftLargeZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackLeftLargeZeroGRollUp(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackRightLargeZeroGRollDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackRightLargeZeroGRollUp(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrack90DegToInvertedFlatQuarterLoopUp( + PaintSession& 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_GIGA_TRACK_QUARTER_LOOP + 0)), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_QUARTER_LOOP + 3)), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_QUARTER_LOOP + 6)), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_QUARTER_LOOP + 9)), + { 0, 0, height }, { { 4, 6, height + 8 }, { 2, 20, 31 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_QUARTER_LOOP + 1)), + { 0, 0, height }, { { -8, 6, height }, { 2, 20, 31 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_QUARTER_LOOP + 4)), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 63 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_QUARTER_LOOP + 7)), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 63 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_QUARTER_LOOP + 10)), + { 0, 0, height }, { { -8, 6, height }, { 2, 20, 31 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_QUARTER_LOOP + 2)), + { 0, 0, height }, { { 0, 6, height + 24 }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_QUARTER_LOOP + 5)), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_QUARTER_LOOP + 8)), + { 0, 0, height }, { { 24, 6, height + 8 }, { 2, 20, 31 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_QUARTER_LOOP + 11)), + { 0, 0, height }, { { 0, 6, height + 24 }, { 32, 20, 3 } }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_0); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + } +} + +static void GigaRCTrackInvertedFlatTo90DegQuarterLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrack90DegToInvertedFlatQuarterLoopUp(session, ride, 2 - trackSequence, direction, height, trackElement); +} + +static void GigaRCTrackLeftBankToLeftQuarterTurn3Tile25DegUp( + PaintSession& 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_GIGA_TRACK_TURN_BANK_TRANSITION + 0)), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 2)), + { 0, 6, height }, { 32, 20, 3 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 3)), + { 0, 6, height }, { { 0, 27, height }, { 32, 1, 26 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 5)), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 7)), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 2: + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 1)), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 4)), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 6)), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 8)), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 4, height - 6, session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height, TUNNEL_2); + break; + case 3: + PaintUtilPushTunnelLeft(session, height, TUNNEL_2); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + } +} + +static void GigaRCTrackRightBankToRightQuarterTurn3Tile25DegUp( + PaintSession& 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_GIGA_TRACK_TURN_BANK_TRANSITION + 9)), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 11)), + { 0, 6, height }, { 32, 20, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 13)), + { 0, 6, height }, { 32, 20, 3 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 14)), + { 0, 6, height }, { { 0, 27, height }, { 32, 1, 26 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 16)), + { 0, 6, height }, { 32, 20, 3 }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 2: + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 10)), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 12)), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 15)), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 17)), + { 6, 0, height }, { { 0, 6, height - 6 }, { 20, 32, 3 } }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 4, height - 6, session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height, TUNNEL_2); + break; + case 1: + PaintUtilPushTunnelLeft(session, height, TUNNEL_2); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + } +} + +static void GigaRCTrackLeftQuarterTurn3Tile25DegDownToLeftBank( + PaintSession& 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_GIGA_TRACK_TURN_BANK_TRANSITION + 12)), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 15)), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 17)), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 10)), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 4, height - 6, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_2); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 2: + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 11)), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 13)), + { 6, 0, height }, { 20, 32, 3 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 14)), + { 6, 0, height }, { { 27, 0, height }, { 1, 32, 26 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 16)), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 9)), + { 6, 0, height }, { 20, 32, 3 }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height, TUNNEL_0); + break; + case 3: + PaintUtilPushTunnelLeft(session, height, TUNNEL_0); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + } +} + +static void GigaRCTrackRightQuarterTurn3Tile25DegDownToRightBank( + PaintSession& 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_GIGA_TRACK_TURN_BANK_TRANSITION + 8)), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 1)), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 4)), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 6)), + { 0, 6, height }, { { 0, 6, height - 6 }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 4, height - 6, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_2); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 1: + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 2: + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 7)), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 0)), + { 6, 0, height }, { 20, 32, 3 }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 2)), + { 6, 0, height }, { 20, 32, 3 }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 3)), + { 6, 0, height }, { { 27, 0, height }, { 1, 32, 26 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 5)), + { 6, 0, height }, { 20, 32, 3 }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height, TUNNEL_0); + break; + case 1: + PaintUtilPushTunnelLeft(session, height, TUNNEL_0); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + } +} + +static void GigaRCTrackLeftLargeHalfLoopUp( + PaintSession& 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_GIGA_TRACK_LARGE_HALF_LOOP + 0)), { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 7)), { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 14)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 21)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 1)), { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 12, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 8)), { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 9 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 15)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 22)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 2)), { 0, 0, height }, + { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 9)), { 0, 0, height }, + { { 0, 0, height + 70 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 16)), + { 0, 0, height }, { { 0, 16, height + 70 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 23)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 3)), { 0, 0, height }, + { { 0, 0, height }, { 32, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 5, 14, height + 8, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 10)), + { 0, 0, height }, { { 0, 0, height + 200 }, { 32, 16, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 6, 14, height + 8, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 17)), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 8, 0, height + 21, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 24)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 7, 22, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 224, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 4)), { 0, 0, height }, + { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 11)), + { 0, 0, height }, { { 0, 16, height + 110 }, { 16, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 18)), + { 0, 0, height }, { { 0, 0, height + 100 }, { 16, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 25)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 128, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 5)), { 0, 0, height }, + { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 12)), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 19)), + { 0, 0, height }, { { 0, 0, height + 200 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 26)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 224, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 6)), { 0, 0, height }, + { { 0, 16, height + 32 }, { 32, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 13)), + { 0, 0, height }, { { 0, 16, height + 32 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 20)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 27)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 16, 0 } }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20); + break; + } +} + +static void GigaRCTrackRightLargeHalfLoopUp( + PaintSession& 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_GIGA_TRACK_LARGE_HALF_LOOP + 28)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 35)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 42)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 49)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 29)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 36)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 43)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 9 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 50)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 12, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 30)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 37)), + { 0, 0, height }, { { 0, 16, height + 70 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 44)), + { 0, 0, height }, { { 0, 0, height + 70 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 51)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 31)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 8, 22, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 38)), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 7, 0, height + 21, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 45)), + { 0, 0, height }, { { 0, 0, height + 200 }, { 32, 16, 0 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 5, 14, height + 8, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 52)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 6, 14, height + 8, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 224, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 32)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 39)), + { 0, 0, height }, { { 0, 0, height + 100 }, { 16, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 46)), + { 0, 0, height }, { { 0, 16, height + 110 }, { 16, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 53)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 128, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 33)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 40)), + { 0, 0, height }, { { 0, 0, height + 200 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 47)), + { 0, 0, height }, { { 0, 16, height + 200 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 54)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 224, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 34)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 41)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 48)), + { 0, 0, height }, { { 0, 16, height + 32 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 55)), + { 0, 0, height }, { { 0, 16, height + 32 }, { 32, 16, 0 } }); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20); + break; + } +} + +static void GigaRCTrackLeftLargeHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackRightLargeHalfLoopUp(session, ride, 6 - trackSequence, direction, height, trackElement); +} + +static void GigaRCTrackRightLargeHalfLoopDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackLeftLargeHalfLoopUp(session, ride, 6 - trackSequence, direction, height, trackElement); +} + +static void GigaRCTrackFlatTo60DegUp( + PaintSession& 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_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 0)), + { 0, 0, height }, { { 0, 2, height }, { 32, 27, 4 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 2)), + { 0, 0, height }, { { 29, 4, height + 2 }, { 1, 24, 43 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 1)), + { 0, 0, height }, { { 0, 4, height }, { 32, 2, 43 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 4)), + { 0, 0, height }, { { 29, 4, height + 2 }, { 1, 24, 43 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 3)), + { 0, 0, height }, { { 0, 4, height }, { 32, 2, 43 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 5)), + { 0, 0, height }, { { 0, 2, height }, { 32, 27, 4 } }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 1, height, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 24, TUNNEL_2); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); +} + +static void GigaRCTrack60DegUpToFlat( + PaintSession& 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_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 6)), + { 0, 0, height }, { { 0, 2, height }, { 32, 27, 4 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 7)), + { 0, 0, height }, { { 0, 4, height }, { 32, 2, 43 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 8)), + { 0, 0, height }, { { 29, 4, height + 2 }, { 1, 24, 43 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 10)), + { 0, 0, height }, { { 29, 4, height + 2 }, { 1, 24, 43 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 9)), + { 0, 0, height }, { { 0, 4, height }, { 32, 2, 43 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 11)), + { 0, 0, height }, { { 0, 2, height }, { 32, 27, 4 } }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 24, TUNNEL_0); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); +} + +static void GigaRCTrackFlatTo60DegDown( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrack60DegUpToFlat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrack60DegDownToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackFlatTo60DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackDiagFlatTo60DegUp( + PaintSession& 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_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 15)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 12)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 14)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 13)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + } +} + +static void GigaRCTrackDiag60DegUpToFlat( + PaintSession& 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_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 19)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 16)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 18)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 18, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 17)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 18, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 18, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 18, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + } +} + +static void GigaRCTrackDiagFlatTo60DegDown( + PaintSession& 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_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 17)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 18)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 16)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 19)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 14, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + } +} + +static void GigaRCTrackDiag60DegDownToFlat( + PaintSession& 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_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 13)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 14)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 12)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 2, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 15)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 4 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 2, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 2, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 2, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20); + break; + } +} + +static void GigaRCTrackLeftEighthToDiagUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 4)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 8)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 12)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 1)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 5)), + { 0, 0, height }, { { 0, 0, height }, { 34, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 9)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 13)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 2)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 6)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 10)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 14)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 3)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 2, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 7)), + { 0, 0, height }, { { 0, 16, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 3, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 11)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 2, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 15)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 1, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + } +} + +static void GigaRCTrackRightEighthToDiagUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 20)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 24)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 28)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 17)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 21)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 25)), + { 0, 0, height }, { { 0, 0, height }, { 34, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 29)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 18)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 22)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 26)), + { 0, 0, height }, { { 4, 4, height }, { 28, 28, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 30)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 19)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 1, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 23)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 2, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 27)), + { 0, 0, height }, { { 0, 16, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 3, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 31)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 2, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + } +} + +static void GigaRCTrackLeftEighthToOrthogonalUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE + 32)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 36)), + { 0, 0, height }, { { 16, 16, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 40)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 3, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 44)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 33)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 37)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 41)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 45)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 34)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 38)), + { 0, 0, height }, { { 0, 0, height }, { 34, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 42)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 46)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 35)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 39)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 43)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 10 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 47)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + + if (direction == 1 || direction == 2) + { + PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_2); + } + + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + } +} + +static void GigaRCTrackRightEighthToOrthogonalUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE + 48)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 3, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 52)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 56)), + { 0, 0, height }, { { 16, 0, height }, { 16, 18, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 60)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 49)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 53)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 57)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 61)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_BC | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 50)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 54)), + { 0, 0, height }, { { 0, 0, height }, { 16, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 58)), + { 0, 0, height }, { { 0, 0, height }, { 16, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 62)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 51)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 10 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 55)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 59)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 63)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + break; + } + MetalASupportsPaintSetup(session, MetalSupportType::Tubes, 4, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 1) + { + PaintUtilPushTunnelRotated(session, direction + 1, height + 8, TUNNEL_2); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + } +} + +static void GigaRCTrackLeftEighthToDiagDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + uint8_t map[5] = { 4, 3, 1, 2, 0 }; + trackSequence = map[trackSequence]; + GigaRCTrackRightEighthToOrthogonalUp25(session, ride, trackSequence, (direction + 1) & 3, height, trackElement); +} + +static void GigaRCTrackRightEighthToDiagDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + uint8_t map[5] = { 4, 3, 1, 2, 0 }; + trackSequence = map[trackSequence]; + GigaRCTrackLeftEighthToOrthogonalUp25(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackLeftEighthToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + GigaRCTrackRightEighthToDiagUp25(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackRightEighthToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + GigaRCTrackLeftEighthToDiagUp25(session, ride, trackSequence, (direction + 3) & 3, height, trackElement); +} + +static void GigaRCTrackDiagUp25ToLeftBankedUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 4)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 0)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 1)), + { -16, -16, height }, { { -16, -16, height + 48 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 3)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 2)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 10, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 10, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 10, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + } +} + +static void GigaRCTrackDiagUp25ToRightBankedUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 9)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 5)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 7)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 8)), + { -16, -16, height }, { { -16, -16, height + 48 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 10, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 6)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 10, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 10, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + } +} + +static void GigaRCTrackDiagLeftBankedUp25ToUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 14)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 10)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 11)), + { -16, -16, height }, { { -16, -16, height + 48 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 13)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 12)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + } +} + +static void GigaRCTrackDiagRightBankedUp25ToUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 19)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 15)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 17)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 18)), + { -16, -16, height }, { { -16, -16, height + 48 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 16)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + } +} + +static void GigaRCTrackDiagDown25ToLeftBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackDiagRightBankedUp25ToUp25(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackDiagDown25ToRightBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackDiagLeftBankedUp25ToUp25(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackDiagLeftBankedDown25ToDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackDiagUp25ToRightBankedUp25(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackDiagRightBankedDown25ToDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackDiagUp25ToLeftBankedUp25(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackDiagLeftBankedFlatToLeftBankedUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 23)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 20)), + { -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 22)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 21)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + } +} + +static void GigaRCTrackDiagRightBankedFlatToRightBankedUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 27)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 24)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 26)), + { -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 25)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + } +} + +static void GigaRCTrackDiagLeftBankedUp25ToLeftBankedFlat( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 31)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 28)), + { -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 30)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 29)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + } +} + +static void GigaRCTrackDiagRightBankedUp25ToRightBankedFlat( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 35)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 32)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 34)), + { -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 33)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + } +} + +static void GigaRCTrackDiagLeftBankedFlatToLeftBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackDiagRightBankedUp25ToRightBankedFlat( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackDiagRightBankedFlatToRightBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackDiagLeftBankedUp25ToLeftBankedFlat(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackDiagLeftBankedDown25ToLeftBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackDiagRightBankedFlatToRightBankedUp25( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackDiagRightBankedDown25ToRightBankedFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackDiagLeftBankedFlatToLeftBankedUp25(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackDiagUp25LeftBanked( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 39)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 36)), + { -16, -16, height }, { { -16, -16, height + 48 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 38)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 37)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 11, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 11, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 11, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + } +} + +static void GigaRCTrackDiagUp25RightBanked( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 43)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 40)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 42)), + { -16, -16, height }, { { -16, -16, height + 48 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 11, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 41)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 11, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 11, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + } +} + +static void GigaRCTrackDiagDown25LeftBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackDiagUp25RightBanked(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackDiagDown25RightBanked( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackDiagUp25LeftBanked(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackDiagFlatToLeftBankedUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 48)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 44)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 45)), + { -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 47)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 46)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + } +} + +static void GigaRCTrackDiagFlatToRightBankedUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 53)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 49)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 51)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 52)), + { -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 50)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20); + break; + } +} + +static void GigaRCTrackDiagLeftBankedUp25ToFlat( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 58)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 54)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 55)), + { -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 57)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 56)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + } +} + +static void GigaRCTrackDiagRightBankedUp25ToFlat( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 63)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 59)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 61)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 62)), + { -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 60)), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + MetalBSupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); + break; + } +} + +static void GigaRCTrackDiagFlatToLeftBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackDiagRightBankedUp25ToFlat(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackDiagFlatToRightBankedDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackDiagLeftBankedUp25ToFlat(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackDiagLeftBankedDown25ToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackDiagFlatToRightBankedUp25(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackDiagRightBankedDown25ToFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + GigaRCTrackDiagFlatToLeftBankedUp25(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackLeftEighthBankToDiagUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 64)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 1, height - 4, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 68)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 72)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 76)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 12, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 65)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 69)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 73)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 77)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 66)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 70)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 40, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 74)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 78)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 67)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 71)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 75)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 79)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + } +} + +static void GigaRCTrackRightEighthBankToDiagUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 80)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 12, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 84)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 88)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 6, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 92)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 1, height - 4, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 81)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 85)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 89)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 93)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 82)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 86)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 90)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 40, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 94)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 3: + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 83)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 87)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 91)), + { 0, 0, height }, { { 0, 0, height + 48 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 4, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 95)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + } +} + +static void GigaRCTrackLeftEighthBankToOrthogonalUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 96)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 100)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 104)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 108)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 97)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 101)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 105)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 109)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 98)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 102)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 106)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 10 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 110)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 99)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 103)), + { 0, 0, height }, { { 0, 31, height }, { 32, 1, 32 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 3, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 107)), + { 0, 0, height }, { { 0, 0, height }, { 32, 20, 10 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 111)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 1 || direction == 2) + { + PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_2); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + } +} + +static void GigaRCTrackRightEighthBankToOrthogonalUp25( + PaintSession& 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_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 112)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 2, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 116)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 3, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 120)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 1, 5, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 124)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 0, 7, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 113)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 117)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 121)), + { 0, 0, height }, { { 0, 0, height + 32 }, { 32, 32, 1 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 125)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_B4 | SEGMENT_BC | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 2: + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 114)), + { 0, 0, height }, { { 0, 0, height }, { 16, 32, 10 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 118)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 32 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 122)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 32 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 126)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 3 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments(SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 115)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 10 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 119)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 32 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 3, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 123)), + { 0, 0, height }, { { 31, 0, height }, { 1, 32, 32 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 0, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session.TrackColours[SCHEME_TRACK].WithIndex((SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 127)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 3 } }); + MetalASupportsPaintSetup( + session, MetalSupportType::Tubes, 4, 9, height, session.TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 0 || direction == 1) + { + PaintUtilPushTunnelRotated(session, direction + 1, height + 8, TUNNEL_2); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20); + break; + } +} + +static void GigaRCTrackLeftEighthBankToDiagDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + uint8_t map[5] = { 4, 3, 1, 2, 0 }; + trackSequence = map[trackSequence]; + GigaRCTrackRightEighthBankToOrthogonalUp25(session, ride, trackSequence, (direction + 1) & 3, height, trackElement); +} + +static void GigaRCTrackRightEighthBankToDiagDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + uint8_t map[5] = { 4, 3, 1, 2, 0 }; + trackSequence = map[trackSequence]; + GigaRCTrackLeftEighthBankToOrthogonalUp25(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackLeftEighthBankToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + GigaRCTrackRightEighthBankToDiagUp25(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); +} + +static void GigaRCTrackRightEighthBankToOrthogonalDown25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + GigaRCTrackLeftEighthBankToDiagUp25(session, ride, trackSequence, (direction + 3) & 3, height, trackElement); +} + TRACK_PAINT_FUNCTION GetTrackPaintFunctionGigaRC(int32_t trackType) { switch (trackType) @@ -9690,11 +16843,212 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionGigaRC(int32_t trackType) return GigaRCTrackLeftBanked25DegDownToFlat; case TrackElemType::RightBankedDown25ToFlat: return GigaRCTrackRightBanked25DegDownToFlat; - case TrackElemType::Booster: return GigaRCTrackBooster; case TrackElemType::PoweredLift: return GigaRCTrackPoweredLift; + + case TrackElemType::Up90: + return GigaRCTrack90DegUp; + case TrackElemType::Down90: + return GigaRCTrack90DegDown; + case TrackElemType::Up60ToUp90: + return GigaRCTrack60DegUpTo90DegUp; + case TrackElemType::Down90ToDown60: + return GigaRCTrack90DegDownTo60DegDown; + case TrackElemType::Up90ToUp60: + return GigaRCTrack90DegUpTo60DegUp; + case TrackElemType::Down60ToDown90: + return GigaRCTrack60DegDownTo90DegDown; + case TrackElemType::LeftQuarterTurn1TileUp90: + return GigaRCTrackLeftQuarterTurn190DegUp; + case TrackElemType::RightQuarterTurn1TileUp90: + return GigaRCTrackRightQuarterTurn190DegUp; + case TrackElemType::LeftQuarterTurn1TileDown90: + return GigaRCTrackLeftQuarterTurn190DegDown; + case TrackElemType::RightQuarterTurn1TileDown90: + return GigaRCTrackRightQuarterTurn190DegDown; + case TrackElemType::LeftBarrelRollUpToDown: + return GigaRCTrackLeftBarrelRollUpToDown; + case TrackElemType::RightBarrelRollUpToDown: + return GigaRCTrackRightBarrelRollUpToDown; + case TrackElemType::LeftBarrelRollDownToUp: + return GigaRCTrackLeftBarrelRollDownToUp; + case TrackElemType::RightBarrelRollDownToUp: + return GigaRCTrackRightBarrelRollDownToUp; + case TrackElemType::HalfLoopUp: + return GigaRCTrackHalfLoopUp; + case TrackElemType::HalfLoopDown: + return GigaRCTrackHalfLoopDown; + case TrackElemType::LeftVerticalLoop: + return GigaRCTrackLeftVerticalLoop; + case TrackElemType::RightVerticalLoop: + return GigaRCTrackRightVerticalLoop; + case TrackElemType::LeftCorkscrewUp: + return GigaRCTrackLeftCorkscrewUp; + case TrackElemType::RightCorkscrewUp: + return GigaRCTrackRightCorkscrewUp; + case TrackElemType::LeftCorkscrewDown: + return GigaRCTrackLeftCorkscrewDown; + case TrackElemType::RightCorkscrewDown: + return GigaRCTrackRightCorkscrewDown; + + case TrackElemType::LeftLargeCorkscrewUp: + return GigaRCTrackLeftLargeCorkscrewUp; + case TrackElemType::RightLargeCorkscrewUp: + return GigaRCTrackRightLargeCorkscrewUp; + case TrackElemType::LeftLargeCorkscrewDown: + return GigaRCTrackLeftLargeCorkscrewDown; + case TrackElemType::RightLargeCorkscrewDown: + return GigaRCTrackRightLargeCorkscrewDown; + case TrackElemType::LeftZeroGRollUp: + return GigaRCTrackLeftZeroGRollUp; + case TrackElemType::RightZeroGRollUp: + return GigaRCTrackRightZeroGRollUp; + case TrackElemType::LeftZeroGRollDown: + return GigaRCTrackLeftZeroGRollDown; + case TrackElemType::RightZeroGRollDown: + return GigaRCTrackRightZeroGRollDown; + case TrackElemType::LeftLargeZeroGRollUp: + return GigaRCTrackLeftLargeZeroGRollUp; + case TrackElemType::RightLargeZeroGRollUp: + return GigaRCTrackRightLargeZeroGRollUp; + case TrackElemType::LeftLargeZeroGRollDown: + return GigaRCTrackLeftLargeZeroGRollDown; + case TrackElemType::RightLargeZeroGRollDown: + return GigaRCTrackRightLargeZeroGRollDown; + case TrackElemType::Up90ToInvertedFlatQuarterLoop: + return GigaRCTrack90DegToInvertedFlatQuarterLoopUp; + case TrackElemType::InvertedFlatToDown90QuarterLoop: + return GigaRCTrackInvertedFlatTo90DegQuarterLoopDown; + case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25: + return GigaRCTrackLeftBankToLeftQuarterTurn3Tile25DegUp; + case TrackElemType::RightBankToRightQuarterTurn3TilesUp25: + return GigaRCTrackRightBankToRightQuarterTurn3Tile25DegUp; + case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank: + return GigaRCTrackLeftQuarterTurn3Tile25DegDownToLeftBank; + case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank: + return GigaRCTrackRightQuarterTurn3Tile25DegDownToRightBank; + case TrackElemType::LeftMediumHalfLoopUp: + return GigaRCTrackLeftMediumHalfLoopUp; + case TrackElemType::RightMediumHalfLoopUp: + return GigaRCTrackRightMediumHalfLoopUp; + case TrackElemType::LeftMediumHalfLoopDown: + return GigaRCTrackLeftMediumHalfLoopDown; + case TrackElemType::RightMediumHalfLoopDown: + return GigaRCTrackRightMediumHalfLoopDown; + case TrackElemType::LeftLargeHalfLoopUp: + return GigaRCTrackLeftLargeHalfLoopUp; + case TrackElemType::RightLargeHalfLoopUp: + return GigaRCTrackRightLargeHalfLoopUp; + case TrackElemType::RightLargeHalfLoopDown: + return GigaRCTrackRightLargeHalfLoopDown; + case TrackElemType::LeftLargeHalfLoopDown: + return GigaRCTrackLeftLargeHalfLoopDown; + case TrackElemType::FlatToUp60: + return GigaRCTrackFlatTo60DegUp; + case TrackElemType::Up60ToFlat: + return GigaRCTrack60DegUpToFlat; + case TrackElemType::FlatToDown60: + return GigaRCTrackFlatTo60DegDown; + case TrackElemType::Down60ToFlat: + return GigaRCTrack60DegDownToFlat; + case TrackElemType::DiagFlatToUp60: + return GigaRCTrackDiagFlatTo60DegUp; + case TrackElemType::DiagUp60ToFlat: + return GigaRCTrackDiag60DegUpToFlat; + case TrackElemType::DiagFlatToDown60: + return GigaRCTrackDiagFlatTo60DegDown; + case TrackElemType::DiagDown60ToFlat: + return GigaRCTrackDiag60DegDownToFlat; + case TrackElemType::LeftEighthToDiagUp25: + return GigaRCTrackLeftEighthToDiagUp25; + case TrackElemType::RightEighthToDiagUp25: + return GigaRCTrackRightEighthToDiagUp25; + case TrackElemType::LeftEighthToDiagDown25: + return GigaRCTrackLeftEighthToDiagDown25; + case TrackElemType::RightEighthToDiagDown25: + return GigaRCTrackRightEighthToDiagDown25; + case TrackElemType::LeftEighthToOrthogonalUp25: + return GigaRCTrackLeftEighthToOrthogonalUp25; + case TrackElemType::RightEighthToOrthogonalUp25: + return GigaRCTrackRightEighthToOrthogonalUp25; + case TrackElemType::LeftEighthToOrthogonalDown25: + return GigaRCTrackLeftEighthToOrthogonalDown25; + case TrackElemType::RightEighthToOrthogonalDown25: + return GigaRCTrackRightEighthToOrthogonalDown25; + case TrackElemType::DiagUp25ToLeftBankedUp25: + return GigaRCTrackDiagUp25ToLeftBankedUp25; + case TrackElemType::DiagUp25ToRightBankedUp25: + return GigaRCTrackDiagUp25ToRightBankedUp25; + case TrackElemType::DiagLeftBankedUp25ToUp25: + return GigaRCTrackDiagLeftBankedUp25ToUp25; + case TrackElemType::DiagRightBankedUp25ToUp25: + return GigaRCTrackDiagRightBankedUp25ToUp25; + case TrackElemType::DiagDown25ToLeftBankedDown25: + return GigaRCTrackDiagDown25ToLeftBankedDown25; + case TrackElemType::DiagDown25ToRightBankedDown25: + return GigaRCTrackDiagDown25ToRightBankedDown25; + case TrackElemType::DiagLeftBankedDown25ToDown25: + return GigaRCTrackDiagLeftBankedDown25ToDown25; + case TrackElemType::DiagRightBankedDown25ToDown25: + return GigaRCTrackDiagRightBankedDown25ToDown25; + case TrackElemType::DiagLeftBankedFlatToLeftBankedUp25: + return GigaRCTrackDiagLeftBankedFlatToLeftBankedUp25; + case TrackElemType::DiagRightBankedFlatToRightBankedUp25: + return GigaRCTrackDiagRightBankedFlatToRightBankedUp25; + case TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat: + return GigaRCTrackDiagLeftBankedUp25ToLeftBankedFlat; + case TrackElemType::DiagRightBankedUp25ToRightBankedFlat: + return GigaRCTrackDiagRightBankedUp25ToRightBankedFlat; + case TrackElemType::DiagLeftBankedFlatToLeftBankedDown25: + return GigaRCTrackDiagLeftBankedFlatToLeftBankedDown25; + case TrackElemType::DiagRightBankedFlatToRightBankedDown25: + return GigaRCTrackDiagRightBankedFlatToRightBankedDown25; + case TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat: + return GigaRCTrackDiagLeftBankedDown25ToLeftBankedFlat; + case TrackElemType::DiagRightBankedDown25ToRightBankedFlat: + return GigaRCTrackDiagRightBankedDown25ToRightBankedFlat; + case TrackElemType::DiagUp25LeftBanked: + return GigaRCTrackDiagUp25LeftBanked; + case TrackElemType::DiagUp25RightBanked: + return GigaRCTrackDiagUp25RightBanked; + case TrackElemType::DiagDown25LeftBanked: + return GigaRCTrackDiagDown25LeftBanked; + case TrackElemType::DiagDown25RightBanked: + return GigaRCTrackDiagDown25RightBanked; + case TrackElemType::DiagFlatToLeftBankedUp25: + return GigaRCTrackDiagFlatToLeftBankedUp25; + case TrackElemType::DiagFlatToRightBankedUp25: + return GigaRCTrackDiagFlatToRightBankedUp25; + case TrackElemType::DiagLeftBankedUp25ToFlat: + return GigaRCTrackDiagLeftBankedUp25ToFlat; + case TrackElemType::DiagRightBankedUp25ToFlat: + return GigaRCTrackDiagRightBankedUp25ToFlat; + case TrackElemType::DiagFlatToLeftBankedDown25: + return GigaRCTrackDiagFlatToLeftBankedDown25; + case TrackElemType::DiagFlatToRightBankedDown25: + return GigaRCTrackDiagFlatToRightBankedDown25; + case TrackElemType::DiagLeftBankedDown25ToFlat: + return GigaRCTrackDiagLeftBankedDown25ToFlat; + case TrackElemType::DiagRightBankedDown25ToFlat: + return GigaRCTrackDiagRightBankedDown25ToFlat; + case TrackElemType::LeftEighthBankToDiagUp25: + return GigaRCTrackLeftEighthBankToDiagUp25; + case TrackElemType::RightEighthBankToDiagUp25: + return GigaRCTrackRightEighthBankToDiagUp25; + case TrackElemType::LeftEighthBankToDiagDown25: + return GigaRCTrackLeftEighthBankToDiagDown25; + case TrackElemType::RightEighthBankToDiagDown25: + return GigaRCTrackRightEighthBankToDiagDown25; + case TrackElemType::LeftEighthBankToOrthogonalUp25: + return GigaRCTrackLeftEighthBankToOrthogonalUp25; + case TrackElemType::RightEighthBankToOrthogonalUp25: + return GigaRCTrackRightEighthBankToOrthogonalUp25; + case TrackElemType::LeftEighthBankToOrthogonalDown25: + return GigaRCTrackLeftEighthBankToOrthogonalDown25; + case TrackElemType::RightEighthBankToOrthogonalDown25: + return GigaRCTrackRightEighthBankToOrthogonalDown25; } return nullptr; } diff --git a/src/openrct2/ride/coaster/meta/GigaCoaster.h b/src/openrct2/ride/coaster/meta/GigaCoaster.h index 21845f0c6b..80bc9c57c0 100644 --- a/src/openrct2/ride/coaster/meta/GigaCoaster.h +++ b/src/openrct2/ride/coaster/meta/GigaCoaster.h @@ -19,8 +19,8 @@ constexpr RideTypeDescriptor GigaCoasterRTD = { 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_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_CURVE_LARGE, TRACK_HELIX_DOWN_BANKED_HALF, TRACK_HELIX_UP_BANKED_HALF, TRACK_BRAKES, TRACK_ON_RIDE_PHOTO, TRACK_BLOCK_BRAKES, TRACK_SLOPE_ROLL_BANKING, TRACK_SLOPE_STEEP_LONG, TRACK_LIFT_HILL_CABLE, TRACK_BOOSTER, TRACK_POWERED_LIFT}), - SET_FIELD(ExtraTrackPieces, {}), + SET_FIELD(EnabledTrackPieces, {TRACK_STRAIGHT, TRACK_STATION_END, TRACK_LIFT_HILL, TRACK_FLAT_ROLL_BANKING, 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_CURVE_LARGE, TRACK_HELIX_DOWN_BANKED_HALF, TRACK_HELIX_UP_BANKED_HALF, TRACK_BRAKES, TRACK_ON_RIDE_PHOTO, TRACK_BLOCK_BRAKES, TRACK_SLOPE_ROLL_BANKING, TRACK_SLOPE_STEEP_LONG, TRACK_LIFT_HILL_CABLE, TRACK_BOOSTER, TRACK_POWERED_LIFT, TRACK_SLOPE_CURVE_BANKED, TRACK_SLOPE_CURVE_LARGE}), + SET_FIELD(ExtraTrackPieces, {TRACK_SLOPE_VERTICAL, TRACK_CURVE_VERTICAL, TRACK_BARREL_ROLL, TRACK_QUARTER_LOOP, TRACK_HALF_LOOP, TRACK_HALF_LOOP_MEDIUM, TRACK_HALF_LOOP_LARGE, TRACK_VERTICAL_LOOP, TRACK_CORKSCREW, TRACK_CORKSCREW_LARGE, TRACK_ZERO_G_ROLL, TRACK_ZERO_G_ROLL_LARGE}), SET_FIELD(CoveredTrackPieces, {}), SET_FIELD(StartTrackPiece, TrackElemType::EndStation), SET_FIELD(TrackPaintFunction, GetTrackPaintFunctionGigaRC), diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index 7ff7f7a8fa..3ffdff017b 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1212,13 +1212,30 @@ enum SPR_G2_GIGA_RC_POWERED_LIFT_1, SPR_G2_GIGA_RC_POWERED_LIFT_2, SPR_G2_GIGA_RC_POWERED_LIFT_3, + SPR_G2_GIGA_TRACK_VERTICAL, + SPR_G2_GIGA_TRACK_VERTICAL_TWIST = SPR_G2_GIGA_TRACK_VERTICAL + 12, + SPR_G2_GIGA_TRACK_BARREL_ROLL = SPR_G2_GIGA_TRACK_VERTICAL_TWIST + 12, + SPR_G2_GIGA_TRACK_HALF_LOOP = SPR_G2_GIGA_TRACK_BARREL_ROLL + 48, + SPR_G2_GIGA_TRACK_VERTICAL_LOOP = SPR_G2_GIGA_TRACK_HALF_LOOP + 16, + SPR_G2_GIGA_TRACK_QUARTER_LOOP = SPR_G2_GIGA_TRACK_VERTICAL_LOOP + 32, + SPR_G2_GIGA_TRACK_CORKSCREW = SPR_G2_GIGA_TRACK_QUARTER_LOOP + 12, + SPR_G2_GIGA_TRACK_LARGE_CORKSCREW = SPR_G2_GIGA_TRACK_CORKSCREW + 24, + SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION = SPR_G2_GIGA_TRACK_LARGE_CORKSCREW + 40, + SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP = SPR_G2_GIGA_TRACK_TURN_BANK_TRANSITION + 18, + SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP = SPR_G2_GIGA_TRACK_MEDIUM_HALF_LOOP + 40, + SPR_G2_GIGA_TRACK_ZERO_G_ROLL = SPR_G2_GIGA_TRACK_LARGE_HALF_LOOP + 56, + SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL = SPR_G2_GIGA_TRACK_ZERO_G_ROLL + 32, + SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP = SPR_G2_GIGA_TRACK_LARGE_ZERO_G_ROLL + 40, + SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE = SPR_G2_GIGA_TRACK_SMALL_FLAT_TO_STEEP + 20, + SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED = SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE + 64, + SPR_G2_GIGA_END = SPR_G2_GIGA_TRACK_GENTLE_LARGE_CURVE_BANKED + 128, + + SPR_G2_MINI_RC_BOOSTER_NE_SW = SPR_G2_GIGA_END, + SPR_G2_MINI_RC_BOOSTER_NW_SE, SPR_G2_BM_BOOSTER_NE_SW, SPR_G2_BM_BOOSTER_NW_SE, - SPR_G2_MINI_RC_BOOSTER_NE_SW, - SPR_G2_MINI_RC_BOOSTER_NW_SE, - SPR_G2_MINIATURE_RAILWAY_QUARTER_TURN_3_TILES_SW_SE_PART_3, SPR_G2_MINIATURE_RAILWAY_GRAVEL_SW_NE, SPR_G2_MINIATURE_RAILWAY_GRAVEL_NW_SE,