diff --git a/OpenRCT2.xcodeproj/project.pbxproj b/OpenRCT2.xcodeproj/project.pbxproj index df74d7f231..72d4eb2437 100644 --- a/OpenRCT2.xcodeproj/project.pbxproj +++ b/OpenRCT2.xcodeproj/project.pbxproj @@ -46,6 +46,7 @@ 4C255959244A328B00CE7E45 /* UiExtensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C255954244A328A00CE7E45 /* UiExtensions.cpp */; }; 4C25595A244A328B00CE7E45 /* CustomWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C255957244A328B00CE7E45 /* CustomWindow.cpp */; }; 4C29DEB3218C6AE500E8707F /* RCT12.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C29DEB2218C6AE500E8707F /* RCT12.cpp */; }; + 4C2BF6C4258FF2FB005CD9A0 /* SingleRailRollerCoaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C2BF6C3258FF2FB005CD9A0 /* SingleRailRollerCoaster.cpp */; }; 4C358E5221C445F700ADE6BC /* ReplayManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C358E5021C445F700ADE6BC /* ReplayManager.cpp */; }; 4C3B4236205914F7000C5BB7 /* InGameConsole.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C3B4234205914F7000C5BB7 /* InGameConsole.cpp */; }; 4C724B2221F0AD790012ADD0 /* BenchSpriteSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C724B2121F0AD790012ADD0 /* BenchSpriteSort.cpp */; }; @@ -881,6 +882,7 @@ 4C25596E244A330800CE7E45 /* dukexception.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dukexception.h; path = src/thirdparty/dukglue/dukexception.h; sourceTree = SOURCE_ROOT; }; 4C25596F244A330800CE7E45 /* detail_typeinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = detail_typeinfo.h; path = src/thirdparty/dukglue/detail_typeinfo.h; sourceTree = SOURCE_ROOT; }; 4C29DEB2218C6AE500E8707F /* RCT12.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RCT12.cpp; sourceTree = ""; }; + 4C2BF6C3258FF2FB005CD9A0 /* SingleRailRollerCoaster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SingleRailRollerCoaster.cpp; sourceTree = ""; }; 4C358E5021C445F700ADE6BC /* ReplayManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReplayManager.cpp; sourceTree = ""; }; 4C358E5121C445F700ADE6BC /* ReplayManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReplayManager.h; sourceTree = ""; }; 4C3B4234205914F7000C5BB7 /* InGameConsole.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InGameConsole.cpp; sourceTree = ""; }; @@ -3617,6 +3619,7 @@ 4C93F12E1F8B744400A9330D /* ReverseFreefallCoaster.cpp */, 4C93F12F1F8B744400A9330D /* ReverserRollerCoaster.cpp */, 4C93F1301F8B744400A9330D /* SideFrictionRollerCoaster.cpp */, + 4C2BF6C3258FF2FB005CD9A0 /* SingleRailRollerCoaster.cpp */, 4C93F1311F8B744400A9330D /* StandUpRollerCoaster.cpp */, 4C93F1321F8B744400A9330D /* Steeplechase.cpp */, 4C93F1331F8B744400A9330D /* SuspendedSwingingCoaster.cpp */, @@ -4496,6 +4499,7 @@ C632C81F1F8A445700781F6D /* RideList.cpp in Sources */, C68878C420289B710084B384 /* OpenGLAPI.cpp in Sources */, 933CBDBB20CB1B3F00134678 /* TitleSequencePlayer.cpp in Sources */, + 4C2BF6C4258FF2FB005CD9A0 /* SingleRailRollerCoaster.cpp in Sources */, 930EEA6A24FC00950070314E /* ScenarioSelect.cpp in Sources */, C654DF3C1F69C0430040F43D /* TrackDesignManage.cpp in Sources */, C64645001F3FA4120026AC2D /* ViewClipping.cpp in Sources */, diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index fa8dc310d4..d21a345a05 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -95,6 +95,7 @@ STR_0090 :Mine Ride STR_0091 :Unknown Ride (59) STR_0092 :LIM Launched Roller Coaster STR_0093 :Hybrid Coaster +STR_0094 :Single Rail Roller Coaster STR_0512 :A compact roller coaster with a spiral lift hill and smooth, twisting drops. STR_0513 :A looping roller coaster where the riders ride in a standing position STR_0514 :Trains suspended beneath the roller coaster track swing out to the side around corners @@ -175,6 +176,7 @@ STR_0599 :A compact roller coaster with individual cars and smooth twisting d STR_0600 :Powered mine trains career along a smooth and twisted track layout STR_0602 :Roller coaster trains are accelerated out of the station by linear induction motors to speed through twisting inversions STR_0603 :A wooden style roller coaster with a steel track, allowing for steep drops and inversions. +STR_0604 :Riders ride single file on a narrow monorail track, as they race through tight inversions and direction changes. STR_0767 :Guest {INT32} STR_0768 :Handyman {INT32} STR_0769 :Mechanic {INT32} diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 7ce02a1e92..a8a3794242 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -14,6 +14,7 @@ - Feature: [#13512] [Plugin] Add item separators to list view. - Feature: [#13583] [Plugin] Add allowed_hosts to plugin section of config. - Feature: [#13593] [Plugin] Add ability to read and change the position of ride vehicles. +- Feature: [#13613] Add single-rail roller coaster (Rocky Mountain Construction Raptor). - Feature: [#13614] Add terrain surfaces from RollerCoaster Tycoon 1. - Feature: [#13675] [Plugin] Add context.setInterval and context.setTimeout. - Change: [#13346] [Plugin] Renamed FootpathScenery to FootpathAddition, fix typos. diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 672959f408..0cf8334f1e 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -7219,5 +7219,4405 @@ "x_offset": -24, "y_offset": -78, "palette": "keep" + }, + { + "path": "track/raptor/preview_track.png", + "x_offset": 9, + "y_offset": 3 + }, + { + "path": "track/raptor/preview_support.png", + "x_offset": 24, + "y_offset": 13 + }, + { + "path": "track/raptor/flat_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_2.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/brake_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/brake_2.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/block_brake_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/block_brake_2.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_gentle_up_1.png", + "x_offset": -18, + "y_offset": -6 + }, + { + "path": "track/raptor/flat_to_gentle_up_2.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_gentle_up_3.png", + "x_offset": -19, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_gentle_up_4.png", + "x_offset": -19, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_to_flat_1.png", + "x_offset": -18, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_to_flat_2.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_flat_3.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_flat_4.png", + "x_offset": -18, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_1.png", + "x_offset": -18, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_2.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_3.png", + "x_offset": -19, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_4.png", + "x_offset": -19, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_to_steep_up_1.png", + "x_offset": -18, + "y_offset": -30 + }, + { + "path": "track/raptor/gentle_to_steep_up_2_1.png", + "x_offset": -18, + "y_offset": 0 + }, + { + "path": "track/raptor/gentle_to_steep_up_2_2.png", + "x_offset": -17, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_to_steep_up_3_1.png", + "x_offset": 2, + "y_offset": 0 + }, + { + "path": "track/raptor/gentle_to_steep_up_3_2.png", + "x_offset": -21, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_to_steep_up_4.png", + "x_offset": -21, + "y_offset": -30 + }, + { + "path": "track/raptor/steep_to_gentle_up_1.png", + "x_offset": -18, + "y_offset": -30 + }, + { + "path": "track/raptor/steep_to_gentle_up_2_1.png", + "x_offset": -5, + "y_offset": -15 + }, + { + "path": "track/raptor/steep_to_gentle_up_2_2.png", + "x_offset": -18, + "y_offset": -10 + }, + { + "path": "track/raptor/steep_to_gentle_up_3_1.png", + "x_offset": -19, + "y_offset": -15 + }, + { + "path": "track/raptor/steep_to_gentle_up_3_2.png", + "x_offset": -12, + "y_offset": -10 + }, + { + "path": "track/raptor/steep_to_gentle_up_4.png", + "x_offset": -19, + "y_offset": -30 + }, + { + "path": "track/raptor/steep_1.png", + "x_offset": -18, + "y_offset": -62 + }, + { + "path": "track/raptor/steep_2.png", + "x_offset": -18, + "y_offset": -46 + }, + { + "path": "track/raptor/steep_3.png", + "x_offset": -21, + "y_offset": -46 + }, + { + "path": "track/raptor/steep_4.png", + "x_offset": -21, + "y_offset": -62 + }, + { + "path": "track/raptor/steep_to_vertical_up_1.png", + "x_offset": -18, + "y_offset": -48 + }, + { + "path": "track/raptor/steep_to_vertical_up_2.png", + "x_offset": -18, + "y_offset": -46 + }, + { + "path": "track/raptor/steep_to_vertical_up_3.png", + "x_offset": -6, + "y_offset": -46 + }, + { + "path": "track/raptor/steep_to_vertical_up_4.png", + "x_offset": -6, + "y_offset": -48 + }, + { + "path": "track/raptor/vertical_to_steep_up_1.png", + "x_offset": -2, + "y_offset": -54 + }, + { + "path": "track/raptor/vertical_to_steep_up_2.png", + "x_offset": -2, + "y_offset": -38 + }, + { + "path": "track/raptor/vertical_to_steep_up_3.png", + "x_offset": -21, + "y_offset": -38 + }, + { + "path": "track/raptor/vertical_to_steep_up_4.png", + "x_offset": -21, + "y_offset": -54 + }, + { + "path": "track/raptor/vertical_1.png", + "x_offset": -2, + "y_offset": -24 + }, + { + "path": "track/raptor/vertical_2.png", + "x_offset": -2, + "y_offset": -22 + }, + { + "path": "track/raptor/vertical_3.png", + "x_offset": -6, + "y_offset": -22 + }, + { + "path": "track/raptor/vertical_4.png", + "x_offset": -6, + "y_offset": -24 + }, + { + "path": "track/raptor/small_turn_left_1_1.png", + "x_offset": -18, + "y_offset": -1 + }, + { + "path": "track/raptor/small_turn_left_1_2.png", + "x_offset": -32, + "y_offset": 2 + }, + { + "path": "track/raptor/small_turn_left_1_3.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/small_turn_left_2_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/small_turn_left_2_2.png", + "x_offset": -4, + "y_offset": 0 + }, + { + "path": "track/raptor/small_turn_left_2_3.png", + "x_offset": -32, + "y_offset": 2 + }, + { + "path": "track/raptor/small_turn_left_3_1.png", + "x_offset": -4, + "y_offset": 2 + }, + { + "path": "track/raptor/small_turn_left_3_2.png", + "x_offset": 25, + "y_offset": 1 + }, + { + "path": "track/raptor/small_turn_left_3_3.png", + "x_offset": -7, + "y_offset": -1 + }, + { + "path": "track/raptor/small_turn_left_4_1.png", + "x_offset": -28, + "y_offset": 7 + }, + { + "path": "track/raptor/small_turn_left_4_2.png", + "x_offset": -8, + "y_offset": 23 + }, + { + "path": "track/raptor/small_turn_left_4_3.png", + "x_offset": -18, + "y_offset": 7 + }, + { + "path": "track/raptor/medium_turn_left_1_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/medium_turn_left_1_2.png", + "x_offset": -28, + "y_offset": 6 + }, + { + "path": "track/raptor/medium_turn_left_1_3.png", + "x_offset": 9, + "y_offset": 6 + }, + { + "path": "track/raptor/medium_turn_left_1_4.png", + "x_offset": -24, + "y_offset": 9 + }, + { + "path": "track/raptor/medium_turn_left_1_5.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/medium_turn_left_2_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/medium_turn_left_2_2.png", + "x_offset": -10, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_2_3.png", + "x_offset": -32, + "y_offset": 15 + }, + { + "path": "track/raptor/medium_turn_left_2_4.png", + "x_offset": -16, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_2_5.png", + "x_offset": -32, + "y_offset": 2 + }, + { + "path": "track/raptor/medium_turn_left_3_1.png", + "x_offset": -14, + "y_offset": 2 + }, + { + "path": "track/raptor/medium_turn_left_3_2.png", + "x_offset": 12, + "y_offset": 9 + }, + { + "path": "track/raptor/medium_turn_left_3_3.png", + "x_offset": -20, + "y_offset": 6 + }, + { + "path": "track/raptor/medium_turn_left_3_4.png", + "x_offset": 13, + "y_offset": 6 + }, + { + "path": "track/raptor/medium_turn_left_3_5.png", + "x_offset": -11, + "y_offset": 2 + }, + { + "path": "track/raptor/medium_turn_left_4_1.png", + "x_offset": -23, + "y_offset": 6 + }, + { + "path": "track/raptor/medium_turn_left_4_2.png", + "x_offset": -30, + "y_offset": 16 + }, + { + "path": "track/raptor/medium_turn_left_4_3.png", + "x_offset": -16, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_4_4.png", + "x_offset": -18, + "y_offset": 16 + }, + { + "path": "track/raptor/medium_turn_left_4_5.png", + "x_offset": -18, + "y_offset": 6 + }, + { + "path": "track/raptor/large_turn_left_to_diag_1_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/large_turn_left_to_diag_1_2.png", + "x_offset": -26, + "y_offset": 1 + }, + { + "path": "track/raptor/large_turn_left_to_diag_1_3.png", + "x_offset": 17, + "y_offset": 12 + }, + { + "path": "track/raptor/large_turn_left_to_diag_1_4.png", + "x_offset": -8, + "y_offset": 10 + }, + { + "path": "track/raptor/large_turn_left_to_diag_2_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/large_turn_left_to_diag_2_2.png", + "x_offset": -12, + "y_offset": 1 + }, + { + "path": "track/raptor/large_turn_left_to_diag_2_3.png", + "x_offset": -24, + "y_offset": 19 + }, + { + "path": "track/raptor/large_turn_left_to_diag_2_4.png", + "x_offset": -30, + "y_offset": 8 + }, + { + "path": "track/raptor/large_turn_left_to_diag_3_1.png", + "x_offset": -16, + "y_offset": 2 + }, + { + "path": "track/raptor/large_turn_left_to_diag_3_2.png", + "x_offset": -1, + "y_offset": 7 + }, + { + "path": "track/raptor/large_turn_left_to_diag_3_3.png", + "x_offset": -32, + "y_offset": 11 + }, + { + "path": "track/raptor/large_turn_left_to_diag_3_4.png", + "x_offset": -3, + "y_offset": -1 + }, + { + "path": "track/raptor/large_turn_left_to_diag_4_1.png", + "x_offset": -21, + "y_offset": 6 + }, + { + "path": "track/raptor/large_turn_left_to_diag_4_2.png", + "x_offset": -32, + "y_offset": 11 + }, + { + "path": "track/raptor/large_turn_left_to_diag_4_3.png", + "x_offset": -4, + "y_offset": 0 + }, + { + "path": "track/raptor/large_turn_left_to_diag_4_4.png", + "x_offset": 0, + "y_offset": 9 + }, + { + "path": "track/raptor/large_turn_right_to_diag_1_1.png", + "x_offset": -18, + "y_offset": 6 + }, + { + "path": "track/raptor/large_turn_right_to_diag_1_2.png", + "x_offset": -20, + "y_offset": 11 + }, + { + "path": "track/raptor/large_turn_right_to_diag_1_3.png", + "x_offset": -6, + "y_offset": 0 + }, + { + "path": "track/raptor/large_turn_right_to_diag_1_4.png", + "x_offset": -32, + "y_offset": 9 + }, + { + "path": "track/raptor/large_turn_right_to_diag_2_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/large_turn_right_to_diag_2_2.png", + "x_offset": -22, + "y_offset": 7 + }, + { + "path": "track/raptor/large_turn_right_to_diag_2_3.png", + "x_offset": 23, + "y_offset": 11 + }, + { + "path": "track/raptor/large_turn_right_to_diag_2_4.png", + "x_offset": -5, + "y_offset": -1 + }, + { + "path": "track/raptor/large_turn_right_to_diag_3_1.png", + "x_offset": -29, + "y_offset": 2 + }, + { + "path": "track/raptor/large_turn_right_to_diag_3_2.png", + "x_offset": -28, + "y_offset": 1 + }, + { + "path": "track/raptor/large_turn_right_to_diag_3_3.png", + "x_offset": -14, + "y_offset": 19 + }, + { + "path": "track/raptor/large_turn_right_to_diag_3_4.png", + "x_offset": 0, + "y_offset": 8 + }, + { + "path": "track/raptor/large_turn_right_to_diag_4_1.png", + "x_offset": -12, + "y_offset": 2 + }, + { + "path": "track/raptor/large_turn_right_to_diag_4_2.png", + "x_offset": 2, + "y_offset": 1 + }, + { + "path": "track/raptor/large_turn_right_to_diag_4_3.png", + "x_offset": -31, + "y_offset": 12 + }, + { + "path": "track/raptor/large_turn_right_to_diag_4_4.png", + "x_offset": -3, + "y_offset": 10 + }, + { + "path": "track/raptor/flat_diag_1.png", + "x_offset": -32, + "y_offset": 9 + }, + { + "path": "track/raptor/flat_diag_2.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/flat_diag_3.png", + "x_offset": -32, + "y_offset": 9 + }, + { + "path": "track/raptor/flat_diag_4.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/flat_to_gentle_up_diag_1.png", + "x_offset": -32, + "y_offset": 1 + }, + { + "path": "track/raptor/flat_to_gentle_up_diag_2.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/flat_to_gentle_up_diag_3.png", + "x_offset": -33, + "y_offset": 1 + }, + { + "path": "track/raptor/flat_to_gentle_up_diag_4.png", + "x_offset": -3, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_to_flat_up_diag_1.png", + "x_offset": -32, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_to_flat_up_diag_2.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_to_flat_up_diag_3.png", + "x_offset": -32, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_to_flat_up_diag_4.png", + "x_offset": -3, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_diag_1.png", + "x_offset": -32, + "y_offset": -7 + }, + { + "path": "track/raptor/gentle_diag_2.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_diag_3.png", + "x_offset": -32, + "y_offset": -7 + }, + { + "path": "track/raptor/gentle_diag_4.png", + "x_offset": -3, + "y_offset": -22 + }, + { + "path": "track/raptor/gentle_to_steep_up_diag_1.png", + "x_offset": -32, + "y_offset": -23 + }, + { + "path": "track/raptor/gentle_to_steep_up_diag_2.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_to_steep_up_diag_3.png", + "x_offset": -32, + "y_offset": -23 + }, + { + "path": "track/raptor/gentle_to_steep_up_diag_4.png", + "x_offset": -3, + "y_offset": -38 + }, + { + "path": "track/raptor/steep_to_gentle_up_diag_1.png", + "x_offset": -32, + "y_offset": -23 + }, + { + "path": "track/raptor/steep_to_gentle_up_diag_2.png", + "x_offset": -3, + "y_offset": -11 + }, + { + "path": "track/raptor/steep_to_gentle_up_diag_3.png", + "x_offset": -32, + "y_offset": -23 + }, + { + "path": "track/raptor/steep_to_gentle_up_diag_4.png", + "x_offset": -3, + "y_offset": -38 + }, + { + "path": "track/raptor/steep_diag_1.png", + "x_offset": -32, + "y_offset": -55 + }, + { + "path": "track/raptor/steep_diag_2.png", + "x_offset": -3, + "y_offset": -38 + }, + { + "path": "track/raptor/steep_diag_3.png", + "x_offset": -32, + "y_offset": -55 + }, + { + "path": "track/raptor/steep_diag_4.png", + "x_offset": -3, + "y_offset": -70 + }, + { + "path": "track/raptor/flat_to_left_bank_1_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_left_bank_1_2.png", + "x_offset": 1, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_left_bank_2_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_left_bank_2_2.png", + "x_offset": -17, + "y_offset": 8 + }, + { + "path": "track/raptor/flat_to_left_bank_3.png", + "x_offset": -19, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_left_bank_4.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/flat_to_right_bank_1.png", + "x_offset": -18, + "y_offset": 0 + }, + { + "path": "track/raptor/flat_to_right_bank_2.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_right_bank_3_1.png", + "x_offset": -13, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_right_bank_3_2.png", + "x_offset": -17, + "y_offset": 8 + }, + { + "path": "track/raptor/flat_to_right_bank_4_1.png", + "x_offset": -16, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_right_bank_4_2.png", + "x_offset": -20, + "y_offset": 2 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_1_1.png", + "x_offset": -13, + "y_offset": -6 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_1_2.png", + "x_offset": -17, + "y_offset": 7 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_2_1.png", + "x_offset": -16, + "y_offset": 2 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_2_2.png", + "x_offset": -20, + "y_offset": 2 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_3.png", + "x_offset": -19, + "y_offset": 0 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_4.png", + "x_offset": -19, + "y_offset": -6 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_1.png", + "x_offset": -19, + "y_offset": -6 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_2.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_3_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_3_2.png", + "x_offset": -5, + "y_offset": 2 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_4_1.png", + "x_offset": -19, + "y_offset": -6 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_4_2.png", + "x_offset": -10, + "y_offset": 7 + }, + { + "path": "track/raptor/gentle_up_to_left_bank_1_1.png", + "x_offset": -18, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_to_left_bank_1_2.png", + "x_offset": 3, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_to_left_bank_2_1.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_left_bank_2_2.png", + "x_offset": -16, + "y_offset": 4 + }, + { + "path": "track/raptor/gentle_up_to_left_bank_3.png", + "x_offset": -19, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_left_bank_4.png", + "x_offset": -17, + "y_offset": -8 + }, + { + "path": "track/raptor/gentle_up_to_right_bank_1.png", + "x_offset": -18, + "y_offset": -8 + }, + { + "path": "track/raptor/gentle_up_to_right_bank_2.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_right_bank_3_1.png", + "x_offset": -13, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_right_bank_3_2.png", + "x_offset": -17, + "y_offset": 4 + }, + { + "path": "track/raptor/gentle_up_to_right_bank_4_1.png", + "x_offset": -17, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_to_right_bank_4_2.png", + "x_offset": -20, + "y_offset": -6 + }, + { + "path": "track/raptor/left_bank_1.png", + "x_offset": -17, + "y_offset": 2 + }, + { + "path": "track/raptor/left_bank_2.png", + "x_offset": -20, + "y_offset": 2 + }, + { + "path": "track/raptor/left_bank_3.png", + "x_offset": -19, + "y_offset": 0 + }, + { + "path": "track/raptor/left_bank_4.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/flat_to_left_bank_diag_1_1.png", + "x_offset": -32, + "y_offset": 9 + }, + { + "path": "track/raptor/flat_to_left_bank_diag_1_2.png", + "x_offset": -30, + "y_offset": 9 + }, + { + "path": "track/raptor/flat_to_left_bank_diag_2.png", + "x_offset": -5, + "y_offset": -6 + }, + { + "path": "track/raptor/flat_to_left_bank_diag_3.png", + "x_offset": -32, + "y_offset": 8 + }, + { + "path": "track/raptor/flat_to_left_bank_diag_4.png", + "x_offset": -3, + "y_offset": -7 + }, + { + "path": "track/raptor/flat_to_right_bank_diag_1.png", + "x_offset": -32, + "y_offset": 8 + }, + { + "path": "track/raptor/flat_to_right_bank_diag_2.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/flat_to_right_bank_diag_3_1.png", + "x_offset": -31, + "y_offset": 9 + }, + { + "path": "track/raptor/flat_to_right_bank_diag_3_2.png", + "x_offset": -32, + "y_offset": 9 + }, + { + "path": "track/raptor/flat_to_right_bank_diag_4.png", + "x_offset": -6, + "y_offset": -7 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_diag_1_1.png", + "x_offset": -31, + "y_offset": 1 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_diag_1_2.png", + "x_offset": -32, + "y_offset": 8 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_diag_2.png", + "x_offset": -6, + "y_offset": -7 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_diag_3.png", + "x_offset": -33, + "y_offset": 1 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_diag_4.png", + "x_offset": -3, + "y_offset": -14 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_diag_1.png", + "x_offset": -32, + "y_offset": 1 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_diag_2.png", + "x_offset": -3, + "y_offset": -7 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_diag_3_1.png", + "x_offset": -32, + "y_offset": 1 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_diag_3_2.png", + "x_offset": -31, + "y_offset": 8 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_diag_4.png", + "x_offset": -5, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_up_to_left_bank_diag_1_1.png", + "x_offset": -32, + "y_offset": 3 + }, + { + "path": "track/raptor/gentle_up_to_left_bank_diag_1_2.png", + "x_offset": -31, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_left_bank_diag_2.png", + "x_offset": -5, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_to_left_bank_diag_3.png", + "x_offset": -32, + "y_offset": 0 + }, + { + "path": "track/raptor/gentle_up_to_left_bank_diag_4.png", + "x_offset": -3, + "y_offset": -15 + }, + { + "path": "track/raptor/gentle_up_to_right_bank_diag_1.png", + "x_offset": -32, + "y_offset": 0 + }, + { + "path": "track/raptor/gentle_up_to_right_bank_diag_2.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_to_right_bank_diag_3_1.png", + "x_offset": -31, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_right_bank_diag_3_2.png", + "x_offset": -32, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_right_bank_diag_4.png", + "x_offset": -6, + "y_offset": -15 + }, + { + "path": "track/raptor/left_bank_diag_1.png", + "x_offset": -32, + "y_offset": 9 + }, + { + "path": "track/raptor/left_bank_diag_2.png", + "x_offset": -6, + "y_offset": -7 + }, + { + "path": "track/raptor/left_bank_diag_3.png", + "x_offset": -32, + "y_offset": 8 + }, + { + "path": "track/raptor/left_bank_diag_4.png", + "x_offset": -2, + "y_offset": -7 + }, + { + "path": "track/raptor/small_turn_left_bank_1_1.png", + "x_offset": -5, + "y_offset": -1 + }, + { + "path": "track/raptor/small_turn_left_bank_1_2.png", + "x_offset": -17, + "y_offset": -1 + }, + { + "path": "track/raptor/small_turn_left_bank_1_3.png", + "x_offset": -32, + "y_offset": 2 + }, + { + "path": "track/raptor/small_turn_left_bank_1_4.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/small_turn_left_bank_2_1.png", + "x_offset": -20, + "y_offset": 2 + }, + { + "path": "track/raptor/small_turn_left_bank_2_2.png", + "x_offset": -4, + "y_offset": 0 + }, + { + "path": "track/raptor/small_turn_left_bank_2_3.png", + "x_offset": -32, + "y_offset": 2 + }, + { + "path": "track/raptor/small_turn_left_bank_3_1.png", + "x_offset": -6, + "y_offset": 0 + }, + { + "path": "track/raptor/small_turn_left_bank_3_2.png", + "x_offset": 23, + "y_offset": 1 + }, + { + "path": "track/raptor/small_turn_left_bank_3_3.png", + "x_offset": -8, + "y_offset": -1 + }, + { + "path": "track/raptor/small_turn_left_bank_3_4.png", + "x_offset": -9, + "y_offset": -1 + }, + { + "path": "track/raptor/small_turn_left_bank_4_1.png", + "x_offset": -26, + "y_offset": 6 + }, + { + "path": "track/raptor/small_turn_left_bank_4_2.png", + "x_offset": -8, + "y_offset": 22 + }, + { + "path": "track/raptor/small_turn_left_bank_4_3.png", + "x_offset": -19, + "y_offset": 6 + }, + { + "path": "track/raptor/medium_turn_left_bank_1_1.png", + "x_offset": 3, + "y_offset": 3 + }, + { + "path": "track/raptor/medium_turn_left_bank_1_2.png", + "x_offset": -17, + "y_offset": 3 + }, + { + "path": "track/raptor/medium_turn_left_bank_1_3.png", + "x_offset": -26, + "y_offset": 5 + }, + { + "path": "track/raptor/medium_turn_left_bank_1_4.png", + "x_offset": 12, + "y_offset": 7 + }, + { + "path": "track/raptor/medium_turn_left_bank_1_5.png", + "x_offset": -22, + "y_offset": 8 + }, + { + "path": "track/raptor/medium_turn_left_bank_1_6.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_bank_2_1.png", + "x_offset": -20, + "y_offset": 2 + }, + { + "path": "track/raptor/medium_turn_left_bank_2_2.png", + "x_offset": -10, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_bank_2_3.png", + "x_offset": -30, + "y_offset": 16 + }, + { + "path": "track/raptor/medium_turn_left_bank_2_4.png", + "x_offset": -16, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_bank_2_5.png", + "x_offset": -30, + "y_offset": 2 + }, + { + "path": "track/raptor/medium_turn_left_bank_3_1.png", + "x_offset": -15, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_bank_3_2.png", + "x_offset": 9, + "y_offset": 8 + }, + { + "path": "track/raptor/medium_turn_left_bank_3_3.png", + "x_offset": -23, + "y_offset": 7 + }, + { + "path": "track/raptor/medium_turn_left_bank_3_4.png", + "x_offset": 11, + "y_offset": 5 + }, + { + "path": "track/raptor/medium_turn_left_bank_3_5.png", + "x_offset": -6, + "y_offset": 3 + }, + { + "path": "track/raptor/medium_turn_left_bank_3_6.png", + "x_offset": -11, + "y_offset": 3 + }, + { + "path": "track/raptor/medium_turn_left_bank_4_1.png", + "x_offset": -20, + "y_offset": 5 + }, + { + "path": "track/raptor/medium_turn_left_bank_4_2.png", + "x_offset": -32, + "y_offset": 15 + }, + { + "path": "track/raptor/medium_turn_left_bank_4_3.png", + "x_offset": -12, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_bank_4_4.png", + "x_offset": -20, + "y_offset": 15 + }, + { + "path": "track/raptor/medium_turn_left_bank_4_5.png", + "x_offset": -19, + "y_offset": 5 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_1_1.png", + "x_offset": -17, + "y_offset": 3 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_1_2.png", + "x_offset": -24, + "y_offset": 0 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_1_3.png", + "x_offset": 21, + "y_offset": 13 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_1_4.png", + "x_offset": -11, + "y_offset": 9 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_2_1.png", + "x_offset": -20, + "y_offset": 2 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_2_2.png", + "x_offset": -32, + "y_offset": -7 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_2_3.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_2_4.png", + "x_offset": -32, + "y_offset": 8 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_3_1.png", + "x_offset": -18, + "y_offset": 0 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_3_2.png", + "x_offset": -2, + "y_offset": 7 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_3_3.png", + "x_offset": -32, + "y_offset": 13 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_3_4.png", + "x_offset": -5, + "y_offset": -2 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_4_1.png", + "x_offset": -18, + "y_offset": 5 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_4_2.png", + "x_offset": -32, + "y_offset": 10 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_4_3.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/large_turn_left_to_diag_bank_4_4.png", + "x_offset": 0, + "y_offset": 8 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_1_1.png", + "x_offset": -19, + "y_offset": 5 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_1_2.png", + "x_offset": -20, + "y_offset": 10 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_1_3.png", + "x_offset": -2, + "y_offset": 0 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_1_4.png", + "x_offset": -32, + "y_offset": 8 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_2_1.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_2_2.png", + "x_offset": -20, + "y_offset": 7 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_2_3.png", + "x_offset": 26, + "y_offset": 13 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_2_4.png", + "x_offset": -4, + "y_offset": -2 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_3_1.png", + "x_offset": -28, + "y_offset": 2 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_3_2.png", + "x_offset": -32, + "y_offset": -7 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_3_3.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_3_4.png", + "x_offset": 0, + "y_offset": 8 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_4_1.png", + "x_offset": -27, + "y_offset": -10 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_4_2.png", + "x_offset": 1, + "y_offset": 0 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_4_3.png", + "x_offset": -32, + "y_offset": 13 + }, + { + "path": "track/raptor/large_turn_right_to_diag_bank_4_4.png", + "x_offset": -6, + "y_offset": 9 + }, + { + "path": "track/raptor/small_turn_left_gentle_up_1_1.png", + "x_offset": -24, + "y_offset": -32 + }, + { + "path": "track/raptor/small_turn_left_gentle_up_1_2.png", + "x_offset": -13, + "y_offset": -17 + }, + { + "path": "track/raptor/small_turn_left_gentle_up_2_1.png", + "x_offset": -12, + "y_offset": -8 + }, + { + "path": "track/raptor/small_turn_left_gentle_up_2_2.png", + "x_offset": -38, + "y_offset": -17 + }, + { + "path": "track/raptor/small_turn_left_gentle_up_3_1.png", + "x_offset": -13, + "y_offset": -2 + }, + { + "path": "track/raptor/small_turn_left_gentle_up_3_2.png", + "x_offset": -1, + "y_offset": -7 + }, + { + "path": "track/raptor/small_turn_left_gentle_up_4_1.png", + "x_offset": -26, + "y_offset": -12 + }, + { + "path": "track/raptor/small_turn_left_gentle_up_4_2.png", + "x_offset": -25, + "y_offset": -2 + }, + { + "path": "track/raptor/small_turn_right_gentle_up_1_1.png", + "x_offset": -24, + "y_offset": -12 + }, + { + "path": "track/raptor/small_turn_right_gentle_up_1_2.png", + "x_offset": -26, + "y_offset": -2 + }, + { + "path": "track/raptor/small_turn_right_gentle_up_2_1.png", + "x_offset": -12, + "y_offset": -2 + }, + { + "path": "track/raptor/small_turn_right_gentle_up_2_2.png", + "x_offset": -25, + "y_offset": -7 + }, + { + "path": "track/raptor/small_turn_right_gentle_up_3_1.png", + "x_offset": -38, + "y_offset": -8 + }, + { + "path": "track/raptor/small_turn_right_gentle_up_3_2.png", + "x_offset": -13, + "y_offset": -17 + }, + { + "path": "track/raptor/small_turn_right_gentle_up_4_1.png", + "x_offset": -1, + "y_offset": -25 + }, + { + "path": "track/raptor/small_turn_right_gentle_up_4_2.png", + "x_offset": -13, + "y_offset": -17 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_1_1.png", + "x_offset": -18, + "y_offset": -15 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_1_2.png", + "x_offset": -27, + "y_offset": -11 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_1_3.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_1_4.png", + "x_offset": -27, + "y_offset": -8 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_1_5.png", + "x_offset": -19, + "y_offset": -14 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_2_1.png", + "x_offset": -18, + "y_offset": -5 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_2_2.png", + "x_offset": 0, + "y_offset": -14 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_2_3.png", + "x_offset": 0, + "y_offset": 1 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_2_4.png", + "x_offset": -12, + "y_offset": -21 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_2_5.png", + "x_offset": -17, + "y_offset": -14 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_3_1.png", + "x_offset": -20, + "y_offset": 1 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_3_2.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_3_3.png", + "x_offset": -20, + "y_offset": 6 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_3_4.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_3_5.png", + "x_offset": -16, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_4_1.png", + "x_offset": -26, + "y_offset": -12 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_4_2.png", + "x_offset": -32, + "y_offset": 1 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_4_3.png", + "x_offset": -18, + "y_offset": -13 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_4_4.png", + "x_offset": -16, + "y_offset": 4 + }, + { + "path": "track/raptor/medium_turn_left_gentle_up_4_5.png", + "x_offset": -19, + "y_offset": 1 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_1_1.png", + "x_offset": -18, + "y_offset": -12 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_1_2.png", + "x_offset": -10, + "y_offset": 1 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_1_3.png", + "x_offset": 0, + "y_offset": -13 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_1_4.png", + "x_offset": -16, + "y_offset": 4 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_1_5.png", + "x_offset": -21, + "y_offset": 1 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_2_1.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_2_2.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_2_3.png", + "x_offset": 0, + "y_offset": 6 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_2_4.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_2_5.png", + "x_offset": -19, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_3_1.png", + "x_offset": -32, + "y_offset": -5 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_3_2.png", + "x_offset": -32, + "y_offset": -14 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_3_3.png", + "x_offset": -26, + "y_offset": -1 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_3_4.png", + "x_offset": -22, + "y_offset": -24 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_3_5.png", + "x_offset": -19, + "y_offset": -14 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_4_1.png", + "x_offset": -12, + "y_offset": -13 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_4_2.png", + "x_offset": 12, + "y_offset": -11 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_4_3.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_4_4.png", + "x_offset": 12, + "y_offset": -7 + }, + { + "path": "track/raptor/medium_turn_right_gentle_up_4_5.png", + "x_offset": -13, + "y_offset": -14 + }, + { + "path": "track/raptor/very_small_turn_left_steep_up_1_1.png", + "x_offset": -21, + "y_offset": -62 + }, + { + "path": "track/raptor/very_small_turn_left_steep_up_1_2.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/very_small_turn_left_steep_up_2_1.png", + "x_offset": -10, + "y_offset": -62 + }, + { + "path": "track/raptor/very_small_turn_left_steep_up_2_2.png", + "x_offset": -18, + "y_offset": -31 + }, + { + "path": "track/raptor/very_small_turn_left_steep_up_3_1.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/very_small_turn_left_steep_up_3_2.png", + "x_offset": 6, + "y_offset": -46 + }, + { + "path": "track/raptor/very_small_turn_left_steep_up_4_1.png", + "x_offset": -9, + "y_offset": -33 + }, + { + "path": "track/raptor/very_small_turn_left_steep_up_4_2.png", + "x_offset": -21, + "y_offset": -46 + }, + { + "path": "track/raptor/very_small_turn_right_steep_up_1_1.png", + "x_offset": -18, + "y_offset": -24 + }, + { + "path": "track/raptor/very_small_turn_right_steep_up_1_2.png", + "x_offset": 0, + "y_offset": -46 + }, + { + "path": "track/raptor/very_small_turn_right_steep_up_2_1.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/very_small_turn_right_steep_up_2_2.png", + "x_offset": -21, + "y_offset": -46 + }, + { + "path": "track/raptor/very_small_turn_right_steep_up_3_1.png", + "x_offset": -21, + "y_offset": -62 + }, + { + "path": "track/raptor/very_small_turn_right_steep_up_3_2.png", + "x_offset": -10, + "y_offset": -33 + }, + { + "path": "track/raptor/very_small_turn_right_steep_up_4_1.png", + "x_offset": 6, + "y_offset": -62 + }, + { + "path": "track/raptor/very_small_turn_right_steep_up_4_2.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/vertical_twist_left_up_1.png", + "x_offset": -6, + "y_offset": -88 + }, + { + "path": "track/raptor/vertical_twist_left_up_2_1.png", + "x_offset": -2, + "y_offset": -88 + }, + { + "path": "track/raptor/vertical_twist_left_up_2_2.png", + "x_offset": -2, + "y_offset": -41 + }, + { + "path": "track/raptor/vertical_twist_left_up_3.png", + "x_offset": -6, + "y_offset": -86 + }, + { + "path": "track/raptor/vertical_twist_left_up_4_1.png", + "x_offset": -6, + "y_offset": -40 + }, + { + "path": "track/raptor/vertical_twist_left_up_4_2.png", + "x_offset": -6, + "y_offset": -86 + }, + { + "path": "track/raptor/vertical_twist_right_up_1_1.png", + "x_offset": -2, + "y_offset": -41 + }, + { + "path": "track/raptor/vertical_twist_right_up_1_2.png", + "x_offset": -2, + "y_offset": -86 + }, + { + "path": "track/raptor/vertical_twist_right_up_2.png", + "x_offset": -6, + "y_offset": -86 + }, + { + "path": "track/raptor/vertical_twist_right_up_3_1.png", + "x_offset": -6, + "y_offset": -88 + }, + { + "path": "track/raptor/vertical_twist_right_up_3_2.png", + "x_offset": -6, + "y_offset": -41 + }, + { + "path": "track/raptor/vertical_twist_right_up_4.png", + "x_offset": -6, + "y_offset": -88 + }, + { + "path": "track/raptor/gentle_up_to_gentle_up_left_bank_1.png", + "x_offset": -18, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_up_to_gentle_up_left_bank_2_1.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_gentle_up_left_bank_2_2.png", + "x_offset": -17, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_gentle_up_left_bank_3.png", + "x_offset": -20, + "y_offset": 0 + }, + { + "path": "track/raptor/gentle_up_to_gentle_up_left_bank_4.png", + "x_offset": -18, + "y_offset": -15 + }, + { + "path": "track/raptor/gentle_up_to_gentle_up_right_bank_1.png", + "x_offset": -18, + "y_offset": -15 + }, + { + "path": "track/raptor/gentle_up_to_gentle_up_right_bank_2.png", + "x_offset": -18, + "y_offset": 0 + }, + { + "path": "track/raptor/gentle_up_to_gentle_up_right_bank_3_1.png", + "x_offset": -9, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_gentle_up_right_bank_3_2.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_gentle_up_right_bank_4.png", + "x_offset": -20, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_up_left_bank_to_gentle_up_1.png", + "x_offset": -17, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_up_left_bank_to_gentle_up_2_1.png", + "x_offset": -16, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_left_bank_to_gentle_up_2_2.png", + "x_offset": -19, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_left_bank_to_gentle_up_3.png", + "x_offset": -19, + "y_offset": 0 + }, + { + "path": "track/raptor/gentle_up_left_bank_to_gentle_up_4.png", + "x_offset": -19, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_up_right_bank_to_gentle_up_1.png", + "x_offset": -19, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_up_right_bank_to_gentle_up_2.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/gentle_up_right_bank_to_gentle_up_3_1.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_right_bank_to_gentle_up_3_2.png", + "x_offset": 0, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_right_bank_to_gentle_up_4.png", + "x_offset": -19, + "y_offset": -14 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_left_bank_1.png", + "x_offset": -17, + "y_offset": -6 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_left_bank_2.png", + "x_offset": -20, + "y_offset": 2 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_left_bank_3.png", + "x_offset": -20, + "y_offset": 0 + }, + { + "path": "track/raptor/left_bank_to_gentle_up_left_bank_4.png", + "x_offset": -18, + "y_offset": -7 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_right_bank_1.png", + "x_offset": -19, + "y_offset": -7 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_right_bank_2.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_right_bank_3.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/right_bank_to_gentle_up_right_bank_4.png", + "x_offset": -20, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_left_bank_to_left_bank_1.png", + "x_offset": -16, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_left_bank_to_left_bank_2.png", + "x_offset": -19, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_left_bank_to_left_bank_3.png", + "x_offset": -19, + "y_offset": 0 + }, + { + "path": "track/raptor/gentle_up_left_bank_to_left_bank_4.png", + "x_offset": -17, + "y_offset": -8 + }, + { + "path": "track/raptor/gentle_up_right_bank_to_right_bank_1.png", + "x_offset": -19, + "y_offset": -8 + }, + { + "path": "track/raptor/gentle_up_right_bank_to_right_bank_2.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/gentle_up_right_bank_to_right_bank_3.png", + "x_offset": -17, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_right_bank_to_right_bank_4.png", + "x_offset": -20, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_left_bank_1.png", + "x_offset": -16, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_up_left_bank_2.png", + "x_offset": -19, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_left_bank_3.png", + "x_offset": -20, + "y_offset": 0 + }, + { + "path": "track/raptor/gentle_up_left_bank_4.png", + "x_offset": -18, + "y_offset": -15 + }, + { + "path": "track/raptor/gentle_up_right_bank_1.png", + "x_offset": -19, + "y_offset": -15 + }, + { + "path": "track/raptor/gentle_up_right_bank_2.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/gentle_up_right_bank_3.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_right_bank_4.png", + "x_offset": -20, + "y_offset": -14 + }, + { + "path": "track/raptor/flat_to_gentle_up_left_bank_1.png", + "x_offset": -18, + "y_offset": -6 + }, + { + "path": "track/raptor/flat_to_gentle_up_left_bank_2_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_gentle_up_left_bank_2_2.png", + "x_offset": -17, + "y_offset": 7 + }, + { + "path": "track/raptor/flat_to_gentle_up_left_bank_3.png", + "x_offset": -20, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_gentle_up_left_bank_4.png", + "x_offset": -18, + "y_offset": -7 + }, + { + "path": "track/raptor/flat_to_gentle_up_right_bank_1.png", + "x_offset": -18, + "y_offset": -7 + }, + { + "path": "track/raptor/flat_to_gentle_up_right_bank_2.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_gentle_up_right_bank_3_1.png", + "x_offset": -3, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_gentle_up_right_bank_3_2.png", + "x_offset": -18, + "y_offset": 7 + }, + { + "path": "track/raptor/flat_to_gentle_up_right_bank_4.png", + "x_offset": -20, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_left_bank_to_flat_1.png", + "x_offset": -17, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_left_bank_to_flat_2_1.png", + "x_offset": -16, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_left_bank_to_flat_2_2.png", + "x_offset": -19, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_left_bank_to_flat_3.png", + "x_offset": -18, + "y_offset": 0 + }, + { + "path": "track/raptor/gentle_up_left_bank_to_flat_4.png", + "x_offset": -18, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_right_bank_to_flat_1.png", + "x_offset": -19, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_right_bank_to_flat_2.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/gentle_up_right_bank_to_flat_3_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/gentle_up_right_bank_to_flat_3_2.png", + "x_offset": -3, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_right_bank_to_flat_4.png", + "x_offset": -18, + "y_offset": -6 + }, + { + "path": "track/raptor/small_turn_left_bank_gentle_up_1_1.png", + "x_offset": -23, + "y_offset": -32 + }, + { + "path": "track/raptor/small_turn_left_bank_gentle_up_1_2.png", + "x_offset": -12, + "y_offset": -18 + }, + { + "path": "track/raptor/small_turn_left_bank_gentle_up_2_1.png", + "x_offset": -13, + "y_offset": -7 + }, + { + "path": "track/raptor/small_turn_left_bank_gentle_up_2_2.png", + "x_offset": -38, + "y_offset": -17 + }, + { + "path": "track/raptor/small_turn_left_bank_gentle_up_3_1.png", + "x_offset": -15, + "y_offset": -3 + }, + { + "path": "track/raptor/small_turn_left_bank_gentle_up_3_2.png", + "x_offset": -3, + "y_offset": -7 + }, + { + "path": "track/raptor/small_turn_left_bank_gentle_up_4_1.png", + "x_offset": -26, + "y_offset": -13 + }, + { + "path": "track/raptor/small_turn_left_bank_gentle_up_4_2.png", + "x_offset": -26, + "y_offset": -4 + }, + { + "path": "track/raptor/small_turn_right_bank_gentle_up_1_1.png", + "x_offset": -25, + "y_offset": -13 + }, + { + "path": "track/raptor/small_turn_right_bank_gentle_up_1_2.png", + "x_offset": -26, + "y_offset": -4 + }, + { + "path": "track/raptor/small_turn_right_bank_gentle_up_2_1.png", + "x_offset": -11, + "y_offset": -3 + }, + { + "path": "track/raptor/small_turn_right_bank_gentle_up_2_2.png", + "x_offset": -24, + "y_offset": -7 + }, + { + "path": "track/raptor/small_turn_right_bank_gentle_up_3_1.png", + "x_offset": -38, + "y_offset": -7 + }, + { + "path": "track/raptor/small_turn_right_bank_gentle_up_3_2.png", + "x_offset": -14, + "y_offset": -17 + }, + { + "path": "track/raptor/small_turn_right_bank_gentle_up_4_1.png", + "x_offset": -3, + "y_offset": -25 + }, + { + "path": "track/raptor/small_turn_right_bank_gentle_up_4_2.png", + "x_offset": -15, + "y_offset": -18 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_1_1.png", + "x_offset": -17, + "y_offset": -15 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_1_2.png", + "x_offset": -25, + "y_offset": -11 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_1_3.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_1_4.png", + "x_offset": -25, + "y_offset": -8 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_1_5.png", + "x_offset": -18, + "y_offset": -15 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_2_1.png", + "x_offset": -19, + "y_offset": -5 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_2_2.png", + "x_offset": 0, + "y_offset": -14 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_2_3.png", + "x_offset": 0, + "y_offset": 2 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_2_4.png", + "x_offset": -11, + "y_offset": -21 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_2_5.png", + "x_offset": -16, + "y_offset": -14 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_3_1.png", + "x_offset": -22, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_3_2.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_3_3.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_3_4.png", + "x_offset": 11, + "y_offset": -2 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_3_5.png", + "x_offset": -15, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_4_1.png", + "x_offset": -24, + "y_offset": -13 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_4_2.png", + "x_offset": -32, + "y_offset": -1 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_4_3.png", + "x_offset": -18, + "y_offset": -14 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_4_4.png", + "x_offset": -16, + "y_offset": 3 + }, + { + "path": "track/raptor/medium_turn_left_bank_gentle_up_4_5.png", + "x_offset": -20, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_1_1.png", + "x_offset": -19, + "y_offset": -13 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_1_2.png", + "x_offset": -11, + "y_offset": -1 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_1_3.png", + "x_offset": 0, + "y_offset": -14 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_1_4.png", + "x_offset": -16, + "y_offset": 3 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_1_5.png", + "x_offset": -20, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_2_1.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_2_2.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_2_3.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_2_4.png", + "x_offset": -32, + "y_offset": -2 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_2_5.png", + "x_offset": -18, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_3_1.png", + "x_offset": -32, + "y_offset": -5 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_3_2.png", + "x_offset": -32, + "y_offset": -14 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_3_3.png", + "x_offset": -26, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_3_4.png", + "x_offset": -22, + "y_offset": -22 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_3_5.png", + "x_offset": -20, + "y_offset": -14 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_4_1.png", + "x_offset": -13, + "y_offset": -13 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_4_2.png", + "x_offset": 10, + "y_offset": -11 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_4_3.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_4_4.png", + "x_offset": 9, + "y_offset": -7 + }, + { + "path": "track/raptor/medium_turn_right_bank_gentle_up_4_5.png", + "x_offset": -15, + "y_offset": -15 + }, + { + "path": "track/raptor/s_bend_left_1_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/s_bend_left_1_2.png", + "x_offset": -26, + "y_offset": 6 + }, + { + "path": "track/raptor/s_bend_left_1_3.png", + "x_offset": 11, + "y_offset": 8 + }, + { + "path": "track/raptor/s_bend_left_1_4.png", + "x_offset": -15, + "y_offset": 2 + }, + { + "path": "track/raptor/s_bend_left_2_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/s_bend_left_2_2.png", + "x_offset": -10, + "y_offset": 0 + }, + { + "path": "track/raptor/s_bend_left_2_3.png", + "x_offset": -30, + "y_offset": 16 + }, + { + "path": "track/raptor/s_bend_left_2_4.png", + "x_offset": -22, + "y_offset": 6 + }, + { + "path": "track/raptor/s_bend_right_1_1.png", + "x_offset": -18, + "y_offset": 6 + }, + { + "path": "track/raptor/s_bend_right_1_2.png", + "x_offset": -19, + "y_offset": 16 + }, + { + "path": "track/raptor/s_bend_right_1_3.png", + "x_offset": -16, + "y_offset": 0 + }, + { + "path": "track/raptor/s_bend_right_1_4.png", + "x_offset": -32, + "y_offset": 2 + }, + { + "path": "track/raptor/s_bend_right_2_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/s_bend_right_2_2.png", + "x_offset": -23, + "y_offset": 8 + }, + { + "path": "track/raptor/s_bend_right_2_3.png", + "x_offset": 13, + "y_offset": 6 + }, + { + "path": "track/raptor/s_bend_right_2_4.png", + "x_offset": -12, + "y_offset": 2 + }, + { + "path": "track/raptor/small_helix_left_up_1_1.png", + "x_offset": -6, + "y_offset": -1 + }, + { + "path": "track/raptor/small_helix_left_up_1_2.png", + "x_offset": -17, + "y_offset": -1 + }, + { + "path": "track/raptor/small_helix_left_up_1_3.png", + "x_offset": -32, + "y_offset": 1 + }, + { + "path": "track/raptor/small_helix_left_up_1_4.png", + "x_offset": -17, + "y_offset": -8 + }, + { + "path": "track/raptor/small_helix_left_up_2_1.png", + "x_offset": -19, + "y_offset": 2 + }, + { + "path": "track/raptor/small_helix_left_up_2_2.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/small_helix_left_up_2_3.png", + "x_offset": -32, + "y_offset": -6 + }, + { + "path": "track/raptor/small_helix_left_up_3_1.png", + "x_offset": -7, + "y_offset": 0 + }, + { + "path": "track/raptor/small_helix_left_up_3_2.png", + "x_offset": 23, + "y_offset": 0 + }, + { + "path": "track/raptor/small_helix_left_up_3_3.png", + "x_offset": -2, + "y_offset": -1 + }, + { + "path": "track/raptor/small_helix_left_up_3_4.png", + "x_offset": -7, + "y_offset": -1 + }, + { + "path": "track/raptor/small_helix_left_up_4_1.png", + "x_offset": -26, + "y_offset": 2 + }, + { + "path": "track/raptor/small_helix_left_up_4_2.png", + "x_offset": -8, + "y_offset": 17 + }, + { + "path": "track/raptor/small_helix_left_up_4_3.png", + "x_offset": -19, + "y_offset": 1 + }, + { + "path": "track/raptor/small_helix_right_up_1_1.png", + "x_offset": -19, + "y_offset": 2 + }, + { + "path": "track/raptor/small_helix_right_up_1_2.png", + "x_offset": -6, + "y_offset": 17 + }, + { + "path": "track/raptor/small_helix_right_up_1_3.png", + "x_offset": -26, + "y_offset": 1 + }, + { + "path": "track/raptor/small_helix_right_up_2_1.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/small_helix_right_up_2_2.png", + "x_offset": -32, + "y_offset": 1 + }, + { + "path": "track/raptor/small_helix_right_up_2_3.png", + "x_offset": -2, + "y_offset": -1 + }, + { + "path": "track/raptor/small_helix_right_up_2_4.png", + "x_offset": -17, + "y_offset": -1 + }, + { + "path": "track/raptor/small_helix_right_up_3_1.png", + "x_offset": -32, + "y_offset": 2 + }, + { + "path": "track/raptor/small_helix_right_up_3_2.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/small_helix_right_up_3_3.png", + "x_offset": -20, + "y_offset": -6 + }, + { + "path": "track/raptor/small_helix_right_up_4_1.png", + "x_offset": -6, + "y_offset": -1 + }, + { + "path": "track/raptor/small_helix_right_up_4_2.png", + "x_offset": -8, + "y_offset": -1 + }, + { + "path": "track/raptor/small_helix_right_up_4_3.png", + "x_offset": 23, + "y_offset": 0 + }, + { + "path": "track/raptor/small_helix_right_up_4_4.png", + "x_offset": -8, + "y_offset": -8 + }, + { + "path": "track/raptor/medium_helix_left_up_1_1.png", + "x_offset": -1, + "y_offset": 2 + }, + { + "path": "track/raptor/medium_helix_left_up_1_2.png", + "x_offset": -17, + "y_offset": 3 + }, + { + "path": "track/raptor/medium_helix_left_up_1_3.png", + "x_offset": -27, + "y_offset": 6 + }, + { + "path": "track/raptor/medium_helix_left_up_1_4.png", + "x_offset": 10, + "y_offset": 7 + }, + { + "path": "track/raptor/medium_helix_left_up_1_5.png", + "x_offset": -20, + "y_offset": 7 + }, + { + "path": "track/raptor/medium_helix_left_up_1_6.png", + "x_offset": -17, + "y_offset": -8 + }, + { + "path": "track/raptor/medium_helix_left_up_2_1.png", + "x_offset": -20, + "y_offset": 2 + }, + { + "path": "track/raptor/medium_helix_left_up_2_2.png", + "x_offset": -6, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_helix_left_up_2_3.png", + "x_offset": -32, + "y_offset": 10 + }, + { + "path": "track/raptor/medium_helix_left_up_2_4.png", + "x_offset": -4, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_helix_left_up_2_5.png", + "x_offset": -32, + "y_offset": -6 + }, + { + "path": "track/raptor/medium_helix_left_up_3_1.png", + "x_offset": -16, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_helix_left_up_3_2.png", + "x_offset": 9, + "y_offset": 7 + }, + { + "path": "track/raptor/medium_helix_left_up_3_3.png", + "x_offset": -22, + "y_offset": 7 + }, + { + "path": "track/raptor/medium_helix_left_up_3_4.png", + "x_offset": 15, + "y_offset": 7 + }, + { + "path": "track/raptor/medium_helix_left_up_3_5.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_helix_left_up_3_6.png", + "x_offset": -6, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_helix_left_up_4_1.png", + "x_offset": -18, + "y_offset": 4 + }, + { + "path": "track/raptor/medium_helix_left_up_4_2.png", + "x_offset": -32, + "y_offset": 12 + }, + { + "path": "track/raptor/medium_helix_left_up_4_3.png", + "x_offset": -8, + "y_offset": -5 + }, + { + "path": "track/raptor/medium_helix_left_up_4_4.png", + "x_offset": -28, + "y_offset": 11 + }, + { + "path": "track/raptor/medium_helix_left_up_4_5.png", + "x_offset": -19, + "y_offset": 1 + }, + { + "path": "track/raptor/medium_helix_right_up_1_1.png", + "x_offset": -19, + "y_offset": 4 + }, + { + "path": "track/raptor/medium_helix_right_up_1_2.png", + "x_offset": -22, + "y_offset": 12 + }, + { + "path": "track/raptor/medium_helix_right_up_1_3.png", + "x_offset": -8, + "y_offset": -5 + }, + { + "path": "track/raptor/medium_helix_right_up_1_4.png", + "x_offset": -32, + "y_offset": 11 + }, + { + "path": "track/raptor/medium_helix_right_up_1_5.png", + "x_offset": -12, + "y_offset": 1 + }, + { + "path": "track/raptor/medium_helix_right_up_2_1.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_helix_right_up_2_2.png", + "x_offset": -21, + "y_offset": 7 + }, + { + "path": "track/raptor/medium_helix_right_up_2_3.png", + "x_offset": 7, + "y_offset": 7 + }, + { + "path": "track/raptor/medium_helix_right_up_2_4.png", + "x_offset": -30, + "y_offset": 7 + }, + { + "path": "track/raptor/medium_helix_right_up_2_5.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_helix_right_up_2_6.png", + "x_offset": -17, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_helix_right_up_3_1.png", + "x_offset": -32, + "y_offset": 2 + }, + { + "path": "track/raptor/medium_helix_right_up_3_2.png", + "x_offset": -10, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_helix_right_up_3_3.png", + "x_offset": -32, + "y_offset": 10 + }, + { + "path": "track/raptor/medium_helix_right_up_3_4.png", + "x_offset": -2, + "y_offset": 0 + }, + { + "path": "track/raptor/medium_helix_right_up_3_5.png", + "x_offset": -20, + "y_offset": -6 + }, + { + "path": "track/raptor/medium_helix_right_up_4_1.png", + "x_offset": -6, + "y_offset": 2 + }, + { + "path": "track/raptor/medium_helix_right_up_4_2.png", + "x_offset": -10, + "y_offset": 3 + }, + { + "path": "track/raptor/medium_helix_right_up_4_3.png", + "x_offset": 13, + "y_offset": 6 + }, + { + "path": "track/raptor/medium_helix_right_up_4_4.png", + "x_offset": -22, + "y_offset": 7 + }, + { + "path": "track/raptor/medium_helix_right_up_4_5.png", + "x_offset": 9, + "y_offset": 7 + }, + { + "path": "track/raptor/medium_helix_right_up_4_6.png", + "x_offset": -18, + "y_offset": -8 + }, + { + "path": "track/raptor/barrel_roll_left_1_1.png", + "x_offset": -18, + "y_offset": 8 + }, + { + "path": "track/raptor/barrel_roll_left_1_2.png", + "x_offset": -5, + "y_offset": 6 + }, + { + "path": "track/raptor/barrel_roll_left_1_3.png", + "x_offset": -21, + "y_offset": 22 + }, + { + "path": "track/raptor/barrel_roll_left_1_4.png", + "x_offset": -20, + "y_offset": -12 + }, + { + "path": "track/raptor/barrel_roll_left_1_5.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/barrel_roll_left_1_6.png", + "x_offset": -9, + "y_offset": -21 + }, + { + "path": "track/raptor/barrel_roll_left_2_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/barrel_roll_left_2_2.png", + "x_offset": -17, + "y_offset": 8 + }, + { + "path": "track/raptor/barrel_roll_left_2_3.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/barrel_roll_left_2_4.png", + "x_offset": -28, + "y_offset": -2 + }, + { + "path": "track/raptor/barrel_roll_left_2_5.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/barrel_roll_left_2_6.png", + "x_offset": -32, + "y_offset": -13 + }, + { + "path": "track/raptor/barrel_roll_left_3_1.png", + "x_offset": -28, + "y_offset": 1 + }, + { + "path": "track/raptor/barrel_roll_left_3_2.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/barrel_roll_left_3_3.png", + "x_offset": -26, + "y_offset": -8 + }, + { + "path": "track/raptor/barrel_roll_left_3_4.png", + "x_offset": -27, + "y_offset": -6 + }, + { + "path": "track/raptor/barrel_roll_left_3_5.png", + "x_offset": 2, + "y_offset": -14 + }, + { + "path": "track/raptor/barrel_roll_left_3_6.png", + "x_offset": -18, + "y_offset": -19 + }, + { + "path": "track/raptor/barrel_roll_left_4_1.png", + "x_offset": -11, + "y_offset": -9 + }, + { + "path": "track/raptor/barrel_roll_left_4_2.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/barrel_roll_left_4_3.png", + "x_offset": -11, + "y_offset": -19 + }, + { + "path": "track/raptor/barrel_roll_left_4_4.png", + "x_offset": -10, + "y_offset": -21 + }, + { + "path": "track/raptor/barrel_roll_left_4_5.png", + "x_offset": 8, + "y_offset": -7 + }, + { + "path": "track/raptor/barrel_roll_left_4_6.png", + "x_offset": -18, + "y_offset": -21 + }, + { + "path": "track/raptor/barrel_roll_right_1_1.png", + "x_offset": -18, + "y_offset": -9 + }, + { + "path": "track/raptor/barrel_roll_right_1_2.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/barrel_roll_right_1_3.png", + "x_offset": -25, + "y_offset": -19 + }, + { + "path": "track/raptor/barrel_roll_right_1_4.png", + "x_offset": 3, + "y_offset": -21 + }, + { + "path": "track/raptor/barrel_roll_right_1_5.png", + "x_offset": -22, + "y_offset": -14 + }, + { + "path": "track/raptor/barrel_roll_right_1_6.png", + "x_offset": -23, + "y_offset": -21 + }, + { + "path": "track/raptor/barrel_roll_right_2_1.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/barrel_roll_right_2_2.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/barrel_roll_right_2_3.png", + "x_offset": -6, + "y_offset": -8 + }, + { + "path": "track/raptor/barrel_roll_right_2_4.png", + "x_offset": 17, + "y_offset": -6 + }, + { + "path": "track/raptor/barrel_roll_right_2_5.png", + "x_offset": -6, + "y_offset": -14 + }, + { + "path": "track/raptor/barrel_roll_right_2_6.png", + "x_offset": -6, + "y_offset": -19 + }, + { + "path": "track/raptor/barrel_roll_right_3_1.png", + "x_offset": -2, + "y_offset": 2 + }, + { + "path": "track/raptor/barrel_roll_right_3_2.png", + "x_offset": -4, + "y_offset": 8 + }, + { + "path": "track/raptor/barrel_roll_right_3_3.png", + "x_offset": 6, + "y_offset": -2 + }, + { + "path": "track/raptor/barrel_roll_right_3_4.png", + "x_offset": 0, + "y_offset": -2 + }, + { + "path": "track/raptor/barrel_roll_right_3_5.png", + "x_offset": -12, + "y_offset": -2 + }, + { + "path": "track/raptor/barrel_roll_right_3_6.png", + "x_offset": -18, + "y_offset": -13 + }, + { + "path": "track/raptor/barrel_roll_right_4_1.png", + "x_offset": -11, + "y_offset": 8 + }, + { + "path": "track/raptor/barrel_roll_right_4_2.png", + "x_offset": -19, + "y_offset": 6 + }, + { + "path": "track/raptor/barrel_roll_right_4_3.png", + "x_offset": -9, + "y_offset": 1 + }, + { + "path": "track/raptor/barrel_roll_right_4_4.png", + "x_offset": -26, + "y_offset": -12 + }, + { + "path": "track/raptor/barrel_roll_right_4_5.png", + "x_offset": 0, + "y_offset": 0 + }, + { + "path": "track/raptor/barrel_roll_right_4_6.png", + "x_offset": -18, + "y_offset": -21 + }, + { + "path": "track/raptor/half_loop_1_1.png", + "x_offset": -24, + "y_offset": -18 + }, + { + "path": "track/raptor/half_loop_1_2.png", + "x_offset": -19, + "y_offset": -38 + }, + { + "path": "track/raptor/half_loop_1_3.png", + "x_offset": -12, + "y_offset": -82 + }, + { + "path": "track/raptor/half_loop_1_4.png", + "x_offset": -18, + "y_offset": 23 + }, + { + "path": "track/raptor/half_loop_2_1.png", + "x_offset": -12, + "y_offset": -4 + }, + { + "path": "track/raptor/half_loop_2_2.png", + "x_offset": 1, + "y_offset": -31 + }, + { + "path": "track/raptor/half_loop_2_3.png", + "x_offset": -38, + "y_offset": -113 + }, + { + "path": "track/raptor/half_loop_2_4.png", + "x_offset": -18, + "y_offset": 11 + }, + { + "path": "track/raptor/half_loop_3_1.png", + "x_offset": -26, + "y_offset": -4 + }, + { + "path": "track/raptor/half_loop_3_2.png", + "x_offset": -25, + "y_offset": -27 + }, + { + "path": "track/raptor/half_loop_3_3.png", + "x_offset": 2, + "y_offset": -120 + }, + { + "path": "track/raptor/half_loop_3_4.png", + "x_offset": -22, + "y_offset": 3 + }, + { + "path": "track/raptor/half_loop_4_1.png", + "x_offset": -12, + "y_offset": -18 + }, + { + "path": "track/raptor/half_loop_4_2.png", + "x_offset": -12, + "y_offset": -42 + }, + { + "path": "track/raptor/half_loop_4_3.png", + "x_offset": 8, + "y_offset": -91 + }, + { + "path": "track/raptor/half_loop_4_4.png", + "x_offset": 5, + "y_offset": 15 + }, + { + "path": "track/raptor/flat_to_steep_up_1_1.png", + "x_offset": -18, + "y_offset": -2 + }, + { + "path": "track/raptor/flat_to_steep_up_1_2.png", + "x_offset": -19, + "y_offset": -17 + }, + { + "path": "track/raptor/flat_to_steep_up_1_3.png", + "x_offset": -17, + "y_offset": -25 + }, + { + "path": "track/raptor/flat_to_steep_up_1_4.png", + "x_offset": -18, + "y_offset": -46 + }, + { + "path": "track/raptor/flat_to_steep_up_2_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_steep_up_2_2.png", + "x_offset": -24, + "y_offset": -4 + }, + { + "path": "track/raptor/flat_to_steep_up_2_3.png", + "x_offset": -25, + "y_offset": -6 + }, + { + "path": "track/raptor/flat_to_steep_up_2_4.png", + "x_offset": -20, + "y_offset": -30 + }, + { + "path": "track/raptor/flat_to_steep_up_3_1.png", + "x_offset": -20, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_steep_up_3_2.png", + "x_offset": -22, + "y_offset": -2 + }, + { + "path": "track/raptor/flat_to_steep_up_3_3.png", + "x_offset": -23, + "y_offset": -13 + }, + { + "path": "track/raptor/flat_to_steep_up_3_4.png", + "x_offset": -21, + "y_offset": -30 + }, + { + "path": "track/raptor/flat_to_steep_up_4_1.png", + "x_offset": -19, + "y_offset": -2 + }, + { + "path": "track/raptor/flat_to_steep_up_4_2.png", + "x_offset": -21, + "y_offset": -17 + }, + { + "path": "track/raptor/flat_to_steep_up_4_3.png", + "x_offset": -20, + "y_offset": -25 + }, + { + "path": "track/raptor/flat_to_steep_up_4_4.png", + "x_offset": -21, + "y_offset": -46 + }, + { + "path": "track/raptor/steep_to_flat_up_1_1.png", + "x_offset": -18, + "y_offset": -41 + }, + { + "path": "track/raptor/steep_to_flat_up_1_2.png", + "x_offset": -20, + "y_offset": -26 + }, + { + "path": "track/raptor/steep_to_flat_up_1_3.png", + "x_offset": -20, + "y_offset": -18 + }, + { + "path": "track/raptor/steep_to_flat_up_1_4.png", + "x_offset": -18, + "y_offset": -6 + }, + { + "path": "track/raptor/steep_to_flat_up_2_1.png", + "x_offset": -18, + "y_offset": -26 + }, + { + "path": "track/raptor/steep_to_flat_up_2_2.png", + "x_offset": -18, + "y_offset": -13 + }, + { + "path": "track/raptor/steep_to_flat_up_2_3.png", + "x_offset": -13, + "y_offset": -5 + }, + { + "path": "track/raptor/steep_to_flat_up_2_4.png", + "x_offset": -14, + "y_offset": -1 + }, + { + "path": "track/raptor/steep_to_flat_up_3_1.png", + "x_offset": -14, + "y_offset": -25 + }, + { + "path": "track/raptor/steep_to_flat_up_3_2.png", + "x_offset": -13, + "y_offset": -13 + }, + { + "path": "track/raptor/steep_to_flat_up_3_3.png", + "x_offset": -16, + "y_offset": -5 + }, + { + "path": "track/raptor/steep_to_flat_up_3_4.png", + "x_offset": -18, + "y_offset": -3 + }, + { + "path": "track/raptor/steep_to_flat_up_4_1.png", + "x_offset": -18, + "y_offset": -40 + }, + { + "path": "track/raptor/steep_to_flat_up_4_2.png", + "x_offset": -18, + "y_offset": -26 + }, + { + "path": "track/raptor/steep_to_flat_up_4_3.png", + "x_offset": -17, + "y_offset": -16 + }, + { + "path": "track/raptor/steep_to_flat_up_4_4.png", + "x_offset": -18, + "y_offset": -6 + }, + { + "path": "track/raptor/quarter_loop_up_1_1.png", + "x_offset": -17, + "y_offset": -52 + }, + { + "path": "track/raptor/quarter_loop_up_1_2.png", + "x_offset": 0, + "y_offset": -30 + }, + { + "path": "track/raptor/quarter_loop_up_1_3.png", + "x_offset": -18, + "y_offset": -12 + }, + { + "path": "track/raptor/quarter_loop_up_2_1.png", + "x_offset": -22, + "y_offset": -77 + }, + { + "path": "track/raptor/quarter_loop_up_2_2.png", + "x_offset": -32, + "y_offset": -66 + }, + { + "path": "track/raptor/quarter_loop_up_2_3.png", + "x_offset": -18, + "y_offset": -21 + }, + { + "path": "track/raptor/quarter_loop_up_3_1.png", + "x_offset": -6, + "y_offset": -76 + }, + { + "path": "track/raptor/quarter_loop_up_3_2.png", + "x_offset": -17, + "y_offset": -68 + }, + { + "path": "track/raptor/quarter_loop_up_3_3.png", + "x_offset": 0, + "y_offset": -21 + }, + { + "path": "track/raptor/quarter_loop_up_4_1.png", + "x_offset": -6, + "y_offset": -52 + }, + { + "path": "track/raptor/quarter_loop_up_4_2.png", + "x_offset": -20, + "y_offset": -30 + }, + { + "path": "track/raptor/quarter_loop_up_4_3.png", + "x_offset": -32, + "y_offset": -12 + }, + { + "path": "track/raptor/corkscrew_left_1_1.png", + "x_offset": -18, + "y_offset": -32 + }, + { + "path": "track/raptor/corkscrew_left_1_2.png", + "x_offset": -17, + "y_offset": -29 + }, + { + "path": "track/raptor/corkscrew_left_1_3.png", + "x_offset": -18, + "y_offset": -21 + }, + { + "path": "track/raptor/corkscrew_left_2_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/corkscrew_left_2_2.png", + "x_offset": -32, + "y_offset": -28 + }, + { + "path": "track/raptor/corkscrew_left_2_3.png", + "x_offset": -18, + "y_offset": -21 + }, + { + "path": "track/raptor/corkscrew_left_3_1.png", + "x_offset": -26, + "y_offset": -4 + }, + { + "path": "track/raptor/corkscrew_left_3_2.png", + "x_offset": 5, + "y_offset": -14 + }, + { + "path": "track/raptor/corkscrew_left_3_3.png", + "x_offset": -19, + "y_offset": -11 + }, + { + "path": "track/raptor/corkscrew_left_4_1.png", + "x_offset": -29, + "y_offset": -32 + }, + { + "path": "track/raptor/corkscrew_left_4_2.png", + "x_offset": -27, + "y_offset": -14 + }, + { + "path": "track/raptor/corkscrew_left_4_3.png", + "x_offset": -18, + "y_offset": -11 + }, + { + "path": "track/raptor/corkscrew_right_1_1.png", + "x_offset": -18, + "y_offset": -32 + }, + { + "path": "track/raptor/corkscrew_right_1_2.png", + "x_offset": -6, + "y_offset": -14 + }, + { + "path": "track/raptor/corkscrew_right_1_3.png", + "x_offset": -19, + "y_offset": -11 + }, + { + "path": "track/raptor/corkscrew_right_2_1.png", + "x_offset": -18, + "y_offset": -4 + }, + { + "path": "track/raptor/corkscrew_right_2_2.png", + "x_offset": -13, + "y_offset": -14 + }, + { + "path": "track/raptor/corkscrew_right_2_3.png", + "x_offset": -18, + "y_offset": -11 + }, + { + "path": "track/raptor/corkscrew_right_3_1.png", + "x_offset": -20, + "y_offset": -2 + }, + { + "path": "track/raptor/corkscrew_right_3_2.png", + "x_offset": -18, + "y_offset": -28 + }, + { + "path": "track/raptor/corkscrew_right_3_3.png", + "x_offset": -18, + "y_offset": -21 + }, + { + "path": "track/raptor/corkscrew_right_4_1.png", + "x_offset": -22, + "y_offset": -32 + }, + { + "path": "track/raptor/corkscrew_right_4_2.png", + "x_offset": 5, + "y_offset": -29 + }, + { + "path": "track/raptor/corkscrew_right_4_3.png", + "x_offset": -20, + "y_offset": -21 + }, + { + "path": "track/raptor/small_turn_left_bank_to_gentle_up_1_1.png", + "x_offset": -23, + "y_offset": -16 + }, + { + "path": "track/raptor/small_turn_left_bank_to_gentle_up_1_2.png", + "x_offset": -13, + "y_offset": -9 + }, + { + "path": "track/raptor/small_turn_left_bank_to_gentle_up_2_1.png", + "x_offset": 26, + "y_offset": 0 + }, + { + "path": "track/raptor/small_turn_left_bank_to_gentle_up_2_2.png", + "x_offset": -13, + "y_offset": -2 + }, + { + "path": "track/raptor/small_turn_left_bank_to_gentle_up_2_3.png", + "x_offset": -38, + "y_offset": -9 + }, + { + "path": "track/raptor/small_turn_left_bank_to_gentle_up_3_1.png", + "x_offset": -14, + "y_offset": -3 + }, + { + "path": "track/raptor/small_turn_left_bank_to_gentle_up_3_2.png", + "x_offset": -2, + "y_offset": 0 + }, + { + "path": "track/raptor/small_turn_left_bank_to_gentle_up_4_1.png", + "x_offset": -26, + "y_offset": -5 + }, + { + "path": "track/raptor/small_turn_left_bank_to_gentle_up_4_2.png", + "x_offset": -25, + "y_offset": 6 + }, + { + "path": "track/raptor/small_turn_right_bank_to_gentle_up_1_1.png", + "x_offset": -25, + "y_offset": -5 + }, + { + "path": "track/raptor/small_turn_right_bank_to_gentle_up_1_2.png", + "x_offset": -26, + "y_offset": 6 + }, + { + "path": "track/raptor/small_turn_right_bank_to_gentle_up_2_1.png", + "x_offset": -11, + "y_offset": -3 + }, + { + "path": "track/raptor/small_turn_right_bank_to_gentle_up_2_2.png", + "x_offset": -24, + "y_offset": 0 + }, + { + "path": "track/raptor/small_turn_right_bank_to_gentle_up_3_1.png", + "x_offset": -38, + "y_offset": 0 + }, + { + "path": "track/raptor/small_turn_right_bank_to_gentle_up_3_2.png", + "x_offset": -38, + "y_offset": -2 + }, + { + "path": "track/raptor/small_turn_right_bank_to_gentle_up_3_3.png", + "x_offset": -13, + "y_offset": -9 + }, + { + "path": "track/raptor/small_turn_right_bank_to_gentle_up_4_1.png", + "x_offset": -2, + "y_offset": -16 + }, + { + "path": "track/raptor/small_turn_right_bank_to_gentle_up_4_2.png", + "x_offset": -14, + "y_offset": -9 + }, + { + "path": "track/raptor/large_half_loop_left_1_1.png", + "x_offset": -18, + "y_offset": -22 + }, + { + "path": "track/raptor/large_half_loop_left_1_2.png", + "x_offset": -16, + "y_offset": -36 + }, + { + "path": "track/raptor/large_half_loop_left_1_3.png", + "x_offset": -16, + "y_offset": -64 + }, + { + "path": "track/raptor/large_half_loop_left_1_4.png", + "x_offset": -20, + "y_offset": -80 + }, + { + "path": "track/raptor/large_half_loop_left_1_5.png", + "x_offset": -12, + "y_offset": -65 + }, + { + "path": "track/raptor/large_half_loop_left_1_6.png", + "x_offset": -8, + "y_offset": -172 + }, + { + "path": "track/raptor/large_half_loop_left_1_7.png", + "x_offset": -18, + "y_offset": -9 + }, + { + "path": "track/raptor/large_half_loop_left_2_1.png", + "x_offset": -18, + "y_offset": -1 + }, + { + "path": "track/raptor/large_half_loop_left_2_2.png", + "x_offset": -6, + "y_offset": -4 + }, + { + "path": "track/raptor/large_half_loop_left_2_3.png", + "x_offset": -9, + "y_offset": -22 + }, + { + "path": "track/raptor/large_half_loop_left_2_4.png", + "x_offset": -8, + "y_offset": -69 + }, + { + "path": "track/raptor/large_half_loop_left_2_5.png", + "x_offset": -32, + "y_offset": -118 + }, + { + "path": "track/raptor/large_half_loop_left_2_6.png", + "x_offset": -22, + "y_offset": -191 + }, + { + "path": "track/raptor/large_half_loop_left_2_7.png", + "x_offset": -18, + "y_offset": -21 + }, + { + "path": "track/raptor/large_half_loop_left_3_1.png", + "x_offset": -24, + "y_offset": 1 + }, + { + "path": "track/raptor/large_half_loop_left_3_2.png", + "x_offset": -29, + "y_offset": -5 + }, + { + "path": "track/raptor/large_half_loop_left_3_3.png", + "x_offset": -24, + "y_offset": -32 + }, + { + "path": "track/raptor/large_half_loop_left_3_4.png", + "x_offset": -3, + "y_offset": -56 + }, + { + "path": "track/raptor/large_half_loop_left_3_5.png", + "x_offset": -3, + "y_offset": -111 + }, + { + "path": "track/raptor/large_half_loop_left_3_6.png", + "x_offset": -19, + "y_offset": -191 + }, + { + "path": "track/raptor/large_half_loop_left_3_7.png", + "x_offset": -25, + "y_offset": -21 + }, + { + "path": "track/raptor/large_half_loop_left_4_1.png", + "x_offset": -21, + "y_offset": -11 + }, + { + "path": "track/raptor/large_half_loop_left_4_2.png", + "x_offset": -27, + "y_offset": -15 + }, + { + "path": "track/raptor/large_half_loop_left_4_3.png", + "x_offset": -32, + "y_offset": -40 + }, + { + "path": "track/raptor/large_half_loop_left_4_4.png", + "x_offset": -32, + "y_offset": -69 + }, + { + "path": "track/raptor/large_half_loop_left_4_5.png", + "x_offset": 20, + "y_offset": -58 + }, + { + "path": "track/raptor/large_half_loop_left_4_6.png", + "x_offset": -12, + "y_offset": -176 + }, + { + "path": "track/raptor/large_half_loop_left_4_7.png", + "x_offset": -18, + "y_offset": -12 + }, + { + "path": "track/raptor/large_half_loop_right_1_1.png", + "x_offset": -18, + "y_offset": -11 + }, + { + "path": "track/raptor/large_half_loop_right_1_2.png", + "x_offset": -16, + "y_offset": -15 + }, + { + "path": "track/raptor/large_half_loop_right_1_3.png", + "x_offset": -10, + "y_offset": -40 + }, + { + "path": "track/raptor/large_half_loop_right_1_4.png", + "x_offset": 0, + "y_offset": -69 + }, + { + "path": "track/raptor/large_half_loop_right_1_5.png", + "x_offset": -32, + "y_offset": -58 + }, + { + "path": "track/raptor/large_half_loop_right_1_6.png", + "x_offset": -17, + "y_offset": -176 + }, + { + "path": "track/raptor/large_half_loop_right_1_7.png", + "x_offset": -18, + "y_offset": -12 + }, + { + "path": "track/raptor/large_half_loop_right_2_1.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/large_half_loop_right_2_2.png", + "x_offset": -10, + "y_offset": -5 + }, + { + "path": "track/raptor/large_half_loop_right_2_3.png", + "x_offset": -5, + "y_offset": -32 + }, + { + "path": "track/raptor/large_half_loop_right_2_4.png", + "x_offset": -14, + "y_offset": -56 + }, + { + "path": "track/raptor/large_half_loop_right_2_5.png", + "x_offset": -19, + "y_offset": -111 + }, + { + "path": "track/raptor/large_half_loop_right_2_6.png", + "x_offset": -13, + "y_offset": -191 + }, + { + "path": "track/raptor/large_half_loop_right_2_7.png", + "x_offset": -18, + "y_offset": -21 + }, + { + "path": "track/raptor/large_half_loop_right_3_1.png", + "x_offset": -26, + "y_offset": -1 + }, + { + "path": "track/raptor/large_half_loop_right_3_2.png", + "x_offset": -26, + "y_offset": -4 + }, + { + "path": "track/raptor/large_half_loop_right_3_3.png", + "x_offset": -28, + "y_offset": -22 + }, + { + "path": "track/raptor/large_half_loop_right_3_4.png", + "x_offset": -32, + "y_offset": -69 + }, + { + "path": "track/raptor/large_half_loop_right_3_5.png", + "x_offset": 20, + "y_offset": -118 + }, + { + "path": "track/raptor/large_half_loop_right_3_6.png", + "x_offset": 0, + "y_offset": -191 + }, + { + "path": "track/raptor/large_half_loop_right_3_7.png", + "x_offset": -15, + "y_offset": -21 + }, + { + "path": "track/raptor/large_half_loop_right_4_1.png", + "x_offset": -21, + "y_offset": -22 + }, + { + "path": "track/raptor/large_half_loop_right_4_2.png", + "x_offset": -22, + "y_offset": -36 + }, + { + "path": "track/raptor/large_half_loop_right_4_3.png", + "x_offset": -18, + "y_offset": -64 + }, + { + "path": "track/raptor/large_half_loop_right_4_4.png", + "x_offset": -2, + "y_offset": -80 + }, + { + "path": "track/raptor/large_half_loop_right_4_5.png", + "x_offset": -3, + "y_offset": -65 + }, + { + "path": "track/raptor/large_half_loop_right_4_6.png", + "x_offset": -27, + "y_offset": -172 + }, + { + "path": "track/raptor/large_half_loop_right_4_7.png", + "x_offset": -27, + "y_offset": -9 + }, + { + "path": "track/raptor/small_flat_to_steep_up_1.png", + "x_offset": -18, + "y_offset": -22 + }, + { + "path": "track/raptor/small_flat_to_steep_up_2_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/small_flat_to_steep_up_2_2.png", + "x_offset": -13, + "y_offset": -6 + }, + { + "path": "track/raptor/small_flat_to_steep_up_3_1.png", + "x_offset": -3, + "y_offset": 2 + }, + { + "path": "track/raptor/small_flat_to_steep_up_3_2.png", + "x_offset": -21, + "y_offset": -6 + }, + { + "path": "track/raptor/small_flat_to_steep_up_4.png", + "x_offset": -21, + "y_offset": -22 + }, + { + "path": "track/raptor/small_steep_to_flat_up_1.png", + "x_offset": -18, + "y_offset": -22 + }, + { + "path": "track/raptor/small_steep_to_flat_up_2_1.png", + "x_offset": -10, + "y_offset": -10 + }, + { + "path": "track/raptor/small_steep_to_flat_up_2_2.png", + "x_offset": -18, + "y_offset": -5 + }, + { + "path": "track/raptor/small_steep_to_flat_up_3_1.png", + "x_offset": -18, + "y_offset": -10 + }, + { + "path": "track/raptor/small_steep_to_flat_up_3_2.png", + "x_offset": -4, + "y_offset": -5 + }, + { + "path": "track/raptor/small_steep_to_flat_up_4.png", + "x_offset": -18, + "y_offset": -22 + }, + { + "path": "track/raptor/small_flat_to_steep_up_diag_1.png", + "x_offset": -32, + "y_offset": -15 + }, + { + "path": "track/raptor/small_flat_to_steep_up_diag_2.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/small_flat_to_steep_up_diag_3.png", + "x_offset": -32, + "y_offset": -15 + }, + { + "path": "track/raptor/small_flat_to_steep_up_diag_4.png", + "x_offset": -3, + "y_offset": -30 + }, + { + "path": "track/raptor/small_steep_to_flat_up_diag_1.png", + "x_offset": -32, + "y_offset": -15 + }, + { + "path": "track/raptor/small_steep_to_flat_up_diag_2.png", + "x_offset": -3, + "y_offset": -10 + }, + { + "path": "track/raptor/small_steep_to_flat_up_diag_3.png", + "x_offset": -32, + "y_offset": -15 + }, + { + "path": "track/raptor/small_steep_to_flat_up_diag_4.png", + "x_offset": -3, + "y_offset": -30 + }, + { + "path": "track/raptor/flat_lift_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_lift_2.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_lift_3.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_lift_4.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_gentle_up_lift_1.png", + "x_offset": -18, + "y_offset": -6 + }, + { + "path": "track/raptor/flat_to_gentle_up_lift_2.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_gentle_up_lift_3.png", + "x_offset": -19, + "y_offset": 2 + }, + { + "path": "track/raptor/flat_to_gentle_up_lift_4.png", + "x_offset": -19, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_to_flat_lift_1.png", + "x_offset": -18, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_up_to_flat_lift_2.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_flat_lift_3.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_up_to_flat_lift_4.png", + "x_offset": -18, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_lift_1.png", + "x_offset": -18, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_lift_2.png", + "x_offset": -18, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_lift_3.png", + "x_offset": -19, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_lift_4.png", + "x_offset": -19, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_to_steep_up_lift_1.png", + "x_offset": -18, + "y_offset": -30 + }, + { + "path": "track/raptor/gentle_to_steep_up_lift_2_1.png", + "x_offset": -18, + "y_offset": -1 + }, + { + "path": "track/raptor/gentle_to_steep_up_lift_2_2.png", + "x_offset": -17, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_to_steep_up_lift_3_1.png", + "x_offset": 0, + "y_offset": -1 + }, + { + "path": "track/raptor/gentle_to_steep_up_lift_3_2.png", + "x_offset": -21, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_to_steep_up_lift_4.png", + "x_offset": -21, + "y_offset": -30 + }, + { + "path": "track/raptor/steep_to_gentle_up_lift_1.png", + "x_offset": -18, + "y_offset": -30 + }, + { + "path": "track/raptor/steep_to_gentle_up_lift_2_1.png", + "x_offset": -5, + "y_offset": -15 + }, + { + "path": "track/raptor/steep_to_gentle_up_lift_2_2.png", + "x_offset": -18, + "y_offset": -10 + }, + { + "path": "track/raptor/steep_to_gentle_up_lift_3_1.png", + "x_offset": -19, + "y_offset": -15 + }, + { + "path": "track/raptor/steep_to_gentle_up_lift_3_2.png", + "x_offset": -12, + "y_offset": -10 + }, + { + "path": "track/raptor/steep_to_gentle_up_lift_4.png", + "x_offset": -19, + "y_offset": -30 + }, + { + "path": "track/raptor/steep_lift_1.png", + "x_offset": -18, + "y_offset": -62 + }, + { + "path": "track/raptor/steep_lift_2.png", + "x_offset": -18, + "y_offset": -46 + }, + { + "path": "track/raptor/steep_lift_3.png", + "x_offset": -21, + "y_offset": -46 + }, + { + "path": "track/raptor/steep_lift_4.png", + "x_offset": -21, + "y_offset": -62 + }, + { + "path": "track/raptor/flat_diag_lift_1.png", + "x_offset": -32, + "y_offset": 9 + }, + { + "path": "track/raptor/flat_diag_lift_2.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/flat_diag_lift_3.png", + "x_offset": -32, + "y_offset": 9 + }, + { + "path": "track/raptor/flat_diag_lift_4.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/flat_to_gentle_up_diag_lift_1.png", + "x_offset": -32, + "y_offset": 1 + }, + { + "path": "track/raptor/flat_to_gentle_up_diag_lift_2.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/flat_to_gentle_up_diag_lift_3.png", + "x_offset": -33, + "y_offset": 1 + }, + { + "path": "track/raptor/flat_to_gentle_up_diag_lift_4.png", + "x_offset": -3, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_to_flat_up_diag_lift_1.png", + "x_offset": -32, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_to_flat_up_diag_lift_2.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_to_flat_up_diag_lift_3.png", + "x_offset": -32, + "y_offset": 1 + }, + { + "path": "track/raptor/gentle_to_flat_up_diag_lift_4.png", + "x_offset": -3, + "y_offset": -14 + }, + { + "path": "track/raptor/gentle_diag_lift_1.png", + "x_offset": -32, + "y_offset": -7 + }, + { + "path": "track/raptor/gentle_diag_lift_2.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_diag_lift_3.png", + "x_offset": -32, + "y_offset": -7 + }, + { + "path": "track/raptor/gentle_diag_lift_4.png", + "x_offset": -3, + "y_offset": -22 + }, + { + "path": "track/raptor/gentle_to_steep_up_diag_lift_1.png", + "x_offset": -32, + "y_offset": -23 + }, + { + "path": "track/raptor/gentle_to_steep_up_diag_lift_2.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/gentle_to_steep_up_diag_lift_3.png", + "x_offset": -32, + "y_offset": -23 + }, + { + "path": "track/raptor/gentle_to_steep_up_diag_lift_4.png", + "x_offset": -3, + "y_offset": -38 + }, + { + "path": "track/raptor/steep_to_gentle_up_diag_lift_1.png", + "x_offset": -32, + "y_offset": -23 + }, + { + "path": "track/raptor/steep_to_gentle_up_diag_lift_2.png", + "x_offset": -3, + "y_offset": -11 + }, + { + "path": "track/raptor/steep_to_gentle_up_diag_lift_3.png", + "x_offset": -32, + "y_offset": -23 + }, + { + "path": "track/raptor/steep_to_gentle_up_diag_lift_4.png", + "x_offset": -3, + "y_offset": -38 + }, + { + "path": "track/raptor/steep_diag_lift_1.png", + "x_offset": -32, + "y_offset": -55 + }, + { + "path": "track/raptor/steep_diag_lift_2.png", + "x_offset": -3, + "y_offset": -38 + }, + { + "path": "track/raptor/steep_diag_lift_3.png", + "x_offset": -32, + "y_offset": -55 + }, + { + "path": "track/raptor/steep_diag_lift_4.png", + "x_offset": -3, + "y_offset": -70 + }, + { + "path": "track/raptor/small_flat_to_steep_up_lift_1.png", + "x_offset": -18, + "y_offset": -22 + }, + { + "path": "track/raptor/small_flat_to_steep_up_lift_2_1.png", + "x_offset": -18, + "y_offset": 2 + }, + { + "path": "track/raptor/small_flat_to_steep_up_lift_2_2.png", + "x_offset": -13, + "y_offset": -6 + }, + { + "path": "track/raptor/small_flat_to_steep_up_lift_3_1.png", + "x_offset": -5, + "y_offset": 2 + }, + { + "path": "track/raptor/small_flat_to_steep_up_lift_3_2.png", + "x_offset": -21, + "y_offset": -6 + }, + { + "path": "track/raptor/small_flat_to_steep_up_lift_4.png", + "x_offset": -21, + "y_offset": -22 + }, + { + "path": "track/raptor/small_steep_to_flat_up_lift_1.png", + "x_offset": -18, + "y_offset": -22 + }, + { + "path": "track/raptor/small_steep_to_flat_up_lift_2_1.png", + "x_offset": -10, + "y_offset": -10 + }, + { + "path": "track/raptor/small_steep_to_flat_up_lift_2_2.png", + "x_offset": -18, + "y_offset": -5 + }, + { + "path": "track/raptor/small_steep_to_flat_up_lift_3_1.png", + "x_offset": -18, + "y_offset": -10 + }, + { + "path": "track/raptor/small_steep_to_flat_up_lift_3_2.png", + "x_offset": -4, + "y_offset": -5 + }, + { + "path": "track/raptor/small_steep_to_flat_up_lift_4.png", + "x_offset": -18, + "y_offset": -22 + }, + { + "path": "track/raptor/small_flat_to_steep_up_diag_lift_1.png", + "x_offset": -32, + "y_offset": -15 + }, + { + "path": "track/raptor/small_flat_to_steep_up_diag_lift_2.png", + "x_offset": -3, + "y_offset": -6 + }, + { + "path": "track/raptor/small_flat_to_steep_up_diag_lift_3.png", + "x_offset": -32, + "y_offset": -15 + }, + { + "path": "track/raptor/small_flat_to_steep_up_diag_lift_4.png", + "x_offset": -3, + "y_offset": -30 + }, + { + "path": "track/raptor/small_steep_to_flat_up_diag_lift_1.png", + "x_offset": -32, + "y_offset": -15 + }, + { + "path": "track/raptor/small_steep_to_flat_up_diag_lift_2.png", + "x_offset": -3, + "y_offset": -10 + }, + { + "path": "track/raptor/small_steep_to_flat_up_diag_lift_3.png", + "x_offset": -32, + "y_offset": -15 + }, + { + "path": "track/raptor/small_steep_to_flat_up_diag_lift_4.png", + "x_offset": -3, + "y_offset": -30 } ] diff --git a/resources/g2/track/raptor/barrel_roll_left_1_1.png b/resources/g2/track/raptor/barrel_roll_left_1_1.png new file mode 100644 index 0000000000..57e6fab4f6 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_1_1.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_1_2.png b/resources/g2/track/raptor/barrel_roll_left_1_2.png new file mode 100644 index 0000000000..d34323cb71 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_1_2.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_1_3.png b/resources/g2/track/raptor/barrel_roll_left_1_3.png new file mode 100644 index 0000000000..1992817fd7 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_1_3.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_1_4.png b/resources/g2/track/raptor/barrel_roll_left_1_4.png new file mode 100644 index 0000000000..b004e7d784 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_1_4.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_1_5.png b/resources/g2/track/raptor/barrel_roll_left_1_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_1_5.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_1_6.png b/resources/g2/track/raptor/barrel_roll_left_1_6.png new file mode 100644 index 0000000000..39e5de9e44 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_1_6.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_2_1.png b/resources/g2/track/raptor/barrel_roll_left_2_1.png new file mode 100644 index 0000000000..91b90e8966 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_2_1.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_2_2.png b/resources/g2/track/raptor/barrel_roll_left_2_2.png new file mode 100644 index 0000000000..3ec5439241 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_2_2.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_2_3.png b/resources/g2/track/raptor/barrel_roll_left_2_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_2_3.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_2_4.png b/resources/g2/track/raptor/barrel_roll_left_2_4.png new file mode 100644 index 0000000000..6e3325ff59 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_2_4.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_2_5.png b/resources/g2/track/raptor/barrel_roll_left_2_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_2_5.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_2_6.png b/resources/g2/track/raptor/barrel_roll_left_2_6.png new file mode 100644 index 0000000000..323b43e7e3 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_2_6.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_3_1.png b/resources/g2/track/raptor/barrel_roll_left_3_1.png new file mode 100644 index 0000000000..77e1ecbce1 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_3_1.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_3_2.png b/resources/g2/track/raptor/barrel_roll_left_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_3_2.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_3_3.png b/resources/g2/track/raptor/barrel_roll_left_3_3.png new file mode 100644 index 0000000000..16e9a8aedd Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_3_3.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_3_4.png b/resources/g2/track/raptor/barrel_roll_left_3_4.png new file mode 100644 index 0000000000..4a4374afa4 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_3_4.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_3_5.png b/resources/g2/track/raptor/barrel_roll_left_3_5.png new file mode 100644 index 0000000000..725198a750 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_3_5.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_3_6.png b/resources/g2/track/raptor/barrel_roll_left_3_6.png new file mode 100644 index 0000000000..d80c633f32 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_3_6.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_4_1.png b/resources/g2/track/raptor/barrel_roll_left_4_1.png new file mode 100644 index 0000000000..0d6a3af466 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_4_1.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_4_2.png b/resources/g2/track/raptor/barrel_roll_left_4_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_4_2.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_4_3.png b/resources/g2/track/raptor/barrel_roll_left_4_3.png new file mode 100644 index 0000000000..b4cbca1d7f Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_4_3.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_4_4.png b/resources/g2/track/raptor/barrel_roll_left_4_4.png new file mode 100644 index 0000000000..f89c8a6890 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_4_4.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_4_5.png b/resources/g2/track/raptor/barrel_roll_left_4_5.png new file mode 100644 index 0000000000..0e26c8f604 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_4_5.png differ diff --git a/resources/g2/track/raptor/barrel_roll_left_4_6.png b/resources/g2/track/raptor/barrel_roll_left_4_6.png new file mode 100644 index 0000000000..219f61f981 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_left_4_6.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_1_1.png b/resources/g2/track/raptor/barrel_roll_right_1_1.png new file mode 100644 index 0000000000..48eb7bbb14 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_1_1.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_1_2.png b/resources/g2/track/raptor/barrel_roll_right_1_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_1_2.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_1_3.png b/resources/g2/track/raptor/barrel_roll_right_1_3.png new file mode 100644 index 0000000000..efd9f0c725 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_1_3.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_1_4.png b/resources/g2/track/raptor/barrel_roll_right_1_4.png new file mode 100644 index 0000000000..f8d131cded Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_1_4.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_1_5.png b/resources/g2/track/raptor/barrel_roll_right_1_5.png new file mode 100644 index 0000000000..38844fa960 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_1_5.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_1_6.png b/resources/g2/track/raptor/barrel_roll_right_1_6.png new file mode 100644 index 0000000000..36a2d27ea6 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_1_6.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_2_1.png b/resources/g2/track/raptor/barrel_roll_right_2_1.png new file mode 100644 index 0000000000..edb1bb18cf Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_2_1.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_2_2.png b/resources/g2/track/raptor/barrel_roll_right_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_2_2.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_2_3.png b/resources/g2/track/raptor/barrel_roll_right_2_3.png new file mode 100644 index 0000000000..3c41a79307 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_2_3.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_2_4.png b/resources/g2/track/raptor/barrel_roll_right_2_4.png new file mode 100644 index 0000000000..20a05a9406 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_2_4.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_2_5.png b/resources/g2/track/raptor/barrel_roll_right_2_5.png new file mode 100644 index 0000000000..ec3cb27291 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_2_5.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_2_6.png b/resources/g2/track/raptor/barrel_roll_right_2_6.png new file mode 100644 index 0000000000..d0445a69c2 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_2_6.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_3_1.png b/resources/g2/track/raptor/barrel_roll_right_3_1.png new file mode 100644 index 0000000000..6f1737629a Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_3_1.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_3_2.png b/resources/g2/track/raptor/barrel_roll_right_3_2.png new file mode 100644 index 0000000000..1139adae61 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_3_2.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_3_3.png b/resources/g2/track/raptor/barrel_roll_right_3_3.png new file mode 100644 index 0000000000..2b55801eb4 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_3_3.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_3_4.png b/resources/g2/track/raptor/barrel_roll_right_3_4.png new file mode 100644 index 0000000000..e913eddc3f Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_3_4.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_3_5.png b/resources/g2/track/raptor/barrel_roll_right_3_5.png new file mode 100644 index 0000000000..c8ad123286 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_3_5.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_3_6.png b/resources/g2/track/raptor/barrel_roll_right_3_6.png new file mode 100644 index 0000000000..5a30afb206 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_3_6.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_4_1.png b/resources/g2/track/raptor/barrel_roll_right_4_1.png new file mode 100644 index 0000000000..c13cdd2918 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_4_1.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_4_2.png b/resources/g2/track/raptor/barrel_roll_right_4_2.png new file mode 100644 index 0000000000..2c130205e1 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_4_2.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_4_3.png b/resources/g2/track/raptor/barrel_roll_right_4_3.png new file mode 100644 index 0000000000..128c115694 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_4_3.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_4_4.png b/resources/g2/track/raptor/barrel_roll_right_4_4.png new file mode 100644 index 0000000000..4eee77c017 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_4_4.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_4_5.png b/resources/g2/track/raptor/barrel_roll_right_4_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_4_5.png differ diff --git a/resources/g2/track/raptor/barrel_roll_right_4_6.png b/resources/g2/track/raptor/barrel_roll_right_4_6.png new file mode 100644 index 0000000000..8a68bb30df Binary files /dev/null and b/resources/g2/track/raptor/barrel_roll_right_4_6.png differ diff --git a/resources/g2/track/raptor/block_brake_1.png b/resources/g2/track/raptor/block_brake_1.png new file mode 100644 index 0000000000..11094a3554 Binary files /dev/null and b/resources/g2/track/raptor/block_brake_1.png differ diff --git a/resources/g2/track/raptor/block_brake_2.png b/resources/g2/track/raptor/block_brake_2.png new file mode 100644 index 0000000000..582a3ffc23 Binary files /dev/null and b/resources/g2/track/raptor/block_brake_2.png differ diff --git a/resources/g2/track/raptor/brake_1.png b/resources/g2/track/raptor/brake_1.png new file mode 100644 index 0000000000..09b0a5f96d Binary files /dev/null and b/resources/g2/track/raptor/brake_1.png differ diff --git a/resources/g2/track/raptor/brake_2.png b/resources/g2/track/raptor/brake_2.png new file mode 100644 index 0000000000..81a2c57dc3 Binary files /dev/null and b/resources/g2/track/raptor/brake_2.png differ diff --git a/resources/g2/track/raptor/corkscrew_left_1_1.png b/resources/g2/track/raptor/corkscrew_left_1_1.png new file mode 100644 index 0000000000..f51697ce1f Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_left_1_1.png differ diff --git a/resources/g2/track/raptor/corkscrew_left_1_2.png b/resources/g2/track/raptor/corkscrew_left_1_2.png new file mode 100644 index 0000000000..9311d49533 Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_left_1_2.png differ diff --git a/resources/g2/track/raptor/corkscrew_left_1_3.png b/resources/g2/track/raptor/corkscrew_left_1_3.png new file mode 100644 index 0000000000..e706d4f1ba Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_left_1_3.png differ diff --git a/resources/g2/track/raptor/corkscrew_left_2_1.png b/resources/g2/track/raptor/corkscrew_left_2_1.png new file mode 100644 index 0000000000..f9e91ce941 Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_left_2_1.png differ diff --git a/resources/g2/track/raptor/corkscrew_left_2_2.png b/resources/g2/track/raptor/corkscrew_left_2_2.png new file mode 100644 index 0000000000..b6759cb02c Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_left_2_2.png differ diff --git a/resources/g2/track/raptor/corkscrew_left_2_3.png b/resources/g2/track/raptor/corkscrew_left_2_3.png new file mode 100644 index 0000000000..072d2c9116 Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_left_2_3.png differ diff --git a/resources/g2/track/raptor/corkscrew_left_3_1.png b/resources/g2/track/raptor/corkscrew_left_3_1.png new file mode 100644 index 0000000000..bb70fa525e Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_left_3_1.png differ diff --git a/resources/g2/track/raptor/corkscrew_left_3_2.png b/resources/g2/track/raptor/corkscrew_left_3_2.png new file mode 100644 index 0000000000..357a695f32 Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_left_3_2.png differ diff --git a/resources/g2/track/raptor/corkscrew_left_3_3.png b/resources/g2/track/raptor/corkscrew_left_3_3.png new file mode 100644 index 0000000000..090c7575c1 Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_left_3_3.png differ diff --git a/resources/g2/track/raptor/corkscrew_left_4_1.png b/resources/g2/track/raptor/corkscrew_left_4_1.png new file mode 100644 index 0000000000..3331976f12 Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_left_4_1.png differ diff --git a/resources/g2/track/raptor/corkscrew_left_4_2.png b/resources/g2/track/raptor/corkscrew_left_4_2.png new file mode 100644 index 0000000000..a855feb9fa Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_left_4_2.png differ diff --git a/resources/g2/track/raptor/corkscrew_left_4_3.png b/resources/g2/track/raptor/corkscrew_left_4_3.png new file mode 100644 index 0000000000..9ed9a53f1f Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_left_4_3.png differ diff --git a/resources/g2/track/raptor/corkscrew_right_1_1.png b/resources/g2/track/raptor/corkscrew_right_1_1.png new file mode 100644 index 0000000000..a9991b181b Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_right_1_1.png differ diff --git a/resources/g2/track/raptor/corkscrew_right_1_2.png b/resources/g2/track/raptor/corkscrew_right_1_2.png new file mode 100644 index 0000000000..a0cbf58368 Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_right_1_2.png differ diff --git a/resources/g2/track/raptor/corkscrew_right_1_3.png b/resources/g2/track/raptor/corkscrew_right_1_3.png new file mode 100644 index 0000000000..0a54606c48 Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_right_1_3.png differ diff --git a/resources/g2/track/raptor/corkscrew_right_2_1.png b/resources/g2/track/raptor/corkscrew_right_2_1.png new file mode 100644 index 0000000000..ccabc21c80 Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_right_2_1.png differ diff --git a/resources/g2/track/raptor/corkscrew_right_2_2.png b/resources/g2/track/raptor/corkscrew_right_2_2.png new file mode 100644 index 0000000000..0e91d37b56 Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_right_2_2.png differ diff --git a/resources/g2/track/raptor/corkscrew_right_2_3.png b/resources/g2/track/raptor/corkscrew_right_2_3.png new file mode 100644 index 0000000000..a99e5dc5fc Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_right_2_3.png differ diff --git a/resources/g2/track/raptor/corkscrew_right_3_1.png b/resources/g2/track/raptor/corkscrew_right_3_1.png new file mode 100644 index 0000000000..132d271683 Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_right_3_1.png differ diff --git a/resources/g2/track/raptor/corkscrew_right_3_2.png b/resources/g2/track/raptor/corkscrew_right_3_2.png new file mode 100644 index 0000000000..460a291f50 Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_right_3_2.png differ diff --git a/resources/g2/track/raptor/corkscrew_right_3_3.png b/resources/g2/track/raptor/corkscrew_right_3_3.png new file mode 100644 index 0000000000..bb36a9d36e Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_right_3_3.png differ diff --git a/resources/g2/track/raptor/corkscrew_right_4_1.png b/resources/g2/track/raptor/corkscrew_right_4_1.png new file mode 100644 index 0000000000..1a2955fb51 Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_right_4_1.png differ diff --git a/resources/g2/track/raptor/corkscrew_right_4_2.png b/resources/g2/track/raptor/corkscrew_right_4_2.png new file mode 100644 index 0000000000..a7b3b1aaab Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_right_4_2.png differ diff --git a/resources/g2/track/raptor/corkscrew_right_4_3.png b/resources/g2/track/raptor/corkscrew_right_4_3.png new file mode 100644 index 0000000000..e38508f419 Binary files /dev/null and b/resources/g2/track/raptor/corkscrew_right_4_3.png differ diff --git a/resources/g2/track/raptor/flat_1.png b/resources/g2/track/raptor/flat_1.png new file mode 100644 index 0000000000..91ffa11f64 Binary files /dev/null and b/resources/g2/track/raptor/flat_1.png differ diff --git a/resources/g2/track/raptor/flat_2.png b/resources/g2/track/raptor/flat_2.png new file mode 100644 index 0000000000..df3f567088 Binary files /dev/null and b/resources/g2/track/raptor/flat_2.png differ diff --git a/resources/g2/track/raptor/flat_diag_1.png b/resources/g2/track/raptor/flat_diag_1.png new file mode 100644 index 0000000000..0b96da2c53 Binary files /dev/null and b/resources/g2/track/raptor/flat_diag_1.png differ diff --git a/resources/g2/track/raptor/flat_diag_2.png b/resources/g2/track/raptor/flat_diag_2.png new file mode 100644 index 0000000000..5007dd79b3 Binary files /dev/null and b/resources/g2/track/raptor/flat_diag_2.png differ diff --git a/resources/g2/track/raptor/flat_diag_3.png b/resources/g2/track/raptor/flat_diag_3.png new file mode 100644 index 0000000000..0b96da2c53 Binary files /dev/null and b/resources/g2/track/raptor/flat_diag_3.png differ diff --git a/resources/g2/track/raptor/flat_diag_4.png b/resources/g2/track/raptor/flat_diag_4.png new file mode 100644 index 0000000000..881d9411d5 Binary files /dev/null and b/resources/g2/track/raptor/flat_diag_4.png differ diff --git a/resources/g2/track/raptor/flat_diag_lift_1.png b/resources/g2/track/raptor/flat_diag_lift_1.png new file mode 100644 index 0000000000..210bd4ccdb Binary files /dev/null and b/resources/g2/track/raptor/flat_diag_lift_1.png differ diff --git a/resources/g2/track/raptor/flat_diag_lift_2.png b/resources/g2/track/raptor/flat_diag_lift_2.png new file mode 100644 index 0000000000..b62554e08c Binary files /dev/null and b/resources/g2/track/raptor/flat_diag_lift_2.png differ diff --git a/resources/g2/track/raptor/flat_diag_lift_3.png b/resources/g2/track/raptor/flat_diag_lift_3.png new file mode 100644 index 0000000000..6389cd7b8e Binary files /dev/null and b/resources/g2/track/raptor/flat_diag_lift_3.png differ diff --git a/resources/g2/track/raptor/flat_diag_lift_4.png b/resources/g2/track/raptor/flat_diag_lift_4.png new file mode 100644 index 0000000000..6be370294b Binary files /dev/null and b/resources/g2/track/raptor/flat_diag_lift_4.png differ diff --git a/resources/g2/track/raptor/flat_lift_1.png b/resources/g2/track/raptor/flat_lift_1.png new file mode 100644 index 0000000000..cea430cfb8 Binary files /dev/null and b/resources/g2/track/raptor/flat_lift_1.png differ diff --git a/resources/g2/track/raptor/flat_lift_2.png b/resources/g2/track/raptor/flat_lift_2.png new file mode 100644 index 0000000000..2dda730af8 Binary files /dev/null and b/resources/g2/track/raptor/flat_lift_2.png differ diff --git a/resources/g2/track/raptor/flat_lift_3.png b/resources/g2/track/raptor/flat_lift_3.png new file mode 100644 index 0000000000..2604b61bbd Binary files /dev/null and b/resources/g2/track/raptor/flat_lift_3.png differ diff --git a/resources/g2/track/raptor/flat_lift_4.png b/resources/g2/track/raptor/flat_lift_4.png new file mode 100644 index 0000000000..59275a8e29 Binary files /dev/null and b/resources/g2/track/raptor/flat_lift_4.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_1.png b/resources/g2/track/raptor/flat_to_gentle_up_1.png new file mode 100644 index 0000000000..405d7afe68 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_1.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_2.png b/resources/g2/track/raptor/flat_to_gentle_up_2.png new file mode 100644 index 0000000000..64beb9d76b Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_2.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_3.png b/resources/g2/track/raptor/flat_to_gentle_up_3.png new file mode 100644 index 0000000000..ec345012cb Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_3.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_4.png b/resources/g2/track/raptor/flat_to_gentle_up_4.png new file mode 100644 index 0000000000..5768b9bc58 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_4.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_diag_1.png b/resources/g2/track/raptor/flat_to_gentle_up_diag_1.png new file mode 100644 index 0000000000..41952786a8 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_diag_1.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_diag_2.png b/resources/g2/track/raptor/flat_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..526c106523 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_diag_3.png b/resources/g2/track/raptor/flat_to_gentle_up_diag_3.png new file mode 100644 index 0000000000..52ae31839e Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_diag_3.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_diag_4.png b/resources/g2/track/raptor/flat_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..7cfb0b526a Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_diag_lift_1.png b/resources/g2/track/raptor/flat_to_gentle_up_diag_lift_1.png new file mode 100644 index 0000000000..0dcabe8e91 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_diag_lift_1.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_diag_lift_2.png b/resources/g2/track/raptor/flat_to_gentle_up_diag_lift_2.png new file mode 100644 index 0000000000..6ad3973374 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_diag_lift_2.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_diag_lift_3.png b/resources/g2/track/raptor/flat_to_gentle_up_diag_lift_3.png new file mode 100644 index 0000000000..7226f61405 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_diag_lift_3.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_diag_lift_4.png b/resources/g2/track/raptor/flat_to_gentle_up_diag_lift_4.png new file mode 100644 index 0000000000..7c6eaaa4fa Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_diag_lift_4.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_left_bank_1.png b/resources/g2/track/raptor/flat_to_gentle_up_left_bank_1.png new file mode 100644 index 0000000000..d42715846a Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_left_bank_1.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_left_bank_2_1.png b/resources/g2/track/raptor/flat_to_gentle_up_left_bank_2_1.png new file mode 100644 index 0000000000..9364c3808f Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_left_bank_2_1.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_left_bank_2_2.png b/resources/g2/track/raptor/flat_to_gentle_up_left_bank_2_2.png new file mode 100644 index 0000000000..65c0e08a93 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_left_bank_2_2.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_left_bank_3.png b/resources/g2/track/raptor/flat_to_gentle_up_left_bank_3.png new file mode 100644 index 0000000000..a9eb1a58de Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_left_bank_3.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_left_bank_4.png b/resources/g2/track/raptor/flat_to_gentle_up_left_bank_4.png new file mode 100644 index 0000000000..f285bf0b93 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_left_bank_4.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_lift_1.png b/resources/g2/track/raptor/flat_to_gentle_up_lift_1.png new file mode 100644 index 0000000000..d545b1e005 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_lift_1.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_lift_2.png b/resources/g2/track/raptor/flat_to_gentle_up_lift_2.png new file mode 100644 index 0000000000..077690099c Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_lift_2.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_lift_3.png b/resources/g2/track/raptor/flat_to_gentle_up_lift_3.png new file mode 100644 index 0000000000..ec25ffb585 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_lift_3.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_lift_4.png b/resources/g2/track/raptor/flat_to_gentle_up_lift_4.png new file mode 100644 index 0000000000..c459f2cf52 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_lift_4.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_right_bank_1.png b/resources/g2/track/raptor/flat_to_gentle_up_right_bank_1.png new file mode 100644 index 0000000000..d9e519d7b6 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_right_bank_1.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_right_bank_2.png b/resources/g2/track/raptor/flat_to_gentle_up_right_bank_2.png new file mode 100644 index 0000000000..4e4fe0a205 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_right_bank_2.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_right_bank_3_1.png b/resources/g2/track/raptor/flat_to_gentle_up_right_bank_3_1.png new file mode 100644 index 0000000000..4dd7efa102 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_right_bank_3_1.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_right_bank_3_2.png b/resources/g2/track/raptor/flat_to_gentle_up_right_bank_3_2.png new file mode 100644 index 0000000000..25d771dc00 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_right_bank_3_2.png differ diff --git a/resources/g2/track/raptor/flat_to_gentle_up_right_bank_4.png b/resources/g2/track/raptor/flat_to_gentle_up_right_bank_4.png new file mode 100644 index 0000000000..cbaee97a99 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_gentle_up_right_bank_4.png differ diff --git a/resources/g2/track/raptor/flat_to_left_bank_1_1.png b/resources/g2/track/raptor/flat_to_left_bank_1_1.png new file mode 100644 index 0000000000..af87d65b3b Binary files /dev/null and b/resources/g2/track/raptor/flat_to_left_bank_1_1.png differ diff --git a/resources/g2/track/raptor/flat_to_left_bank_1_2.png b/resources/g2/track/raptor/flat_to_left_bank_1_2.png new file mode 100644 index 0000000000..77dc1f293d Binary files /dev/null and b/resources/g2/track/raptor/flat_to_left_bank_1_2.png differ diff --git a/resources/g2/track/raptor/flat_to_left_bank_2_1.png b/resources/g2/track/raptor/flat_to_left_bank_2_1.png new file mode 100644 index 0000000000..eb27fa4de4 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_left_bank_2_1.png differ diff --git a/resources/g2/track/raptor/flat_to_left_bank_2_2.png b/resources/g2/track/raptor/flat_to_left_bank_2_2.png new file mode 100644 index 0000000000..6cfb06acd8 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_left_bank_2_2.png differ diff --git a/resources/g2/track/raptor/flat_to_left_bank_3.png b/resources/g2/track/raptor/flat_to_left_bank_3.png new file mode 100644 index 0000000000..2b8f4d7539 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_left_bank_3.png differ diff --git a/resources/g2/track/raptor/flat_to_left_bank_4.png b/resources/g2/track/raptor/flat_to_left_bank_4.png new file mode 100644 index 0000000000..a2d42aa1bb Binary files /dev/null and b/resources/g2/track/raptor/flat_to_left_bank_4.png differ diff --git a/resources/g2/track/raptor/flat_to_left_bank_diag_1_1.png b/resources/g2/track/raptor/flat_to_left_bank_diag_1_1.png new file mode 100644 index 0000000000..fb5d3f4b65 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_left_bank_diag_1_1.png differ diff --git a/resources/g2/track/raptor/flat_to_left_bank_diag_1_2.png b/resources/g2/track/raptor/flat_to_left_bank_diag_1_2.png new file mode 100644 index 0000000000..7b50650a18 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_left_bank_diag_1_2.png differ diff --git a/resources/g2/track/raptor/flat_to_left_bank_diag_2.png b/resources/g2/track/raptor/flat_to_left_bank_diag_2.png new file mode 100644 index 0000000000..f3c3813239 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_left_bank_diag_2.png differ diff --git a/resources/g2/track/raptor/flat_to_left_bank_diag_3.png b/resources/g2/track/raptor/flat_to_left_bank_diag_3.png new file mode 100644 index 0000000000..f915962585 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_left_bank_diag_3.png differ diff --git a/resources/g2/track/raptor/flat_to_left_bank_diag_4.png b/resources/g2/track/raptor/flat_to_left_bank_diag_4.png new file mode 100644 index 0000000000..6da7d13ea3 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_left_bank_diag_4.png differ diff --git a/resources/g2/track/raptor/flat_to_right_bank_1.png b/resources/g2/track/raptor/flat_to_right_bank_1.png new file mode 100644 index 0000000000..4d7daff2b2 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_right_bank_1.png differ diff --git a/resources/g2/track/raptor/flat_to_right_bank_2.png b/resources/g2/track/raptor/flat_to_right_bank_2.png new file mode 100644 index 0000000000..dd15c65c53 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_right_bank_2.png differ diff --git a/resources/g2/track/raptor/flat_to_right_bank_3_1.png b/resources/g2/track/raptor/flat_to_right_bank_3_1.png new file mode 100644 index 0000000000..bb7caa5b3f Binary files /dev/null and b/resources/g2/track/raptor/flat_to_right_bank_3_1.png differ diff --git a/resources/g2/track/raptor/flat_to_right_bank_3_2.png b/resources/g2/track/raptor/flat_to_right_bank_3_2.png new file mode 100644 index 0000000000..d804f40476 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_right_bank_3_2.png differ diff --git a/resources/g2/track/raptor/flat_to_right_bank_4_1.png b/resources/g2/track/raptor/flat_to_right_bank_4_1.png new file mode 100644 index 0000000000..8e71572601 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_right_bank_4_1.png differ diff --git a/resources/g2/track/raptor/flat_to_right_bank_4_2.png b/resources/g2/track/raptor/flat_to_right_bank_4_2.png new file mode 100644 index 0000000000..294b6ffcff Binary files /dev/null and b/resources/g2/track/raptor/flat_to_right_bank_4_2.png differ diff --git a/resources/g2/track/raptor/flat_to_right_bank_diag_1.png b/resources/g2/track/raptor/flat_to_right_bank_diag_1.png new file mode 100644 index 0000000000..485f56712d Binary files /dev/null and b/resources/g2/track/raptor/flat_to_right_bank_diag_1.png differ diff --git a/resources/g2/track/raptor/flat_to_right_bank_diag_2.png b/resources/g2/track/raptor/flat_to_right_bank_diag_2.png new file mode 100644 index 0000000000..4ac47d226c Binary files /dev/null and b/resources/g2/track/raptor/flat_to_right_bank_diag_2.png differ diff --git a/resources/g2/track/raptor/flat_to_right_bank_diag_3_1.png b/resources/g2/track/raptor/flat_to_right_bank_diag_3_1.png new file mode 100644 index 0000000000..1addb108f7 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_right_bank_diag_3_1.png differ diff --git a/resources/g2/track/raptor/flat_to_right_bank_diag_3_2.png b/resources/g2/track/raptor/flat_to_right_bank_diag_3_2.png new file mode 100644 index 0000000000..2d5f153d5a Binary files /dev/null and b/resources/g2/track/raptor/flat_to_right_bank_diag_3_2.png differ diff --git a/resources/g2/track/raptor/flat_to_right_bank_diag_4.png b/resources/g2/track/raptor/flat_to_right_bank_diag_4.png new file mode 100644 index 0000000000..8cc9edb340 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_right_bank_diag_4.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_1_1.png b/resources/g2/track/raptor/flat_to_steep_up_1_1.png new file mode 100644 index 0000000000..9fda36b003 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_1_1.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_1_2.png b/resources/g2/track/raptor/flat_to_steep_up_1_2.png new file mode 100644 index 0000000000..e063648a96 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_1_2.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_1_3.png b/resources/g2/track/raptor/flat_to_steep_up_1_3.png new file mode 100644 index 0000000000..5fce35315c Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_1_3.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_1_4.png b/resources/g2/track/raptor/flat_to_steep_up_1_4.png new file mode 100644 index 0000000000..f093d74599 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_1_4.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_2_1.png b/resources/g2/track/raptor/flat_to_steep_up_2_1.png new file mode 100644 index 0000000000..3ea1cf5ba8 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_2_1.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_2_2.png b/resources/g2/track/raptor/flat_to_steep_up_2_2.png new file mode 100644 index 0000000000..d582d5aca9 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_2_2.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_2_3.png b/resources/g2/track/raptor/flat_to_steep_up_2_3.png new file mode 100644 index 0000000000..9cd64afeaa Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_2_3.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_2_4.png b/resources/g2/track/raptor/flat_to_steep_up_2_4.png new file mode 100644 index 0000000000..e9b31baf9e Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_2_4.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_3_1.png b/resources/g2/track/raptor/flat_to_steep_up_3_1.png new file mode 100644 index 0000000000..bd2f255212 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_3_1.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_3_2.png b/resources/g2/track/raptor/flat_to_steep_up_3_2.png new file mode 100644 index 0000000000..818a3a65cd Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_3_2.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_3_3.png b/resources/g2/track/raptor/flat_to_steep_up_3_3.png new file mode 100644 index 0000000000..a1a4cf99ce Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_3_3.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_3_4.png b/resources/g2/track/raptor/flat_to_steep_up_3_4.png new file mode 100644 index 0000000000..b327e13405 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_3_4.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_4_1.png b/resources/g2/track/raptor/flat_to_steep_up_4_1.png new file mode 100644 index 0000000000..61551491ee Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_4_1.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_4_2.png b/resources/g2/track/raptor/flat_to_steep_up_4_2.png new file mode 100644 index 0000000000..1ce04dfc18 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_4_2.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_4_3.png b/resources/g2/track/raptor/flat_to_steep_up_4_3.png new file mode 100644 index 0000000000..55cb076d50 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_4_3.png differ diff --git a/resources/g2/track/raptor/flat_to_steep_up_4_4.png b/resources/g2/track/raptor/flat_to_steep_up_4_4.png new file mode 100644 index 0000000000..3823cf78c3 Binary files /dev/null and b/resources/g2/track/raptor/flat_to_steep_up_4_4.png differ diff --git a/resources/g2/track/raptor/gentle_1.png b/resources/g2/track/raptor/gentle_1.png new file mode 100644 index 0000000000..8f5a5eb3a6 Binary files /dev/null and b/resources/g2/track/raptor/gentle_1.png differ diff --git a/resources/g2/track/raptor/gentle_2.png b/resources/g2/track/raptor/gentle_2.png new file mode 100644 index 0000000000..0ae5ec948a Binary files /dev/null and b/resources/g2/track/raptor/gentle_2.png differ diff --git a/resources/g2/track/raptor/gentle_3.png b/resources/g2/track/raptor/gentle_3.png new file mode 100644 index 0000000000..3fea4bdca6 Binary files /dev/null and b/resources/g2/track/raptor/gentle_3.png differ diff --git a/resources/g2/track/raptor/gentle_4.png b/resources/g2/track/raptor/gentle_4.png new file mode 100644 index 0000000000..f26343ad88 Binary files /dev/null and b/resources/g2/track/raptor/gentle_4.png differ diff --git a/resources/g2/track/raptor/gentle_diag_1.png b/resources/g2/track/raptor/gentle_diag_1.png new file mode 100644 index 0000000000..73a4295764 Binary files /dev/null and b/resources/g2/track/raptor/gentle_diag_1.png differ diff --git a/resources/g2/track/raptor/gentle_diag_2.png b/resources/g2/track/raptor/gentle_diag_2.png new file mode 100644 index 0000000000..ac7b748ff7 Binary files /dev/null and b/resources/g2/track/raptor/gentle_diag_2.png differ diff --git a/resources/g2/track/raptor/gentle_diag_3.png b/resources/g2/track/raptor/gentle_diag_3.png new file mode 100644 index 0000000000..d3efec6b95 Binary files /dev/null and b/resources/g2/track/raptor/gentle_diag_3.png differ diff --git a/resources/g2/track/raptor/gentle_diag_4.png b/resources/g2/track/raptor/gentle_diag_4.png new file mode 100644 index 0000000000..85b6f35c88 Binary files /dev/null and b/resources/g2/track/raptor/gentle_diag_4.png differ diff --git a/resources/g2/track/raptor/gentle_diag_lift_1.png b/resources/g2/track/raptor/gentle_diag_lift_1.png new file mode 100644 index 0000000000..0e02c14fc5 Binary files /dev/null and b/resources/g2/track/raptor/gentle_diag_lift_1.png differ diff --git a/resources/g2/track/raptor/gentle_diag_lift_2.png b/resources/g2/track/raptor/gentle_diag_lift_2.png new file mode 100644 index 0000000000..e817ab2828 Binary files /dev/null and b/resources/g2/track/raptor/gentle_diag_lift_2.png differ diff --git a/resources/g2/track/raptor/gentle_diag_lift_3.png b/resources/g2/track/raptor/gentle_diag_lift_3.png new file mode 100644 index 0000000000..8b0b467660 Binary files /dev/null and b/resources/g2/track/raptor/gentle_diag_lift_3.png differ diff --git a/resources/g2/track/raptor/gentle_diag_lift_4.png b/resources/g2/track/raptor/gentle_diag_lift_4.png new file mode 100644 index 0000000000..18a9d3ea6b Binary files /dev/null and b/resources/g2/track/raptor/gentle_diag_lift_4.png differ diff --git a/resources/g2/track/raptor/gentle_lift_1.png b/resources/g2/track/raptor/gentle_lift_1.png new file mode 100644 index 0000000000..70b9923129 Binary files /dev/null and b/resources/g2/track/raptor/gentle_lift_1.png differ diff --git a/resources/g2/track/raptor/gentle_lift_2.png b/resources/g2/track/raptor/gentle_lift_2.png new file mode 100644 index 0000000000..634ef76d84 Binary files /dev/null and b/resources/g2/track/raptor/gentle_lift_2.png differ diff --git a/resources/g2/track/raptor/gentle_lift_3.png b/resources/g2/track/raptor/gentle_lift_3.png new file mode 100644 index 0000000000..343e608d74 Binary files /dev/null and b/resources/g2/track/raptor/gentle_lift_3.png differ diff --git a/resources/g2/track/raptor/gentle_lift_4.png b/resources/g2/track/raptor/gentle_lift_4.png new file mode 100644 index 0000000000..eb1b4768eb Binary files /dev/null and b/resources/g2/track/raptor/gentle_lift_4.png differ diff --git a/resources/g2/track/raptor/gentle_to_flat_up_diag_1.png b/resources/g2/track/raptor/gentle_to_flat_up_diag_1.png new file mode 100644 index 0000000000..f005099da5 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_flat_up_diag_1.png differ diff --git a/resources/g2/track/raptor/gentle_to_flat_up_diag_2.png b/resources/g2/track/raptor/gentle_to_flat_up_diag_2.png new file mode 100644 index 0000000000..58f6eb03e0 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_flat_up_diag_2.png differ diff --git a/resources/g2/track/raptor/gentle_to_flat_up_diag_3.png b/resources/g2/track/raptor/gentle_to_flat_up_diag_3.png new file mode 100644 index 0000000000..ab41d47586 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_flat_up_diag_3.png differ diff --git a/resources/g2/track/raptor/gentle_to_flat_up_diag_4.png b/resources/g2/track/raptor/gentle_to_flat_up_diag_4.png new file mode 100644 index 0000000000..092f276ea8 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_flat_up_diag_4.png differ diff --git a/resources/g2/track/raptor/gentle_to_flat_up_diag_lift_1.png b/resources/g2/track/raptor/gentle_to_flat_up_diag_lift_1.png new file mode 100644 index 0000000000..24fb99d340 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_flat_up_diag_lift_1.png differ diff --git a/resources/g2/track/raptor/gentle_to_flat_up_diag_lift_2.png b/resources/g2/track/raptor/gentle_to_flat_up_diag_lift_2.png new file mode 100644 index 0000000000..f53bd3d113 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_flat_up_diag_lift_2.png differ diff --git a/resources/g2/track/raptor/gentle_to_flat_up_diag_lift_3.png b/resources/g2/track/raptor/gentle_to_flat_up_diag_lift_3.png new file mode 100644 index 0000000000..a070023938 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_flat_up_diag_lift_3.png differ diff --git a/resources/g2/track/raptor/gentle_to_flat_up_diag_lift_4.png b/resources/g2/track/raptor/gentle_to_flat_up_diag_lift_4.png new file mode 100644 index 0000000000..9864a03dcc Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_flat_up_diag_lift_4.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_1.png b/resources/g2/track/raptor/gentle_to_steep_up_1.png new file mode 100644 index 0000000000..5506169ac9 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_1.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_2_1.png b/resources/g2/track/raptor/gentle_to_steep_up_2_1.png new file mode 100644 index 0000000000..99dbc60b2e Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_2_1.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_2_2.png b/resources/g2/track/raptor/gentle_to_steep_up_2_2.png new file mode 100644 index 0000000000..ed44537b43 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_2_2.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_3_1.png b/resources/g2/track/raptor/gentle_to_steep_up_3_1.png new file mode 100644 index 0000000000..2da4765613 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_3_1.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_3_2.png b/resources/g2/track/raptor/gentle_to_steep_up_3_2.png new file mode 100644 index 0000000000..7677ffbac2 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_3_2.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_4.png b/resources/g2/track/raptor/gentle_to_steep_up_4.png new file mode 100644 index 0000000000..65db703a1d Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_4.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_diag_1.png b/resources/g2/track/raptor/gentle_to_steep_up_diag_1.png new file mode 100644 index 0000000000..428c54448f Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_diag_1.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_diag_2.png b/resources/g2/track/raptor/gentle_to_steep_up_diag_2.png new file mode 100644 index 0000000000..fab5e6aff8 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_diag_2.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_diag_3.png b/resources/g2/track/raptor/gentle_to_steep_up_diag_3.png new file mode 100644 index 0000000000..be4b3c534e Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_diag_3.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_diag_4.png b/resources/g2/track/raptor/gentle_to_steep_up_diag_4.png new file mode 100644 index 0000000000..974fe56477 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_diag_4.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_diag_lift_1.png b/resources/g2/track/raptor/gentle_to_steep_up_diag_lift_1.png new file mode 100644 index 0000000000..0e35140542 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_diag_lift_1.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_diag_lift_2.png b/resources/g2/track/raptor/gentle_to_steep_up_diag_lift_2.png new file mode 100644 index 0000000000..7412dc3935 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_diag_lift_2.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_diag_lift_3.png b/resources/g2/track/raptor/gentle_to_steep_up_diag_lift_3.png new file mode 100644 index 0000000000..a695596f13 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_diag_lift_3.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_diag_lift_4.png b/resources/g2/track/raptor/gentle_to_steep_up_diag_lift_4.png new file mode 100644 index 0000000000..1d5d2ce576 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_diag_lift_4.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_lift_1.png b/resources/g2/track/raptor/gentle_to_steep_up_lift_1.png new file mode 100644 index 0000000000..08aef29ff5 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_lift_1.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_lift_2_1.png b/resources/g2/track/raptor/gentle_to_steep_up_lift_2_1.png new file mode 100644 index 0000000000..b66e0cc4eb Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_lift_2_1.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_lift_2_2.png b/resources/g2/track/raptor/gentle_to_steep_up_lift_2_2.png new file mode 100644 index 0000000000..9fb160a98c Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_lift_2_2.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_lift_3_1.png b/resources/g2/track/raptor/gentle_to_steep_up_lift_3_1.png new file mode 100644 index 0000000000..be083dc58f Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_lift_3_1.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_lift_3_2.png b/resources/g2/track/raptor/gentle_to_steep_up_lift_3_2.png new file mode 100644 index 0000000000..2526e7bb01 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_lift_3_2.png differ diff --git a/resources/g2/track/raptor/gentle_to_steep_up_lift_4.png b/resources/g2/track/raptor/gentle_to_steep_up_lift_4.png new file mode 100644 index 0000000000..a67762e354 Binary files /dev/null and b/resources/g2/track/raptor/gentle_to_steep_up_lift_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_1.png b/resources/g2/track/raptor/gentle_up_left_bank_1.png new file mode 100644 index 0000000000..a9c3370000 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_2.png b/resources/g2/track/raptor/gentle_up_left_bank_2.png new file mode 100644 index 0000000000..39665b9e06 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_3.png b/resources/g2/track/raptor/gentle_up_left_bank_3.png new file mode 100644 index 0000000000..b2371189e4 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_3.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_4.png b/resources/g2/track/raptor/gentle_up_left_bank_4.png new file mode 100644 index 0000000000..50887d2daf Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_to_flat_1.png b/resources/g2/track/raptor/gentle_up_left_bank_to_flat_1.png new file mode 100644 index 0000000000..cc12d3db01 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_to_flat_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_to_flat_2_1.png b/resources/g2/track/raptor/gentle_up_left_bank_to_flat_2_1.png new file mode 100644 index 0000000000..7f967601af Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_to_flat_2_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_to_flat_2_2.png b/resources/g2/track/raptor/gentle_up_left_bank_to_flat_2_2.png new file mode 100644 index 0000000000..5738e69d08 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_to_flat_2_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_to_flat_3.png b/resources/g2/track/raptor/gentle_up_left_bank_to_flat_3.png new file mode 100644 index 0000000000..8e0888befe Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_to_flat_3.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_to_flat_4.png b/resources/g2/track/raptor/gentle_up_left_bank_to_flat_4.png new file mode 100644 index 0000000000..62c31292b4 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_to_flat_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_1.png b/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_1.png new file mode 100644 index 0000000000..e58a0bd3a1 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_2_1.png b/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..097258a8cc Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_2_2.png b/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..326bd74aa1 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_3.png b/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_3.png new file mode 100644 index 0000000000..e1db8198c0 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_3.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_4.png b/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_4.png new file mode 100644 index 0000000000..9e849477ab Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_to_gentle_up_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_to_left_bank_1.png b/resources/g2/track/raptor/gentle_up_left_bank_to_left_bank_1.png new file mode 100644 index 0000000000..30b0da4bc8 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_to_left_bank_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_to_left_bank_2.png b/resources/g2/track/raptor/gentle_up_left_bank_to_left_bank_2.png new file mode 100644 index 0000000000..2f918aa25d Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_to_left_bank_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_to_left_bank_3.png b/resources/g2/track/raptor/gentle_up_left_bank_to_left_bank_3.png new file mode 100644 index 0000000000..104fd3d453 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_to_left_bank_3.png differ diff --git a/resources/g2/track/raptor/gentle_up_left_bank_to_left_bank_4.png b/resources/g2/track/raptor/gentle_up_left_bank_to_left_bank_4.png new file mode 100644 index 0000000000..502537fef2 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_left_bank_to_left_bank_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_1.png b/resources/g2/track/raptor/gentle_up_right_bank_1.png new file mode 100644 index 0000000000..887c4a67f6 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_2.png b/resources/g2/track/raptor/gentle_up_right_bank_2.png new file mode 100644 index 0000000000..04fe3f04ad Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_3.png b/resources/g2/track/raptor/gentle_up_right_bank_3.png new file mode 100644 index 0000000000..b1323616a7 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_3.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_4.png b/resources/g2/track/raptor/gentle_up_right_bank_4.png new file mode 100644 index 0000000000..cc491b41a9 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_to_flat_1.png b/resources/g2/track/raptor/gentle_up_right_bank_to_flat_1.png new file mode 100644 index 0000000000..e486ebbbf9 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_to_flat_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_to_flat_2.png b/resources/g2/track/raptor/gentle_up_right_bank_to_flat_2.png new file mode 100644 index 0000000000..37d779bc2c Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_to_flat_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_to_flat_3_1.png b/resources/g2/track/raptor/gentle_up_right_bank_to_flat_3_1.png new file mode 100644 index 0000000000..3ece0f8257 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_to_flat_3_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_to_flat_3_2.png b/resources/g2/track/raptor/gentle_up_right_bank_to_flat_3_2.png new file mode 100644 index 0000000000..727b12704f Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_to_flat_3_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_to_flat_4.png b/resources/g2/track/raptor/gentle_up_right_bank_to_flat_4.png new file mode 100644 index 0000000000..8d9a61caf7 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_to_flat_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_1.png b/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_1.png new file mode 100644 index 0000000000..237cc2fc38 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_2.png b/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_2.png new file mode 100644 index 0000000000..5ad13ac52c Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_3_1.png b/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..f147aada45 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_3_2.png b/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..5035646108 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_4.png b/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_4.png new file mode 100644 index 0000000000..6c8f363a91 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_to_gentle_up_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_to_right_bank_1.png b/resources/g2/track/raptor/gentle_up_right_bank_to_right_bank_1.png new file mode 100644 index 0000000000..267f36ea6a Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_to_right_bank_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_to_right_bank_2.png b/resources/g2/track/raptor/gentle_up_right_bank_to_right_bank_2.png new file mode 100644 index 0000000000..cd3370598d Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_to_right_bank_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_to_right_bank_3.png b/resources/g2/track/raptor/gentle_up_right_bank_to_right_bank_3.png new file mode 100644 index 0000000000..e879b39b13 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_to_right_bank_3.png differ diff --git a/resources/g2/track/raptor/gentle_up_right_bank_to_right_bank_4.png b/resources/g2/track/raptor/gentle_up_right_bank_to_right_bank_4.png new file mode 100644 index 0000000000..c643fe4043 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_right_bank_to_right_bank_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_flat_1.png b/resources/g2/track/raptor/gentle_up_to_flat_1.png new file mode 100644 index 0000000000..9ad189bde6 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_flat_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_flat_2.png b/resources/g2/track/raptor/gentle_up_to_flat_2.png new file mode 100644 index 0000000000..cd33a3e808 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_flat_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_flat_3.png b/resources/g2/track/raptor/gentle_up_to_flat_3.png new file mode 100644 index 0000000000..752c27f85d Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_flat_3.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_flat_4.png b/resources/g2/track/raptor/gentle_up_to_flat_4.png new file mode 100644 index 0000000000..48bf9f8bb2 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_flat_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_flat_lift_1.png b/resources/g2/track/raptor/gentle_up_to_flat_lift_1.png new file mode 100644 index 0000000000..7f80b7ffad Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_flat_lift_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_flat_lift_2.png b/resources/g2/track/raptor/gentle_up_to_flat_lift_2.png new file mode 100644 index 0000000000..c4fb85cff6 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_flat_lift_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_flat_lift_3.png b/resources/g2/track/raptor/gentle_up_to_flat_lift_3.png new file mode 100644 index 0000000000..91ef833be2 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_flat_lift_3.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_flat_lift_4.png b/resources/g2/track/raptor/gentle_up_to_flat_lift_4.png new file mode 100644 index 0000000000..b1e8c5f4e7 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_flat_lift_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_1.png b/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_1.png new file mode 100644 index 0000000000..300c7bf411 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_2_1.png b/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_2_1.png new file mode 100644 index 0000000000..4c3d66da48 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_2_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_2_2.png b/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_2_2.png new file mode 100644 index 0000000000..99f2a0748e Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_2_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_3.png b/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_3.png new file mode 100644 index 0000000000..33b1328367 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_3.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_4.png b/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_4.png new file mode 100644 index 0000000000..0dffcfd89e Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_gentle_up_left_bank_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_1.png b/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_1.png new file mode 100644 index 0000000000..878be5e555 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_2.png b/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_2.png new file mode 100644 index 0000000000..9c51fc50c1 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_3_1.png b/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_3_1.png new file mode 100644 index 0000000000..216b16040f Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_3_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_3_2.png b/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_3_2.png new file mode 100644 index 0000000000..0da2e6fc25 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_3_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_4.png b/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_4.png new file mode 100644 index 0000000000..fb2d428178 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_gentle_up_right_bank_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_left_bank_1_1.png b/resources/g2/track/raptor/gentle_up_to_left_bank_1_1.png new file mode 100644 index 0000000000..44dbfe3e27 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_left_bank_1_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_left_bank_1_2.png b/resources/g2/track/raptor/gentle_up_to_left_bank_1_2.png new file mode 100644 index 0000000000..2b354c90eb Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_left_bank_1_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_left_bank_2_1.png b/resources/g2/track/raptor/gentle_up_to_left_bank_2_1.png new file mode 100644 index 0000000000..d904550949 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_left_bank_2_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_left_bank_2_2.png b/resources/g2/track/raptor/gentle_up_to_left_bank_2_2.png new file mode 100644 index 0000000000..049553df7c Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_left_bank_2_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_left_bank_3.png b/resources/g2/track/raptor/gentle_up_to_left_bank_3.png new file mode 100644 index 0000000000..589da6d682 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_left_bank_3.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_left_bank_4.png b/resources/g2/track/raptor/gentle_up_to_left_bank_4.png new file mode 100644 index 0000000000..c16cf8d5cf Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_left_bank_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_left_bank_diag_1_1.png b/resources/g2/track/raptor/gentle_up_to_left_bank_diag_1_1.png new file mode 100644 index 0000000000..b24812b44c Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_left_bank_diag_1_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_left_bank_diag_1_2.png b/resources/g2/track/raptor/gentle_up_to_left_bank_diag_1_2.png new file mode 100644 index 0000000000..2916799b43 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_left_bank_diag_1_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_left_bank_diag_2.png b/resources/g2/track/raptor/gentle_up_to_left_bank_diag_2.png new file mode 100644 index 0000000000..f448510b37 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_left_bank_diag_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_left_bank_diag_3.png b/resources/g2/track/raptor/gentle_up_to_left_bank_diag_3.png new file mode 100644 index 0000000000..d30d3c2d0f Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_left_bank_diag_3.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_left_bank_diag_4.png b/resources/g2/track/raptor/gentle_up_to_left_bank_diag_4.png new file mode 100644 index 0000000000..8adf4e5ff5 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_left_bank_diag_4.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_right_bank_1.png b/resources/g2/track/raptor/gentle_up_to_right_bank_1.png new file mode 100644 index 0000000000..ab9f75ce86 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_right_bank_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_right_bank_2.png b/resources/g2/track/raptor/gentle_up_to_right_bank_2.png new file mode 100644 index 0000000000..b3ce00f56b Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_right_bank_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_right_bank_3_1.png b/resources/g2/track/raptor/gentle_up_to_right_bank_3_1.png new file mode 100644 index 0000000000..87900aaa2a Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_right_bank_3_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_right_bank_3_2.png b/resources/g2/track/raptor/gentle_up_to_right_bank_3_2.png new file mode 100644 index 0000000000..1cb8d5067b Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_right_bank_3_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_right_bank_4_1.png b/resources/g2/track/raptor/gentle_up_to_right_bank_4_1.png new file mode 100644 index 0000000000..be9fedfe85 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_right_bank_4_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_right_bank_4_2.png b/resources/g2/track/raptor/gentle_up_to_right_bank_4_2.png new file mode 100644 index 0000000000..4a16db766a Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_right_bank_4_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_right_bank_diag_1.png b/resources/g2/track/raptor/gentle_up_to_right_bank_diag_1.png new file mode 100644 index 0000000000..0f853a7f02 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_right_bank_diag_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_right_bank_diag_2.png b/resources/g2/track/raptor/gentle_up_to_right_bank_diag_2.png new file mode 100644 index 0000000000..eb57361738 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_right_bank_diag_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_right_bank_diag_3_1.png b/resources/g2/track/raptor/gentle_up_to_right_bank_diag_3_1.png new file mode 100644 index 0000000000..d21e01069e Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_right_bank_diag_3_1.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_right_bank_diag_3_2.png b/resources/g2/track/raptor/gentle_up_to_right_bank_diag_3_2.png new file mode 100644 index 0000000000..9efe11f4e5 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_right_bank_diag_3_2.png differ diff --git a/resources/g2/track/raptor/gentle_up_to_right_bank_diag_4.png b/resources/g2/track/raptor/gentle_up_to_right_bank_diag_4.png new file mode 100644 index 0000000000..94dd11ace7 Binary files /dev/null and b/resources/g2/track/raptor/gentle_up_to_right_bank_diag_4.png differ diff --git a/resources/g2/track/raptor/half_loop_1_1.png b/resources/g2/track/raptor/half_loop_1_1.png new file mode 100644 index 0000000000..3ac98e7599 Binary files /dev/null and b/resources/g2/track/raptor/half_loop_1_1.png differ diff --git a/resources/g2/track/raptor/half_loop_1_2.png b/resources/g2/track/raptor/half_loop_1_2.png new file mode 100644 index 0000000000..cce8b46595 Binary files /dev/null and b/resources/g2/track/raptor/half_loop_1_2.png differ diff --git a/resources/g2/track/raptor/half_loop_1_3.png b/resources/g2/track/raptor/half_loop_1_3.png new file mode 100644 index 0000000000..821943617b Binary files /dev/null and b/resources/g2/track/raptor/half_loop_1_3.png differ diff --git a/resources/g2/track/raptor/half_loop_1_4.png b/resources/g2/track/raptor/half_loop_1_4.png new file mode 100644 index 0000000000..5052bb5b38 Binary files /dev/null and b/resources/g2/track/raptor/half_loop_1_4.png differ diff --git a/resources/g2/track/raptor/half_loop_2_1.png b/resources/g2/track/raptor/half_loop_2_1.png new file mode 100644 index 0000000000..2b3106b068 Binary files /dev/null and b/resources/g2/track/raptor/half_loop_2_1.png differ diff --git a/resources/g2/track/raptor/half_loop_2_2.png b/resources/g2/track/raptor/half_loop_2_2.png new file mode 100644 index 0000000000..0a0f3553cc Binary files /dev/null and b/resources/g2/track/raptor/half_loop_2_2.png differ diff --git a/resources/g2/track/raptor/half_loop_2_3.png b/resources/g2/track/raptor/half_loop_2_3.png new file mode 100644 index 0000000000..ad0d66a934 Binary files /dev/null and b/resources/g2/track/raptor/half_loop_2_3.png differ diff --git a/resources/g2/track/raptor/half_loop_2_4.png b/resources/g2/track/raptor/half_loop_2_4.png new file mode 100644 index 0000000000..982dafce2d Binary files /dev/null and b/resources/g2/track/raptor/half_loop_2_4.png differ diff --git a/resources/g2/track/raptor/half_loop_3_1.png b/resources/g2/track/raptor/half_loop_3_1.png new file mode 100644 index 0000000000..ffb9a80040 Binary files /dev/null and b/resources/g2/track/raptor/half_loop_3_1.png differ diff --git a/resources/g2/track/raptor/half_loop_3_2.png b/resources/g2/track/raptor/half_loop_3_2.png new file mode 100644 index 0000000000..68da82316e Binary files /dev/null and b/resources/g2/track/raptor/half_loop_3_2.png differ diff --git a/resources/g2/track/raptor/half_loop_3_3.png b/resources/g2/track/raptor/half_loop_3_3.png new file mode 100644 index 0000000000..6dbf570ba1 Binary files /dev/null and b/resources/g2/track/raptor/half_loop_3_3.png differ diff --git a/resources/g2/track/raptor/half_loop_3_4.png b/resources/g2/track/raptor/half_loop_3_4.png new file mode 100644 index 0000000000..83ee0f5d20 Binary files /dev/null and b/resources/g2/track/raptor/half_loop_3_4.png differ diff --git a/resources/g2/track/raptor/half_loop_4_1.png b/resources/g2/track/raptor/half_loop_4_1.png new file mode 100644 index 0000000000..5174d5631c Binary files /dev/null and b/resources/g2/track/raptor/half_loop_4_1.png differ diff --git a/resources/g2/track/raptor/half_loop_4_2.png b/resources/g2/track/raptor/half_loop_4_2.png new file mode 100644 index 0000000000..0293c4f0b6 Binary files /dev/null and b/resources/g2/track/raptor/half_loop_4_2.png differ diff --git a/resources/g2/track/raptor/half_loop_4_3.png b/resources/g2/track/raptor/half_loop_4_3.png new file mode 100644 index 0000000000..92daa98745 Binary files /dev/null and b/resources/g2/track/raptor/half_loop_4_3.png differ diff --git a/resources/g2/track/raptor/half_loop_4_4.png b/resources/g2/track/raptor/half_loop_4_4.png new file mode 100644 index 0000000000..93a20b8256 Binary files /dev/null and b/resources/g2/track/raptor/half_loop_4_4.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_1_1.png b/resources/g2/track/raptor/large_half_loop_left_1_1.png new file mode 100644 index 0000000000..710de79ec6 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_1_1.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_1_2.png b/resources/g2/track/raptor/large_half_loop_left_1_2.png new file mode 100644 index 0000000000..e0ef504a1b Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_1_2.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_1_3.png b/resources/g2/track/raptor/large_half_loop_left_1_3.png new file mode 100644 index 0000000000..14a0c16f3b Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_1_3.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_1_4.png b/resources/g2/track/raptor/large_half_loop_left_1_4.png new file mode 100644 index 0000000000..d093a593e1 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_1_4.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_1_5.png b/resources/g2/track/raptor/large_half_loop_left_1_5.png new file mode 100644 index 0000000000..b40e139d46 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_1_5.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_1_6.png b/resources/g2/track/raptor/large_half_loop_left_1_6.png new file mode 100644 index 0000000000..3c9bc005fd Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_1_6.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_1_7.png b/resources/g2/track/raptor/large_half_loop_left_1_7.png new file mode 100644 index 0000000000..6c2698bfd2 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_1_7.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_2_1.png b/resources/g2/track/raptor/large_half_loop_left_2_1.png new file mode 100644 index 0000000000..f02678f8e5 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_2_1.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_2_2.png b/resources/g2/track/raptor/large_half_loop_left_2_2.png new file mode 100644 index 0000000000..268bc9fed9 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_2_2.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_2_3.png b/resources/g2/track/raptor/large_half_loop_left_2_3.png new file mode 100644 index 0000000000..b97f277e81 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_2_3.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_2_4.png b/resources/g2/track/raptor/large_half_loop_left_2_4.png new file mode 100644 index 0000000000..401bf2f55b Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_2_4.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_2_5.png b/resources/g2/track/raptor/large_half_loop_left_2_5.png new file mode 100644 index 0000000000..78c409efaa Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_2_5.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_2_6.png b/resources/g2/track/raptor/large_half_loop_left_2_6.png new file mode 100644 index 0000000000..0f0aabda50 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_2_6.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_2_7.png b/resources/g2/track/raptor/large_half_loop_left_2_7.png new file mode 100644 index 0000000000..11dd5e12d3 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_2_7.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_3_1.png b/resources/g2/track/raptor/large_half_loop_left_3_1.png new file mode 100644 index 0000000000..cd9a234ca1 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_3_1.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_3_2.png b/resources/g2/track/raptor/large_half_loop_left_3_2.png new file mode 100644 index 0000000000..72933ed1a1 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_3_2.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_3_3.png b/resources/g2/track/raptor/large_half_loop_left_3_3.png new file mode 100644 index 0000000000..48b9d335e3 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_3_3.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_3_4.png b/resources/g2/track/raptor/large_half_loop_left_3_4.png new file mode 100644 index 0000000000..5409403333 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_3_4.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_3_5.png b/resources/g2/track/raptor/large_half_loop_left_3_5.png new file mode 100644 index 0000000000..67c39321e7 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_3_5.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_3_6.png b/resources/g2/track/raptor/large_half_loop_left_3_6.png new file mode 100644 index 0000000000..05eeaefc04 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_3_6.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_3_7.png b/resources/g2/track/raptor/large_half_loop_left_3_7.png new file mode 100644 index 0000000000..3804e7798b Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_3_7.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_4_1.png b/resources/g2/track/raptor/large_half_loop_left_4_1.png new file mode 100644 index 0000000000..26d2c83c1f Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_4_1.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_4_2.png b/resources/g2/track/raptor/large_half_loop_left_4_2.png new file mode 100644 index 0000000000..d823186dec Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_4_2.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_4_3.png b/resources/g2/track/raptor/large_half_loop_left_4_3.png new file mode 100644 index 0000000000..433900e5d2 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_4_3.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_4_4.png b/resources/g2/track/raptor/large_half_loop_left_4_4.png new file mode 100644 index 0000000000..3973554c99 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_4_4.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_4_5.png b/resources/g2/track/raptor/large_half_loop_left_4_5.png new file mode 100644 index 0000000000..c3e8ddc26f Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_4_5.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_4_6.png b/resources/g2/track/raptor/large_half_loop_left_4_6.png new file mode 100644 index 0000000000..5d0cbe208a Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_4_6.png differ diff --git a/resources/g2/track/raptor/large_half_loop_left_4_7.png b/resources/g2/track/raptor/large_half_loop_left_4_7.png new file mode 100644 index 0000000000..9b52abfcae Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_left_4_7.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_1_1.png b/resources/g2/track/raptor/large_half_loop_right_1_1.png new file mode 100644 index 0000000000..7b17eb21fc Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_1_1.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_1_2.png b/resources/g2/track/raptor/large_half_loop_right_1_2.png new file mode 100644 index 0000000000..6fba964def Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_1_2.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_1_3.png b/resources/g2/track/raptor/large_half_loop_right_1_3.png new file mode 100644 index 0000000000..01b9fb4ea3 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_1_3.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_1_4.png b/resources/g2/track/raptor/large_half_loop_right_1_4.png new file mode 100644 index 0000000000..4dcc2e5616 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_1_4.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_1_5.png b/resources/g2/track/raptor/large_half_loop_right_1_5.png new file mode 100644 index 0000000000..39e658d411 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_1_5.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_1_6.png b/resources/g2/track/raptor/large_half_loop_right_1_6.png new file mode 100644 index 0000000000..2a4eb39637 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_1_6.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_1_7.png b/resources/g2/track/raptor/large_half_loop_right_1_7.png new file mode 100644 index 0000000000..7ee115ff4f Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_1_7.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_2_1.png b/resources/g2/track/raptor/large_half_loop_right_2_1.png new file mode 100644 index 0000000000..7c3ab4701f Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_2_1.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_2_2.png b/resources/g2/track/raptor/large_half_loop_right_2_2.png new file mode 100644 index 0000000000..3f613a5617 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_2_2.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_2_3.png b/resources/g2/track/raptor/large_half_loop_right_2_3.png new file mode 100644 index 0000000000..5e11db0372 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_2_3.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_2_4.png b/resources/g2/track/raptor/large_half_loop_right_2_4.png new file mode 100644 index 0000000000..42c72d732c Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_2_4.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_2_5.png b/resources/g2/track/raptor/large_half_loop_right_2_5.png new file mode 100644 index 0000000000..910add3350 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_2_5.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_2_6.png b/resources/g2/track/raptor/large_half_loop_right_2_6.png new file mode 100644 index 0000000000..07590e0184 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_2_6.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_2_7.png b/resources/g2/track/raptor/large_half_loop_right_2_7.png new file mode 100644 index 0000000000..6e9c844874 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_2_7.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_3_1.png b/resources/g2/track/raptor/large_half_loop_right_3_1.png new file mode 100644 index 0000000000..f41128235f Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_3_1.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_3_2.png b/resources/g2/track/raptor/large_half_loop_right_3_2.png new file mode 100644 index 0000000000..5fbeb998f8 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_3_2.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_3_3.png b/resources/g2/track/raptor/large_half_loop_right_3_3.png new file mode 100644 index 0000000000..e5da46c02d Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_3_3.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_3_4.png b/resources/g2/track/raptor/large_half_loop_right_3_4.png new file mode 100644 index 0000000000..efab15cc1b Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_3_4.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_3_5.png b/resources/g2/track/raptor/large_half_loop_right_3_5.png new file mode 100644 index 0000000000..18efc82585 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_3_5.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_3_6.png b/resources/g2/track/raptor/large_half_loop_right_3_6.png new file mode 100644 index 0000000000..d86d235de8 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_3_6.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_3_7.png b/resources/g2/track/raptor/large_half_loop_right_3_7.png new file mode 100644 index 0000000000..2fa1957361 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_3_7.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_4_1.png b/resources/g2/track/raptor/large_half_loop_right_4_1.png new file mode 100644 index 0000000000..0ad5a3da4c Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_4_1.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_4_2.png b/resources/g2/track/raptor/large_half_loop_right_4_2.png new file mode 100644 index 0000000000..62074b54f0 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_4_2.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_4_3.png b/resources/g2/track/raptor/large_half_loop_right_4_3.png new file mode 100644 index 0000000000..5163471b77 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_4_3.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_4_4.png b/resources/g2/track/raptor/large_half_loop_right_4_4.png new file mode 100644 index 0000000000..f57c22d3a0 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_4_4.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_4_5.png b/resources/g2/track/raptor/large_half_loop_right_4_5.png new file mode 100644 index 0000000000..e547974d41 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_4_5.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_4_6.png b/resources/g2/track/raptor/large_half_loop_right_4_6.png new file mode 100644 index 0000000000..9e3bf2a467 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_4_6.png differ diff --git a/resources/g2/track/raptor/large_half_loop_right_4_7.png b/resources/g2/track/raptor/large_half_loop_right_4_7.png new file mode 100644 index 0000000000..a9ec7d7038 Binary files /dev/null and b/resources/g2/track/raptor/large_half_loop_right_4_7.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_1_1.png b/resources/g2/track/raptor/large_turn_left_to_diag_1_1.png new file mode 100644 index 0000000000..419f29ad57 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_1_1.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_1_2.png b/resources/g2/track/raptor/large_turn_left_to_diag_1_2.png new file mode 100644 index 0000000000..527493206b Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_1_2.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_1_3.png b/resources/g2/track/raptor/large_turn_left_to_diag_1_3.png new file mode 100644 index 0000000000..799821b2a9 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_1_3.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_1_4.png b/resources/g2/track/raptor/large_turn_left_to_diag_1_4.png new file mode 100644 index 0000000000..baf1d44c40 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_1_4.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_2_1.png b/resources/g2/track/raptor/large_turn_left_to_diag_2_1.png new file mode 100644 index 0000000000..e94dada485 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_2_1.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_2_2.png b/resources/g2/track/raptor/large_turn_left_to_diag_2_2.png new file mode 100644 index 0000000000..fe9db57e3e Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_2_2.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_2_3.png b/resources/g2/track/raptor/large_turn_left_to_diag_2_3.png new file mode 100644 index 0000000000..e36fbc37dc Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_2_3.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_2_4.png b/resources/g2/track/raptor/large_turn_left_to_diag_2_4.png new file mode 100644 index 0000000000..b8e69b1bcf Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_2_4.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_3_1.png b/resources/g2/track/raptor/large_turn_left_to_diag_3_1.png new file mode 100644 index 0000000000..78ee859b78 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_3_1.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_3_2.png b/resources/g2/track/raptor/large_turn_left_to_diag_3_2.png new file mode 100644 index 0000000000..0d7487aff4 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_3_2.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_3_3.png b/resources/g2/track/raptor/large_turn_left_to_diag_3_3.png new file mode 100644 index 0000000000..46a8c3c4af Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_3_3.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_3_4.png b/resources/g2/track/raptor/large_turn_left_to_diag_3_4.png new file mode 100644 index 0000000000..8bf81b370e Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_3_4.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_4_1.png b/resources/g2/track/raptor/large_turn_left_to_diag_4_1.png new file mode 100644 index 0000000000..e758367849 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_4_1.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_4_2.png b/resources/g2/track/raptor/large_turn_left_to_diag_4_2.png new file mode 100644 index 0000000000..e8ae23464b Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_4_2.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_4_3.png b/resources/g2/track/raptor/large_turn_left_to_diag_4_3.png new file mode 100644 index 0000000000..f5d9087cb2 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_4_3.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_4_4.png b/resources/g2/track/raptor/large_turn_left_to_diag_4_4.png new file mode 100644 index 0000000000..07bcbfa186 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_4_4.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_1_1.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_1_1.png new file mode 100644 index 0000000000..3965010d03 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_1_1.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_1_2.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_1_2.png new file mode 100644 index 0000000000..9f544a0c61 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_1_2.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_1_3.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_1_3.png new file mode 100644 index 0000000000..b97ac92e1a Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_1_3.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_1_4.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_1_4.png new file mode 100644 index 0000000000..fc3f239111 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_1_4.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_2_1.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_2_1.png new file mode 100644 index 0000000000..6445fc8224 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_2_1.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_2_2.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_2_2.png new file mode 100644 index 0000000000..ede119a341 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_2_2.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_2_3.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_2_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_2_3.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_2_4.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_2_4.png new file mode 100644 index 0000000000..df42fc567e Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_2_4.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_3_1.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_3_1.png new file mode 100644 index 0000000000..b3d6a03cf8 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_3_1.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_3_2.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_3_2.png new file mode 100644 index 0000000000..cd1b3c0d66 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_3_2.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_3_3.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_3_3.png new file mode 100644 index 0000000000..9d18be6cde Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_3_3.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_3_4.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_3_4.png new file mode 100644 index 0000000000..41255ec283 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_3_4.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_4_1.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_4_1.png new file mode 100644 index 0000000000..ce6bd2569c Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_4_1.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_4_2.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_4_2.png new file mode 100644 index 0000000000..f01fe865db Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_4_2.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_4_3.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_4_3.png new file mode 100644 index 0000000000..dd298c6a19 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_4_3.png differ diff --git a/resources/g2/track/raptor/large_turn_left_to_diag_bank_4_4.png b/resources/g2/track/raptor/large_turn_left_to_diag_bank_4_4.png new file mode 100644 index 0000000000..d0b37d1fd9 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_left_to_diag_bank_4_4.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_1_1.png b/resources/g2/track/raptor/large_turn_right_to_diag_1_1.png new file mode 100644 index 0000000000..804f229b48 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_1_1.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_1_2.png b/resources/g2/track/raptor/large_turn_right_to_diag_1_2.png new file mode 100644 index 0000000000..b1526aa01a Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_1_2.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_1_3.png b/resources/g2/track/raptor/large_turn_right_to_diag_1_3.png new file mode 100644 index 0000000000..aadc1a5524 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_1_3.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_1_4.png b/resources/g2/track/raptor/large_turn_right_to_diag_1_4.png new file mode 100644 index 0000000000..1500a74a7c Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_1_4.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_2_1.png b/resources/g2/track/raptor/large_turn_right_to_diag_2_1.png new file mode 100644 index 0000000000..8f846f934b Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_2_1.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_2_2.png b/resources/g2/track/raptor/large_turn_right_to_diag_2_2.png new file mode 100644 index 0000000000..04dd9bd5c6 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_2_2.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_2_3.png b/resources/g2/track/raptor/large_turn_right_to_diag_2_3.png new file mode 100644 index 0000000000..1569a51de6 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_2_3.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_2_4.png b/resources/g2/track/raptor/large_turn_right_to_diag_2_4.png new file mode 100644 index 0000000000..d48a39456e Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_2_4.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_3_1.png b/resources/g2/track/raptor/large_turn_right_to_diag_3_1.png new file mode 100644 index 0000000000..5ac6adc4b7 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_3_1.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_3_2.png b/resources/g2/track/raptor/large_turn_right_to_diag_3_2.png new file mode 100644 index 0000000000..84d12fd452 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_3_2.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_3_3.png b/resources/g2/track/raptor/large_turn_right_to_diag_3_3.png new file mode 100644 index 0000000000..4db60ae985 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_3_3.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_3_4.png b/resources/g2/track/raptor/large_turn_right_to_diag_3_4.png new file mode 100644 index 0000000000..06ce92b925 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_3_4.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_4_1.png b/resources/g2/track/raptor/large_turn_right_to_diag_4_1.png new file mode 100644 index 0000000000..224ece37fa Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_4_1.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_4_2.png b/resources/g2/track/raptor/large_turn_right_to_diag_4_2.png new file mode 100644 index 0000000000..26dfd93ab6 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_4_2.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_4_3.png b/resources/g2/track/raptor/large_turn_right_to_diag_4_3.png new file mode 100644 index 0000000000..ebb3d9261d Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_4_3.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_4_4.png b/resources/g2/track/raptor/large_turn_right_to_diag_4_4.png new file mode 100644 index 0000000000..ba18c8b801 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_4_4.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_1_1.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_1_1.png new file mode 100644 index 0000000000..998519d39d Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_1_1.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_1_2.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_1_2.png new file mode 100644 index 0000000000..631114d6b2 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_1_2.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_1_3.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_1_3.png new file mode 100644 index 0000000000..26eda07fac Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_1_3.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_1_4.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_1_4.png new file mode 100644 index 0000000000..17874615d4 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_1_4.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_2_1.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_2_1.png new file mode 100644 index 0000000000..53931bfafe Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_2_1.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_2_2.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_2_2.png new file mode 100644 index 0000000000..fe033ccee1 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_2_2.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_2_3.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_2_3.png new file mode 100644 index 0000000000..e71ab4a12d Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_2_3.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_2_4.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_2_4.png new file mode 100644 index 0000000000..258dca61f5 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_2_4.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_3_1.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_3_1.png new file mode 100644 index 0000000000..7609f53975 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_3_1.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_3_2.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_3_2.png new file mode 100644 index 0000000000..0c381851f0 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_3_2.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_3_3.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_3_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_3_3.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_3_4.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_3_4.png new file mode 100644 index 0000000000..094efae0de Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_3_4.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_4_1.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_4_1.png new file mode 100644 index 0000000000..e6ed5d2130 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_4_1.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_4_2.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_4_2.png new file mode 100644 index 0000000000..6c06848ae3 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_4_2.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_4_3.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_4_3.png new file mode 100644 index 0000000000..bd726ade30 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_4_3.png differ diff --git a/resources/g2/track/raptor/large_turn_right_to_diag_bank_4_4.png b/resources/g2/track/raptor/large_turn_right_to_diag_bank_4_4.png new file mode 100644 index 0000000000..00128972d4 Binary files /dev/null and b/resources/g2/track/raptor/large_turn_right_to_diag_bank_4_4.png differ diff --git a/resources/g2/track/raptor/left_bank_1.png b/resources/g2/track/raptor/left_bank_1.png new file mode 100644 index 0000000000..7ecb364ad2 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_1.png differ diff --git a/resources/g2/track/raptor/left_bank_2.png b/resources/g2/track/raptor/left_bank_2.png new file mode 100644 index 0000000000..3f2278e13d Binary files /dev/null and b/resources/g2/track/raptor/left_bank_2.png differ diff --git a/resources/g2/track/raptor/left_bank_3.png b/resources/g2/track/raptor/left_bank_3.png new file mode 100644 index 0000000000..14864032b4 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_3.png differ diff --git a/resources/g2/track/raptor/left_bank_4.png b/resources/g2/track/raptor/left_bank_4.png new file mode 100644 index 0000000000..7351ba6f95 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_4.png differ diff --git a/resources/g2/track/raptor/left_bank_diag_1.png b/resources/g2/track/raptor/left_bank_diag_1.png new file mode 100644 index 0000000000..0092e9142e Binary files /dev/null and b/resources/g2/track/raptor/left_bank_diag_1.png differ diff --git a/resources/g2/track/raptor/left_bank_diag_2.png b/resources/g2/track/raptor/left_bank_diag_2.png new file mode 100644 index 0000000000..c22f0dbef9 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_diag_2.png differ diff --git a/resources/g2/track/raptor/left_bank_diag_3.png b/resources/g2/track/raptor/left_bank_diag_3.png new file mode 100644 index 0000000000..e741e2b11a Binary files /dev/null and b/resources/g2/track/raptor/left_bank_diag_3.png differ diff --git a/resources/g2/track/raptor/left_bank_diag_4.png b/resources/g2/track/raptor/left_bank_diag_4.png new file mode 100644 index 0000000000..48fab6f064 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_diag_4.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_1_1.png b/resources/g2/track/raptor/left_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..64f0022fc3 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_1_2.png b/resources/g2/track/raptor/left_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..b0497c6894 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_2_1.png b/resources/g2/track/raptor/left_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..7cbfab8232 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_2_2.png b/resources/g2/track/raptor/left_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..d4e51c097e Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_3.png b/resources/g2/track/raptor/left_bank_to_gentle_up_3.png new file mode 100644 index 0000000000..3333295f8b Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_3.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_4.png b/resources/g2/track/raptor/left_bank_to_gentle_up_4.png new file mode 100644 index 0000000000..7c2f030762 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_4.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_diag_1_1.png b/resources/g2/track/raptor/left_bank_to_gentle_up_diag_1_1.png new file mode 100644 index 0000000000..c46ada9353 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_diag_1_1.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_diag_1_2.png b/resources/g2/track/raptor/left_bank_to_gentle_up_diag_1_2.png new file mode 100644 index 0000000000..6e39c71013 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_diag_1_2.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_diag_2.png b/resources/g2/track/raptor/left_bank_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..6fcd562915 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_diag_3.png b/resources/g2/track/raptor/left_bank_to_gentle_up_diag_3.png new file mode 100644 index 0000000000..19e53238f0 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_diag_3.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_diag_4.png b/resources/g2/track/raptor/left_bank_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..d007fc1406 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_left_bank_1.png b/resources/g2/track/raptor/left_bank_to_gentle_up_left_bank_1.png new file mode 100644 index 0000000000..87029e9098 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_left_bank_1.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_left_bank_2.png b/resources/g2/track/raptor/left_bank_to_gentle_up_left_bank_2.png new file mode 100644 index 0000000000..07a73ae2c0 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_left_bank_2.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_left_bank_3.png b/resources/g2/track/raptor/left_bank_to_gentle_up_left_bank_3.png new file mode 100644 index 0000000000..f7cf058fa9 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_left_bank_3.png differ diff --git a/resources/g2/track/raptor/left_bank_to_gentle_up_left_bank_4.png b/resources/g2/track/raptor/left_bank_to_gentle_up_left_bank_4.png new file mode 100644 index 0000000000..2df337c928 Binary files /dev/null and b/resources/g2/track/raptor/left_bank_to_gentle_up_left_bank_4.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_1_1.png b/resources/g2/track/raptor/medium_helix_left_up_1_1.png new file mode 100644 index 0000000000..dde7f2bb94 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_1_1.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_1_2.png b/resources/g2/track/raptor/medium_helix_left_up_1_2.png new file mode 100644 index 0000000000..e7fd1506a2 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_1_2.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_1_3.png b/resources/g2/track/raptor/medium_helix_left_up_1_3.png new file mode 100644 index 0000000000..c9a0180432 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_1_3.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_1_4.png b/resources/g2/track/raptor/medium_helix_left_up_1_4.png new file mode 100644 index 0000000000..23e20963fe Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_1_4.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_1_5.png b/resources/g2/track/raptor/medium_helix_left_up_1_5.png new file mode 100644 index 0000000000..7632622d8f Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_1_5.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_1_6.png b/resources/g2/track/raptor/medium_helix_left_up_1_6.png new file mode 100644 index 0000000000..f13173e548 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_1_6.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_2_1.png b/resources/g2/track/raptor/medium_helix_left_up_2_1.png new file mode 100644 index 0000000000..a960287105 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_2_1.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_2_2.png b/resources/g2/track/raptor/medium_helix_left_up_2_2.png new file mode 100644 index 0000000000..8a12805d64 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_2_2.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_2_3.png b/resources/g2/track/raptor/medium_helix_left_up_2_3.png new file mode 100644 index 0000000000..f80bd32198 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_2_3.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_2_4.png b/resources/g2/track/raptor/medium_helix_left_up_2_4.png new file mode 100644 index 0000000000..cceb132d5c Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_2_4.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_2_5.png b/resources/g2/track/raptor/medium_helix_left_up_2_5.png new file mode 100644 index 0000000000..a95249a18d Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_2_5.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_3_1.png b/resources/g2/track/raptor/medium_helix_left_up_3_1.png new file mode 100644 index 0000000000..e6a259c98c Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_3_1.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_3_2.png b/resources/g2/track/raptor/medium_helix_left_up_3_2.png new file mode 100644 index 0000000000..7d8cbcd4d4 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_3_2.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_3_3.png b/resources/g2/track/raptor/medium_helix_left_up_3_3.png new file mode 100644 index 0000000000..45ef84faa8 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_3_3.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_3_4.png b/resources/g2/track/raptor/medium_helix_left_up_3_4.png new file mode 100644 index 0000000000..349e1bfe09 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_3_4.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_3_5.png b/resources/g2/track/raptor/medium_helix_left_up_3_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_3_5.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_3_6.png b/resources/g2/track/raptor/medium_helix_left_up_3_6.png new file mode 100644 index 0000000000..5f29c6b5d3 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_3_6.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_4_1.png b/resources/g2/track/raptor/medium_helix_left_up_4_1.png new file mode 100644 index 0000000000..d6c99af135 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_4_1.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_4_2.png b/resources/g2/track/raptor/medium_helix_left_up_4_2.png new file mode 100644 index 0000000000..8352ac97a0 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_4_2.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_4_3.png b/resources/g2/track/raptor/medium_helix_left_up_4_3.png new file mode 100644 index 0000000000..8815efb622 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_4_3.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_4_4.png b/resources/g2/track/raptor/medium_helix_left_up_4_4.png new file mode 100644 index 0000000000..202cc356a9 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_4_4.png differ diff --git a/resources/g2/track/raptor/medium_helix_left_up_4_5.png b/resources/g2/track/raptor/medium_helix_left_up_4_5.png new file mode 100644 index 0000000000..9c6129c8b6 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_left_up_4_5.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_1_1.png b/resources/g2/track/raptor/medium_helix_right_up_1_1.png new file mode 100644 index 0000000000..e80aea19db Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_1_1.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_1_2.png b/resources/g2/track/raptor/medium_helix_right_up_1_2.png new file mode 100644 index 0000000000..b95f0fa5f3 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_1_2.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_1_3.png b/resources/g2/track/raptor/medium_helix_right_up_1_3.png new file mode 100644 index 0000000000..20f6303810 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_1_3.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_1_4.png b/resources/g2/track/raptor/medium_helix_right_up_1_4.png new file mode 100644 index 0000000000..44c316ef93 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_1_4.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_1_5.png b/resources/g2/track/raptor/medium_helix_right_up_1_5.png new file mode 100644 index 0000000000..92399c5e86 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_1_5.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_2_1.png b/resources/g2/track/raptor/medium_helix_right_up_2_1.png new file mode 100644 index 0000000000..1adb6cb760 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_2_1.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_2_2.png b/resources/g2/track/raptor/medium_helix_right_up_2_2.png new file mode 100644 index 0000000000..e06f14dbfb Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_2_2.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_2_3.png b/resources/g2/track/raptor/medium_helix_right_up_2_3.png new file mode 100644 index 0000000000..834d85fa9c Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_2_3.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_2_4.png b/resources/g2/track/raptor/medium_helix_right_up_2_4.png new file mode 100644 index 0000000000..efbec625c4 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_2_4.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_2_5.png b/resources/g2/track/raptor/medium_helix_right_up_2_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_2_5.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_2_6.png b/resources/g2/track/raptor/medium_helix_right_up_2_6.png new file mode 100644 index 0000000000..8d0a34c022 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_2_6.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_3_1.png b/resources/g2/track/raptor/medium_helix_right_up_3_1.png new file mode 100644 index 0000000000..f8d8d232d4 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_3_1.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_3_2.png b/resources/g2/track/raptor/medium_helix_right_up_3_2.png new file mode 100644 index 0000000000..83c7b535d0 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_3_2.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_3_3.png b/resources/g2/track/raptor/medium_helix_right_up_3_3.png new file mode 100644 index 0000000000..cf0e035b83 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_3_3.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_3_4.png b/resources/g2/track/raptor/medium_helix_right_up_3_4.png new file mode 100644 index 0000000000..6dca24622e Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_3_4.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_3_5.png b/resources/g2/track/raptor/medium_helix_right_up_3_5.png new file mode 100644 index 0000000000..e4b65e0ffe Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_3_5.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_4_1.png b/resources/g2/track/raptor/medium_helix_right_up_4_1.png new file mode 100644 index 0000000000..08d0a66147 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_4_1.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_4_2.png b/resources/g2/track/raptor/medium_helix_right_up_4_2.png new file mode 100644 index 0000000000..d907d5123e Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_4_2.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_4_3.png b/resources/g2/track/raptor/medium_helix_right_up_4_3.png new file mode 100644 index 0000000000..7c97f64456 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_4_3.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_4_4.png b/resources/g2/track/raptor/medium_helix_right_up_4_4.png new file mode 100644 index 0000000000..9b96c2654e Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_4_4.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_4_5.png b/resources/g2/track/raptor/medium_helix_right_up_4_5.png new file mode 100644 index 0000000000..f8e37cd5ac Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_4_5.png differ diff --git a/resources/g2/track/raptor/medium_helix_right_up_4_6.png b/resources/g2/track/raptor/medium_helix_right_up_4_6.png new file mode 100644 index 0000000000..5859ddb781 Binary files /dev/null and b/resources/g2/track/raptor/medium_helix_right_up_4_6.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_1_1.png b/resources/g2/track/raptor/medium_turn_left_1_1.png new file mode 100644 index 0000000000..fd0f8c1639 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_1_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_1_2.png b/resources/g2/track/raptor/medium_turn_left_1_2.png new file mode 100644 index 0000000000..f58952a9b1 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_1_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_1_3.png b/resources/g2/track/raptor/medium_turn_left_1_3.png new file mode 100644 index 0000000000..1e65f886ac Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_1_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_1_4.png b/resources/g2/track/raptor/medium_turn_left_1_4.png new file mode 100644 index 0000000000..c1d523bfbf Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_1_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_1_5.png b/resources/g2/track/raptor/medium_turn_left_1_5.png new file mode 100644 index 0000000000..baddb6d412 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_1_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_2_1.png b/resources/g2/track/raptor/medium_turn_left_2_1.png new file mode 100644 index 0000000000..b49dc32590 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_2_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_2_2.png b/resources/g2/track/raptor/medium_turn_left_2_2.png new file mode 100644 index 0000000000..13f3480b63 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_2_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_2_3.png b/resources/g2/track/raptor/medium_turn_left_2_3.png new file mode 100644 index 0000000000..9a68503371 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_2_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_2_4.png b/resources/g2/track/raptor/medium_turn_left_2_4.png new file mode 100644 index 0000000000..6aaa4c61d3 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_2_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_2_5.png b/resources/g2/track/raptor/medium_turn_left_2_5.png new file mode 100644 index 0000000000..fd835a0048 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_2_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_3_1.png b/resources/g2/track/raptor/medium_turn_left_3_1.png new file mode 100644 index 0000000000..c06e98484a Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_3_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_3_2.png b/resources/g2/track/raptor/medium_turn_left_3_2.png new file mode 100644 index 0000000000..014bdbc045 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_3_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_3_3.png b/resources/g2/track/raptor/medium_turn_left_3_3.png new file mode 100644 index 0000000000..c35926736b Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_3_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_3_4.png b/resources/g2/track/raptor/medium_turn_left_3_4.png new file mode 100644 index 0000000000..6ad06c6158 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_3_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_3_5.png b/resources/g2/track/raptor/medium_turn_left_3_5.png new file mode 100644 index 0000000000..3f64b8656b Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_3_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_4_1.png b/resources/g2/track/raptor/medium_turn_left_4_1.png new file mode 100644 index 0000000000..773d2dc5e3 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_4_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_4_2.png b/resources/g2/track/raptor/medium_turn_left_4_2.png new file mode 100644 index 0000000000..5e1e732aa4 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_4_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_4_3.png b/resources/g2/track/raptor/medium_turn_left_4_3.png new file mode 100644 index 0000000000..14d7de7e00 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_4_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_4_4.png b/resources/g2/track/raptor/medium_turn_left_4_4.png new file mode 100644 index 0000000000..7a94e41707 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_4_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_4_5.png b/resources/g2/track/raptor/medium_turn_left_4_5.png new file mode 100644 index 0000000000..3626ebfc5a Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_4_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_1_1.png b/resources/g2/track/raptor/medium_turn_left_bank_1_1.png new file mode 100644 index 0000000000..744d51e904 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_1_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_1_2.png b/resources/g2/track/raptor/medium_turn_left_bank_1_2.png new file mode 100644 index 0000000000..a81b4375bd Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_1_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_1_3.png b/resources/g2/track/raptor/medium_turn_left_bank_1_3.png new file mode 100644 index 0000000000..14628105ba Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_1_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_1_4.png b/resources/g2/track/raptor/medium_turn_left_bank_1_4.png new file mode 100644 index 0000000000..52f0370edf Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_1_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_1_5.png b/resources/g2/track/raptor/medium_turn_left_bank_1_5.png new file mode 100644 index 0000000000..9032659623 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_1_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_1_6.png b/resources/g2/track/raptor/medium_turn_left_bank_1_6.png new file mode 100644 index 0000000000..8aa258297a Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_1_6.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_2_1.png b/resources/g2/track/raptor/medium_turn_left_bank_2_1.png new file mode 100644 index 0000000000..e260f62061 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_2_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_2_2.png b/resources/g2/track/raptor/medium_turn_left_bank_2_2.png new file mode 100644 index 0000000000..4faffa4339 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_2_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_2_3.png b/resources/g2/track/raptor/medium_turn_left_bank_2_3.png new file mode 100644 index 0000000000..d8aab0d5ac Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_2_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_2_4.png b/resources/g2/track/raptor/medium_turn_left_bank_2_4.png new file mode 100644 index 0000000000..a82b78a29e Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_2_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_2_5.png b/resources/g2/track/raptor/medium_turn_left_bank_2_5.png new file mode 100644 index 0000000000..c51c260d9f Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_2_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_3_1.png b/resources/g2/track/raptor/medium_turn_left_bank_3_1.png new file mode 100644 index 0000000000..b863d5bff6 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_3_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_3_2.png b/resources/g2/track/raptor/medium_turn_left_bank_3_2.png new file mode 100644 index 0000000000..a867716d36 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_3_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_3_3.png b/resources/g2/track/raptor/medium_turn_left_bank_3_3.png new file mode 100644 index 0000000000..4306ae00a7 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_3_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_3_4.png b/resources/g2/track/raptor/medium_turn_left_bank_3_4.png new file mode 100644 index 0000000000..ea966e043d Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_3_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_3_5.png b/resources/g2/track/raptor/medium_turn_left_bank_3_5.png new file mode 100644 index 0000000000..5df4712db8 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_3_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_3_6.png b/resources/g2/track/raptor/medium_turn_left_bank_3_6.png new file mode 100644 index 0000000000..333dff23ad Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_3_6.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_4_1.png b/resources/g2/track/raptor/medium_turn_left_bank_4_1.png new file mode 100644 index 0000000000..d784d45e42 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_4_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_4_2.png b/resources/g2/track/raptor/medium_turn_left_bank_4_2.png new file mode 100644 index 0000000000..b74973b2ad Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_4_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_4_3.png b/resources/g2/track/raptor/medium_turn_left_bank_4_3.png new file mode 100644 index 0000000000..5976f77a26 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_4_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_4_4.png b/resources/g2/track/raptor/medium_turn_left_bank_4_4.png new file mode 100644 index 0000000000..bf8bb7d1cc Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_4_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_4_5.png b/resources/g2/track/raptor/medium_turn_left_bank_4_5.png new file mode 100644 index 0000000000..d145db8ddc Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_4_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_1.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_1.png new file mode 100644 index 0000000000..cdc5b2e0dc Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_2.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_2.png new file mode 100644 index 0000000000..cbebe98c6e Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_3.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_4.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_4.png new file mode 100644 index 0000000000..5bf5824b8a Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_5.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_5.png new file mode 100644 index 0000000000..230c32b40f Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_1_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_1.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_1.png new file mode 100644 index 0000000000..3e59818068 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_2.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_2.png new file mode 100644 index 0000000000..1874dcd6fe Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_3.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_3.png new file mode 100644 index 0000000000..e6f6364504 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_4.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_4.png new file mode 100644 index 0000000000..c7090963f5 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_5.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_5.png new file mode 100644 index 0000000000..6ebf9f6a9e Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_2_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_1.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_1.png new file mode 100644 index 0000000000..4a9c8afbc7 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_2.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_3.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_4.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_4.png new file mode 100644 index 0000000000..b8705f1a9f Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_5.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_5.png new file mode 100644 index 0000000000..597419f4d1 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_3_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_1.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_1.png new file mode 100644 index 0000000000..d0acaea502 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_2.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_2.png new file mode 100644 index 0000000000..a199f1c438 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_3.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_3.png new file mode 100644 index 0000000000..a2fc030fe7 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_4.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_4.png new file mode 100644 index 0000000000..04505445d6 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_5.png b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_5.png new file mode 100644 index 0000000000..a6fd8c1f3f Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_bank_gentle_up_4_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_1_1.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_1_1.png new file mode 100644 index 0000000000..5af76de262 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_1_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_1_2.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_1_2.png new file mode 100644 index 0000000000..f65d8a6996 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_1_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_1_3.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_1_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_1_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_1_4.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_1_4.png new file mode 100644 index 0000000000..dc4c71be45 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_1_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_1_5.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_1_5.png new file mode 100644 index 0000000000..c041b20407 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_1_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_2_1.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_2_1.png new file mode 100644 index 0000000000..dfc21f6967 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_2_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_2_2.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_2_2.png new file mode 100644 index 0000000000..057e5e2ef9 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_2_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_2_3.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_2_3.png new file mode 100644 index 0000000000..75e8d35fca Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_2_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_2_4.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_2_4.png new file mode 100644 index 0000000000..a1443aef56 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_2_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_2_5.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_2_5.png new file mode 100644 index 0000000000..2e3936e526 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_2_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_3_1.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_3_1.png new file mode 100644 index 0000000000..d0ae92ae38 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_3_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_3_2.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_3_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_3_3.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_3_3.png new file mode 100644 index 0000000000..2a1ac56562 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_3_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_3_4.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_3_4.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_3_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_3_5.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_3_5.png new file mode 100644 index 0000000000..b223467c8d Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_3_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_4_1.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_4_1.png new file mode 100644 index 0000000000..6e1723460b Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_4_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_4_2.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_4_2.png new file mode 100644 index 0000000000..3f361ef514 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_4_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_4_3.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_4_3.png new file mode 100644 index 0000000000..f1ef07a94f Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_4_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_4_4.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_4_4.png new file mode 100644 index 0000000000..470a64999c Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_4_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_left_gentle_up_4_5.png b/resources/g2/track/raptor/medium_turn_left_gentle_up_4_5.png new file mode 100644 index 0000000000..34abb170ad Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_left_gentle_up_4_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_1.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_1.png new file mode 100644 index 0000000000..af0db33a8d Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_2.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_2.png new file mode 100644 index 0000000000..c3671eef8a Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_3.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_3.png new file mode 100644 index 0000000000..a0a8c55066 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_4.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_4.png new file mode 100644 index 0000000000..1592a6d8eb Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_5.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_5.png new file mode 100644 index 0000000000..482149b623 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_1_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_1.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_1.png new file mode 100644 index 0000000000..5cb4aab7a4 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_2.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_3.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_4.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_4.png new file mode 100644 index 0000000000..af7a7ca9b6 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_5.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_5.png new file mode 100644 index 0000000000..a8514a8a54 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_2_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_1.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_1.png new file mode 100644 index 0000000000..2a5d4da2b3 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_2.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_2.png new file mode 100644 index 0000000000..18e208d8ac Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_3.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_3.png new file mode 100644 index 0000000000..f779c0f5eb Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_4.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_4.png new file mode 100644 index 0000000000..092acc1c94 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_5.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_5.png new file mode 100644 index 0000000000..8316d079ae Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_3_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_1.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_1.png new file mode 100644 index 0000000000..cab02de1b9 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_2.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_2.png new file mode 100644 index 0000000000..bfb116976a Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_3.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_4.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_4.png new file mode 100644 index 0000000000..d26c919e39 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_5.png b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_5.png new file mode 100644 index 0000000000..d925b96211 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_bank_gentle_up_4_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_1_1.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_1_1.png new file mode 100644 index 0000000000..07f5e7a40a Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_1_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_1_2.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_1_2.png new file mode 100644 index 0000000000..c0ff818137 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_1_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_1_3.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_1_3.png new file mode 100644 index 0000000000..e89c40564f Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_1_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_1_4.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_1_4.png new file mode 100644 index 0000000000..312a5c8db7 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_1_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_1_5.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_1_5.png new file mode 100644 index 0000000000..93ac6a3603 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_1_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_2_1.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_2_1.png new file mode 100644 index 0000000000..6d22b37461 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_2_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_2_2.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_2_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_2_3.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_2_3.png new file mode 100644 index 0000000000..bee3f3abfa Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_2_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_2_4.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_2_4.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_2_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_2_5.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_2_5.png new file mode 100644 index 0000000000..28c7fced1b Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_2_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_3_1.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_3_1.png new file mode 100644 index 0000000000..441f044271 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_3_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_3_2.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_3_2.png new file mode 100644 index 0000000000..1e7d0e31d1 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_3_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_3_3.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_3_3.png new file mode 100644 index 0000000000..917297feb3 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_3_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_3_4.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_3_4.png new file mode 100644 index 0000000000..f86cdb6149 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_3_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_3_5.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_3_5.png new file mode 100644 index 0000000000..a091180cf9 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_3_5.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_4_1.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_4_1.png new file mode 100644 index 0000000000..f379d48be9 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_4_1.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_4_2.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_4_2.png new file mode 100644 index 0000000000..81460170fa Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_4_2.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_4_3.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_4_3.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_4_3.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_4_4.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_4_4.png new file mode 100644 index 0000000000..a90d0a6c09 Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_4_4.png differ diff --git a/resources/g2/track/raptor/medium_turn_right_gentle_up_4_5.png b/resources/g2/track/raptor/medium_turn_right_gentle_up_4_5.png new file mode 100644 index 0000000000..612c83961c Binary files /dev/null and b/resources/g2/track/raptor/medium_turn_right_gentle_up_4_5.png differ diff --git a/resources/g2/track/raptor/preview_support.png b/resources/g2/track/raptor/preview_support.png new file mode 100644 index 0000000000..70e23f3279 Binary files /dev/null and b/resources/g2/track/raptor/preview_support.png differ diff --git a/resources/g2/track/raptor/preview_track.png b/resources/g2/track/raptor/preview_track.png new file mode 100644 index 0000000000..c20225ca35 Binary files /dev/null and b/resources/g2/track/raptor/preview_track.png differ diff --git a/resources/g2/track/raptor/quarter_loop_up_1_1.png b/resources/g2/track/raptor/quarter_loop_up_1_1.png new file mode 100644 index 0000000000..f3f3bb0102 Binary files /dev/null and b/resources/g2/track/raptor/quarter_loop_up_1_1.png differ diff --git a/resources/g2/track/raptor/quarter_loop_up_1_2.png b/resources/g2/track/raptor/quarter_loop_up_1_2.png new file mode 100644 index 0000000000..7ffb1e3fb4 Binary files /dev/null and b/resources/g2/track/raptor/quarter_loop_up_1_2.png differ diff --git a/resources/g2/track/raptor/quarter_loop_up_1_3.png b/resources/g2/track/raptor/quarter_loop_up_1_3.png new file mode 100644 index 0000000000..dd708b9dfa Binary files /dev/null and b/resources/g2/track/raptor/quarter_loop_up_1_3.png differ diff --git a/resources/g2/track/raptor/quarter_loop_up_2_1.png b/resources/g2/track/raptor/quarter_loop_up_2_1.png new file mode 100644 index 0000000000..a4da950d97 Binary files /dev/null and b/resources/g2/track/raptor/quarter_loop_up_2_1.png differ diff --git a/resources/g2/track/raptor/quarter_loop_up_2_2.png b/resources/g2/track/raptor/quarter_loop_up_2_2.png new file mode 100644 index 0000000000..143d1db032 Binary files /dev/null and b/resources/g2/track/raptor/quarter_loop_up_2_2.png differ diff --git a/resources/g2/track/raptor/quarter_loop_up_2_3.png b/resources/g2/track/raptor/quarter_loop_up_2_3.png new file mode 100644 index 0000000000..42eed65fef Binary files /dev/null and b/resources/g2/track/raptor/quarter_loop_up_2_3.png differ diff --git a/resources/g2/track/raptor/quarter_loop_up_3_1.png b/resources/g2/track/raptor/quarter_loop_up_3_1.png new file mode 100644 index 0000000000..013762edd3 Binary files /dev/null and b/resources/g2/track/raptor/quarter_loop_up_3_1.png differ diff --git a/resources/g2/track/raptor/quarter_loop_up_3_2.png b/resources/g2/track/raptor/quarter_loop_up_3_2.png new file mode 100644 index 0000000000..ee1ede3372 Binary files /dev/null and b/resources/g2/track/raptor/quarter_loop_up_3_2.png differ diff --git a/resources/g2/track/raptor/quarter_loop_up_3_3.png b/resources/g2/track/raptor/quarter_loop_up_3_3.png new file mode 100644 index 0000000000..17e8b42a71 Binary files /dev/null and b/resources/g2/track/raptor/quarter_loop_up_3_3.png differ diff --git a/resources/g2/track/raptor/quarter_loop_up_4_1.png b/resources/g2/track/raptor/quarter_loop_up_4_1.png new file mode 100644 index 0000000000..5a47e3af72 Binary files /dev/null and b/resources/g2/track/raptor/quarter_loop_up_4_1.png differ diff --git a/resources/g2/track/raptor/quarter_loop_up_4_2.png b/resources/g2/track/raptor/quarter_loop_up_4_2.png new file mode 100644 index 0000000000..15e20504d1 Binary files /dev/null and b/resources/g2/track/raptor/quarter_loop_up_4_2.png differ diff --git a/resources/g2/track/raptor/quarter_loop_up_4_3.png b/resources/g2/track/raptor/quarter_loop_up_4_3.png new file mode 100644 index 0000000000..8a8853b2de Binary files /dev/null and b/resources/g2/track/raptor/quarter_loop_up_4_3.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_1.png b/resources/g2/track/raptor/right_bank_to_gentle_up_1.png new file mode 100644 index 0000000000..d5cde1bc46 Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_1.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_2.png b/resources/g2/track/raptor/right_bank_to_gentle_up_2.png new file mode 100644 index 0000000000..9685a9df99 Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_2.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_3_1.png b/resources/g2/track/raptor/right_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..ce894b68cc Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_3_2.png b/resources/g2/track/raptor/right_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..b12b3f54fc Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_4_1.png b/resources/g2/track/raptor/right_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..a29c1199e5 Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_4_2.png b/resources/g2/track/raptor/right_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..9df401551a Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_diag_1.png b/resources/g2/track/raptor/right_bank_to_gentle_up_diag_1.png new file mode 100644 index 0000000000..1b988d3def Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_diag_1.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_diag_2.png b/resources/g2/track/raptor/right_bank_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..0f746f628f Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_diag_3_1.png b/resources/g2/track/raptor/right_bank_to_gentle_up_diag_3_1.png new file mode 100644 index 0000000000..237580b81b Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_diag_3_1.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_diag_3_2.png b/resources/g2/track/raptor/right_bank_to_gentle_up_diag_3_2.png new file mode 100644 index 0000000000..94ce44d03b Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_diag_3_2.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_diag_4.png b/resources/g2/track/raptor/right_bank_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..05bec1919f Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_right_bank_1.png b/resources/g2/track/raptor/right_bank_to_gentle_up_right_bank_1.png new file mode 100644 index 0000000000..fab8db33d8 Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_right_bank_1.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_right_bank_2.png b/resources/g2/track/raptor/right_bank_to_gentle_up_right_bank_2.png new file mode 100644 index 0000000000..b9ce6335e0 Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_right_bank_2.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_right_bank_3.png b/resources/g2/track/raptor/right_bank_to_gentle_up_right_bank_3.png new file mode 100644 index 0000000000..4dfc9b906f Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_right_bank_3.png differ diff --git a/resources/g2/track/raptor/right_bank_to_gentle_up_right_bank_4.png b/resources/g2/track/raptor/right_bank_to_gentle_up_right_bank_4.png new file mode 100644 index 0000000000..86d0934672 Binary files /dev/null and b/resources/g2/track/raptor/right_bank_to_gentle_up_right_bank_4.png differ diff --git a/resources/g2/track/raptor/s_bend_left_1_1.png b/resources/g2/track/raptor/s_bend_left_1_1.png new file mode 100644 index 0000000000..a4d7bf9f35 Binary files /dev/null and b/resources/g2/track/raptor/s_bend_left_1_1.png differ diff --git a/resources/g2/track/raptor/s_bend_left_1_2.png b/resources/g2/track/raptor/s_bend_left_1_2.png new file mode 100644 index 0000000000..ab29b364e3 Binary files /dev/null and b/resources/g2/track/raptor/s_bend_left_1_2.png differ diff --git a/resources/g2/track/raptor/s_bend_left_1_3.png b/resources/g2/track/raptor/s_bend_left_1_3.png new file mode 100644 index 0000000000..4832797d3b Binary files /dev/null and b/resources/g2/track/raptor/s_bend_left_1_3.png differ diff --git a/resources/g2/track/raptor/s_bend_left_1_4.png b/resources/g2/track/raptor/s_bend_left_1_4.png new file mode 100644 index 0000000000..7d5f413eb9 Binary files /dev/null and b/resources/g2/track/raptor/s_bend_left_1_4.png differ diff --git a/resources/g2/track/raptor/s_bend_left_2_1.png b/resources/g2/track/raptor/s_bend_left_2_1.png new file mode 100644 index 0000000000..be0f642272 Binary files /dev/null and b/resources/g2/track/raptor/s_bend_left_2_1.png differ diff --git a/resources/g2/track/raptor/s_bend_left_2_2.png b/resources/g2/track/raptor/s_bend_left_2_2.png new file mode 100644 index 0000000000..e192c1dc76 Binary files /dev/null and b/resources/g2/track/raptor/s_bend_left_2_2.png differ diff --git a/resources/g2/track/raptor/s_bend_left_2_3.png b/resources/g2/track/raptor/s_bend_left_2_3.png new file mode 100644 index 0000000000..30fd023148 Binary files /dev/null and b/resources/g2/track/raptor/s_bend_left_2_3.png differ diff --git a/resources/g2/track/raptor/s_bend_left_2_4.png b/resources/g2/track/raptor/s_bend_left_2_4.png new file mode 100644 index 0000000000..89aaecfb87 Binary files /dev/null and b/resources/g2/track/raptor/s_bend_left_2_4.png differ diff --git a/resources/g2/track/raptor/s_bend_right_1_1.png b/resources/g2/track/raptor/s_bend_right_1_1.png new file mode 100644 index 0000000000..ce578cee17 Binary files /dev/null and b/resources/g2/track/raptor/s_bend_right_1_1.png differ diff --git a/resources/g2/track/raptor/s_bend_right_1_2.png b/resources/g2/track/raptor/s_bend_right_1_2.png new file mode 100644 index 0000000000..a23ea52fba Binary files /dev/null and b/resources/g2/track/raptor/s_bend_right_1_2.png differ diff --git a/resources/g2/track/raptor/s_bend_right_1_3.png b/resources/g2/track/raptor/s_bend_right_1_3.png new file mode 100644 index 0000000000..5805b0bb59 Binary files /dev/null and b/resources/g2/track/raptor/s_bend_right_1_3.png differ diff --git a/resources/g2/track/raptor/s_bend_right_1_4.png b/resources/g2/track/raptor/s_bend_right_1_4.png new file mode 100644 index 0000000000..a10c4b3792 Binary files /dev/null and b/resources/g2/track/raptor/s_bend_right_1_4.png differ diff --git a/resources/g2/track/raptor/s_bend_right_2_1.png b/resources/g2/track/raptor/s_bend_right_2_1.png new file mode 100644 index 0000000000..fe2828767b Binary files /dev/null and b/resources/g2/track/raptor/s_bend_right_2_1.png differ diff --git a/resources/g2/track/raptor/s_bend_right_2_2.png b/resources/g2/track/raptor/s_bend_right_2_2.png new file mode 100644 index 0000000000..51ce76f451 Binary files /dev/null and b/resources/g2/track/raptor/s_bend_right_2_2.png differ diff --git a/resources/g2/track/raptor/s_bend_right_2_3.png b/resources/g2/track/raptor/s_bend_right_2_3.png new file mode 100644 index 0000000000..f75415c6d6 Binary files /dev/null and b/resources/g2/track/raptor/s_bend_right_2_3.png differ diff --git a/resources/g2/track/raptor/s_bend_right_2_4.png b/resources/g2/track/raptor/s_bend_right_2_4.png new file mode 100644 index 0000000000..db3ea1142f Binary files /dev/null and b/resources/g2/track/raptor/s_bend_right_2_4.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_1.png b/resources/g2/track/raptor/small_flat_to_steep_up_1.png new file mode 100644 index 0000000000..3cf38ac939 Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_1.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_2_1.png b/resources/g2/track/raptor/small_flat_to_steep_up_2_1.png new file mode 100644 index 0000000000..3241275772 Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_2_1.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_2_2.png b/resources/g2/track/raptor/small_flat_to_steep_up_2_2.png new file mode 100644 index 0000000000..837469b5ad Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_2_2.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_3_1.png b/resources/g2/track/raptor/small_flat_to_steep_up_3_1.png new file mode 100644 index 0000000000..d01b78bfe4 Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_3_1.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_3_2.png b/resources/g2/track/raptor/small_flat_to_steep_up_3_2.png new file mode 100644 index 0000000000..3dd6f9e9cc Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_3_2.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_4.png b/resources/g2/track/raptor/small_flat_to_steep_up_4.png new file mode 100644 index 0000000000..d74eb7ad2f Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_4.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_diag_1.png b/resources/g2/track/raptor/small_flat_to_steep_up_diag_1.png new file mode 100644 index 0000000000..919d574df8 Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_diag_1.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_diag_2.png b/resources/g2/track/raptor/small_flat_to_steep_up_diag_2.png new file mode 100644 index 0000000000..d17a53d527 Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_diag_2.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_diag_3.png b/resources/g2/track/raptor/small_flat_to_steep_up_diag_3.png new file mode 100644 index 0000000000..33d59883ea Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_diag_3.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_diag_4.png b/resources/g2/track/raptor/small_flat_to_steep_up_diag_4.png new file mode 100644 index 0000000000..8bf356e6a7 Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_diag_4.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_diag_lift_1.png b/resources/g2/track/raptor/small_flat_to_steep_up_diag_lift_1.png new file mode 100644 index 0000000000..c7d3a5d1de Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_diag_lift_1.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_diag_lift_2.png b/resources/g2/track/raptor/small_flat_to_steep_up_diag_lift_2.png new file mode 100644 index 0000000000..a5a1f23819 Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_diag_lift_2.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_diag_lift_3.png b/resources/g2/track/raptor/small_flat_to_steep_up_diag_lift_3.png new file mode 100644 index 0000000000..873f632920 Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_diag_lift_3.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_diag_lift_4.png b/resources/g2/track/raptor/small_flat_to_steep_up_diag_lift_4.png new file mode 100644 index 0000000000..8e4b6269c4 Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_diag_lift_4.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_lift_1.png b/resources/g2/track/raptor/small_flat_to_steep_up_lift_1.png new file mode 100644 index 0000000000..c85314928e Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_lift_1.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_lift_2_1.png b/resources/g2/track/raptor/small_flat_to_steep_up_lift_2_1.png new file mode 100644 index 0000000000..53f6cbd466 Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_lift_2_1.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_lift_2_2.png b/resources/g2/track/raptor/small_flat_to_steep_up_lift_2_2.png new file mode 100644 index 0000000000..cb5d5512e7 Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_lift_2_2.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_lift_3_1.png b/resources/g2/track/raptor/small_flat_to_steep_up_lift_3_1.png new file mode 100644 index 0000000000..bb52bdbc95 Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_lift_3_1.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_lift_3_2.png b/resources/g2/track/raptor/small_flat_to_steep_up_lift_3_2.png new file mode 100644 index 0000000000..cba1e9d3f7 Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_lift_3_2.png differ diff --git a/resources/g2/track/raptor/small_flat_to_steep_up_lift_4.png b/resources/g2/track/raptor/small_flat_to_steep_up_lift_4.png new file mode 100644 index 0000000000..73ea33ff57 Binary files /dev/null and b/resources/g2/track/raptor/small_flat_to_steep_up_lift_4.png differ diff --git a/resources/g2/track/raptor/small_helix_left_up_1_1.png b/resources/g2/track/raptor/small_helix_left_up_1_1.png new file mode 100644 index 0000000000..2f73490c92 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_left_up_1_1.png differ diff --git a/resources/g2/track/raptor/small_helix_left_up_1_2.png b/resources/g2/track/raptor/small_helix_left_up_1_2.png new file mode 100644 index 0000000000..67e8b21ab9 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_left_up_1_2.png differ diff --git a/resources/g2/track/raptor/small_helix_left_up_1_3.png b/resources/g2/track/raptor/small_helix_left_up_1_3.png new file mode 100644 index 0000000000..a32c6f3d07 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_left_up_1_3.png differ diff --git a/resources/g2/track/raptor/small_helix_left_up_1_4.png b/resources/g2/track/raptor/small_helix_left_up_1_4.png new file mode 100644 index 0000000000..dcb351f50b Binary files /dev/null and b/resources/g2/track/raptor/small_helix_left_up_1_4.png differ diff --git a/resources/g2/track/raptor/small_helix_left_up_2_1.png b/resources/g2/track/raptor/small_helix_left_up_2_1.png new file mode 100644 index 0000000000..f7d0d2920f Binary files /dev/null and b/resources/g2/track/raptor/small_helix_left_up_2_1.png differ diff --git a/resources/g2/track/raptor/small_helix_left_up_2_2.png b/resources/g2/track/raptor/small_helix_left_up_2_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_left_up_2_2.png differ diff --git a/resources/g2/track/raptor/small_helix_left_up_2_3.png b/resources/g2/track/raptor/small_helix_left_up_2_3.png new file mode 100644 index 0000000000..25531313a2 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_left_up_2_3.png differ diff --git a/resources/g2/track/raptor/small_helix_left_up_3_1.png b/resources/g2/track/raptor/small_helix_left_up_3_1.png new file mode 100644 index 0000000000..cdeca44623 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_left_up_3_1.png differ diff --git a/resources/g2/track/raptor/small_helix_left_up_3_2.png b/resources/g2/track/raptor/small_helix_left_up_3_2.png new file mode 100644 index 0000000000..bb790a0315 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_left_up_3_2.png differ diff --git a/resources/g2/track/raptor/small_helix_left_up_3_3.png b/resources/g2/track/raptor/small_helix_left_up_3_3.png new file mode 100644 index 0000000000..984e882e28 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_left_up_3_3.png differ diff --git a/resources/g2/track/raptor/small_helix_left_up_3_4.png b/resources/g2/track/raptor/small_helix_left_up_3_4.png new file mode 100644 index 0000000000..7e588a8ad2 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_left_up_3_4.png differ diff --git a/resources/g2/track/raptor/small_helix_left_up_4_1.png b/resources/g2/track/raptor/small_helix_left_up_4_1.png new file mode 100644 index 0000000000..76b25d5e56 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_left_up_4_1.png differ diff --git a/resources/g2/track/raptor/small_helix_left_up_4_2.png b/resources/g2/track/raptor/small_helix_left_up_4_2.png new file mode 100644 index 0000000000..eb5adb9f49 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_left_up_4_2.png differ diff --git a/resources/g2/track/raptor/small_helix_left_up_4_3.png b/resources/g2/track/raptor/small_helix_left_up_4_3.png new file mode 100644 index 0000000000..5a6ef1d0ef Binary files /dev/null and b/resources/g2/track/raptor/small_helix_left_up_4_3.png differ diff --git a/resources/g2/track/raptor/small_helix_right_up_1_1.png b/resources/g2/track/raptor/small_helix_right_up_1_1.png new file mode 100644 index 0000000000..d10b0c6054 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_right_up_1_1.png differ diff --git a/resources/g2/track/raptor/small_helix_right_up_1_2.png b/resources/g2/track/raptor/small_helix_right_up_1_2.png new file mode 100644 index 0000000000..dd1c26aedb Binary files /dev/null and b/resources/g2/track/raptor/small_helix_right_up_1_2.png differ diff --git a/resources/g2/track/raptor/small_helix_right_up_1_3.png b/resources/g2/track/raptor/small_helix_right_up_1_3.png new file mode 100644 index 0000000000..061499b956 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_right_up_1_3.png differ diff --git a/resources/g2/track/raptor/small_helix_right_up_2_1.png b/resources/g2/track/raptor/small_helix_right_up_2_1.png new file mode 100644 index 0000000000..09a30df0f5 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_right_up_2_1.png differ diff --git a/resources/g2/track/raptor/small_helix_right_up_2_2.png b/resources/g2/track/raptor/small_helix_right_up_2_2.png new file mode 100644 index 0000000000..fe8c058e99 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_right_up_2_2.png differ diff --git a/resources/g2/track/raptor/small_helix_right_up_2_3.png b/resources/g2/track/raptor/small_helix_right_up_2_3.png new file mode 100644 index 0000000000..2a74b18893 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_right_up_2_3.png differ diff --git a/resources/g2/track/raptor/small_helix_right_up_2_4.png b/resources/g2/track/raptor/small_helix_right_up_2_4.png new file mode 100644 index 0000000000..2612bbedbe Binary files /dev/null and b/resources/g2/track/raptor/small_helix_right_up_2_4.png differ diff --git a/resources/g2/track/raptor/small_helix_right_up_3_1.png b/resources/g2/track/raptor/small_helix_right_up_3_1.png new file mode 100644 index 0000000000..1e3dcafe6e Binary files /dev/null and b/resources/g2/track/raptor/small_helix_right_up_3_1.png differ diff --git a/resources/g2/track/raptor/small_helix_right_up_3_2.png b/resources/g2/track/raptor/small_helix_right_up_3_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_right_up_3_2.png differ diff --git a/resources/g2/track/raptor/small_helix_right_up_3_3.png b/resources/g2/track/raptor/small_helix_right_up_3_3.png new file mode 100644 index 0000000000..651d3aca85 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_right_up_3_3.png differ diff --git a/resources/g2/track/raptor/small_helix_right_up_4_1.png b/resources/g2/track/raptor/small_helix_right_up_4_1.png new file mode 100644 index 0000000000..4df3bee42f Binary files /dev/null and b/resources/g2/track/raptor/small_helix_right_up_4_1.png differ diff --git a/resources/g2/track/raptor/small_helix_right_up_4_2.png b/resources/g2/track/raptor/small_helix_right_up_4_2.png new file mode 100644 index 0000000000..8af50b8927 Binary files /dev/null and b/resources/g2/track/raptor/small_helix_right_up_4_2.png differ diff --git a/resources/g2/track/raptor/small_helix_right_up_4_3.png b/resources/g2/track/raptor/small_helix_right_up_4_3.png new file mode 100644 index 0000000000..d49121438c Binary files /dev/null and b/resources/g2/track/raptor/small_helix_right_up_4_3.png differ diff --git a/resources/g2/track/raptor/small_helix_right_up_4_4.png b/resources/g2/track/raptor/small_helix_right_up_4_4.png new file mode 100644 index 0000000000..0d646a8b7c Binary files /dev/null and b/resources/g2/track/raptor/small_helix_right_up_4_4.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_1.png b/resources/g2/track/raptor/small_steep_to_flat_up_1.png new file mode 100644 index 0000000000..f78cde74ab Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_1.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_2_1.png b/resources/g2/track/raptor/small_steep_to_flat_up_2_1.png new file mode 100644 index 0000000000..01b9d0c9b7 Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_2_1.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_2_2.png b/resources/g2/track/raptor/small_steep_to_flat_up_2_2.png new file mode 100644 index 0000000000..1ee8eaac9c Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_2_2.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_3_1.png b/resources/g2/track/raptor/small_steep_to_flat_up_3_1.png new file mode 100644 index 0000000000..09c3235a5e Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_3_1.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_3_2.png b/resources/g2/track/raptor/small_steep_to_flat_up_3_2.png new file mode 100644 index 0000000000..50ce9fdb1c Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_3_2.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_4.png b/resources/g2/track/raptor/small_steep_to_flat_up_4.png new file mode 100644 index 0000000000..0ea7baa422 Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_4.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_diag_1.png b/resources/g2/track/raptor/small_steep_to_flat_up_diag_1.png new file mode 100644 index 0000000000..a955952592 Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_diag_1.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_diag_2.png b/resources/g2/track/raptor/small_steep_to_flat_up_diag_2.png new file mode 100644 index 0000000000..ab26e1cc9a Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_diag_2.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_diag_3.png b/resources/g2/track/raptor/small_steep_to_flat_up_diag_3.png new file mode 100644 index 0000000000..b117af7d87 Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_diag_3.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_diag_4.png b/resources/g2/track/raptor/small_steep_to_flat_up_diag_4.png new file mode 100644 index 0000000000..62834e6d0f Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_diag_4.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_diag_lift_1.png b/resources/g2/track/raptor/small_steep_to_flat_up_diag_lift_1.png new file mode 100644 index 0000000000..c9bc8d8eff Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_diag_lift_1.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_diag_lift_2.png b/resources/g2/track/raptor/small_steep_to_flat_up_diag_lift_2.png new file mode 100644 index 0000000000..b9e5038896 Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_diag_lift_2.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_diag_lift_3.png b/resources/g2/track/raptor/small_steep_to_flat_up_diag_lift_3.png new file mode 100644 index 0000000000..6037e04975 Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_diag_lift_3.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_diag_lift_4.png b/resources/g2/track/raptor/small_steep_to_flat_up_diag_lift_4.png new file mode 100644 index 0000000000..6600f3de42 Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_diag_lift_4.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_lift_1.png b/resources/g2/track/raptor/small_steep_to_flat_up_lift_1.png new file mode 100644 index 0000000000..fdc00df721 Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_lift_1.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_lift_2_1.png b/resources/g2/track/raptor/small_steep_to_flat_up_lift_2_1.png new file mode 100644 index 0000000000..d6a19cb878 Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_lift_2_1.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_lift_2_2.png b/resources/g2/track/raptor/small_steep_to_flat_up_lift_2_2.png new file mode 100644 index 0000000000..5f15dd6566 Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_lift_2_2.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_lift_3_1.png b/resources/g2/track/raptor/small_steep_to_flat_up_lift_3_1.png new file mode 100644 index 0000000000..3d27f6c81e Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_lift_3_1.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_lift_3_2.png b/resources/g2/track/raptor/small_steep_to_flat_up_lift_3_2.png new file mode 100644 index 0000000000..3b88bbc76c Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_lift_3_2.png differ diff --git a/resources/g2/track/raptor/small_steep_to_flat_up_lift_4.png b/resources/g2/track/raptor/small_steep_to_flat_up_lift_4.png new file mode 100644 index 0000000000..7d0f59d768 Binary files /dev/null and b/resources/g2/track/raptor/small_steep_to_flat_up_lift_4.png differ diff --git a/resources/g2/track/raptor/small_turn_left_1_1.png b/resources/g2/track/raptor/small_turn_left_1_1.png new file mode 100644 index 0000000000..b804061d01 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_1_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_1_2.png b/resources/g2/track/raptor/small_turn_left_1_2.png new file mode 100644 index 0000000000..fe8ad891ee Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_1_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_1_3.png b/resources/g2/track/raptor/small_turn_left_1_3.png new file mode 100644 index 0000000000..377c397fe3 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_1_3.png differ diff --git a/resources/g2/track/raptor/small_turn_left_2_1.png b/resources/g2/track/raptor/small_turn_left_2_1.png new file mode 100644 index 0000000000..2e5d7cd566 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_2_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_2_2.png b/resources/g2/track/raptor/small_turn_left_2_2.png new file mode 100644 index 0000000000..16bc687f60 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_2_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_2_3.png b/resources/g2/track/raptor/small_turn_left_2_3.png new file mode 100644 index 0000000000..15177d2efb Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_2_3.png differ diff --git a/resources/g2/track/raptor/small_turn_left_3_1.png b/resources/g2/track/raptor/small_turn_left_3_1.png new file mode 100644 index 0000000000..3504caee9a Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_3_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_3_2.png b/resources/g2/track/raptor/small_turn_left_3_2.png new file mode 100644 index 0000000000..57218e3390 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_3_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_3_3.png b/resources/g2/track/raptor/small_turn_left_3_3.png new file mode 100644 index 0000000000..dc90b936b7 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_3_3.png differ diff --git a/resources/g2/track/raptor/small_turn_left_4_1.png b/resources/g2/track/raptor/small_turn_left_4_1.png new file mode 100644 index 0000000000..334b643a2f Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_4_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_4_2.png b/resources/g2/track/raptor/small_turn_left_4_2.png new file mode 100644 index 0000000000..b24feaa417 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_4_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_4_3.png b/resources/g2/track/raptor/small_turn_left_4_3.png new file mode 100644 index 0000000000..d1cd969789 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_4_3.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_1_1.png b/resources/g2/track/raptor/small_turn_left_bank_1_1.png new file mode 100644 index 0000000000..39f61f46f9 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_1_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_1_2.png b/resources/g2/track/raptor/small_turn_left_bank_1_2.png new file mode 100644 index 0000000000..9cbe526c54 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_1_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_1_3.png b/resources/g2/track/raptor/small_turn_left_bank_1_3.png new file mode 100644 index 0000000000..f3e25523f2 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_1_3.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_1_4.png b/resources/g2/track/raptor/small_turn_left_bank_1_4.png new file mode 100644 index 0000000000..044bb0ad8d Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_1_4.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_2_1.png b/resources/g2/track/raptor/small_turn_left_bank_2_1.png new file mode 100644 index 0000000000..9a5528a4ed Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_2_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_2_2.png b/resources/g2/track/raptor/small_turn_left_bank_2_2.png new file mode 100644 index 0000000000..e12837d83a Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_2_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_2_3.png b/resources/g2/track/raptor/small_turn_left_bank_2_3.png new file mode 100644 index 0000000000..11ee7e8d7f Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_2_3.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_3_1.png b/resources/g2/track/raptor/small_turn_left_bank_3_1.png new file mode 100644 index 0000000000..11ff2e39de Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_3_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_3_2.png b/resources/g2/track/raptor/small_turn_left_bank_3_2.png new file mode 100644 index 0000000000..ca270da5b5 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_3_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_3_3.png b/resources/g2/track/raptor/small_turn_left_bank_3_3.png new file mode 100644 index 0000000000..76b7549b66 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_3_3.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_3_4.png b/resources/g2/track/raptor/small_turn_left_bank_3_4.png new file mode 100644 index 0000000000..27a09c2cd5 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_3_4.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_4_1.png b/resources/g2/track/raptor/small_turn_left_bank_4_1.png new file mode 100644 index 0000000000..11944bc705 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_4_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_4_2.png b/resources/g2/track/raptor/small_turn_left_bank_4_2.png new file mode 100644 index 0000000000..a78617b7ab Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_4_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_4_3.png b/resources/g2/track/raptor/small_turn_left_bank_4_3.png new file mode 100644 index 0000000000..c777adde85 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_4_3.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_gentle_up_1_1.png b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_1_1.png new file mode 100644 index 0000000000..38c77493a2 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_1_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_gentle_up_1_2.png b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_1_2.png new file mode 100644 index 0000000000..e5e7d40db0 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_1_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_gentle_up_2_1.png b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_2_1.png new file mode 100644 index 0000000000..25d30809d3 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_2_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_gentle_up_2_2.png b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_2_2.png new file mode 100644 index 0000000000..2235653220 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_2_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_gentle_up_3_1.png b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_3_1.png new file mode 100644 index 0000000000..b63e84d789 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_3_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_gentle_up_3_2.png b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_3_2.png new file mode 100644 index 0000000000..bc557cee51 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_3_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_gentle_up_4_1.png b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_4_1.png new file mode 100644 index 0000000000..27372a5f91 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_4_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_gentle_up_4_2.png b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_4_2.png new file mode 100644 index 0000000000..feaaf91ac9 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_gentle_up_4_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_1_1.png b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..5b07d0800b Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_1_2.png b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..ed421116d1 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_2_1.png b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..895462d4fd Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_2_2.png b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..d261f02013 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_2_3.png b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_2_3.png new file mode 100644 index 0000000000..24b9c15e25 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_2_3.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_3_1.png b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..cd57c53e88 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_3_2.png b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..82a909515e Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_4_1.png b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..8690a429f3 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_4_2.png b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..17640d973c Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_gentle_up_1_1.png b/resources/g2/track/raptor/small_turn_left_gentle_up_1_1.png new file mode 100644 index 0000000000..7a164e1967 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_gentle_up_1_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_gentle_up_1_2.png b/resources/g2/track/raptor/small_turn_left_gentle_up_1_2.png new file mode 100644 index 0000000000..5f0ec18f87 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_gentle_up_1_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_gentle_up_2_1.png b/resources/g2/track/raptor/small_turn_left_gentle_up_2_1.png new file mode 100644 index 0000000000..e0e6866fee Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_gentle_up_2_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_gentle_up_2_2.png b/resources/g2/track/raptor/small_turn_left_gentle_up_2_2.png new file mode 100644 index 0000000000..452394c53c Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_gentle_up_2_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_gentle_up_3_1.png b/resources/g2/track/raptor/small_turn_left_gentle_up_3_1.png new file mode 100644 index 0000000000..4899de4333 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_gentle_up_3_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_gentle_up_3_2.png b/resources/g2/track/raptor/small_turn_left_gentle_up_3_2.png new file mode 100644 index 0000000000..9ff75c6138 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_gentle_up_3_2.png differ diff --git a/resources/g2/track/raptor/small_turn_left_gentle_up_4_1.png b/resources/g2/track/raptor/small_turn_left_gentle_up_4_1.png new file mode 100644 index 0000000000..41f9ef996e Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_gentle_up_4_1.png differ diff --git a/resources/g2/track/raptor/small_turn_left_gentle_up_4_2.png b/resources/g2/track/raptor/small_turn_left_gentle_up_4_2.png new file mode 100644 index 0000000000..373b6d5926 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_left_gentle_up_4_2.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_gentle_up_1_1.png b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_1_1.png new file mode 100644 index 0000000000..2ab590e67d Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_1_1.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_gentle_up_1_2.png b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_1_2.png new file mode 100644 index 0000000000..271b11e733 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_1_2.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_gentle_up_2_1.png b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_2_1.png new file mode 100644 index 0000000000..a852cc576b Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_2_1.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_gentle_up_2_2.png b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_2_2.png new file mode 100644 index 0000000000..a74bffb64f Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_2_2.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_gentle_up_3_1.png b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_3_1.png new file mode 100644 index 0000000000..e08844cda5 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_3_1.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_gentle_up_3_2.png b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_3_2.png new file mode 100644 index 0000000000..53413fecf1 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_3_2.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_gentle_up_4_1.png b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_4_1.png new file mode 100644 index 0000000000..957b4cb5a5 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_4_1.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_gentle_up_4_2.png b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_4_2.png new file mode 100644 index 0000000000..b94a70bb41 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_gentle_up_4_2.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_1_1.png b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..251d48b88e Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_1_2.png b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..d4721f606b Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_2_1.png b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..93c2906f48 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_2_2.png b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..8fd5028ce9 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_3_1.png b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..a2332f3c25 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_3_2.png b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..83b553e581 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_3_3.png b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_3_3.png new file mode 100644 index 0000000000..c42adfda9b Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_3_3.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_4_1.png b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..7970898d24 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_4_2.png b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..797fe89306 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/raptor/small_turn_right_gentle_up_1_1.png b/resources/g2/track/raptor/small_turn_right_gentle_up_1_1.png new file mode 100644 index 0000000000..ae2ac0b501 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_gentle_up_1_1.png differ diff --git a/resources/g2/track/raptor/small_turn_right_gentle_up_1_2.png b/resources/g2/track/raptor/small_turn_right_gentle_up_1_2.png new file mode 100644 index 0000000000..f8868c20cd Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_gentle_up_1_2.png differ diff --git a/resources/g2/track/raptor/small_turn_right_gentle_up_2_1.png b/resources/g2/track/raptor/small_turn_right_gentle_up_2_1.png new file mode 100644 index 0000000000..d06af0a1f4 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_gentle_up_2_1.png differ diff --git a/resources/g2/track/raptor/small_turn_right_gentle_up_2_2.png b/resources/g2/track/raptor/small_turn_right_gentle_up_2_2.png new file mode 100644 index 0000000000..f6c12301b1 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_gentle_up_2_2.png differ diff --git a/resources/g2/track/raptor/small_turn_right_gentle_up_3_1.png b/resources/g2/track/raptor/small_turn_right_gentle_up_3_1.png new file mode 100644 index 0000000000..0b62455666 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_gentle_up_3_1.png differ diff --git a/resources/g2/track/raptor/small_turn_right_gentle_up_3_2.png b/resources/g2/track/raptor/small_turn_right_gentle_up_3_2.png new file mode 100644 index 0000000000..811b85ad22 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_gentle_up_3_2.png differ diff --git a/resources/g2/track/raptor/small_turn_right_gentle_up_4_1.png b/resources/g2/track/raptor/small_turn_right_gentle_up_4_1.png new file mode 100644 index 0000000000..e8050eb759 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_gentle_up_4_1.png differ diff --git a/resources/g2/track/raptor/small_turn_right_gentle_up_4_2.png b/resources/g2/track/raptor/small_turn_right_gentle_up_4_2.png new file mode 100644 index 0000000000..fa49ab8042 Binary files /dev/null and b/resources/g2/track/raptor/small_turn_right_gentle_up_4_2.png differ diff --git a/resources/g2/track/raptor/steep_1.png b/resources/g2/track/raptor/steep_1.png new file mode 100644 index 0000000000..9545de4c3b Binary files /dev/null and b/resources/g2/track/raptor/steep_1.png differ diff --git a/resources/g2/track/raptor/steep_2.png b/resources/g2/track/raptor/steep_2.png new file mode 100644 index 0000000000..33a99c0ce9 Binary files /dev/null and b/resources/g2/track/raptor/steep_2.png differ diff --git a/resources/g2/track/raptor/steep_3.png b/resources/g2/track/raptor/steep_3.png new file mode 100644 index 0000000000..0bef62d380 Binary files /dev/null and b/resources/g2/track/raptor/steep_3.png differ diff --git a/resources/g2/track/raptor/steep_4.png b/resources/g2/track/raptor/steep_4.png new file mode 100644 index 0000000000..9dd739c0e8 Binary files /dev/null and b/resources/g2/track/raptor/steep_4.png differ diff --git a/resources/g2/track/raptor/steep_diag_1.png b/resources/g2/track/raptor/steep_diag_1.png new file mode 100644 index 0000000000..3e6db836aa Binary files /dev/null and b/resources/g2/track/raptor/steep_diag_1.png differ diff --git a/resources/g2/track/raptor/steep_diag_2.png b/resources/g2/track/raptor/steep_diag_2.png new file mode 100644 index 0000000000..49cb900bda Binary files /dev/null and b/resources/g2/track/raptor/steep_diag_2.png differ diff --git a/resources/g2/track/raptor/steep_diag_3.png b/resources/g2/track/raptor/steep_diag_3.png new file mode 100644 index 0000000000..8925b0e4c9 Binary files /dev/null and b/resources/g2/track/raptor/steep_diag_3.png differ diff --git a/resources/g2/track/raptor/steep_diag_4.png b/resources/g2/track/raptor/steep_diag_4.png new file mode 100644 index 0000000000..94002e4095 Binary files /dev/null and b/resources/g2/track/raptor/steep_diag_4.png differ diff --git a/resources/g2/track/raptor/steep_diag_lift_1.png b/resources/g2/track/raptor/steep_diag_lift_1.png new file mode 100644 index 0000000000..f7996822f7 Binary files /dev/null and b/resources/g2/track/raptor/steep_diag_lift_1.png differ diff --git a/resources/g2/track/raptor/steep_diag_lift_2.png b/resources/g2/track/raptor/steep_diag_lift_2.png new file mode 100644 index 0000000000..f9c7adc463 Binary files /dev/null and b/resources/g2/track/raptor/steep_diag_lift_2.png differ diff --git a/resources/g2/track/raptor/steep_diag_lift_3.png b/resources/g2/track/raptor/steep_diag_lift_3.png new file mode 100644 index 0000000000..801efafe0e Binary files /dev/null and b/resources/g2/track/raptor/steep_diag_lift_3.png differ diff --git a/resources/g2/track/raptor/steep_diag_lift_4.png b/resources/g2/track/raptor/steep_diag_lift_4.png new file mode 100644 index 0000000000..46055864a5 Binary files /dev/null and b/resources/g2/track/raptor/steep_diag_lift_4.png differ diff --git a/resources/g2/track/raptor/steep_lift_1.png b/resources/g2/track/raptor/steep_lift_1.png new file mode 100644 index 0000000000..6afb602b2d Binary files /dev/null and b/resources/g2/track/raptor/steep_lift_1.png differ diff --git a/resources/g2/track/raptor/steep_lift_2.png b/resources/g2/track/raptor/steep_lift_2.png new file mode 100644 index 0000000000..aa352d99eb Binary files /dev/null and b/resources/g2/track/raptor/steep_lift_2.png differ diff --git a/resources/g2/track/raptor/steep_lift_3.png b/resources/g2/track/raptor/steep_lift_3.png new file mode 100644 index 0000000000..97ab43af2e Binary files /dev/null and b/resources/g2/track/raptor/steep_lift_3.png differ diff --git a/resources/g2/track/raptor/steep_lift_4.png b/resources/g2/track/raptor/steep_lift_4.png new file mode 100644 index 0000000000..db0549c420 Binary files /dev/null and b/resources/g2/track/raptor/steep_lift_4.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_1_1.png b/resources/g2/track/raptor/steep_to_flat_up_1_1.png new file mode 100644 index 0000000000..af28192a07 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_1_1.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_1_2.png b/resources/g2/track/raptor/steep_to_flat_up_1_2.png new file mode 100644 index 0000000000..bb547f50ec Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_1_2.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_1_3.png b/resources/g2/track/raptor/steep_to_flat_up_1_3.png new file mode 100644 index 0000000000..1181bedd7b Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_1_3.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_1_4.png b/resources/g2/track/raptor/steep_to_flat_up_1_4.png new file mode 100644 index 0000000000..3332721929 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_1_4.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_2_1.png b/resources/g2/track/raptor/steep_to_flat_up_2_1.png new file mode 100644 index 0000000000..29f644fe63 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_2_1.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_2_2.png b/resources/g2/track/raptor/steep_to_flat_up_2_2.png new file mode 100644 index 0000000000..e32c3330f0 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_2_2.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_2_3.png b/resources/g2/track/raptor/steep_to_flat_up_2_3.png new file mode 100644 index 0000000000..dbf1d6f891 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_2_3.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_2_4.png b/resources/g2/track/raptor/steep_to_flat_up_2_4.png new file mode 100644 index 0000000000..1914e12a39 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_2_4.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_3_1.png b/resources/g2/track/raptor/steep_to_flat_up_3_1.png new file mode 100644 index 0000000000..55896e9a0b Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_3_1.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_3_2.png b/resources/g2/track/raptor/steep_to_flat_up_3_2.png new file mode 100644 index 0000000000..e41f4630e9 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_3_2.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_3_3.png b/resources/g2/track/raptor/steep_to_flat_up_3_3.png new file mode 100644 index 0000000000..c22ac8fa42 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_3_3.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_3_4.png b/resources/g2/track/raptor/steep_to_flat_up_3_4.png new file mode 100644 index 0000000000..f311de97b1 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_3_4.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_4_1.png b/resources/g2/track/raptor/steep_to_flat_up_4_1.png new file mode 100644 index 0000000000..6f90ee4ac2 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_4_1.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_4_2.png b/resources/g2/track/raptor/steep_to_flat_up_4_2.png new file mode 100644 index 0000000000..cff8972744 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_4_2.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_4_3.png b/resources/g2/track/raptor/steep_to_flat_up_4_3.png new file mode 100644 index 0000000000..aa449307b1 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_4_3.png differ diff --git a/resources/g2/track/raptor/steep_to_flat_up_4_4.png b/resources/g2/track/raptor/steep_to_flat_up_4_4.png new file mode 100644 index 0000000000..aa8d98c8f3 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_flat_up_4_4.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_1.png b/resources/g2/track/raptor/steep_to_gentle_up_1.png new file mode 100644 index 0000000000..5fac347cc0 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_1.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_2_1.png b/resources/g2/track/raptor/steep_to_gentle_up_2_1.png new file mode 100644 index 0000000000..a0fc5fbc26 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_2_2.png b/resources/g2/track/raptor/steep_to_gentle_up_2_2.png new file mode 100644 index 0000000000..68b1cb7596 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_3_1.png b/resources/g2/track/raptor/steep_to_gentle_up_3_1.png new file mode 100644 index 0000000000..7ce4d2ba41 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_3_2.png b/resources/g2/track/raptor/steep_to_gentle_up_3_2.png new file mode 100644 index 0000000000..024b8aa545 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_4.png b/resources/g2/track/raptor/steep_to_gentle_up_4.png new file mode 100644 index 0000000000..4957bf4cc9 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_4.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_diag_1.png b/resources/g2/track/raptor/steep_to_gentle_up_diag_1.png new file mode 100644 index 0000000000..86838cd33c Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_diag_1.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_diag_2.png b/resources/g2/track/raptor/steep_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..7ababe0511 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_diag_3.png b/resources/g2/track/raptor/steep_to_gentle_up_diag_3.png new file mode 100644 index 0000000000..5309625984 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_diag_3.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_diag_4.png b/resources/g2/track/raptor/steep_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..c8c8815b87 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_diag_lift_1.png b/resources/g2/track/raptor/steep_to_gentle_up_diag_lift_1.png new file mode 100644 index 0000000000..0cdde1a366 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_diag_lift_1.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_diag_lift_2.png b/resources/g2/track/raptor/steep_to_gentle_up_diag_lift_2.png new file mode 100644 index 0000000000..5d74d596bf Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_diag_lift_2.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_diag_lift_3.png b/resources/g2/track/raptor/steep_to_gentle_up_diag_lift_3.png new file mode 100644 index 0000000000..81d9085fbc Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_diag_lift_3.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_diag_lift_4.png b/resources/g2/track/raptor/steep_to_gentle_up_diag_lift_4.png new file mode 100644 index 0000000000..20af2faf53 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_diag_lift_4.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_lift_1.png b/resources/g2/track/raptor/steep_to_gentle_up_lift_1.png new file mode 100644 index 0000000000..f0afde5927 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_lift_1.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_lift_2_1.png b/resources/g2/track/raptor/steep_to_gentle_up_lift_2_1.png new file mode 100644 index 0000000000..61f058563f Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_lift_2_1.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_lift_2_2.png b/resources/g2/track/raptor/steep_to_gentle_up_lift_2_2.png new file mode 100644 index 0000000000..584c482a0c Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_lift_2_2.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_lift_3_1.png b/resources/g2/track/raptor/steep_to_gentle_up_lift_3_1.png new file mode 100644 index 0000000000..e99b6a92d1 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_lift_3_1.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_lift_3_2.png b/resources/g2/track/raptor/steep_to_gentle_up_lift_3_2.png new file mode 100644 index 0000000000..75a57801ca Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_lift_3_2.png differ diff --git a/resources/g2/track/raptor/steep_to_gentle_up_lift_4.png b/resources/g2/track/raptor/steep_to_gentle_up_lift_4.png new file mode 100644 index 0000000000..02158255dc Binary files /dev/null and b/resources/g2/track/raptor/steep_to_gentle_up_lift_4.png differ diff --git a/resources/g2/track/raptor/steep_to_vertical_up_1.png b/resources/g2/track/raptor/steep_to_vertical_up_1.png new file mode 100644 index 0000000000..5a30ef0d4d Binary files /dev/null and b/resources/g2/track/raptor/steep_to_vertical_up_1.png differ diff --git a/resources/g2/track/raptor/steep_to_vertical_up_2.png b/resources/g2/track/raptor/steep_to_vertical_up_2.png new file mode 100644 index 0000000000..bd91f08178 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_vertical_up_2.png differ diff --git a/resources/g2/track/raptor/steep_to_vertical_up_3.png b/resources/g2/track/raptor/steep_to_vertical_up_3.png new file mode 100644 index 0000000000..58bffc143f Binary files /dev/null and b/resources/g2/track/raptor/steep_to_vertical_up_3.png differ diff --git a/resources/g2/track/raptor/steep_to_vertical_up_4.png b/resources/g2/track/raptor/steep_to_vertical_up_4.png new file mode 100644 index 0000000000..1ca7a1c6a1 Binary files /dev/null and b/resources/g2/track/raptor/steep_to_vertical_up_4.png differ diff --git a/resources/g2/track/raptor/vertical_1.png b/resources/g2/track/raptor/vertical_1.png new file mode 100644 index 0000000000..118f80f7c2 Binary files /dev/null and b/resources/g2/track/raptor/vertical_1.png differ diff --git a/resources/g2/track/raptor/vertical_2.png b/resources/g2/track/raptor/vertical_2.png new file mode 100644 index 0000000000..9ccc9d8635 Binary files /dev/null and b/resources/g2/track/raptor/vertical_2.png differ diff --git a/resources/g2/track/raptor/vertical_3.png b/resources/g2/track/raptor/vertical_3.png new file mode 100644 index 0000000000..5b6b0ab34e Binary files /dev/null and b/resources/g2/track/raptor/vertical_3.png differ diff --git a/resources/g2/track/raptor/vertical_4.png b/resources/g2/track/raptor/vertical_4.png new file mode 100644 index 0000000000..d4abcd451a Binary files /dev/null and b/resources/g2/track/raptor/vertical_4.png differ diff --git a/resources/g2/track/raptor/vertical_to_steep_up_1.png b/resources/g2/track/raptor/vertical_to_steep_up_1.png new file mode 100644 index 0000000000..7be5309710 Binary files /dev/null and b/resources/g2/track/raptor/vertical_to_steep_up_1.png differ diff --git a/resources/g2/track/raptor/vertical_to_steep_up_2.png b/resources/g2/track/raptor/vertical_to_steep_up_2.png new file mode 100644 index 0000000000..42d34290c1 Binary files /dev/null and b/resources/g2/track/raptor/vertical_to_steep_up_2.png differ diff --git a/resources/g2/track/raptor/vertical_to_steep_up_3.png b/resources/g2/track/raptor/vertical_to_steep_up_3.png new file mode 100644 index 0000000000..aa42da7b05 Binary files /dev/null and b/resources/g2/track/raptor/vertical_to_steep_up_3.png differ diff --git a/resources/g2/track/raptor/vertical_to_steep_up_4.png b/resources/g2/track/raptor/vertical_to_steep_up_4.png new file mode 100644 index 0000000000..555bdced5e Binary files /dev/null and b/resources/g2/track/raptor/vertical_to_steep_up_4.png differ diff --git a/resources/g2/track/raptor/vertical_twist_left_up_1.png b/resources/g2/track/raptor/vertical_twist_left_up_1.png new file mode 100644 index 0000000000..53493c98e9 Binary files /dev/null and b/resources/g2/track/raptor/vertical_twist_left_up_1.png differ diff --git a/resources/g2/track/raptor/vertical_twist_left_up_2_1.png b/resources/g2/track/raptor/vertical_twist_left_up_2_1.png new file mode 100644 index 0000000000..82e21ab637 Binary files /dev/null and b/resources/g2/track/raptor/vertical_twist_left_up_2_1.png differ diff --git a/resources/g2/track/raptor/vertical_twist_left_up_2_2.png b/resources/g2/track/raptor/vertical_twist_left_up_2_2.png new file mode 100644 index 0000000000..eb02c3d953 Binary files /dev/null and b/resources/g2/track/raptor/vertical_twist_left_up_2_2.png differ diff --git a/resources/g2/track/raptor/vertical_twist_left_up_3.png b/resources/g2/track/raptor/vertical_twist_left_up_3.png new file mode 100644 index 0000000000..6d5613fb67 Binary files /dev/null and b/resources/g2/track/raptor/vertical_twist_left_up_3.png differ diff --git a/resources/g2/track/raptor/vertical_twist_left_up_4_1.png b/resources/g2/track/raptor/vertical_twist_left_up_4_1.png new file mode 100644 index 0000000000..cb51e63f2a Binary files /dev/null and b/resources/g2/track/raptor/vertical_twist_left_up_4_1.png differ diff --git a/resources/g2/track/raptor/vertical_twist_left_up_4_2.png b/resources/g2/track/raptor/vertical_twist_left_up_4_2.png new file mode 100644 index 0000000000..96969d4973 Binary files /dev/null and b/resources/g2/track/raptor/vertical_twist_left_up_4_2.png differ diff --git a/resources/g2/track/raptor/vertical_twist_right_up_1_1.png b/resources/g2/track/raptor/vertical_twist_right_up_1_1.png new file mode 100644 index 0000000000..f11cb1c9c6 Binary files /dev/null and b/resources/g2/track/raptor/vertical_twist_right_up_1_1.png differ diff --git a/resources/g2/track/raptor/vertical_twist_right_up_1_2.png b/resources/g2/track/raptor/vertical_twist_right_up_1_2.png new file mode 100644 index 0000000000..af7e77946c Binary files /dev/null and b/resources/g2/track/raptor/vertical_twist_right_up_1_2.png differ diff --git a/resources/g2/track/raptor/vertical_twist_right_up_2.png b/resources/g2/track/raptor/vertical_twist_right_up_2.png new file mode 100644 index 0000000000..0554039c2c Binary files /dev/null and b/resources/g2/track/raptor/vertical_twist_right_up_2.png differ diff --git a/resources/g2/track/raptor/vertical_twist_right_up_3_1.png b/resources/g2/track/raptor/vertical_twist_right_up_3_1.png new file mode 100644 index 0000000000..dda25f0dac Binary files /dev/null and b/resources/g2/track/raptor/vertical_twist_right_up_3_1.png differ diff --git a/resources/g2/track/raptor/vertical_twist_right_up_3_2.png b/resources/g2/track/raptor/vertical_twist_right_up_3_2.png new file mode 100644 index 0000000000..855aabc154 Binary files /dev/null and b/resources/g2/track/raptor/vertical_twist_right_up_3_2.png differ diff --git a/resources/g2/track/raptor/vertical_twist_right_up_4.png b/resources/g2/track/raptor/vertical_twist_right_up_4.png new file mode 100644 index 0000000000..395a84075c Binary files /dev/null and b/resources/g2/track/raptor/vertical_twist_right_up_4.png differ diff --git a/resources/g2/track/raptor/very_small_turn_left_steep_up_1_1.png b/resources/g2/track/raptor/very_small_turn_left_steep_up_1_1.png new file mode 100644 index 0000000000..08a6a7d62f Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_left_steep_up_1_1.png differ diff --git a/resources/g2/track/raptor/very_small_turn_left_steep_up_1_2.png b/resources/g2/track/raptor/very_small_turn_left_steep_up_1_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_left_steep_up_1_2.png differ diff --git a/resources/g2/track/raptor/very_small_turn_left_steep_up_2_1.png b/resources/g2/track/raptor/very_small_turn_left_steep_up_2_1.png new file mode 100644 index 0000000000..b012286c5a Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_left_steep_up_2_1.png differ diff --git a/resources/g2/track/raptor/very_small_turn_left_steep_up_2_2.png b/resources/g2/track/raptor/very_small_turn_left_steep_up_2_2.png new file mode 100644 index 0000000000..0a36efa55a Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_left_steep_up_2_2.png differ diff --git a/resources/g2/track/raptor/very_small_turn_left_steep_up_3_1.png b/resources/g2/track/raptor/very_small_turn_left_steep_up_3_1.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_left_steep_up_3_1.png differ diff --git a/resources/g2/track/raptor/very_small_turn_left_steep_up_3_2.png b/resources/g2/track/raptor/very_small_turn_left_steep_up_3_2.png new file mode 100644 index 0000000000..cdece4d937 Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_left_steep_up_3_2.png differ diff --git a/resources/g2/track/raptor/very_small_turn_left_steep_up_4_1.png b/resources/g2/track/raptor/very_small_turn_left_steep_up_4_1.png new file mode 100644 index 0000000000..15ccddb130 Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_left_steep_up_4_1.png differ diff --git a/resources/g2/track/raptor/very_small_turn_left_steep_up_4_2.png b/resources/g2/track/raptor/very_small_turn_left_steep_up_4_2.png new file mode 100644 index 0000000000..2dd55a99aa Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_left_steep_up_4_2.png differ diff --git a/resources/g2/track/raptor/very_small_turn_right_steep_up_1_1.png b/resources/g2/track/raptor/very_small_turn_right_steep_up_1_1.png new file mode 100644 index 0000000000..e86c4e5b90 Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_right_steep_up_1_1.png differ diff --git a/resources/g2/track/raptor/very_small_turn_right_steep_up_1_2.png b/resources/g2/track/raptor/very_small_turn_right_steep_up_1_2.png new file mode 100644 index 0000000000..e93ed5d69d Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_right_steep_up_1_2.png differ diff --git a/resources/g2/track/raptor/very_small_turn_right_steep_up_2_1.png b/resources/g2/track/raptor/very_small_turn_right_steep_up_2_1.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_right_steep_up_2_1.png differ diff --git a/resources/g2/track/raptor/very_small_turn_right_steep_up_2_2.png b/resources/g2/track/raptor/very_small_turn_right_steep_up_2_2.png new file mode 100644 index 0000000000..1ea7f810ac Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_right_steep_up_2_2.png differ diff --git a/resources/g2/track/raptor/very_small_turn_right_steep_up_3_1.png b/resources/g2/track/raptor/very_small_turn_right_steep_up_3_1.png new file mode 100644 index 0000000000..1f94888950 Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_right_steep_up_3_1.png differ diff --git a/resources/g2/track/raptor/very_small_turn_right_steep_up_3_2.png b/resources/g2/track/raptor/very_small_turn_right_steep_up_3_2.png new file mode 100644 index 0000000000..6760a0487e Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_right_steep_up_3_2.png differ diff --git a/resources/g2/track/raptor/very_small_turn_right_steep_up_4_1.png b/resources/g2/track/raptor/very_small_turn_right_steep_up_4_1.png new file mode 100644 index 0000000000..b0dee7efaf Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_right_steep_up_4_1.png differ diff --git a/resources/g2/track/raptor/very_small_turn_right_steep_up_4_2.png b/resources/g2/track/raptor/very_small_turn_right_steep_up_4_2.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/raptor/very_small_turn_right_steep_up_4_2.png differ diff --git a/src/openrct2-ui/windows/NewRide.cpp b/src/openrct2-ui/windows/NewRide.cpp index 1b1da1abea..f61993f652 100644 --- a/src/openrct2-ui/windows/NewRide.cpp +++ b/src/openrct2-ui/windows/NewRide.cpp @@ -95,6 +95,7 @@ static constexpr const char RideTypeViewOrder[] = { RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER, RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER, RIDE_TYPE_HYBRID_COASTER, + RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER, // Gentle rides RIDE_TYPE_MONORAIL_CYCLES, diff --git a/src/openrct2/libopenrct2.vcxproj b/src/openrct2/libopenrct2.vcxproj index a8139fdcb0..ae1919630e 100644 --- a/src/openrct2/libopenrct2.vcxproj +++ b/src/openrct2/libopenrct2.vcxproj @@ -323,6 +323,7 @@ + @@ -758,6 +759,7 @@ + @@ -865,4 +867,4 @@ - \ No newline at end of file + diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index b1b959b217..a445f8fb93 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -111,6 +111,7 @@ enum STR_RIDE_NAME_59 = 91, STR_RIDE_NAME_LIM_LAUNCHED_ROLLER_COASTER = 92, STR_RIDE_NAME_HYBRID_COASTER = 93, + STR_RIDE_NAME_SINGLE_RAIL_ROLLER_COASTER = 94, STR_RIDE_DESCRIPTION_SPIRAL_ROLLER_COASTER = 512, STR_RIDE_DESCRIPTION_STAND_UP_ROLLER_COASTER = 513, @@ -201,6 +202,7 @@ enum STR_RIDE_DESCRIPTION_LIM_LAUNCHED_ROLLER_COASTER = 602, STR_RIDE_DESCRIPTION_HYBRID_COASTER = 603, + STR_RIDE_DESCRIPTION_SINGLE_RAIL_ROLLER_COASTER = 604, STR_GUEST_X = 767, STR_HANDYMAN_X = 768, diff --git a/src/openrct2/object/RideObject.cpp b/src/openrct2/object/RideObject.cpp index be65539797..3cb364b1ca 100644 --- a/src/openrct2/object/RideObject.cpp +++ b/src/openrct2/object/RideObject.cpp @@ -1018,6 +1018,7 @@ uint8_t RideObject::ParseRideType(const std::string& s) { "mine_ride", RIDE_TYPE_MINE_RIDE }, { "lim_launched_rc", RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER }, { "hybrid_rc", RIDE_TYPE_HYBRID_COASTER }, + { "single_rail_rc", RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER } }; auto result = LookupTable.find(s); return (result != LookupTable.end()) ? result->second : static_cast(RIDE_TYPE_NULL); diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index 1ec76b5468..dcf12d769b 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -647,6 +647,7 @@ enum RIDE_TYPE_SPINNING_WILD_MOUSE, RIDE_TYPE_CLASSIC_MINI_ROLLER_COASTER, RIDE_TYPE_HYBRID_COASTER, + RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER, RIDE_TYPE_COUNT }; diff --git a/src/openrct2/ride/RideData.cpp b/src/openrct2/ride/RideData.cpp index c09cc186b9..a0851f3133 100644 --- a/src/openrct2/ride/RideData.cpp +++ b/src/openrct2/ride/RideData.cpp @@ -54,6 +54,7 @@ #include "coaster/meta/ReverseFreefallCoaster.h" #include "coaster/meta/ReverserRollerCoaster.h" #include "coaster/meta/SideFrictionRollerCoaster.h" +#include "coaster/meta/SingleRailRollerCoaster.h" #include "coaster/meta/SpinningWildMouse.h" #include "coaster/meta/SpiralRollerCoaster.h" #include "coaster/meta/StandUpRollerCoaster.h" @@ -310,6 +311,7 @@ constexpr const RideTypeDescriptor RideTypeDescriptors[RIDE_TYPE_COUNT] = { /* RIDE_TYPE_SPINNING_WILD_MOUSE, */ SpinningWildMouseRTD, /* RIDE_TYPE_CLASSIC_MINI_ROLLER_COASTER, */ ClassicMiniRollerCoasterRTD, /* RIDE_TYPE_HYBRID_COASTER */ HybridCoasterRTD, + /* RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER */ SingleRailRollerCoasterRTD, }; bool RideTypeDescriptor::HasFlag(uint64_t flag) const diff --git a/src/openrct2/ride/RideRatings.cpp b/src/openrct2/ride/RideRatings.cpp index 36171e64e9..cfd732763a 100644 --- a/src/openrct2/ride/RideRatings.cpp +++ b/src/openrct2/ride/RideRatings.cpp @@ -4390,6 +4390,52 @@ void ride_ratings_calculate_hybrid_coaster(Ride* ride) ride->sheltered_eighths = get_num_of_sheltered_eighths(ride).TotalShelteredEighths; } +void ride_ratings_calculate_single_rail_roller_coaster(Ride* ride) +{ + if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) + return; + + ride->unreliability_factor = 16; + set_unreliability_factor(ride); + + RatingTuple ratings; + ride_ratings_set(&ratings, RIDE_RATING(3, 50), RIDE_RATING(0, 60), RIDE_RATING(0, 40)); + ride_ratings_apply_length(&ratings, ride, 6000, 764); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); + ride_ratings_apply_train_length(&ratings, ride, 187245); + ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); + ride_ratings_apply_average_speed(&ratings, ride, 364088, 436906); + ride_ratings_apply_duration(&ratings, ride, 150, 26214); + ride_ratings_apply_gforces(&ratings, ride, 36864, 35746, 49648); + ride_ratings_apply_turns(&ratings, ride, 26749, 34767, 45749); + ride_ratings_apply_drops(&ratings, ride, 29127, 46811, 49152); + ride_ratings_apply_sheltered_ratings(&ratings, ride, 15420, 32768, 35108); + ride_ratings_apply_proximity(&ratings, 22367); + ride_ratings_apply_scenery(&ratings, ride, 6693); + + if (ride->inversions == 0) + ride_ratings_apply_highest_drop_height_penalty(&ratings, ride, 14, 2, 2, 2); // Done + + ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); // Done + + if (ride->inversions == 0) + { + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 40), 2, 2, 2); // Done + ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 2, 2); // Done + } + + ride_ratings_apply_excessive_lateral_g_penalty(&ratings, ride, 24576, 35746, 49648); // Done + ride_ratings_apply_intensity_penalty(&ratings); + ride_ratings_apply_adjustments(ride, &ratings); + + ride->ratings = ratings; + + ride->upkeep_cost = ride_compute_upkeep(ride); + ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_INCOME; + + ride->sheltered_eighths = get_num_of_sheltered_eighths(ride).TotalShelteredEighths; +} + #pragma endregion #pragma region Ride rating calculation function table diff --git a/src/openrct2/ride/RideRatings.h b/src/openrct2/ride/RideRatings.h index 5a92411be4..69f85a3c7e 100644 --- a/src/openrct2/ride/RideRatings.h +++ b/src/openrct2/ride/RideRatings.h @@ -140,4 +140,5 @@ void ride_ratings_calculate_mini_roller_coaster(Ride* ride); void ride_ratings_calculate_mine_ride(Ride* ride); void ride_ratings_calculate_lim_launched_roller_coaster(Ride* ride); void ride_ratings_calculate_hybrid_coaster(Ride* ride); +void ride_ratings_calculate_single_rail_roller_coaster(Ride* ride); void ride_ratings_calculate_drink_stall(Ride* ride); diff --git a/src/openrct2/ride/TrackPaint.h b/src/openrct2/ride/TrackPaint.h index a9e4531599..07cac144dd 100644 --- a/src/openrct2/ride/TrackPaint.h +++ b/src/openrct2/ride/TrackPaint.h @@ -473,5 +473,9 @@ namespace HybridRC { TRACK_PAINT_FUNCTION GetTrackPaintFunction(int32_t trackType); } +namespace SingleRailRC +{ + TRACK_PAINT_FUNCTION GetTrackPaintFunction(int32_t trackType); +} #endif diff --git a/src/openrct2/ride/coaster/SingleRailRollerCoaster.cpp b/src/openrct2/ride/coaster/SingleRailRollerCoaster.cpp new file mode 100644 index 0000000000..df74d5aaa0 --- /dev/null +++ b/src/openrct2/ride/coaster/SingleRailRollerCoaster.cpp @@ -0,0 +1,13418 @@ +#pragma region Copyright(c) 2014 - 2017 OpenRCT2 Developers +/***************************************************************************** + * OpenRCT2, an open source clone of Roller Coaster Tycoon 2. + * + * OpenRCT2 is the work of many authors, a full list can be found in contributors.md + * For more information, visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * A full copy of the GNU General Public License can be found in licence.txt + *****************************************************************************/ +#pragma endregion + +#include "../../drawing/Drawing.h" +#include "../../interface/Viewport.h" +#include "../../paint/Paint.h" +#include "../../paint/Supports.h" +#include "../../sprites.h" +#include "../../world/Map.h" +#include "../../world/Sprite.h" +#include "../RideData.h" +#include "../TrackData.h" +#include "../TrackPaint.h" + +namespace SingleRailRC +{ + static void TrackFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT + 0), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT + 1), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT + 2), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT + 3), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + } + } + else + { + switch (direction) + { + case 0: + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT + 0), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 1: + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT + 1), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + } + } + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void TrackStation( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + static constexpr const uint32_t imageIds[4][3] = { + { (SPR_G2_SINGLE_RAIL_TRACK_BRAKE + 0), (SPR_G2_SINGLE_RAIL_TRACK_BLOCK_BRAKE + 0), SPR_STATION_BASE_B_SW_NE }, + { (SPR_G2_SINGLE_RAIL_TRACK_BRAKE + 1), (SPR_G2_SINGLE_RAIL_TRACK_BLOCK_BRAKE + 1), SPR_STATION_BASE_B_NW_SE }, + { (SPR_G2_SINGLE_RAIL_TRACK_BRAKE + 0), (SPR_G2_SINGLE_RAIL_TRACK_BLOCK_BRAKE + 0), SPR_STATION_BASE_B_SW_NE }, + { (SPR_G2_SINGLE_RAIL_TRACK_BRAKE + 1), (SPR_G2_SINGLE_RAIL_TRACK_BLOCK_BRAKE + 1), SPR_STATION_BASE_B_NW_SE }, + }; + + if (tileElement->AsTrack()->GetTrackType() == TrackElemType::EndStation) + { + PaintAddImageAsParentRotated( + session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_TRACK], 0, 0, 32, 20, 1, height, 0, 6, + height + 3); + } + else + { + PaintAddImageAsParentRotated( + session, direction, imageIds[direction][0] | session->TrackColours[SCHEME_TRACK], 0, 0, 32, 20, 1, height, 0, 6, + height + 3); + } + PaintAddImageAsParentRotated( + session, direction, imageIds[direction][2] | session->TrackColours[SCHEME_MISC], 0, 0, 32, 28, 2, height - 2, 0, 2, + height); + track_paint_util_draw_station_metal_supports_2(session, direction, height, session->TrackColours[SCHEME_SUPPORTS], 0); + track_paint_util_draw_station_2(session, rideIndex, direction, height, tileElement, 4, 7); + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void Track25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE + 8), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE + 9), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE + 10), + 0, 0, 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE + 11), + 0, 0, 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE + 8), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE + 9), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE + 10), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE + 11), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + } + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + static void Track60DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 12), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 13), 0, + 0, 32, 1, 98, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 14), 0, + 0, 32, 1, 98, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 15), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 32, height, session->TrackColours[SCHEME_SUPPORTS]); + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 12), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 13), 0, 0, + 32, 1, 98, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 14), 0, 0, + 32, 1, 98, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 15), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 32, height, session->TrackColours[SCHEME_SUPPORTS]); + } + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 56, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + } + + static void TrackFlatTo25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE + 0), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE + 1), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE + 2), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE + 3), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE + 0), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE + 1), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE + 2), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE + 3), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + } + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + } + + static void Track25DegUpTo60DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 0), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 1), 0, + 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 2), 0, + 0, 32, 1, 66, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 3), 0, + 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 4), 0, + 0, 32, 1, 66, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 5), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 12, height, session->TrackColours[SCHEME_SUPPORTS]); + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 0), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 1), 0, 0, + 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 2), 0, 0, + 32, 1, 66, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 3), 0, 0, + 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 4), 0, 0, + 32, 1, 66, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 5), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 12, height, session->TrackColours[SCHEME_SUPPORTS]); + } + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 24, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + } + + static void Track60DegUpTo25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 6), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 7), 0, + 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 8), 0, + 0, 32, 1, 66, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 9), 0, + 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 10), 0, + 0, 32, 1, 66, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP + 11), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 20, height, session->TrackColours[SCHEME_SUPPORTS]); + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 6), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 7), 0, 0, + 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 8), 0, 0, + 32, 1, 66, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 9), 0, 0, + 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 10), 0, 0, + 32, 1, 66, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP + 11), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 20, height, session->TrackColours[SCHEME_SUPPORTS]); + } + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 24, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + } + + static void Track25DegUpToFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE + 4), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE + 5), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE + 6), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE + 7), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE + 4), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE + 5), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE + 6), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE + 7), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + } + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + } + + static void Track25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track25DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track60DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track60DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackFlatTo25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track25DegUpToFlat(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track25DegDownTo60DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track60DegUpTo25DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track60DegDownTo25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track25DegUpTo60DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track25DegDownToFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackFlatTo25DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track90DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 8), + 0, 0, 2, 20, 31, height, 4, 6, height + 8); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 9), + 0, 0, 2, 20, 31, height, 24, 6, height + 8); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 10), + 0, 0, 2, 20, 31, height, 24, 6, height + 8); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 11), + 0, 0, 2, 20, 31, height, 4, 6, height + 8); + break; + } + paint_util_set_vertical_tunnel(session, height + 32); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + break; + } + } + + static void Track90DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track90DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track60DegUpTo90DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 0), + 0, 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 1), + 0, 0, 2, 20, 55, height, 24, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 2), + 0, 0, 2, 20, 55, height, 24, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 3), + 0, 0, 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 36, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_vertical_tunnel(session, height + 56); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + break; + } + } + + static void Track90DegDownTo60DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track60DegUpTo90DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track90DegUpTo60DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 4), 0, 0, 32, + 20, 3, height, 0, 6, height + 8); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 5), 0, 0, 2, + 20, 31, height, 24, 6, height + 8); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 6), 0, 0, 2, + 20, 31, height, 24, 6, height + 8); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 7), 0, 0, 32, + 20, 3, height, 0, 6, height + 8); + break; + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height + 48, TUNNEL_2); + break; + case 2: + paint_util_push_tunnel_left(session, height + 48, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 80, 0x20); + } + + static void Track60DegDownTo90DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 6), + 0, 0, 2, 20, 31, height, 24, 6, height + 8); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 7), + 0, 0, 32, 20, 3, height, 0, 6, height + 8); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 4), + 0, 0, 32, 20, 3, height, 0, 6, height + 8); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL + 5), + 0, 0, 2, 20, 31, height, 24, 6, height + 8); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 48, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 80, 0x20); + break; + case 1: + break; + } + } + + static void TrackLeftQuarterTurn3( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE + 0), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE + 3), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE + 6), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE + 9), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE + 1), 0, 0, 16, 16, 3, + height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE + 4), 0, 0, 16, 16, 3, + height, 0, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE + 7), 0, 0, 16, 16, 3, + height, 0, 16, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE + 10), 0, 0, 16, 16, 3, + height, 16, 16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE + 2), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE + 5), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE + 8), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE + 11), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackRightQuarterTurn3( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + TrackLeftQuarterTurn3(session, rideIndex, trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void TrackLeftQuarterTurn5( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 0), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 5), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 10), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 15), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 1), 0, 0, 32, 16, 3, + height, 0, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 6), 0, 0, 32, 16, 3, + height, 0, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 11), 0, 0, 32, 16, 3, + height, 0, 16, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 16), 0, 0, 32, 16, 3, + height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 2), 0, 0, 16, 16, 3, + height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 7), 0, 0, 16, 16, 3, + height, 16, 16, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 12), 0, 0, 16, 16, 3, + height, 16, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 17), 0, 0, 16, 16, 3, + height, 0, 0, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 3), 0, 0, 16, 32, 3, + height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 8), 0, 0, 16, 32, 3, + height, 0, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 13), 0, 0, 16, 32, 3, + height, 0, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 18), 0, 0, 16, 32, 3, + height, 16, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 4), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 9), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 14), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE + 19), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackRightQuarterTurn5( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackLeftQuarterTurn5(session, rideIndex, trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void TrackLeftEighthToDiag( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 0), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 4), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 8), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 12), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 1), 0, 0, 32, 16, 3, + height, 0, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 5), 0, 0, 34, 16, 3, + height, 0, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 9), 0, 0, 32, 16, 3, + height, 0, 16, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 13), 0, 0, 32, 16, 3, + height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 2), 0, 0, 16, 16, 3, + height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 6), 0, 0, 16, 16, 3, + height, 16, 16, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 10), 0, 0, 16, 16, 3, + height, 16, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 14), 0, 0, 16, 16, 3, + height, 0, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 3), 0, 0, 16, 16, 3, + height, 16, 16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 7), 0, 0, 16, 18, 3, + height, 0, 16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 11), 0, 0, 16, 16, 3, + height, 0, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 15), 0, 0, 16, 16, 3, + height, 16, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackRightEighthToDiag( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 16), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 20), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 24), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 28), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 17), 0, 0, 32, 16, 3, + height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 21), 0, 0, 32, 16, 3, + height, 0, 16, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 25), 0, 0, 34, 16, 3, + height, 0, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 29), 0, 0, 32, 16, 3, + height, 0, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 18), 0, 0, 16, 16, 3, + height, 0, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 22), 0, 0, 16, 16, 3, + height, 16, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 26), 0, 0, 28, 28, 3, + height, 4, 4, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 30), 0, 0, 16, 16, 3, + height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 19), 0, 0, 16, 16, 3, + height, 16, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 23), 0, 0, 16, 16, 3, + height, 0, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 27), 0, 0, 16, 18, 3, + height, 0, 16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE + 31), 0, 0, 16, 16, 3, + height, 16, 16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackLeftEighthToOrthogonal( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + TrackRightEighthToDiag(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackRightEighthToOrthogonal( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + TrackLeftEighthToDiag(session, rideIndex, trackSequence, (direction + 3) & 3, height, tileElement); + } + + static void TrackDiagFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT_DIAGONAL + 3), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_DIAGONAL + 3), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT_DIAGONAL + 0), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_DIAGONAL + 0), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT_DIAGONAL + 2), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_DIAGONAL + 2), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT_DIAGONAL + 1), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_DIAGONAL + 1), -16, -16, + 32, 32, 3, height, -16, -16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackDiag25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 11), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 11), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 8), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 8), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 10), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 10), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 9, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 1), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 9, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 9, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 9, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 1), -16, -16, + 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 9, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 9, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + } + } + + static void TrackDiag25DegUpToFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 7), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 7), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 4), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 4), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 6), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 6), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 5), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 5), -16, -16, + 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + } + } + + static void TrackDiagFlatTo25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 3), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 3), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 0), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 0), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 2), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 2), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height + 2, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 1), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height + 2, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 2, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 1), -16, -16, + 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 2, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 2, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 2, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackDiag25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 9), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 9), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 10), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 10), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 8), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 8), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 11), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 11), -16, -16, + 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + } + } + + static void TrackDiagFlatTo25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 5), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 5), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 6), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 6), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 4), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 4), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 7), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 7), -16, -16, + 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + break; + } + + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + static void TrackDiag25DegDownToFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 1), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 1), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 2), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 2), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 0), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 0), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL + 3), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL + 3), -16, -16, + 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackDiag60DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 11), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 11), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 8), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 8), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 10), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 10), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 38, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 9), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 36, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 38, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 36, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 38, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 9), -16, -16, + 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 36, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 38, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 36, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + break; + } + } + + static void TrackDiag25DegUpTo60DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 3), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 3), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 0), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 0), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 2), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 2), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 1), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 1), -16, -16, + 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackDiag60DegUpTo25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 7), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 7), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 4), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 4), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 6), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 6), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 21, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 5), -16, + -16, 16, 16, 3, height, 0, 0, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 21, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 21, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 21, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 21, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 5), -16, -16, + 16, 16, 3, height, 0, 0, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 21, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 21, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 21, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackDiag60DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 9), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 9), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 10), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 10), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 8), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 8), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 24, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 11), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 28, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 24, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 28, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 24, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 11), -16, -16, + 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 28, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 24, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 28, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + break; + } + } + + static void TrackDiag25DegDownTo60DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 5), -16, + -16, 16, 16, 3, height, 0, 0, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 5), -16, -16, + 16, 16, 3, height, 0, 0, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 6), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 6), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 4), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 4), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 17, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 7), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 17, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 17, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 17, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 17, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 7), -16, -16, + 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 17, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 17, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 17, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackDiag60DegDownTo25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 1), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 1), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 2), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 2), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 0), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 0), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL + 3), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL + 3), -16, -16, + 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackFlatToLeftBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 0), 0, + 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 1), 0, + 0, 32, 1, 26, height, 0, 27, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 2), 0, + 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 3), 0, + 0, 32, 1, 26, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 4), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 5), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + } + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void TrackFlatToRightBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 6), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 7), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 8), 0, + 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 9), 0, + 0, 32, 1, 26, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 10), + 0, 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 11), + 0, 0, 32, 1, 26, height, 0, 27, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + } + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void TrackLeftBankToFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackFlatToRightBank(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackRightBankToFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackFlatToLeftBank(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackLeftBankTo25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 12), + 0, 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 13), + 0, 0, 32, 1, 34, height, 0, 27, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 14), + 0, 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 15), + 0, 0, 32, 1, 34, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 16), + 0, 0, 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 17), + 0, 0, 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + } + + static void TrackRightBankTo25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 18), + 0, 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 19), + 0, 0, 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 20), + 0, 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 21), + 0, 0, 32, 1, 34, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 22), + 0, 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 23), + 0, 0, 32, 1, 34, height, 0, 27, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + } + + static void Track25DegUpToLeftBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 24), + 0, 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 25), + 0, 0, 32, 1, 34, height, 0, 27, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 26), + 0, 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 27), + 0, 0, 32, 1, 34, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 28), + 0, 0, 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 29), + 0, 0, 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + } + + static void Track25DegUpToRightBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 30), + 0, 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 31), + 0, 0, 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 32), + 0, 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 33), + 0, 0, 32, 1, 34, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 34), + 0, 0, 32, 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 35), + 0, 0, 32, 1, 34, height, 0, 27, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + } + + static void TrackLeftBankTo25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track25DegUpToRightBank(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackRightBankTo25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track25DegUpToLeftBank(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track25DegDownToLeftBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackRightBankTo25DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track25DegDownToRightBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackLeftBankTo25DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackLeftBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 36), + 0, 0, 32, 1, 26, height, 0, 27, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 37), + 0, 0, 32, 1, 26, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 38), + 0, 0, 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION + 39), + 0, 0, 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + } + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void TrackRightBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackLeftBank(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackDiagFlatToLeftBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 4), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 0), -16, + -16, 32, 32, 3, height, -16, -16, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 1), -16, + -16, 32, 32, 0, height, -16, -16, height + 27); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 3), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 2), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackDiagFlatToRightBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 9), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 5), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 7), -16, + -16, 32, 32, 3, height, -16, -16, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 8), -16, + -16, 32, 32, 0, height, -16, -16, height + 27); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 6), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackDiagLeftBankToFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 6), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 7), -16, + -16, 32, 32, 3, height, -16, -16, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 8), -16, + -16, 32, 32, 0, height, -16, -16, height + 27); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 5), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 9), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackDiagRightBankToFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 2), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 3), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 0), -16, + -16, 32, 32, 3, height, -16, -16, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 1), -16, + -16, 32, 32, 0, height, -16, -16, height + 27); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 4), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackDiagLeftBankTo25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 14), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 10), -16, + -16, 32, 32, 3, height, -16, -16, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 11), -16, + -16, 32, 32, 0, height, -16, -16, height + 35); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 13), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 12), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackDiagRightBankTo25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 19), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 15), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 17), -16, + -16, 32, 32, 3, height, -16, -16, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 18), -16, + -16, 32, 32, 0, height, -16, -16, height + 35); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 16), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackDiag25DegUpToLeftBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 24), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 20), -16, + -16, 32, 32, 3, height, -16, -16, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 21), -16, + -16, 32, 32, 0, height, -16, -16, height + 35); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 23), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 22), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + } + } + + static void TrackDiag25DegUpToRightBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 29), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 25), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 27), -16, + -16, 32, 32, 3, height, -16, -16, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 28), -16, + -16, 32, 32, 0, height, -16, -16, height + 35); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 26), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + } + } + + static void TrackDiagLeftBankTo25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 26), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 27), -16, + -16, 32, 32, 3, height, -16, -16, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 28), -16, + -16, 32, 32, 0, height, -16, -16, height + 35); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 25), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 29), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + break; + } + + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + static void TrackDiagRightBankTo25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 22), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 23), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 20), -16, + -16, 32, 32, 3, height, -16, -16, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 21), -16, + -16, 32, 32, 0, height, -16, -16, height + 35); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 24), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 4, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + break; + } + + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + static void TrackDiag25DegDownToLeftBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 16), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 17), -16, + -16, 32, 32, 3, height, -16, -16, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 18), -16, + -16, 32, 32, 0, height, -16, -16, height + 35); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 15), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 19), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackDiag25DegDownToRightBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 12), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 13), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 10), -16, + -16, 32, 32, 3, height, -16, -16, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 11), -16, + -16, 32, 32, 0, height, -16, -16, height + 35); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 14), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackDiagLeftBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 33), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 30), -16, + -16, 32, 32, 0, height, -16, -16, height + 27); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 32), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 31), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackDiagRightBank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 31), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 32), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 30), -16, + -16, 32, 32, 0, height, -16, -16, height + 27); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL + 33), -16, + -16, 32, 32, 3, height, -16, -16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackLeftQuarterTurn3Bank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED + 0), 0, 0, 32, + 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED + 1), 0, 0, 32, + 1, 26, height, 0, 27, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED + 4), 0, 0, 32, + 1, 26, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED + 7), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED + 11), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 2, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED + 2), 0, 0, 16, + 16, 3, height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED + 5), 0, 0, 16, + 16, 1, height, 0, 0, height + 27); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED + 8), 0, 0, 16, + 16, 3, height, 0, 16, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED + 12), 0, 0, 16, + 16, 3, height, 16, 16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED + 3), 0, 0, 20, + 32, 3, height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED + 6), 0, 0, 1, + 32, 26, height, 27, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED + 9), 0, 0, 20, + 32, 3, height, 6, 0, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED + 10), 0, 0, 1, + 32, 26, height, 27, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED + 13), 0, 0, 20, + 32, 3, height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 2, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackRightQuarterTurn3Bank( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + TrackLeftQuarterTurn3Bank(session, rideIndex, trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void TrackBankedLeftQuarterTurn5( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 0), 0, 0, 32, + 20, 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 1), 0, 0, 32, + 1, 26, height, 0, 27, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 6), 0, 0, 32, + 1, 26, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 11), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 17), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 1, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 2), 0, 0, 32, + 16, 3, height, 0, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 7), 0, 0, 32, + 16, 1, height, 0, 0, height + 27); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 12), 0, 0, 32, + 16, 3, height, 0, 16, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 18), 0, 0, 32, + 16, 3, height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 3), 0, 0, 16, + 16, 3, height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 8), 0, 0, 16, + 16, 1, height, 16, 16, height + 27); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 13), 0, 0, 16, + 16, 3, height, 16, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 19), 0, 0, 16, + 16, 3, height, 0, 0, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 4), 0, 0, 16, + 32, 3, height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 9), 0, 0, 16, + 32, 1, height, 0, 0, height + 27); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 14), 0, 0, 16, + 32, 3, height, 0, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 20), 0, 0, 16, + 32, 3, height, 16, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 5), 0, 0, 20, + 32, 3, height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 10), 0, 0, 1, + 32, 26, height, 27, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 15), 0, 0, 20, + 32, 3, height, 6, 0, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 16), 0, 0, 1, + 32, 26, height, 27, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED + 21), 0, 0, 20, + 32, 3, height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 1, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackBankedRightQuarterTurn5( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackBankedLeftQuarterTurn5(session, rideIndex, trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void TrackLeftEighthBankToDiag( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 0), 0, 0, 32, + 1, 26, height, 0, 27, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 4), 0, 0, 32, + 1, 26, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 8), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 12), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 1), 0, 0, 32, + 16, 3, height, 0, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 5), 0, 0, 34, + 16, 0, height, 0, 0, height + 27); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 9), 0, 0, 32, + 16, 3, height, 0, 16, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 13), 0, 0, 32, + 16, 3, height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 2), 0, 0, 16, + 16, 3, height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 6), 0, 0, 16, + 16, 0, height, 16, 16, height + 27); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 10), 0, 0, 16, + 16, 3, height, 16, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 14), 0, 0, 16, + 16, 3, height, 0, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 3), 0, 0, 16, + 16, 3, height, 16, 16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 7), 0, 0, 16, + 18, 0, height, 0, 16, height + 27); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 11), 0, 0, 16, + 16, 3, height, 0, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 15), 0, 0, 16, + 16, 3, height, 16, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackRightEighthBankToDiag( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 16), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 20), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 24), 0, 0, 32, + 1, 26, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 28), 0, 0, 32, + 1, 26, height, 0, 27, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 17), 0, 0, 32, + 16, 3, height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 21), 0, 0, 32, + 16, 3, height, 0, 16, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 25), 0, 0, 34, + 16, 0, height, 0, 0, height + 27); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 29), 0, 0, 32, + 16, 3, height, 0, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 18), 0, 0, 16, + 16, 3, height, 0, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 22), 0, 0, 16, + 16, 3, height, 16, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 26), 0, 0, 28, + 28, 0, height, 4, 4, height + 27); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 30), 0, 0, 16, + 16, 3, height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 19), 0, 0, 16, + 16, 3, height, 16, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 23), 0, 0, 16, + 16, 3, height, 0, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 27), 0, 0, 16, + 18, 0, height, 0, 16, height + 27); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED + 31), 0, 0, 16, + 16, 3, height, 16, 16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackLeftEighthBankToOrthogonal( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + TrackRightEighthBankToDiag(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackRightEighthBankToOrthogonal( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + TrackLeftEighthBankToDiag(session, rideIndex, trackSequence, (direction + 3) & 3, height, tileElement); + } + + static void TrackLeftQuarterTurn3Tile25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 0), 0, 6, 32, + 20, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 2), 0, 6, 32, + 20, 3, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 4), 0, 6, 32, + 20, 3, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 6), 0, 6, 32, + 20, 3, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 1), 6, 0, 20, + 32, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 3), 6, 0, 20, + 32, 3, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 5), 6, 0, 20, + 32, 3, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 7), 6, 0, 20, + 32, 3, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_2); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackRightQuarterTurn3Tile25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 8), 0, 6, 32, + 20, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 10), 0, 6, 32, + 20, 3, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 12), 0, 6, 32, + 20, 3, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 14), 0, 6, 32, + 20, 3, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 9), 6, 0, 20, + 32, 3, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 11), 6, 0, 20, + 32, 3, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 13), 6, 0, 20, + 32, 3, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 10, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE + 15), 6, 0, 20, + 32, 3, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_2); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackLeftQuarterTurn3Tile25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + TrackRightQuarterTurn3Tile25DegUp(session, rideIndex, trackSequence, (direction + 1) & 3, height, tileElement); + } + + static void TrackRightQuarterTurn3Tile25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + TrackLeftQuarterTurn3Tile25DegUp(session, rideIndex, trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void TrackLeftQuarterTurn525DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 0), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 5), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 10), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 15), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 1), 0, 0, 32, + 16, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 6), 0, 0, 32, + 16, 3, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 11), 0, 0, 32, + 16, 3, height, 0, 16, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 16), 0, 0, 32, + 16, 3, height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 2), 0, 0, 16, + 16, 3, height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 7), 0, 0, 16, + 16, 3, height, 16, 16, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 12), 0, 0, 16, + 16, 3, height, 16, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 17), 0, 0, 16, + 16, 3, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 4: + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 3), 0, 0, 16, + 32, 3, height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 8), 0, 0, 16, + 32, 3, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 13), 0, 0, 16, + 32, 3, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 18), 0, 0, 16, + 32, 3, height, 16, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 4), 0, 0, 20, + 32, 3, height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 9), 0, 0, 20, + 32, 3, height, 6, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 14), 0, 0, 20, + 32, 3, height, 6, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 19), 0, 0, 20, + 32, 3, height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_2); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackRightQuarterTurn525DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 20), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 25), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 30), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 35), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 21), 0, 0, 32, + 16, 3, height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 26), 0, 0, 32, + 16, 3, height, 0, 16, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 31), 0, 0, 32, + 16, 3, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 36), 0, 0, 32, + 16, 3, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 22), 0, 0, 16, + 16, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 27), 0, 0, 16, + 16, 3, height, 16, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 32), 0, 0, 16, + 16, 3, height, 16, 16, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 37), 0, 0, 16, + 16, 3, height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 4: + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 23), 0, 0, 16, + 32, 3, height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 28), 0, 0, 16, + 32, 3, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 33), 0, 0, 16, + 32, 3, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 38), 0, 0, 16, + 32, 3, height, 16, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 24), 0, 0, 20, + 32, 3, height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 29), 0, 0, 20, + 32, 3, height, 6, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 34), 0, 0, 20, + 32, 3, height, 6, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE + 39), 0, 0, 20, + 32, 3, height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_2); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackLeftQuarterTurn525DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackRightQuarterTurn525DegUp(session, rideIndex, trackSequence, (direction + 1) & 3, height, tileElement); + } + + static void TrackRightQuarterTurn525DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackLeftQuarterTurn525DegUp(session, rideIndex, trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void TrackLeftQuarterTurn160DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 0), + 0, 0, 28, 28, 3, height, 2, 2, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 1), + 0, 0, 28, 28, 1, height, 2, 2, height + 99); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 2), + 0, 0, 28, 28, 3, height, 2, 2, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 3), + 0, 0, 28, 28, 1, height, 2, 2, height + 99); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 4), + 0, 0, 28, 28, 3, height, 2, 2, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 5), + 0, 0, 28, 28, 1, height, 2, 2, height + 99); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 6), + 0, 0, 28, 28, 3, height, 2, 2, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 7), + 0, 0, 28, 28, 1, height, 2, 2, height + 99); + break; + } + track_paint_util_left_quarter_turn_1_tile_tunnel(session, direction, height, -8, TUNNEL_1, +56, TUNNEL_2); + paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + } + + static void TrackRightQuarterTurn160DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 8), + 0, 0, 28, 28, 3, height, 2, 2, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 9), + 0, 0, 28, 28, 1, height, 2, 2, height + 99); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 10), + 0, 0, 28, 28, 3, height, 2, 2, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 11), + 0, 0, 28, 28, 1, height, 2, 2, height + 99); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 12), + 0, 0, 28, 28, 3, height, 2, 2, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 13), + 0, 0, 28, 28, 1, height, 2, 2, height + 99); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 14), + 0, 0, 28, 28, 3, height, 2, 2, height); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE + 15), + 0, 0, 28, 28, 1, height, 2, 2, height + 99); + break; + } + track_paint_util_right_quarter_turn_1_tile_tunnel(session, direction, height, -8, TUNNEL_1, +56, TUNNEL_2); + paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + } + + static void TrackLeftQuarterTurn160DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackRightQuarterTurn160DegUp(session, rideIndex, trackSequence, (direction + 1) & 3, height, tileElement); + } + + static void TrackRightQuarterTurn160DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackLeftQuarterTurn160DegUp(session, rideIndex, trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void TrackLeftQuarterTurn190DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL_TWIST + 0), 0, 0, 2, 20, + 63, height, 4, 6, height + 8); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL_TWIST + 1), 0, 0, 2, 20, + 63, height, 4, 6, height + 8); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL_TWIST + 2), 0, 0, 2, 20, + 63, height, 24, 6, height + 8); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL_TWIST + 3), 0, 0, 2, 20, + 63, height, 24, 6, height + 8); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL_TWIST + 4), 0, 0, 2, 20, + 63, height, 4, 6, height + 8); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL_TWIST + 5), 0, 0, 2, 20, + 63, height, 24, 6, height + 8); + break; + } + paint_util_set_vertical_tunnel(session, height + 96); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 96, 0x20); + break; + case 1: + break; + } + } + + static void TrackRightQuarterTurn190DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL_TWIST + 6), 0, 0, 2, 20, + 63, height, 4, 6, height + 8); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL_TWIST + 7), 0, 0, 2, 20, + 63, height, 24, 6, height + 8); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL_TWIST + 8), 0, 0, 2, 20, + 63, height, 24, 6, height + 8); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL_TWIST + 9), 0, 0, 2, 20, + 63, height, 4, 6, height + 8); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL_TWIST + 10), 0, 0, 2, 20, + 63, height, 24, 6, height + 8); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_VERTICAL_TWIST + 11), 0, 0, 2, 20, + 63, height, 4, 6, height + 8); + break; + } + paint_util_set_vertical_tunnel(session, height + 96); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 96, 0x20); + break; + case 1: + break; + } + } + + static void TrackLeftQuarterTurn190DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackRightQuarterTurn190DegUp(session, rideIndex, trackSequence, (direction + 1) & 3, height, tileElement); + } + + static void TrackRightQuarterTurn190DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackLeftQuarterTurn190DegUp(session, rideIndex, trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void Track25DegUpToLeftBanked25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 0), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 1), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 2), 0, 0, 32, 1, 34, + height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 3), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 4), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + static void Track25DegUpToRightBanked25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 5), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 6), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 7), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 8), 0, 0, 32, 1, 34, + height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 9), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + static void TrackLeftBanked25DegUpTo25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 10), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 11), 0, 0, 32, 20, + 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 12), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 13), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 14), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + static void TrackRightBanked25DegUpTo25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 15), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 16), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 17), 0, 0, 32, 20, + 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 18), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 19), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + static void TrackLeftBanked25DegDownTo25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track25DegUpToRightBanked25DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackRightBanked25DegDownTo25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track25DegUpToLeftBanked25DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track25DegDownToLeftBanked25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackRightBanked25DegUpTo25DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track25DegDownToRightBanked25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackLeftBanked25DegUpTo25DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackLeftBankedFlatToLeftBanked25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 20), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 21), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 22), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 23), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + } + + static void TrackRightBankedFlatToRightBanked25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 24), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 25), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 26), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 27), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + } + + static void TrackLeftBanked25DegUpToLeftBankedFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 28), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 29), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 30), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 31), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + } + + static void TrackRightBanked25DegUpToRightBankedFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 32), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 33), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 34), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 35), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + } + + static void TrackLeftBankedFlatToLeftBanked25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackRightBanked25DegUpToRightBankedFlat(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackRightBankedFlatToRightBanked25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackLeftBanked25DegUpToLeftBankedFlat(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackLeftBanked25DegDownToLeftBankedFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackRightBankedFlatToRightBanked25DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackRightBanked25DegDownToRightBankedFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackLeftBankedFlatToLeftBanked25DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track25DegUpLeftBanked( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 36), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 37), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 38), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 39), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + static void Track25DegUpRightBanked( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 40), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 41), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 42), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 43), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + static void Track25DegDownLeftBanked( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track25DegUpRightBanked(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track25DegDownRightBanked( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track25DegUpLeftBanked(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackFlatToLeftBanked25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 44), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 45), 0, 0, 32, 20, + 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 46), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 47), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 48), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + } + + static void TrackFlatToRightBanked25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 49), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 50), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 51), 0, 0, 32, 20, + 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 52), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 53), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + } + + static void TrackLeftBanked25DegUpToFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 54), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 55), 0, 0, 32, 20, + 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 56), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 57), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 58), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + } + + static void TrackRightBanked25DegUpToFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 59), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 60), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 61), 0, 0, 32, 20, + 3, height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 62), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION + 63), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + } + + static void TrackFlatToLeftBanked25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackRightBanked25DegUpToFlat(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackFlatToRightBanked25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackLeftBanked25DegUpToFlat(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackLeftBanked25DegDownToFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackFlatToRightBanked25DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackRightBanked25DegDownToFlat( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackFlatToLeftBanked25DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackLeftBankedQuarterTurn3Tile25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 0), 0, + 6, 32, 20, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 2), 0, + 6, 32, 1, 34, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 4), 0, + 6, 32, 20, 3, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 6), 0, + 6, 32, 20, 3, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 1), 6, + 0, 20, 32, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 3), 6, + 0, 1, 32, 34, height, 27, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 5), 6, + 0, 1, 32, 34, height, 27, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 7), 6, + 0, 20, 32, 3, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_2); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackRightBankedQuarterTurn3Tile25DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 8), 0, + 6, 32, 20, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 10), 0, + 6, 32, 20, 3, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 12), 0, + 6, 32, 1, 34, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 14), 0, + 6, 32, 20, 3, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 9), 6, + 0, 20, 32, 3, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 11), 6, + 0, 1, 32, 34, height, 27, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 13), 6, + 0, 1, 32, 34, height, 27, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 10, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED + 15), 6, + 0, 20, 32, 3, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_2); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackLeftBankedQuarterTurn3Tile25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + TrackRightBankedQuarterTurn3Tile25DegUp(session, rideIndex, trackSequence, (direction + 1) & 3, height, tileElement); + } + + static void TrackRightBankedQuarterTurn3Tile25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + TrackLeftBankedQuarterTurn3Tile25DegUp(session, rideIndex, trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void TrackLeftBankedQuarterTurn525DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 0), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 5), 0, + 0, 32, 1, 34, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 10), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 15), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 1), 0, + 0, 32, 16, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 6), 0, + 0, 1, 1, 34, height, 30, 30, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 11), 0, + 0, 32, 16, 3, height, 0, 16, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 16), 0, + 0, 32, 16, 3, height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 2), 0, + 0, 16, 16, 3, height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 7), 0, + 0, 1, 1, 34, height, 30, 30, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 12), 0, + 0, 16, 16, 3, height, 16, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 17), 0, + 0, 16, 16, 3, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 4: + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 3), 0, + 0, 16, 32, 3, height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 8), 0, + 0, 1, 1, 34, height, 30, 30, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 13), 0, + 0, 1, 32, 34, height, 27, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 18), 0, + 0, 16, 32, 3, height, 16, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 4), 0, + 0, 20, 32, 3, height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 9), 0, + 0, 1, 32, 34, height, 27, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 14), 0, + 0, 1, 32, 34, height, 27, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 19), 0, + 0, 20, 32, 3, height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_2); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackRightBankedQuarterTurn525DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 20), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 25), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 30), 0, + 0, 32, 1, 34, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 35), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 21), 0, + 0, 32, 16, 3, height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 26), 0, + 0, 32, 16, 3, height, 0, 16, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 31), 0, + 0, 1, 1, 34, height, 30, 30, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 36), 0, + 0, 32, 16, 3, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 22), 0, + 0, 16, 16, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 27), 0, + 0, 16, 16, 3, height, 16, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 32), 0, + 0, 1, 1, 34, height, 30, 30, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 37), 0, + 0, 16, 16, 3, height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 4: + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 23), 0, + 0, 16, 32, 3, height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 28), 0, + 0, 1, 32, 34, height, 27, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 33), 0, + 0, 1, 1, 34, height, 30, 30, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 38), 0, + 0, 16, 32, 3, height, 16, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 24), 0, + 0, 20, 32, 3, height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 29), 0, + 0, 1, 32, 34, height, 27, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 34), 0, + 0, 1, 32, 34, height, 27, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 39), 0, + 0, 20, 32, 3, height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_2); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackLeftBankedQuarterTurn525DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackRightBankedQuarterTurn525DegUp(session, rideIndex, trackSequence, (direction + 1) & 3, height, tileElement); + } + + static void TrackRightBankedQuarterTurn525DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackLeftBankedQuarterTurn525DegUp(session, rideIndex, trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void TrackSBendLeft( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 0), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 4), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 3), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 7), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 1), 0, + 0, 32, 26, 3, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 5), 0, + 0, 32, 26, 3, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 1, height - 1, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 2), 0, + 0, 32, 26, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 6), 0, + 0, 32, 26, 3, height, 0, 6, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 2), 0, + 0, 32, 26, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 6), 0, + 0, 32, 26, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 1), 0, + 0, 32, 26, 3, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 5), 0, + 0, 32, 26, 3, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 1, height - 1, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 3), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 7), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 0), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 4), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 2: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackSBendRight( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 8), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 12), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 11), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 15), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 9), 0, + 0, 32, 26, 3, height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 13), 0, + 0, 32, 26, 3, height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 10), 0, + 0, 32, 26, 3, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 14), 0, + 0, 32, 26, 3, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 10), 0, + 0, 32, 26, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 14), 0, + 0, 32, 26, 3, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 9), 0, + 0, 32, 26, 3, height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 13), 0, + 0, 32, 26, 3, height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 11), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 15), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 8), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_S_BEND + 12), 0, + 0, 32, 20, 3, height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 2: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackLeftHalfBankedHelixUpSmall( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 0), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 1), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 4), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 7), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 11), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 2, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 2), 0, 0, 16, 16, 3, + height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 5), 0, 0, 16, 16, 1, + height, 0, 0, height + 27); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 8), 0, 0, 16, 16, 3, + height, 0, 16, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 12), 0, 0, 16, 16, 3, + height, 16, 16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 3), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 6), 0, 0, 1, 32, 26, + height, 27, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 9), 0, 0, 20, 32, 3, + height, 6, 0, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 10), 0, 0, 1, 32, 26, + height, 27, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 13), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 11), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 0), 0, 0, 20, 32, 3, + height, 6, 0, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 1), 0, 0, 1, 32, 26, + height, 27, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 4), 0, 0, 1, 32, 26, + height, 27, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 7), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 2, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 1: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 12), 0, 0, 16, 16, 3, + height, 16, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 2), 0, 0, 16, 16, 3, + height, 0, 16, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 5), 0, 0, 16, 16, 1, + height, 0, 0, height + 27); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 8), 0, 0, 16, 16, 3, + height, 16, 0, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 13), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 3), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 6), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 9), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 10), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackRightHalfBankedHelixUpSmall( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 14), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 17), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 21), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 24), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 25), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 2, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 15), 0, 0, 16, 16, 3, + height, 16, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 18), 0, 0, 16, 16, 3, + height, 0, 16, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 22), 0, 0, 16, 16, 1, + height, 0, 0, height + 27); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 26), 0, 0, 16, 16, 3, + height, 16, 0, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 16), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 19), 0, 0, 20, 32, 3, + height, 6, 0, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 20), 0, 0, 1, 32, 26, + height, 27, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 23), 0, 0, 1, 32, 26, + height, 27, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 27), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 17), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 21), 0, 0, 1, 32, 26, + height, 27, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 24), 0, 0, 20, 32, 3, + height, 6, 0, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 25), 0, 0, 1, 32, 26, + height, 27, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 14), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 2, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 18), 0, 0, 16, 16, 3, + height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 22), 0, 0, 16, 16, 1, + height, 0, 0, height + 27); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 26), 0, 0, 16, 16, 3, + height, 0, 16, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 15), 0, 0, 16, 16, 3, + height, 16, 16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 19), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 20), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 23), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 27), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX + 16), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackLeftHalfBankedHelixDownSmall( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + if (trackSequence >= 4) + { + trackSequence -= 4; + direction = (direction - 1) & 3; + } + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + TrackRightHalfBankedHelixUpSmall(session, rideIndex, trackSequence, (direction + 1) & 3, height, tileElement); + } + + static void TrackRightHalfBankedHelixDownSmall( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + if (trackSequence >= 4) + { + trackSequence -= 4; + direction = (direction + 1) & 3; + } + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + TrackLeftHalfBankedHelixUpSmall(session, rideIndex, trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void TrackLeftHalfBankedHelixUpLarge( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 0), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 1), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 6), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 11), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 17), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 1, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 2), 0, 0, 32, 16, 3, + height, 0, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 7), 0, 0, 32, 16, 1, + height, 0, 0, height + 27); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 12), 0, 0, 32, 16, 3, + height, 0, 16, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 18), 0, 0, 32, 16, 3, + height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 3), 0, 0, 16, 16, 3, + height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 8), 0, 0, 16, 16, 1, + height, 16, 16, height + 27); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 13), 0, 0, 16, 16, 3, + height, 16, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 19), 0, 0, 16, 16, 3, + height, 0, 0, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 4), 0, 0, 16, 32, 3, + height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 9), 0, 0, 16, 32, 1, + height, 0, 0, height + 27); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 14), 0, 0, 16, 32, 3, + height, 0, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 20), 0, 0, 16, 32, 3, + height, 16, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 5), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 10), 0, 0, 1, 32, 26, + height, 27, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 15), 0, 0, 20, 32, 3, + height, 6, 0, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 16), 0, 0, 1, 32, 26, + height, 27, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 21), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 17), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 0), 0, 0, 20, 32, 3, + height, 6, 0, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 1), 0, 0, 1, 32, 26, + height, 27, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 6), 0, 0, 1, 32, 26, + height, 27, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 11), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 1, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 1: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 8: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 9: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 18), 0, 0, 16, 32, 3, + height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 2), 0, 0, 16, 32, 3, + height, 0, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 7), 0, 0, 16, 32, 1, + height, 0, 0, height + 27); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 12), 0, 0, 16, 32, 3, + height, 16, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 10: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 19), 0, 0, 16, 16, 3, + height, 0, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 3), 0, 0, 16, 16, 3, + height, 16, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 8), 0, 0, 16, 16, 1, + height, 16, 16, height + 27); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 13), 0, 0, 16, 16, 3, + height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 11: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 12: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 20), 0, 0, 32, 16, 3, + height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 4), 0, 0, 32, 16, 3, + height, 0, 16, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 9), 0, 0, 32, 16, 1, + height, 0, 0, height + 27); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 14), 0, 0, 32, 16, 3, + height, 0, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 13: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 21), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 5), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 10), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 15), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 16), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + static void TrackRightHalfBankedHelixUpLarge( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 22), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 27), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 33), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 38), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 39), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 1, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 23), 0, 0, 32, 16, 3, + height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 28), 0, 0, 32, 16, 3, + height, 0, 16, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 34), 0, 0, 32, 16, 1, + height, 0, 0, height + 27); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 40), 0, 0, 32, 16, 3, + height, 0, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 24), 0, 0, 16, 16, 3, + height, 0, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 29), 0, 0, 16, 16, 3, + height, 16, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 35), 0, 0, 16, 16, 1, + height, 16, 16, height + 27); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 41), 0, 0, 16, 16, 3, + height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 25), 0, 0, 16, 32, 3, + height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 30), 0, 0, 16, 32, 3, + height, 0, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 36), 0, 0, 16, 32, 1, + height, 0, 0, height + 27); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 42), 0, 0, 16, 32, 3, + height, 16, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 26), 0, 0, 20, 32, 3, + height, 6, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 31), 0, 0, 20, 32, 3, + height, 6, 0, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 32), 0, 0, 1, 32, 26, + height, 27, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 37), 0, 0, 1, 32, 26, + height, 27, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 43), 0, 0, 20, 32, 3, + height, 6, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 7: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 27), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 33), 0, 0, 1, 32, 26, + height, 27, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 38), 0, 0, 20, 32, 3, + height, 6, 0, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 39), 0, 0, 1, 32, 26, + height, 27, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 22), 0, 0, 20, 32, 3, + height, 6, 0, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 1, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 8: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 9: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 28), 0, 0, 16, 32, 3, + height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 34), 0, 0, 16, 32, 1, + height, 0, 0, height + 27); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 40), 0, 0, 16, 32, 3, + height, 0, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 23), 0, 0, 16, 32, 3, + height, 16, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 10: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 29), 0, 0, 16, 16, 3, + height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 35), 0, 0, 16, 16, 1, + height, 16, 16, height + 27); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 41), 0, 0, 16, 16, 3, + height, 16, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 24), 0, 0, 16, 16, 3, + height, 0, 0, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 11: + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 12: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 30), 0, 0, 32, 16, 3, + height, 0, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 36), 0, 0, 32, 16, 1, + height, 0, 0, height + 27); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 42), 0, 0, 32, 16, 3, + height, 0, 16, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 25), 0, 0, 32, 16, 3, + height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 13: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 31), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 32), 0, 0, 32, 1, 26, + height, 0, 27, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 37), 0, 0, 32, 1, 26, + height, 0, 27, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 43), 0, 0, 32, 20, 3, + height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX + 26), 0, 0, 32, 20, 3, + height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + } + } + + static void TrackLeftHalfBankedHelixDownLarge( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + if (trackSequence >= 7) + { + trackSequence -= 7; + direction = (direction - 1) & 3; + } + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackRightHalfBankedHelixUpLarge(session, rideIndex, trackSequence, (direction + 1) & 3, height, tileElement); + } + + static void TrackRightHalfBankedHelixDownLarge( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + if (trackSequence >= 7) + { + trackSequence -= 7; + direction = (direction + 1) & 3; + } + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackLeftHalfBankedHelixUpLarge(session, rideIndex, trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void TrackLeftBarrelRollUpToDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 0), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 1), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 4, height + 1, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 6), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 7), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 4, height + 1, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 12), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 13), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 0, height + 1, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 18), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 19), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 2), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 3), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 8), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 9), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 14), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 15), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 20), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 21), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 4), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 5), 0, 0, 32, 20, 0, + height, 0, 6, height + 44); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 10), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 11), 0, 0, 32, 20, 0, + height, 0, 6, height + 44); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 16), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 17), 0, 0, 32, 20, 0, + height, 0, 6, height + 44); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 22), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 23), 0, 0, 32, 20, 0, + height, 0, 6, height + 44); + break; + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height, TUNNEL_INVERTED_3); + break; + case 2: + paint_util_push_tunnel_left(session, height, TUNNEL_INVERTED_3); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackRightBarrelRollUpToDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 24), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 25), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 30), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 31), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 0, height + 1, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 36), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 37), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 4, height + 1, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 42), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 43), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 4, height + 1, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 26), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 27), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 32), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 33), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 38), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 39), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 44), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 45), 0, 0, 32, 20, 0, + height, 0, 6, height + 28); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 28), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 29), 0, 0, 32, 20, 0, + height, 0, 6, height + 44); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 34), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 35), 0, 0, 32, 20, 0, + height, 0, 6, height + 44); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 40), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 41), 0, 0, 32, 20, 0, + height, 0, 6, height + 44); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 46), 0, 0, 32, 20, 3, + height, 0, 6, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL + 47), 0, 0, 32, 20, 0, + height, 0, 6, height + 44); + break; + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height, TUNNEL_INVERTED_3); + break; + case 2: + paint_util_push_tunnel_left(session, height, TUNNEL_INVERTED_3); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackLeftBarrelRollDownToUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackLeftBarrelRollUpToDown(session, rideIndex, 2 - trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackRightBarrelRollDownToUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackRightBarrelRollUpToDown(session, rideIndex, 2 - trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackHalfLoopUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 0), + 0, 6, 32, 20, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 4), + 0, 6, 32, 20, 11, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 8), + 0, 6, 32, 20, 9, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 12), + 0, 6, 32, 20, 7, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 1), + 0, 0, 32, 20, 3, height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 20, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 5), + 0, 14, 3, 20, 63, height, 28, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 15, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 9), + 0, 6, 3, 20, 63, height, 28, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 13), + 0, 6, 32, 20, 3, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 2), + 16, 0, 2, 16, 119, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 6), + 12, 0, 3, 16, 119, height, 12, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 10), + 10, 16, 4, 12, 119, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 14), + 16, 16, 2, 16, 119, height, 15, 6, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 168, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 3), + 0, 0, 32, 16, 3, height + 32); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 7), + 0, 0, 32, 16, 3, height + 32); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 11), + 0, 16, 32, 12, 3, height + 32); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP + 15), + 0, 16, 32, 12, 3, height + 32); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackHalfLoopDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackHalfLoopUp(session, rideIndex, 3 - trackSequence, direction, height, tileElement); + } + + static void TrackBrakes( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BRAKE + 0), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 1: + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BRAKE + 1), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + } + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void TrackOnRidePhoto( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, IMAGE_TYPE_REMAP | SPR_STATION_BASE_D, 0, 0, 32, 32, 1, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT + 0), 0, 0, 32, 20, + 0, height, 0, 6, height + 3); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, IMAGE_TYPE_REMAP | SPR_STATION_BASE_D, 0, 0, 32, 32, 1, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT + 1), 0, 0, 32, 20, + 0, height, 0, 6, height + 3); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, IMAGE_TYPE_REMAP | SPR_STATION_BASE_D, 0, 0, 32, 32, 1, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT + 0), 0, 0, 32, 20, + 0, height, 0, 6, height + 3); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, IMAGE_TYPE_REMAP | SPR_STATION_BASE_D, 0, 0, 32, 32, 1, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT + 1), 0, 0, 32, 20, + 0, height, 0, 6, height + 3); + break; + } + track_paint_util_onride_photo_paint(session, direction, height + 3, tileElement); + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + } + + static void TrackFlatTo60DegUpLongBase( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 0), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 4), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 8), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 12), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 1), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 5), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 9), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 13), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 9, height, session->TrackColours[SCHEME_SUPPORTS]); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 2), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 6), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 10), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 14), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 10, height, session->TrackColours[SCHEME_SUPPORTS]); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 3), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 7), 0, 0, 32, 1, 98, + height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 11), 0, 0, 32, 1, + 98, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 15), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 19, height, session->TrackColours[SCHEME_SUPPORTS]); + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height + 24, TUNNEL_2); + break; + case 2: + paint_util_push_tunnel_left(session, height + 24, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 80, 0x20); + break; + } + } + static void Track60DegUpToFlatLongBase( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 16), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 20), 0, 0, 32, 1, + 98, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 24), 0, 0, 32, 1, + 98, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 28), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 24, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 80, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 17), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 21), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 25), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 29), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 18, height, session->TrackColours[SCHEME_SUPPORTS]); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 80, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 18), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 22), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 26), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 30), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 13, height, session->TrackColours[SCHEME_SUPPORTS]); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 19), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 23), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 27), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP + 31), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 5, height, session->TrackColours[SCHEME_SUPPORTS]); + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 2: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + break; + } + } + + static void TrackFlatTo60DegDownLongBase( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track60DegUpToFlatLongBase(session, rideIndex, 3 - trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track60DegDownToFlatLongBase( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackFlatTo60DegUpLongBase(session, rideIndex, 3 - trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackBlockBrakes( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BLOCK_BRAKE + 0), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + case 1: + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_BLOCK_BRAKE + 1), 0, 0, + 32, 20, 3, height, 0, 6, height); + break; + } + if (track_paint_util_should_paint_supports(session->MapPosition)) + { + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); + } + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void TrackLeftCorkscrewUp( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 0), + 0, 0, 32, 20, 3, height, 0, 6, height + 4); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 3), + 0, 0, 32, 20, 3, height, 0, 6, height + 4); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 6), + 0, 0, 32, 20, 3, height, 0, 6, height + 4); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 9), + 0, 0, 32, 20, 3, height, 0, 6, height + 4); + break; + } + + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 2, height, session->TrackColours[SCHEME_SUPPORTS]); + + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 1), + 0, 0, 20, 20, 3, height, 6, 6, height + 10); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 4), + 0, 0, 20, 20, 3, height, 6, 6, height + 10); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 7), + 0, 0, 20, 20, 3, height, 6, 6, height + 10); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 10), + 0, 0, 20, 20, 3, height, 6, 6, height + 10); + break; + } + paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 2), + 0, 0, 20, 32, 3, height, 6, 0, height + 24); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 5), + 0, 0, 20, 32, 3, height, 6, 0, height + 24); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 8), + 0, 0, 20, 32, 3, height, 6, 0, height + 24); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 11), + 0, 0, 20, 32, 3, height, 6, 0, height + 24); + break; + } + + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height + 33, session->TrackColours[SCHEME_SUPPORTS]); + + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_0); + break; + } + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackRightCorkscrewUp( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 12), + 0, 0, 32, 20, 3, height, 0, 6, height + 4); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 15), + 0, 0, 32, 20, 3, height, 0, 6, height + 4); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 18), + 0, 0, 32, 20, 3, height, 0, 6, height + 4); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 21), + 0, 0, 32, 20, 3, height, 0, 6, height + 4); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 2, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 13), + 0, 0, 20, 20, 3, height, 6, 6, height + 10); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 16), + 0, 0, 20, 20, 3, height, 6, 6, height + 10); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 19), + 0, 0, 20, 20, 3, height, 6, 6, height + 10); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 22), + 0, 0, 20, 20, 3, height, 6, 6, height + 10); + break; + } + paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 14), + 0, 0, 20, 32, 3, height, 6, 0, height + 24); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 17), + 0, 0, 20, 32, 3, height, 6, 0, height + 24); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 20), + 0, 0, 20, 32, 3, height, 6, 0, height + 24); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW + 23), + 0, 0, 20, 32, 3, height, 6, 0, height + 24); + break; + } + + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height + 33, session->TrackColours[SCHEME_SUPPORTS]); + + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_0); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_0); + break; + } + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackLeftCorkscrewDown( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackRightCorkscrewUp(session, rideIndex, 2 - trackSequence, (direction + 1) & 3, height, tileElement); + } + + static void TrackRightCorkscrewDown( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackLeftCorkscrewUp(session, rideIndex, 2 - trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void Track90DegToInvertedFlatQuarterLoopUp( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_QUARTER_LOOP + 0), 0, 0, 2, 20, 31, + height, 4, 6, height + 8); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_QUARTER_LOOP + 3), 0, 0, 2, 20, 31, + height, 24, 6, height + 8); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_QUARTER_LOOP + 6), 0, 0, 2, 20, 31, + height, 24, 6, height + 8); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_QUARTER_LOOP + 9), 0, 0, 2, 20, 31, + height, 4, 6, height + 8); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 88, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_QUARTER_LOOP + 1), 0, 0, 2, 20, 31, + height, -8, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_QUARTER_LOOP + 4), 0, 0, 2, 20, 63, + height, 24, 6, height + 8); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_QUARTER_LOOP + 7), 0, 0, 2, 20, 63, + height, 24, 6, height + 8); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_QUARTER_LOOP + 10), 0, 0, 2, 20, 31, + height, -8, 6, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_QUARTER_LOOP + 2), 0, 0, 32, 20, 3, + height, 0, 6, height + 24); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_QUARTER_LOOP + 5), 0, 0, 2, 20, 31, + height, 24, 6, height + 8); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_QUARTER_LOOP + 8), 0, 0, 2, 20, 31, + height, 24, 6, height + 8); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_QUARTER_LOOP + 11), 0, 0, 32, 20, 3, + height, 0, 6, height + 24); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 16, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + } + } + + static void TrackInvertedFlatTo90DegQuarterLoopDown( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track90DegToInvertedFlatQuarterLoopUp(session, rideIndex, 2 - trackSequence, direction, height, tileElement); + } + + static void TrackLeftBankToLeftQuarterTurn3Tile25DegUp( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 0), 0, 6, 32, + 20, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 2), 0, 6, 32, + 20, 3, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 3), 0, 6, 32, + 1, 26, height, 0, 27, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 5), 0, 6, 32, + 20, 3, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 7), 0, 6, 32, + 20, 3, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 1), 6, 0, 20, + 32, 3, height, 0, 6, height - 6); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 4), 6, 0, 20, + 32, 3, height, 0, 6, height - 6); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 6), 6, 0, 20, + 32, 3, height, 0, 6, height - 6); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 8), 6, 0, 20, + 32, 3, height, 0, 6, height - 6); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height - 6, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_2); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + } + } + + static void TrackRightBankToRightQuarterTurn3Tile25DegUp( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 9), 0, 6, 32, + 20, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 11), 0, 6, + 32, 20, 3, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 13), 0, 6, + 32, 20, 3, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 14), 0, 6, + 32, 1, 26, height, 0, 27, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 16), 0, 6, + 32, 20, 3, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 10), 6, 0, + 20, 32, 3, height, 0, 6, height - 6); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 12), 6, 0, + 20, 32, 3, height, 0, 6, height - 6); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 15), 6, 0, + 20, 32, 3, height, 0, 6, height - 6); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 17), 6, 0, + 20, 32, 3, height, 0, 6, height - 6); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height - 6, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height, TUNNEL_2); + break; + case 1: + paint_util_push_tunnel_left(session, height, TUNNEL_2); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + } + } + + static void TrackLeftQuarterTurn3Tile25DegDownToLeftBank( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 12), 0, 6, + 32, 20, 3, height, 0, 6, height - 6); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 15), 0, 6, + 32, 20, 3, height, 0, 6, height - 6); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 17), 0, 6, + 32, 20, 3, height, 0, 6, height - 6); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 10), 0, 6, + 32, 20, 3, height, 0, 6, height - 6); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height - 6, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 11), 6, 0, + 20, 32, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 13), 6, 0, + 20, 32, 3, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 14), 6, 0, 1, + 32, 26, height, 27, 0, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 16), 6, 0, + 20, 32, 3, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 9), 6, 0, 20, + 32, 3, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + } + } + + static void TrackRightQuarterTurn3Tile25DegDownToRightBank( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 8), 0, 6, 32, + 20, 3, height, 0, 6, height - 6); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 1), 0, 6, 32, + 20, 3, height, 0, 6, height - 6); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 4), 0, 6, 32, + 20, 3, height, 0, 6, height - 6); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 6), 0, 6, 32, + 20, 3, height, 0, 6, height - 6); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height - 6, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 1: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 7), 6, 0, 20, + 32, 3, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 0), 6, 0, 20, + 32, 3, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 2), 6, 0, 20, + 32, 3, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 3), 6, 0, 1, + 32, 26, height, 27, 0, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION + 5), 6, 0, 20, + 32, 3, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height, TUNNEL_0); + break; + case 1: + paint_util_push_tunnel_left(session, height, TUNNEL_0); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + } + } + + static void TrackLeftLargeHalfLoopUp( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 0), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 7), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 14), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 21), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 1), 0, 0, 32, 20, + 3, height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 15, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 8), 0, 0, 32, 20, + 9, height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 9, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 15), 0, 0, 32, 20, + 3, height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 9, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 22), 0, 0, 32, 20, + 3, height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 2), 0, 0, 32, 16, + 3, height, 0, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 9), 0, 0, 32, 16, + 0, height, 0, 0, height + 70); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 16), 0, 0, 32, 16, + 0, height, 0, 16, height + 70); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 23), 0, 0, 32, 16, + 3, height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 88, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 3), 0, 0, 32, 16, + 3, height, 0, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 28, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 10), 0, 0, 32, 16, + 0, height, 0, 0, height + 200); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 28, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 17), 0, 0, 32, 16, + 0, height, 0, 16, height + 200); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 0, height + 28, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 24), 0, 0, 32, 16, + 3, height, 0, 16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 28, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 224, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 4), 0, 0, 16, 16, + 3, height, 16, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 11), 0, 0, 16, 16, + 0, height, 0, 16, height + 110); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 18), 0, 0, 16, 16, + 0, height, 0, 0, height + 100); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 25), 0, 0, 16, 16, + 3, height, 16, 0, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 128, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 5), 0, 0, 32, 16, + 3, height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 12), 0, 0, 32, 16, + 0, height, 0, 16, height + 200); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 19), 0, 0, 32, 16, + 0, height, 0, 0, height + 200); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 26), 0, 0, 32, 16, + 3, height, 0, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 224, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 6), 0, 0, 32, 16, + 0, height, 0, 16, height + 32); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 13), 0, 0, 32, 16, + 0, height, 0, 16, height + 32); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 20), 0, 0, 32, 16, + 0, height, 0, 0, height + 32); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 27), 0, 0, 32, 16, + 0, height, 0, 0, height + 32); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + break; + } + } + + static void TrackRightLargeHalfLoopUp( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 28), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 35), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 42), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 49), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + } + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 29), 0, 0, 32, 20, + 3, height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 36), 0, 0, 32, 20, + 3, height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 9, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 43), 0, 0, 32, 20, + 9, height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 9, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 50), 0, 0, 32, 20, + 3, height, 0, 6, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 15, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 30), 0, 0, 32, 16, + 3, height, 0, 16, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 37), 0, 0, 32, 16, + 0, height, 0, 16, height + 70); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 44), 0, 0, 32, 16, + 0, height, 0, 0, height + 70); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 51), 0, 0, 32, 16, + 3, height, 0, 0, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 88, 0x20); + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 31), 0, 0, 32, 16, + 3, height, 0, 16, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 8, 28, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 38), 0, 0, 32, 16, + 0, height, 0, 16, height + 200); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 7, 0, height + 28, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 45), 0, 0, 32, 16, + 0, height, 0, 0, height + 200); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 5, 28, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 52), 0, 0, 32, 16, + 3, height, 0, 0, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 6, 28, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 224, 0x20); + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 32), 0, 0, 16, 16, + 3, height, 16, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 39), 0, 0, 16, 16, + 0, height, 0, 0, height + 100); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 46), 0, 0, 16, 16, + 0, height, 0, 16, height + 110); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 53), 0, 0, 16, 16, + 3, height, 16, 16, height); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 128, 0x20); + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 33), 0, 0, 32, 16, + 3, height, 0, 0, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 40), 0, 0, 32, 16, + 0, height, 0, 0, height + 200); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 47), 0, 0, 32, 16, + 0, height, 0, 16, height + 200); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 54), 0, 0, 32, 16, + 3, height, 0, 16, height); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 224, 0x20); + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 34), 0, 0, 32, 16, + 0, height, 0, 0, height + 32); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 41), 0, 0, 32, 16, + 0, height, 0, 0, height + 32); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 48), 0, 0, 32, 16, + 0, height, 0, 16, height + 32); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP + 55), 0, 0, 32, 16, + 0, height, 0, 16, height + 32); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + break; + } + } + + static void TrackRightLargeHalfLoopDown( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackRightLargeHalfLoopUp(session, rideIndex, 6 - trackSequence, direction, height, tileElement); + } + + static void TrackLeftLargeHalfLoopDown( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackLeftLargeHalfLoopUp(session, rideIndex, 6 - trackSequence, direction, height, tileElement); + } + + static void TrackFlatTo60DegUp( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 0), 0, 0, 32, + 27, 4, height, 0, 2, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 2), 0, 0, 1, + 24, 43, height, 29, 4, height + 2); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 1), 0, 0, 32, + 2, 43, height, 0, 4, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height + 4, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 4), 0, 0, 1, + 24, 43, height, 29, 4, height + 2); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 3), 0, 0, 32, + 2, 43, height, 0, 4, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height + 4, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 5), 0, 0, 32, + 27, 4, height, 0, 2, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 0), 0, 0, 32, 27, + 4, height, 0, 2, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 2), 0, 0, 1, 24, + 43, height, 29, 4, height + 2); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 1), 0, 0, 32, 2, + 43, height, 0, 4, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height + 4, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 4), 0, 0, 1, 24, + 43, height, 29, 4, height + 2); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 3), 0, 0, 32, 2, + 43, height, 0, 4, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 0, height + 4, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 5), 0, 0, 32, 27, + 4, height, 0, 2, height); + metal_a_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 24, TUNNEL_2); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + } + + static void Track60DegUpToFlat( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 6), 0, 0, 32, + 27, 4, height, 0, 2, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 7), 0, 0, 1, + 24, 43, height, 29, 4, height + 2); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 8), 0, 0, 32, + 2, 43, height, 0, 4, height); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 10), 0, 0, 1, + 24, 43, height, 29, 4, height + 2); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 9), 0, 0, 32, + 2, 43, height, 0, 4, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 11), 0, 0, + 32, 27, 4, height, 0, 2, height); + break; + } + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 6), 0, 0, 32, 27, + 4, height, 0, 2, height); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 7), 0, 0, 32, 2, + 43, height, 0, 4, height); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 8), 0, 0, 1, 24, + 43, height, 29, 4, height + 2); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 10), 0, 0, 1, 24, + 43, height, 29, 4, height + 2); + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 9), 0, 0, 32, 2, + 43, height, 0, 4, height); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 11), 0, 0, 32, 27, + 4, height, 0, 2, height); + break; + } + metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 24, TUNNEL_0); + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + } + + static void TrackFlatTo60DegDown( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + Track60DegUpToFlat(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void Track60DegDownToFlat( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackFlatTo60DegUp(session, rideIndex, trackSequence, (direction + 2) & 3, height, tileElement); + } + + static void TrackDiagFlatTo60DegUp( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 15), + -16, -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 15), -16, + -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 12), + -16, -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 12), -16, + -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 14), + -16, -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 14), -16, + -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 13), + -16, -16, 32, 32, 4, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 13), -16, + -16, 32, 32, 4, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 7, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + } + } + + static void TrackDiag60DegUpToFlat( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 19), + -16, -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 19), -16, + -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 16), + -16, -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 16), -16, + -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 18), + -16, -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 18), -16, + -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 20, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 17), + -16, -16, 32, 32, 4, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 20, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 20, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 20, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 20, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 17), -16, + -16, 32, 32, 4, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 20, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 20, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 20, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackDiagFlatTo60DegDown( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 17), + -16, -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 17), -16, + -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 18), + -16, -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 18), -16, + -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 16), + -16, -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 16), -16, + -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 19), + -16, -16, 32, 32, 4, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 19), -16, + -16, 32, 32, 4, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 16, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackDiag60DegDownToFlat( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (trackSequence) + { + case 0: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 13), + -16, -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 13), -16, + -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 14), + -16, -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 14), -16, + -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 12), + -16, -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 12), -16, + -16, 32, 32, 4, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 5, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP + 15), + -16, -16, 32, 32, 4, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 5, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 5, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 5, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + else + { + switch (direction) + { + case 0: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 1, 5, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, + session->TrackColours[SCHEME_TRACK] | (SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP + 15), -16, + -16, 32, 32, 4, height, -16, -16, height); + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 0, 5, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 2: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 2, 5, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + case 3: + metal_b_supports_paint_setup( + session, METAL_SUPPORTS_TUBES, 3, 5, height, session->TrackColours[SCHEME_SUPPORTS]); + break; + } + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + } + } + + TRACK_PAINT_FUNCTION GetTrackPaintFunction(int32_t trackType) + { + switch (trackType) + { + case TrackElemType::Flat: + return TrackFlat; + case TrackElemType::EndStation: + case TrackElemType::BeginStation: + case TrackElemType::MiddleStation: + return TrackStation; + case TrackElemType::Up25: + return Track25DegUp; + case TrackElemType::Up60: + return Track60DegUp; + case TrackElemType::FlatToUp25: + return TrackFlatTo25DegUp; + case TrackElemType::Up25ToUp60: + return Track25DegUpTo60DegUp; + case TrackElemType::Up60ToUp25: + return Track60DegUpTo25DegUp; + case TrackElemType::Up25ToFlat: + return Track25DegUpToFlat; + case TrackElemType::Down25: + return Track25DegDown; + case TrackElemType::Down60: + return Track60DegDown; + case TrackElemType::FlatToDown25: + return TrackFlatTo25DegDown; + case TrackElemType::Down25ToDown60: + return Track25DegDownTo60DegDown; + case TrackElemType::Down60ToDown25: + return Track60DegDownTo25DegDown; + case TrackElemType::Down25ToFlat: + return Track25DegDownToFlat; + case TrackElemType::Up90: + return Track90DegUp; + case TrackElemType::Down90: + return Track90DegDown; + case TrackElemType::Up60ToUp90: + return Track60DegUpTo90DegUp; + case TrackElemType::Down90ToDown60: + return Track90DegDownTo60DegDown; + case TrackElemType::Up90ToUp60: + return Track90DegUpTo60DegUp; + case TrackElemType::Down60ToDown90: + return Track60DegDownTo90DegDown; + case TrackElemType::LeftQuarterTurn5Tiles: + return TrackLeftQuarterTurn5; + case TrackElemType::RightQuarterTurn5Tiles: + return TrackRightQuarterTurn5; + case TrackElemType::FlatToLeftBank: + return TrackFlatToLeftBank; + case TrackElemType::FlatToRightBank: + return TrackFlatToRightBank; + case TrackElemType::LeftBankToFlat: + return TrackLeftBankToFlat; + case TrackElemType::RightBankToFlat: + return TrackRightBankToFlat; + case TrackElemType::BankedLeftQuarterTurn5Tiles: + return TrackBankedLeftQuarterTurn5; + case TrackElemType::BankedRightQuarterTurn5Tiles: + return TrackBankedRightQuarterTurn5; + case TrackElemType::LeftBankToUp25: + return TrackLeftBankTo25DegUp; + case TrackElemType::RightBankToUp25: + return TrackRightBankTo25DegUp; + case TrackElemType::Up25ToLeftBank: + return Track25DegUpToLeftBank; + case TrackElemType::Up25ToRightBank: + return Track25DegUpToRightBank; + case TrackElemType::LeftBankToDown25: + return TrackLeftBankTo25DegDown; + case TrackElemType::RightBankToDown25: + return TrackRightBankTo25DegDown; + case TrackElemType::Down25ToLeftBank: + return Track25DegDownToLeftBank; + case TrackElemType::Down25ToRightBank: + return Track25DegDownToRightBank; + case TrackElemType::LeftBank: + return TrackLeftBank; + case TrackElemType::RightBank: + return TrackRightBank; + case TrackElemType::LeftQuarterTurn5TilesUp25: + return TrackLeftQuarterTurn525DegUp; + case TrackElemType::RightQuarterTurn5TilesUp25: + return TrackRightQuarterTurn525DegUp; + case TrackElemType::LeftQuarterTurn5TilesDown25: + return TrackLeftQuarterTurn525DegDown; + case TrackElemType::RightQuarterTurn5TilesDown25: + return TrackRightQuarterTurn525DegDown; + case TrackElemType::SBendLeft: + return TrackSBendLeft; + case TrackElemType::SBendRight: + return TrackSBendRight; + case TrackElemType::LeftQuarterTurn3Tiles: + return TrackLeftQuarterTurn3; + case TrackElemType::RightQuarterTurn3Tiles: + return TrackRightQuarterTurn3; + case TrackElemType::LeftBankedQuarterTurn3Tiles: + return TrackLeftQuarterTurn3Bank; + case TrackElemType::RightBankedQuarterTurn3Tiles: + return TrackRightQuarterTurn3Bank; + case TrackElemType::LeftQuarterTurn3TilesUp25: + return TrackLeftQuarterTurn3Tile25DegUp; + case TrackElemType::RightQuarterTurn3TilesUp25: + return TrackRightQuarterTurn3Tile25DegUp; + case TrackElemType::LeftQuarterTurn3TilesDown25: + return TrackLeftQuarterTurn3Tile25DegDown; + case TrackElemType::RightQuarterTurn3TilesDown25: + return TrackRightQuarterTurn3Tile25DegDown; + case TrackElemType::LeftHalfBankedHelixUpSmall: + return TrackLeftHalfBankedHelixUpSmall; + case TrackElemType::RightHalfBankedHelixUpSmall: + return TrackRightHalfBankedHelixUpSmall; + case TrackElemType::LeftHalfBankedHelixDownSmall: + return TrackLeftHalfBankedHelixDownSmall; + case TrackElemType::RightHalfBankedHelixDownSmall: + return TrackRightHalfBankedHelixDownSmall; + case TrackElemType::LeftHalfBankedHelixUpLarge: + return TrackLeftHalfBankedHelixUpLarge; + case TrackElemType::RightHalfBankedHelixUpLarge: + return TrackRightHalfBankedHelixUpLarge; + case TrackElemType::LeftHalfBankedHelixDownLarge: + return TrackLeftHalfBankedHelixDownLarge; + case TrackElemType::RightHalfBankedHelixDownLarge: + return TrackRightHalfBankedHelixDownLarge; + case TrackElemType::LeftQuarterTurn1TileUp60: + return TrackLeftQuarterTurn160DegUp; + case TrackElemType::RightQuarterTurn1TileUp60: + return TrackRightQuarterTurn160DegUp; + case TrackElemType::LeftQuarterTurn1TileDown60: + return TrackLeftQuarterTurn160DegDown; + case TrackElemType::RightQuarterTurn1TileDown60: + return TrackRightQuarterTurn160DegDown; + case TrackElemType::Brakes: + return TrackBrakes; + case TrackElemType::Up25LeftBanked: + return Track25DegUpLeftBanked; + case TrackElemType::Up25RightBanked: + return Track25DegUpRightBanked; + case TrackElemType::OnRidePhoto: + return TrackOnRidePhoto; + case TrackElemType::Down25LeftBanked: + return Track25DegDownLeftBanked; + case TrackElemType::Down25RightBanked: + return Track25DegDownRightBanked; + case TrackElemType::FlatToUp60LongBase: + return TrackFlatTo60DegUpLongBase; + case TrackElemType::Up60ToFlatLongBase: + return Track60DegUpToFlatLongBase; + case TrackElemType::FlatToDown60LongBase: + return TrackFlatTo60DegDownLongBase; + case TrackElemType::Down60ToFlatLongBase: + return Track60DegDownToFlatLongBase; + case TrackElemType::LeftEighthToDiag: + return TrackLeftEighthToDiag; + case TrackElemType::RightEighthToDiag: + return TrackRightEighthToDiag; + case TrackElemType::LeftEighthToOrthogonal: + return TrackLeftEighthToOrthogonal; + case TrackElemType::RightEighthToOrthogonal: + return TrackRightEighthToOrthogonal; + case TrackElemType::LeftEighthBankToDiag: + return TrackLeftEighthBankToDiag; + case TrackElemType::RightEighthBankToDiag: + return TrackRightEighthBankToDiag; + case TrackElemType::LeftEighthBankToOrthogonal: + return TrackLeftEighthBankToOrthogonal; + case TrackElemType::RightEighthBankToOrthogonal: + return TrackRightEighthBankToOrthogonal; + case TrackElemType::DiagFlat: + return TrackDiagFlat; + case TrackElemType::DiagUp25: + return TrackDiag25DegUp; + case TrackElemType::DiagUp60: + return TrackDiag60DegUp; + case TrackElemType::DiagFlatToUp25: + return TrackDiagFlatTo25DegUp; + case TrackElemType::DiagUp25ToUp60: + return TrackDiag25DegUpTo60DegUp; + case TrackElemType::DiagUp60ToUp25: + return TrackDiag60DegUpTo25DegUp; + case TrackElemType::DiagUp25ToFlat: + return TrackDiag25DegUpToFlat; + case TrackElemType::DiagDown25: + return TrackDiag25DegDown; + case TrackElemType::DiagDown60: + return TrackDiag60DegDown; + case TrackElemType::DiagFlatToDown25: + return TrackDiagFlatTo25DegDown; + case TrackElemType::DiagDown25ToDown60: + return TrackDiag25DegDownTo60DegDown; + case TrackElemType::DiagDown60ToDown25: + return TrackDiag60DegDownTo25DegDown; + case TrackElemType::DiagDown25ToFlat: + return TrackDiag25DegDownToFlat; + case TrackElemType::DiagFlatToLeftBank: + return TrackDiagFlatToLeftBank; + case TrackElemType::DiagFlatToRightBank: + return TrackDiagFlatToRightBank; + case TrackElemType::DiagLeftBankToFlat: + return TrackDiagLeftBankToFlat; + case TrackElemType::DiagRightBankToFlat: + return TrackDiagRightBankToFlat; + case TrackElemType::DiagLeftBankToUp25: + return TrackDiagLeftBankTo25DegUp; + case TrackElemType::DiagRightBankToUp25: + return TrackDiagRightBankTo25DegUp; + case TrackElemType::DiagUp25ToLeftBank: + return TrackDiag25DegUpToLeftBank; + case TrackElemType::DiagUp25ToRightBank: + return TrackDiag25DegUpToRightBank; + case TrackElemType::DiagLeftBankToDown25: + return TrackDiagLeftBankTo25DegDown; + case TrackElemType::DiagRightBankToDown25: + return TrackDiagRightBankTo25DegDown; + case TrackElemType::DiagDown25ToLeftBank: + return TrackDiag25DegDownToLeftBank; + case TrackElemType::DiagDown25ToRightBank: + return TrackDiag25DegDownToRightBank; + case TrackElemType::DiagLeftBank: + return TrackDiagLeftBank; + case TrackElemType::DiagRightBank: + return TrackDiagRightBank; + case TrackElemType::BlockBrakes: + return TrackBlockBrakes; + case TrackElemType::LeftBankedQuarterTurn3TileUp25: + return TrackLeftBankedQuarterTurn3Tile25DegUp; + case TrackElemType::RightBankedQuarterTurn3TileUp25: + return TrackRightBankedQuarterTurn3Tile25DegUp; + case TrackElemType::LeftBankedQuarterTurn3TileDown25: + return TrackLeftBankedQuarterTurn3Tile25DegDown; + case TrackElemType::RightBankedQuarterTurn3TileDown25: + return TrackRightBankedQuarterTurn3Tile25DegDown; + case TrackElemType::LeftBankedQuarterTurn5TileUp25: + return TrackLeftBankedQuarterTurn525DegUp; + case TrackElemType::RightBankedQuarterTurn5TileUp25: + return TrackRightBankedQuarterTurn525DegUp; + case TrackElemType::LeftBankedQuarterTurn5TileDown25: + return TrackLeftBankedQuarterTurn525DegDown; + case TrackElemType::RightBankedQuarterTurn5TileDown25: + return TrackRightBankedQuarterTurn525DegDown; + case TrackElemType::Up25ToLeftBankedUp25: + return Track25DegUpToLeftBanked25DegUp; + case TrackElemType::Up25ToRightBankedUp25: + return Track25DegUpToRightBanked25DegUp; + case TrackElemType::LeftBankedUp25ToUp25: + return TrackLeftBanked25DegUpTo25DegUp; + case TrackElemType::RightBankedUp25ToUp25: + return TrackRightBanked25DegUpTo25DegUp; + case TrackElemType::Down25ToLeftBankedDown25: + return Track25DegDownToLeftBanked25DegDown; + case TrackElemType::Down25ToRightBankedDown25: + return Track25DegDownToRightBanked25DegDown; + case TrackElemType::LeftBankedDown25ToDown25: + return TrackLeftBanked25DegDownTo25DegDown; + case TrackElemType::RightBankedDown25ToDown25: + return TrackRightBanked25DegDownTo25DegDown; + case TrackElemType::LeftBankedFlatToLeftBankedUp25: + return TrackLeftBankedFlatToLeftBanked25DegUp; + case TrackElemType::RightBankedFlatToRightBankedUp25: + return TrackRightBankedFlatToRightBanked25DegUp; + case TrackElemType::LeftBankedUp25ToLeftBankedFlat: + return TrackLeftBanked25DegUpToLeftBankedFlat; + case TrackElemType::RightBankedUp25ToRightBankedFlat: + return TrackRightBanked25DegUpToRightBankedFlat; + case TrackElemType::LeftBankedFlatToLeftBankedDown25: + return TrackLeftBankedFlatToLeftBanked25DegDown; + case TrackElemType::RightBankedFlatToRightBankedDown25: + return TrackRightBankedFlatToRightBanked25DegDown; + case TrackElemType::LeftBankedDown25ToLeftBankedFlat: + return TrackLeftBanked25DegDownToLeftBankedFlat; + case TrackElemType::RightBankedDown25ToRightBankedFlat: + return TrackRightBanked25DegDownToRightBankedFlat; + case TrackElemType::FlatToLeftBankedUp25: + return TrackFlatToLeftBanked25DegUp; + case TrackElemType::FlatToRightBankedUp25: + return TrackFlatToRightBanked25DegUp; + case TrackElemType::LeftBankedUp25ToFlat: + return TrackLeftBanked25DegUpToFlat; + case TrackElemType::RightBankedUp25ToFlat: + return TrackRightBanked25DegUpToFlat; + case TrackElemType::FlatToLeftBankedDown25: + return TrackFlatToLeftBanked25DegDown; + case TrackElemType::FlatToRightBankedDown25: + return TrackFlatToRightBanked25DegDown; + case TrackElemType::LeftBankedDown25ToFlat: + return TrackLeftBanked25DegDownToFlat; + case TrackElemType::RightBankedDown25ToFlat: + return TrackRightBanked25DegDownToFlat; + case TrackElemType::LeftQuarterTurn1TileUp90: + return TrackLeftQuarterTurn190DegUp; + case TrackElemType::RightQuarterTurn1TileUp90: + return TrackRightQuarterTurn190DegUp; + case TrackElemType::LeftQuarterTurn1TileDown90: + return TrackLeftQuarterTurn190DegDown; + case TrackElemType::RightQuarterTurn1TileDown90: + return TrackRightQuarterTurn190DegDown; + case TrackElemType::LeftBarrelRollUpToDown: + return TrackLeftBarrelRollUpToDown; + case TrackElemType::RightBarrelRollUpToDown: + return TrackRightBarrelRollUpToDown; + case TrackElemType::LeftBarrelRollDownToUp: + return TrackLeftBarrelRollDownToUp; + case TrackElemType::RightBarrelRollDownToUp: + return TrackRightBarrelRollDownToUp; + case TrackElemType::HalfLoopUp: + return TrackHalfLoopUp; + case TrackElemType::HalfLoopDown: + return TrackHalfLoopDown; + case TrackElemType::LeftCorkscrewUp: + return TrackLeftCorkscrewUp; + case TrackElemType::RightCorkscrewUp: + return TrackRightCorkscrewUp; + case TrackElemType::LeftCorkscrewDown: + return TrackLeftCorkscrewDown; + case TrackElemType::RightCorkscrewDown: + return TrackRightCorkscrewDown; + case TrackElemType::Up90ToInvertedFlatQuarterLoop: + return Track90DegToInvertedFlatQuarterLoopUp; + case TrackElemType::InvertedFlatToDown90QuarterLoop: + return TrackInvertedFlatTo90DegQuarterLoopDown; + case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25: + return TrackLeftBankToLeftQuarterTurn3Tile25DegUp; + case TrackElemType::RightBankToRightQuarterTurn3TilesUp25: + return TrackRightBankToRightQuarterTurn3Tile25DegUp; + case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank: + return TrackLeftQuarterTurn3Tile25DegDownToLeftBank; + case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank: + return TrackRightQuarterTurn3Tile25DegDownToRightBank; + case TrackElemType::LeftLargeHalfLoopUp: + return TrackLeftLargeHalfLoopUp; + case TrackElemType::RightLargeHalfLoopUp: + return TrackRightLargeHalfLoopUp; + case TrackElemType::RightLargeHalfLoopDown: + return TrackRightLargeHalfLoopDown; + case TrackElemType::LeftLargeHalfLoopDown: + return TrackLeftLargeHalfLoopDown; + case TrackElemType::FlatToUp60: + return TrackFlatTo60DegUp; + case TrackElemType::Up60ToFlat: + return Track60DegUpToFlat; + case TrackElemType::FlatToDown60: + return TrackFlatTo60DegDown; + case TrackElemType::Down60ToFlat: + return Track60DegDownToFlat; + case TrackElemType::DiagFlatToUp60: + return TrackDiagFlatTo60DegUp; + case TrackElemType::DiagUp60ToFlat: + return TrackDiag60DegUpToFlat; + case TrackElemType::DiagFlatToDown60: + return TrackDiagFlatTo60DegDown; + case TrackElemType::DiagDown60ToFlat: + return TrackDiag60DegDownToFlat; + } + return nullptr; + } + +} // namespace SingleRailRC diff --git a/src/openrct2/ride/coaster/meta/SingleRailRollerCoaster.h b/src/openrct2/ride/coaster/meta/SingleRailRollerCoaster.h new file mode 100644 index 0000000000..cd21cd9032 --- /dev/null +++ b/src/openrct2/ride/coaster/meta/SingleRailRollerCoaster.h @@ -0,0 +1,54 @@ +/***************************************************************************** + * Copyright (c) 2014-2020 OpenRCT2 developers + * + * For a complete list of all authors, please refer to contributors.md + * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is licensed under the GNU General Public License version 3. + *****************************************************************************/ + +#pragma once + +#include "../../RideData.h" +#include "../../Track.h" + +// clang-format off +constexpr const RideTypeDescriptor SingleRailRollerCoasterRTD = +{ + SET_FIELD(AlternateType, RIDE_TYPE_NULL), + SET_FIELD(Category, RIDE_CATEGORY_ROLLERCOASTER), + SET_FIELD(EnabledTrackPieces, (1ULL << TRACK_FLAT) | (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_LIFT_HILL_STEEP) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_SLOPE) |(1ULL << TRACK_SLOPE_LONG) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_SLOPE_CURVE_STEEP) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_CORKSCREW) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_SLOPE_VERTICAL) | (1ULL << TRACK_BARREL_ROLL) | (1ULL << TRACK_SLOPE_CURVE_BANKED) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_SLOPE_ROLL_BANKING) | (1ULL << TRACK_CURVE_VERTICAL) | (1ULL << TRACK_QUARTER_LOOP)| (1ULL << TRACK_HALF_LOOP)), + SET_FIELD(ExtraTrackPieces, (1ULL << TRACK_SLOPE_STEEP_LONG) | (1ULL << TRACK_HALF_LOOP_LARGE)), + SET_FIELD(CoveredTrackPieces, 0), + SET_FIELD(StartTrackPiece, TrackElemType::EndStation), + SET_FIELD(TrackPaintFunction, SingleRailRC::GetTrackPaintFunction), + SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_SUPPORTS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION | + RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES | + RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS), + SET_FIELD(RideModes, EnumsToFlags(RideMode::ContinuousCircuit, RideMode::ContinuousCircuitBlockSectioned)), + SET_FIELD(DefaultMode, RideMode::ContinuousCircuit), + SET_FIELD(OperatingSettings, { 0, 0, 30, 15, 52, 0 }), + SET_FIELD(Naming, { STR_RIDE_NAME_SINGLE_RAIL_ROLLER_COASTER, STR_RIDE_DESCRIPTION_SINGLE_RAIL_ROLLER_COASTER }), + SET_FIELD(NameConvention, { RideComponentType::Train, RideComponentType::Track, RideComponentType::Station }), + SET_FIELD(EnumName, nameof(RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER)), + SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)), + SET_FIELD(Heights, { 28, 24, 5, 7}), + SET_FIELD(MaxMass, 18), + SET_FIELD(LiftData, { OpenRCT2::Audio::SoundId::LiftClassic, 5, 8 }), + SET_FIELD(RatingsCalculationFunction, ride_ratings_calculate_single_rail_roller_coaster), + SET_FIELD(RatingsMultipliers, { 52, 36, 10 }), + SET_FIELD(UpkeepCosts, { 40, 20, 80, 10, 3, 10 }), + SET_FIELD(BuildCosts, { 75, 5, 50}), + SET_FIELD(DefaultPrices, { 20, 20 }), + SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK), + SET_FIELD(PhotoItem, ShopItem::Photo), + SET_FIELD(BonusValue, 80), + SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS( + { COLOUR_LIGHT_ORANGE, COLOUR_LIGHT_ORANGE, COLOUR_WHITE }, + { COLOUR_YELLOW, COLOUR_YELLOW, COLOUR_BLACK }, + { COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE, COLOUR_DARK_GREEN } + )), + SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_SINGLE_RAIL_ROLLER_COASTER_TRACK, SPR_RIDE_DESIGN_PREVIEW_SINGLE_RAIL_ROLLER_COASTER_SUPPORTS }), + SET_FIELD(ColourKey, RideColourKey::Ride), +}; +// clang-format on diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index b8fea28f33..912a2ac043 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1033,7 +1033,55 @@ enum SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL = SPR_G2_HYBRID_LIFT_BEGIN + 48, SPR_G2_HYBRID_END = SPR_G2_HYBRID_LIFT_BEGIN + 60, - SPR_G2_END = SPR_G2_HYBRID_END, + SPR_RIDE_DESIGN_PREVIEW_SINGLE_RAIL_ROLLER_COASTER_TRACK = SPR_G2_HYBRID_END, + SPR_RIDE_DESIGN_PREVIEW_SINGLE_RAIL_ROLLER_COASTER_SUPPORTS = SPR_RIDE_DESIGN_PREVIEW_SINGLE_RAIL_ROLLER_COASTER_TRACK + 1, + SPR_G2_SINGLE_RAIL_BEGIN = SPR_RIDE_DESIGN_PREVIEW_SINGLE_RAIL_ROLLER_COASTER_TRACK + 2, + SPR_G2_SINGLE_RAIL_TRACK_FLAT = SPR_G2_SINGLE_RAIL_BEGIN, + SPR_G2_SINGLE_RAIL_TRACK_BRAKE = SPR_G2_SINGLE_RAIL_BEGIN + 2, + SPR_G2_SINGLE_RAIL_TRACK_BLOCK_BRAKE = SPR_G2_SINGLE_RAIL_BEGIN + 4, + SPR_G2_SINGLE_RAIL_TRACK_GENTLE = SPR_G2_SINGLE_RAIL_BEGIN + 6, + SPR_G2_SINGLE_RAIL_TRACK_STEEP = SPR_G2_SINGLE_RAIL_BEGIN + 18, + SPR_G2_SINGLE_RAIL_TRACK_VERTICAL = SPR_G2_SINGLE_RAIL_BEGIN + 34, + SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE = SPR_G2_SINGLE_RAIL_BEGIN + 46, + SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE = SPR_G2_SINGLE_RAIL_BEGIN + 58, + SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE = SPR_G2_SINGLE_RAIL_BEGIN + 78, + SPR_G2_SINGLE_RAIL_TRACK_FLAT_DIAGONAL = SPR_G2_SINGLE_RAIL_BEGIN + 110, + SPR_G2_SINGLE_RAIL_TRACK_GENTLE_DIAGONAL = SPR_G2_SINGLE_RAIL_BEGIN + 114, + SPR_G2_SINGLE_RAIL_TRACK_STEEP_DIAGONAL = SPR_G2_SINGLE_RAIL_BEGIN + 126, + SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION = SPR_G2_SINGLE_RAIL_BEGIN + 138, + SPR_G2_SINGLE_RAIL_TRACK_BANK_TRANSITION_DIAGONAL = SPR_G2_SINGLE_RAIL_BEGIN + 178, + SPR_G2_SINGLE_RAIL_TRACK_SMALL_CURVE_BANKED = SPR_G2_SINGLE_RAIL_BEGIN + 212, + SPR_G2_SINGLE_RAIL_TRACK_MEDIUM_CURVE_BANKED = SPR_G2_SINGLE_RAIL_BEGIN + 226, + SPR_G2_SINGLE_RAIL_TRACK_LARGE_CURVE_BANKED = SPR_G2_SINGLE_RAIL_BEGIN + 248, + SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE = SPR_G2_SINGLE_RAIL_BEGIN + 280, + SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE = SPR_G2_SINGLE_RAIL_BEGIN + 296, + SPR_G2_SINGLE_RAIL_TRACK_STEEP_SMALL_CURVE = SPR_G2_SINGLE_RAIL_BEGIN + 336, + SPR_G2_SINGLE_RAIL_TRACK_VERTICAL_TWIST = SPR_G2_SINGLE_RAIL_BEGIN + 352, + SPR_G2_SINGLE_RAIL_TRACK_SLOPE_BANK_TRANSITION = SPR_G2_SINGLE_RAIL_BEGIN + 364, + SPR_G2_SINGLE_RAIL_TRACK_GENTLE_SMALL_CURVE_BANKED = SPR_G2_SINGLE_RAIL_BEGIN + 428, + SPR_G2_SINGLE_RAIL_TRACK_GENTLE_MEDIUM_CURVE_BANKED = SPR_G2_SINGLE_RAIL_BEGIN + 444, + SPR_G2_SINGLE_RAIL_TRACK_S_BEND = SPR_G2_SINGLE_RAIL_BEGIN + 484, + SPR_G2_SINGLE_RAIL_TRACK_SMALL_HELIX = SPR_G2_SINGLE_RAIL_BEGIN + 500, + SPR_G2_SINGLE_RAIL_TRACK_LARGE_HELIX = SPR_G2_SINGLE_RAIL_BEGIN + 528, + SPR_G2_SINGLE_RAIL_TRACK_BARREL_ROLL = SPR_G2_SINGLE_RAIL_BEGIN + 572, + SPR_G2_SINGLE_RAIL_TRACK_HALF_LOOP = SPR_G2_SINGLE_RAIL_BEGIN + 620, + SPR_G2_SINGLE_RAIL_TRACK_FLAT_TO_STEEP = SPR_G2_SINGLE_RAIL_BEGIN + 636, + SPR_G2_SINGLE_RAIL_TRACK_QUARTER_LOOP = SPR_G2_SINGLE_RAIL_BEGIN + 668, + SPR_G2_SINGLE_RAIL_TRACK_CORKSCREW = SPR_G2_SINGLE_RAIL_BEGIN + 680, + SPR_G2_SINGLE_RAIL_TRACK_TURN_BANK_TRANSITION = SPR_G2_SINGLE_RAIL_BEGIN + 704, + SPR_G2_SINGLE_RAIL_TRACK_LARGE_HALF_LOOP = SPR_G2_SINGLE_RAIL_BEGIN + 722, + SPR_G2_SINGLE_RAIL_TRACK_SMALL_FLAT_TO_STEEP = SPR_G2_SINGLE_RAIL_BEGIN + 778, + SPR_G2_SINGLE_RAIL_LIFT_BEGIN = SPR_G2_SINGLE_RAIL_BEGIN + 798, + SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT = SPR_G2_SINGLE_RAIL_LIFT_BEGIN, + SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE = SPR_G2_SINGLE_RAIL_LIFT_BEGIN + 4, + SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP = SPR_G2_SINGLE_RAIL_LIFT_BEGIN + 16, + SPR_G2_SINGLE_RAIL_LIFT_TRACK_FLAT_DIAGONAL = SPR_G2_SINGLE_RAIL_LIFT_BEGIN + 32, + SPR_G2_SINGLE_RAIL_LIFT_TRACK_GENTLE_DIAGONAL = SPR_G2_SINGLE_RAIL_LIFT_BEGIN + 36, + SPR_G2_SINGLE_RAIL_LIFT_TRACK_STEEP_DIAGONAL = SPR_G2_SINGLE_RAIL_LIFT_BEGIN + 48, + SPR_G2_SINGLE_RAIL_LIFT_TRACK_SMALL_FLAT_TO_STEEP = SPR_G2_SINGLE_RAIL_LIFT_BEGIN + 60, + SPR_G2_SINGLE_RAIL_END = SPR_G2_SINGLE_RAIL_LIFT_BEGIN + 80, + + SPR_G2_END = SPR_G2_SINGLE_RAIL_END, SPR_CSG_BEGIN = SPR_G2_END, SPR_CSG_END = SPR_CSG_BEGIN + RCT1_NUM_LL_CSG_ENTRIES, diff --git a/test/testpaint/Compat.cpp b/test/testpaint/Compat.cpp index f8f703c729..31e248e6c9 100644 --- a/test/testpaint/Compat.cpp +++ b/test/testpaint/Compat.cpp @@ -861,6 +861,10 @@ void ride_ratings_calculate_hybrid_coaster([[maybe_unused]] Ride* ride) { } +void ride_ratings_calculate_single_rail_roller_coaster([[maybe_unused]] Ride* ride) +{ +} + const RideTypeDescriptor& Ride::GetRideTypeDescriptor() const { return RideTypeDescriptors[type];