diff --git a/OpenRCT2.xcodeproj/project.pbxproj b/OpenRCT2.xcodeproj/project.pbxproj index 78ac7cd2b6..4b47853565 100644 --- a/OpenRCT2.xcodeproj/project.pbxproj +++ b/OpenRCT2.xcodeproj/project.pbxproj @@ -42,6 +42,7 @@ 2ADE2F3622441960002598AF /* RideTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ADE2F352244195F002598AF /* RideTypes.h */; }; 2ADE2F382244198B002598AF /* SpriteBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ADE2F372244198A002598AF /* SpriteBase.h */; }; 304FE95023A2996600470197 /* SceneryScatter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 304FE94F23A2996600470197 /* SceneryScatter.cpp */; }; + 4C1EE63D24AB4A2700D7177F /* HybridCoaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C1EE63C24AB4A2700D7177F /* HybridCoaster.cpp */; }; 4C255958244A328B00CE7E45 /* CustomMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C25594F244A328A00CE7E45 /* CustomMenu.cpp */; }; 4C255959244A328B00CE7E45 /* UiExtensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C255954244A328A00CE7E45 /* UiExtensions.cpp */; }; 4C25595A244A328B00CE7E45 /* CustomWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C255957244A328B00CE7E45 /* CustomWindow.cpp */; }; @@ -683,6 +684,7 @@ 2ADE2F372244198A002598AF /* SpriteBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBase.h; sourceTree = ""; }; 304FE94F23A2996600470197 /* SceneryScatter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SceneryScatter.cpp; sourceTree = ""; }; 4C1A53EC205FD19F000F8EF5 /* SceneryObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SceneryObject.cpp; sourceTree = ""; }; + 4C1EE63C24AB4A2700D7177F /* HybridCoaster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HybridCoaster.cpp; sourceTree = ""; }; 4C25594E244A328A00CE7E45 /* CustomWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomWindow.h; path = scripting/CustomWindow.h; sourceTree = ""; }; 4C25594F244A328A00CE7E45 /* CustomMenu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CustomMenu.cpp; path = scripting/CustomMenu.cpp; sourceTree = ""; }; 4C255950244A328A00CE7E45 /* ScUi.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScUi.hpp; path = scripting/ScUi.hpp; sourceTree = ""; }; @@ -3252,6 +3254,7 @@ 4C93F11E1F8B744400A9330D /* FlyingRollerCoaster.cpp */, 4C93F11F1F8B744400A9330D /* GigaCoaster.cpp */, 4C93F1201F8B744400A9330D /* HeartlineTwisterCoaster.cpp */, + 4C1EE63C24AB4A2700D7177F /* HybridCoaster.cpp */, 4C93F1211F8B744400A9330D /* InvertedHairpinCoaster.cpp */, 4C93F1221F8B744400A9330D /* InvertedImpulseCoaster.cpp */, 4C93F1231F8B744400A9330D /* InvertedRollerCoaster.cpp */, @@ -4054,6 +4057,7 @@ C666EE791F37ACB10061AA04 /* ServerStart.cpp in Sources */, C61ADB231FBBCB8B0024F2EF /* GameBottomToolbar.cpp in Sources */, 4C81F7E124672C4D000E61BF /* CustomListView.cpp in Sources */, + 4C1EE63D24AB4A2700D7177F /* HybridCoaster.cpp in Sources */, 6341F4E22400AA0F0052902B /* Drawing.Sprite.BMP.cpp in Sources */, C666EE7E1F37ACB10061AA04 /* TitleOptions.cpp in Sources */, F76C887A1EC5324E00FA49E2 /* AudioMixer.cpp in Sources */, diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index e76908e5e1..17e37c1949 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -94,6 +94,7 @@ STR_0089 :Mini Roller Coaster STR_0090 :Mine Ride STR_0091 :Unknown Ride (59) STR_0092 :LIM Launched Roller Coaster +STR_0093 :Hybrid 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 @@ -173,6 +174,7 @@ STR_0598 :Inverted roller coaster trains are accelerated out of the station t STR_0599 :A compact roller coaster with individual cars and smooth twisting drops STR_0600 :Powered mine trains career along a smooth and twisted track layout STR_0602 :Roller coaster trains are accelerated out of the station by linear induction motors to speed through twisting inversions +STR_0603 :A wooden style roller coaster with a steel track, allowing for steep drops and inversions. STR_0767 :Guest {INT32} STR_0768 :Handyman {INT32} STR_0769 :Mechanic {INT32} diff --git a/distribution/changelog.txt b/distribution/changelog.txt index b121e4dfb9..c0e2bf925d 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,5 +1,6 @@ 0.3.1+ (in development) ------------------------------------------------------------------------ +- Feature: [#12110] Add Hybrid Coaster (Rocky Mountain Construction I-Box) track type. - Feature: [#12999] .sea (RCT Classic) scenarios are now listed in the “New Scenario” dialog. - Feature: [#13000] objective_options command for console. - Feature: [#13096] Add Esperanto translation. diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index d0ca97947b..672959f408 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -2175,5 +2175,5049 @@ "y_offset": -1, "palette": "keep", "forceBmp": true + }, + { + "path": "support/flat_to_steep_1_1.png", + "x_offset": -32, + "y_offset": -5 + }, + { + "path": "support/flat_to_steep_1_2.png", + "x_offset": -32, + "y_offset": -1 + }, + { + "path": "support/flat_to_steep_1_3.png", + "x_offset": -32, + "y_offset": -1 + }, + { + "path": "support/flat_to_steep_1_4.png", + "x_offset": -32, + "y_offset": -5 + }, + { + "path": "support/flat_to_steep_2_1.png", + "x_offset": -32, + "y_offset": -18 + }, + { + "path": "support/flat_to_steep_2_2.png", + "x_offset": -32, + "y_offset": -5 + }, + { + "path": "support/flat_to_steep_2_3.png", + "x_offset": -32, + "y_offset": -5 + }, + { + "path": "support/flat_to_steep_2_4.png", + "x_offset": -32, + "y_offset": -18 + }, + { + "path": "support/flat_to_steep_3_1.png", + "x_offset": -32, + "y_offset": -27 + }, + { + "path": "support/flat_to_steep_3_2.png", + "x_offset": -32, + "y_offset": -11 + }, + { + "path": "support/flat_to_steep_3_3.png", + "x_offset": -32, + "y_offset": -11 + }, + { + "path": "support/flat_to_steep_3_4.png", + "x_offset": -32, + "y_offset": -27 + }, + { + "path": "support/flat_to_steep_4_1.png", + "x_offset": -32, + "y_offset": -57 + }, + { + "path": "support/flat_to_steep_4_2.png", + "x_offset": -32, + "y_offset": -41 + }, + { + "path": "support/flat_to_steep_4_3.png", + "x_offset": -32, + "y_offset": -41 + }, + { + "path": "support/flat_to_steep_4_4.png", + "x_offset": -32, + "y_offset": -57 + }, + { + "path": "support/steep_to_flat_1_1.png", + "x_offset": -32, + "y_offset": -54 + }, + { + "path": "support/steep_to_flat_1_2.png", + "x_offset": -32, + "y_offset": -38 + }, + { + "path": "support/steep_to_flat_1_3.png", + "x_offset": -32, + "y_offset": -38 + }, + { + "path": "support/steep_to_flat_1_4.png", + "x_offset": -32, + "y_offset": -54 + }, + { + "path": "support/steep_to_flat_2_1.png", + "x_offset": -32, + "y_offset": -31 + }, + { + "path": "support/steep_to_flat_2_2.png", + "x_offset": -32, + "y_offset": -15 + }, + { + "path": "support/steep_to_flat_2_3.png", + "x_offset": -32, + "y_offset": -15 + }, + { + "path": "support/steep_to_flat_2_4.png", + "x_offset": -32, + "y_offset": -31 + }, + { + "path": "support/steep_to_flat_3_1.png", + "x_offset": -32, + "y_offset": -28 + }, + { + "path": "support/steep_to_flat_3_2.png", + "x_offset": -32, + "y_offset": -16 + }, + { + "path": "support/steep_to_flat_3_3.png", + "x_offset": -32, + "y_offset": -16 + }, + { + "path": "support/steep_to_flat_3_4.png", + "x_offset": -32, + "y_offset": -28 + }, + { + "path": "support/steep_to_flat_4_1.png", + "x_offset": -32, + "y_offset": -17 + }, + { + "path": "support/steep_to_flat_4_2.png", + "x_offset": -32, + "y_offset": -12 + }, + { + "path": "support/steep_to_flat_4_3.png", + "x_offset": -32, + "y_offset": -12 + }, + { + "path": "support/steep_to_flat_4_4.png", + "x_offset": -32, + "y_offset": -17 + }, + { + "path": "track/rmc/preview_track.png", + "x_offset": 1, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/rmc/preview_support.png", + "x_offset": 1, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/rmc/flat_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/brake_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/brake_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/block_brake_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/block_brake_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/booster_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/booster_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_1.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_3.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_4.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_flat_1.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_flat_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_flat_3.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_flat_4.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_1.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_3.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_4.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_1.png", + "x_offset": -34, + "y_offset": -41, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_2_1.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_2_2.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_3_1.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_3_2.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_4.png", + "x_offset": -34, + "y_offset": -41, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_1.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_2_1.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_2_2.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_3_1.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_3_2.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_4.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/steep_1.png", + "x_offset": -34, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/steep_2.png", + "x_offset": -34, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/steep_3.png", + "x_offset": -34, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/steep_4.png", + "x_offset": -34, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_vertical_up_1.png", + "x_offset": -34, + "y_offset": -70, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_vertical_up_2.png", + "x_offset": -34, + "y_offset": -59, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_vertical_up_3.png", + "x_offset": -32, + "y_offset": -59, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_vertical_up_4.png", + "x_offset": -32, + "y_offset": -70, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_to_steep_up_1.png", + "x_offset": -15, + "y_offset": -65, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_to_steep_up_2.png", + "x_offset": -14, + "y_offset": -49, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_to_steep_up_3.png", + "x_offset": -34, + "y_offset": -49, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_to_steep_up_4.png", + "x_offset": -34, + "y_offset": -65, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_1.png", + "x_offset": -15, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_2.png", + "x_offset": -15, + "y_offset": -35, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_3.png", + "x_offset": -32, + "y_offset": -35, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_4.png", + "x_offset": -32, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_1_1.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_1_2.png", + "x_offset": -66, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_1_3.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_2_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_2_2.png", + "x_offset": -66, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_2_3.png", + "x_offset": -98, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_3_1.png", + "x_offset": -27, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_3_2.png", + "x_offset": 5, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_3_3.png", + "x_offset": -27, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_4_1.png", + "x_offset": -98, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_4_2.png", + "x_offset": -66, + "y_offset": 8, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_4_3.png", + "x_offset": -34, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_1_1.png", + "x_offset": -34, + "y_offset": -76, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_1_2.png", + "x_offset": -66, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_1_3.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_1_4.png", + "x_offset": -66, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_1_5.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_2_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_2_2.png", + "x_offset": -66, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_2_3.png", + "x_offset": -98, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_2_4.png", + "x_offset": -130, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_2_5.png", + "x_offset": -162, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_3_1.png", + "x_offset": -40, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_3_2.png", + "x_offset": -8, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_3_3.png", + "x_offset": -40, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_3_4.png", + "x_offset": -8, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_3_5.png", + "x_offset": -40, + "y_offset": -76, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_4_1.png", + "x_offset": -162, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_4_2.png", + "x_offset": -130, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_4_3.png", + "x_offset": -98, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_4_4.png", + "x_offset": -66, + "y_offset": 1, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_4_5.png", + "x_offset": -34, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_1_1.png", + "x_offset": -34, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_1_2.png", + "x_offset": -66, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_1_3.png", + "x_offset": -34, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_1_4.png", + "x_offset": -66, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_2_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_2_2.png", + "x_offset": -66, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_2_3.png", + "x_offset": -98, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_2_4.png", + "x_offset": -130, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_3_1.png", + "x_offset": -56, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_3_2.png", + "x_offset": -24, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_3_3.png", + "x_offset": -56, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_3_4.png", + "x_offset": -24, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_4_1.png", + "x_offset": -98, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_4_2.png", + "x_offset": -66, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_4_3.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_4_4.png", + "x_offset": -2, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_1_1.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_1_2.png", + "x_offset": -66, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_1_3.png", + "x_offset": -98, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_1_4.png", + "x_offset": -130, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_2_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_2_2.png", + "x_offset": -66, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_2_3.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_2_4.png", + "x_offset": -66, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_3_1.png", + "x_offset": -98, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_3_2.png", + "x_offset": -66, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_3_3.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_3_4.png", + "x_offset": -2, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_4_1.png", + "x_offset": -56, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_4_2.png", + "x_offset": -24, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_4_3.png", + "x_offset": -56, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_4_4.png", + "x_offset": -24, + "y_offset": 2, + "palette": "keep" + }, + { + "path": "track/rmc/flat_diag_1.png", + "x_offset": -34, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/rmc/flat_diag_2.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/flat_diag_3.png", + "x_offset": -34, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/rmc/flat_diag_4.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_diag_1.png", + "x_offset": -34, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_diag_2.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_diag_3.png", + "x_offset": -34, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_diag_4.png", + "x_offset": -24, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_flat_up_diag_1.png", + "x_offset": -53, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_flat_up_diag_2.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_flat_up_diag_3.png", + "x_offset": -34, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_flat_up_diag_4.png", + "x_offset": -24, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_diag_1.png", + "x_offset": -54, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_diag_2.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_diag_3.png", + "x_offset": -34, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_diag_4.png", + "x_offset": -24, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_diag_1.png", + "x_offset": -56, + "y_offset": -37, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_diag_2.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_diag_3.png", + "x_offset": -35, + "y_offset": -37, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_diag_4.png", + "x_offset": -24, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_diag_1.png", + "x_offset": -49, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_diag_2.png", + "x_offset": -24, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_diag_3.png", + "x_offset": -34, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_diag_4.png", + "x_offset": -24, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/rmc/steep_diag_1.png", + "x_offset": -48, + "y_offset": -69, + "palette": "keep" + }, + { + "path": "track/rmc/steep_diag_2.png", + "x_offset": -24, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/rmc/steep_diag_3.png", + "x_offset": -35, + "y_offset": -69, + "palette": "keep" + }, + { + "path": "track/rmc/steep_diag_4.png", + "x_offset": -24, + "y_offset": -78, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_left_bank_1_1.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_left_bank_1_2.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_left_bank_2_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_left_bank_2_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_left_bank_3.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_left_bank_4.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_right_bank_1.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_right_bank_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_right_bank_3_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_right_bank_3_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_right_bank_4_1.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_right_bank_4_2.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_1_1.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_1_2.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_2_1.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_2_2.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_3.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_4.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_1.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_2.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_3_1.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_3_2.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_4_1.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_4_2.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_left_bank_1_1.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_left_bank_1_2.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_left_bank_2_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_left_bank_2_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_left_bank_3.png", + "x_offset": -34, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_left_bank_4.png", + "x_offset": -34, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_right_bank_1.png", + "x_offset": -34, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_right_bank_2.png", + "x_offset": -34, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_right_bank_3_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_right_bank_3_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_right_bank_4_1.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_right_bank_4_2.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_1_1.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_1_2.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_2_1.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_2_2.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_3.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_4.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_left_bank_diag_1_1.png", + "x_offset": -34, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_left_bank_diag_1_2.png", + "x_offset": -34, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_left_bank_diag_2.png", + "x_offset": -26, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_left_bank_diag_3.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_left_bank_diag_4.png", + "x_offset": -24, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_right_bank_diag_1.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_right_bank_diag_2.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_right_bank_diag_3_1.png", + "x_offset": -34, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_right_bank_diag_3_2.png", + "x_offset": -34, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_right_bank_diag_4.png", + "x_offset": -26, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_diag_1_1.png", + "x_offset": -34, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_diag_1_2.png", + "x_offset": -34, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_diag_2.png", + "x_offset": -26, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_diag_3.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_diag_4.png", + "x_offset": -24, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_diag_1.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_diag_2.png", + "x_offset": -24, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_diag_3_1.png", + "x_offset": -34, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_diag_3_2.png", + "x_offset": -34, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_diag_4.png", + "x_offset": -26, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_left_bank_diag_1_1.png", + "x_offset": -53, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_left_bank_diag_1_2.png", + "x_offset": -53, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_left_bank_diag_2.png", + "x_offset": -26, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_left_bank_diag_3.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_left_bank_diag_4.png", + "x_offset": -24, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_right_bank_diag_1.png", + "x_offset": -53, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_right_bank_diag_2.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_right_bank_diag_3_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_right_bank_diag_3_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_right_bank_diag_4.png", + "x_offset": -25, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_diag_1_1.png", + "x_offset": -34, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_diag_1_2.png", + "x_offset": -34, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_diag_2.png", + "x_offset": -24, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_diag_3.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_diag_4.png", + "x_offset": -24, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_1_1.png", + "x_offset": -34, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_1_2.png", + "x_offset": -34, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_1_3.png", + "x_offset": -66, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_1_4.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_2_1.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_2_2.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_2_3.png", + "x_offset": -66, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_2_4.png", + "x_offset": -98, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_2_5.png", + "x_offset": -98, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_3_1.png", + "x_offset": -27, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_3_2.png", + "x_offset": 5, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_3_3.png", + "x_offset": -27, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_3_4.png", + "x_offset": -27, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_4_1.png", + "x_offset": -98, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_4_2.png", + "x_offset": -66, + "y_offset": -4, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_4_3.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_1_1.png", + "x_offset": -34, + "y_offset": -88, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_1_2.png", + "x_offset": -34, + "y_offset": -88, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_1_3.png", + "x_offset": -66, + "y_offset": -72, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_1_4.png", + "x_offset": -34, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_1_5.png", + "x_offset": -66, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_1_6.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_2_1.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_2_2.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_2_3.png", + "x_offset": -66, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_2_4.png", + "x_offset": -98, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_2_5.png", + "x_offset": -98, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_2_6.png", + "x_offset": -130, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_2_7.png", + "x_offset": -162, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_2_8.png", + "x_offset": -162, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_3_1.png", + "x_offset": -40, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_3_2.png", + "x_offset": -8, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_3_3.png", + "x_offset": -40, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_3_4.png", + "x_offset": -8, + "y_offset": -72, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_3_5.png", + "x_offset": -40, + "y_offset": -88, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_3_6.png", + "x_offset": -40, + "y_offset": -88, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_4_1.png", + "x_offset": -162, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_4_2.png", + "x_offset": -130, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_4_3.png", + "x_offset": -98, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_4_4.png", + "x_offset": -66, + "y_offset": -11, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_4_5.png", + "x_offset": -34, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_1_1.png", + "x_offset": -34, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_1_2.png", + "x_offset": -34, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_1_3.png", + "x_offset": -66, + "y_offset": -41, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_1_4.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_1_5.png", + "x_offset": -66, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_2_1.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_2_2.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_2_3.png", + "x_offset": -66, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_2_4.png", + "x_offset": -66, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_2_5.png", + "x_offset": -98, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_2_6.png", + "x_offset": -130, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_2_7.png", + "x_offset": -130, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_3_1.png", + "x_offset": -56, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_3_2.png", + "x_offset": -24, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_3_3.png", + "x_offset": -56, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_3_4.png", + "x_offset": -24, + "y_offset": -72, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_4_1.png", + "x_offset": -98, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_4_2.png", + "x_offset": -66, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_4_3.png", + "x_offset": -34, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_left_to_diag_bank_4_4.png", + "x_offset": -2, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_1_1.png", + "x_offset": -34, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_1_2.png", + "x_offset": -66, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_1_3.png", + "x_offset": -98, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_1_4.png", + "x_offset": -130, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_2_1.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_2_2.png", + "x_offset": -66, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_2_3.png", + "x_offset": -34, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_2_4.png", + "x_offset": -66, + "y_offset": -72, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_3_1.png", + "x_offset": -97, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_3_2.png", + "x_offset": -97, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_3_3.png", + "x_offset": -65, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_3_4.png", + "x_offset": -65, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_3_5.png", + "x_offset": -33, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_3_6.png", + "x_offset": -1, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_3_7.png", + "x_offset": -1, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_4_1.png", + "x_offset": -56, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_4_2.png", + "x_offset": -56, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_4_3.png", + "x_offset": -24, + "y_offset": -41, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_4_4.png", + "x_offset": -56, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/large_turn_right_to_diag_bank_4_5.png", + "x_offset": -24, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_gentle_up_1_1.png", + "x_offset": -40, + "y_offset": -79, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_gentle_up_1_2.png", + "x_offset": -28, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_gentle_up_2_1.png", + "x_offset": -28, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_gentle_up_2_2.png", + "x_offset": -104, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_gentle_up_3_1.png", + "x_offset": -33, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_gentle_up_3_2.png", + "x_offset": -21, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_gentle_up_4_1.png", + "x_offset": -92, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_gentle_up_4_2.png", + "x_offset": -40, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_gentle_up_1_1.png", + "x_offset": -40, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_gentle_up_1_2.png", + "x_offset": -92, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_gentle_up_2_1.png", + "x_offset": -28, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_gentle_up_2_2.png", + "x_offset": -40, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_gentle_up_3_1.png", + "x_offset": -104, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_gentle_up_3_2.png", + "x_offset": -28, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_gentle_up_4_1.png", + "x_offset": -21, + "y_offset": -79, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_gentle_up_4_2.png", + "x_offset": -33, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_1_1.png", + "x_offset": -34, + "y_offset": -140, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_1_2.png", + "x_offset": -66, + "y_offset": -108, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_1_3.png", + "x_offset": -34, + "y_offset": -140, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_1_4.png", + "x_offset": -66, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_1_5.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_2_1.png", + "x_offset": -34, + "y_offset": -76, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_2_2.png", + "x_offset": -66, + "y_offset": -76, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_2_3.png", + "x_offset": -98, + "y_offset": -52, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_2_4.png", + "x_offset": -130, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_2_5.png", + "x_offset": -162, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_3_1.png", + "x_offset": -40, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_3_2.png", + "x_offset": -40, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_3_3.png", + "x_offset": -40, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_3_4.png", + "x_offset": -40, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_3_5.png", + "x_offset": -40, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_4_1.png", + "x_offset": -162, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_4_2.png", + "x_offset": -130, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_4_3.png", + "x_offset": -98, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_4_4.png", + "x_offset": -66, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_gentle_up_4_5.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_1_1.png", + "x_offset": -34, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_1_2.png", + "x_offset": -66, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_1_3.png", + "x_offset": -98, + "y_offset": -36, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_1_4.png", + "x_offset": -130, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_1_5.png", + "x_offset": -162, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_2_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_2_2.png", + "x_offset": -66, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_2_3.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_2_4.png", + "x_offset": -66, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_2_5.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_3_1.png", + "x_offset": -162, + "y_offset": -76, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_3_2.png", + "x_offset": -130, + "y_offset": -76, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_3_3.png", + "x_offset": -98, + "y_offset": -52, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_3_4.png", + "x_offset": -66, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_3_5.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_4_1.png", + "x_offset": -40, + "y_offset": -140, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_4_2.png", + "x_offset": -8, + "y_offset": -108, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_4_3.png", + "x_offset": -40, + "y_offset": -84, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_4_4.png", + "x_offset": -8, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_gentle_up_4_5.png", + "x_offset": -40, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_left_steep_up_1_1.png", + "x_offset": -34, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_left_steep_up_1_2.png", + "x_offset": -34, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_left_steep_up_2_1.png", + "x_offset": -34, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_left_steep_up_2_2.png", + "x_offset": -34, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_left_steep_up_3_1.png", + "x_offset": -15, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_left_steep_up_3_2.png", + "x_offset": -15, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_left_steep_up_4_1.png", + "x_offset": -34, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_left_steep_up_4_2.png", + "x_offset": -34, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_right_steep_up_1_1.png", + "x_offset": -34, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_right_steep_up_1_2.png", + "x_offset": -34, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_right_steep_up_2_1.png", + "x_offset": -34, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_right_steep_up_2_2.png", + "x_offset": -34, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_right_steep_up_3_1.png", + "x_offset": -34, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_right_steep_up_3_2.png", + "x_offset": -34, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_right_steep_up_4_1.png", + "x_offset": -15, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/very_small_turn_right_steep_up_4_2.png", + "x_offset": -15, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_twist_left_up_1.png", + "x_offset": -32, + "y_offset": -110, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_twist_left_up_2_1.png", + "x_offset": -15, + "y_offset": -110, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_twist_left_up_2_2.png", + "x_offset": -15, + "y_offset": -110, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_twist_left_up_3.png", + "x_offset": -32, + "y_offset": -99, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_twist_left_up_4_1.png", + "x_offset": -32, + "y_offset": -99, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_twist_left_up_4_2.png", + "x_offset": -32, + "y_offset": -99, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_twist_right_up_1_1.png", + "x_offset": -15, + "y_offset": -99, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_twist_right_up_1_2.png", + "x_offset": -15, + "y_offset": -99, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_twist_right_up_2.png", + "x_offset": -32, + "y_offset": -99, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_twist_right_up_3_1.png", + "x_offset": -32, + "y_offset": -110, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_twist_right_up_3_2.png", + "x_offset": -32, + "y_offset": -110, + "palette": "keep" + }, + { + "path": "track/rmc/vertical_twist_right_up_4.png", + "x_offset": -32, + "y_offset": -110, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_gentle_up_left_bank_1.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_gentle_up_left_bank_2_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_gentle_up_left_bank_2_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_gentle_up_left_bank_3.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_gentle_up_left_bank_4.png", + "x_offset": -34, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_gentle_up_right_bank_1.png", + "x_offset": -34, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_gentle_up_right_bank_2.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_gentle_up_right_bank_3_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_gentle_up_right_bank_3_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_gentle_up_right_bank_4.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_gentle_up_1.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_gentle_up_2_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_gentle_up_2_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_gentle_up_3.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_gentle_up_4.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_gentle_up_1.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_gentle_up_2.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_gentle_up_3_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_gentle_up_3_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_gentle_up_4.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_left_bank_1_1.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_left_bank_1_2.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_left_bank_2_1.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_left_bank_2_2.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_left_bank_3.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/left_bank_to_gentle_up_left_bank_4.png", + "x_offset": -34, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_right_bank_1.png", + "x_offset": -34, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_right_bank_2.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_right_bank_3_1.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_right_bank_3_2.png", + "x_offset": -34, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_right_bank_4_1.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/right_bank_to_gentle_up_right_bank_4_2.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_left_bank_1_1.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_left_bank_1_2.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_left_bank_2_1.png", + "x_offset": -34, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_left_bank_2_2.png", + "x_offset": -34, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_left_bank_3.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_left_bank_4.png", + "x_offset": -34, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_right_bank_1.png", + "x_offset": -34, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_right_bank_2.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_right_bank_3_1.png", + "x_offset": -34, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_right_bank_3_2.png", + "x_offset": -34, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_right_bank_4_1.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_right_bank_4_2.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_1.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_2.png", + "x_offset": -34, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_3.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_4.png", + "x_offset": -34, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_1.png", + "x_offset": -34, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_2.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_3.png", + "x_offset": -34, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_4.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_left_bank_1.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_left_bank_2_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_left_bank_2_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_left_bank_3.png", + "x_offset": -34, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_left_bank_4.png", + "x_offset": -34, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_right_bank_1.png", + "x_offset": -34, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_right_bank_2.png", + "x_offset": -34, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_right_bank_3_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_right_bank_3_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_right_bank_4.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_flat_1.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_flat_2_1.png", + "x_offset": -34, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_flat_2_2.png", + "x_offset": -34, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_flat_3.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_left_bank_to_flat_4.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_flat_1.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_flat_2.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_flat_3_1.png", + "x_offset": -34, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_flat_3_2.png", + "x_offset": -34, + "y_offset": -10, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_right_bank_to_flat_4.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_gentle_up_1_1.png", + "x_offset": -40, + "y_offset": -91, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_gentle_up_1_2.png", + "x_offset": -28, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_gentle_up_2_1.png", + "x_offset": -28, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_gentle_up_2_2.png", + "x_offset": -28, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_gentle_up_2_3.png", + "x_offset": -104, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_gentle_up_2_4.png", + "x_offset": -104, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_gentle_up_3_1.png", + "x_offset": -33, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_gentle_up_3_2.png", + "x_offset": -21, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_gentle_up_3_3.png", + "x_offset": -21, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_gentle_up_4_1.png", + "x_offset": -92, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_gentle_up_4_2.png", + "x_offset": -40, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_gentle_up_1_1.png", + "x_offset": -40, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_gentle_up_1_2.png", + "x_offset": -92, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_gentle_up_2_1.png", + "x_offset": -28, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_gentle_up_2_2.png", + "x_offset": -40, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_gentle_up_2_3.png", + "x_offset": -40, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_gentle_up_3_1.png", + "x_offset": -104, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_gentle_up_3_2.png", + "x_offset": -104, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_gentle_up_3_3.png", + "x_offset": -28, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_gentle_up_3_4.png", + "x_offset": -28, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_gentle_up_4_1.png", + "x_offset": -21, + "y_offset": -91, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_gentle_up_4_2.png", + "x_offset": -33, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_1_1.png", + "x_offset": -34, + "y_offset": -152, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_1_2.png", + "x_offset": -66, + "y_offset": -120, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_1_3.png", + "x_offset": -34, + "y_offset": -152, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_1_4.png", + "x_offset": -66, + "y_offset": -72, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_1_5.png", + "x_offset": -34, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_2_1.png", + "x_offset": -34, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_2_2.png", + "x_offset": -34, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_2_3.png", + "x_offset": -66, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_2_4.png", + "x_offset": -66, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_2_5.png", + "x_offset": -98, + "y_offset": -49, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_2_6.png", + "x_offset": -98, + "y_offset": -49, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_2_7.png", + "x_offset": -130, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_2_8.png", + "x_offset": -130, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_2_9.png", + "x_offset": -162, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_2_10.png", + "x_offset": -162, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_3_1.png", + "x_offset": -40, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_3_2.png", + "x_offset": -40, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_3_3.png", + "x_offset": -40, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_3_4.png", + "x_offset": -40, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_3_5.png", + "x_offset": -40, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_3_6.png", + "x_offset": -40, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_4_1.png", + "x_offset": -162, + "y_offset": -72, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_4_2.png", + "x_offset": -130, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_4_3.png", + "x_offset": -98, + "y_offset": -48, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_4_4.png", + "x_offset": -66, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_left_bank_gentle_up_4_5.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_1_1.png", + "x_offset": -34, + "y_offset": -72, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_1_2.png", + "x_offset": -66, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_1_3.png", + "x_offset": -98, + "y_offset": -48, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_1_4.png", + "x_offset": -130, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_1_5.png", + "x_offset": -162, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_2_1.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_2_2.png", + "x_offset": -66, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_2_3.png", + "x_offset": -34, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_2_4.png", + "x_offset": -66, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_2_5.png", + "x_offset": -34, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_2_6.png", + "x_offset": -34, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_3_1.png", + "x_offset": -162, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_3_2.png", + "x_offset": -162, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_3_3.png", + "x_offset": -130, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_3_4.png", + "x_offset": -130, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_3_5.png", + "x_offset": -98, + "y_offset": -49, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_3_6.png", + "x_offset": -98, + "y_offset": -49, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_3_7.png", + "x_offset": -66, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_3_8.png", + "x_offset": -66, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_3_9.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_3_10.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_4_1.png", + "x_offset": -40, + "y_offset": -152, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_4_2.png", + "x_offset": -8, + "y_offset": -120, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_4_3.png", + "x_offset": -40, + "y_offset": -96, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_4_4.png", + "x_offset": -8, + "y_offset": -72, + "palette": "keep" + }, + { + "path": "track/rmc/medium_turn_right_bank_gentle_up_4_5.png", + "x_offset": -40, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_left_1_1.png", + "x_offset": -34, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_left_1_2.png", + "x_offset": -66, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_left_1_3.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_left_1_4.png", + "x_offset": -66, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_left_2_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_left_2_2.png", + "x_offset": -66, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_left_2_3.png", + "x_offset": -98, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_left_2_4.png", + "x_offset": -130, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_right_1_1.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_right_1_2.png", + "x_offset": -66, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_right_1_3.png", + "x_offset": -98, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_right_1_4.png", + "x_offset": -130, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_right_2_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_right_2_2.png", + "x_offset": -66, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_right_2_3.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/s_bend_right_2_4.png", + "x_offset": -66, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_1_1.png", + "x_offset": -34, + "y_offset": -64, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_1_2.png", + "x_offset": -34, + "y_offset": -64, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_1_3.png", + "x_offset": -66, + "y_offset": -48, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_1_4.png", + "x_offset": -34, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_2_1.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_2_2.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_2_3.png", + "x_offset": -66, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_2_4.png", + "x_offset": -98, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_2_5.png", + "x_offset": -98, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_3_1.png", + "x_offset": -27, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_3_2.png", + "x_offset": 5, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_3_3.png", + "x_offset": -27, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_3_4.png", + "x_offset": -27, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_4_1.png", + "x_offset": -98, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_4_2.png", + "x_offset": -66, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_left_up_4_3.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_1_1.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_1_2.png", + "x_offset": -66, + "y_offset": -9, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_1_3.png", + "x_offset": -98, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_2_1.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_2_2.png", + "x_offset": -66, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_2_3.png", + "x_offset": -34, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_2_4.png", + "x_offset": -34, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_3_1.png", + "x_offset": -98, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_3_2.png", + "x_offset": -98, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_3_3.png", + "x_offset": -66, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_3_4.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_3_5.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_4_1.png", + "x_offset": -27, + "y_offset": -64, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_4_2.png", + "x_offset": -27, + "y_offset": -64, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_4_3.png", + "x_offset": 5, + "y_offset": -48, + "palette": "keep" + }, + { + "path": "track/rmc/small_helix_right_up_4_4.png", + "x_offset": -27, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_1_1.png", + "x_offset": -34, + "y_offset": -96, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_1_2.png", + "x_offset": -34, + "y_offset": -96, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_1_3.png", + "x_offset": -66, + "y_offset": -80, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_1_4.png", + "x_offset": -34, + "y_offset": -64, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_1_5.png", + "x_offset": -66, + "y_offset": -48, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_1_6.png", + "x_offset": -34, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_2_1.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_2_2.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_2_3.png", + "x_offset": -66, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_2_4.png", + "x_offset": -98, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_2_5.png", + "x_offset": -98, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_2_6.png", + "x_offset": -130, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_2_7.png", + "x_offset": -162, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_2_8.png", + "x_offset": -162, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_3_1.png", + "x_offset": -40, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_3_2.png", + "x_offset": -8, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_3_3.png", + "x_offset": -40, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_3_4.png", + "x_offset": -8, + "y_offset": -72, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_3_5.png", + "x_offset": -40, + "y_offset": -88, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_3_6.png", + "x_offset": -40, + "y_offset": -88, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_4_1.png", + "x_offset": -162, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_4_2.png", + "x_offset": -130, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_4_3.png", + "x_offset": -98, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_4_4.png", + "x_offset": -66, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_left_up_4_5.png", + "x_offset": -34, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_1_1.png", + "x_offset": -34, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_1_2.png", + "x_offset": -66, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_1_3.png", + "x_offset": -98, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_1_4.png", + "x_offset": -130, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_1_5.png", + "x_offset": -162, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_2_1.png", + "x_offset": -34, + "y_offset": -24, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_2_2.png", + "x_offset": -66, + "y_offset": -40, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_2_3.png", + "x_offset": -34, + "y_offset": -56, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_2_4.png", + "x_offset": -66, + "y_offset": -72, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_2_5.png", + "x_offset": -34, + "y_offset": -88, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_2_6.png", + "x_offset": -34, + "y_offset": -88, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_3_1.png", + "x_offset": -162, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_3_2.png", + "x_offset": -162, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_3_3.png", + "x_offset": -130, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_3_4.png", + "x_offset": -98, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_3_5.png", + "x_offset": -98, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_3_6.png", + "x_offset": -66, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_3_7.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_3_8.png", + "x_offset": -34, + "y_offset": -17, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_4_1.png", + "x_offset": -40, + "y_offset": -96, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_4_2.png", + "x_offset": -40, + "y_offset": -96, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_4_3.png", + "x_offset": -8, + "y_offset": -80, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_4_4.png", + "x_offset": -40, + "y_offset": -64, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_4_5.png", + "x_offset": -8, + "y_offset": -48, + "palette": "keep" + }, + { + "path": "track/rmc/medium_helix_right_up_4_6.png", + "x_offset": -40, + "y_offset": -32, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_1_1.png", + "x_offset": -34, + "y_offset": -76, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_1_2.png", + "x_offset": -34, + "y_offset": -76, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_1_3.png", + "x_offset": -66, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_1_4.png", + "x_offset": -66, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_1_5.png", + "x_offset": -98, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_1_6.png", + "x_offset": -98, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_2_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_2_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_2_3.png", + "x_offset": -66, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_2_4.png", + "x_offset": -66, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_2_5.png", + "x_offset": -98, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_2_6.png", + "x_offset": -98, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_3_1.png", + "x_offset": -98, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_3_2.png", + "x_offset": -98, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_3_3.png", + "x_offset": -66, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_3_4.png", + "x_offset": -66, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_3_5.png", + "x_offset": -34, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_3_6.png", + "x_offset": -34, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_4_1.png", + "x_offset": -98, + "y_offset": -76, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_4_2.png", + "x_offset": -98, + "y_offset": -76, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_4_3.png", + "x_offset": -66, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_4_4.png", + "x_offset": -66, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_4_5.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_left_4_6.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_1_1.png", + "x_offset": -34, + "y_offset": -76, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_1_2.png", + "x_offset": -34, + "y_offset": -76, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_1_3.png", + "x_offset": -66, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_1_4.png", + "x_offset": -66, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_1_5.png", + "x_offset": -98, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_1_6.png", + "x_offset": -98, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_2_1.png", + "x_offset": -34, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_2_2.png", + "x_offset": -34, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_2_3.png", + "x_offset": -66, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_2_4.png", + "x_offset": -66, + "y_offset": -31, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_2_5.png", + "x_offset": -98, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_2_6.png", + "x_offset": -98, + "y_offset": -47, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_3_1.png", + "x_offset": -98, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_3_2.png", + "x_offset": -98, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_3_3.png", + "x_offset": -66, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_3_4.png", + "x_offset": -66, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_3_5.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_3_6.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_4_1.png", + "x_offset": -98, + "y_offset": -76, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_4_2.png", + "x_offset": -98, + "y_offset": -76, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_4_3.png", + "x_offset": -66, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_4_4.png", + "x_offset": -66, + "y_offset": -60, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_4_5.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/barrel_roll_right_4_6.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_1_1.png", + "x_offset": -34, + "y_offset": -145, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_1_2.png", + "x_offset": -66, + "y_offset": -129, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_1_3.png", + "x_offset": -98, + "y_offset": -97, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_1_4.png", + "x_offset": -130, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_2_1.png", + "x_offset": -34, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_2_2.png", + "x_offset": -66, + "y_offset": -49, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_2_3.png", + "x_offset": -98, + "y_offset": -49, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_2_4.png", + "x_offset": -130, + "y_offset": -41, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_3_1.png", + "x_offset": -130, + "y_offset": -33, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_3_2.png", + "x_offset": -98, + "y_offset": -49, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_3_3.png", + "x_offset": -66, + "y_offset": -49, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_3_4.png", + "x_offset": -34, + "y_offset": -41, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_4_1.png", + "x_offset": -130, + "y_offset": -145, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_4_2.png", + "x_offset": -98, + "y_offset": -129, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_4_3.png", + "x_offset": -66, + "y_offset": -97, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_steep_up_4_4.png", + "x_offset": -34, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_1_1.png", + "x_offset": -34, + "y_offset": -148, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_1_2.png", + "x_offset": -66, + "y_offset": -92, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_1_3.png", + "x_offset": -98, + "y_offset": -52, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_1_4.png", + "x_offset": -130, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_2_1.png", + "x_offset": -34, + "y_offset": -51, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_2_2.png", + "x_offset": -66, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_2_3.png", + "x_offset": -98, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_2_4.png", + "x_offset": -130, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_3_1.png", + "x_offset": -130, + "y_offset": -51, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_3_2.png", + "x_offset": -98, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_3_3.png", + "x_offset": -66, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_3_4.png", + "x_offset": -34, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_4_1.png", + "x_offset": -130, + "y_offset": -148, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_4_2.png", + "x_offset": -98, + "y_offset": -92, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_4_3.png", + "x_offset": -66, + "y_offset": -52, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_flat_up_4_4.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_1_1.png", + "x_offset": -98, + "y_offset": -99, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_1_2.png", + "x_offset": -98, + "y_offset": -99, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_1_3.png", + "x_offset": -66, + "y_offset": -59, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_1_4.png", + "x_offset": -66, + "y_offset": -59, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_1_5.png", + "x_offset": -34, + "y_offset": -35, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_1_6.png", + "x_offset": -34, + "y_offset": -35, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_2_1.png", + "x_offset": -98, + "y_offset": -172, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_2_2.png", + "x_offset": -98, + "y_offset": -172, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_2_3.png", + "x_offset": -66, + "y_offset": -100, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_2_4.png", + "x_offset": -66, + "y_offset": -100, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_2_5.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_2_6.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_3_1.png", + "x_offset": -32, + "y_offset": -172, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_3_2.png", + "x_offset": -32, + "y_offset": -172, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_3_3.png", + "x_offset": -64, + "y_offset": -100, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_3_4.png", + "x_offset": -64, + "y_offset": -100, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_3_5.png", + "x_offset": -96, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_3_6.png", + "x_offset": -96, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_4_1.png", + "x_offset": -32, + "y_offset": -99, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_4_2.png", + "x_offset": -32, + "y_offset": -99, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_4_3.png", + "x_offset": -64, + "y_offset": -59, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_4_4.png", + "x_offset": -64, + "y_offset": -59, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_4_5.png", + "x_offset": -96, + "y_offset": -35, + "palette": "keep" + }, + { + "path": "track/rmc/quarter_loop_up_4_6.png", + "x_offset": -96, + "y_offset": -35, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_to_gentle_up_1_1.png", + "x_offset": -40, + "y_offset": -71, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_to_gentle_up_1_2.png", + "x_offset": -28, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_to_gentle_up_2_1.png", + "x_offset": -28, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_to_gentle_up_2_2.png", + "x_offset": -28, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_to_gentle_up_2_3.png", + "x_offset": -104, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_to_gentle_up_3_1.png", + "x_offset": -33, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_to_gentle_up_3_2.png", + "x_offset": -21, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_to_gentle_up_4_1.png", + "x_offset": -92, + "y_offset": -29, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_left_bank_to_gentle_up_4_2.png", + "x_offset": -40, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_to_gentle_up_1_1.png", + "x_offset": -40, + "y_offset": -29, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_to_gentle_up_1_2.png", + "x_offset": -92, + "y_offset": -13, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_to_gentle_up_2_1.png", + "x_offset": -28, + "y_offset": -27, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_to_gentle_up_2_2.png", + "x_offset": -40, + "y_offset": -43, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_to_gentle_up_3_1.png", + "x_offset": -104, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_to_gentle_up_3_2.png", + "x_offset": -104, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_to_gentle_up_3_3.png", + "x_offset": -28, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_to_gentle_up_4_1.png", + "x_offset": -21, + "y_offset": -71, + "palette": "keep" + }, + { + "path": "track/rmc/small_turn_right_bank_to_gentle_up_4_2.png", + "x_offset": -33, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/rmc/powered_lift_1.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/powered_lift_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/powered_lift_3.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/powered_lift_4.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/flat_lift_1.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_lift_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_lift_3.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_lift_4.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_lift_1.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_lift_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_lift_3.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_lift_4.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_flat_lift_1.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_flat_lift_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_flat_lift_3.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_up_to_flat_lift_4.png", + "x_offset": -34, + "y_offset": -20, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_lift_1.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_lift_2.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_lift_3.png", + "x_offset": -34, + "y_offset": -12, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_lift_4.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_lift_1.png", + "x_offset": -34, + "y_offset": -41, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_lift_2_1.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_lift_2_2.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_lift_3_1.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_lift_3_2.png", + "x_offset": -34, + "y_offset": -25, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_lift_4.png", + "x_offset": -34, + "y_offset": -41, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_lift_1.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_lift_2_1.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_lift_2_2.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_lift_3_1.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_lift_3_2.png", + "x_offset": -34, + "y_offset": -28, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_lift_4.png", + "x_offset": -34, + "y_offset": -44, + "palette": "keep" + }, + { + "path": "track/rmc/steep_lift_1.png", + "x_offset": -34, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/steep_lift_2.png", + "x_offset": -34, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/steep_lift_3.png", + "x_offset": -34, + "y_offset": -57, + "palette": "keep" + }, + { + "path": "track/rmc/steep_lift_4.png", + "x_offset": -34, + "y_offset": -73, + "palette": "keep" + }, + { + "path": "track/rmc/flat_diag_lift_1.png", + "x_offset": -34, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/rmc/flat_diag_lift_2.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/flat_diag_lift_3.png", + "x_offset": -34, + "y_offset": -8, + "palette": "keep" + }, + { + "path": "track/rmc/flat_diag_lift_4.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_diag_lift_1.png", + "x_offset": -34, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_diag_lift_2.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_diag_lift_3.png", + "x_offset": -34, + "y_offset": -15, + "palette": "keep" + }, + { + "path": "track/rmc/flat_to_gentle_up_diag_lift_4.png", + "x_offset": -24, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_flat_up_diag_lift_1.png", + "x_offset": -53, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_flat_up_diag_lift_2.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_flat_up_diag_lift_3.png", + "x_offset": -34, + "y_offset": -16, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_flat_up_diag_lift_4.png", + "x_offset": -24, + "y_offset": -22, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_diag_lift_1.png", + "x_offset": -54, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_diag_lift_2.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_diag_lift_3.png", + "x_offset": -34, + "y_offset": -23, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_diag_lift_4.png", + "x_offset": -24, + "y_offset": -30, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_diag_lift_1.png", + "x_offset": -56, + "y_offset": -37, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_diag_lift_2.png", + "x_offset": -24, + "y_offset": -14, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_diag_lift_3.png", + "x_offset": -35, + "y_offset": -37, + "palette": "keep" + }, + { + "path": "track/rmc/gentle_to_steep_up_diag_lift_4.png", + "x_offset": -24, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_diag_lift_1.png", + "x_offset": -49, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_diag_lift_2.png", + "x_offset": -24, + "y_offset": -19, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_diag_lift_3.png", + "x_offset": -34, + "y_offset": -39, + "palette": "keep" + }, + { + "path": "track/rmc/steep_to_gentle_up_diag_lift_4.png", + "x_offset": -24, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/rmc/steep_diag_lift_1.png", + "x_offset": -48, + "y_offset": -69, + "palette": "keep" + }, + { + "path": "track/rmc/steep_diag_lift_2.png", + "x_offset": -24, + "y_offset": -46, + "palette": "keep" + }, + { + "path": "track/rmc/steep_diag_lift_3.png", + "x_offset": -35, + "y_offset": -69, + "palette": "keep" + }, + { + "path": "track/rmc/steep_diag_lift_4.png", + "x_offset": -24, + "y_offset": -78, + "palette": "keep" } ] diff --git a/resources/g2/support/flat_to_steep_1_1.png b/resources/g2/support/flat_to_steep_1_1.png new file mode 100644 index 0000000000..9944d51c4e Binary files /dev/null and b/resources/g2/support/flat_to_steep_1_1.png differ diff --git a/resources/g2/support/flat_to_steep_1_2.png b/resources/g2/support/flat_to_steep_1_2.png new file mode 100644 index 0000000000..45d70a863d Binary files /dev/null and b/resources/g2/support/flat_to_steep_1_2.png differ diff --git a/resources/g2/support/flat_to_steep_1_3.png b/resources/g2/support/flat_to_steep_1_3.png new file mode 100644 index 0000000000..4f610ec681 Binary files /dev/null and b/resources/g2/support/flat_to_steep_1_3.png differ diff --git a/resources/g2/support/flat_to_steep_1_4.png b/resources/g2/support/flat_to_steep_1_4.png new file mode 100644 index 0000000000..27c8599063 Binary files /dev/null and b/resources/g2/support/flat_to_steep_1_4.png differ diff --git a/resources/g2/support/flat_to_steep_2_1.png b/resources/g2/support/flat_to_steep_2_1.png new file mode 100644 index 0000000000..65b570954e Binary files /dev/null and b/resources/g2/support/flat_to_steep_2_1.png differ diff --git a/resources/g2/support/flat_to_steep_2_2.png b/resources/g2/support/flat_to_steep_2_2.png new file mode 100644 index 0000000000..21bd93a918 Binary files /dev/null and b/resources/g2/support/flat_to_steep_2_2.png differ diff --git a/resources/g2/support/flat_to_steep_2_3.png b/resources/g2/support/flat_to_steep_2_3.png new file mode 100644 index 0000000000..bed653fb73 Binary files /dev/null and b/resources/g2/support/flat_to_steep_2_3.png differ diff --git a/resources/g2/support/flat_to_steep_2_4.png b/resources/g2/support/flat_to_steep_2_4.png new file mode 100644 index 0000000000..7cd2706991 Binary files /dev/null and b/resources/g2/support/flat_to_steep_2_4.png differ diff --git a/resources/g2/support/flat_to_steep_3_1.png b/resources/g2/support/flat_to_steep_3_1.png new file mode 100644 index 0000000000..8b3afe4ab4 Binary files /dev/null and b/resources/g2/support/flat_to_steep_3_1.png differ diff --git a/resources/g2/support/flat_to_steep_3_2.png b/resources/g2/support/flat_to_steep_3_2.png new file mode 100644 index 0000000000..dc9741d542 Binary files /dev/null and b/resources/g2/support/flat_to_steep_3_2.png differ diff --git a/resources/g2/support/flat_to_steep_3_3.png b/resources/g2/support/flat_to_steep_3_3.png new file mode 100644 index 0000000000..d025251257 Binary files /dev/null and b/resources/g2/support/flat_to_steep_3_3.png differ diff --git a/resources/g2/support/flat_to_steep_3_4.png b/resources/g2/support/flat_to_steep_3_4.png new file mode 100644 index 0000000000..c70b154fd5 Binary files /dev/null and b/resources/g2/support/flat_to_steep_3_4.png differ diff --git a/resources/g2/support/flat_to_steep_4_1.png b/resources/g2/support/flat_to_steep_4_1.png new file mode 100644 index 0000000000..ef9a5fac7a Binary files /dev/null and b/resources/g2/support/flat_to_steep_4_1.png differ diff --git a/resources/g2/support/flat_to_steep_4_2.png b/resources/g2/support/flat_to_steep_4_2.png new file mode 100644 index 0000000000..0d1a58c7a8 Binary files /dev/null and b/resources/g2/support/flat_to_steep_4_2.png differ diff --git a/resources/g2/support/flat_to_steep_4_3.png b/resources/g2/support/flat_to_steep_4_3.png new file mode 100644 index 0000000000..b2ec707133 Binary files /dev/null and b/resources/g2/support/flat_to_steep_4_3.png differ diff --git a/resources/g2/support/flat_to_steep_4_4.png b/resources/g2/support/flat_to_steep_4_4.png new file mode 100644 index 0000000000..ed88891411 Binary files /dev/null and b/resources/g2/support/flat_to_steep_4_4.png differ diff --git a/resources/g2/support/steep_to_flat_1_1.png b/resources/g2/support/steep_to_flat_1_1.png new file mode 100644 index 0000000000..aeb358e9b6 Binary files /dev/null and b/resources/g2/support/steep_to_flat_1_1.png differ diff --git a/resources/g2/support/steep_to_flat_1_2.png b/resources/g2/support/steep_to_flat_1_2.png new file mode 100644 index 0000000000..f683acd280 Binary files /dev/null and b/resources/g2/support/steep_to_flat_1_2.png differ diff --git a/resources/g2/support/steep_to_flat_1_3.png b/resources/g2/support/steep_to_flat_1_3.png new file mode 100644 index 0000000000..51102ad247 Binary files /dev/null and b/resources/g2/support/steep_to_flat_1_3.png differ diff --git a/resources/g2/support/steep_to_flat_1_4.png b/resources/g2/support/steep_to_flat_1_4.png new file mode 100644 index 0000000000..8e457bae29 Binary files /dev/null and b/resources/g2/support/steep_to_flat_1_4.png differ diff --git a/resources/g2/support/steep_to_flat_2_1.png b/resources/g2/support/steep_to_flat_2_1.png new file mode 100644 index 0000000000..10f3e58184 Binary files /dev/null and b/resources/g2/support/steep_to_flat_2_1.png differ diff --git a/resources/g2/support/steep_to_flat_2_2.png b/resources/g2/support/steep_to_flat_2_2.png new file mode 100644 index 0000000000..e6c9943444 Binary files /dev/null and b/resources/g2/support/steep_to_flat_2_2.png differ diff --git a/resources/g2/support/steep_to_flat_2_3.png b/resources/g2/support/steep_to_flat_2_3.png new file mode 100644 index 0000000000..77c6a4203b Binary files /dev/null and b/resources/g2/support/steep_to_flat_2_3.png differ diff --git a/resources/g2/support/steep_to_flat_2_4.png b/resources/g2/support/steep_to_flat_2_4.png new file mode 100644 index 0000000000..37c6b6e42a Binary files /dev/null and b/resources/g2/support/steep_to_flat_2_4.png differ diff --git a/resources/g2/support/steep_to_flat_3_1.png b/resources/g2/support/steep_to_flat_3_1.png new file mode 100644 index 0000000000..af6ac8a69d Binary files /dev/null and b/resources/g2/support/steep_to_flat_3_1.png differ diff --git a/resources/g2/support/steep_to_flat_3_2.png b/resources/g2/support/steep_to_flat_3_2.png new file mode 100644 index 0000000000..9c4a934003 Binary files /dev/null and b/resources/g2/support/steep_to_flat_3_2.png differ diff --git a/resources/g2/support/steep_to_flat_3_3.png b/resources/g2/support/steep_to_flat_3_3.png new file mode 100644 index 0000000000..841f304f3c Binary files /dev/null and b/resources/g2/support/steep_to_flat_3_3.png differ diff --git a/resources/g2/support/steep_to_flat_3_4.png b/resources/g2/support/steep_to_flat_3_4.png new file mode 100644 index 0000000000..e37dee4cc9 Binary files /dev/null and b/resources/g2/support/steep_to_flat_3_4.png differ diff --git a/resources/g2/support/steep_to_flat_4_1.png b/resources/g2/support/steep_to_flat_4_1.png new file mode 100644 index 0000000000..6e3b75423c Binary files /dev/null and b/resources/g2/support/steep_to_flat_4_1.png differ diff --git a/resources/g2/support/steep_to_flat_4_2.png b/resources/g2/support/steep_to_flat_4_2.png new file mode 100644 index 0000000000..797e78c331 Binary files /dev/null and b/resources/g2/support/steep_to_flat_4_2.png differ diff --git a/resources/g2/support/steep_to_flat_4_3.png b/resources/g2/support/steep_to_flat_4_3.png new file mode 100644 index 0000000000..6fca7d13df Binary files /dev/null and b/resources/g2/support/steep_to_flat_4_3.png differ diff --git a/resources/g2/support/steep_to_flat_4_4.png b/resources/g2/support/steep_to_flat_4_4.png new file mode 100644 index 0000000000..5c8fc8d5da Binary files /dev/null and b/resources/g2/support/steep_to_flat_4_4.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_1_1.png b/resources/g2/track/rmc/barrel_roll_left_1_1.png new file mode 100644 index 0000000000..d6fb32d7e6 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_1_1.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_1_2.png b/resources/g2/track/rmc/barrel_roll_left_1_2.png new file mode 100644 index 0000000000..4a9cb4aef6 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_1_2.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_1_3.png b/resources/g2/track/rmc/barrel_roll_left_1_3.png new file mode 100644 index 0000000000..0ad81d5c6e Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_1_3.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_1_4.png b/resources/g2/track/rmc/barrel_roll_left_1_4.png new file mode 100644 index 0000000000..cc447d64ea Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_1_4.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_1_5.png b/resources/g2/track/rmc/barrel_roll_left_1_5.png new file mode 100644 index 0000000000..afdf88261e Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_1_5.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_1_6.png b/resources/g2/track/rmc/barrel_roll_left_1_6.png new file mode 100644 index 0000000000..15a929c415 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_1_6.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_2_1.png b/resources/g2/track/rmc/barrel_roll_left_2_1.png new file mode 100644 index 0000000000..62ab03154e Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_2_1.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_2_2.png b/resources/g2/track/rmc/barrel_roll_left_2_2.png new file mode 100644 index 0000000000..23f6135c09 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_2_2.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_2_3.png b/resources/g2/track/rmc/barrel_roll_left_2_3.png new file mode 100644 index 0000000000..f1beb2bdfe Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_2_3.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_2_4.png b/resources/g2/track/rmc/barrel_roll_left_2_4.png new file mode 100644 index 0000000000..4bb2bea2a3 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_2_4.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_2_5.png b/resources/g2/track/rmc/barrel_roll_left_2_5.png new file mode 100644 index 0000000000..1fd3abdc6c Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_2_5.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_2_6.png b/resources/g2/track/rmc/barrel_roll_left_2_6.png new file mode 100644 index 0000000000..52ce6458cc Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_2_6.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_3_1.png b/resources/g2/track/rmc/barrel_roll_left_3_1.png new file mode 100644 index 0000000000..c60b302253 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_3_1.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_3_2.png b/resources/g2/track/rmc/barrel_roll_left_3_2.png new file mode 100644 index 0000000000..93a3e5ebc6 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_3_2.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_3_3.png b/resources/g2/track/rmc/barrel_roll_left_3_3.png new file mode 100644 index 0000000000..cd0dac9a15 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_3_3.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_3_4.png b/resources/g2/track/rmc/barrel_roll_left_3_4.png new file mode 100644 index 0000000000..e6972acf69 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_3_4.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_3_5.png b/resources/g2/track/rmc/barrel_roll_left_3_5.png new file mode 100644 index 0000000000..0247ded513 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_3_5.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_3_6.png b/resources/g2/track/rmc/barrel_roll_left_3_6.png new file mode 100644 index 0000000000..07c3110345 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_3_6.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_4_1.png b/resources/g2/track/rmc/barrel_roll_left_4_1.png new file mode 100644 index 0000000000..cc8695a967 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_4_1.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_4_2.png b/resources/g2/track/rmc/barrel_roll_left_4_2.png new file mode 100644 index 0000000000..5ac2b39a8f Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_4_2.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_4_3.png b/resources/g2/track/rmc/barrel_roll_left_4_3.png new file mode 100644 index 0000000000..b4f335d68e Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_4_3.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_4_4.png b/resources/g2/track/rmc/barrel_roll_left_4_4.png new file mode 100644 index 0000000000..cf18db6f12 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_4_4.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_4_5.png b/resources/g2/track/rmc/barrel_roll_left_4_5.png new file mode 100644 index 0000000000..db8edec5f0 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_4_5.png differ diff --git a/resources/g2/track/rmc/barrel_roll_left_4_6.png b/resources/g2/track/rmc/barrel_roll_left_4_6.png new file mode 100644 index 0000000000..05bf7532a5 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_left_4_6.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_1_1.png b/resources/g2/track/rmc/barrel_roll_right_1_1.png new file mode 100644 index 0000000000..f24d4479ec Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_1_1.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_1_2.png b/resources/g2/track/rmc/barrel_roll_right_1_2.png new file mode 100644 index 0000000000..5174f66ab0 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_1_2.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_1_3.png b/resources/g2/track/rmc/barrel_roll_right_1_3.png new file mode 100644 index 0000000000..852dfe74db Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_1_3.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_1_4.png b/resources/g2/track/rmc/barrel_roll_right_1_4.png new file mode 100644 index 0000000000..7f204f54e6 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_1_4.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_1_5.png b/resources/g2/track/rmc/barrel_roll_right_1_5.png new file mode 100644 index 0000000000..67669b7c9f Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_1_5.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_1_6.png b/resources/g2/track/rmc/barrel_roll_right_1_6.png new file mode 100644 index 0000000000..2b4024b5cc Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_1_6.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_2_1.png b/resources/g2/track/rmc/barrel_roll_right_2_1.png new file mode 100644 index 0000000000..fff25d4f0d Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_2_1.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_2_2.png b/resources/g2/track/rmc/barrel_roll_right_2_2.png new file mode 100644 index 0000000000..ec2cae1646 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_2_2.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_2_3.png b/resources/g2/track/rmc/barrel_roll_right_2_3.png new file mode 100644 index 0000000000..e1751e73fc Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_2_3.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_2_4.png b/resources/g2/track/rmc/barrel_roll_right_2_4.png new file mode 100644 index 0000000000..bcb9193b0a Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_2_4.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_2_5.png b/resources/g2/track/rmc/barrel_roll_right_2_5.png new file mode 100644 index 0000000000..e6f3a7706c Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_2_5.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_2_6.png b/resources/g2/track/rmc/barrel_roll_right_2_6.png new file mode 100644 index 0000000000..9f1759cd15 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_2_6.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_3_1.png b/resources/g2/track/rmc/barrel_roll_right_3_1.png new file mode 100644 index 0000000000..e064837ee4 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_3_1.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_3_2.png b/resources/g2/track/rmc/barrel_roll_right_3_2.png new file mode 100644 index 0000000000..6d623c085d Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_3_2.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_3_3.png b/resources/g2/track/rmc/barrel_roll_right_3_3.png new file mode 100644 index 0000000000..84b062ca8d Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_3_3.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_3_4.png b/resources/g2/track/rmc/barrel_roll_right_3_4.png new file mode 100644 index 0000000000..c3edcce2c1 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_3_4.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_3_5.png b/resources/g2/track/rmc/barrel_roll_right_3_5.png new file mode 100644 index 0000000000..036e171701 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_3_5.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_3_6.png b/resources/g2/track/rmc/barrel_roll_right_3_6.png new file mode 100644 index 0000000000..4dbcf3e407 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_3_6.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_4_1.png b/resources/g2/track/rmc/barrel_roll_right_4_1.png new file mode 100644 index 0000000000..39680b78bc Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_4_1.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_4_2.png b/resources/g2/track/rmc/barrel_roll_right_4_2.png new file mode 100644 index 0000000000..bf894a4c1a Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_4_2.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_4_3.png b/resources/g2/track/rmc/barrel_roll_right_4_3.png new file mode 100644 index 0000000000..43dbeedf4d Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_4_3.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_4_4.png b/resources/g2/track/rmc/barrel_roll_right_4_4.png new file mode 100644 index 0000000000..a92c07fa87 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_4_4.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_4_5.png b/resources/g2/track/rmc/barrel_roll_right_4_5.png new file mode 100644 index 0000000000..49dbb8f199 Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_4_5.png differ diff --git a/resources/g2/track/rmc/barrel_roll_right_4_6.png b/resources/g2/track/rmc/barrel_roll_right_4_6.png new file mode 100644 index 0000000000..01385e98cf Binary files /dev/null and b/resources/g2/track/rmc/barrel_roll_right_4_6.png differ diff --git a/resources/g2/track/rmc/block_brake_1.png b/resources/g2/track/rmc/block_brake_1.png new file mode 100644 index 0000000000..3ad1673829 Binary files /dev/null and b/resources/g2/track/rmc/block_brake_1.png differ diff --git a/resources/g2/track/rmc/block_brake_2.png b/resources/g2/track/rmc/block_brake_2.png new file mode 100644 index 0000000000..643244c58f Binary files /dev/null and b/resources/g2/track/rmc/block_brake_2.png differ diff --git a/resources/g2/track/rmc/booster_1.png b/resources/g2/track/rmc/booster_1.png new file mode 100644 index 0000000000..a38b5096f6 Binary files /dev/null and b/resources/g2/track/rmc/booster_1.png differ diff --git a/resources/g2/track/rmc/booster_2.png b/resources/g2/track/rmc/booster_2.png new file mode 100644 index 0000000000..817cb2b06a Binary files /dev/null and b/resources/g2/track/rmc/booster_2.png differ diff --git a/resources/g2/track/rmc/brake_1.png b/resources/g2/track/rmc/brake_1.png new file mode 100644 index 0000000000..ecdd9db991 Binary files /dev/null and b/resources/g2/track/rmc/brake_1.png differ diff --git a/resources/g2/track/rmc/brake_2.png b/resources/g2/track/rmc/brake_2.png new file mode 100644 index 0000000000..f3199f050f Binary files /dev/null and b/resources/g2/track/rmc/brake_2.png differ diff --git a/resources/g2/track/rmc/flat_1.png b/resources/g2/track/rmc/flat_1.png new file mode 100644 index 0000000000..2219ce132b Binary files /dev/null and b/resources/g2/track/rmc/flat_1.png differ diff --git a/resources/g2/track/rmc/flat_2.png b/resources/g2/track/rmc/flat_2.png new file mode 100644 index 0000000000..255a37f25e Binary files /dev/null and b/resources/g2/track/rmc/flat_2.png differ diff --git a/resources/g2/track/rmc/flat_diag_1.png b/resources/g2/track/rmc/flat_diag_1.png new file mode 100644 index 0000000000..3b3dc88bbb Binary files /dev/null and b/resources/g2/track/rmc/flat_diag_1.png differ diff --git a/resources/g2/track/rmc/flat_diag_2.png b/resources/g2/track/rmc/flat_diag_2.png new file mode 100644 index 0000000000..309575a9cc Binary files /dev/null and b/resources/g2/track/rmc/flat_diag_2.png differ diff --git a/resources/g2/track/rmc/flat_diag_3.png b/resources/g2/track/rmc/flat_diag_3.png new file mode 100644 index 0000000000..fba5cbed3e Binary files /dev/null and b/resources/g2/track/rmc/flat_diag_3.png differ diff --git a/resources/g2/track/rmc/flat_diag_4.png b/resources/g2/track/rmc/flat_diag_4.png new file mode 100644 index 0000000000..66030b6388 Binary files /dev/null and b/resources/g2/track/rmc/flat_diag_4.png differ diff --git a/resources/g2/track/rmc/flat_diag_lift_1.png b/resources/g2/track/rmc/flat_diag_lift_1.png new file mode 100644 index 0000000000..d1c2cda4ba Binary files /dev/null and b/resources/g2/track/rmc/flat_diag_lift_1.png differ diff --git a/resources/g2/track/rmc/flat_diag_lift_2.png b/resources/g2/track/rmc/flat_diag_lift_2.png new file mode 100644 index 0000000000..32f6f0afea Binary files /dev/null and b/resources/g2/track/rmc/flat_diag_lift_2.png differ diff --git a/resources/g2/track/rmc/flat_diag_lift_3.png b/resources/g2/track/rmc/flat_diag_lift_3.png new file mode 100644 index 0000000000..6939846648 Binary files /dev/null and b/resources/g2/track/rmc/flat_diag_lift_3.png differ diff --git a/resources/g2/track/rmc/flat_diag_lift_4.png b/resources/g2/track/rmc/flat_diag_lift_4.png new file mode 100644 index 0000000000..90a81ed02b Binary files /dev/null and b/resources/g2/track/rmc/flat_diag_lift_4.png differ diff --git a/resources/g2/track/rmc/flat_lift_1.png b/resources/g2/track/rmc/flat_lift_1.png new file mode 100644 index 0000000000..b775eaaab1 Binary files /dev/null and b/resources/g2/track/rmc/flat_lift_1.png differ diff --git a/resources/g2/track/rmc/flat_lift_2.png b/resources/g2/track/rmc/flat_lift_2.png new file mode 100644 index 0000000000..f9a1e289ac Binary files /dev/null and b/resources/g2/track/rmc/flat_lift_2.png differ diff --git a/resources/g2/track/rmc/flat_lift_3.png b/resources/g2/track/rmc/flat_lift_3.png new file mode 100644 index 0000000000..e1e4515e5b Binary files /dev/null and b/resources/g2/track/rmc/flat_lift_3.png differ diff --git a/resources/g2/track/rmc/flat_lift_4.png b/resources/g2/track/rmc/flat_lift_4.png new file mode 100644 index 0000000000..5b475e5a4e Binary files /dev/null and b/resources/g2/track/rmc/flat_lift_4.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_1.png b/resources/g2/track/rmc/flat_to_gentle_up_1.png new file mode 100644 index 0000000000..735b198414 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_1.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_2.png b/resources/g2/track/rmc/flat_to_gentle_up_2.png new file mode 100644 index 0000000000..e06e0f42f0 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_2.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_3.png b/resources/g2/track/rmc/flat_to_gentle_up_3.png new file mode 100644 index 0000000000..f723721dab Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_3.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_4.png b/resources/g2/track/rmc/flat_to_gentle_up_4.png new file mode 100644 index 0000000000..bc4e0e34ce Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_4.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_diag_1.png b/resources/g2/track/rmc/flat_to_gentle_up_diag_1.png new file mode 100644 index 0000000000..e42943116e Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_diag_1.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_diag_2.png b/resources/g2/track/rmc/flat_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..be5d99a85c Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_diag_3.png b/resources/g2/track/rmc/flat_to_gentle_up_diag_3.png new file mode 100644 index 0000000000..78b1f6b225 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_diag_3.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_diag_4.png b/resources/g2/track/rmc/flat_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..defca1ec9f Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_diag_lift_1.png b/resources/g2/track/rmc/flat_to_gentle_up_diag_lift_1.png new file mode 100644 index 0000000000..d399e5f78c Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_diag_lift_1.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_diag_lift_2.png b/resources/g2/track/rmc/flat_to_gentle_up_diag_lift_2.png new file mode 100644 index 0000000000..a671ca0186 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_diag_lift_2.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_diag_lift_3.png b/resources/g2/track/rmc/flat_to_gentle_up_diag_lift_3.png new file mode 100644 index 0000000000..72dd9ae592 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_diag_lift_3.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_diag_lift_4.png b/resources/g2/track/rmc/flat_to_gentle_up_diag_lift_4.png new file mode 100644 index 0000000000..aca0fea29c Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_diag_lift_4.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_left_bank_1.png b/resources/g2/track/rmc/flat_to_gentle_up_left_bank_1.png new file mode 100644 index 0000000000..578fd8d7dc Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_left_bank_1.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_left_bank_2_1.png b/resources/g2/track/rmc/flat_to_gentle_up_left_bank_2_1.png new file mode 100644 index 0000000000..a2864012c5 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_left_bank_2_1.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_left_bank_2_2.png b/resources/g2/track/rmc/flat_to_gentle_up_left_bank_2_2.png new file mode 100644 index 0000000000..68e97392ef Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_left_bank_2_2.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_left_bank_3.png b/resources/g2/track/rmc/flat_to_gentle_up_left_bank_3.png new file mode 100644 index 0000000000..398c07e731 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_left_bank_3.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_left_bank_4.png b/resources/g2/track/rmc/flat_to_gentle_up_left_bank_4.png new file mode 100644 index 0000000000..4898a62224 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_left_bank_4.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_lift_1.png b/resources/g2/track/rmc/flat_to_gentle_up_lift_1.png new file mode 100644 index 0000000000..b8521eca76 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_lift_1.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_lift_2.png b/resources/g2/track/rmc/flat_to_gentle_up_lift_2.png new file mode 100644 index 0000000000..f078e452f4 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_lift_2.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_lift_3.png b/resources/g2/track/rmc/flat_to_gentle_up_lift_3.png new file mode 100644 index 0000000000..7434ba790b Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_lift_3.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_lift_4.png b/resources/g2/track/rmc/flat_to_gentle_up_lift_4.png new file mode 100644 index 0000000000..0812f41f0b Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_lift_4.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_right_bank_1.png b/resources/g2/track/rmc/flat_to_gentle_up_right_bank_1.png new file mode 100644 index 0000000000..23daa6a9a9 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_right_bank_1.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_right_bank_2.png b/resources/g2/track/rmc/flat_to_gentle_up_right_bank_2.png new file mode 100644 index 0000000000..05f64478ec Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_right_bank_2.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_right_bank_3_1.png b/resources/g2/track/rmc/flat_to_gentle_up_right_bank_3_1.png new file mode 100644 index 0000000000..19d932ed32 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_right_bank_3_1.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_right_bank_3_2.png b/resources/g2/track/rmc/flat_to_gentle_up_right_bank_3_2.png new file mode 100644 index 0000000000..f187fb7739 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_right_bank_3_2.png differ diff --git a/resources/g2/track/rmc/flat_to_gentle_up_right_bank_4.png b/resources/g2/track/rmc/flat_to_gentle_up_right_bank_4.png new file mode 100644 index 0000000000..b0b09dc840 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_gentle_up_right_bank_4.png differ diff --git a/resources/g2/track/rmc/flat_to_left_bank_1_1.png b/resources/g2/track/rmc/flat_to_left_bank_1_1.png new file mode 100644 index 0000000000..a94585f00a Binary files /dev/null and b/resources/g2/track/rmc/flat_to_left_bank_1_1.png differ diff --git a/resources/g2/track/rmc/flat_to_left_bank_1_2.png b/resources/g2/track/rmc/flat_to_left_bank_1_2.png new file mode 100644 index 0000000000..da7840d779 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_left_bank_1_2.png differ diff --git a/resources/g2/track/rmc/flat_to_left_bank_2_1.png b/resources/g2/track/rmc/flat_to_left_bank_2_1.png new file mode 100644 index 0000000000..80f5b41785 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_left_bank_2_1.png differ diff --git a/resources/g2/track/rmc/flat_to_left_bank_2_2.png b/resources/g2/track/rmc/flat_to_left_bank_2_2.png new file mode 100644 index 0000000000..87765b5346 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_left_bank_2_2.png differ diff --git a/resources/g2/track/rmc/flat_to_left_bank_3.png b/resources/g2/track/rmc/flat_to_left_bank_3.png new file mode 100644 index 0000000000..464347bc5e Binary files /dev/null and b/resources/g2/track/rmc/flat_to_left_bank_3.png differ diff --git a/resources/g2/track/rmc/flat_to_left_bank_4.png b/resources/g2/track/rmc/flat_to_left_bank_4.png new file mode 100644 index 0000000000..e192fa374e Binary files /dev/null and b/resources/g2/track/rmc/flat_to_left_bank_4.png differ diff --git a/resources/g2/track/rmc/flat_to_left_bank_diag_1_1.png b/resources/g2/track/rmc/flat_to_left_bank_diag_1_1.png new file mode 100644 index 0000000000..fdc820d41e Binary files /dev/null and b/resources/g2/track/rmc/flat_to_left_bank_diag_1_1.png differ diff --git a/resources/g2/track/rmc/flat_to_left_bank_diag_1_2.png b/resources/g2/track/rmc/flat_to_left_bank_diag_1_2.png new file mode 100644 index 0000000000..9cf7af1679 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_left_bank_diag_1_2.png differ diff --git a/resources/g2/track/rmc/flat_to_left_bank_diag_2.png b/resources/g2/track/rmc/flat_to_left_bank_diag_2.png new file mode 100644 index 0000000000..325b482851 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_left_bank_diag_2.png differ diff --git a/resources/g2/track/rmc/flat_to_left_bank_diag_3.png b/resources/g2/track/rmc/flat_to_left_bank_diag_3.png new file mode 100644 index 0000000000..90c0406603 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_left_bank_diag_3.png differ diff --git a/resources/g2/track/rmc/flat_to_left_bank_diag_4.png b/resources/g2/track/rmc/flat_to_left_bank_diag_4.png new file mode 100644 index 0000000000..26418d6615 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_left_bank_diag_4.png differ diff --git a/resources/g2/track/rmc/flat_to_right_bank_1.png b/resources/g2/track/rmc/flat_to_right_bank_1.png new file mode 100644 index 0000000000..1ad11efe44 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_right_bank_1.png differ diff --git a/resources/g2/track/rmc/flat_to_right_bank_2.png b/resources/g2/track/rmc/flat_to_right_bank_2.png new file mode 100644 index 0000000000..9275faca86 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_right_bank_2.png differ diff --git a/resources/g2/track/rmc/flat_to_right_bank_3_1.png b/resources/g2/track/rmc/flat_to_right_bank_3_1.png new file mode 100644 index 0000000000..55e6fc81d1 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_right_bank_3_1.png differ diff --git a/resources/g2/track/rmc/flat_to_right_bank_3_2.png b/resources/g2/track/rmc/flat_to_right_bank_3_2.png new file mode 100644 index 0000000000..a075ecb120 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_right_bank_3_2.png differ diff --git a/resources/g2/track/rmc/flat_to_right_bank_4_1.png b/resources/g2/track/rmc/flat_to_right_bank_4_1.png new file mode 100644 index 0000000000..06134a3589 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_right_bank_4_1.png differ diff --git a/resources/g2/track/rmc/flat_to_right_bank_4_2.png b/resources/g2/track/rmc/flat_to_right_bank_4_2.png new file mode 100644 index 0000000000..f4134b4432 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_right_bank_4_2.png differ diff --git a/resources/g2/track/rmc/flat_to_right_bank_diag_1.png b/resources/g2/track/rmc/flat_to_right_bank_diag_1.png new file mode 100644 index 0000000000..db7f8db278 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_right_bank_diag_1.png differ diff --git a/resources/g2/track/rmc/flat_to_right_bank_diag_2.png b/resources/g2/track/rmc/flat_to_right_bank_diag_2.png new file mode 100644 index 0000000000..428b0a810c Binary files /dev/null and b/resources/g2/track/rmc/flat_to_right_bank_diag_2.png differ diff --git a/resources/g2/track/rmc/flat_to_right_bank_diag_3_1.png b/resources/g2/track/rmc/flat_to_right_bank_diag_3_1.png new file mode 100644 index 0000000000..b23a34f40d Binary files /dev/null and b/resources/g2/track/rmc/flat_to_right_bank_diag_3_1.png differ diff --git a/resources/g2/track/rmc/flat_to_right_bank_diag_3_2.png b/resources/g2/track/rmc/flat_to_right_bank_diag_3_2.png new file mode 100644 index 0000000000..12020d4529 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_right_bank_diag_3_2.png differ diff --git a/resources/g2/track/rmc/flat_to_right_bank_diag_4.png b/resources/g2/track/rmc/flat_to_right_bank_diag_4.png new file mode 100644 index 0000000000..4765b7b543 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_right_bank_diag_4.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_1_1.png b/resources/g2/track/rmc/flat_to_steep_up_1_1.png new file mode 100644 index 0000000000..4975372405 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_1_1.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_1_2.png b/resources/g2/track/rmc/flat_to_steep_up_1_2.png new file mode 100644 index 0000000000..102085d0b5 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_1_2.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_1_3.png b/resources/g2/track/rmc/flat_to_steep_up_1_3.png new file mode 100644 index 0000000000..e3f4a10657 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_1_3.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_1_4.png b/resources/g2/track/rmc/flat_to_steep_up_1_4.png new file mode 100644 index 0000000000..4237419083 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_1_4.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_2_1.png b/resources/g2/track/rmc/flat_to_steep_up_2_1.png new file mode 100644 index 0000000000..85628ed8eb Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_2_1.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_2_2.png b/resources/g2/track/rmc/flat_to_steep_up_2_2.png new file mode 100644 index 0000000000..c599385849 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_2_2.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_2_3.png b/resources/g2/track/rmc/flat_to_steep_up_2_3.png new file mode 100644 index 0000000000..6aff97b2d0 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_2_3.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_2_4.png b/resources/g2/track/rmc/flat_to_steep_up_2_4.png new file mode 100644 index 0000000000..da4aa78da7 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_2_4.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_3_1.png b/resources/g2/track/rmc/flat_to_steep_up_3_1.png new file mode 100644 index 0000000000..c35fe67b5c Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_3_1.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_3_2.png b/resources/g2/track/rmc/flat_to_steep_up_3_2.png new file mode 100644 index 0000000000..33de9750ec Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_3_2.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_3_3.png b/resources/g2/track/rmc/flat_to_steep_up_3_3.png new file mode 100644 index 0000000000..a8d9017071 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_3_3.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_3_4.png b/resources/g2/track/rmc/flat_to_steep_up_3_4.png new file mode 100644 index 0000000000..737eb4e23a Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_3_4.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_4_1.png b/resources/g2/track/rmc/flat_to_steep_up_4_1.png new file mode 100644 index 0000000000..e47c080860 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_4_1.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_4_2.png b/resources/g2/track/rmc/flat_to_steep_up_4_2.png new file mode 100644 index 0000000000..28eb453671 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_4_2.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_4_3.png b/resources/g2/track/rmc/flat_to_steep_up_4_3.png new file mode 100644 index 0000000000..5dfa594b4f Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_4_3.png differ diff --git a/resources/g2/track/rmc/flat_to_steep_up_4_4.png b/resources/g2/track/rmc/flat_to_steep_up_4_4.png new file mode 100644 index 0000000000..d2693bbd69 Binary files /dev/null and b/resources/g2/track/rmc/flat_to_steep_up_4_4.png differ diff --git a/resources/g2/track/rmc/gentle_1.png b/resources/g2/track/rmc/gentle_1.png new file mode 100644 index 0000000000..97e4365d4a Binary files /dev/null and b/resources/g2/track/rmc/gentle_1.png differ diff --git a/resources/g2/track/rmc/gentle_2.png b/resources/g2/track/rmc/gentle_2.png new file mode 100644 index 0000000000..65ba00b448 Binary files /dev/null and b/resources/g2/track/rmc/gentle_2.png differ diff --git a/resources/g2/track/rmc/gentle_3.png b/resources/g2/track/rmc/gentle_3.png new file mode 100644 index 0000000000..989548b411 Binary files /dev/null and b/resources/g2/track/rmc/gentle_3.png differ diff --git a/resources/g2/track/rmc/gentle_4.png b/resources/g2/track/rmc/gentle_4.png new file mode 100644 index 0000000000..f5923968b0 Binary files /dev/null and b/resources/g2/track/rmc/gentle_4.png differ diff --git a/resources/g2/track/rmc/gentle_diag_1.png b/resources/g2/track/rmc/gentle_diag_1.png new file mode 100644 index 0000000000..d18ef5917d Binary files /dev/null and b/resources/g2/track/rmc/gentle_diag_1.png differ diff --git a/resources/g2/track/rmc/gentle_diag_2.png b/resources/g2/track/rmc/gentle_diag_2.png new file mode 100644 index 0000000000..636acc2745 Binary files /dev/null and b/resources/g2/track/rmc/gentle_diag_2.png differ diff --git a/resources/g2/track/rmc/gentle_diag_3.png b/resources/g2/track/rmc/gentle_diag_3.png new file mode 100644 index 0000000000..1a40981cf2 Binary files /dev/null and b/resources/g2/track/rmc/gentle_diag_3.png differ diff --git a/resources/g2/track/rmc/gentle_diag_4.png b/resources/g2/track/rmc/gentle_diag_4.png new file mode 100644 index 0000000000..8a48c6aba2 Binary files /dev/null and b/resources/g2/track/rmc/gentle_diag_4.png differ diff --git a/resources/g2/track/rmc/gentle_diag_lift_1.png b/resources/g2/track/rmc/gentle_diag_lift_1.png new file mode 100644 index 0000000000..3f2a3b0523 Binary files /dev/null and b/resources/g2/track/rmc/gentle_diag_lift_1.png differ diff --git a/resources/g2/track/rmc/gentle_diag_lift_2.png b/resources/g2/track/rmc/gentle_diag_lift_2.png new file mode 100644 index 0000000000..3729104c19 Binary files /dev/null and b/resources/g2/track/rmc/gentle_diag_lift_2.png differ diff --git a/resources/g2/track/rmc/gentle_diag_lift_3.png b/resources/g2/track/rmc/gentle_diag_lift_3.png new file mode 100644 index 0000000000..09220fb3e3 Binary files /dev/null and b/resources/g2/track/rmc/gentle_diag_lift_3.png differ diff --git a/resources/g2/track/rmc/gentle_diag_lift_4.png b/resources/g2/track/rmc/gentle_diag_lift_4.png new file mode 100644 index 0000000000..57047f74a8 Binary files /dev/null and b/resources/g2/track/rmc/gentle_diag_lift_4.png differ diff --git a/resources/g2/track/rmc/gentle_lift_1.png b/resources/g2/track/rmc/gentle_lift_1.png new file mode 100644 index 0000000000..4447a13d23 Binary files /dev/null and b/resources/g2/track/rmc/gentle_lift_1.png differ diff --git a/resources/g2/track/rmc/gentle_lift_2.png b/resources/g2/track/rmc/gentle_lift_2.png new file mode 100644 index 0000000000..f782dc06c8 Binary files /dev/null and b/resources/g2/track/rmc/gentle_lift_2.png differ diff --git a/resources/g2/track/rmc/gentle_lift_3.png b/resources/g2/track/rmc/gentle_lift_3.png new file mode 100644 index 0000000000..9a8c6180fa Binary files /dev/null and b/resources/g2/track/rmc/gentle_lift_3.png differ diff --git a/resources/g2/track/rmc/gentle_lift_4.png b/resources/g2/track/rmc/gentle_lift_4.png new file mode 100644 index 0000000000..70acf5c306 Binary files /dev/null and b/resources/g2/track/rmc/gentle_lift_4.png differ diff --git a/resources/g2/track/rmc/gentle_to_flat_up_diag_1.png b/resources/g2/track/rmc/gentle_to_flat_up_diag_1.png new file mode 100644 index 0000000000..756ea1fe15 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_flat_up_diag_1.png differ diff --git a/resources/g2/track/rmc/gentle_to_flat_up_diag_2.png b/resources/g2/track/rmc/gentle_to_flat_up_diag_2.png new file mode 100644 index 0000000000..5787da1bdd Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_flat_up_diag_2.png differ diff --git a/resources/g2/track/rmc/gentle_to_flat_up_diag_3.png b/resources/g2/track/rmc/gentle_to_flat_up_diag_3.png new file mode 100644 index 0000000000..0ed3f80c76 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_flat_up_diag_3.png differ diff --git a/resources/g2/track/rmc/gentle_to_flat_up_diag_4.png b/resources/g2/track/rmc/gentle_to_flat_up_diag_4.png new file mode 100644 index 0000000000..66cbf97094 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_flat_up_diag_4.png differ diff --git a/resources/g2/track/rmc/gentle_to_flat_up_diag_lift_1.png b/resources/g2/track/rmc/gentle_to_flat_up_diag_lift_1.png new file mode 100644 index 0000000000..5c7ca2d4bd Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_flat_up_diag_lift_1.png differ diff --git a/resources/g2/track/rmc/gentle_to_flat_up_diag_lift_2.png b/resources/g2/track/rmc/gentle_to_flat_up_diag_lift_2.png new file mode 100644 index 0000000000..a5bf97f41c Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_flat_up_diag_lift_2.png differ diff --git a/resources/g2/track/rmc/gentle_to_flat_up_diag_lift_3.png b/resources/g2/track/rmc/gentle_to_flat_up_diag_lift_3.png new file mode 100644 index 0000000000..0f5c63b553 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_flat_up_diag_lift_3.png differ diff --git a/resources/g2/track/rmc/gentle_to_flat_up_diag_lift_4.png b/resources/g2/track/rmc/gentle_to_flat_up_diag_lift_4.png new file mode 100644 index 0000000000..f39b9a350a Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_flat_up_diag_lift_4.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_1.png b/resources/g2/track/rmc/gentle_to_steep_up_1.png new file mode 100644 index 0000000000..9287cc807d Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_1.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_2_1.png b/resources/g2/track/rmc/gentle_to_steep_up_2_1.png new file mode 100644 index 0000000000..ba0ac664f6 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_2_1.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_2_2.png b/resources/g2/track/rmc/gentle_to_steep_up_2_2.png new file mode 100644 index 0000000000..f41a358cda Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_2_2.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_3_1.png b/resources/g2/track/rmc/gentle_to_steep_up_3_1.png new file mode 100644 index 0000000000..bbc82a40d6 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_3_1.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_3_2.png b/resources/g2/track/rmc/gentle_to_steep_up_3_2.png new file mode 100644 index 0000000000..22f17fa51d Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_3_2.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_4.png b/resources/g2/track/rmc/gentle_to_steep_up_4.png new file mode 100644 index 0000000000..a72f81c54b Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_4.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_diag_1.png b/resources/g2/track/rmc/gentle_to_steep_up_diag_1.png new file mode 100644 index 0000000000..21fc1d89ca Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_diag_1.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_diag_2.png b/resources/g2/track/rmc/gentle_to_steep_up_diag_2.png new file mode 100644 index 0000000000..cb472a5ab5 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_diag_2.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_diag_3.png b/resources/g2/track/rmc/gentle_to_steep_up_diag_3.png new file mode 100644 index 0000000000..5e924bef18 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_diag_3.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_diag_4.png b/resources/g2/track/rmc/gentle_to_steep_up_diag_4.png new file mode 100644 index 0000000000..9b5908b7e1 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_diag_4.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_diag_lift_1.png b/resources/g2/track/rmc/gentle_to_steep_up_diag_lift_1.png new file mode 100644 index 0000000000..c400e3c2a7 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_diag_lift_1.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_diag_lift_2.png b/resources/g2/track/rmc/gentle_to_steep_up_diag_lift_2.png new file mode 100644 index 0000000000..98cac3a180 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_diag_lift_2.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_diag_lift_3.png b/resources/g2/track/rmc/gentle_to_steep_up_diag_lift_3.png new file mode 100644 index 0000000000..a1d01ce1b2 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_diag_lift_3.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_diag_lift_4.png b/resources/g2/track/rmc/gentle_to_steep_up_diag_lift_4.png new file mode 100644 index 0000000000..8f46a30fc9 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_diag_lift_4.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_lift_1.png b/resources/g2/track/rmc/gentle_to_steep_up_lift_1.png new file mode 100644 index 0000000000..c84ef372d4 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_lift_1.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_lift_2_1.png b/resources/g2/track/rmc/gentle_to_steep_up_lift_2_1.png new file mode 100644 index 0000000000..d2a45ca94e Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_lift_2_1.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_lift_2_2.png b/resources/g2/track/rmc/gentle_to_steep_up_lift_2_2.png new file mode 100644 index 0000000000..d81672cf06 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_lift_2_2.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_lift_3_1.png b/resources/g2/track/rmc/gentle_to_steep_up_lift_3_1.png new file mode 100644 index 0000000000..9587b867c4 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_lift_3_1.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_lift_3_2.png b/resources/g2/track/rmc/gentle_to_steep_up_lift_3_2.png new file mode 100644 index 0000000000..0e33572efa Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_lift_3_2.png differ diff --git a/resources/g2/track/rmc/gentle_to_steep_up_lift_4.png b/resources/g2/track/rmc/gentle_to_steep_up_lift_4.png new file mode 100644 index 0000000000..0965870529 Binary files /dev/null and b/resources/g2/track/rmc/gentle_to_steep_up_lift_4.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_1.png b/resources/g2/track/rmc/gentle_up_left_bank_1.png new file mode 100644 index 0000000000..935e241270 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_2.png b/resources/g2/track/rmc/gentle_up_left_bank_2.png new file mode 100644 index 0000000000..b7d48126fa Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_3.png b/resources/g2/track/rmc/gentle_up_left_bank_3.png new file mode 100644 index 0000000000..b17dffc0a9 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_3.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_4.png b/resources/g2/track/rmc/gentle_up_left_bank_4.png new file mode 100644 index 0000000000..c8884e93d6 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_4.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_flat_1.png b/resources/g2/track/rmc/gentle_up_left_bank_to_flat_1.png new file mode 100644 index 0000000000..1c6a14f7e2 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_flat_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_flat_2_1.png b/resources/g2/track/rmc/gentle_up_left_bank_to_flat_2_1.png new file mode 100644 index 0000000000..83eeb2db11 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_flat_2_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_flat_2_2.png b/resources/g2/track/rmc/gentle_up_left_bank_to_flat_2_2.png new file mode 100644 index 0000000000..a97034b354 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_flat_2_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_flat_3.png b/resources/g2/track/rmc/gentle_up_left_bank_to_flat_3.png new file mode 100644 index 0000000000..a789029afa Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_flat_3.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_flat_4.png b/resources/g2/track/rmc/gentle_up_left_bank_to_flat_4.png new file mode 100644 index 0000000000..59961401a7 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_flat_4.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_1.png b/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_1.png new file mode 100644 index 0000000000..a3509cb488 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_2_1.png b/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..82cce536ba Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_2_2.png b/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..418c3ed5b1 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_3.png b/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_3.png new file mode 100644 index 0000000000..8d232f5273 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_3.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_4.png b/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_4.png new file mode 100644 index 0000000000..b423b95b67 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_gentle_up_4.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_1_1.png b/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_1_1.png new file mode 100644 index 0000000000..f70b36db7f Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_1_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_1_2.png b/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_1_2.png new file mode 100644 index 0000000000..cd38188842 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_1_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_2_1.png b/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_2_1.png new file mode 100644 index 0000000000..f38093542c Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_2_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_2_2.png b/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_2_2.png new file mode 100644 index 0000000000..ab3676b5db Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_2_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_3.png b/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_3.png new file mode 100644 index 0000000000..39bae3c17a Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_3.png differ diff --git a/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_4.png b/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_4.png new file mode 100644 index 0000000000..fdbb8a2597 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_left_bank_to_left_bank_4.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_1.png b/resources/g2/track/rmc/gentle_up_right_bank_1.png new file mode 100644 index 0000000000..a003f6a2c1 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_2.png b/resources/g2/track/rmc/gentle_up_right_bank_2.png new file mode 100644 index 0000000000..afe66d56ac Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_3.png b/resources/g2/track/rmc/gentle_up_right_bank_3.png new file mode 100644 index 0000000000..8e9efecc27 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_3.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_4.png b/resources/g2/track/rmc/gentle_up_right_bank_4.png new file mode 100644 index 0000000000..30070a83c4 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_4.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_flat_1.png b/resources/g2/track/rmc/gentle_up_right_bank_to_flat_1.png new file mode 100644 index 0000000000..52f4f0c6d1 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_flat_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_flat_2.png b/resources/g2/track/rmc/gentle_up_right_bank_to_flat_2.png new file mode 100644 index 0000000000..90d6f1f55b Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_flat_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_flat_3_1.png b/resources/g2/track/rmc/gentle_up_right_bank_to_flat_3_1.png new file mode 100644 index 0000000000..9bf2ee3c42 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_flat_3_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_flat_3_2.png b/resources/g2/track/rmc/gentle_up_right_bank_to_flat_3_2.png new file mode 100644 index 0000000000..f662c5e4b4 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_flat_3_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_flat_4.png b/resources/g2/track/rmc/gentle_up_right_bank_to_flat_4.png new file mode 100644 index 0000000000..7271dcd32c Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_flat_4.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_1.png b/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_1.png new file mode 100644 index 0000000000..bcebeb9cca Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_2.png b/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_2.png new file mode 100644 index 0000000000..92b30bc0df Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_3_1.png b/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..193bc601f8 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_3_2.png b/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..139b2d07f5 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_4.png b/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_4.png new file mode 100644 index 0000000000..636952b0e1 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_gentle_up_4.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_1.png b/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_1.png new file mode 100644 index 0000000000..d622d08483 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_2.png b/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_2.png new file mode 100644 index 0000000000..56a83d19fb Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_3_1.png b/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_3_1.png new file mode 100644 index 0000000000..08e315d5df Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_3_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_3_2.png b/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_3_2.png new file mode 100644 index 0000000000..422662de07 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_3_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_4_1.png b/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_4_1.png new file mode 100644 index 0000000000..87abbc419b Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_4_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_4_2.png b/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_4_2.png new file mode 100644 index 0000000000..45b1edde47 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_right_bank_to_right_bank_4_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_flat_1.png b/resources/g2/track/rmc/gentle_up_to_flat_1.png new file mode 100644 index 0000000000..33325658f2 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_flat_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_flat_2.png b/resources/g2/track/rmc/gentle_up_to_flat_2.png new file mode 100644 index 0000000000..6c6ca1d5a3 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_flat_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_flat_3.png b/resources/g2/track/rmc/gentle_up_to_flat_3.png new file mode 100644 index 0000000000..d8a28d6452 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_flat_3.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_flat_4.png b/resources/g2/track/rmc/gentle_up_to_flat_4.png new file mode 100644 index 0000000000..72762b22ee Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_flat_4.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_flat_lift_1.png b/resources/g2/track/rmc/gentle_up_to_flat_lift_1.png new file mode 100644 index 0000000000..b0d88faa66 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_flat_lift_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_flat_lift_2.png b/resources/g2/track/rmc/gentle_up_to_flat_lift_2.png new file mode 100644 index 0000000000..fd06473b2b Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_flat_lift_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_flat_lift_3.png b/resources/g2/track/rmc/gentle_up_to_flat_lift_3.png new file mode 100644 index 0000000000..3996d3818d Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_flat_lift_3.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_flat_lift_4.png b/resources/g2/track/rmc/gentle_up_to_flat_lift_4.png new file mode 100644 index 0000000000..829e6bac2a Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_flat_lift_4.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_1.png b/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_1.png new file mode 100644 index 0000000000..eb0d4df2c4 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_2_1.png b/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_2_1.png new file mode 100644 index 0000000000..119bb6926f Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_2_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_2_2.png b/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_2_2.png new file mode 100644 index 0000000000..9668dac418 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_2_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_3.png b/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_3.png new file mode 100644 index 0000000000..14668a2145 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_3.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_4.png b/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_4.png new file mode 100644 index 0000000000..8f930c485c Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_gentle_up_left_bank_4.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_1.png b/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_1.png new file mode 100644 index 0000000000..d43bc9af54 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_2.png b/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_2.png new file mode 100644 index 0000000000..356a86b678 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_3_1.png b/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_3_1.png new file mode 100644 index 0000000000..9d39313ebb Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_3_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_3_2.png b/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_3_2.png new file mode 100644 index 0000000000..5e7a65dd69 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_3_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_4.png b/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_4.png new file mode 100644 index 0000000000..e940e4fda7 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_gentle_up_right_bank_4.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_left_bank_1_1.png b/resources/g2/track/rmc/gentle_up_to_left_bank_1_1.png new file mode 100644 index 0000000000..d1d2266fa4 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_left_bank_1_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_left_bank_1_2.png b/resources/g2/track/rmc/gentle_up_to_left_bank_1_2.png new file mode 100644 index 0000000000..83dddc29b1 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_left_bank_1_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_left_bank_2_1.png b/resources/g2/track/rmc/gentle_up_to_left_bank_2_1.png new file mode 100644 index 0000000000..9a3c101d6a Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_left_bank_2_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_left_bank_2_2.png b/resources/g2/track/rmc/gentle_up_to_left_bank_2_2.png new file mode 100644 index 0000000000..525e03eec5 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_left_bank_2_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_left_bank_3.png b/resources/g2/track/rmc/gentle_up_to_left_bank_3.png new file mode 100644 index 0000000000..624e5cb949 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_left_bank_3.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_left_bank_4.png b/resources/g2/track/rmc/gentle_up_to_left_bank_4.png new file mode 100644 index 0000000000..9dd4e4adab Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_left_bank_4.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_left_bank_diag_1_1.png b/resources/g2/track/rmc/gentle_up_to_left_bank_diag_1_1.png new file mode 100644 index 0000000000..6ce1f63158 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_left_bank_diag_1_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_left_bank_diag_1_2.png b/resources/g2/track/rmc/gentle_up_to_left_bank_diag_1_2.png new file mode 100644 index 0000000000..e83d9bedb8 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_left_bank_diag_1_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_left_bank_diag_2.png b/resources/g2/track/rmc/gentle_up_to_left_bank_diag_2.png new file mode 100644 index 0000000000..42913292bc Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_left_bank_diag_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_left_bank_diag_3.png b/resources/g2/track/rmc/gentle_up_to_left_bank_diag_3.png new file mode 100644 index 0000000000..335e59e12f Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_left_bank_diag_3.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_left_bank_diag_4.png b/resources/g2/track/rmc/gentle_up_to_left_bank_diag_4.png new file mode 100644 index 0000000000..db771e337f Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_left_bank_diag_4.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_right_bank_1.png b/resources/g2/track/rmc/gentle_up_to_right_bank_1.png new file mode 100644 index 0000000000..272948b559 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_right_bank_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_right_bank_2.png b/resources/g2/track/rmc/gentle_up_to_right_bank_2.png new file mode 100644 index 0000000000..e09a10aaa2 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_right_bank_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_right_bank_3_1.png b/resources/g2/track/rmc/gentle_up_to_right_bank_3_1.png new file mode 100644 index 0000000000..d1483a0b2e Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_right_bank_3_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_right_bank_3_2.png b/resources/g2/track/rmc/gentle_up_to_right_bank_3_2.png new file mode 100644 index 0000000000..e1d263495c Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_right_bank_3_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_right_bank_4_1.png b/resources/g2/track/rmc/gentle_up_to_right_bank_4_1.png new file mode 100644 index 0000000000..cd16630fa9 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_right_bank_4_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_right_bank_4_2.png b/resources/g2/track/rmc/gentle_up_to_right_bank_4_2.png new file mode 100644 index 0000000000..c0c8a92f63 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_right_bank_4_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_right_bank_diag_1.png b/resources/g2/track/rmc/gentle_up_to_right_bank_diag_1.png new file mode 100644 index 0000000000..49e91673c9 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_right_bank_diag_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_right_bank_diag_2.png b/resources/g2/track/rmc/gentle_up_to_right_bank_diag_2.png new file mode 100644 index 0000000000..be9aa3ef2d Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_right_bank_diag_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_right_bank_diag_3_1.png b/resources/g2/track/rmc/gentle_up_to_right_bank_diag_3_1.png new file mode 100644 index 0000000000..a1c3bad49f Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_right_bank_diag_3_1.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_right_bank_diag_3_2.png b/resources/g2/track/rmc/gentle_up_to_right_bank_diag_3_2.png new file mode 100644 index 0000000000..0f8782b2f5 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_right_bank_diag_3_2.png differ diff --git a/resources/g2/track/rmc/gentle_up_to_right_bank_diag_4.png b/resources/g2/track/rmc/gentle_up_to_right_bank_diag_4.png new file mode 100644 index 0000000000..13ee7e4181 Binary files /dev/null and b/resources/g2/track/rmc/gentle_up_to_right_bank_diag_4.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_1_1.png b/resources/g2/track/rmc/large_turn_left_to_diag_1_1.png new file mode 100644 index 0000000000..51206a04ca Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_1_1.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_1_2.png b/resources/g2/track/rmc/large_turn_left_to_diag_1_2.png new file mode 100644 index 0000000000..5afa725923 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_1_2.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_1_3.png b/resources/g2/track/rmc/large_turn_left_to_diag_1_3.png new file mode 100644 index 0000000000..3ed1ed7b67 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_1_3.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_1_4.png b/resources/g2/track/rmc/large_turn_left_to_diag_1_4.png new file mode 100644 index 0000000000..1d0d3d8615 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_1_4.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_2_1.png b/resources/g2/track/rmc/large_turn_left_to_diag_2_1.png new file mode 100644 index 0000000000..44ff0af48d Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_2_1.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_2_2.png b/resources/g2/track/rmc/large_turn_left_to_diag_2_2.png new file mode 100644 index 0000000000..3b55fedeed Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_2_2.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_2_3.png b/resources/g2/track/rmc/large_turn_left_to_diag_2_3.png new file mode 100644 index 0000000000..67de246d50 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_2_3.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_2_4.png b/resources/g2/track/rmc/large_turn_left_to_diag_2_4.png new file mode 100644 index 0000000000..266ba05eeb Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_2_4.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_3_1.png b/resources/g2/track/rmc/large_turn_left_to_diag_3_1.png new file mode 100644 index 0000000000..42f30b6455 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_3_1.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_3_2.png b/resources/g2/track/rmc/large_turn_left_to_diag_3_2.png new file mode 100644 index 0000000000..bd3b6e8c9e Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_3_2.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_3_3.png b/resources/g2/track/rmc/large_turn_left_to_diag_3_3.png new file mode 100644 index 0000000000..f5bf92f920 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_3_3.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_3_4.png b/resources/g2/track/rmc/large_turn_left_to_diag_3_4.png new file mode 100644 index 0000000000..fcd7826689 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_3_4.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_4_1.png b/resources/g2/track/rmc/large_turn_left_to_diag_4_1.png new file mode 100644 index 0000000000..708e535f54 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_4_1.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_4_2.png b/resources/g2/track/rmc/large_turn_left_to_diag_4_2.png new file mode 100644 index 0000000000..2bbc58f606 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_4_2.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_4_3.png b/resources/g2/track/rmc/large_turn_left_to_diag_4_3.png new file mode 100644 index 0000000000..4c02a794a4 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_4_3.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_4_4.png b/resources/g2/track/rmc/large_turn_left_to_diag_4_4.png new file mode 100644 index 0000000000..f01d5b4c79 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_4_4.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_1.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_1.png new file mode 100644 index 0000000000..65e9fca482 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_1.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_2.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_2.png new file mode 100644 index 0000000000..045d1f0ccc Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_2.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_3.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_3.png new file mode 100644 index 0000000000..a57470e76b Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_3.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_4.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_4.png new file mode 100644 index 0000000000..979b5f4152 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_4.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_5.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_5.png new file mode 100644 index 0000000000..fc1e7b00a6 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_1_5.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_1.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_1.png new file mode 100644 index 0000000000..2a8d41c090 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_1.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_2.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_2.png new file mode 100644 index 0000000000..ce7efc73e4 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_2.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_3.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_3.png new file mode 100644 index 0000000000..a15d705b43 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_3.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_4.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_4.png new file mode 100644 index 0000000000..b6d455b2d2 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_4.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_5.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_5.png new file mode 100644 index 0000000000..fb7f4a8241 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_5.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_6.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_6.png new file mode 100644 index 0000000000..631379bea6 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_6.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_7.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_7.png new file mode 100644 index 0000000000..6fab88d9f1 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_2_7.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_3_1.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_3_1.png new file mode 100644 index 0000000000..e58c770257 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_3_1.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_3_2.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_3_2.png new file mode 100644 index 0000000000..fa2fe00364 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_3_2.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_3_3.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_3_3.png new file mode 100644 index 0000000000..516b5bbb46 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_3_3.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_3_4.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_3_4.png new file mode 100644 index 0000000000..f20d3b18b6 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_3_4.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_4_1.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_4_1.png new file mode 100644 index 0000000000..38d2c9bfbb Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_4_1.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_4_2.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_4_2.png new file mode 100644 index 0000000000..d2e7fcf617 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_4_2.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_4_3.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_4_3.png new file mode 100644 index 0000000000..1312b6cf24 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_4_3.png differ diff --git a/resources/g2/track/rmc/large_turn_left_to_diag_bank_4_4.png b/resources/g2/track/rmc/large_turn_left_to_diag_bank_4_4.png new file mode 100644 index 0000000000..ef845c7361 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_left_to_diag_bank_4_4.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_1_1.png b/resources/g2/track/rmc/large_turn_right_to_diag_1_1.png new file mode 100644 index 0000000000..7c8c59e5c2 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_1_1.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_1_2.png b/resources/g2/track/rmc/large_turn_right_to_diag_1_2.png new file mode 100644 index 0000000000..1b5c92dab7 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_1_2.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_1_3.png b/resources/g2/track/rmc/large_turn_right_to_diag_1_3.png new file mode 100644 index 0000000000..619afe933f Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_1_3.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_1_4.png b/resources/g2/track/rmc/large_turn_right_to_diag_1_4.png new file mode 100644 index 0000000000..d591e7c599 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_1_4.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_2_1.png b/resources/g2/track/rmc/large_turn_right_to_diag_2_1.png new file mode 100644 index 0000000000..5d4f72b257 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_2_1.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_2_2.png b/resources/g2/track/rmc/large_turn_right_to_diag_2_2.png new file mode 100644 index 0000000000..1c3a823284 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_2_2.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_2_3.png b/resources/g2/track/rmc/large_turn_right_to_diag_2_3.png new file mode 100644 index 0000000000..d2a58859ef Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_2_3.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_2_4.png b/resources/g2/track/rmc/large_turn_right_to_diag_2_4.png new file mode 100644 index 0000000000..7e2599b5c6 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_2_4.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_3_1.png b/resources/g2/track/rmc/large_turn_right_to_diag_3_1.png new file mode 100644 index 0000000000..5a843820d6 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_3_1.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_3_2.png b/resources/g2/track/rmc/large_turn_right_to_diag_3_2.png new file mode 100644 index 0000000000..9191906ea0 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_3_2.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_3_3.png b/resources/g2/track/rmc/large_turn_right_to_diag_3_3.png new file mode 100644 index 0000000000..a96beff9d9 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_3_3.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_3_4.png b/resources/g2/track/rmc/large_turn_right_to_diag_3_4.png new file mode 100644 index 0000000000..2d085d4309 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_3_4.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_4_1.png b/resources/g2/track/rmc/large_turn_right_to_diag_4_1.png new file mode 100644 index 0000000000..de9c7664bf Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_4_1.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_4_2.png b/resources/g2/track/rmc/large_turn_right_to_diag_4_2.png new file mode 100644 index 0000000000..b7f9445636 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_4_2.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_4_3.png b/resources/g2/track/rmc/large_turn_right_to_diag_4_3.png new file mode 100644 index 0000000000..36c737222a Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_4_3.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_4_4.png b/resources/g2/track/rmc/large_turn_right_to_diag_4_4.png new file mode 100644 index 0000000000..2b9423bcaa Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_4_4.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_1_1.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_1_1.png new file mode 100644 index 0000000000..2a401a939b Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_1_1.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_1_2.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_1_2.png new file mode 100644 index 0000000000..8650be1cd5 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_1_2.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_1_3.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_1_3.png new file mode 100644 index 0000000000..2a3418e457 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_1_3.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_1_4.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_1_4.png new file mode 100644 index 0000000000..03a9cef011 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_1_4.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_2_1.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_2_1.png new file mode 100644 index 0000000000..7290233780 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_2_1.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_2_2.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_2_2.png new file mode 100644 index 0000000000..6d3733b2a5 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_2_2.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_2_3.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_2_3.png new file mode 100644 index 0000000000..15f6f5b4cf Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_2_3.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_2_4.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_2_4.png new file mode 100644 index 0000000000..0ed79f0a9b Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_2_4.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_1.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_1.png new file mode 100644 index 0000000000..a47bdf914e Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_1.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_2.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_2.png new file mode 100644 index 0000000000..1820c999d9 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_2.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_3.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_3.png new file mode 100644 index 0000000000..2af540cf18 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_3.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_4.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_4.png new file mode 100644 index 0000000000..6a210f292b Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_4.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_5.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_5.png new file mode 100644 index 0000000000..fb7f4a8241 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_5.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_6.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_6.png new file mode 100644 index 0000000000..cd207efe26 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_6.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_7.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_7.png new file mode 100644 index 0000000000..336623904e Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_3_7.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_1.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_1.png new file mode 100644 index 0000000000..f5ab7ae7f5 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_1.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_2.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_2.png new file mode 100644 index 0000000000..a6f99f0ebe Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_2.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_3.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_3.png new file mode 100644 index 0000000000..2b15ea7112 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_3.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_4.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_4.png new file mode 100644 index 0000000000..ffe2a75160 Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_4.png differ diff --git a/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_5.png b/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_5.png new file mode 100644 index 0000000000..90d85561dd Binary files /dev/null and b/resources/g2/track/rmc/large_turn_right_to_diag_bank_4_5.png differ diff --git a/resources/g2/track/rmc/left_bank_1_1.png b/resources/g2/track/rmc/left_bank_1_1.png new file mode 100644 index 0000000000..44fa30e814 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_1_1.png differ diff --git a/resources/g2/track/rmc/left_bank_1_2.png b/resources/g2/track/rmc/left_bank_1_2.png new file mode 100644 index 0000000000..5911f64cca Binary files /dev/null and b/resources/g2/track/rmc/left_bank_1_2.png differ diff --git a/resources/g2/track/rmc/left_bank_2_1.png b/resources/g2/track/rmc/left_bank_2_1.png new file mode 100644 index 0000000000..4bebb24f9f Binary files /dev/null and b/resources/g2/track/rmc/left_bank_2_1.png differ diff --git a/resources/g2/track/rmc/left_bank_2_2.png b/resources/g2/track/rmc/left_bank_2_2.png new file mode 100644 index 0000000000..6aae191a52 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_2_2.png differ diff --git a/resources/g2/track/rmc/left_bank_3.png b/resources/g2/track/rmc/left_bank_3.png new file mode 100644 index 0000000000..f0142f89d2 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_3.png differ diff --git a/resources/g2/track/rmc/left_bank_4.png b/resources/g2/track/rmc/left_bank_4.png new file mode 100644 index 0000000000..a95306e77c Binary files /dev/null and b/resources/g2/track/rmc/left_bank_4.png differ diff --git a/resources/g2/track/rmc/left_bank_diag_1_1.png b/resources/g2/track/rmc/left_bank_diag_1_1.png new file mode 100644 index 0000000000..2707adf915 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_diag_1_1.png differ diff --git a/resources/g2/track/rmc/left_bank_diag_1_2.png b/resources/g2/track/rmc/left_bank_diag_1_2.png new file mode 100644 index 0000000000..ee8bd9c821 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_diag_1_2.png differ diff --git a/resources/g2/track/rmc/left_bank_diag_2.png b/resources/g2/track/rmc/left_bank_diag_2.png new file mode 100644 index 0000000000..64f396be1f Binary files /dev/null and b/resources/g2/track/rmc/left_bank_diag_2.png differ diff --git a/resources/g2/track/rmc/left_bank_diag_3.png b/resources/g2/track/rmc/left_bank_diag_3.png new file mode 100644 index 0000000000..ad4733cec8 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_diag_3.png differ diff --git a/resources/g2/track/rmc/left_bank_diag_4.png b/resources/g2/track/rmc/left_bank_diag_4.png new file mode 100644 index 0000000000..dc4601ef8b Binary files /dev/null and b/resources/g2/track/rmc/left_bank_diag_4.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_1_1.png b/resources/g2/track/rmc/left_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..4962081611 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_1_2.png b/resources/g2/track/rmc/left_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..d2e3598edb Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_2_1.png b/resources/g2/track/rmc/left_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..bb03185f57 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_2_2.png b/resources/g2/track/rmc/left_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..17fc2850f2 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_3.png b/resources/g2/track/rmc/left_bank_to_gentle_up_3.png new file mode 100644 index 0000000000..634bbc02e7 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_3.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_4.png b/resources/g2/track/rmc/left_bank_to_gentle_up_4.png new file mode 100644 index 0000000000..c9c8435449 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_4.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_diag_1_1.png b/resources/g2/track/rmc/left_bank_to_gentle_up_diag_1_1.png new file mode 100644 index 0000000000..c4d332bdd8 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_diag_1_1.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_diag_1_2.png b/resources/g2/track/rmc/left_bank_to_gentle_up_diag_1_2.png new file mode 100644 index 0000000000..74837695d7 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_diag_1_2.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_diag_2.png b/resources/g2/track/rmc/left_bank_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..c30a7d9c00 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_diag_3.png b/resources/g2/track/rmc/left_bank_to_gentle_up_diag_3.png new file mode 100644 index 0000000000..0da16e778e Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_diag_3.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_diag_4.png b/resources/g2/track/rmc/left_bank_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..4395208dd0 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_1_1.png b/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_1_1.png new file mode 100644 index 0000000000..f264b72d88 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_1_1.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_1_2.png b/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_1_2.png new file mode 100644 index 0000000000..69e049850b Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_1_2.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_2_1.png b/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_2_1.png new file mode 100644 index 0000000000..e79fff43a8 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_2_1.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_2_2.png b/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_2_2.png new file mode 100644 index 0000000000..3dbd2923e5 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_2_2.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_3.png b/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_3.png new file mode 100644 index 0000000000..ae04f8d1a1 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_3.png differ diff --git a/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_4.png b/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_4.png new file mode 100644 index 0000000000..cd15b43ca7 Binary files /dev/null and b/resources/g2/track/rmc/left_bank_to_gentle_up_left_bank_4.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_1_1.png b/resources/g2/track/rmc/medium_helix_left_up_1_1.png new file mode 100644 index 0000000000..dcdbe3a6dc Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_1_1.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_1_2.png b/resources/g2/track/rmc/medium_helix_left_up_1_2.png new file mode 100644 index 0000000000..76e9f706ad Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_1_2.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_1_3.png b/resources/g2/track/rmc/medium_helix_left_up_1_3.png new file mode 100644 index 0000000000..fcfabf926e Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_1_3.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_1_4.png b/resources/g2/track/rmc/medium_helix_left_up_1_4.png new file mode 100644 index 0000000000..333ed6c948 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_1_4.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_1_5.png b/resources/g2/track/rmc/medium_helix_left_up_1_5.png new file mode 100644 index 0000000000..e451df3b5b Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_1_5.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_1_6.png b/resources/g2/track/rmc/medium_helix_left_up_1_6.png new file mode 100644 index 0000000000..52da08729c Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_1_6.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_2_1.png b/resources/g2/track/rmc/medium_helix_left_up_2_1.png new file mode 100644 index 0000000000..9a77516f30 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_2_1.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_2_2.png b/resources/g2/track/rmc/medium_helix_left_up_2_2.png new file mode 100644 index 0000000000..9a378c0a71 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_2_2.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_2_3.png b/resources/g2/track/rmc/medium_helix_left_up_2_3.png new file mode 100644 index 0000000000..242c28ecd2 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_2_3.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_2_4.png b/resources/g2/track/rmc/medium_helix_left_up_2_4.png new file mode 100644 index 0000000000..194407166a Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_2_4.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_2_5.png b/resources/g2/track/rmc/medium_helix_left_up_2_5.png new file mode 100644 index 0000000000..2704d27978 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_2_5.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_2_6.png b/resources/g2/track/rmc/medium_helix_left_up_2_6.png new file mode 100644 index 0000000000..a0b9876391 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_2_6.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_2_7.png b/resources/g2/track/rmc/medium_helix_left_up_2_7.png new file mode 100644 index 0000000000..1c5ec5147b Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_2_7.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_2_8.png b/resources/g2/track/rmc/medium_helix_left_up_2_8.png new file mode 100644 index 0000000000..3fb7c6dfea Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_2_8.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_3_1.png b/resources/g2/track/rmc/medium_helix_left_up_3_1.png new file mode 100644 index 0000000000..b0e85c14b6 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_3_1.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_3_2.png b/resources/g2/track/rmc/medium_helix_left_up_3_2.png new file mode 100644 index 0000000000..ff93235743 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_3_2.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_3_3.png b/resources/g2/track/rmc/medium_helix_left_up_3_3.png new file mode 100644 index 0000000000..84b28c749c Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_3_3.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_3_4.png b/resources/g2/track/rmc/medium_helix_left_up_3_4.png new file mode 100644 index 0000000000..a3c6fd3458 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_3_4.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_3_5.png b/resources/g2/track/rmc/medium_helix_left_up_3_5.png new file mode 100644 index 0000000000..d41fd22c6d Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_3_5.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_3_6.png b/resources/g2/track/rmc/medium_helix_left_up_3_6.png new file mode 100644 index 0000000000..84b866ad6d Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_3_6.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_4_1.png b/resources/g2/track/rmc/medium_helix_left_up_4_1.png new file mode 100644 index 0000000000..4774254722 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_4_1.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_4_2.png b/resources/g2/track/rmc/medium_helix_left_up_4_2.png new file mode 100644 index 0000000000..3846e71233 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_4_2.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_4_3.png b/resources/g2/track/rmc/medium_helix_left_up_4_3.png new file mode 100644 index 0000000000..c865d4ccfd Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_4_3.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_4_4.png b/resources/g2/track/rmc/medium_helix_left_up_4_4.png new file mode 100644 index 0000000000..8fca64d5bf Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_4_4.png differ diff --git a/resources/g2/track/rmc/medium_helix_left_up_4_5.png b/resources/g2/track/rmc/medium_helix_left_up_4_5.png new file mode 100644 index 0000000000..8996943329 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_left_up_4_5.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_1_1.png b/resources/g2/track/rmc/medium_helix_right_up_1_1.png new file mode 100644 index 0000000000..148015e18c Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_1_1.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_1_2.png b/resources/g2/track/rmc/medium_helix_right_up_1_2.png new file mode 100644 index 0000000000..ab6e78dd3f Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_1_2.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_1_3.png b/resources/g2/track/rmc/medium_helix_right_up_1_3.png new file mode 100644 index 0000000000..fd675aa5dc Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_1_3.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_1_4.png b/resources/g2/track/rmc/medium_helix_right_up_1_4.png new file mode 100644 index 0000000000..f13fa68520 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_1_4.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_1_5.png b/resources/g2/track/rmc/medium_helix_right_up_1_5.png new file mode 100644 index 0000000000..0d105c11ec Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_1_5.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_2_1.png b/resources/g2/track/rmc/medium_helix_right_up_2_1.png new file mode 100644 index 0000000000..54f650b516 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_2_1.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_2_2.png b/resources/g2/track/rmc/medium_helix_right_up_2_2.png new file mode 100644 index 0000000000..e01683c2c7 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_2_2.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_2_3.png b/resources/g2/track/rmc/medium_helix_right_up_2_3.png new file mode 100644 index 0000000000..e74be14eb2 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_2_3.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_2_4.png b/resources/g2/track/rmc/medium_helix_right_up_2_4.png new file mode 100644 index 0000000000..ccfce5ecdc Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_2_4.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_2_5.png b/resources/g2/track/rmc/medium_helix_right_up_2_5.png new file mode 100644 index 0000000000..57c3f515a1 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_2_5.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_2_6.png b/resources/g2/track/rmc/medium_helix_right_up_2_6.png new file mode 100644 index 0000000000..d9bb9d539a Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_2_6.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_3_1.png b/resources/g2/track/rmc/medium_helix_right_up_3_1.png new file mode 100644 index 0000000000..a02580c02b Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_3_1.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_3_2.png b/resources/g2/track/rmc/medium_helix_right_up_3_2.png new file mode 100644 index 0000000000..125fbca03c Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_3_2.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_3_3.png b/resources/g2/track/rmc/medium_helix_right_up_3_3.png new file mode 100644 index 0000000000..60a8e7fabc Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_3_3.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_3_4.png b/resources/g2/track/rmc/medium_helix_right_up_3_4.png new file mode 100644 index 0000000000..ba7e8bacfa Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_3_4.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_3_5.png b/resources/g2/track/rmc/medium_helix_right_up_3_5.png new file mode 100644 index 0000000000..e7b56456ce Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_3_5.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_3_6.png b/resources/g2/track/rmc/medium_helix_right_up_3_6.png new file mode 100644 index 0000000000..603a85ab6a Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_3_6.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_3_7.png b/resources/g2/track/rmc/medium_helix_right_up_3_7.png new file mode 100644 index 0000000000..a032cbe7c1 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_3_7.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_3_8.png b/resources/g2/track/rmc/medium_helix_right_up_3_8.png new file mode 100644 index 0000000000..0cfe27e411 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_3_8.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_4_1.png b/resources/g2/track/rmc/medium_helix_right_up_4_1.png new file mode 100644 index 0000000000..fce1ec15c7 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_4_1.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_4_2.png b/resources/g2/track/rmc/medium_helix_right_up_4_2.png new file mode 100644 index 0000000000..b3057a45dd Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_4_2.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_4_3.png b/resources/g2/track/rmc/medium_helix_right_up_4_3.png new file mode 100644 index 0000000000..70f3c70f39 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_4_3.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_4_4.png b/resources/g2/track/rmc/medium_helix_right_up_4_4.png new file mode 100644 index 0000000000..710f2540ba Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_4_4.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_4_5.png b/resources/g2/track/rmc/medium_helix_right_up_4_5.png new file mode 100644 index 0000000000..0dd7ed8ca4 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_4_5.png differ diff --git a/resources/g2/track/rmc/medium_helix_right_up_4_6.png b/resources/g2/track/rmc/medium_helix_right_up_4_6.png new file mode 100644 index 0000000000..e73e0b15e6 Binary files /dev/null and b/resources/g2/track/rmc/medium_helix_right_up_4_6.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_1_1.png b/resources/g2/track/rmc/medium_turn_left_1_1.png new file mode 100644 index 0000000000..06eeaad120 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_1_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_1_2.png b/resources/g2/track/rmc/medium_turn_left_1_2.png new file mode 100644 index 0000000000..c41e58f693 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_1_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_1_3.png b/resources/g2/track/rmc/medium_turn_left_1_3.png new file mode 100644 index 0000000000..8475484fef Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_1_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_1_4.png b/resources/g2/track/rmc/medium_turn_left_1_4.png new file mode 100644 index 0000000000..91105cba52 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_1_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_1_5.png b/resources/g2/track/rmc/medium_turn_left_1_5.png new file mode 100644 index 0000000000..d21c00afc5 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_1_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_2_1.png b/resources/g2/track/rmc/medium_turn_left_2_1.png new file mode 100644 index 0000000000..088cfd1b7b Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_2_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_2_2.png b/resources/g2/track/rmc/medium_turn_left_2_2.png new file mode 100644 index 0000000000..83483ed252 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_2_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_2_3.png b/resources/g2/track/rmc/medium_turn_left_2_3.png new file mode 100644 index 0000000000..cce192a21c Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_2_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_2_4.png b/resources/g2/track/rmc/medium_turn_left_2_4.png new file mode 100644 index 0000000000..62644e4979 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_2_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_2_5.png b/resources/g2/track/rmc/medium_turn_left_2_5.png new file mode 100644 index 0000000000..630db8945a Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_2_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_3_1.png b/resources/g2/track/rmc/medium_turn_left_3_1.png new file mode 100644 index 0000000000..a79ae4cb09 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_3_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_3_2.png b/resources/g2/track/rmc/medium_turn_left_3_2.png new file mode 100644 index 0000000000..11dc7eed9e Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_3_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_3_3.png b/resources/g2/track/rmc/medium_turn_left_3_3.png new file mode 100644 index 0000000000..97d5b3c963 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_3_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_3_4.png b/resources/g2/track/rmc/medium_turn_left_3_4.png new file mode 100644 index 0000000000..25cb5c2749 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_3_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_3_5.png b/resources/g2/track/rmc/medium_turn_left_3_5.png new file mode 100644 index 0000000000..edde7475e8 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_3_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_4_1.png b/resources/g2/track/rmc/medium_turn_left_4_1.png new file mode 100644 index 0000000000..ce3c444a48 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_4_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_4_2.png b/resources/g2/track/rmc/medium_turn_left_4_2.png new file mode 100644 index 0000000000..b8e4338ec7 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_4_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_4_3.png b/resources/g2/track/rmc/medium_turn_left_4_3.png new file mode 100644 index 0000000000..4ce08ebede Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_4_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_4_4.png b/resources/g2/track/rmc/medium_turn_left_4_4.png new file mode 100644 index 0000000000..3710f879e6 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_4_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_4_5.png b/resources/g2/track/rmc/medium_turn_left_4_5.png new file mode 100644 index 0000000000..10fe31ad3f Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_4_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_1_1.png b/resources/g2/track/rmc/medium_turn_left_bank_1_1.png new file mode 100644 index 0000000000..8417f3dcb7 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_1_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_1_2.png b/resources/g2/track/rmc/medium_turn_left_bank_1_2.png new file mode 100644 index 0000000000..98debcd92c Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_1_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_1_3.png b/resources/g2/track/rmc/medium_turn_left_bank_1_3.png new file mode 100644 index 0000000000..4811db30d7 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_1_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_1_4.png b/resources/g2/track/rmc/medium_turn_left_bank_1_4.png new file mode 100644 index 0000000000..b6689cff2d Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_1_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_1_5.png b/resources/g2/track/rmc/medium_turn_left_bank_1_5.png new file mode 100644 index 0000000000..c6adb30d4e Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_1_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_1_6.png b/resources/g2/track/rmc/medium_turn_left_bank_1_6.png new file mode 100644 index 0000000000..1456761872 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_1_6.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_2_1.png b/resources/g2/track/rmc/medium_turn_left_bank_2_1.png new file mode 100644 index 0000000000..3a23f7b518 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_2_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_2_2.png b/resources/g2/track/rmc/medium_turn_left_bank_2_2.png new file mode 100644 index 0000000000..34efd74e5e Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_2_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_2_3.png b/resources/g2/track/rmc/medium_turn_left_bank_2_3.png new file mode 100644 index 0000000000..f6f1594377 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_2_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_2_4.png b/resources/g2/track/rmc/medium_turn_left_bank_2_4.png new file mode 100644 index 0000000000..9d6c51ad1e Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_2_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_2_5.png b/resources/g2/track/rmc/medium_turn_left_bank_2_5.png new file mode 100644 index 0000000000..5519e9ee4d Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_2_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_2_6.png b/resources/g2/track/rmc/medium_turn_left_bank_2_6.png new file mode 100644 index 0000000000..3bbef23ade Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_2_6.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_2_7.png b/resources/g2/track/rmc/medium_turn_left_bank_2_7.png new file mode 100644 index 0000000000..b148e03f29 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_2_7.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_2_8.png b/resources/g2/track/rmc/medium_turn_left_bank_2_8.png new file mode 100644 index 0000000000..efb1a303cb Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_2_8.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_3_1.png b/resources/g2/track/rmc/medium_turn_left_bank_3_1.png new file mode 100644 index 0000000000..5d6b417cd1 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_3_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_3_2.png b/resources/g2/track/rmc/medium_turn_left_bank_3_2.png new file mode 100644 index 0000000000..c5477d32d5 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_3_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_3_3.png b/resources/g2/track/rmc/medium_turn_left_bank_3_3.png new file mode 100644 index 0000000000..36b2c1ca17 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_3_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_3_4.png b/resources/g2/track/rmc/medium_turn_left_bank_3_4.png new file mode 100644 index 0000000000..9f03766ff6 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_3_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_3_5.png b/resources/g2/track/rmc/medium_turn_left_bank_3_5.png new file mode 100644 index 0000000000..36020eab03 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_3_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_3_6.png b/resources/g2/track/rmc/medium_turn_left_bank_3_6.png new file mode 100644 index 0000000000..6133b9ccc7 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_3_6.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_4_1.png b/resources/g2/track/rmc/medium_turn_left_bank_4_1.png new file mode 100644 index 0000000000..714139e1d9 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_4_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_4_2.png b/resources/g2/track/rmc/medium_turn_left_bank_4_2.png new file mode 100644 index 0000000000..bc89ae89be Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_4_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_4_3.png b/resources/g2/track/rmc/medium_turn_left_bank_4_3.png new file mode 100644 index 0000000000..e9b0bb6fa7 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_4_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_4_4.png b/resources/g2/track/rmc/medium_turn_left_bank_4_4.png new file mode 100644 index 0000000000..1de0fb4215 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_4_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_4_5.png b/resources/g2/track/rmc/medium_turn_left_bank_4_5.png new file mode 100644 index 0000000000..470dc15b9b Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_4_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_1.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_1.png new file mode 100644 index 0000000000..4671e52277 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_2.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_2.png new file mode 100644 index 0000000000..0f8463a9f5 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_3.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_3.png new file mode 100644 index 0000000000..f8a1593a86 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_4.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_4.png new file mode 100644 index 0000000000..5a592ea71f Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_5.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_5.png new file mode 100644 index 0000000000..1c201a60bc Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_1_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_1.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_1.png new file mode 100644 index 0000000000..a4b93f8e0f Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_10.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_10.png new file mode 100644 index 0000000000..25aa22494f Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_10.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_2.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_2.png new file mode 100644 index 0000000000..09af7e9002 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_3.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_3.png new file mode 100644 index 0000000000..ac4bae2c69 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_4.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_4.png new file mode 100644 index 0000000000..4b702b80db Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_5.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_5.png new file mode 100644 index 0000000000..8612e1ea56 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_6.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_6.png new file mode 100644 index 0000000000..05183c849b Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_6.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_7.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_7.png new file mode 100644 index 0000000000..eb8a9d0b4e Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_7.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_8.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_8.png new file mode 100644 index 0000000000..427e5e837a Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_8.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_9.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_9.png new file mode 100644 index 0000000000..1b825e8326 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_2_9.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_1.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_1.png new file mode 100644 index 0000000000..1a57cbaff1 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_2.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_2.png new file mode 100644 index 0000000000..bc06a1f07e Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_3.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_3.png new file mode 100644 index 0000000000..03912b5334 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_4.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_4.png new file mode 100644 index 0000000000..bc06a1f07e Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_5.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_5.png new file mode 100644 index 0000000000..7b832b45bc Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_6.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_6.png new file mode 100644 index 0000000000..0c7421c49c Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_3_6.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_1.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_1.png new file mode 100644 index 0000000000..5f9acda261 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_2.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_2.png new file mode 100644 index 0000000000..02a19e3e9f Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_3.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_3.png new file mode 100644 index 0000000000..ef678a6290 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_4.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_4.png new file mode 100644 index 0000000000..eb7270a3bf Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_5.png b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_5.png new file mode 100644 index 0000000000..1e353d779d Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_bank_gentle_up_4_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_1_1.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_1_1.png new file mode 100644 index 0000000000..7ede29657d Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_1_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_1_2.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_1_2.png new file mode 100644 index 0000000000..1cbdfdc0aa Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_1_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_1_3.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_1_3.png new file mode 100644 index 0000000000..a86ca981a0 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_1_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_1_4.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_1_4.png new file mode 100644 index 0000000000..c75c030130 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_1_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_1_5.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_1_5.png new file mode 100644 index 0000000000..d8737522ed Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_1_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_2_1.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_2_1.png new file mode 100644 index 0000000000..05d809a9eb Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_2_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_2_2.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_2_2.png new file mode 100644 index 0000000000..09125d74a9 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_2_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_2_3.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_2_3.png new file mode 100644 index 0000000000..c0ca3e4e0d Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_2_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_2_4.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_2_4.png new file mode 100644 index 0000000000..58e2c5d104 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_2_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_2_5.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_2_5.png new file mode 100644 index 0000000000..75db61f7c1 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_2_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_3_1.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_3_1.png new file mode 100644 index 0000000000..7df9077802 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_3_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_3_2.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_3_2.png new file mode 100644 index 0000000000..80094d8db3 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_3_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_3_3.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_3_3.png new file mode 100644 index 0000000000..497cf710ac Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_3_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_3_4.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_3_4.png new file mode 100644 index 0000000000..80094d8db3 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_3_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_3_5.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_3_5.png new file mode 100644 index 0000000000..c35c8972d6 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_3_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_4_1.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_4_1.png new file mode 100644 index 0000000000..819c46a0ce Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_4_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_4_2.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_4_2.png new file mode 100644 index 0000000000..effe00f2a8 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_4_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_4_3.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_4_3.png new file mode 100644 index 0000000000..31ee759245 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_4_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_4_4.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_4_4.png new file mode 100644 index 0000000000..4676dcfe8b Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_4_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_left_gentle_up_4_5.png b/resources/g2/track/rmc/medium_turn_left_gentle_up_4_5.png new file mode 100644 index 0000000000..3c7528cb11 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_left_gentle_up_4_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_1.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_1.png new file mode 100644 index 0000000000..abbdd71a57 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_2.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_2.png new file mode 100644 index 0000000000..ce00148a1f Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_3.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_3.png new file mode 100644 index 0000000000..f8fd616872 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_4.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_4.png new file mode 100644 index 0000000000..ddbec2b11a Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_5.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_5.png new file mode 100644 index 0000000000..3555f47488 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_1_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_1.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_1.png new file mode 100644 index 0000000000..b597d049a7 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_2.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_2.png new file mode 100644 index 0000000000..bc06a1f07e Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_3.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_3.png new file mode 100644 index 0000000000..c288c85b13 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_4.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_4.png new file mode 100644 index 0000000000..bc06a1f07e Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_5.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_5.png new file mode 100644 index 0000000000..8f1cfa9760 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_6.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_6.png new file mode 100644 index 0000000000..e5b0a04f08 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_2_6.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_1.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_1.png new file mode 100644 index 0000000000..9b8cf6871f Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_10.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_10.png new file mode 100644 index 0000000000..f3aad24f9b Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_10.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_2.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_2.png new file mode 100644 index 0000000000..acced8e34b Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_3.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_3.png new file mode 100644 index 0000000000..6e6a2f8732 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_4.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_4.png new file mode 100644 index 0000000000..76a7e73469 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_5.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_5.png new file mode 100644 index 0000000000..3e6cfe4313 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_6.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_6.png new file mode 100644 index 0000000000..118f449b07 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_6.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_7.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_7.png new file mode 100644 index 0000000000..dc87ce0c8a Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_7.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_8.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_8.png new file mode 100644 index 0000000000..f76fb54af3 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_8.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_9.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_9.png new file mode 100644 index 0000000000..1d5121f0e8 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_3_9.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_1.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_1.png new file mode 100644 index 0000000000..b541d26526 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_2.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_2.png new file mode 100644 index 0000000000..82f7401139 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_3.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_3.png new file mode 100644 index 0000000000..f8a1593a86 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_4.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_4.png new file mode 100644 index 0000000000..e9d1cc9a2a Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_5.png b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_5.png new file mode 100644 index 0000000000..6f63c925bb Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_bank_gentle_up_4_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_1_1.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_1_1.png new file mode 100644 index 0000000000..e877422c29 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_1_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_1_2.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_1_2.png new file mode 100644 index 0000000000..303216927c Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_1_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_1_3.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_1_3.png new file mode 100644 index 0000000000..b84604d2c9 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_1_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_1_4.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_1_4.png new file mode 100644 index 0000000000..0af6585542 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_1_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_1_5.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_1_5.png new file mode 100644 index 0000000000..aa342a57e2 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_1_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_2_1.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_2_1.png new file mode 100644 index 0000000000..167d1c142d Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_2_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_2_2.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_2_2.png new file mode 100644 index 0000000000..80094d8db3 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_2_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_2_3.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_2_3.png new file mode 100644 index 0000000000..71e4af1c90 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_2_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_2_4.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_2_4.png new file mode 100644 index 0000000000..80094d8db3 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_2_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_2_5.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_2_5.png new file mode 100644 index 0000000000..fdfc064037 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_2_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_3_1.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_3_1.png new file mode 100644 index 0000000000..953bfc5044 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_3_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_3_2.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_3_2.png new file mode 100644 index 0000000000..998f5db07c Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_3_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_3_3.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_3_3.png new file mode 100644 index 0000000000..d29159f4a8 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_3_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_3_4.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_3_4.png new file mode 100644 index 0000000000..896385575a Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_3_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_3_5.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_3_5.png new file mode 100644 index 0000000000..01b7adce00 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_3_5.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_4_1.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_4_1.png new file mode 100644 index 0000000000..166143fe90 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_4_1.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_4_2.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_4_2.png new file mode 100644 index 0000000000..176ae040bd Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_4_2.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_4_3.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_4_3.png new file mode 100644 index 0000000000..a86ca981a0 Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_4_3.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_4_4.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_4_4.png new file mode 100644 index 0000000000..4cb2f3a93d Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_4_4.png differ diff --git a/resources/g2/track/rmc/medium_turn_right_gentle_up_4_5.png b/resources/g2/track/rmc/medium_turn_right_gentle_up_4_5.png new file mode 100644 index 0000000000..7e67290f5b Binary files /dev/null and b/resources/g2/track/rmc/medium_turn_right_gentle_up_4_5.png differ diff --git a/resources/g2/track/rmc/powered_lift_1.png b/resources/g2/track/rmc/powered_lift_1.png new file mode 100644 index 0000000000..9aa5d05222 Binary files /dev/null and b/resources/g2/track/rmc/powered_lift_1.png differ diff --git a/resources/g2/track/rmc/powered_lift_2.png b/resources/g2/track/rmc/powered_lift_2.png new file mode 100644 index 0000000000..767c84f38e Binary files /dev/null and b/resources/g2/track/rmc/powered_lift_2.png differ diff --git a/resources/g2/track/rmc/powered_lift_3.png b/resources/g2/track/rmc/powered_lift_3.png new file mode 100644 index 0000000000..5c4b26589e Binary files /dev/null and b/resources/g2/track/rmc/powered_lift_3.png differ diff --git a/resources/g2/track/rmc/powered_lift_4.png b/resources/g2/track/rmc/powered_lift_4.png new file mode 100644 index 0000000000..cba6410b48 Binary files /dev/null and b/resources/g2/track/rmc/powered_lift_4.png differ diff --git a/resources/g2/track/rmc/preview_support.png b/resources/g2/track/rmc/preview_support.png new file mode 100644 index 0000000000..d7d268b7a4 Binary files /dev/null and b/resources/g2/track/rmc/preview_support.png differ diff --git a/resources/g2/track/rmc/preview_track.png b/resources/g2/track/rmc/preview_track.png new file mode 100644 index 0000000000..7aa4610cff Binary files /dev/null and b/resources/g2/track/rmc/preview_track.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_1_1.png b/resources/g2/track/rmc/quarter_loop_up_1_1.png new file mode 100644 index 0000000000..141a55f4f2 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_1_1.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_1_2.png b/resources/g2/track/rmc/quarter_loop_up_1_2.png new file mode 100644 index 0000000000..2e2945d494 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_1_2.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_1_3.png b/resources/g2/track/rmc/quarter_loop_up_1_3.png new file mode 100644 index 0000000000..3f05064e61 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_1_3.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_1_4.png b/resources/g2/track/rmc/quarter_loop_up_1_4.png new file mode 100644 index 0000000000..90413e4635 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_1_4.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_1_5.png b/resources/g2/track/rmc/quarter_loop_up_1_5.png new file mode 100644 index 0000000000..46f39d34ed Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_1_5.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_1_6.png b/resources/g2/track/rmc/quarter_loop_up_1_6.png new file mode 100644 index 0000000000..c2ec2d5aae Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_1_6.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_2_1.png b/resources/g2/track/rmc/quarter_loop_up_2_1.png new file mode 100644 index 0000000000..122a83383f Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_2_1.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_2_2.png b/resources/g2/track/rmc/quarter_loop_up_2_2.png new file mode 100644 index 0000000000..7e24935021 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_2_2.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_2_3.png b/resources/g2/track/rmc/quarter_loop_up_2_3.png new file mode 100644 index 0000000000..aa333500e5 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_2_3.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_2_4.png b/resources/g2/track/rmc/quarter_loop_up_2_4.png new file mode 100644 index 0000000000..295203a496 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_2_4.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_2_5.png b/resources/g2/track/rmc/quarter_loop_up_2_5.png new file mode 100644 index 0000000000..ac6c1ec6e7 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_2_5.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_2_6.png b/resources/g2/track/rmc/quarter_loop_up_2_6.png new file mode 100644 index 0000000000..67fa95af93 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_2_6.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_3_1.png b/resources/g2/track/rmc/quarter_loop_up_3_1.png new file mode 100644 index 0000000000..f431a200db Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_3_1.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_3_2.png b/resources/g2/track/rmc/quarter_loop_up_3_2.png new file mode 100644 index 0000000000..2a898611c0 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_3_2.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_3_3.png b/resources/g2/track/rmc/quarter_loop_up_3_3.png new file mode 100644 index 0000000000..a6001f7095 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_3_3.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_3_4.png b/resources/g2/track/rmc/quarter_loop_up_3_4.png new file mode 100644 index 0000000000..9c9788f0dc Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_3_4.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_3_5.png b/resources/g2/track/rmc/quarter_loop_up_3_5.png new file mode 100644 index 0000000000..284a8a0dcc Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_3_5.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_3_6.png b/resources/g2/track/rmc/quarter_loop_up_3_6.png new file mode 100644 index 0000000000..47e253becb Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_3_6.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_4_1.png b/resources/g2/track/rmc/quarter_loop_up_4_1.png new file mode 100644 index 0000000000..d59f0ce58c Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_4_1.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_4_2.png b/resources/g2/track/rmc/quarter_loop_up_4_2.png new file mode 100644 index 0000000000..ab64dff7f9 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_4_2.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_4_3.png b/resources/g2/track/rmc/quarter_loop_up_4_3.png new file mode 100644 index 0000000000..e632cee626 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_4_3.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_4_4.png b/resources/g2/track/rmc/quarter_loop_up_4_4.png new file mode 100644 index 0000000000..0b5e288e87 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_4_4.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_4_5.png b/resources/g2/track/rmc/quarter_loop_up_4_5.png new file mode 100644 index 0000000000..f69a59ddfe Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_4_5.png differ diff --git a/resources/g2/track/rmc/quarter_loop_up_4_6.png b/resources/g2/track/rmc/quarter_loop_up_4_6.png new file mode 100644 index 0000000000..640afe46c0 Binary files /dev/null and b/resources/g2/track/rmc/quarter_loop_up_4_6.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_1.png b/resources/g2/track/rmc/right_bank_to_gentle_up_1.png new file mode 100644 index 0000000000..1105521ad9 Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_1.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_2.png b/resources/g2/track/rmc/right_bank_to_gentle_up_2.png new file mode 100644 index 0000000000..f94db5bd1b Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_2.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_3_1.png b/resources/g2/track/rmc/right_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..15910381d2 Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_3_2.png b/resources/g2/track/rmc/right_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..fc757c0eb7 Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_4_1.png b/resources/g2/track/rmc/right_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..79719bfbbf Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_4_2.png b/resources/g2/track/rmc/right_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..c0dcf7c07b Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_diag_1.png b/resources/g2/track/rmc/right_bank_to_gentle_up_diag_1.png new file mode 100644 index 0000000000..9788d278d9 Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_diag_1.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_diag_2.png b/resources/g2/track/rmc/right_bank_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..1225716357 Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_diag_3_1.png b/resources/g2/track/rmc/right_bank_to_gentle_up_diag_3_1.png new file mode 100644 index 0000000000..1ecdf001c7 Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_diag_3_1.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_diag_3_2.png b/resources/g2/track/rmc/right_bank_to_gentle_up_diag_3_2.png new file mode 100644 index 0000000000..92a3e66777 Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_diag_3_2.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_diag_4.png b/resources/g2/track/rmc/right_bank_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..ca5e393c0d Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_1.png b/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_1.png new file mode 100644 index 0000000000..d32c912e6e Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_1.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_2.png b/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_2.png new file mode 100644 index 0000000000..d544a3e364 Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_2.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_3_1.png b/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_3_1.png new file mode 100644 index 0000000000..fe2b4db906 Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_3_1.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_3_2.png b/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_3_2.png new file mode 100644 index 0000000000..c14e439aae Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_3_2.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_4_1.png b/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_4_1.png new file mode 100644 index 0000000000..bad866cfe2 Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_4_1.png differ diff --git a/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_4_2.png b/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_4_2.png new file mode 100644 index 0000000000..970c936a41 Binary files /dev/null and b/resources/g2/track/rmc/right_bank_to_gentle_up_right_bank_4_2.png differ diff --git a/resources/g2/track/rmc/s_bend_left_1_1.png b/resources/g2/track/rmc/s_bend_left_1_1.png new file mode 100644 index 0000000000..1036bd61fe Binary files /dev/null and b/resources/g2/track/rmc/s_bend_left_1_1.png differ diff --git a/resources/g2/track/rmc/s_bend_left_1_2.png b/resources/g2/track/rmc/s_bend_left_1_2.png new file mode 100644 index 0000000000..b2ddecd466 Binary files /dev/null and b/resources/g2/track/rmc/s_bend_left_1_2.png differ diff --git a/resources/g2/track/rmc/s_bend_left_1_3.png b/resources/g2/track/rmc/s_bend_left_1_3.png new file mode 100644 index 0000000000..62f711c609 Binary files /dev/null and b/resources/g2/track/rmc/s_bend_left_1_3.png differ diff --git a/resources/g2/track/rmc/s_bend_left_1_4.png b/resources/g2/track/rmc/s_bend_left_1_4.png new file mode 100644 index 0000000000..0b116363c6 Binary files /dev/null and b/resources/g2/track/rmc/s_bend_left_1_4.png differ diff --git a/resources/g2/track/rmc/s_bend_left_2_1.png b/resources/g2/track/rmc/s_bend_left_2_1.png new file mode 100644 index 0000000000..227477eeee Binary files /dev/null and b/resources/g2/track/rmc/s_bend_left_2_1.png differ diff --git a/resources/g2/track/rmc/s_bend_left_2_2.png b/resources/g2/track/rmc/s_bend_left_2_2.png new file mode 100644 index 0000000000..414e848b19 Binary files /dev/null and b/resources/g2/track/rmc/s_bend_left_2_2.png differ diff --git a/resources/g2/track/rmc/s_bend_left_2_3.png b/resources/g2/track/rmc/s_bend_left_2_3.png new file mode 100644 index 0000000000..0b8e874297 Binary files /dev/null and b/resources/g2/track/rmc/s_bend_left_2_3.png differ diff --git a/resources/g2/track/rmc/s_bend_left_2_4.png b/resources/g2/track/rmc/s_bend_left_2_4.png new file mode 100644 index 0000000000..6bcde374f1 Binary files /dev/null and b/resources/g2/track/rmc/s_bend_left_2_4.png differ diff --git a/resources/g2/track/rmc/s_bend_right_1_1.png b/resources/g2/track/rmc/s_bend_right_1_1.png new file mode 100644 index 0000000000..c0faa865b7 Binary files /dev/null and b/resources/g2/track/rmc/s_bend_right_1_1.png differ diff --git a/resources/g2/track/rmc/s_bend_right_1_2.png b/resources/g2/track/rmc/s_bend_right_1_2.png new file mode 100644 index 0000000000..8991ca9537 Binary files /dev/null and b/resources/g2/track/rmc/s_bend_right_1_2.png differ diff --git a/resources/g2/track/rmc/s_bend_right_1_3.png b/resources/g2/track/rmc/s_bend_right_1_3.png new file mode 100644 index 0000000000..7713e8c0df Binary files /dev/null and b/resources/g2/track/rmc/s_bend_right_1_3.png differ diff --git a/resources/g2/track/rmc/s_bend_right_1_4.png b/resources/g2/track/rmc/s_bend_right_1_4.png new file mode 100644 index 0000000000..5dc9af7972 Binary files /dev/null and b/resources/g2/track/rmc/s_bend_right_1_4.png differ diff --git a/resources/g2/track/rmc/s_bend_right_2_1.png b/resources/g2/track/rmc/s_bend_right_2_1.png new file mode 100644 index 0000000000..c0be1ef051 Binary files /dev/null and b/resources/g2/track/rmc/s_bend_right_2_1.png differ diff --git a/resources/g2/track/rmc/s_bend_right_2_2.png b/resources/g2/track/rmc/s_bend_right_2_2.png new file mode 100644 index 0000000000..cb328cd7d7 Binary files /dev/null and b/resources/g2/track/rmc/s_bend_right_2_2.png differ diff --git a/resources/g2/track/rmc/s_bend_right_2_3.png b/resources/g2/track/rmc/s_bend_right_2_3.png new file mode 100644 index 0000000000..9a6a7401af Binary files /dev/null and b/resources/g2/track/rmc/s_bend_right_2_3.png differ diff --git a/resources/g2/track/rmc/s_bend_right_2_4.png b/resources/g2/track/rmc/s_bend_right_2_4.png new file mode 100644 index 0000000000..6012d51fd4 Binary files /dev/null and b/resources/g2/track/rmc/s_bend_right_2_4.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_1_1.png b/resources/g2/track/rmc/small_helix_left_up_1_1.png new file mode 100644 index 0000000000..f3d66242ca Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_1_1.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_1_2.png b/resources/g2/track/rmc/small_helix_left_up_1_2.png new file mode 100644 index 0000000000..6b7ee5fe0d Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_1_2.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_1_3.png b/resources/g2/track/rmc/small_helix_left_up_1_3.png new file mode 100644 index 0000000000..59ca9014dd Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_1_3.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_1_4.png b/resources/g2/track/rmc/small_helix_left_up_1_4.png new file mode 100644 index 0000000000..986332a106 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_1_4.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_2_1.png b/resources/g2/track/rmc/small_helix_left_up_2_1.png new file mode 100644 index 0000000000..4d9890e0f9 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_2_1.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_2_2.png b/resources/g2/track/rmc/small_helix_left_up_2_2.png new file mode 100644 index 0000000000..e64e83d045 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_2_2.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_2_3.png b/resources/g2/track/rmc/small_helix_left_up_2_3.png new file mode 100644 index 0000000000..38b83bb0b9 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_2_3.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_2_4.png b/resources/g2/track/rmc/small_helix_left_up_2_4.png new file mode 100644 index 0000000000..aea5df60f5 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_2_4.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_2_5.png b/resources/g2/track/rmc/small_helix_left_up_2_5.png new file mode 100644 index 0000000000..fadb6e4a4a Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_2_5.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_3_1.png b/resources/g2/track/rmc/small_helix_left_up_3_1.png new file mode 100644 index 0000000000..fe81f8563f Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_3_1.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_3_2.png b/resources/g2/track/rmc/small_helix_left_up_3_2.png new file mode 100644 index 0000000000..8724dcc22b Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_3_2.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_3_3.png b/resources/g2/track/rmc/small_helix_left_up_3_3.png new file mode 100644 index 0000000000..26e7128996 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_3_3.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_3_4.png b/resources/g2/track/rmc/small_helix_left_up_3_4.png new file mode 100644 index 0000000000..67bb4a20ad Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_3_4.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_4_1.png b/resources/g2/track/rmc/small_helix_left_up_4_1.png new file mode 100644 index 0000000000..042f9dd111 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_4_1.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_4_2.png b/resources/g2/track/rmc/small_helix_left_up_4_2.png new file mode 100644 index 0000000000..4e66bbc0fb Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_4_2.png differ diff --git a/resources/g2/track/rmc/small_helix_left_up_4_3.png b/resources/g2/track/rmc/small_helix_left_up_4_3.png new file mode 100644 index 0000000000..bbda3af893 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_left_up_4_3.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_1_1.png b/resources/g2/track/rmc/small_helix_right_up_1_1.png new file mode 100644 index 0000000000..0d0ae5a207 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_1_1.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_1_2.png b/resources/g2/track/rmc/small_helix_right_up_1_2.png new file mode 100644 index 0000000000..17a82d16af Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_1_2.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_1_3.png b/resources/g2/track/rmc/small_helix_right_up_1_3.png new file mode 100644 index 0000000000..aad9cbd51b Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_1_3.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_2_1.png b/resources/g2/track/rmc/small_helix_right_up_2_1.png new file mode 100644 index 0000000000..10cf09b0c8 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_2_1.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_2_2.png b/resources/g2/track/rmc/small_helix_right_up_2_2.png new file mode 100644 index 0000000000..903973be03 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_2_2.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_2_3.png b/resources/g2/track/rmc/small_helix_right_up_2_3.png new file mode 100644 index 0000000000..5ecf2f1285 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_2_3.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_2_4.png b/resources/g2/track/rmc/small_helix_right_up_2_4.png new file mode 100644 index 0000000000..17715548ff Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_2_4.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_3_1.png b/resources/g2/track/rmc/small_helix_right_up_3_1.png new file mode 100644 index 0000000000..039ae549fb Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_3_1.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_3_2.png b/resources/g2/track/rmc/small_helix_right_up_3_2.png new file mode 100644 index 0000000000..f7d68e9497 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_3_2.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_3_3.png b/resources/g2/track/rmc/small_helix_right_up_3_3.png new file mode 100644 index 0000000000..cfd11394c5 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_3_3.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_3_4.png b/resources/g2/track/rmc/small_helix_right_up_3_4.png new file mode 100644 index 0000000000..508ba85c3f Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_3_4.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_3_5.png b/resources/g2/track/rmc/small_helix_right_up_3_5.png new file mode 100644 index 0000000000..860861b9ba Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_3_5.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_4_1.png b/resources/g2/track/rmc/small_helix_right_up_4_1.png new file mode 100644 index 0000000000..bb889228c6 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_4_1.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_4_2.png b/resources/g2/track/rmc/small_helix_right_up_4_2.png new file mode 100644 index 0000000000..c71128e25f Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_4_2.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_4_3.png b/resources/g2/track/rmc/small_helix_right_up_4_3.png new file mode 100644 index 0000000000..b6fda5e298 Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_4_3.png differ diff --git a/resources/g2/track/rmc/small_helix_right_up_4_4.png b/resources/g2/track/rmc/small_helix_right_up_4_4.png new file mode 100644 index 0000000000..f97c348b2e Binary files /dev/null and b/resources/g2/track/rmc/small_helix_right_up_4_4.png differ diff --git a/resources/g2/track/rmc/small_turn_left_1_1.png b/resources/g2/track/rmc/small_turn_left_1_1.png new file mode 100644 index 0000000000..a79760460d Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_1_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_1_2.png b/resources/g2/track/rmc/small_turn_left_1_2.png new file mode 100644 index 0000000000..c07a8ad882 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_1_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_1_3.png b/resources/g2/track/rmc/small_turn_left_1_3.png new file mode 100644 index 0000000000..8adbd462e5 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_1_3.png differ diff --git a/resources/g2/track/rmc/small_turn_left_2_1.png b/resources/g2/track/rmc/small_turn_left_2_1.png new file mode 100644 index 0000000000..b34acd0db7 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_2_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_2_2.png b/resources/g2/track/rmc/small_turn_left_2_2.png new file mode 100644 index 0000000000..ff3e0d8a9b Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_2_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_2_3.png b/resources/g2/track/rmc/small_turn_left_2_3.png new file mode 100644 index 0000000000..db75a09ba1 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_2_3.png differ diff --git a/resources/g2/track/rmc/small_turn_left_3_1.png b/resources/g2/track/rmc/small_turn_left_3_1.png new file mode 100644 index 0000000000..74cec31ecc Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_3_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_3_2.png b/resources/g2/track/rmc/small_turn_left_3_2.png new file mode 100644 index 0000000000..b7b80e9bc1 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_3_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_3_3.png b/resources/g2/track/rmc/small_turn_left_3_3.png new file mode 100644 index 0000000000..21295d9b7f Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_3_3.png differ diff --git a/resources/g2/track/rmc/small_turn_left_4_1.png b/resources/g2/track/rmc/small_turn_left_4_1.png new file mode 100644 index 0000000000..078acd10d7 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_4_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_4_2.png b/resources/g2/track/rmc/small_turn_left_4_2.png new file mode 100644 index 0000000000..1a92bdee22 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_4_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_4_3.png b/resources/g2/track/rmc/small_turn_left_4_3.png new file mode 100644 index 0000000000..71d23d93e7 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_4_3.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_1_1.png b/resources/g2/track/rmc/small_turn_left_bank_1_1.png new file mode 100644 index 0000000000..3632a6cdd4 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_1_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_1_2.png b/resources/g2/track/rmc/small_turn_left_bank_1_2.png new file mode 100644 index 0000000000..222c88a342 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_1_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_1_3.png b/resources/g2/track/rmc/small_turn_left_bank_1_3.png new file mode 100644 index 0000000000..2974d9f89c Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_1_3.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_1_4.png b/resources/g2/track/rmc/small_turn_left_bank_1_4.png new file mode 100644 index 0000000000..83f47d9841 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_1_4.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_2_1.png b/resources/g2/track/rmc/small_turn_left_bank_2_1.png new file mode 100644 index 0000000000..d81bcf4841 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_2_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_2_2.png b/resources/g2/track/rmc/small_turn_left_bank_2_2.png new file mode 100644 index 0000000000..a512f47991 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_2_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_2_3.png b/resources/g2/track/rmc/small_turn_left_bank_2_3.png new file mode 100644 index 0000000000..574ebb67fd Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_2_3.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_2_4.png b/resources/g2/track/rmc/small_turn_left_bank_2_4.png new file mode 100644 index 0000000000..a73c994124 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_2_4.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_2_5.png b/resources/g2/track/rmc/small_turn_left_bank_2_5.png new file mode 100644 index 0000000000..9d5c6f8761 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_2_5.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_3_1.png b/resources/g2/track/rmc/small_turn_left_bank_3_1.png new file mode 100644 index 0000000000..b39aec8a9a Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_3_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_3_2.png b/resources/g2/track/rmc/small_turn_left_bank_3_2.png new file mode 100644 index 0000000000..1b58414fbe Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_3_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_3_3.png b/resources/g2/track/rmc/small_turn_left_bank_3_3.png new file mode 100644 index 0000000000..febe8d58be Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_3_3.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_3_4.png b/resources/g2/track/rmc/small_turn_left_bank_3_4.png new file mode 100644 index 0000000000..a67020c4d3 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_3_4.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_4_1.png b/resources/g2/track/rmc/small_turn_left_bank_4_1.png new file mode 100644 index 0000000000..17cc1a8c05 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_4_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_4_2.png b/resources/g2/track/rmc/small_turn_left_bank_4_2.png new file mode 100644 index 0000000000..b642da60ed Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_4_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_4_3.png b/resources/g2/track/rmc/small_turn_left_bank_4_3.png new file mode 100644 index 0000000000..6db489aee8 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_4_3.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_gentle_up_1_1.png b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_1_1.png new file mode 100644 index 0000000000..3a0be6fae0 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_1_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_gentle_up_1_2.png b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_1_2.png new file mode 100644 index 0000000000..62d738f5ca Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_1_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_gentle_up_2_1.png b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_2_1.png new file mode 100644 index 0000000000..f93dc8a8f6 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_2_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_gentle_up_2_2.png b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_2_2.png new file mode 100644 index 0000000000..177d6d5b5c Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_2_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_gentle_up_2_3.png b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_2_3.png new file mode 100644 index 0000000000..bee32acc10 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_2_3.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_gentle_up_2_4.png b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_2_4.png new file mode 100644 index 0000000000..2d0119cdd3 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_2_4.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_gentle_up_3_1.png b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_3_1.png new file mode 100644 index 0000000000..e8fb5e1fc4 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_3_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_gentle_up_3_2.png b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_3_2.png new file mode 100644 index 0000000000..4d3fba46c3 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_3_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_gentle_up_3_3.png b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_3_3.png new file mode 100644 index 0000000000..d4dcda41ce Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_3_3.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_gentle_up_4_1.png b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_4_1.png new file mode 100644 index 0000000000..6dccbc07e1 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_4_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_gentle_up_4_2.png b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_4_2.png new file mode 100644 index 0000000000..f5f4b7fd3e Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_gentle_up_4_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_1_1.png b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..23bac9a4b3 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_1_2.png b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..bff4e2a909 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_2_1.png b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..bc6fddbce3 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_2_2.png b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..9e1e68f05a Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_2_3.png b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_2_3.png new file mode 100644 index 0000000000..46554eb5f9 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_2_3.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_3_1.png b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..8e790109e2 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_3_2.png b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..2c6e530104 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_4_1.png b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..f3610d290c Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_4_2.png b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..2994c42a2d Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_gentle_up_1_1.png b/resources/g2/track/rmc/small_turn_left_gentle_up_1_1.png new file mode 100644 index 0000000000..23b6a9aaef Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_gentle_up_1_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_gentle_up_1_2.png b/resources/g2/track/rmc/small_turn_left_gentle_up_1_2.png new file mode 100644 index 0000000000..572a5cefa6 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_gentle_up_1_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_gentle_up_2_1.png b/resources/g2/track/rmc/small_turn_left_gentle_up_2_1.png new file mode 100644 index 0000000000..1d5325b90a Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_gentle_up_2_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_gentle_up_2_2.png b/resources/g2/track/rmc/small_turn_left_gentle_up_2_2.png new file mode 100644 index 0000000000..c5154b0afe Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_gentle_up_2_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_gentle_up_3_1.png b/resources/g2/track/rmc/small_turn_left_gentle_up_3_1.png new file mode 100644 index 0000000000..6ffa3bee51 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_gentle_up_3_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_gentle_up_3_2.png b/resources/g2/track/rmc/small_turn_left_gentle_up_3_2.png new file mode 100644 index 0000000000..49d123b1c4 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_gentle_up_3_2.png differ diff --git a/resources/g2/track/rmc/small_turn_left_gentle_up_4_1.png b/resources/g2/track/rmc/small_turn_left_gentle_up_4_1.png new file mode 100644 index 0000000000..dd74397115 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_gentle_up_4_1.png differ diff --git a/resources/g2/track/rmc/small_turn_left_gentle_up_4_2.png b/resources/g2/track/rmc/small_turn_left_gentle_up_4_2.png new file mode 100644 index 0000000000..33d39c991e Binary files /dev/null and b/resources/g2/track/rmc/small_turn_left_gentle_up_4_2.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_gentle_up_1_1.png b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_1_1.png new file mode 100644 index 0000000000..624ab45194 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_1_1.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_gentle_up_1_2.png b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_1_2.png new file mode 100644 index 0000000000..68a15017c2 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_1_2.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_gentle_up_2_1.png b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_2_1.png new file mode 100644 index 0000000000..e252eb197c Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_2_1.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_gentle_up_2_2.png b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_2_2.png new file mode 100644 index 0000000000..aa50d6e768 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_2_2.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_gentle_up_2_3.png b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_2_3.png new file mode 100644 index 0000000000..26c0dd3b01 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_2_3.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_gentle_up_3_1.png b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_3_1.png new file mode 100644 index 0000000000..62db017292 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_3_1.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_gentle_up_3_2.png b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_3_2.png new file mode 100644 index 0000000000..eb3c6654b7 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_3_2.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_gentle_up_3_3.png b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_3_3.png new file mode 100644 index 0000000000..e260aa22bc Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_3_3.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_gentle_up_3_4.png b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_3_4.png new file mode 100644 index 0000000000..0d36643994 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_3_4.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_gentle_up_4_1.png b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_4_1.png new file mode 100644 index 0000000000..fd9483dbbc Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_4_1.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_gentle_up_4_2.png b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_4_2.png new file mode 100644 index 0000000000..f19728311e Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_gentle_up_4_2.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_1_1.png b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_1_1.png new file mode 100644 index 0000000000..3304fb52f4 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_1_1.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_1_2.png b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_1_2.png new file mode 100644 index 0000000000..56c23c30d4 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_1_2.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_2_1.png b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_2_1.png new file mode 100644 index 0000000000..55da0fe109 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_2_2.png b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_2_2.png new file mode 100644 index 0000000000..e231a333f4 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_3_1.png b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_3_1.png new file mode 100644 index 0000000000..687e9ec819 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_3_2.png b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_3_2.png new file mode 100644 index 0000000000..c4fe8d20f7 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_3_3.png b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_3_3.png new file mode 100644 index 0000000000..2bdb350a31 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_3_3.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_4_1.png b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_4_1.png new file mode 100644 index 0000000000..b10d7e5f3f Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_4_1.png differ diff --git a/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_4_2.png b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_4_2.png new file mode 100644 index 0000000000..3bd5503678 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_bank_to_gentle_up_4_2.png differ diff --git a/resources/g2/track/rmc/small_turn_right_gentle_up_1_1.png b/resources/g2/track/rmc/small_turn_right_gentle_up_1_1.png new file mode 100644 index 0000000000..b732dc25e9 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_gentle_up_1_1.png differ diff --git a/resources/g2/track/rmc/small_turn_right_gentle_up_1_2.png b/resources/g2/track/rmc/small_turn_right_gentle_up_1_2.png new file mode 100644 index 0000000000..cebc47483c Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_gentle_up_1_2.png differ diff --git a/resources/g2/track/rmc/small_turn_right_gentle_up_2_1.png b/resources/g2/track/rmc/small_turn_right_gentle_up_2_1.png new file mode 100644 index 0000000000..42a609acb1 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_gentle_up_2_1.png differ diff --git a/resources/g2/track/rmc/small_turn_right_gentle_up_2_2.png b/resources/g2/track/rmc/small_turn_right_gentle_up_2_2.png new file mode 100644 index 0000000000..2e167ec6f1 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_gentle_up_2_2.png differ diff --git a/resources/g2/track/rmc/small_turn_right_gentle_up_3_1.png b/resources/g2/track/rmc/small_turn_right_gentle_up_3_1.png new file mode 100644 index 0000000000..e168eaa2f9 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_gentle_up_3_1.png differ diff --git a/resources/g2/track/rmc/small_turn_right_gentle_up_3_2.png b/resources/g2/track/rmc/small_turn_right_gentle_up_3_2.png new file mode 100644 index 0000000000..3d89cc96a0 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_gentle_up_3_2.png differ diff --git a/resources/g2/track/rmc/small_turn_right_gentle_up_4_1.png b/resources/g2/track/rmc/small_turn_right_gentle_up_4_1.png new file mode 100644 index 0000000000..756f82ae04 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_gentle_up_4_1.png differ diff --git a/resources/g2/track/rmc/small_turn_right_gentle_up_4_2.png b/resources/g2/track/rmc/small_turn_right_gentle_up_4_2.png new file mode 100644 index 0000000000..18bcdea654 Binary files /dev/null and b/resources/g2/track/rmc/small_turn_right_gentle_up_4_2.png differ diff --git a/resources/g2/track/rmc/steep_1.png b/resources/g2/track/rmc/steep_1.png new file mode 100644 index 0000000000..712de23df1 Binary files /dev/null and b/resources/g2/track/rmc/steep_1.png differ diff --git a/resources/g2/track/rmc/steep_2.png b/resources/g2/track/rmc/steep_2.png new file mode 100644 index 0000000000..4a8be2fdf6 Binary files /dev/null and b/resources/g2/track/rmc/steep_2.png differ diff --git a/resources/g2/track/rmc/steep_3.png b/resources/g2/track/rmc/steep_3.png new file mode 100644 index 0000000000..ba4b9e7318 Binary files /dev/null and b/resources/g2/track/rmc/steep_3.png differ diff --git a/resources/g2/track/rmc/steep_4.png b/resources/g2/track/rmc/steep_4.png new file mode 100644 index 0000000000..ba309186c8 Binary files /dev/null and b/resources/g2/track/rmc/steep_4.png differ diff --git a/resources/g2/track/rmc/steep_diag_1.png b/resources/g2/track/rmc/steep_diag_1.png new file mode 100644 index 0000000000..c889d729d0 Binary files /dev/null and b/resources/g2/track/rmc/steep_diag_1.png differ diff --git a/resources/g2/track/rmc/steep_diag_2.png b/resources/g2/track/rmc/steep_diag_2.png new file mode 100644 index 0000000000..d1474d48d1 Binary files /dev/null and b/resources/g2/track/rmc/steep_diag_2.png differ diff --git a/resources/g2/track/rmc/steep_diag_3.png b/resources/g2/track/rmc/steep_diag_3.png new file mode 100644 index 0000000000..fd2ae131bc Binary files /dev/null and b/resources/g2/track/rmc/steep_diag_3.png differ diff --git a/resources/g2/track/rmc/steep_diag_4.png b/resources/g2/track/rmc/steep_diag_4.png new file mode 100644 index 0000000000..cef336b62e Binary files /dev/null and b/resources/g2/track/rmc/steep_diag_4.png differ diff --git a/resources/g2/track/rmc/steep_diag_lift_1.png b/resources/g2/track/rmc/steep_diag_lift_1.png new file mode 100644 index 0000000000..67b7f64366 Binary files /dev/null and b/resources/g2/track/rmc/steep_diag_lift_1.png differ diff --git a/resources/g2/track/rmc/steep_diag_lift_2.png b/resources/g2/track/rmc/steep_diag_lift_2.png new file mode 100644 index 0000000000..22279fe0a9 Binary files /dev/null and b/resources/g2/track/rmc/steep_diag_lift_2.png differ diff --git a/resources/g2/track/rmc/steep_diag_lift_3.png b/resources/g2/track/rmc/steep_diag_lift_3.png new file mode 100644 index 0000000000..d4e7dbd6b3 Binary files /dev/null and b/resources/g2/track/rmc/steep_diag_lift_3.png differ diff --git a/resources/g2/track/rmc/steep_diag_lift_4.png b/resources/g2/track/rmc/steep_diag_lift_4.png new file mode 100644 index 0000000000..303af847dc Binary files /dev/null and b/resources/g2/track/rmc/steep_diag_lift_4.png differ diff --git a/resources/g2/track/rmc/steep_lift_1.png b/resources/g2/track/rmc/steep_lift_1.png new file mode 100644 index 0000000000..5e8f05e69b Binary files /dev/null and b/resources/g2/track/rmc/steep_lift_1.png differ diff --git a/resources/g2/track/rmc/steep_lift_2.png b/resources/g2/track/rmc/steep_lift_2.png new file mode 100644 index 0000000000..ccf3621bb2 Binary files /dev/null and b/resources/g2/track/rmc/steep_lift_2.png differ diff --git a/resources/g2/track/rmc/steep_lift_3.png b/resources/g2/track/rmc/steep_lift_3.png new file mode 100644 index 0000000000..159dc95037 Binary files /dev/null and b/resources/g2/track/rmc/steep_lift_3.png differ diff --git a/resources/g2/track/rmc/steep_lift_4.png b/resources/g2/track/rmc/steep_lift_4.png new file mode 100644 index 0000000000..06af2bdc56 Binary files /dev/null and b/resources/g2/track/rmc/steep_lift_4.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_1_1.png b/resources/g2/track/rmc/steep_to_flat_up_1_1.png new file mode 100644 index 0000000000..1eefc685ed Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_1_1.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_1_2.png b/resources/g2/track/rmc/steep_to_flat_up_1_2.png new file mode 100644 index 0000000000..d12193b5b6 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_1_2.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_1_3.png b/resources/g2/track/rmc/steep_to_flat_up_1_3.png new file mode 100644 index 0000000000..b5402eb1d1 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_1_3.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_1_4.png b/resources/g2/track/rmc/steep_to_flat_up_1_4.png new file mode 100644 index 0000000000..b5912e0dae Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_1_4.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_2_1.png b/resources/g2/track/rmc/steep_to_flat_up_2_1.png new file mode 100644 index 0000000000..91e6b68141 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_2_1.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_2_2.png b/resources/g2/track/rmc/steep_to_flat_up_2_2.png new file mode 100644 index 0000000000..72f166b9ab Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_2_2.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_2_3.png b/resources/g2/track/rmc/steep_to_flat_up_2_3.png new file mode 100644 index 0000000000..d9841bb4d3 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_2_3.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_2_4.png b/resources/g2/track/rmc/steep_to_flat_up_2_4.png new file mode 100644 index 0000000000..bf4e30b407 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_2_4.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_3_1.png b/resources/g2/track/rmc/steep_to_flat_up_3_1.png new file mode 100644 index 0000000000..e4aa9607a0 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_3_1.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_3_2.png b/resources/g2/track/rmc/steep_to_flat_up_3_2.png new file mode 100644 index 0000000000..6ffd3caae8 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_3_2.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_3_3.png b/resources/g2/track/rmc/steep_to_flat_up_3_3.png new file mode 100644 index 0000000000..c82e81fb17 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_3_3.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_3_4.png b/resources/g2/track/rmc/steep_to_flat_up_3_4.png new file mode 100644 index 0000000000..18e4b58416 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_3_4.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_4_1.png b/resources/g2/track/rmc/steep_to_flat_up_4_1.png new file mode 100644 index 0000000000..af4174ee58 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_4_1.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_4_2.png b/resources/g2/track/rmc/steep_to_flat_up_4_2.png new file mode 100644 index 0000000000..4ed6a8c127 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_4_2.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_4_3.png b/resources/g2/track/rmc/steep_to_flat_up_4_3.png new file mode 100644 index 0000000000..06db889680 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_4_3.png differ diff --git a/resources/g2/track/rmc/steep_to_flat_up_4_4.png b/resources/g2/track/rmc/steep_to_flat_up_4_4.png new file mode 100644 index 0000000000..65abb5eae1 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_flat_up_4_4.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_1.png b/resources/g2/track/rmc/steep_to_gentle_up_1.png new file mode 100644 index 0000000000..218f9df35a Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_1.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_2_1.png b/resources/g2/track/rmc/steep_to_gentle_up_2_1.png new file mode 100644 index 0000000000..4bd64c02eb Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_2_1.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_2_2.png b/resources/g2/track/rmc/steep_to_gentle_up_2_2.png new file mode 100644 index 0000000000..41d7f33ee6 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_2_2.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_3_1.png b/resources/g2/track/rmc/steep_to_gentle_up_3_1.png new file mode 100644 index 0000000000..cb22b1f40e Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_3_1.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_3_2.png b/resources/g2/track/rmc/steep_to_gentle_up_3_2.png new file mode 100644 index 0000000000..a6fd2b5d4e Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_3_2.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_4.png b/resources/g2/track/rmc/steep_to_gentle_up_4.png new file mode 100644 index 0000000000..ec1121c3f8 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_4.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_diag_1.png b/resources/g2/track/rmc/steep_to_gentle_up_diag_1.png new file mode 100644 index 0000000000..d4229864bc Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_diag_1.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_diag_2.png b/resources/g2/track/rmc/steep_to_gentle_up_diag_2.png new file mode 100644 index 0000000000..a0626c7bf0 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_diag_2.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_diag_3.png b/resources/g2/track/rmc/steep_to_gentle_up_diag_3.png new file mode 100644 index 0000000000..e579de0f1f Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_diag_3.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_diag_4.png b/resources/g2/track/rmc/steep_to_gentle_up_diag_4.png new file mode 100644 index 0000000000..cf034b6949 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_diag_4.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_diag_lift_1.png b/resources/g2/track/rmc/steep_to_gentle_up_diag_lift_1.png new file mode 100644 index 0000000000..d243f69757 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_diag_lift_1.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_diag_lift_2.png b/resources/g2/track/rmc/steep_to_gentle_up_diag_lift_2.png new file mode 100644 index 0000000000..b5de659dd1 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_diag_lift_2.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_diag_lift_3.png b/resources/g2/track/rmc/steep_to_gentle_up_diag_lift_3.png new file mode 100644 index 0000000000..2ea8b9e573 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_diag_lift_3.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_diag_lift_4.png b/resources/g2/track/rmc/steep_to_gentle_up_diag_lift_4.png new file mode 100644 index 0000000000..05f6bd7453 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_diag_lift_4.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_lift_1.png b/resources/g2/track/rmc/steep_to_gentle_up_lift_1.png new file mode 100644 index 0000000000..bdf9eb467d Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_lift_1.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_lift_2_1.png b/resources/g2/track/rmc/steep_to_gentle_up_lift_2_1.png new file mode 100644 index 0000000000..be5a16e78c Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_lift_2_1.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_lift_2_2.png b/resources/g2/track/rmc/steep_to_gentle_up_lift_2_2.png new file mode 100644 index 0000000000..39f8f51911 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_lift_2_2.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_lift_3_1.png b/resources/g2/track/rmc/steep_to_gentle_up_lift_3_1.png new file mode 100644 index 0000000000..e10c9a4f26 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_lift_3_1.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_lift_3_2.png b/resources/g2/track/rmc/steep_to_gentle_up_lift_3_2.png new file mode 100644 index 0000000000..5d8b094476 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_lift_3_2.png differ diff --git a/resources/g2/track/rmc/steep_to_gentle_up_lift_4.png b/resources/g2/track/rmc/steep_to_gentle_up_lift_4.png new file mode 100644 index 0000000000..74974b90af Binary files /dev/null and b/resources/g2/track/rmc/steep_to_gentle_up_lift_4.png differ diff --git a/resources/g2/track/rmc/steep_to_vertical_up_1.png b/resources/g2/track/rmc/steep_to_vertical_up_1.png new file mode 100644 index 0000000000..6bd01bf288 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_vertical_up_1.png differ diff --git a/resources/g2/track/rmc/steep_to_vertical_up_2.png b/resources/g2/track/rmc/steep_to_vertical_up_2.png new file mode 100644 index 0000000000..23a2b61769 Binary files /dev/null and b/resources/g2/track/rmc/steep_to_vertical_up_2.png differ diff --git a/resources/g2/track/rmc/steep_to_vertical_up_3.png b/resources/g2/track/rmc/steep_to_vertical_up_3.png new file mode 100644 index 0000000000..0257b672ad Binary files /dev/null and b/resources/g2/track/rmc/steep_to_vertical_up_3.png differ diff --git a/resources/g2/track/rmc/steep_to_vertical_up_4.png b/resources/g2/track/rmc/steep_to_vertical_up_4.png new file mode 100644 index 0000000000..e34597b33b Binary files /dev/null and b/resources/g2/track/rmc/steep_to_vertical_up_4.png differ diff --git a/resources/g2/track/rmc/vertical_1.png b/resources/g2/track/rmc/vertical_1.png new file mode 100644 index 0000000000..585239a3e6 Binary files /dev/null and b/resources/g2/track/rmc/vertical_1.png differ diff --git a/resources/g2/track/rmc/vertical_2.png b/resources/g2/track/rmc/vertical_2.png new file mode 100644 index 0000000000..ebfe4eb34d Binary files /dev/null and b/resources/g2/track/rmc/vertical_2.png differ diff --git a/resources/g2/track/rmc/vertical_3.png b/resources/g2/track/rmc/vertical_3.png new file mode 100644 index 0000000000..55f8bbfe98 Binary files /dev/null and b/resources/g2/track/rmc/vertical_3.png differ diff --git a/resources/g2/track/rmc/vertical_4.png b/resources/g2/track/rmc/vertical_4.png new file mode 100644 index 0000000000..d852534c5a Binary files /dev/null and b/resources/g2/track/rmc/vertical_4.png differ diff --git a/resources/g2/track/rmc/vertical_to_steep_up_1.png b/resources/g2/track/rmc/vertical_to_steep_up_1.png new file mode 100644 index 0000000000..106fbed7df Binary files /dev/null and b/resources/g2/track/rmc/vertical_to_steep_up_1.png differ diff --git a/resources/g2/track/rmc/vertical_to_steep_up_2.png b/resources/g2/track/rmc/vertical_to_steep_up_2.png new file mode 100644 index 0000000000..2578aa3f0e Binary files /dev/null and b/resources/g2/track/rmc/vertical_to_steep_up_2.png differ diff --git a/resources/g2/track/rmc/vertical_to_steep_up_3.png b/resources/g2/track/rmc/vertical_to_steep_up_3.png new file mode 100644 index 0000000000..f8abd7cbd0 Binary files /dev/null and b/resources/g2/track/rmc/vertical_to_steep_up_3.png differ diff --git a/resources/g2/track/rmc/vertical_to_steep_up_4.png b/resources/g2/track/rmc/vertical_to_steep_up_4.png new file mode 100644 index 0000000000..909c38cf82 Binary files /dev/null and b/resources/g2/track/rmc/vertical_to_steep_up_4.png differ diff --git a/resources/g2/track/rmc/vertical_twist_left_up_1.png b/resources/g2/track/rmc/vertical_twist_left_up_1.png new file mode 100644 index 0000000000..2f8efcda95 Binary files /dev/null and b/resources/g2/track/rmc/vertical_twist_left_up_1.png differ diff --git a/resources/g2/track/rmc/vertical_twist_left_up_2_1.png b/resources/g2/track/rmc/vertical_twist_left_up_2_1.png new file mode 100644 index 0000000000..84f0bcb3a2 Binary files /dev/null and b/resources/g2/track/rmc/vertical_twist_left_up_2_1.png differ diff --git a/resources/g2/track/rmc/vertical_twist_left_up_2_2.png b/resources/g2/track/rmc/vertical_twist_left_up_2_2.png new file mode 100644 index 0000000000..d5d5c9930e Binary files /dev/null and b/resources/g2/track/rmc/vertical_twist_left_up_2_2.png differ diff --git a/resources/g2/track/rmc/vertical_twist_left_up_3.png b/resources/g2/track/rmc/vertical_twist_left_up_3.png new file mode 100644 index 0000000000..bfdf0f04b5 Binary files /dev/null and b/resources/g2/track/rmc/vertical_twist_left_up_3.png differ diff --git a/resources/g2/track/rmc/vertical_twist_left_up_4_1.png b/resources/g2/track/rmc/vertical_twist_left_up_4_1.png new file mode 100644 index 0000000000..b2e0810b72 Binary files /dev/null and b/resources/g2/track/rmc/vertical_twist_left_up_4_1.png differ diff --git a/resources/g2/track/rmc/vertical_twist_left_up_4_2.png b/resources/g2/track/rmc/vertical_twist_left_up_4_2.png new file mode 100644 index 0000000000..f1a6e9abef Binary files /dev/null and b/resources/g2/track/rmc/vertical_twist_left_up_4_2.png differ diff --git a/resources/g2/track/rmc/vertical_twist_right_up_1_1.png b/resources/g2/track/rmc/vertical_twist_right_up_1_1.png new file mode 100644 index 0000000000..7266691c98 Binary files /dev/null and b/resources/g2/track/rmc/vertical_twist_right_up_1_1.png differ diff --git a/resources/g2/track/rmc/vertical_twist_right_up_1_2.png b/resources/g2/track/rmc/vertical_twist_right_up_1_2.png new file mode 100644 index 0000000000..b438fa5ad1 Binary files /dev/null and b/resources/g2/track/rmc/vertical_twist_right_up_1_2.png differ diff --git a/resources/g2/track/rmc/vertical_twist_right_up_2.png b/resources/g2/track/rmc/vertical_twist_right_up_2.png new file mode 100644 index 0000000000..bb045d60ba Binary files /dev/null and b/resources/g2/track/rmc/vertical_twist_right_up_2.png differ diff --git a/resources/g2/track/rmc/vertical_twist_right_up_3_1.png b/resources/g2/track/rmc/vertical_twist_right_up_3_1.png new file mode 100644 index 0000000000..8993562dc9 Binary files /dev/null and b/resources/g2/track/rmc/vertical_twist_right_up_3_1.png differ diff --git a/resources/g2/track/rmc/vertical_twist_right_up_3_2.png b/resources/g2/track/rmc/vertical_twist_right_up_3_2.png new file mode 100644 index 0000000000..576364630d Binary files /dev/null and b/resources/g2/track/rmc/vertical_twist_right_up_3_2.png differ diff --git a/resources/g2/track/rmc/vertical_twist_right_up_4.png b/resources/g2/track/rmc/vertical_twist_right_up_4.png new file mode 100644 index 0000000000..597b7e5b51 Binary files /dev/null and b/resources/g2/track/rmc/vertical_twist_right_up_4.png differ diff --git a/resources/g2/track/rmc/very_small_turn_left_steep_up_1_1.png b/resources/g2/track/rmc/very_small_turn_left_steep_up_1_1.png new file mode 100644 index 0000000000..186443df00 Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_left_steep_up_1_1.png differ diff --git a/resources/g2/track/rmc/very_small_turn_left_steep_up_1_2.png b/resources/g2/track/rmc/very_small_turn_left_steep_up_1_2.png new file mode 100644 index 0000000000..d0a44020ba Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_left_steep_up_1_2.png differ diff --git a/resources/g2/track/rmc/very_small_turn_left_steep_up_2_1.png b/resources/g2/track/rmc/very_small_turn_left_steep_up_2_1.png new file mode 100644 index 0000000000..5e58805468 Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_left_steep_up_2_1.png differ diff --git a/resources/g2/track/rmc/very_small_turn_left_steep_up_2_2.png b/resources/g2/track/rmc/very_small_turn_left_steep_up_2_2.png new file mode 100644 index 0000000000..19992b4632 Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_left_steep_up_2_2.png differ diff --git a/resources/g2/track/rmc/very_small_turn_left_steep_up_3_1.png b/resources/g2/track/rmc/very_small_turn_left_steep_up_3_1.png new file mode 100644 index 0000000000..8932d1c50e Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_left_steep_up_3_1.png differ diff --git a/resources/g2/track/rmc/very_small_turn_left_steep_up_3_2.png b/resources/g2/track/rmc/very_small_turn_left_steep_up_3_2.png new file mode 100644 index 0000000000..f68b793b08 Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_left_steep_up_3_2.png differ diff --git a/resources/g2/track/rmc/very_small_turn_left_steep_up_4_1.png b/resources/g2/track/rmc/very_small_turn_left_steep_up_4_1.png new file mode 100644 index 0000000000..151c04338d Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_left_steep_up_4_1.png differ diff --git a/resources/g2/track/rmc/very_small_turn_left_steep_up_4_2.png b/resources/g2/track/rmc/very_small_turn_left_steep_up_4_2.png new file mode 100644 index 0000000000..98bd96f3d4 Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_left_steep_up_4_2.png differ diff --git a/resources/g2/track/rmc/very_small_turn_right_steep_up_1_1.png b/resources/g2/track/rmc/very_small_turn_right_steep_up_1_1.png new file mode 100644 index 0000000000..b553a2825c Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_right_steep_up_1_1.png differ diff --git a/resources/g2/track/rmc/very_small_turn_right_steep_up_1_2.png b/resources/g2/track/rmc/very_small_turn_right_steep_up_1_2.png new file mode 100644 index 0000000000..e0d8d7b94f Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_right_steep_up_1_2.png differ diff --git a/resources/g2/track/rmc/very_small_turn_right_steep_up_2_1.png b/resources/g2/track/rmc/very_small_turn_right_steep_up_2_1.png new file mode 100644 index 0000000000..76fe182947 Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_right_steep_up_2_1.png differ diff --git a/resources/g2/track/rmc/very_small_turn_right_steep_up_2_2.png b/resources/g2/track/rmc/very_small_turn_right_steep_up_2_2.png new file mode 100644 index 0000000000..55d45eb26f Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_right_steep_up_2_2.png differ diff --git a/resources/g2/track/rmc/very_small_turn_right_steep_up_3_1.png b/resources/g2/track/rmc/very_small_turn_right_steep_up_3_1.png new file mode 100644 index 0000000000..3c374e9123 Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_right_steep_up_3_1.png differ diff --git a/resources/g2/track/rmc/very_small_turn_right_steep_up_3_2.png b/resources/g2/track/rmc/very_small_turn_right_steep_up_3_2.png new file mode 100644 index 0000000000..3cf8592b38 Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_right_steep_up_3_2.png differ diff --git a/resources/g2/track/rmc/very_small_turn_right_steep_up_4_1.png b/resources/g2/track/rmc/very_small_turn_right_steep_up_4_1.png new file mode 100644 index 0000000000..a45388a9df Binary files /dev/null and b/resources/g2/track/rmc/very_small_turn_right_steep_up_4_1.png differ diff --git a/resources/g2/track/rmc/very_small_turn_right_steep_up_4_2.png b/resources/g2/track/rmc/very_small_turn_right_steep_up_4_2.png new file mode 100644 index 0000000000..d0a44020ba Binary files /dev/null and b/resources/g2/track/rmc/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 466b1367f7..463a2e538e 100644 --- a/src/openrct2-ui/windows/NewRide.cpp +++ b/src/openrct2-ui/windows/NewRide.cpp @@ -94,6 +94,7 @@ static constexpr const char RideTypeViewOrder[] = { RIDE_TYPE_REVERSE_FREEFALL_COASTER, RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER, RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER, + RIDE_TYPE_HYBRID_COASTER, // Gentle rides RIDE_TYPE_MONORAIL_CYCLES, diff --git a/src/openrct2/libopenrct2.vcxproj b/src/openrct2/libopenrct2.vcxproj index ff0794e8c5..71ab99f4d3 100644 --- a/src/openrct2/libopenrct2.vcxproj +++ b/src/openrct2/libopenrct2.vcxproj @@ -306,6 +306,7 @@ + @@ -655,6 +656,7 @@ + diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index f6bc68a21c..a0c43f0ff6 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -110,6 +110,7 @@ enum STR_RIDE_NAME_MINE_RIDE = 90, STR_RIDE_NAME_59 = 91, STR_RIDE_NAME_LIM_LAUNCHED_ROLLER_COASTER = 92, + STR_RIDE_NAME_HYBRID_COASTER = 93, STR_RIDE_DESCRIPTION_SPIRAL_ROLLER_COASTER = 512, STR_RIDE_DESCRIPTION_STAND_UP_ROLLER_COASTER = 513, @@ -199,6 +200,7 @@ enum STR_RIDE_DESCRIPTION_MINE_RIDE = 600, STR_RIDE_DESCRIPTION_LIM_LAUNCHED_ROLLER_COASTER = 602, + STR_RIDE_DESCRIPTION_HYBRID_COASTER = 603, STR_GUEST_X = 767, STR_HANDYMAN_X = 768, diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index c1c1b48b8a..b7ceb3f636 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -34,7 +34,7 @@ // This string specifies which version of network stream current build uses. // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -#define NETWORK_STREAM_VERSION "0" +#define NETWORK_STREAM_VERSION "1" #define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION static Peep* _pickup_peep = nullptr; diff --git a/src/openrct2/paint/Supports.cpp b/src/openrct2/paint/Supports.cpp index b019c7527b..db3ff03691 100644 --- a/src/openrct2/paint/Supports.cpp +++ b/src/openrct2/paint/Supports.cpp @@ -10,6 +10,7 @@ #include "Supports.h" #include "../interface/Viewport.h" +#include "../sprites.h" #include "../world/Surface.h" #include "Paint.h" #include "tile_element/Paint.TileElement.h" @@ -197,20 +198,110 @@ static constexpr const supports_id_desc WoodenSupportImageIds[] = { { 3770, 3771, 3772, 3839 }, }; +static constexpr const uint16_t WoodenCurveSupportImageIds0[81] = { + 3465, + 3466, + 3467, + 3468, + 3469, + 3470, + 3471, + 3472, + 3473, + 3474, + 3475, + 3476, + 3477, + 3478, + 3479, + 3480, + 3481, + 3482, + 3483, + 3484, + 3485, + 3486, + 3487, + 3488, + 3489, + 3490, + 3491, + 3492, + 3493, + 3494, + 3495, + 3496, + 3497, + 3498, + 3499, + 3500, + 3501, + 3502, + 3503, + 3504, + 3505, + 3506, + 3507, + 3508, + 3509, + 3510, + 3511, + 3512, + 3513, + SPR_G2_SUPPORT_BEGIN, + SPR_G2_SUPPORT_BEGIN + 1, + SPR_G2_SUPPORT_BEGIN + 2, + SPR_G2_SUPPORT_BEGIN + 3, + SPR_G2_SUPPORT_BEGIN + 4, + SPR_G2_SUPPORT_BEGIN + 5, + SPR_G2_SUPPORT_BEGIN + 6, + SPR_G2_SUPPORT_BEGIN + 7, + SPR_G2_SUPPORT_BEGIN + 8, + SPR_G2_SUPPORT_BEGIN + 9, + SPR_G2_SUPPORT_BEGIN + 10, + SPR_G2_SUPPORT_BEGIN + 11, + SPR_G2_SUPPORT_BEGIN + 12, + SPR_G2_SUPPORT_BEGIN + 13, + SPR_G2_SUPPORT_BEGIN + 14, + SPR_G2_SUPPORT_BEGIN + 15, + SPR_G2_SUPPORT_BEGIN + 16, + SPR_G2_SUPPORT_BEGIN + 17, + SPR_G2_SUPPORT_BEGIN + 18, + SPR_G2_SUPPORT_BEGIN + 19, + SPR_G2_SUPPORT_BEGIN + 20, + SPR_G2_SUPPORT_BEGIN + 21, + SPR_G2_SUPPORT_BEGIN + 22, + SPR_G2_SUPPORT_BEGIN + 23, + SPR_G2_SUPPORT_BEGIN + 24, + SPR_G2_SUPPORT_BEGIN + 25, + SPR_G2_SUPPORT_BEGIN + 26, + SPR_G2_SUPPORT_BEGIN + 27, + SPR_G2_SUPPORT_BEGIN + 28, + SPR_G2_SUPPORT_BEGIN + 29, + SPR_G2_SUPPORT_BEGIN + 30, + SPR_G2_SUPPORT_BEGIN + 31, +}; + +static constexpr const uint16_t WoodenCurveSupportImageIds1[81] = { + 3681, 3682, 3683, 3684, 3685, 3686, 3687, 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 3696, 3697, + 3698, 3699, 3700, 3701, 3702, 3703, 3704, 3705, 3706, 3707, 3708, 3709, 3710, 3711, 3712, 3713, 3714, + 3715, 3716, 3717, 3718, 3719, 3720, 3721, 3722, 3723, 3724, 3725, 3726, 3727, 3728, 3729, +}; + /* 0x0097B224 */ -static constexpr const uint16_t WoodenCurveSupportImageIds[] = { - 3465, - 3465, - 0, - 0, - 0, - 0, - 3681, - 3681, - 0, - 0, - 0, - 0, +static constexpr const uint16_t* WoodenCurveSupportImageIds[12] = { + WoodenCurveSupportImageIds0, + WoodenCurveSupportImageIds0, + nullptr, + nullptr, + nullptr, + nullptr, + WoodenCurveSupportImageIds1, + WoodenCurveSupportImageIds1, + nullptr, + nullptr, + nullptr, + nullptr, }; struct unk_supports_desc_bound_box { @@ -230,39 +321,39 @@ struct unk_supports_desc { /* 0x0097B23C */ static constexpr const unk_supports_desc byte_97B23C[] = { + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Flat to gentle {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Gentle to flat {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Gentle slope {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, - {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, - {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, - {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, - {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Gentle to steep {{{10, 0, 0}, {10, 32, 44}}, 1, 1}, {{{0, 10, 0}, {32, 10, 44}}, 1, 1}, {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, - {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Steep to gentle {{{10, 0, 0}, {10, 32, 44}}, 1, 1}, {{{0, 10, 0}, {32, 10, 44}}, 1, 1}, {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, - {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Steep slope {{{10, 0, 2}, {10, 32, 76}}, 1, 1}, {{{0, 10, 2}, {32, 10, 76}}, 1, 1}, {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 4}}, 0, 1}, // Slope {{{0, 0, 0}, {1, 1, 4}}, 0, 1}, {{{0, 0, 0}, {1, 1, 4}}, 0, 1}, {{{0, 0, 0}, {1, 1, 4}}, 0, 1}, - {{{0, 0, 0}, {1, 1, 4}}, 0, 1}, - {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, - {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Flat to steep small {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Steep to flat small {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, @@ -279,6 +370,38 @@ static constexpr const unk_supports_desc byte_97B23C[] = { {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, {{{2, 2, 1}, {28, 28, 2}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Flat to steep large 1 + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Flat to steep large 2 + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Flat to steep large 3 + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Flat to steep large 4 + {{{10, 0, 2}, {10, 32, 52}}, 1, 1}, + {{{0, 10, 2}, {32, 10, 52}}, 1, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Steep to flat large 1 + {{{10, 0, 2}, {10, 32, 76}}, 1, 1}, + {{{0, 10, 2}, {32, 10, 76}}, 1, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Steep to flat large 2 + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Steep to flat large 3 + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, // Steep to flat large 4 + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1}, + {{{0, 0, 0}, {1, 1, 8}}, 0, 1} }; /* 0x0098D8D4 */ @@ -473,10 +596,10 @@ bool wooden_a_supports_paint_setup( { special = (special - 1) & 0xFFFF; - int32_t imageId = WoodenCurveSupportImageIds[supportType]; - if (imageId != 0 && byte_97B23C[special].var_7 != 0) + if (WoodenCurveSupportImageIds[supportType] != nullptr && WoodenCurveSupportImageIds[supportType][special] != 0 + && byte_97B23C[special].var_7 != 0) { - imageId += special; + uint32_t imageId = WoodenCurveSupportImageIds[supportType][special]; imageId |= imageColourFlags; unk_supports_desc_bound_box bBox = byte_97B23C[special].bounding_box; @@ -653,12 +776,13 @@ bool wooden_b_supports_paint_setup( { uint16_t specialIndex = (special - 1) & 0xFFFF; - uint32_t imageId = WoodenCurveSupportImageIds[supportType]; unk_supports_desc supportsDesc = byte_97B23C[specialIndex]; - if (imageId != 0 && supportsDesc.var_7 != 0) + if (WoodenCurveSupportImageIds[supportType] != nullptr && WoodenCurveSupportImageIds[supportType][specialIndex] != 0 + && supportsDesc.var_7 != 0) { // byte_97B23C[special].var_7 is never 0 - imageId = (imageId + specialIndex) | imageColourFlags; + uint32_t imageId = WoodenCurveSupportImageIds[supportType][specialIndex]; + imageId |= imageColourFlags; unk_supports_desc_bound_box boundBox = supportsDesc.bounding_box; diff --git a/src/openrct2/paint/Supports.h b/src/openrct2/paint/Supports.h index a144060f80..69f9956d09 100644 --- a/src/openrct2/paint/Supports.h +++ b/src/openrct2/paint/Supports.h @@ -13,6 +13,8 @@ #include "../common.h" #include "../world/Footpath.h" +constexpr const uint8_t NumVanillaWoodenSupportTypes = 49; + bool wooden_a_supports_paint_setup( paint_session* session, int32_t supportType, int32_t special, int32_t height, uint32_t imageColourFlags, bool* underground); bool wooden_b_supports_paint_setup( diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index b2deeeca3f..7342e16cc8 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -624,12 +624,12 @@ enum RIDE_TYPE_MINE_RIDE, RIDE_TYPE_59, RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER = 90, - RIDE_TYPE_HYPERCOASTER, RIDE_TYPE_HYPER_TWISTER, RIDE_TYPE_MONSTER_TRUCKS, RIDE_TYPE_SPINNING_WILD_MOUSE, RIDE_TYPE_CLASSIC_MINI_ROLLER_COASTER, + RIDE_TYPE_HYBRID_COASTER, RIDE_TYPE_COUNT }; diff --git a/src/openrct2/ride/RideData.cpp b/src/openrct2/ride/RideData.cpp index 7b3eb81b85..8adac5469e 100644 --- a/src/openrct2/ride/RideData.cpp +++ b/src/openrct2/ride/RideData.cpp @@ -35,6 +35,7 @@ #include "coaster/meta/FlyingRollerCoaster.h" #include "coaster/meta/GigaCoaster.h" #include "coaster/meta/HeartlineTwisterCoaster.h" +#include "coaster/meta/HybridCoaster.h" #include "coaster/meta/HyperTwister.h" #include "coaster/meta/Hypercoaster.h" #include "coaster/meta/InvertedHairpinCoaster.h" @@ -307,6 +308,7 @@ constexpr const RideTypeDescriptor RideTypeDescriptors[RIDE_TYPE_COUNT] = { /* RIDE_TYPE_MONSTER_TRUCKS, */ MonsterTrucksRTD, /* RIDE_TYPE_SPINNING_WILD_MOUSE, */ SpinningWildMouseRTD, /* RIDE_TYPE_CLASSIC_MINI_ROLLER_COASTER, */ ClassicMiniRollerCoasterRTD, + /* RIDE_TYPE_HYBRID_COASTER */ HybridCoasterRTD, }; bool RideTypeDescriptor::HasFlag(uint64_t flag) const diff --git a/src/openrct2/ride/RideRatings.cpp b/src/openrct2/ride/RideRatings.cpp index 4cf826ec96..f4e9878eea 100644 --- a/src/openrct2/ride/RideRatings.cpp +++ b/src/openrct2/ride/RideRatings.cpp @@ -4345,6 +4345,51 @@ void ride_ratings_calculate_lim_launched_roller_coaster(Ride* ride) ride->sheltered_eighths = get_num_of_sheltered_eighths(ride).TotalShelteredEighths; } +void ride_ratings_calculate_hybrid_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, 80), RIDE_RATING(1, 00), RIDE_RATING(0, 45)); + 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, 400497); + ride_ratings_apply_duration(&ratings, ride, 150, 26214); + ride_ratings_apply_gforces(&ratings, ride, 40960, 35746, 49648); + ride_ratings_apply_turns(&ratings, ride, 34179, 34767, 45749); + ride_ratings_apply_drops(&ratings, ride, 34952, 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); + } + + ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); + + if (ride->inversions == 0) + { + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 40), 2, 2, 2); + ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 2, 2); + } + + ride_ratings_apply_excessive_lateral_g_penalty(&ratings, ride, 24576, 35746, 49648); + 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 afa75fcfec..5a92411be4 100644 --- a/src/openrct2/ride/RideRatings.h +++ b/src/openrct2/ride/RideRatings.h @@ -139,4 +139,5 @@ void ride_ratings_calculate_inverted_impulse_coaster(Ride* ride); 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_drink_stall(Ride* ride); diff --git a/src/openrct2/ride/TrackPaint.h b/src/openrct2/ride/TrackPaint.h index 1385cfe38d..a9e4531599 100644 --- a/src/openrct2/ride/TrackPaint.h +++ b/src/openrct2/ride/TrackPaint.h @@ -469,5 +469,9 @@ TRACK_PAINT_FUNCTION get_track_paint_function_inverted_impulse_rc(int32_t trackT TRACK_PAINT_FUNCTION get_track_paint_function_mini_rc(int32_t trackType); TRACK_PAINT_FUNCTION get_track_paint_function_mine_ride(int32_t trackType); TRACK_PAINT_FUNCTION get_track_paint_function_lim_launched_rc(int32_t trackType); +namespace HybridRC +{ + TRACK_PAINT_FUNCTION GetTrackPaintFunction(int32_t trackType); +} #endif diff --git a/src/openrct2/ride/coaster/HybridCoaster.cpp b/src/openrct2/ride/coaster/HybridCoaster.cpp new file mode 100644 index 0000000000..b57e63513a --- /dev/null +++ b/src/openrct2/ride/coaster/HybridCoaster.cpp @@ -0,0 +1,11139 @@ +#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//:ggithub.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" + +// Dynamic glitches +// Steep to gentle/gentle to steep - sprite splitting issue requiring manual fix + +// Glitches present on original (fixing optional) +// Sloped turns +// Steep to vertical +// Helixes (check height of bounding box but probably a sprite mask issue) + +namespace HybridRC +{ + static uint32_t GetTrackColour(paint_session* session) + { + if (session->TrackColours[SCHEME_TRACK] == 0x21600000) + return 0x21600000; // TODO dirty hack + else + return (session->TrackColours[SCHEME_TRACK] & ~0x1F000000) + | ((session->TrackColours[SCHEME_SUPPORTS] & 0xF80000) << 5); + } + + 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()) + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_FLAT + direction), 0, 0, 32, 20, 3, + height, 0, 6, height); + } + else + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT + (direction & 1)), 0, 0, 32, 20, 3, + height, 0, 6, height); + } + wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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_HYBRID_TRACK_BRAKE + 0), (SPR_G2_HYBRID_TRACK_BLOCK_BRAKE + 0), SPR_STATION_BASE_A_SW_NE }, + { (SPR_G2_HYBRID_TRACK_BRAKE + 1), (SPR_G2_HYBRID_TRACK_BLOCK_BRAKE + 1), SPR_STATION_BASE_A_NW_SE }, + { (SPR_G2_HYBRID_TRACK_BRAKE + 0), (SPR_G2_HYBRID_TRACK_BLOCK_BRAKE + 0), SPR_STATION_BASE_A_SW_NE }, + { (SPR_G2_HYBRID_TRACK_BRAKE + 1), (SPR_G2_HYBRID_TRACK_BLOCK_BRAKE + 1), SPR_STATION_BASE_A_NW_SE }, + }; + + if (tileElement->AsTrack()->GetType() == TrackElemType::EndStation) + { + sub_98197C_rotated( + session, direction, imageIds[direction][1] | GetTrackColour(session), 0, 0, 32, 20, 1, height, 0, 6, + height + 3); + } + else + { + sub_98197C_rotated( + session, direction, imageIds[direction][0] | GetTrackColour(session), 0, 0, 32, 20, 1, height, 0, 6, + height + 3); + } + + wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + + auto ride = get_ride(rideIndex); + if (ride != nullptr) + track_paint_util_draw_station_platform(session, ride, direction, height, 10, tileElement); + + 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()) + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE + direction + 8), 0, 0, 32, 20, + 2, height, 0, 6, height + 3); + } + else + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE + direction + 8), 0, 0, 32, 20, 2, + height, 0, 6, height + 3); + } + wooden_a_supports_paint_setup( + session, direction & 1, 9 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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()) + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP + direction + 12), 0, 0, 32, 20, + 3, height, 0, 6, height); + } + else + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP + direction + 12), 0, 0, 32, 20, 3, + height, 0, 6, height); + } + wooden_a_supports_paint_setup( + session, direction & 1, 21 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 56, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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()) + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE + direction), 0, 0, 32, 20, 3, + height, 0, 6, height); + } + else + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE + direction), 0, 0, 32, 20, 3, height, + 0, 6, height); + } + wooden_a_supports_paint_setup( + session, direction & 1, 1 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP + 0), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + session->WoodenSupportsPrependTo = sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP + 1), 0, 0, 32, 20, 3, + height, 0, 3, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP + 2), 0, 0, 32, 2, 43, + height, 0, 28, height); + break; + case 2: + session->WoodenSupportsPrependTo = sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP + 3), 0, 0, 32, 20, 3, + height, 0, 3, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP + 4), 0, 0, 32, 2, 43, + height, 0, 28, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP + 5), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP + 0), 0, 0, 32, 20, 3, height, + 0, 6, height + 2); + break; + case 1: + session->WoodenSupportsPrependTo = sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP + 1), 0, 0, 32, 20, 3, height, + 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP + 2), 0, 0, 32, 2, 43, height, + 0, 28, height); + break; + case 2: + session->WoodenSupportsPrependTo = sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP + 3), 0, 0, 32, 20, 3, height, + 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP + 4), 0, 0, 32, 2, 43, height, + 0, 28, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP + 5), 0, 0, 32, 20, 3, height, + 0, 6, height + 2); + break; + } + } + wooden_a_supports_paint_setup( + session, direction & 1, 13 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 24, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP + 6), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + session->WoodenSupportsPrependTo = sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP + 7), 0, 0, 32, 20, 3, + height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP + 8), 0, 0, 32, 1, 66, + height, 0, 27, height); + break; + case 2: + session->WoodenSupportsPrependTo = sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP + 9), 0, 0, 32, 20, 3, + height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP + 10), 0, 0, 32, 1, 66, + height, 0, 27, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP + 11), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP + 6), 0, 0, 32, 20, 3, height, + 0, 6, height); + break; + case 1: + session->WoodenSupportsPrependTo = sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP + 7), 0, 0, 32, 20, 3, height, + 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP + 8), 0, 0, 32, 1, 66, height, + 0, 27, height); + break; + case 2: + session->WoodenSupportsPrependTo = sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP + 9), 0, 0, 32, 20, 3, height, + 0, 6, height); + + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP + 10), 0, 0, 32, 1, 66, height, + 0, 27, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP + 11), 0, 0, 32, 20, 3, height, + 0, 6, height); + break; + } + } + wooden_a_supports_paint_setup( + session, direction & 1, 17 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 24, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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()) + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE + direction + 4), 0, 0, 32, 20, + 3, height, 0, 6, height); + } + else + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE + direction + 4), 0, 0, 32, 20, 2, + height, 0, 6, height + 3); + } + wooden_a_supports_paint_setup( + session, direction & 1, 5 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_FLAT); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL + direction + 8), 0, 0, 2, 20, + 31, height, 4, 6, height + 8); + paint_util_set_vertical_tunnel(session, height + 32); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL + direction), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup( + session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + paint_util_set_vertical_tunnel(session, height + 56); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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) + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL + direction + 4), 0, 0, 32, 20, 3, + height, 0, 6, height + 8); + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height + 48, TUNNEL_SQUARE_8); + break; + case 2: + paint_util_push_tunnel_left(session, height + 48, TUNNEL_SQUARE_8); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL + 6), 0, 0, 2, 20, 31, + height, 24, 6, height + 8); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL + 7), 0, 0, 32, 20, 3, + height, 0, 6, height + 8); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL + 4), 0, 0, 32, 20, 3, + height, 0, 6, height + 8); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE + 0), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE + 3), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE + 6), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE + 9), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE + 1), 0, 0, 16, 16, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE + 4), 0, 0, 16, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE + 7), 0, 0, 16, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE + 10), 0, 0, 16, 16, + 3, height, 16, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE + 2), 0, 0, 32, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE + 5), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE + 8), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE + 11), 0, 0, 32, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 0), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 5), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 10), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 15), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C8 | SEGMENT_CC, (direction + 1) & 3), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 1), 0, 0, 32, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 6), 0, 0, 36, 16, + 3, height, 0, 4, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 11), 0, 0, 32, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 16), 0, 0, 32, 14, + 3, height, 0, 18, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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 + 1) & 3), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 2), 0, 0, 16, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 7), 0, 0, 16, 16, + 3, height, 16, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 12), 0, 0, 16, 16, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 17), 0, 0, 33, 33, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_BC | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, + (direction + 1) & 3), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C8 | SEGMENT_CC, (direction + 1) & 3), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 3), 0, 0, 16, 32, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 8), 0, 0, 16, 36, + 3, height, 4, 0, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 13), 0, 0, 16, 32, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 18), 0, 0, 14, 32, + 3, height, 18, 0, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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 + 1) & 3), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 4), 0, 0, 32, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 9), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 14), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE + 19), 0, 0, 32, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 0), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 4), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 8), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 12), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 1), 0, 0, 32, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 5), 0, 0, 34, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 9), 0, 0, 32, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 13), 0, 0, 32, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 2), 0, 0, 16, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 6), 0, 0, 32, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 10), 0, 0, 16, 16, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 14), 0, 0, 34, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 3), 0, 0, 16, 16, + 3, height, 16, 16, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 7), 0, 0, 16, 18, + 3, height, 0, 16 + 8, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 11), 0, 0, 16, 16, + 3, height, 0, 0, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 15), 0, 0, 16, 16, + 3, height, 16, 0, height); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 16), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 20), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 24), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 28), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 17), 0, 0, 32, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 21), 0, 0, 32, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 25), 0, 0, 34, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 29), 0, 0, 32, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 18), 0, 0, 34, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 22), 0, 0, 16, 16, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 26), 0, 0, 28, 28, + 3, height, 4, 4, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 30), 0, 0, 16, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 19), 0, 0, 16, 16, + 3, height, 16, 0, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 23), 0, 0, 16, 16, + 3, height, 0, 0, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 27), 0, 0, 16, 18, + 3, height, 0, 16, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE + 31), 0, 0, 16, 16, + 3, height, 16, 16, height); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_FLAT_DIAGONAL + 3), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_FLAT_DIAGONAL + 0), -16, + -16, 32, 32, 3, height, -16, -16, height); + wooden_a_supports_paint_setup( + session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_DIAGONAL + 0), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_FLAT_DIAGONAL + 2), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_DIAGONAL + 2), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_FLAT_DIAGONAL + 1), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_DIAGONAL + 1), -16, -16, + 32, 32, 3, height, -16, -16, height); + break; + } + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 11), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 8), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_DIAGONAL + 8), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 10), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_DIAGONAL + 10), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 9), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 7), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 4), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_DIAGONAL + 4), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 6), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_DIAGONAL + 6), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 5), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 3), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 0), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_DIAGONAL + 0), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 2), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_DIAGONAL + 2), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 1), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 9), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 10), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_DIAGONAL + 10), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 8), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_DIAGONAL + 8), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 11), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 5), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 6), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_DIAGONAL + 6), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 4), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_DIAGONAL + 4), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 7), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 1), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 2), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_DIAGONAL + 2), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 0), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_DIAGONAL + 0), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL + 3), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 11), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 8), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_DIAGONAL + 8), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 10), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_DIAGONAL + 10), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 9), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 3), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 0), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_DIAGONAL + 0), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 2), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_DIAGONAL + 2), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 1), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 7), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 4), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_DIAGONAL + 4), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 6), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_DIAGONAL + 6), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 5), + -16, -16, 16, 16, 3, height, 0, 0, height); + break; + } + } + else + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 9), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 10), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_DIAGONAL + 10), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 8), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_DIAGONAL + 8), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 11), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 5), + -16, -16, 16, 16, 3, height, 0, 0, height); + break; + } + } + else + { + switch (direction) + { + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 6), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_DIAGONAL + 6), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 4), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_DIAGONAL + 4), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 7), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 1), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 2), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_DIAGONAL + 2), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 0), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_DIAGONAL + 0), -16, + -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 3: + if (tileElement->AsTrack()->HasChain()) + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_LIFT_TRACK_STEEP_DIAGONAL + 3), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + } + else + { + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 0), 0, 0, 32, 20, 3, + height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 1), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 2), 0, 0, 32, 20, 3, + height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 3), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 4), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 5), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 6), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 7), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 8), 0, 0, 32, 20, 3, + height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 9), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 10), 0, 0, 32, 20, 3, + height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 11), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + } + wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 12), 0, 0, 32, 20, 3, + height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 13), 0, 0, 32, 1, 34, + height, 0, 27, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 14), 0, 0, 32, 20, 3, + height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 15), 0, 0, 32, 1, 34, + height, 0, 27, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 16), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 17), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 1 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 18), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 19), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 20), 0, 0, 32, 20, 3, + height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 21), 0, 0, 32, 1, 34, + height, 0, 27, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 22), 0, 0, 32, 20, 3, + height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 23), 0, 0, 32, 1, 34, + height, 0, 27, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 1 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 24), 0, 0, 32, 20, 2, + height, 0, 6, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 25), 0, 0, 32, 1, 34, + height, 0, 27, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 26), 0, 0, 32, 20, 2, + height, 0, 6, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 27), 0, 0, 32, 1, 34, + height, 0, 27, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 28), 0, 0, 32, 20, 2, + height, 0, 6, height + 3); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 29), 0, 0, 32, 20, 2, + height, 0, 6, height + 3); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 5 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_FLAT); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 30), 0, 0, 32, 20, 2, + height, 0, 6, height + 3); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 31), 0, 0, 32, 20, 2, + height, 0, 6, height + 3); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 32), 0, 0, 32, 20, 2, + height, 0, 6, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 33), 0, 0, 32, 1, 34, + height, 0, 27, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 34), 0, 0, 32, 20, 2, + height, 0, 6, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 35), 0, 0, 32, 1, 34, + height, 0, 27, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 5 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_FLAT); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 36), 0, 0, 32, 20, 3, + height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 37), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 38), 0, 0, 32, 20, 3, + height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 39), 0, 0, 32, 1, 26, + height, 0, 27, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 40), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION + 41), 0, 0, 32, 20, 3, + height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 0), + -16, -16, 32, 32, 3, height, -16, -16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 1), + -16, -16, 32, 32, 0, height, -16, -16, height + 28); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 3), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 5), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 7), + -16, -16, 32, 32, 3, height, -16, -16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 8), + -16, -16, 32, 32, 0, height, -16, -16, height + 28); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 7), + -16, -16, 32, 32, 3, height, -16, -16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 8), + -16, -16, 32, 32, 0, height, -16, -16, height + 28); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 5), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 3), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 0), + -16, -16, 32, 32, 3, height, -16, -16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 1), + -16, -16, 32, 32, 0, height, -16, -16, height + 28); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 10), + -16, -16, 32, 32, 3, height, -16, -16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 11), + -16, -16, 32, 32, 0, height, -16, -16, height + 35); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 13), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 15), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 17), + -16, -16, 32, 32, 3, height, -16, -16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 18), + -16, -16, 32, 32, 0, height, -16, -16, height + 35); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 20), + -16, -16, 32, 32, 3, height, -16, -16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 21), + -16, -16, 32, 32, 0, height, -16, -16, height + 36); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 23), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 25), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 2: + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 27), + -16, -16, 32, 32, 3, height, -16, -16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 28), + -16, -16, 32, 32, 0, height, -16, -16, height + 36); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 27), + -16, -16, 32, 32, 3, height, -16, -16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 28), + -16, -16, 32, 32, 0, height, -16, -16, height + 36); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + break; + case 2: + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 25), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + break; + case 3: + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 23), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + break; + case 2: + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 20), + -16, -16, 32, 32, 3, height, -16, -16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 21), + -16, -16, 32, 32, 0, height, -16, -16, height + 36); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup( + session, 4, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup( + session, 5, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup( + session, 2, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup( + session, 3, 0, height + 16, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + break; + case 3: + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 17), + -16, -16, 32, 32, 3, height, -16, -16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 18), + -16, -16, 32, 32, 0, height, -16, -16, height + 28); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 15), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 13), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 10), + -16, -16, 32, 32, 3, height, -16, -16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 11), + -16, -16, 32, 32, 0, height, -16, -16, height + 28); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 34), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 30), + -16, -16, 32, 32, 3, height, -16, -16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 31), + -16, -16, 32, 32, 0, height, -16, -16, height + 28); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 33), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 33), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 30), + -16, -16, 32, 32, 3, height, -16, -16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 31), + -16, -16, 32, 32, 0, height, -16, -16, height + 28); + break; + } + switch (direction) + { + case 0: + wooden_b_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_b_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_b_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_b_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL + 34), + -16, -16, 32, 32, 3, height, -16, -16, height); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 0), 0, 0, + 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 1), 0, 0, + 32, 1, 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 4), 0, 0, + 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 5), 0, 0, + 32, 1, 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 9), 0, 0, + 32, 32, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 13), 0, 0, + 26, 32, 3, height, 6, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 2), 0, 0, + 16, 16, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 6), 0, 0, + 16, 16, 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 10), 0, 0, + 16, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 14), 0, 0, + 22, 22, 3, height, 16, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 3), 0, 0, + 32, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 7), 0, 0, + 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 8), 0, 0, 1, + 32, 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 11), 0, 0, + 20, 32, 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 12), 0, 0, + 1, 32, 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED + 15), 0, 0, + 32, 26, 3, height, 6, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 0), 0, 0, + 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 1), 0, 0, + 32, 1, 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 6), 0, 0, + 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 7), 0, 0, + 32, 1, 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 14), 0, 0, + 32, 32, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 20), 0, 0, + 32, 32, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C8 | SEGMENT_CC, (direction + 1) & 3), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 2), 0, 0, + 32, 16, 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 8), 0, 0, + 48, 16, 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 15), 0, 0, + 32, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 21), 0, 0, + 32, 14, 3, height, 0, 18, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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 + 1) & 3), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 3), 0, 0, + 16, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 9), 0, 0, + 38, 38, 3, height, 0, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 10), 0, 0, + 16, 16, 1, height, 16, 16, height + 28); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 16), 0, 0, + 16, 16, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 22), 0, 0, + 38, 38, 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_BC | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, + (direction + 1) & 3), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C8 | SEGMENT_CC, (direction + 1) & 3), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 4), 0, 0, + 16, 32, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 11), 0, 0, + 16, 48, 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 17), 0, 0, + 16, 32, 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 23), 0, 0, + 14, 32, 3, height, 18, 0, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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 + 1) & 3), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 5), 0, 0, + 32, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 12), 0, 0, + 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 13), 0, 0, + 1, 32, 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 18), 0, 0, + 20, 32, 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 19), 0, 0, + 1, 32, 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED + 24), 0, 0, + 32, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 0), 0, 0, + 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 1), 0, 0, + 32, 1, 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 5), 0, 0, + 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 6), 0, 0, + 32, 1, 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 12), 0, 0, + 32, 32, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 16), 0, 0, + 32, 32, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 2), 0, 0, + 32, 16, 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 7), 0, 0, + 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 8), 0, 0, + 34, 16, 0, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 13), 0, 0, + 32, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 17), 0, 0, + 32, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 3), 0, 0, + 16, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 9), 0, 0, + 16, 16, 0, height, 16, 16, height + 28); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 14), 0, 0, + 16, 16, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 18), 0, 0, + 34, 16, 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 4), 0, 0, + 16, 16, 3, height, 16, 16, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 10), 0, 0, + 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 11), 0, 0, + 16, 18, 0, height, 0, 16, height + 28); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 15), 0, 0, + 16, 16, 3, height, 0, 0, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 19), 0, 0, + 16, 16, 3, height, 16, 0, height); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 20), 0, 0, + 32, 32, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 24), 0, 0, + 32, 32, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 28), 0, 0, + 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 29), 0, 0, + 32, 1, 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 35), 0, 0, + 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 36), 0, 0, + 32, 1, 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 21), 0, 0, + 32, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 25), 0, 0, + 32, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 30), 0, 0, + 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 31), 0, 0, + 34, 16, 0, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 37), 0, 0, + 32, 16, 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 22), 0, 0, + 34, 16, 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 26), 0, 0, + 16, 16, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 32), 0, 0, + 28, 28, 0, height, 4, 4, height + 28); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 38), 0, 0, + 16, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 3: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 23), 0, 0, + 16, 16, 3, height, 16, 0, // TODO + height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 27), 0, 0, + 16, 16, 3, height, 0, 0, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 33), 0, 0, + 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 34), 0, 0, + 16, 18, 0, height, 0, 16, height + 28); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED + 39), 0, 0, + 16, 16, 3, height, 16, 16, height); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 0), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 2), 0, 6, + 34, 20, 3, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 4), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 6), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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; + case 3: + switch (direction) + { + case 0: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 1), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 3), 6, 0, + 20, 34, 3, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 5), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 7), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_SQUARE_8); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_SQUARE_8); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 8), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 10), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 12), 0, 6, + 34, 20, 3, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 14), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 9), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 11), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 13), 6, 0, + 20, 34, 3, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE + 15), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_SQUARE_8); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_SQUARE_8); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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 TrackLeftQuarterTurn5Tile25DegUp( + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 0), 0, 0, + 32, 20, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 5), 0, 0, + 34, 20, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 10), 0, 0, + 32, 20, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 15), 0, 0, + 32, 20, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 1), 0, 0, + 32, 16, 3, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 6), 0, 0, + 32, 16, 3, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 11), 0, 0, + 32, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 16), 0, 0, + 32, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 2), 0, 0, + 16, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 7), 0, 0, + 16, 16, 3, height, 16, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 12), 0, 0, + 16, 16, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 17), 0, 0, + 16, 16, 3, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, + direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 4: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 5: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 3), 0, 0, + 16, 32, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 8), 0, 0, + 16, 32, 3, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 13), 0, 0, + 16, 32, 3, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 18), 0, 0, + 16, 32, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 4), 0, 0, + 20, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 9), 0, 0, + 20, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 14), 0, 0, + 20, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 19), 0, 0, + 20, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_SQUARE_8); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_SQUARE_8); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackRightQuarterTurn5Tile25DegUp( + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 20), 0, 0, + 32, 20, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 25), 0, 0, + 32, 20, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 30), 0, 0, + 34, 20, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 35), 0, 0, + 32, 20, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 21), 0, 0, + 32, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 26), 0, 0, + 32, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 31), 0, 0, + 32, 16, 3, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 36), 0, 0, + 32, 16, 3, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 22), 0, 0, + 16, 16, 3, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 27), 0, 0, + 16, 16, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 32), 0, 0, + 16, 16, 3, height, 16, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 37), 0, 0, + 16, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_BC | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, + direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 4: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 5: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 23), 0, 0, + 16, 32, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 28), 0, 0, + 16, 32, 3, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 33), 0, 0, + 16, 32, 3, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 38), 0, 0, + 16, 32, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 24), 0, 0, + 20, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 29), 0, 0, + 20, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 34), 0, 0, + 20, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE + 39), 0, 0, + 20, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_SQUARE_8); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_SQUARE_8); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackLeftQuarterTurn5Tile25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackRightQuarterTurn5Tile25DegUp(session, rideIndex, trackSequence, (direction + 1) & 3, height, tileElement); + } + + static void TrackRightQuarterTurn5Tile25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackLeftQuarterTurn5Tile25DegUp(session, rideIndex, trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void TrackLeftQuarterTurn1Tile60DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 0), 0, 0, 28, 28, 3, + height, 2, 2, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 1), 0, 0, 28, 28, 1, + height, 2, 2, height + 99); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 2), 0, 0, 28, 28, 3, + height, 2, 2, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 3), 0, 0, 28, 28, 1, + height, 2, 2, height + 99); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 4), 0, 0, 28, 3, 48, + height, 2, 28, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 5), 0, 0, 28, 28, 1, + height, 2, 2, height + 99); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 6), 0, 0, 28, 28, 3, + height, 2, 2, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 7), 0, 0, 28, 28, 1, + height, 2, 2, height + 99); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + track_paint_util_left_quarter_turn_1_tile_tunnel(session, direction, height, -8, TUNNEL_SQUARE_7, +56, TUNNEL_SQUARE_8); + paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + } + + static void TrackRightQuarterTurn1Tile60DegUp( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 8), 0, 0, 28, 28, 3, + height, 2, 2, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 9), 0, 0, 28, 28, 1, + height, 2, 2, height + 99); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 10), 0, 0, 28, 3, 48, + height, 2, 28, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 11), 0, 0, 28, 28, 1, + height, 2, 2, height + 99); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 12), 0, 0, 28, 28, 3, + height, 2, 2, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 13), 0, 0, 28, 28, 1, + height, 2, 2, height + 99); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 14), 0, 0, 28, 28, 3, + height, 2, 2, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE + 15), 0, 0, 28, 28, 1, + height, 2, 2, height + 99); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + track_paint_util_right_quarter_turn_1_tile_tunnel( + session, direction, height, -8, TUNNEL_SQUARE_7, +56, TUNNEL_SQUARE_8); + paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 104, 0x20); + } + + static void TrackLeftQuarterTurn1Tile60DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackRightQuarterTurn1Tile60DegUp(session, rideIndex, trackSequence, (direction + 1) & 3, height, tileElement); + } + + static void TrackRightQuarterTurn1Tile60DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackLeftQuarterTurn1Tile60DegUp(session, rideIndex, trackSequence, (direction - 1) & 3, height, tileElement); + } + + static void TrackLeftQuarterTurn1Tile90DegUp( + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL_TWIST + 0), 0, 0, 2, 20, + 63, height, 4, 6, height + 8); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL_TWIST + 1), 0, 0, 2, 20, + 63, height, 4, 6, height + 8); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL_TWIST + 2), 0, 0, 2, 20, + 63, height, 24, 6, height + 8); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL_TWIST + 3), 0, 0, 2, 20, + 63, height, 24, 6, height + 8); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL_TWIST + 4), 0, 0, 2, 20, + 63, height, 4, 6, height + 8); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 96, 0x20); + break; + case 1: + break; + } + } + + static void TrackRightQuarterTurn1Tile90DegUp( + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL_TWIST + 6), 0, 0, 2, 20, + 63, height, 4, 6, height + 8); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL_TWIST + 7), 0, 0, 2, 20, + 63, height, 24, 6, height + 8); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL_TWIST + 8), 0, 0, 2, 20, + 63, height, 24, 6, height + 8); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL_TWIST + 9), 0, 0, 2, 20, + 63, height, 4, 6, height + 8); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_VERTICAL_TWIST + 10), 0, 0, 2, + 20, 63, height, 24, 6, height + 8); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_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(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 96, 0x20); + break; + case 1: + break; + } + } + + static void TrackLeftQuarterTurn1Tile90DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackRightQuarterTurn1Tile90DegUp(session, rideIndex, trackSequence, (direction + 1) & 3, height, tileElement); + } + + static void TrackRightQuarterTurn1Tile90DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + TrackLeftQuarterTurn1Tile90DegUp(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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 0), 0, 0, 32, 20, + 2, height, 0, 6, height + 3); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 1), 0, 0, 32, 20, + 2, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 2), 0, 0, 32, 1, + 34, height, 0, 27, height + 3); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 3), 0, 0, 32, 20, + 2, height, 0, 6, height + 3); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 4), 0, 0, 32, 20, + 2, height, 0, 6, height + 3); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 9 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 5), 0, 0, 32, 20, + 2, height, 0, 6, height + 3); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 6), 0, 0, 32, 20, + 2, height, 0, 6, height + 3); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 7), 0, 0, 32, 20, + 2, height, 0, 6, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 8), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 9), 0, 0, 32, 20, + 2, height, 0, 6, height + 3); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 9 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 10), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 11), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 12), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 13), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 14), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 9 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 15), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 16), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 17), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 18), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 19), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 9 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 20), 0, 0, 32, + 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 21), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 22), 0, 0, 32, + 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 23), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 24), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 25), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 1 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 26), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 27), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 28), 0, 0, 32, + 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 29), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 30), 0, 0, 32, + 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 31), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 1 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 32), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 33), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 34), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 35), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 36), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 37), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 5 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_FLAT); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 38), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 39), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 40), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 41), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 42), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 43), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 5 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_FLAT); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 44), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 45), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 46), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 47), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 9 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 48), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 49), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 50), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 51), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 9 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 52), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 53), 0, 0, 32, + 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 54), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 55), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 56), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 1 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 57), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 58), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 59), 0, 0, 32, + 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 60), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 61), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 1 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 62), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 63), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 64), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 65), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 66), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 5 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_FLAT); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 67), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 68), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 69), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 70), 0, 0, 32, 1, + 34, height, 0, 27, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION + 71), 0, 0, 32, + 20, 2, height, 0, 6, height + 3); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 5 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_FLAT); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 0), + 0, 6, 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 2), + 0, 6, 32, 20, 3, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 3), + 0, 6, 34, 1, 34, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 6), + 0, 6, 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 9), + 0, 6, 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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; + case 3: + switch (direction) + { + case 0: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 1), + 6, 0, 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 0, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 4), + 6, 0, 20, 32, 3, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 5), + 6, 0, 1, 34, 34, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 7), + 6, 0, 20, 32, 3, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 8), + 6, 0, 1, 32, 34, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 10), + 6, 0, 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 1, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_SQUARE_8); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_SQUARE_8); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 11), + 0, 6, 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 13), + 0, 6, 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 16), + 0, 6, 32, 20, 3, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 17), + 0, 6, 34, 1, 34, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 20), + 0, 6, 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 12), + 6, 0, 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 14), + 6, 0, 20, 32, 3, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 15), + 6, 0, 1, 32, 34, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 18), + 6, 0, 20, 32, 3, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 19), + 6, 0, 1, 34, 34, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED + 21), + 6, 0, 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_SQUARE_8); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_SQUARE_8); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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 TrackLeftBankedQuarterTurn5Tile25DegUp( + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 0), + 0, 0, 32, 20, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 5), + 0, 0, 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 6), + 0, 0, 34, 1, 34, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 15), + 0, 0, 32, 20, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 21), + 0, 0, 32, 20, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 1), + 0, 0, 32, 16, 3, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 7), + 0, 0, 32, 16, 3, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 8), + 0, 0, 1, 1, 34, height, 30, 30, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 16), + 0, 0, 32, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 22), + 0, 0, 32, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 2), + 0, 0, 16, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 9), + 0, 0, 16, 16, 3, height, 0, -8, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 10), + 0, 0, 1, 1, 34, height, 30, 30, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 17), + 0, 0, 1, 1, 3, height, 64, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 23), + 0, 0, 16, 16, 3, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, + direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 4: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 5: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 3), + 0, 0, 16, 32, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 11), + 0, 0, 16, 32, 3, height, -8, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 12), + 0, 0, 1, 1, 34, height, 30, 30, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 18), + 0, 0, 1, 32, 34, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 24), + 0, 0, 16, 32, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 4), + 0, 0, 20, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 13), + 0, 0, 20, 32, 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 14), + 0, 0, 1, 32, 34, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 19), + 0, 0, 20, 32, 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 20), + 0, 0, 1, 32, 34, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 25), + 0, 0, 20, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_SQUARE_8); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_SQUARE_8); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackRightBankedQuarterTurn5Tile25DegUp( + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 26), + 0, 0, 32, 20, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 31), + 0, 0, 32, 20, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 37), + 0, 0, 32, 20, 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 38), + 0, 0, 34, 1, 34, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 47), + 0, 0, 32, 20, 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 1: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 27), + 0, 0, 32, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 32), + 0, 0, 32, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 39), + 0, 0, 32, 16, 3, height, 0, 16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 40), + 0, 0, 1, 1, 34, height, 30, 30, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 48), + 0, 0, 32, 16, 3, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 28), + 0, 0, 16, 16, 3, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 33), + 0, 0, 1, 1, 3, height, 64, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 41), + 0, 0, 16, 16, 3, height, -8, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 42), + 0, 0, 1, 1, 34, height, 30, 30, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 49), + 0, 0, 16, 16, 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_B8 | SEGMENT_BC | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, + direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 4: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + case 5: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 29), + 0, 0, 16, 32, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 34), + 0, 0, 1, 32, 34, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 43), + 0, 0, 16, 32, 3, height, -8, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 44), + 0, 0, 1, 1, 34, height, 30, 30, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 50), + 0, 0, 16, 32, 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 30), + 0, 0, 20, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 35), + 0, 0, 20, 32, 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 36), + 0, 0, 1, 32, 34, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 45), + 0, 0, 20, 32, 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 46), + 0, 0, 1, 32, 34, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED + 51), + 0, 0, 20, 32, 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_SQUARE_8); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_SQUARE_8); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 72, 0x20); + break; + } + } + + static void TrackLeftBankedQuarterTurn5Tile25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackRightBankedQuarterTurn5Tile25DegUp(session, rideIndex, trackSequence, (direction + 1) & 3, height, tileElement); + } + + static void TrackRightBankedQuarterTurn5Tile25DegDown( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + TrackLeftBankedQuarterTurn5Tile25DegUp(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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 0), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 4), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 3), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 7), 0, 0, 32, 32, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 1), 0, 0, 32, 26, 3, + height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 5), 0, 0, 34, 26, 3, + height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 2), 0, 0, 32, 26, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 6), 0, 0, 32, 26, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 2), 0, 0, 32, 26, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 6), 0, 0, 32, 26, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 1), 0, 0, 32, 26, 3, + height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 5), 0, 0, 34, 26, 3, + height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 3), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 7), 0, 0, 32, 32, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 0), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 4), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT); + break; + case 2: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 8), 0, 0, 32, 32, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 12), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 11), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 15), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 9), 0, 0, 32, 26, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 13), 0, 0, 32, 26, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 10), 0, 0, 34, 26, 3, + height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 14), 0, 0, 32, 26, 3, + height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 10), 0, 0, 34, 26, 3, + height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 14), 0, 0, 32, 26, 3, + height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 9), 0, 0, 32, 26, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 13), 0, 0, 32, 26, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 11), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 15), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 8), 0, 0, 32, 32, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_S_BEND + 12), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT); + break; + case 2: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 0), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 1), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 4), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 5), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 9), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 13), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 2), 0, 0, 16, 16, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 6), 0, 0, 16, 16, + 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 10), 0, 0, 16, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 14), 0, 0, 16, 16, + 3, height, 16, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 3), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 7), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 8), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 11), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 12), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 15), 0, 0, 32, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_SQUARE_FLAT); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 13), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 0), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 1), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 4), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 5), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 9), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT); + break; + case 1: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 14), 0, 0, 16, 16, + 3, height, 16, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 2), 0, 0, 16, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 6), 0, 0, 16, 16, + 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 10), 0, 0, 16, 16, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 15), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 3), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 7), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 8), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 11), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 12), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 16), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 19), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 23), 0, 0, 34, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 24), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 28), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 29), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 17), 0, 0, 16, 16, + 3, height, 16, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 20), 0, 0, 16, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 25), 0, 0, 16, 16, + 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 30), 0, 0, 16, 16, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 18), 0, 0, 32, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 21), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 22), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 26), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 27), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 31), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_SQUARE_FLAT); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 19), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 23), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 24), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 28), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 29), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 16), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 6: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 20), 0, 0, 16, 16, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 25), 0, 0, 16, 16, + 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 30), 0, 0, 16, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 17), 0, 0, 16, 16, + 3, height, 16, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 21), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 22), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 26), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 27), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 31), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_SMALL_HELIX + 18), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 0), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 1), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 6), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 7), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 14), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 20), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 2), 0, 0, 32, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 8), 0, 0, 33, 16, + 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 15), 0, 0, 32, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 21), 0, 0, 32, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 3), 0, 0, 16, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 9), 0, 0, 16, 16, + 3, height, 0, 16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 10), 0, 0, 16, 16, + 1, height, 16, 16, height + 28); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 16), 0, 0, 16, 16, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 22), 0, 0, 34, 34, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4 | SEGMENT_B4 | SEGMENT_C0 | SEGMENT_C8 | SEGMENT_D0, + direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 4), 0, 0, 16, 32, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 11), 0, 0, 16, 33, + 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 17), 0, 0, 16, 32, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 23), 0, 0, 16, 32, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 5), 0, 0, 32, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 12), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 13), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 18), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 19), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 24), 0, 0, 28, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_SQUARE_FLAT); + break; + case 3: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 7: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 20), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 0), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 1), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 6), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 7), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 14), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT); + break; + case 1: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 8: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 9: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 21), 0, 0, 16, 32, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 2), 0, 0, 16, 32, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 8), 0, 0, 16, 32, + 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 15), 0, 0, 16, 32, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 22), 0, 0, 16, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 3), 0, 0, 16, 16, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 9), 0, 0, 16, 16, + 3, height, 0, 16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 10), 0, 0, 16, 16, + 1, height, 16, 16, height + 28); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 16), 0, 0, 16, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_B8 | SEGMENT_BC | SEGMENT_D0 | SEGMENT_D4, + direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 11: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 12: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 23), 0, 0, 32, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 4), 0, 0, 32, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 11), 0, 0, 32, 16, + 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 17), 0, 0, 32, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 24), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 5), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 12), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 13), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 18), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 19), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 25), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 30), 0, 0, 32, 32, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 36), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 37), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 44), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 45), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 26), 0, 0, 32, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 31), 0, 0, 32, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 38), 0, 0, 33, 16, + 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 46), 0, 0, 32, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 27), 0, 0, 34, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 32), 0, 0, 16, 16, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 39), 0, 0, 16, 32, + 3, height, 0, 16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 40), 0, 0, 16, 16, + 1, height, 16, 16, height + 28); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 47), 0, 0, 16, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_B8 | SEGMENT_BC | SEGMENT_D0 | SEGMENT_D4, + direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 4: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 5: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 28), 0, 0, 16, 32, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 33), 0, 0, 16, 32, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 41), 0, 0, 16, 33, + 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 48), 0, 0, 16, 32, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 29), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 34), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 35), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 42), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 43), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 49), 0, 0, 32, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_SQUARE_FLAT); + break; + case 1: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 7: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 30), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 36), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 37), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 44), 0, 0, 20, 32, + 3, height, 6, 0, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 45), 0, 0, 1, 32, + 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 25), 0, 0, 20, 32, + 3, height, 6, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 8: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 9: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 31), 0, 0, 16, 32, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 38), 0, 0, 16, 32, + 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 46), 0, 0, 16, 32, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 26), 0, 0, 16, 32, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 32), 0, 0, 16, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 39), 0, 0, 16, 16, + 3, height, 0, 16, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 40), 0, 0, 16, 16, + 1, height, 16, 16, height + 28); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 47), 0, 0, 16, 16, + 3, height, 16, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 27), 0, 0, 16, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height( + session, + paint_util_rotate_segments( + SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4 | SEGMENT_B4 | SEGMENT_C0 | SEGMENT_C8 | SEGMENT_D0, + direction), + 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 11: + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 12: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 33), 0, 0, 32, 16, + 3, height, 0, 0, height); + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 41), 0, 0, 32, 16, + 1, height, 0, 0, height + 28); + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 48), 0, 0, 32, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 28), 0, 0, 32, 16, + 3, height, 0, 16, height); + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 34), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 35), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 42), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 43), 0, 0, 32, 1, + 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 49), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_LARGE_HELIX + 29), 0, 0, 32, 20, + 3, height, 0, 6, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 0), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 1), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 6), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 7), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 12), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 13), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 18), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 19), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 2), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 3), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 8), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 9), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 14), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 15), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 20), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 21), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 4), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 5), 0, 0, 32, 20, + 0, height, 0, 6, height + 56); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 10), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 11), 0, 0, 32, 20, + 0, height, 0, 6, height + 56); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 16), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 17), 0, 0, 32, 20, + 0, height, 0, 6, height + 56); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 22), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 23), 0, 0, 32, 20, + 0, height, 0, 6, height + 56); + break; + } + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_INVERTED_9); + break; + case 2: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_INVERTED_9); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 24), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 25), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 30), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 31), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 36), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 37), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 42), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 43), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 26), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 27), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 32), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 33), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 38), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 39), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 44), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 45), 0, 0, 32, 20, + 0, height, 0, 6, height + 40); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 28), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 29), 0, 0, 32, 20, + 0, height, 0, 6, height + 56); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 34), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 35), 0, 0, 32, 20, + 0, height, 0, 6, height + 56); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 40), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 41), 0, 0, 32, 20, + 0, height, 0, 6, height + 56); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 46), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BARREL_ROLL + 47), 0, 0, 32, 20, + 0, height, 0, 6, height + 56); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_INVERTED_9); + break; + case 2: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_INVERTED_9); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 0), 0, 0, 2, 20, + 31, height, 4, 6, height + 8); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 1), 0, 0, 32, 1, + 48, height, 0, 32, height + 8); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 6), 0, 0, 2, 20, + 31, height, 26, 4, height + 8); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 7), 0, 0, 32, 1, + 48, height, 0, 32, height + 8); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 12), 0, 0, 2, 20, + 31, height, 26, 4, height + 8); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 13), 0, 0, 32, 1, + 48, height, 0, 32, height + 8); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 18), 0, 0, 2, 20, + 31, height, 4, 6, height + 8); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 19), 0, 0, 32, 1, + 48, height, 0, 32, height + 8); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 88, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 2), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 3), 0, 0, 32, 1, + 64, height, 0, 32, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 8), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 9), 0, 0, 32, 1, + 64, height, 0, 32, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 14), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 15), 0, 0, 32, 1, + 64, height, 0, 32, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 20), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 21), 0, 0, 32, 1, + 64, height, 0, 32, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 4), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 5), 0, 0, 32, 1, + 32, height, 0, 32, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 10), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 11), 0, 0, 32, 1, + 32, height, 0, 32, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 16), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 17), 0, 0, 32, 1, + 32, height, 0, 32, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 22), 0, 0, 32, 20, + 3, height, 0, 6, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_QUARTER_LOOP + 23), 0, 0, 32, 1, + 32, height, 0, 32, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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(SEGMENTS_ALL, 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 Trackbrakes( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BRAKE + (direction & 1)), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + /** rct2: 0x008ADA44 */ + static void TrackOnRidePhoto( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + sub_98196C_rotated(session, direction, IMAGE_TYPE_REMAP | SPR_STATION_BASE_D, 0, 0, 32, 32, 1, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT + direction), 0, 0, 32, 20, 0, height, 0, 6, + height + 3); + track_paint_util_onride_photo_paint(session, direction, height + 3, tileElement); + wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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 + 48, 0x20); + } + + /** rct2: 0x008ADED4 */ + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 0), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 4), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 8), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 12), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 50 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 1), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 5), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 9), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 13), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 54 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 2), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 6), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 10), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 14), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 58 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 64, 0x20); + break; + case 3: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 3), 0, 0, 32, 20, + 3, height, 0, 6, height); + break; + case 1: + session->WoodenSupportsPrependTo = sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 7), 0, 0, 2, 24, + 56, height, 28, 4, height - 16); + break; + case 2: + session->WoodenSupportsPrependTo = sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 11), 0, 0, 2, 24, + 56, height, 28, 4, height - 16); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 15), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 62 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height + 24, TUNNEL_SQUARE_8); + break; + case 2: + paint_util_push_tunnel_left(session, height + 24, TUNNEL_SQUARE_8); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 80, 0x20); + break; + } + } + + /** rct2: 0x008ADEE4 */ + 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: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 16), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 1: + session->WoodenSupportsPrependTo = sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 20), 0, 0, 2, 24, + 56, height, 28, 4, height - 16); + break; + case 2: + session->WoodenSupportsPrependTo = sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 24), 0, 0, 2, 24, + 56, height, 28, 4, height - 16); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 28), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 66 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_7); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 80, 0x20); + break; + case 1: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 17), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 21), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 25), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 29), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 70 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 80, 0x20); + break; + case 2: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 18), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 22), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 26), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 30), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 74 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + break; + case 3: + switch (direction) + { + case 0: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 19), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 1: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 23), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 2: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 27), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + case 3: + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP + 31), 0, 0, 32, + 20, 3, height, 0, 6, height); + break; + } + wooden_a_supports_paint_setup( + session, direction & 1, 78 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + switch (direction) + { + case 1: + paint_util_push_tunnel_right(session, height + 8, TUNNEL_SQUARE_FLAT); + break; + case 2: + paint_util_push_tunnel_left(session, height + 8, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 40, 0x20); + break; + } + } + + /** rct2: 0x008ADEF4 */ + 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); + } + + /** rct2: 0x008ADF04 */ + 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) + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BLOCK_BRAKE + (direction & 1)), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void Trackbooster( + paint_session* session, uint16_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_BOOSTER + (direction & 1)), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 32, 0x20); + } + + static void Trackpowered_lift( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) + { + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_POWERED_LIFT + direction), 0, 0, 32, 20, 3, + height, 0, 6, height); + wooden_a_supports_paint_setup( + session, direction & 1, 9 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + else + { + paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, direction), 0xFFFF, 0); + paint_util_set_general_support_height(session, height + 56, 0x20); + } + + 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 0), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 2), 0, 6, + 32, 20, 3, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 3), 0, 6, + 34, 1, 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 5), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 7), 0, 6, + 32, 32, 3, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 1), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 4), 6, 0, + 20, 34, 3, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 6), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 8), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_8); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_8); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 9), 0, 6, + 32, 32, 3, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 11), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 13), 0, 6, + 32, 20, 3, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 14), 0, 6, + 34, 1, 26, height, 0, 27, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 16), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 10), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 12), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 15), 6, 0, + 20, 34, 3, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 17), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_8); + break; + case 1: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_8); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 12), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 15), 0, 6, + 34, 20, 3, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 17), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 10), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + paint_util_set_segment_support_height( + session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, + 0); + paint_util_set_general_support_height(session, height + 48, 0x20); + break; + case 3: + switch (direction) + { + case 0: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 11), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 13), 6, 0, + 20, 32, 3, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 14), 6, 0, + 1, 34, 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 16), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 9), 6, 0, + 32, 32, 3, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 2: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT); + break; + case 3: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 8), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 1), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 4), 0, 6, + 34, 20, 3, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 6), 0, 6, + 32, 20, 3, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + if (direction == 0 || direction == 3) + { + paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_8); + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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: + switch (direction) + { + case 0: + wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + 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: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 7), 6, 0, + 32, 32, 3, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 1: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 0), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 2: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 2), 6, 0, + 20, 32, 3, height); + sub_98197C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 3), 6, 0, + 1, 34, 26, height, 27, 0, height); + wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + case 3: + sub_98196C_rotated( + session, direction, GetTrackColour(session) | (SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION + 5), 6, 0, + 20, 32, 3, height); + wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); + break; + } + switch (direction) + { + case 0: + paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT); + break; + case 1: + paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT); + break; + } + paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENTS_ALL, 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 TrackLeftQuarterTurn5Tile25DegUp; + case TrackElemType::RightQuarterTurn5TilesUp25: + return TrackRightQuarterTurn5Tile25DegUp; + case TrackElemType::LeftQuarterTurn5TilesDown25: + return TrackLeftQuarterTurn5Tile25DegDown; + case TrackElemType::RightQuarterTurn5TilesDown25: + return TrackRightQuarterTurn5Tile25DegDown; + 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 TrackLeftQuarterTurn1Tile60DegUp; + case TrackElemType::RightQuarterTurn1TileUp60: + return TrackRightQuarterTurn1Tile60DegUp; + case TrackElemType::LeftQuarterTurn1TileDown60: + return TrackLeftQuarterTurn1Tile60DegDown; + case TrackElemType::RightQuarterTurn1TileDown60: + return TrackRightQuarterTurn1Tile60DegDown; + 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 TrackLeftBankedQuarterTurn5Tile25DegUp; + case TrackElemType::RightBankedQuarterTurn5TileUp25: + return TrackRightBankedQuarterTurn5Tile25DegUp; + case TrackElemType::LeftBankedQuarterTurn5TileDown25: + return TrackLeftBankedQuarterTurn5Tile25DegDown; + case TrackElemType::RightBankedQuarterTurn5TileDown25: + return TrackRightBankedQuarterTurn5Tile25DegDown; + 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::LeftBankToLeftQuarterTurn3TilesUp25: + return TrackLeftBankToLeftQuarterTurn3Tile25DegUp; + case TrackElemType::RightBankToRightQuarterTurn3TilesUp25: + return TrackRightBankToRightQuarterTurn3Tile25DegUp; + case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank: + return TrackLeftQuarterTurn3Tile25DegDownToLeftBank; + case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank: + return TrackRightQuarterTurn3Tile25DegDownToRightBank; + case TrackElemType::LeftQuarterTurn1TileUp90: + return TrackLeftQuarterTurn1Tile90DegUp; + case TrackElemType::RightQuarterTurn1TileUp90: + return TrackRightQuarterTurn1Tile90DegUp; + case TrackElemType::LeftQuarterTurn1TileDown90: + return TrackLeftQuarterTurn1Tile90DegDown; + case TrackElemType::RightQuarterTurn1TileDown90: + return TrackRightQuarterTurn1Tile90DegDown; + case TrackElemType::LeftBarrelRollUpToDown: + return TrackLeftBarrelRollUpToDown; + case TrackElemType::RightBarrelRollUpToDown: + return TrackRightBarrelRollUpToDown; + case TrackElemType::LeftBarrelRollDownToUp: + return TrackLeftBarrelRollDownToUp; + case TrackElemType::RightBarrelRollDownToUp: + return TrackRightBarrelRollDownToUp; + case TrackElemType::Up90ToInvertedFlatQuarterLoop: + return Track90DegToInvertedFlatQuarterLoopUp; + case TrackElemType::InvertedFlatToDown90QuarterLoop: + return TrackInvertedFlatTo90DegQuarterLoopDown; + case TrackElemType::PoweredLift: + return Trackpowered_lift; + case TrackElemType::Booster: + return Trackbooster; + } + return nullptr; + } +} // namespace HybridRC diff --git a/src/openrct2/ride/coaster/meta/HybridCoaster.h b/src/openrct2/ride/coaster/meta/HybridCoaster.h new file mode 100644 index 0000000000..c71b62fc33 --- /dev/null +++ b/src/openrct2/ride/coaster/meta/HybridCoaster.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 HybridCoasterRTD = +{ + 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_STEEP) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_SLOPE_CURVE_STEEP) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_SLOPE_VERTICAL) | (1ULL << TRACK_BARREL_ROLL) | (1ULL << TRACK_POWERED_LIFT) | (1ULL << TRACK_SLOPE_CURVE_BANKED) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_SLOPE_ROLL_BANKING) | (1ULL << TRACK_SLOPE_STEEP_LONG) | (1ULL << TRACK_CURVE_VERTICAL) | (1ULL << TRACK_QUARTER_LOOP)), + SET_FIELD(ExtraTrackPieces, (1ULL << TRACK_BOOSTER)), + SET_FIELD(CoveredTrackPieces, 0), + SET_FIELD(StartTrackPiece, TrackElemType::EndStation), + SET_FIELD(TrackPaintFunction, HybridRC::GetTrackPaintFunction), + SET_FIELD(Flags, RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_MAIN | 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_HYBRID_COASTER, STR_RIDE_DESCRIPTION_HYBRID_COASTER }), + SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }), + SET_FIELD(EnumName, nameof(RIDE_TYPE_HYBRID_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, { 43, 24, 13, 13}), + SET_FIELD(MaxMass, 18), + SET_FIELD(LiftData, { OpenRCT2::Audio::SoundId::LiftClassic, 5, 8 }), + SET_FIELD(RatingsCalculationFunction, ride_ratings_calculate_hybrid_coaster), + SET_FIELD(RatingsMultipliers, { 52, 36, 10 }), + SET_FIELD(UpkeepCosts, { 40, 20, 80, 10, 3, 10 }), + SET_FIELD(BuildCosts, { 110, 7, 55}), + SET_FIELD(DefaultPrices, { 20, 20 }), + SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK_STYLE_2), + SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO), + SET_FIELD(BonusValue, 120), + SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS( + { COLOUR_LIGHT_ORANGE, COLOUR_LIGHT_ORANGE, COLOUR_DARK_BROWN}, + { COLOUR_BRIGHT_RED, COLOUR_BRIGHT_RED, COLOUR_SATURATED_BROWN}, + { COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE, COLOUR_WHITE} + )), + SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_HYBRID_COASTER_TRACK, SPR_RIDE_DESIGN_PREVIEW_HYBRID_COASTER_SUPPORTS }), + SET_FIELD(ColourKey, RideColourKey::Ride), +}; +// clang-format on diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index cba5dda19b..fd17fd3570 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -983,7 +983,56 @@ enum SPR_G2_GLYPH_COUNT = (SPR_G2_U_BREVE_LOWER - SPR_G2_CHAR_BEGIN) + 1, SPR_G2_CHAR_END = SPR_G2_CHAR_BEGIN + SPR_G2_GLYPH_COUNT * 3, - SPR_G2_END = SPR_G2_CHAR_END, + + SPR_G2_SUPPORT_BEGIN = SPR_G2_CHAR_END, + SPR_G2_SUPPORT_END = SPR_G2_SUPPORT_BEGIN + 32, + + SPR_RIDE_DESIGN_PREVIEW_HYBRID_COASTER_TRACK = SPR_G2_SUPPORT_END, + SPR_RIDE_DESIGN_PREVIEW_HYBRID_COASTER_SUPPORTS = SPR_RIDE_DESIGN_PREVIEW_HYBRID_COASTER_TRACK + 1, + SPR_G2_HYBRID_BEGIN = SPR_RIDE_DESIGN_PREVIEW_HYBRID_COASTER_TRACK + 2, + SPR_G2_HYBRID_TRACK_FLAT = SPR_G2_HYBRID_BEGIN, + SPR_G2_HYBRID_TRACK_BRAKE = SPR_G2_HYBRID_BEGIN + 2, + SPR_G2_HYBRID_TRACK_BLOCK_BRAKE = SPR_G2_HYBRID_BEGIN + 4, + SPR_G2_HYBRID_TRACK_BOOSTER = SPR_G2_HYBRID_BEGIN + 6, + SPR_G2_HYBRID_TRACK_GENTLE = SPR_G2_HYBRID_BEGIN + 8, + SPR_G2_HYBRID_TRACK_STEEP = SPR_G2_HYBRID_BEGIN + 20, + SPR_G2_HYBRID_TRACK_VERTICAL = SPR_G2_HYBRID_BEGIN + 36, + SPR_G2_HYBRID_TRACK_SMALL_CURVE = SPR_G2_HYBRID_BEGIN + 48, + SPR_G2_HYBRID_TRACK_MEDIUM_CURVE = SPR_G2_HYBRID_BEGIN + 60, + SPR_G2_HYBRID_TRACK_LARGE_CURVE = SPR_G2_HYBRID_BEGIN + 80, + SPR_G2_HYBRID_TRACK_FLAT_DIAGONAL = SPR_G2_HYBRID_BEGIN + 112, + SPR_G2_HYBRID_TRACK_GENTLE_DIAGONAL = SPR_G2_HYBRID_BEGIN + 116, + SPR_G2_HYBRID_TRACK_STEEP_DIAGONAL = SPR_G2_HYBRID_BEGIN + 128, + SPR_G2_HYBRID_TRACK_BANK_TRANSITION = SPR_G2_HYBRID_BEGIN + 140, + SPR_G2_HYBRID_TRACK_BANK_TRANSITION_DIAGONAL = SPR_G2_HYBRID_BEGIN + 182, + SPR_G2_HYBRID_TRACK_SMALL_CURVE_BANKED = SPR_G2_HYBRID_BEGIN + 217, + SPR_G2_HYBRID_TRACK_MEDIUM_CURVE_BANKED = SPR_G2_HYBRID_BEGIN + 233, + SPR_G2_HYBRID_TRACK_LARGE_CURVE_BANKED = SPR_G2_HYBRID_BEGIN + 258, + SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE = SPR_G2_HYBRID_BEGIN + 298, + SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE = SPR_G2_HYBRID_BEGIN + 314, + SPR_G2_HYBRID_TRACK_STEEP_SMALL_CURVE = SPR_G2_HYBRID_BEGIN + 354, + SPR_G2_HYBRID_TRACK_VERTICAL_TWIST = SPR_G2_HYBRID_BEGIN + 370, + SPR_G2_HYBRID_TRACK_SLOPE_BANK_TRANSITION = SPR_G2_HYBRID_BEGIN + 382, + SPR_G2_HYBRID_TRACK_GENTLE_SMALL_CURVE_BANKED = SPR_G2_HYBRID_BEGIN + 454, + SPR_G2_HYBRID_TRACK_GENTLE_MEDIUM_CURVE_BANKED = SPR_G2_HYBRID_BEGIN + 476, + SPR_G2_HYBRID_TRACK_S_BEND = SPR_G2_HYBRID_BEGIN + 528, + SPR_G2_HYBRID_TRACK_SMALL_HELIX = SPR_G2_HYBRID_BEGIN + 544, + SPR_G2_HYBRID_TRACK_LARGE_HELIX = SPR_G2_HYBRID_BEGIN + 576, + SPR_G2_HYBRID_TRACK_BARREL_ROLL = SPR_G2_HYBRID_BEGIN + 626, + SPR_G2_HYBRID_TRACK_FLAT_TO_STEEP = SPR_G2_HYBRID_BEGIN + 674, + SPR_G2_HYBRID_TRACK_QUARTER_LOOP = SPR_G2_HYBRID_BEGIN + 706, + SPR_G2_HYBRID_TRACK_TURN_BANK_TRANSITION = SPR_G2_HYBRID_BEGIN + 730, + SPR_G2_HYBRID_TRACK_POWERED_LIFT = SPR_G2_HYBRID_BEGIN + 748, + SPR_G2_HYBRID_LIFT_BEGIN = SPR_G2_HYBRID_BEGIN + 752, + SPR_G2_HYBRID_LIFT_TRACK_FLAT = SPR_G2_HYBRID_LIFT_BEGIN, + SPR_G2_HYBRID_LIFT_TRACK_GENTLE = SPR_G2_HYBRID_LIFT_BEGIN + 4, + SPR_G2_HYBRID_LIFT_TRACK_STEEP = SPR_G2_HYBRID_LIFT_BEGIN + 16, + SPR_G2_HYBRID_LIFT_TRACK_FLAT_DIAGONAL = SPR_G2_HYBRID_LIFT_BEGIN + 32, + SPR_G2_HYBRID_LIFT_TRACK_GENTLE_DIAGONAL = SPR_G2_HYBRID_LIFT_BEGIN + 36, + 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_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 a7c218ad11..f0e0dd893e 100644 --- a/test/testpaint/Compat.cpp +++ b/test/testpaint/Compat.cpp @@ -856,3 +856,7 @@ void ride_ratings_calculate_lim_launched_roller_coaster([[maybe_unused]] Ride* r void ride_ratings_calculate_drink_stall([[maybe_unused]] Ride* ride) { } + +void ride_ratings_calculate_hybrid_coaster([[maybe_unused]] Ride* ride) +{ +}