From 9be0d007ecfdc2c299ef0cf3afb81f919ba37188 Mon Sep 17 00:00:00 2001 From: mix Date: Thu, 14 Nov 2024 03:36:03 +0000 Subject: [PATCH] Implement Classic Wooden Twister left small helix --- .../ClassicWoodenTwisterRollerCoaster.cpp | 130 ++++ .../track/coaster/WoodenRollerCoaster.cpp | 663 +++--------------- .../track/coaster/WoodenRollerCoaster.hpp | 421 +++++++++++ 3 files changed, 663 insertions(+), 551 deletions(-) diff --git a/src/openrct2/paint/track/coaster/ClassicWoodenTwisterRollerCoaster.cpp b/src/openrct2/paint/track/coaster/ClassicWoodenTwisterRollerCoaster.cpp index 9ea6968871..8d786a56c7 100644 --- a/src/openrct2/paint/track/coaster/ClassicWoodenTwisterRollerCoaster.cpp +++ b/src/openrct2/paint/track/coaster/ClassicWoodenTwisterRollerCoaster.cpp @@ -190,6 +190,26 @@ enum SPR_CLASSIC_WOODEN_RC_BANKED_QUARTER_TURN_3_FRONT_1_1 = SPR_CSG_BEGIN + 65865, SPR_CLASSIC_WOODEN_RC_BANKED_QUARTER_TURN_3_FRONT_0_1 = SPR_CSG_BEGIN + 65866, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_3 = SPR_CSG_BEGIN + 65885, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_3 = SPR_CSG_BEGIN + 65886, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_3 = SPR_CSG_BEGIN + 65887, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_0 = SPR_CSG_BEGIN + 65888, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_0 = SPR_CSG_BEGIN + 65889, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_0 = SPR_CSG_BEGIN + 65890, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_1 = SPR_CSG_BEGIN + 65891, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_1 = SPR_CSG_BEGIN + 65892, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_1 = SPR_CSG_BEGIN + 65893, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_2 = SPR_CSG_BEGIN + 65894, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_2 = SPR_CSG_BEGIN + 65895, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_2 = SPR_CSG_BEGIN + 65896, + + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_2_3 = SPR_CSG_BEGIN + 65897, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_1_3 = SPR_CSG_BEGIN + 65898, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_0_3 = SPR_CSG_BEGIN + 65899, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_2_1 = SPR_CSG_BEGIN + 65900, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_1_1 = SPR_CSG_BEGIN + 65901, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_0_1 = SPR_CSG_BEGIN + 65902, + SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_HANDRAIL_0 = SPR_CSG_BEGIN + 66203, SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_HANDRAIL_1 = SPR_CSG_BEGIN + 66204, SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_HANDRAIL_2 = SPR_CSG_BEGIN + 66205, @@ -359,6 +379,26 @@ enum SPR_CLASSIC_WOODEN_RC_BANKED_QUARTER_TURN_3_FRONT_HANDRAIL_2_1 = SPR_CSG_BEGIN + 66620, SPR_CLASSIC_WOODEN_RC_BANKED_QUARTER_TURN_3_FRONT_HANDRAIL_1_1 = SPR_CSG_BEGIN + 66621, SPR_CLASSIC_WOODEN_RC_BANKED_QUARTER_TURN_3_FRONT_HANDRAIL_0_1 = SPR_CSG_BEGIN + 66622, + + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_3 = SPR_CSG_BEGIN + 66641, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_3 = SPR_CSG_BEGIN + 66642, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_3 = SPR_CSG_BEGIN + 66643, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_0 = SPR_CSG_BEGIN + 66644, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_0 = SPR_CSG_BEGIN + 66645, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_0 = SPR_CSG_BEGIN + 66646, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_1 = SPR_CSG_BEGIN + 66647, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_1 = SPR_CSG_BEGIN + 66648, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_1 = SPR_CSG_BEGIN + 66649, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_2 = SPR_CSG_BEGIN + 66650, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_2 = SPR_CSG_BEGIN + 66651, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_2 = SPR_CSG_BEGIN + 66652, + + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_2_3 = SPR_CSG_BEGIN + 66653, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_1_3 = SPR_CSG_BEGIN + 66654, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_0_3 = SPR_CSG_BEGIN + 66655, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_2_1 = SPR_CSG_BEGIN + 66656, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_1_1 = SPR_CSG_BEGIN + 66657, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_0_1 = SPR_CSG_BEGIN + 66658, }; static constexpr std::array kFlatToLeftBankImages = { { @@ -688,6 +728,77 @@ static constexpr std::array, 3> kLeftHalfBankedHelixUpSmallImages = { + { + { { + { + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_0, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_0, + }, + { + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_1, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_1, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_0_1, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_0_1, + }, + { + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_2, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_2, + }, + { + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_3, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_3, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_0_3, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_0_3, + }, + } }, + { { + { + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_0, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_0, + }, + { + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_1, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_1, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_1_1, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_1_1, + }, + { + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_2, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_2, + }, + { + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_3, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_3, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_1_3, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_1_3, + }, + } }, + { { + { + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_0, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_0, + }, + { + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_1, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_1, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_2_1, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_2_1, + }, + { + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_2, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_2, + }, + { + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_3, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_3, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_2_3, + SPR_CLASSIC_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_2_3, + }, + } }, + } +}; + static constexpr std::array, 5> kLeftHalfBankedHelixUpLargeImages = { { { { @@ -992,6 +1103,20 @@ static void ClassicWoodenTwisterRCTrackBankedLeftQuarterTurn5( session, ride, trackSequence, DirectionNext(direction), height, trackElement, supportType); } +static void ClassicWoodenTwisterRCTrackRightHalfBankedHelixDownSmall( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + if (trackSequence >= 4) + { + trackSequence -= 4; + direction = DirectionNext(direction); + } + trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + WoodenRCTrackLeftHalfBankedHelixUpSmall( + session, ride, trackSequence, DirectionPrev(direction), height, trackElement, supportType); +} + static void ClassicWoodenTwisterRCTrackLeftHalfBankedHelixDownLarge( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement, SupportType supportType) @@ -1072,6 +1197,11 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionClassicWoodenTwisterRC(OpenRCT2::Track case TrackElemType::BankedRightQuarterTurn5Tiles: return WoodenRCTrackBankedRightQuarterTurn5; + case TrackElemType::LeftHalfBankedHelixUpSmall: + return WoodenRCTrackLeftHalfBankedHelixUpSmall; + case TrackElemType::RightHalfBankedHelixDownSmall: + return ClassicWoodenTwisterRCTrackRightHalfBankedHelixDownSmall; + case TrackElemType::LeftHalfBankedHelixUpLarge: return WoodenRCTrackLeftHalfBankedHelixUpLarge; case TrackElemType::RightHalfBankedHelixUpLarge: diff --git a/src/openrct2/paint/track/coaster/WoodenRollerCoaster.cpp b/src/openrct2/paint/track/coaster/WoodenRollerCoaster.cpp index 4a8f8fc17c..088d4f4362 100644 --- a/src/openrct2/paint/track/coaster/WoodenRollerCoaster.cpp +++ b/src/openrct2/paint/track/coaster/WoodenRollerCoaster.cpp @@ -304,24 +304,24 @@ enum SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_33 = 23874, SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_34 = 23875, SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_35 = 23876, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_36 = 23877, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_37 = 23878, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_38 = 23879, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_39 = 23880, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_40 = 23881, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_41 = 23882, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_42 = 23883, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_43 = 23884, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_44 = 23885, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_45 = 23886, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_46 = 23887, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_47 = 23888, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_48 = 23889, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_49 = 23890, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_50 = 23891, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_51 = 23892, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_52 = 23893, - SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_53 = 23894, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_3 = 23877, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_3 = 23878, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_3 = 23879, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_0 = 23880, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_0 = 23881, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_0 = 23882, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_1 = 23883, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_1 = 23884, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_1 = 23885, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_2 = 23886, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_2 = 23887, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_2 = 23888, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_2_3 = 23889, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_1_3 = 23890, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_0_3 = 23891, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_2_1 = 23892, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_1_1 = 23893, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_0_1 = 23894, SPR_WOODEN_RC_STATION_SW_NE = 23973, SPR_WOODEN_RC_STATION_NW_SE = 23974, @@ -578,6 +578,25 @@ enum SPR_WOODEN_RC_BANKED_QUARTER_TURN_3_FRONT_HANDRAIL_1_1 = 24723, SPR_WOODEN_RC_BANKED_QUARTER_TURN_3_FRONT_HANDRAIL_0_1 = 24724, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_3 = 24743, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_3 = 24744, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_3 = 24745, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_0 = 24746, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_0 = 24747, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_0 = 24748, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_1 = 24749, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_1 = 24750, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_1 = 24751, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_2 = 24752, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_2 = 24753, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_2 = 24754, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_2_3 = 24755, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_1_3 = 24756, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_0_3 = 24757, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_2_1 = 24758, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_1_1 = 24759, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_0_1 = 24760, + SPR_WOODEN_RC_STATION_RAILS_SW_NE = 24839, SPR_WOODEN_RC_STATION_RAILS_NW_SE = 24840, }; @@ -944,6 +963,77 @@ static constexpr std::array, 3> kLeftHalfBankedHelixUpSmallImages = { + { + { { + { + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_0, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_0, + }, + { + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_1, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_1, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_0_1, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_0_1, + }, + { + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_2, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_2, + }, + { + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_0_3, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_0_3, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_0_3, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_0_3, + }, + } }, + { { + { + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_0, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_0, + }, + { + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_1, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_1, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_1_1, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_1_1, + }, + { + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_2, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_2, + }, + { + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_1_3, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_1_3, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_1_3, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_1_3, + }, + } }, + { { + { + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_0, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_0, + }, + { + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_1, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_1, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_2_1, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_2_1, + }, + { + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_2, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_2, + }, + { + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_2_3, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_HANDRAIL_2_3, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_2_3, + SPR_WOODEN_RC_LEFT_HALF_BANKED_HELIX_UP_SMALL_FRONT_HANDRAIL_2_3, + }, + } }, + } +}; + static constexpr std::array, 5> kLeftHalfBankedHelixUpLargeImages = { { { { @@ -4716,535 +4806,6 @@ static void WoodenRCTrackRightQuarterTurn325DegDown( session, ride, trackSequence, (direction - 1) & 3, height, trackElement, supportType); } -/** rct2: 0x008ACAB8 */ -template -static void WoodenRCTrackLeftHalfBankedHelixUpSmall( - PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, - const TrackElement& trackElement, SupportType supportType) -{ - switch (trackSequence) - { - case 0: - switch (direction) - { - case 0: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_41), - { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24748), { 0, 0, height }, - { { 0, 6, height }, { 32, 20, 2 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours); - break; - case 1: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_44), - { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24751), { 0, 0, height }, - { { 0, 6, height }, { 32, 20, 2 } }); - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_53), - { 0, 0, height }, { { 0, 6, height + 27 }, { 32, 20, 0 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24760), { 0, 0, height }, - { { 0, 6, height + 27 }, { 32, 20, 0 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours); - break; - case 2: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_47), - { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24754), { 0, 0, height }, - { { 0, 6, height }, { 32, 20, 2 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours); - break; - case 3: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_38), - { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24745), { 0, 0, height }, - { { 0, 6, height }, { 32, 20, 2 } }); - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_50), - { 0, 0, height }, { { 0, 6, height + 27 }, { 32, 20, 0 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24757), { 0, 0, height }, - { { 0, 6, height + 27 }, { 32, 20, 0 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours); - break; - } - if (direction == 0 || direction == 3) - { - PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); - } - PaintUtilSetSegmentSupportHeight( - session, - PaintUtilRotateSegments( - EnumsToFlags( - PaintSegment::leftCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner, - PaintSegment::bottomRightSide), - direction), - 48, 0x20); - PaintUtilSetSegmentSupportHeight( - session, - PaintUtilRotateSegments( - EnumsToFlags( - PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, - PaintSegment::bottomLeftSide), - direction), - 0xFFFF, 0); - PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); - break; - case 1: - switch (direction) - { - case 0: - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours); - break; - case 1: - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours); - break; - case 2: - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours); - break; - case 3: - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours); - break; - } - PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); - break; - case 2: - switch (direction) - { - case 0: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_40), - { 0, 0, height }, { { 16, 0, height }, { 16, 16, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24747), { 0, 0, height }, - { { 16, 0, height }, { 16, 16, 2 } }); - break; - case 1: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_43), - { 0, 0, height }, { { 0, 0, height }, { 16, 16, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24750), { 0, 0, height }, - { { 0, 0, height }, { 16, 16, 2 } }); - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_52), - { 0, 0, height }, { { 0, 0, height + 27 }, { 16, 16, 0 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24759), { 0, 0, height }, - { { 0, 0, height + 27 }, { 16, 16, 0 } }); - break; - case 2: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_46), - { 0, 0, height }, { { 0, 16, height }, { 16, 16, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24753), { 0, 0, height }, - { { 0, 16, height }, { 16, 16, 2 } }); - break; - case 3: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_37), - { 0, 0, height }, { { 16, 16, height }, { 16, 16, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24744), { 0, 0, height }, - { { 16, 16, height }, { 16, 16, 2 } }); - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_49), - { 0, 0, height }, { { 16, 16, height + 27 }, { 16, 16, 0 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24756), { 0, 0, height }, - { { 16, 16, height + 27 }, { 16, 16, 0 } }); - break; - } - PaintUtilSetSegmentSupportHeight( - session, - PaintUtilRotateSegments( - EnumsToFlags( - PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, - PaintSegment::bottomLeftSide), - direction), - 0xFFFF, 0); - PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); - break; - case 3: - switch (direction) - { - case 0: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_39), - { 0, 0, height }, { { 6, 0, height }, { 20, 32, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24746), { 0, 0, height }, - { { 6, 0, height }, { 20, 32, 2 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours); - break; - case 1: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_42), - { 0, 0, height }, { { 6, 0, height }, { 20, 32, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24749), { 0, 0, height }, - { { 6, 0, height }, { 20, 32, 2 } }); - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_51), - { 0, 0, height }, { { 6, 0, height + 27 }, { 20, 32, 0 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24758), { 0, 0, height }, - { { 6, 0, height + 27 }, { 20, 32, 0 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours); - break; - case 2: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_45), - { 0, 0, height }, { { 6, 0, height }, { 20, 32, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24752), { 0, 0, height }, - { { 6, 0, height }, { 20, 32, 2 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours); - break; - case 3: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_36), - { 0, 0, height }, { { 6, 0, height + 8 }, { 20, 32, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24743), { 0, 0, height }, - { { 6, 0, height + 8 }, { 20, 32, 2 } }); - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_48), - { 0, 0, height }, { { 6, 0, height + 27 }, { 20, 32, 0 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24755), { 0, 0, height }, - { { 6, 0, height + 27 }, { 20, 32, 0 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours); - break; - } - switch (direction) - { - case 2: - PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); - break; - case 3: - PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); - break; - } - PaintUtilSetSegmentSupportHeight( - session, - PaintUtilRotateSegments( - EnumsToFlags( - PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::rightCorner, - PaintSegment::topRightSide), - direction), - 48, 0x20); - PaintUtilSetSegmentSupportHeight( - session, - PaintUtilRotateSegments( - EnumsToFlags( - PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, - PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), - direction), - 0xFFFF, 0); - PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); - break; - case 4: - switch (direction) - { - case 0: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_38), - { 0, 0, height }, { { 6, 0, height }, { 20, 32, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24745), { 0, 0, height }, - { { 6, 0, height }, { 20, 32, 2 } }); - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_50), - { 0, 0, height }, { { 6, 0, height + 27 }, { 20, 32, 0 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24757), { 0, 0, height }, - { { 6, 0, height + 27 }, { 20, 32, 0 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours); - break; - case 1: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_41), - { 0, 0, height }, { { 6, 0, height }, { 20, 32, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24748), { 0, 0, height }, - { { 6, 0, height }, { 20, 32, 2 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours); - break; - case 2: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_44), - { 0, 0, height }, { { 6, 0, height }, { 20, 32, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24751), { 0, 0, height }, - { { 6, 0, height }, { 20, 32, 2 } }); - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_53), - { 0, 0, height }, { { 6, 0, height + 27 }, { 20, 32, 0 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24760), { 0, 0, height }, - { { 6, 0, height + 27 }, { 20, 32, 0 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours); - break; - case 3: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_47), - { 0, 0, height }, { { 6, 0, height }, { 20, 32, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24754), { 0, 0, height }, - { { 6, 0, height }, { 20, 32, 2 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours); - break; - } - switch (direction) - { - case 0: - PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::Flat); - break; - case 1: - PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::Flat); - break; - } - PaintUtilSetSegmentSupportHeight( - session, - PaintUtilRotateSegments( - EnumsToFlags( - PaintSegment::topCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner, - PaintSegment::topRightSide), - direction), - 48, 0x20); - PaintUtilSetSegmentSupportHeight( - session, - PaintUtilRotateSegments( - EnumsToFlags( - PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, - PaintSegment::bottomRightSide), - direction), - 0xFFFF, 0); - PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); - break; - case 5: - switch (direction) - { - case 0: - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours); - break; - case 1: - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours); - break; - case 2: - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours); - break; - case 3: - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours); - break; - } - PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); - break; - case 6: - switch (direction) - { - case 0: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_37), - { 0, 0, height }, { { 16, 16, height }, { 16, 16, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24744), { 0, 0, height }, - { { 16, 16, height }, { 16, 16, 2 } }); - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_49), - { 0, 0, height }, { { 16, 16, height + 27 }, { 16, 16, 0 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24756), { 0, 0, height }, - { { 16, 16, height + 27 }, { 16, 16, 0 } }); - break; - case 1: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_40), - { 0, 0, height }, { { 0, 16, height }, { 16, 16, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24747), { 0, 0, height }, - { { 0, 16, height }, { 16, 16, 2 } }); - break; - case 2: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_43), - { 0, 0, height }, { { 0, 0, height }, { 16, 16, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24750), { 0, 0, height }, - { { 0, 0, height }, { 16, 16, 2 } }); - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_52), - { 0, 0, height }, { { 0, 0, height + 27 }, { 16, 16, 0 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24759), { 0, 0, height }, - { { 0, 0, height + 27 }, { 16, 16, 0 } }); - break; - case 3: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_46), - { 0, 0, height }, { { 16, 0, height }, { 16, 16, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24753), { 0, 0, height }, - { { 16, 0, height }, { 16, 16, 2 } }); - break; - } - PaintUtilSetSegmentSupportHeight( - session, - PaintUtilRotateSegments( - EnumsToFlags( - PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, - PaintSegment::bottomRightSide), - direction), - 0xFFFF, 0); - PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); - break; - case 7: - switch (direction) - { - case 0: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_36), - { 0, 0, height }, { { 0, 6, height + 8 }, { 32, 20, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24743), { 0, 0, height }, - { { 0, 6, height + 8 }, { 32, 20, 2 } }); - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_48), - { 0, 0, height }, { { 0, 6, height + 27 }, { 32, 20, 0 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24755), { 0, 0, height }, - { { 0, 6, height + 27 }, { 32, 20, 0 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours); - break; - case 1: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_39), - { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24746), { 0, 0, height }, - { { 0, 6, height }, { 32, 20, 2 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours); - break; - case 2: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_42), - { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24749), { 0, 0, height }, - { { 0, 6, height }, { 32, 20, 2 } }); - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_51), - { 0, 0, height }, { { 0, 6, height + 27 }, { 32, 20, 0 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24758), { 0, 0, height }, - { { 0, 6, height + 27 }, { 32, 20, 0 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours); - break; - case 3: - PaintAddImageAsParentRotated( - session, direction, - WoodenRCGetTrackColour(session).WithIndex(SPR_WOODEN_RC_SMALL_RIGHT_BANKED_TURN_45), - { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } }); - PaintAddImageAsChildRotated( - session, direction, WoodenRCGetRailsColour(session).WithIndex(24752), { 0, 0, height }, - { { 0, 6, height }, { 32, 20, 2 } }); - WoodenASupportsPaintSetup( - session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours); - break; - } - if (direction == 0 || direction == 3) - { - PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::Flat); - } - PaintUtilSetSegmentSupportHeight( - session, - PaintUtilRotateSegments( - EnumsToFlags( - PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::bottomCorner, - PaintSegment::topLeftSide), - direction), - 48, 0x20); - PaintUtilSetSegmentSupportHeight( - session, - PaintUtilRotateSegments( - EnumsToFlags( - PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, - PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), - direction), - 0xFFFF, 0); - PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); - break; - } -} - /** rct2: 0x008ACAC8 */ template static void WoodenRCTrackRightHalfBankedHelixUpSmall( @@ -5798,11 +5359,11 @@ static void WoodenRCTrackRightHalfBankedHelixDownSmall( if (trackSequence >= 4) { trackSequence -= 4; - direction = (direction + 1) & 3; + direction = DirectionNext(direction); } trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; - WoodenRCTrackLeftHalfBankedHelixUpSmall( - session, ride, trackSequence, (direction - 1) & 3, height, trackElement, supportType); + WoodenRCTrackLeftHalfBankedHelixUpSmall( + session, ride, trackSequence, DirectionPrev(direction), height, trackElement, supportType); } /** rct2: 0x008ACB18 */ @@ -15954,7 +15515,7 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionWoodenAndClassicWoodenRC(OpenRCT2::Tra case TrackElemType::RightQuarterTurn3TilesDown25: return WoodenRCTrackRightQuarterTurn325DegDown; case TrackElemType::LeftHalfBankedHelixUpSmall: - return WoodenRCTrackLeftHalfBankedHelixUpSmall; + return WoodenRCTrackLeftHalfBankedHelixUpSmall; case TrackElemType::RightHalfBankedHelixUpSmall: return WoodenRCTrackRightHalfBankedHelixUpSmall; case TrackElemType::LeftHalfBankedHelixDownSmall: diff --git a/src/openrct2/paint/track/coaster/WoodenRollerCoaster.hpp b/src/openrct2/paint/track/coaster/WoodenRollerCoaster.hpp index a4a469d1e8..aedca3e8bd 100644 --- a/src/openrct2/paint/track/coaster/WoodenRollerCoaster.hpp +++ b/src/openrct2/paint/track/coaster/WoodenRollerCoaster.hpp @@ -518,6 +518,427 @@ static void WoodenRCTrackBankedRightQuarterTurn5( PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); } +/** rct2: 0x008ACAB8 */ +template, 3> imageIds> +static void WoodenRCTrackLeftHalfBankedHelixUpSmall( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + WoodenRCTrackPaint( + session, direction, imageIds[0][direction].track, imageIds[0][direction].handrail, { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 2 } }); + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours); + break; + case 1: + WoodenRCTrackPaint( + session, direction, imageIds[0][direction].track, imageIds[0][direction].handrail, { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 2 } }); + if (imageIds[0][direction].frontTrack != ImageIndexUndefined) + { + WoodenRCTrackPaint( + session, direction, imageIds[0][direction].frontTrack, imageIds[0][direction].frontHandrail, + { 0, 0, height }, { { 0, 6, height + 27 }, { 32, 20, 0 } }); + } + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours); + break; + case 2: + WoodenRCTrackPaint( + session, direction, imageIds[0][direction].track, imageIds[0][direction].handrail, { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 2 } }); + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours); + break; + case 3: + WoodenRCTrackPaint( + session, direction, imageIds[0][direction].track, imageIds[0][direction].handrail, { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 2 } }); + if (imageIds[0][direction].frontTrack != ImageIndexUndefined) + { + WoodenRCTrackPaint( + session, direction, imageIds[0][direction].frontTrack, imageIds[0][direction].frontHandrail, + { 0, 0, height }, { { 0, 6, height + 27 }, { 32, 20, 0 } }); + } + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner, + PaintSegment::bottomRightSide), + direction), + 48, 0x20); + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); + break; + case 1: + switch (direction) + { + case 0: + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours); + break; + case 1: + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours); + break; + case 2: + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours); + break; + case 3: + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); + break; + case 2: + switch (direction) + { + case 0: + WoodenRCTrackPaint( + session, direction, imageIds[1][direction].track, imageIds[1][direction].handrail, { 0, 0, height }, + { { 16, 0, height }, { 16, 16, 2 } }); + break; + case 1: + WoodenRCTrackPaint( + session, direction, imageIds[1][direction].track, imageIds[1][direction].handrail, { 0, 0, height }, + { { 0, 0, height }, { 16, 16, 2 } }); + if (imageIds[1][direction].frontTrack != ImageIndexUndefined) + { + WoodenRCTrackPaint( + session, direction, imageIds[1][direction].frontTrack, imageIds[1][direction].frontHandrail, + { 0, 0, height }, { { 0, 0, height + 27 }, { 16, 16, 0 } }); + } + break; + case 2: + WoodenRCTrackPaint( + session, direction, imageIds[1][direction].track, imageIds[1][direction].handrail, { 0, 0, height }, + { { 0, 16, height }, { 16, 16, 2 } }); + break; + case 3: + WoodenRCTrackPaint( + session, direction, imageIds[1][direction].track, imageIds[1][direction].handrail, { 0, 0, height }, + { { 16, 16, height }, { 16, 16, 2 } }); + if (imageIds[1][direction].frontTrack != ImageIndexUndefined) + { + WoodenRCTrackPaint( + session, direction, imageIds[1][direction].frontTrack, imageIds[1][direction].frontHandrail, + { 0, 0, height }, { { 16, 16, height + 27 }, { 16, 16, 0 } }); + } + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); + break; + case 3: + switch (direction) + { + case 0: + WoodenRCTrackPaint( + session, direction, imageIds[2][direction].track, imageIds[2][direction].handrail, { 0, 0, height }, + { { 6, 0, height }, { 20, 32, 2 } }); + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours); + break; + case 1: + WoodenRCTrackPaint( + session, direction, imageIds[2][direction].track, imageIds[2][direction].handrail, { 0, 0, height }, + { { 6, 0, height }, { 20, 32, 2 } }); + if (imageIds[2][direction].frontTrack != ImageIndexUndefined) + { + WoodenRCTrackPaint( + session, direction, imageIds[2][direction].frontTrack, imageIds[2][direction].frontHandrail, + { 0, 0, height }, { { 6, 0, height + 27 }, { 20, 32, 0 } }); + } + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours); + break; + case 2: + WoodenRCTrackPaint( + session, direction, imageIds[2][direction].track, imageIds[2][direction].handrail, { 0, 0, height }, + { { 6, 0, height }, { 20, 32, 2 } }); + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours); + break; + case 3: + WoodenRCTrackPaint( + session, direction, imageIds[2][direction].track, imageIds[2][direction].handrail, { 0, 0, height }, + { { 6, 0, height + 8 }, { 20, 32, 2 } }); + if (imageIds[2][direction].frontTrack != ImageIndexUndefined) + { + WoodenRCTrackPaint( + session, direction, imageIds[2][direction].frontTrack, imageIds[2][direction].frontHandrail, + { 0, 0, height }, { { 6, 0, height + 27 }, { 20, 32, 0 } }); + } + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours); + break; + } + switch (direction) + { + case 2: + PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + case 3: + PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::rightCorner, + PaintSegment::topRightSide), + direction), + 48, 0x20); + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); + break; + case 4: + switch (direction) + { + case 0: + WoodenRCTrackPaint( + session, direction, imageIds[0][3].track, imageIds[0][3].handrail, { 0, 0, height }, + { { 6, 0, height }, { 20, 32, 2 } }); + if (imageIds[0][3].frontTrack != ImageIndexUndefined) + { + WoodenRCTrackPaint( + session, direction, imageIds[0][3].frontTrack, imageIds[0][3].frontHandrail, { 0, 0, height }, + { { 6, 0, height + 27 }, { 20, 32, 0 } }); + } + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours); + break; + case 1: + WoodenRCTrackPaint( + session, direction, imageIds[0][0].track, imageIds[0][0].handrail, { 0, 0, height }, + { { 6, 0, height }, { 20, 32, 2 } }); + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours); + break; + case 2: + WoodenRCTrackPaint( + session, direction, imageIds[0][1].track, imageIds[0][1].handrail, { 0, 0, height }, + { { 6, 0, height }, { 20, 32, 2 } }); + if (imageIds[0][1].frontTrack != ImageIndexUndefined) + { + WoodenRCTrackPaint( + session, direction, imageIds[0][1].frontTrack, imageIds[0][1].frontHandrail, { 0, 0, height }, + { { 6, 0, height + 27 }, { 20, 32, 0 } }); + } + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours); + break; + case 3: + WoodenRCTrackPaint( + session, direction, imageIds[0][2].track, imageIds[0][2].handrail, { 0, 0, height }, + { { 6, 0, height }, { 20, 32, 2 } }); + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours); + break; + } + switch (direction) + { + case 0: + PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::Flat); + break; + case 1: + PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::Flat); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner, + PaintSegment::topRightSide), + direction), + 48, 0x20); + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); + break; + case 5: + switch (direction) + { + case 0: + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours); + break; + case 1: + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours); + break; + case 2: + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours); + break; + case 3: + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours); + break; + } + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); + break; + case 6: + switch (direction) + { + case 0: + WoodenRCTrackPaint( + session, direction, imageIds[1][3].track, imageIds[1][3].handrail, { 0, 0, height }, + { { 16, 16, height }, { 16, 16, 2 } }); + if (imageIds[1][3].frontTrack != ImageIndexUndefined) + { + WoodenRCTrackPaint( + session, direction, imageIds[1][3].frontTrack, imageIds[1][3].frontHandrail, { 0, 0, height }, + { { 16, 16, height + 27 }, { 16, 16, 0 } }); + } + break; + case 1: + WoodenRCTrackPaint( + session, direction, imageIds[1][0].track, imageIds[1][0].handrail, { 0, 0, height }, + { { 0, 16, height }, { 16, 16, 2 } }); + break; + case 2: + WoodenRCTrackPaint( + session, direction, imageIds[1][1].track, imageIds[1][1].handrail, { 0, 0, height }, + { { 0, 0, height }, { 16, 16, 2 } }); + if (imageIds[1][1].frontTrack != ImageIndexUndefined) + { + WoodenRCTrackPaint( + session, direction, imageIds[1][1].frontTrack, imageIds[1][1].frontHandrail, { 0, 0, height }, + { { 0, 0, height + 27 }, { 16, 16, 0 } }); + } + break; + case 3: + WoodenRCTrackPaint( + session, direction, imageIds[1][2].track, imageIds[1][2].handrail, { 0, 0, height }, + { { 16, 0, height }, { 16, 16, 2 } }); + break; + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide, + PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); + break; + case 7: + switch (direction) + { + case 0: + WoodenRCTrackPaint( + session, direction, imageIds[2][3].track, imageIds[2][3].handrail, { 0, 0, height }, + { { 0, 6, height + 8 }, { 32, 20, 2 } }); + if (imageIds[2][3].frontTrack != ImageIndexUndefined) + { + WoodenRCTrackPaint( + session, direction, imageIds[2][3].frontTrack, imageIds[2][3].frontHandrail, { 0, 0, height }, + { { 0, 6, height + 27 }, { 32, 20, 0 } }); + } + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours); + break; + case 1: + WoodenRCTrackPaint( + session, direction, imageIds[2][0].track, imageIds[2][0].handrail, { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 2 } }); + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours); + break; + case 2: + WoodenRCTrackPaint( + session, direction, imageIds[2][1].track, imageIds[2][1].handrail, { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 2 } }); + if (imageIds[2][1].frontTrack != ImageIndexUndefined) + { + WoodenRCTrackPaint( + session, direction, imageIds[2][1].frontTrack, imageIds[2][1].frontHandrail, { 0, 0, height }, + { { 0, 6, height + 27 }, { 32, 20, 0 } }); + } + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours); + break; + case 3: + WoodenRCTrackPaint( + session, direction, imageIds[2][2].track, imageIds[2][2].handrail, { 0, 0, height }, + { { 0, 6, height }, { 32, 20, 2 } }); + WoodenASupportsPaintSetup( + session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours); + break; + } + if (direction == 0 || direction == 3) + { + PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::Flat); + } + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::bottomCorner, + PaintSegment::topLeftSide), + direction), + 48, 0x20); + PaintUtilSetSegmentSupportHeight( + session, + PaintUtilRotateSegments( + EnumsToFlags( + PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide, + PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), + direction), + 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight); + break; + } +} + /** rct2: 0x008ACAF8 */ template, 5> imageIds> static void WoodenRCTrackLeftHalfBankedHelixUpLarge(