From 961d1303afe46ae072129a5830c93ec05c098e49 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sat, 11 May 2024 23:21:32 +0200 Subject: [PATCH] Fix #22008: Lay-down roller coaster uses the wrong supports --- distribution/changelog.txt | 1 + src/openrct2/libopenrct2.vcxproj | 2 +- src/openrct2/ride/TrackPaint.h | 1 - ...Coaster.cpp => CorkscrewRollerCoaster.hpp} | 1255 ++++++++--------- .../coaster/LayDownRollerCoasterInverted.cpp | 4 +- .../coaster/meta/CorkscrewRollerCoaster.h | 3 +- src/openrct2/ride/coaster/meta/Hypercoaster.h | 3 +- .../ride/coaster/meta/LayDownRollerCoaster.h | 3 +- 8 files changed, 624 insertions(+), 648 deletions(-) rename src/openrct2/ride/coaster/{CorkscrewRollerCoaster.cpp => CorkscrewRollerCoaster.hpp} (89%) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 9ad978df5427..c77d77d91f00 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -9,6 +9,7 @@ - Change: [#7248] Small mini-maps are now centred in the map window. - Fix: [#13294] Map corners are cut off in some directions (original bug). - Fix: [#21974] No reason specified when attempting to place benches, lamps, or bins on path with no unconnected edges (original bug). +- Fix: [#22008] Uninverted Lay-down roller coaster uses the wrong support type. - Fix: [#22012] [Plugin] Images on ImgButton widgets cannot be updated. 0.4.11 (2024-05-05) diff --git a/src/openrct2/libopenrct2.vcxproj b/src/openrct2/libopenrct2.vcxproj index abfc3757d608..1cac2ff3510e 100644 --- a/src/openrct2/libopenrct2.vcxproj +++ b/src/openrct2/libopenrct2.vcxproj @@ -398,6 +398,7 @@ + @@ -917,7 +918,6 @@ - diff --git a/src/openrct2/ride/TrackPaint.h b/src/openrct2/ride/TrackPaint.h index 406901b566c8..6d93cbd016e3 100644 --- a/src/openrct2/ride/TrackPaint.h +++ b/src/openrct2/ride/TrackPaint.h @@ -548,7 +548,6 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionDinghySlide(int32_t trackType); TRACK_PAINT_FUNCTION GetTrackPaintFunctionDinghySlideCovered(int32_t trackType); TRACK_PAINT_FUNCTION GetTrackPaintFunctionMineTrainRC(int32_t trackType); TRACK_PAINT_FUNCTION GetTrackPaintFunctionChairlift(int32_t trackType); -TRACK_PAINT_FUNCTION GetTrackPaintFunctionCorkscrewRC(int32_t trackType); TRACK_PAINT_FUNCTION GetTrackPaintFunctionMaze(int32_t trackType); TRACK_PAINT_FUNCTION GetTrackPaintFunctionSpiralSlide(int32_t trackType); TRACK_PAINT_FUNCTION GetTrackPaintFunctionGoKarts(int32_t trackType); diff --git a/src/openrct2/ride/coaster/CorkscrewRollerCoaster.cpp b/src/openrct2/ride/coaster/CorkscrewRollerCoaster.hpp similarity index 89% rename from src/openrct2/ride/coaster/CorkscrewRollerCoaster.cpp rename to src/openrct2/ride/coaster/CorkscrewRollerCoaster.hpp index 8fb5a4dc1051..1e80089b814b 100644 --- a/src/openrct2/ride/coaster/CorkscrewRollerCoaster.cpp +++ b/src/openrct2/ride/coaster/CorkscrewRollerCoaster.hpp @@ -7,6 +7,8 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ +#pragma once + #include "../../drawing/Drawing.h" #include "../../interface/Viewport.h" #include "../../paint/Paint.h" @@ -55,6 +57,7 @@ static constexpr const uint32_t CorkscrewRCDiagBlockBrakeImages[2][NumOrthogonal }; /** rct2: 0x008A7AF8 */ +template static void CorkscrewRCTrackFlat( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -86,8 +89,7 @@ static void CorkscrewRCTrackFlat( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); } } else @@ -109,8 +111,7 @@ static void CorkscrewRCTrackFlat( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); } } PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -119,6 +120,7 @@ static void CorkscrewRCTrackFlat( } /** rct2: 0x008A7D68, 0x008A7D78, 0x008A7D88 */ +template static void CorkscrewRCTrackStation( PaintSession& session, const Ride& ride, [[maybe_unused]] uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -146,7 +148,7 @@ static void CorkscrewRCTrackStation( PaintAddImageAsParentRotated( session, direction, GetStationColourScheme(session, trackElement).WithIndex(imageIds[direction][1]), { 0, 0, height }, { 32, 32, 1 }); - DrawSupportsSideBySide(session, direction, height, session.SupportColours, MetalSupportType::Tubes); + DrawSupportsSideBySide(session, direction, height, session.SupportColours, supportType); TrackPaintUtilDrawStation2(session, ride, direction, height, trackElement, 9, 11); PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT); PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0); @@ -154,6 +156,7 @@ static void CorkscrewRCTrackStation( } /** rct2: 0x008A7B08 */ +template static void CorkscrewRCTrack25DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -185,8 +188,7 @@ static void CorkscrewRCTrack25DegUp( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); } } else @@ -216,8 +218,7 @@ static void CorkscrewRCTrack25DegUp( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); } } if (direction == 0 || direction == 3) @@ -233,6 +234,7 @@ static void CorkscrewRCTrack25DegUp( } /** rct2: 0x008A7B18 */ +template static void CorkscrewRCTrack60DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -264,8 +266,7 @@ static void CorkscrewRCTrack60DegUp( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 32, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 32, height, session.SupportColours); } } else @@ -295,8 +296,7 @@ static void CorkscrewRCTrack60DegUp( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 32, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 32, height, session.SupportColours); } } if (direction == 0 || direction == 3) @@ -312,6 +312,7 @@ static void CorkscrewRCTrack60DegUp( } /** rct2: 0x008A7B28 */ +template static void CorkscrewRCTrackFlatTo25DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -343,8 +344,7 @@ static void CorkscrewRCTrackFlatTo25DegUp( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 3, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 3, height, session.SupportColours); } } else @@ -374,8 +374,7 @@ static void CorkscrewRCTrackFlatTo25DegUp( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 3, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 3, height, session.SupportColours); } } if (direction == 0 || direction == 3) @@ -391,6 +390,7 @@ static void CorkscrewRCTrackFlatTo25DegUp( } /** rct2: 0x008A7B38 */ +template static void CorkscrewRCTrack25DegUpTo60DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -428,8 +428,7 @@ static void CorkscrewRCTrack25DegUpTo60DegUp( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 12, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 12, height, session.SupportColours); } } else @@ -465,8 +464,7 @@ static void CorkscrewRCTrack25DegUpTo60DegUp( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 12, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 12, height, session.SupportColours); } } if (direction == 0 || direction == 3) @@ -482,6 +480,7 @@ static void CorkscrewRCTrack25DegUpTo60DegUp( } /** rct2: 0x008A7B48 */ +template static void CorkscrewRCTrack60DegUpTo25DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -519,8 +518,7 @@ static void CorkscrewRCTrack60DegUpTo25DegUp( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 20, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 20, height, session.SupportColours); } } else @@ -556,8 +554,7 @@ static void CorkscrewRCTrack60DegUpTo25DegUp( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 20, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 20, height, session.SupportColours); } } if (direction == 0 || direction == 3) @@ -573,6 +570,7 @@ static void CorkscrewRCTrack60DegUpTo25DegUp( } /** rct2: 0x008A7B58 */ +template static void CorkscrewRCTrack25DegUpToFlat( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -604,8 +602,7 @@ static void CorkscrewRCTrack25DegUpToFlat( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 6, height, session.SupportColours); } } else @@ -635,8 +632,7 @@ static void CorkscrewRCTrack25DegUpToFlat( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 6, height, session.SupportColours); } } if (direction == 0 || direction == 3) @@ -652,54 +648,61 @@ static void CorkscrewRCTrack25DegUpToFlat( } /** rct2: 0x008A7B68 */ +template static void CorkscrewRCTrack25DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrack25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrack25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A7B78 */ +template static void CorkscrewRCTrack60DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrack60DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrack60DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A7B88 */ +template static void CorkscrewRCTrackFlatTo25DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrack25DegUpToFlat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrack25DegUpToFlat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A7B98 */ +template static void CorkscrewRCTrack25DegDownTo60DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrack60DegUpTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrack60DegUpTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A7BA8 */ +template static void CorkscrewRCTrack60DegDownTo25DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrack25DegUpTo60DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrack25DegUpTo60DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A7BB8 */ +template static void CorkscrewRCTrack25DegDownToFlat( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrackFlatTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrackFlatTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A7BC8 */ +template static void CorkscrewRCTrackLeftQuarterTurn5( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -730,8 +733,7 @@ static void CorkscrewRCTrackLeftQuarterTurn5( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -878,8 +880,7 @@ static void CorkscrewRCTrackLeftQuarterTurn5( { { 6, 0, height }, { 20, 32, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); switch (direction) { case 2: @@ -903,15 +904,17 @@ static void CorkscrewRCTrackLeftQuarterTurn5( } /** rct2: 0x008A7BD8 */ +template static void CorkscrewRCTrackRightQuarterTurn5( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; - CorkscrewRCTrackLeftQuarterTurn5(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + CorkscrewRCTrackLeftQuarterTurn5(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); } /** rct2: 0x008A7BE8 */ +template static void CorkscrewRCTrackFlatToLeftBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -947,8 +950,7 @@ static void CorkscrewRCTrackFlatToLeftBank( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); } PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); @@ -956,6 +958,7 @@ static void CorkscrewRCTrackFlatToLeftBank( } /** rct2: 0x008A7BF8 */ +template static void CorkscrewRCTrackFlatToRightBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -991,8 +994,7 @@ static void CorkscrewRCTrackFlatToRightBank( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); } PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); @@ -1000,6 +1002,7 @@ static void CorkscrewRCTrackFlatToRightBank( } /** rct2: 0x008A7C08 */ +template static void CorkscrewRCTrackLeftBankToFlat( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -1035,8 +1038,7 @@ static void CorkscrewRCTrackLeftBankToFlat( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); } PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); @@ -1044,6 +1046,7 @@ static void CorkscrewRCTrackLeftBankToFlat( } /** rct2: 0x008A7C18 */ +template static void CorkscrewRCTrackRightBankToFlat( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -1079,8 +1082,7 @@ static void CorkscrewRCTrackRightBankToFlat( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); } PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); @@ -1088,6 +1090,7 @@ static void CorkscrewRCTrackRightBankToFlat( } /** rct2: 0x008A7C28 */ +template static void CorkscrewRCTrackBankedLeftQuarterTurn5( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -1121,8 +1124,7 @@ static void CorkscrewRCTrackBankedLeftQuarterTurn5( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -1272,8 +1274,7 @@ static void CorkscrewRCTrackBankedLeftQuarterTurn5( { { 6, 0, height }, { 20, 32, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); switch (direction) { case 2: @@ -1297,15 +1298,18 @@ static void CorkscrewRCTrackBankedLeftQuarterTurn5( } /** rct2: 0x008A7C38 */ +template static void CorkscrewRCTrackBankedRightQuarterTurn5( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; - CorkscrewRCTrackBankedLeftQuarterTurn5(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + CorkscrewRCTrackBankedLeftQuarterTurn5( + session, ride, trackSequence, (direction - 1) & 3, height, trackElement); } /** rct2: 0x008A7C48 */ +template static void CorkscrewRCTrackLeftBankTo25DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -1341,8 +1345,7 @@ static void CorkscrewRCTrackLeftBankTo25DegUp( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 3, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 3, height, session.SupportColours); } if (direction == 0 || direction == 3) { @@ -1357,6 +1360,7 @@ static void CorkscrewRCTrackLeftBankTo25DegUp( } /** rct2: 0x008A7C58 */ +template static void CorkscrewRCTrackRightBankTo25DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -1392,8 +1396,7 @@ static void CorkscrewRCTrackRightBankTo25DegUp( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 3, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 3, height, session.SupportColours); } if (direction == 0 || direction == 3) { @@ -1408,6 +1411,7 @@ static void CorkscrewRCTrackRightBankTo25DegUp( } /** rct2: 0x008A7C68 */ +template static void CorkscrewRCTrack25DegUpToLeftBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -1443,8 +1447,7 @@ static void CorkscrewRCTrack25DegUpToLeftBank( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 6, height, session.SupportColours); } if (direction == 0 || direction == 3) { @@ -1459,6 +1462,7 @@ static void CorkscrewRCTrack25DegUpToLeftBank( } /** rct2: 0x008A7C78 */ +template static void CorkscrewRCTrack25DegUpToRightBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -1494,8 +1498,7 @@ static void CorkscrewRCTrack25DegUpToRightBank( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 6, height, session.SupportColours); } if (direction == 0 || direction == 3) { @@ -1510,38 +1513,43 @@ static void CorkscrewRCTrack25DegUpToRightBank( } /** rct2: 0x008A7C88 */ +template static void CorkscrewRCTrackLeftBankTo25DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrack25DegUpToRightBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrack25DegUpToRightBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A7C98 */ +template static void CorkscrewRCTrackRightBankTo25DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrack25DegUpToLeftBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrack25DegUpToLeftBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A7CA8 */ +template static void CorkscrewRCTrack25DegDownToLeftBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrackRightBankTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrackRightBankTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A7CB8 */ +template static void CorkscrewRCTrack25DegDownToRightBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrackLeftBankTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrackLeftBankTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A7CC8 */ +template static void CorkscrewRCTrackLeftBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -1571,8 +1579,7 @@ static void CorkscrewRCTrackLeftBank( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); } PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); @@ -1580,14 +1587,16 @@ static void CorkscrewRCTrackLeftBank( } /** rct2: 0x008A7CD8 */ +template static void CorkscrewRCTrackRightBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrackLeftBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrackLeftBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A7CE8 */ +template static void CorkscrewRCTrackLeftQuarterTurn525DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -1618,8 +1627,7 @@ static void CorkscrewRCTrackLeftQuarterTurn525DegUp( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); @@ -1761,8 +1769,7 @@ static void CorkscrewRCTrackLeftQuarterTurn525DegUp( { { 6, 0, height }, { 20, 32, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); switch (direction) { case 2: @@ -1786,6 +1793,7 @@ static void CorkscrewRCTrackLeftQuarterTurn525DegUp( } /** rct2: 0x008A7CF8 */ +template static void CorkscrewRCTrackRightQuarterTurn525DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -1816,8 +1824,7 @@ static void CorkscrewRCTrackRightQuarterTurn525DegUp( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); @@ -1958,8 +1965,7 @@ static void CorkscrewRCTrackRightQuarterTurn525DegUp( { { 6, 0, height }, { 20, 32, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); switch (direction) { case 0: @@ -1983,24 +1989,29 @@ static void CorkscrewRCTrackRightQuarterTurn525DegUp( } /** rct2: 0x008A7D08 */ +template static void CorkscrewRCTrackLeftQuarterTurn525DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; - CorkscrewRCTrackRightQuarterTurn525DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement); + CorkscrewRCTrackRightQuarterTurn525DegUp( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement); } /** rct2: 0x008A7D18 */ +template static void CorkscrewRCTrackRightQuarterTurn525DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; - CorkscrewRCTrackLeftQuarterTurn525DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + CorkscrewRCTrackLeftQuarterTurn525DegUp( + session, ride, trackSequence, (direction - 1) & 3, height, trackElement); } /** rct2: 0x008A7D28 */ +template static void CorkscrewRCTrackSBendLeft( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -2031,8 +2042,7 @@ static void CorkscrewRCTrackSBendLeft( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -2054,13 +2064,13 @@ static void CorkscrewRCTrackSBendLeft( PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16403), { 0, 0, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopLeftSide, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopLeftSide, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16407), { 0, 0, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopRightSide, 1, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopRightSide, 1, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( @@ -2100,13 +2110,13 @@ static void CorkscrewRCTrackSBendLeft( PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16403), { 0, 0, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopLeftSide, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopLeftSide, 0, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16407), { 0, 0, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopRightSide, 1, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopRightSide, 1, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -2143,8 +2153,7 @@ static void CorkscrewRCTrackSBendLeft( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); switch (direction) { case 1: @@ -2168,6 +2177,7 @@ static void CorkscrewRCTrackSBendLeft( } /** rct2: 0x008A7D38 */ +template static void CorkscrewRCTrackSBendRight( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -2198,8 +2208,7 @@ static void CorkscrewRCTrackSBendRight( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -2222,15 +2231,14 @@ static void CorkscrewRCTrackSBendRight( session, direction, session.TrackColours.WithIndex(16411), { 0, 0, height }, { { 0, 6, height }, { 32, 26, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomRightSide, 0, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomRightSide, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16415), { 0, 0, height }, { { 0, 6, height }, { 32, 26, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomLeftSide, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomLeftSide, 0, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( @@ -2267,15 +2275,14 @@ static void CorkscrewRCTrackSBendRight( session, direction, session.TrackColours.WithIndex(16411), { 0, 0, height }, { { 0, 6, height }, { 32, 26, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomRightSide, 0, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomRightSide, 0, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16415), { 0, 0, height }, { { 0, 6, height }, { 32, 26, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomLeftSide, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomLeftSide, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -2312,8 +2319,7 @@ static void CorkscrewRCTrackSBendRight( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); switch (direction) { case 1: @@ -2337,6 +2343,7 @@ static void CorkscrewRCTrackSBendRight( } /** rct2: 0x008A7D48 */ +template static void CorkscrewRCTrackLeftVerticalLoop( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -2350,25 +2357,25 @@ static void CorkscrewRCTrackLeftVerticalLoop( PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16562), { 0, 6, height }, { 32, 20, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16570), { 0, 6, height }, { 32, 20, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16569), { 0, 6, height }, { 32, 20, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16577), { 0, 6, height }, { 32, 20, 7 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 6, height, session.SupportColours); break; } if (direction == 0 || direction == 3) @@ -2392,25 +2399,25 @@ static void CorkscrewRCTrackLeftVerticalLoop( PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16563), { 0, 0, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 20, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 20, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16571), { 0, 14, height }, { 32, 2, 63 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 15, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 15, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16568), { 0, 6, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 16, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 16, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16576), { 0, 6, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 10, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 10, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -2564,25 +2571,25 @@ static void CorkscrewRCTrackLeftVerticalLoop( PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16568), { 0, 6, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 16, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 16, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16576), { 0, 6, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 10, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 10, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16563), { 0, 0, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 20, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 20, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16571), { 0, 14, height }, { 32, 2, 63 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 15, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 15, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -2602,25 +2609,25 @@ static void CorkscrewRCTrackLeftVerticalLoop( PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16569), { 0, 6, height }, { 32, 20, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16577), { 0, 6, height }, { 32, 20, 7 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 6, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16562), { 0, 6, height }, { 32, 20, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16570), { 0, 6, height }, { 32, 20, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); break; } switch (direction) @@ -2646,6 +2653,7 @@ static void CorkscrewRCTrackLeftVerticalLoop( } /** rct2: 0x008A7D58 */ +template static void CorkscrewRCTrackRightVerticalLoop( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -2672,8 +2680,7 @@ static void CorkscrewRCTrackRightVerticalLoop( session, direction, session.TrackColours.WithIndex(16578), { 0, 6, height }, { 32, 20, 3 }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); @@ -2687,25 +2694,25 @@ static void CorkscrewRCTrackRightVerticalLoop( PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16592), { 0, 6, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16584), { 0, 6, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 16, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 16, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16587), { 0, 14, height }, { 32, 2, 63 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 12, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 12, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16579), { 0, 0, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 20, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 20, height, session.SupportColours); break; } PaintUtilSetGeneralSupportHeight(session, height + 72); @@ -2819,25 +2826,25 @@ static void CorkscrewRCTrackRightVerticalLoop( PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16587), { 0, 14, height }, { 32, 2, 63 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 12, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 12, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16579), { 0, 0, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 20, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 20, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16592), { 0, 6, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16584), { 0, 6, height }, { 32, 26, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 16, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 16, height, session.SupportColours); break; } PaintUtilSetGeneralSupportHeight(session, height + 72); @@ -2862,8 +2869,7 @@ static void CorkscrewRCTrackRightVerticalLoop( session, direction, session.TrackColours.WithIndex(16585), { 0, 6, height }, { 32, 20, 3 }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); switch (direction) { case 1: @@ -2881,6 +2887,7 @@ static void CorkscrewRCTrackRightVerticalLoop( } /** rct2: 0x008A7D98 */ +template static void CorkscrewRCTrackLeftQuarterTurn3( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -2911,8 +2918,7 @@ static void CorkscrewRCTrackLeftQuarterTurn3( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -2988,8 +2994,7 @@ static void CorkscrewRCTrackLeftQuarterTurn3( { { 6, 0, height }, { 20, 32, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); switch (direction) { case 2: @@ -3013,15 +3018,17 @@ static void CorkscrewRCTrackLeftQuarterTurn3( } /** rct2: 0x008A7DA8 */ +template static void CorkscrewRCTrackRightQuarterTurn3( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; - CorkscrewRCTrackLeftQuarterTurn3(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + CorkscrewRCTrackLeftQuarterTurn3(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); } /** rct2: 0x008A7DB8 */ +template static void CorkscrewRCTrackLeftQuarterTurn3Bank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -3055,8 +3062,7 @@ static void CorkscrewRCTrackLeftQuarterTurn3Bank( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -3135,8 +3141,7 @@ static void CorkscrewRCTrackLeftQuarterTurn3Bank( { { 6, 0, height }, { 20, 32, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); switch (direction) { case 2: @@ -3160,15 +3165,17 @@ static void CorkscrewRCTrackLeftQuarterTurn3Bank( } /** rct2: 0x008A7DC8 */ +template static void CorkscrewRCTrackRightQuarterTurn3Bank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; - CorkscrewRCTrackLeftQuarterTurn3Bank(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + CorkscrewRCTrackLeftQuarterTurn3Bank(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); } /** rct2: 0x008A7DD8 */ +template static void CorkscrewRCTrackLeftQuarterTurn325DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -3195,8 +3202,7 @@ static void CorkscrewRCTrackLeftQuarterTurn325DegUp( session, direction, session.TrackColours.WithIndex(16539), { 0, 6, height }, { 32, 20, 3 }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); @@ -3237,8 +3243,7 @@ static void CorkscrewRCTrackLeftQuarterTurn325DegUp( session, direction, session.TrackColours.WithIndex(16538), { 6, 0, height }, { 20, 32, 3 }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); switch (direction) { case 2: @@ -3262,6 +3267,7 @@ static void CorkscrewRCTrackLeftQuarterTurn325DegUp( } /** rct2: 0x008A7DE8 */ +template static void CorkscrewRCTrackRightQuarterTurn325DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -3288,8 +3294,7 @@ static void CorkscrewRCTrackRightQuarterTurn325DegUp( session, direction, session.TrackColours.WithIndex(16536), { 0, 6, height }, { 32, 20, 3 }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); @@ -3317,25 +3322,25 @@ static void CorkscrewRCTrackRightQuarterTurn325DegUp( PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16531), { 6, 0, height }, { 20, 32, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16533), { 6, 0, height }, { 20, 32, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16535), { 6, 0, height }, { 20, 32, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 10, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 10, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16537), { 6, 0, height }, { 20, 32, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); break; } switch (direction) @@ -3361,24 +3366,29 @@ static void CorkscrewRCTrackRightQuarterTurn325DegUp( } /** rct2: 0x008A7DF8 */ +template static void CorkscrewRCTrackLeftQuarterTurn325DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; - CorkscrewRCTrackRightQuarterTurn325DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement); + CorkscrewRCTrackRightQuarterTurn325DegUp( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement); } /** rct2: 0x008A7E08 */ +template static void CorkscrewRCTrackRightQuarterTurn325DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; - CorkscrewRCTrackLeftQuarterTurn325DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + CorkscrewRCTrackLeftQuarterTurn325DegUp( + session, ride, trackSequence, (direction - 1) & 3, height, trackElement); } /** rct2: 0x008A7E18 */ +template static void CorkscrewRCTrackHalfLoopUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -3405,8 +3415,7 @@ static void CorkscrewRCTrackHalfLoopUp( session, direction, session.TrackColours.WithIndex(16609), { 0, 6, height }, { 32, 20, 7 }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); @@ -3423,27 +3432,27 @@ static void CorkscrewRCTrackHalfLoopUp( session, direction, session.TrackColours.WithIndex(16595), { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 20, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 20, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16603), { 0, 14, height }, { { 28, 6, height }, { 3, 20, 63 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 15, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 15, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16600), { 0, 6, height }, { { 28, 6, height }, { 3, 20, 63 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 16, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 16, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16608), { 0, 6, height }, { 32, 20, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 16, height, session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 16, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0); @@ -3513,14 +3522,16 @@ static void CorkscrewRCTrackHalfLoopUp( } /** rct2: 0x008A7E28 */ +template static void CorkscrewRCTrackHalfLoopDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrackHalfLoopUp(session, ride, 3 - trackSequence, direction, height, trackElement); + CorkscrewRCTrackHalfLoopUp(session, ride, 3 - trackSequence, direction, height, trackElement); } /** rct2: 0x008A7E38 */ +template static void CorkscrewRCTrackLeftCorkscrewUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -3620,8 +3631,7 @@ static void CorkscrewRCTrackLeftCorkscrewUp( PaintSegment::bottomRightSide), direction), 0xFFFF, 0); - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 35, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height + 35, session.SupportColours); switch (direction) { @@ -3638,6 +3648,7 @@ static void CorkscrewRCTrackLeftCorkscrewUp( } /** rct2: 0x008A7E48 */ +template static void CorkscrewRCTrackRightCorkscrewUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -3668,8 +3679,7 @@ static void CorkscrewRCTrackRightCorkscrewUp( { { 0, 6, height + 4 }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -3744,8 +3754,7 @@ static void CorkscrewRCTrackRightCorkscrewUp( PaintSegment::bottomRightSide), direction), 0xFFFF, 0); - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 35, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height + 35, session.SupportColours); switch (direction) { @@ -3762,22 +3771,25 @@ static void CorkscrewRCTrackRightCorkscrewUp( } /** rct2: 0x008A7E58 */ +template static void CorkscrewRCTrackLeftCorkscrewDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrackRightCorkscrewUp(session, ride, 2 - trackSequence, (direction + 1) & 3, height, trackElement); + CorkscrewRCTrackRightCorkscrewUp(session, ride, 2 - trackSequence, (direction + 1) & 3, height, trackElement); } /** rct2: 0x008A7E68 */ +template static void CorkscrewRCTrackRightCorkscrewDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrackLeftCorkscrewUp(session, ride, 2 - trackSequence, (direction - 1) & 3, height, trackElement); + CorkscrewRCTrackLeftCorkscrewUp(session, ride, 2 - trackSequence, (direction - 1) & 3, height, trackElement); } /** rct2: 0x008A7E78 */ +template static void CorkscrewRCTrackLeftHalfBankedHelixUpSmall( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -3811,8 +3823,7 @@ static void CorkscrewRCTrackLeftHalfBankedHelixUpSmall( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 2, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 2, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -3891,8 +3902,7 @@ static void CorkscrewRCTrackLeftHalfBankedHelixUpSmall( { { 6, 0, height + 8 }, { 20, 32, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 6, height, session.SupportColours); switch (direction) { case 2: @@ -3939,8 +3949,7 @@ static void CorkscrewRCTrackLeftHalfBankedHelixUpSmall( { { 6, 0, height }, { 20, 32, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 2, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 2, height, session.SupportColours); switch (direction) { case 0: @@ -4024,8 +4033,7 @@ static void CorkscrewRCTrackLeftHalfBankedHelixUpSmall( { { 0, 27, height }, { 32, 1, 26 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 6, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_0); @@ -4044,6 +4052,7 @@ static void CorkscrewRCTrackLeftHalfBankedHelixUpSmall( } /** rct2: 0x008A7E88 */ +template static void CorkscrewRCTrackRightHalfBankedHelixUpSmall( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -4077,8 +4086,7 @@ static void CorkscrewRCTrackRightHalfBankedHelixUpSmall( { { 0, 27, height }, { 32, 1, 26 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 2, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 2, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -4157,8 +4165,7 @@ static void CorkscrewRCTrackRightHalfBankedHelixUpSmall( { { 6, 0, height }, { 20, 32, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 6, height, session.SupportColours); switch (direction) { case 0: @@ -4205,8 +4212,7 @@ static void CorkscrewRCTrackRightHalfBankedHelixUpSmall( { { 6, 0, height }, { 20, 32, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 2, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 2, height, session.SupportColours); switch (direction) { case 2: @@ -4290,8 +4296,7 @@ static void CorkscrewRCTrackRightHalfBankedHelixUpSmall( { { 0, 6, height + 8 }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 6, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_0); @@ -4310,6 +4315,7 @@ static void CorkscrewRCTrackRightHalfBankedHelixUpSmall( } /** rct2: 0x008A7E98 */ +template static void CorkscrewRCTrackLeftHalfBankedHelixDownSmall( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -4320,10 +4326,12 @@ static void CorkscrewRCTrackLeftHalfBankedHelixDownSmall( direction = (direction - 1) & 3; } trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; - CorkscrewRCTrackRightHalfBankedHelixUpSmall(session, ride, trackSequence, (direction + 1) & 3, height, trackElement); + CorkscrewRCTrackRightHalfBankedHelixUpSmall( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement); } /** rct2: 0x008A7EA8 */ +template static void CorkscrewRCTrackRightHalfBankedHelixDownSmall( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -4334,10 +4342,12 @@ static void CorkscrewRCTrackRightHalfBankedHelixDownSmall( direction = (direction + 1) & 3; } trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; - CorkscrewRCTrackLeftHalfBankedHelixUpSmall(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + CorkscrewRCTrackLeftHalfBankedHelixUpSmall( + session, ride, trackSequence, (direction - 1) & 3, height, trackElement); } /** rct2: 0x008A7EB8 */ +template static void CorkscrewRCTrackLeftHalfBankedHelixUpLarge( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -4371,8 +4381,7 @@ static void CorkscrewRCTrackLeftHalfBankedHelixUpLarge( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 1, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 1, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -4522,8 +4531,7 @@ static void CorkscrewRCTrackLeftHalfBankedHelixUpLarge( { { 6, 0, height + 8 }, { 20, 32, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 7, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 7, height, session.SupportColours); switch (direction) { case 2: @@ -4570,8 +4578,7 @@ static void CorkscrewRCTrackLeftHalfBankedHelixUpLarge( { { 6, 0, height }, { 20, 32, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 1, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 1, height, session.SupportColours); switch (direction) { case 0: @@ -4725,8 +4732,7 @@ static void CorkscrewRCTrackLeftHalfBankedHelixUpLarge( { { 0, 27, height }, { 32, 1, 26 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 7, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 7, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_0); @@ -4745,6 +4751,7 @@ static void CorkscrewRCTrackLeftHalfBankedHelixUpLarge( } /** rct2: 0x008A7EC8 */ +template static void CorkscrewRCTrackRightHalfBankedHelixUpLarge( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -4778,8 +4785,7 @@ static void CorkscrewRCTrackRightHalfBankedHelixUpLarge( { { 0, 27, height }, { 32, 1, 26 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 1, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 1, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -4928,8 +4934,7 @@ static void CorkscrewRCTrackRightHalfBankedHelixUpLarge( { { 6, 0, height }, { 20, 32, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 7, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 7, height, session.SupportColours); switch (direction) { case 0: @@ -4976,8 +4981,7 @@ static void CorkscrewRCTrackRightHalfBankedHelixUpLarge( { { 6, 0, height }, { 20, 32, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 1, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 1, height, session.SupportColours); switch (direction) { case 2: @@ -5132,8 +5136,7 @@ static void CorkscrewRCTrackRightHalfBankedHelixUpLarge( { { 0, 6, height + 8 }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 7, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 7, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_0); @@ -5152,6 +5155,7 @@ static void CorkscrewRCTrackRightHalfBankedHelixUpLarge( } /** rct2: 0x008A7ED8 */ +template static void CorkscrewRCTrackLeftHalfBankedHelixDownLarge( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -5162,10 +5166,12 @@ static void CorkscrewRCTrackLeftHalfBankedHelixDownLarge( direction = (direction - 1) & 3; } trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; - CorkscrewRCTrackRightHalfBankedHelixUpLarge(session, ride, trackSequence, (direction + 1) & 3, height, trackElement); + CorkscrewRCTrackRightHalfBankedHelixUpLarge( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement); } /** rct2: 0x008A7EE8 */ +template static void CorkscrewRCTrackRightHalfBankedHelixDownLarge( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -5176,10 +5182,12 @@ static void CorkscrewRCTrackRightHalfBankedHelixDownLarge( direction = (direction + 1) & 3; } trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; - CorkscrewRCTrackLeftHalfBankedHelixUpLarge(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + CorkscrewRCTrackLeftHalfBankedHelixUpLarge( + session, ride, trackSequence, (direction - 1) & 3, height, trackElement); } /** rct2: 0x008A7F18 */ +template static void CorkscrewRCTrackLeftQuarterTurn160DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -5225,6 +5233,7 @@ static void CorkscrewRCTrackLeftQuarterTurn160DegUp( } /** rct2: 0x008A7EF8 */ +template static void CorkscrewRCTrackRightQuarterTurn160DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -5270,22 +5279,27 @@ static void CorkscrewRCTrackRightQuarterTurn160DegUp( } /** rct2: 0x008A7F08 */ +template static void CorkscrewRCTrackLeftQuarterTurn160DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrackRightQuarterTurn160DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement); + CorkscrewRCTrackRightQuarterTurn160DegUp( + session, ride, trackSequence, (direction + 1) & 3, height, trackElement); } /** rct2: 0x008A7F28 */ +template static void CorkscrewRCTrackRightQuarterTurn160DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrackLeftQuarterTurn160DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement); + CorkscrewRCTrackLeftQuarterTurn160DegUp( + session, ride, trackSequence, (direction - 1) & 3, height, trackElement); } /** rct2: 0x008A7F38 */ +template static void CorkscrewRCTrackBrakes( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -5307,8 +5321,7 @@ static void CorkscrewRCTrackBrakes( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); } PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); @@ -5316,11 +5329,12 @@ static void CorkscrewRCTrackBrakes( } /** rct2: 0x008A7F48 */ +template static void CorkscrewRCTrackOnRidePhoto( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - TrackPaintUtilOnridePhotoPlatformPaint(session, direction, height, MetalSupportType::Tubes); + TrackPaintUtilOnridePhotoPlatformPaint(session, direction, height, supportType); switch (direction) { @@ -5352,6 +5366,7 @@ static void CorkscrewRCTrackOnRidePhoto( } /** rct2: 0x008A8198 */ +template static void CorkscrewRCTrackFlatTo60DegUpLongBase( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -5384,8 +5399,7 @@ static void CorkscrewRCTrackFlatTo60DegUpLongBase( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 3, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 3, height, session.SupportColours); } if (direction == 0 || direction == 3) { @@ -5421,8 +5435,7 @@ static void CorkscrewRCTrackFlatTo60DegUpLongBase( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 7, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 7, height, session.SupportColours); } PaintUtilSetSegmentSupportHeight( session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); @@ -5454,8 +5467,7 @@ static void CorkscrewRCTrackFlatTo60DegUpLongBase( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 9, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 9, height, session.SupportColours); } PaintUtilSetSegmentSupportHeight( session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); @@ -5487,8 +5499,7 @@ static void CorkscrewRCTrackFlatTo60DegUpLongBase( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 18, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 18, height, session.SupportColours); } switch (direction) { @@ -5507,6 +5518,7 @@ static void CorkscrewRCTrackFlatTo60DegUpLongBase( } /** rct2: 0x008A81A8 */ +template static void CorkscrewRCTrack60DegUpToFlatLongBase( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -5539,8 +5551,7 @@ static void CorkscrewRCTrack60DegUpToFlatLongBase( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 20, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 20, height, session.SupportColours); } if (direction == 0 || direction == 3) { @@ -5576,8 +5587,7 @@ static void CorkscrewRCTrack60DegUpToFlatLongBase( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 16, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 16, height, session.SupportColours); } PaintUtilSetSegmentSupportHeight( session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); @@ -5609,8 +5619,7 @@ static void CorkscrewRCTrack60DegUpToFlatLongBase( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 13, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 13, height, session.SupportColours); } PaintUtilSetSegmentSupportHeight( session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); @@ -5642,8 +5651,7 @@ static void CorkscrewRCTrack60DegUpToFlatLongBase( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 5, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 5, height, session.SupportColours); } switch (direction) { @@ -5662,22 +5670,27 @@ static void CorkscrewRCTrack60DegUpToFlatLongBase( } /** rct2: 0x008A81B8 */ +template static void CorkscrewRCTrack60DegDownToFlatLongBase( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrackFlatTo60DegUpLongBase(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrackFlatTo60DegUpLongBase( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A81C8 */ +template static void CorkscrewRCTrackFlatTo60DegDownLongBase( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - CorkscrewRCTrack60DegUpToFlatLongBase(session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrack60DegUpToFlatLongBase( + session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A7F68 */ +template static void CorkscrewRCTrackLeftEighthToDiag( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -5708,8 +5721,7 @@ static void CorkscrewRCTrackLeftEighthToDiag( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -5805,28 +5817,28 @@ static void CorkscrewRCTrackLeftEighthToDiag( session, direction, session.TrackColours.WithIndex(16743), { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16747), { 0, 0, height }, { { 0, 16, height }, { 16, 18, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16751), { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16755), { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -5843,6 +5855,7 @@ static void CorkscrewRCTrackLeftEighthToDiag( } /** rct2: 0x008A7F78 */ +template static void CorkscrewRCTrackRightEighthToDiag( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -5873,8 +5886,7 @@ static void CorkscrewRCTrackRightEighthToDiag( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -5970,28 +5982,28 @@ static void CorkscrewRCTrackRightEighthToDiag( session, direction, session.TrackColours.WithIndex(16727), { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16731), { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16735), { 0, 0, height }, { { 0, 16, height }, { 16, 18, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16739), { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -6008,24 +6020,27 @@ static void CorkscrewRCTrackRightEighthToDiag( } /** rct2: 0x008A7F88 */ +template static void CorkscrewRCTrackLeftEighthToOrthogonal( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; - CorkscrewRCTrackRightEighthToDiag(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrackRightEighthToDiag(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A7F98 */ +template static void CorkscrewRCTrackRightEighthToOrthogonal( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; - CorkscrewRCTrackLeftEighthToDiag(session, ride, trackSequence, (direction + 3) & 3, height, trackElement); + CorkscrewRCTrackLeftEighthToDiag(session, ride, trackSequence, (direction + 3) & 3, height, trackElement); } /** rct2: 0x008A7FA8 */ +template static void CorkscrewRCTrackLeftEighthBankToDiag( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -6056,8 +6071,7 @@ static void CorkscrewRCTrackLeftEighthBankToDiag( { { 0, 6, height }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -6153,28 +6167,28 @@ static void CorkscrewRCTrackLeftEighthBankToDiag( session, direction, session.TrackColours.WithIndex(16775), { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16779), { 0, 0, height }, { { 0, 16, height + 27 }, { 16, 18, 0 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16783), { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16787), { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -6191,6 +6205,7 @@ static void CorkscrewRCTrackLeftEighthBankToDiag( } /** rct2: 0x008A7FB8 */ +template static void CorkscrewRCTrackRightEighthBankToDiag( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -6221,8 +6236,7 @@ static void CorkscrewRCTrackRightEighthBankToDiag( { { 0, 27, height }, { 32, 1, 26 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -6318,28 +6332,28 @@ static void CorkscrewRCTrackRightEighthBankToDiag( session, direction, session.TrackColours.WithIndex(16759), { 0, 0, height }, { { 16, 0, height }, { 16, 16, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16763), { 0, 0, height }, { { 0, 0, height }, { 16, 16, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16767), { 0, 0, height }, { { 0, 16, height + 27 }, { 16, 18, 0 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16771), { 0, 0, height }, { { 16, 16, height }, { 16, 16, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -6356,24 +6370,27 @@ static void CorkscrewRCTrackRightEighthBankToDiag( } /** rct2: 0x008A7FC8 */ +template static void CorkscrewRCTrackLeftEighthBankToOrthogonal( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; - CorkscrewRCTrackRightEighthBankToDiag(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); + CorkscrewRCTrackRightEighthBankToDiag(session, ride, trackSequence, (direction + 2) & 3, height, trackElement); } /** rct2: 0x008A7FD8 */ +template static void CorkscrewRCTrackRightEighthBankToOrthogonal( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; - CorkscrewRCTrackLeftEighthBankToDiag(session, ride, trackSequence, (direction + 3) & 3, height, trackElement); + CorkscrewRCTrackLeftEighthBankToDiag(session, ride, trackSequence, (direction + 3) & 3, height, trackElement); } /** rct2: 0x008A7F58 */ +template static void CorkscrewRCTrackDiagFlat( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -6459,24 +6476,22 @@ static void CorkscrewRCTrackDiagFlat( { case 0: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16697), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } } @@ -6486,24 +6501,22 @@ static void CorkscrewRCTrackDiagFlat( { case 0: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16635), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } } @@ -6515,6 +6528,7 @@ static void CorkscrewRCTrackDiagFlat( PaintUtilSetGeneralSupportHeight(session, height + 32); } +template static void CorkscrewRCTrackDiagBrakes( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -6525,8 +6539,7 @@ static void CorkscrewRCTrackDiagBrakes( if (trackSequence == 3) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, kDiagSupportPlacement[direction], 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, kDiagSupportPlacement[direction], 0, height, session.SupportColours); } int32_t blockedSegments = BlockedSegments::kDiagStraightFlat[trackSequence]; @@ -6534,6 +6547,7 @@ static void CorkscrewRCTrackDiagBrakes( PaintUtilSetGeneralSupportHeight(session, height + 32); } +template static void CorkscrewRCTrackDiagBlockBrakes( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -6544,8 +6558,7 @@ static void CorkscrewRCTrackDiagBlockBrakes( if (trackSequence == 3) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, kDiagSupportPlacement[direction], 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, kDiagSupportPlacement[direction], 0, height, session.SupportColours); } int32_t blockedSegments = BlockedSegments::kDiagStraightFlat[trackSequence]; @@ -6554,6 +6567,7 @@ static void CorkscrewRCTrackDiagBlockBrakes( } /** rct2: 0x008A8008 */ +template static void CorkscrewRCTrackDiag25DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -6665,24 +6679,22 @@ static void CorkscrewRCTrackDiag25DegUp( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16709), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 8, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 8, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 8, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 8, height, session.SupportColours); break; } } @@ -6692,24 +6704,22 @@ static void CorkscrewRCTrackDiag25DegUp( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16647), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 8, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 8, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 8, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 8, height, session.SupportColours); break; } } @@ -6727,6 +6737,7 @@ static void CorkscrewRCTrackDiag25DegUp( } /** rct2: 0x008A8068 */ +template static void CorkscrewRCTrackDiag60DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -6838,25 +6849,22 @@ static void CorkscrewRCTrackDiag60DegUp( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 32, height, - session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 32, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16721), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 36, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 36, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 32, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 32, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 36, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 36, height, session.SupportColours); break; } } @@ -6866,25 +6874,22 @@ static void CorkscrewRCTrackDiag60DegUp( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 32, height, - session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 32, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16659), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 36, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 36, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 32, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 32, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 36, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 36, height, session.SupportColours); break; } } @@ -6902,6 +6907,7 @@ static void CorkscrewRCTrackDiag60DegUp( } /** rct2: 0x008A7FE8 */ +template static void CorkscrewRCTrackDiagFlatTo25DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -7013,24 +7019,22 @@ static void CorkscrewRCTrackDiagFlatTo25DegUp( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16701), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } } @@ -7040,24 +7044,22 @@ static void CorkscrewRCTrackDiagFlatTo25DegUp( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16639), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } } @@ -7075,6 +7077,7 @@ static void CorkscrewRCTrackDiagFlatTo25DegUp( } /** rct2: 0x008A8048 */ +template static void CorkscrewRCTrackDiag25DegUpTo60DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -7186,25 +7189,22 @@ static void CorkscrewRCTrackDiag25DegUpTo60DegUp( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 16, height, - session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 16, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16713), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 16, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 16, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 16, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 16, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 16, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 16, height, session.SupportColours); break; } } @@ -7214,25 +7214,22 @@ static void CorkscrewRCTrackDiag25DegUpTo60DegUp( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 16, height, - session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 16, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16651), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 16, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 16, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 16, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 16, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 16, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 16, height, session.SupportColours); break; } } @@ -7250,6 +7247,7 @@ static void CorkscrewRCTrackDiag25DegUpTo60DegUp( } /** rct2: 0x008A8058 */ +template static void CorkscrewRCTrackDiag60DegUpTo25DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -7361,25 +7359,22 @@ static void CorkscrewRCTrackDiag60DegUpTo25DegUp( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 21, height, - session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 21, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16717), { -16, -16, height }, { { 0, 0, height }, { 16, 16, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 21, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 21, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 21, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 21, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 21, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 21, height, session.SupportColours); break; } } @@ -7389,25 +7384,22 @@ static void CorkscrewRCTrackDiag60DegUpTo25DegUp( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 21, height, - session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 21, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16655), { -16, -16, height }, { { 0, 0, height }, { 16, 16, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 21, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 21, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 21, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 21, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 21, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 21, height, session.SupportColours); break; } } @@ -7425,6 +7417,7 @@ static void CorkscrewRCTrackDiag60DegUpTo25DegUp( } /** rct2: 0x008A7FF8 */ +template static void CorkscrewRCTrackDiag25DegUpToFlat( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -7536,24 +7529,22 @@ static void CorkscrewRCTrackDiag25DegUpToFlat( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16705), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); break; } } @@ -7563,24 +7554,22 @@ static void CorkscrewRCTrackDiag25DegUpToFlat( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16643), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); break; } } @@ -7598,6 +7587,7 @@ static void CorkscrewRCTrackDiag25DegUpToFlat( } /** rct2: 0x008A8038 */ +template static void CorkscrewRCTrackDiag25DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -7709,24 +7699,22 @@ static void CorkscrewRCTrackDiag25DegDown( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16711), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 8, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 8, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 8, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 8, height, session.SupportColours); break; } } @@ -7736,24 +7724,22 @@ static void CorkscrewRCTrackDiag25DegDown( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16649), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 8, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 8, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 8, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 8, height, session.SupportColours); break; } } @@ -7771,6 +7757,7 @@ static void CorkscrewRCTrackDiag25DegDown( } /** rct2: 0x008A8098 */ +template static void CorkscrewRCTrackDiag60DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -7882,25 +7869,22 @@ static void CorkscrewRCTrackDiag60DegDown( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 24, height, - session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 24, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16723), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 28, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 28, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 24, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 24, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 28, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 28, height, session.SupportColours); break; } } @@ -7910,25 +7894,22 @@ static void CorkscrewRCTrackDiag60DegDown( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 24, height, - session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 24, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16661), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 28, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 28, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 24, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 24, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 28, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 28, height, session.SupportColours); break; } } @@ -7946,6 +7927,7 @@ static void CorkscrewRCTrackDiag60DegDown( } /** rct2: 0x008A8018 */ +template static void CorkscrewRCTrackDiagFlatTo25DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -8054,24 +8036,22 @@ static void CorkscrewRCTrackDiagFlatTo25DegDown( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16707), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); break; } } @@ -8081,24 +8061,22 @@ static void CorkscrewRCTrackDiagFlatTo25DegDown( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16645), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); break; } } @@ -8117,6 +8095,7 @@ static void CorkscrewRCTrackDiagFlatTo25DegDown( } /** rct2: 0x008A8078 */ +template static void CorkscrewRCTrackDiag25DegDownTo60DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -8228,25 +8207,22 @@ static void CorkscrewRCTrackDiag25DegDownTo60DegDown( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 17, height, - session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 17, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16719), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 17, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 17, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 17, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 17, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 17, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 17, height, session.SupportColours); break; } } @@ -8256,25 +8232,22 @@ static void CorkscrewRCTrackDiag25DegDownTo60DegDown( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 17, height, - session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 17, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16657), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 17, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 17, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 17, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 17, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 17, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 17, height, session.SupportColours); break; } } @@ -8292,6 +8265,7 @@ static void CorkscrewRCTrackDiag25DegDownTo60DegDown( } /** rct2: 0x008A8088 */ +template static void CorkscrewRCTrackDiag60DegDownTo25DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -8403,24 +8377,22 @@ static void CorkscrewRCTrackDiag60DegDownTo25DegDown( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16715), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 8, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 8, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 8, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 8, height, session.SupportColours); break; } } @@ -8430,24 +8402,22 @@ static void CorkscrewRCTrackDiag60DegDownTo25DegDown( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16653), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 8, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 8, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 8, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 8, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 8, height, session.SupportColours); break; } } @@ -8465,6 +8435,7 @@ static void CorkscrewRCTrackDiag60DegDownTo25DegDown( } /** rct2: 0x008A8028 */ +template static void CorkscrewRCTrackDiag25DegDownToFlat( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -8576,24 +8547,22 @@ static void CorkscrewRCTrackDiag25DegDownToFlat( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16703), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } } @@ -8603,24 +8572,22 @@ static void CorkscrewRCTrackDiag25DegDownToFlat( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16641), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, - session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, - session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } } @@ -8638,6 +8605,7 @@ static void CorkscrewRCTrackDiag25DegDownToFlat( } /** rct2: 0x008A80C8 */ +template static void CorkscrewRCTrackDiagFlatToLeftBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -8708,22 +8676,22 @@ static void CorkscrewRCTrackDiagFlatToLeftBank( { case 0: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16667), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -8740,6 +8708,7 @@ static void CorkscrewRCTrackDiagFlatToLeftBank( } /** rct2: 0x008A80D8 */ +template static void CorkscrewRCTrackDiagFlatToRightBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -8810,22 +8779,22 @@ static void CorkscrewRCTrackDiagFlatToRightBank( { case 0: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16672), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -8842,6 +8811,7 @@ static void CorkscrewRCTrackDiagFlatToRightBank( } /** rct2: 0x008A80E8 */ +template static void CorkscrewRCTrackDiagLeftBankToFlat( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -8912,22 +8882,22 @@ static void CorkscrewRCTrackDiagLeftBankToFlat( { case 0: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16674), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -8944,6 +8914,7 @@ static void CorkscrewRCTrackDiagLeftBankToFlat( } /** rct2: 0x008A80F8 */ +template static void CorkscrewRCTrackDiagRightBankToFlat( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -9014,22 +8985,22 @@ static void CorkscrewRCTrackDiagRightBankToFlat( { case 0: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16669), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -9046,6 +9017,7 @@ static void CorkscrewRCTrackDiagRightBankToFlat( } /** rct2: 0x008A8128 */ +template static void CorkscrewRCTrackDiagLeftBankTo25DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -9116,22 +9088,22 @@ static void CorkscrewRCTrackDiagLeftBankTo25DegUp( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16687), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -9148,6 +9120,7 @@ static void CorkscrewRCTrackDiagLeftBankTo25DegUp( } /** rct2: 0x008A8138 */ +template static void CorkscrewRCTrackDiagRightBankTo25DegUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -9218,22 +9191,22 @@ static void CorkscrewRCTrackDiagRightBankTo25DegUp( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16692), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -9250,6 +9223,7 @@ static void CorkscrewRCTrackDiagRightBankTo25DegUp( } /** rct2: 0x008A8108 */ +template static void CorkscrewRCTrackDiag25DegUpToLeftBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -9320,22 +9294,22 @@ static void CorkscrewRCTrackDiag25DegUpToLeftBank( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16677), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -9352,6 +9326,7 @@ static void CorkscrewRCTrackDiag25DegUpToLeftBank( } /** rct2: 0x008A8118 */ +template static void CorkscrewRCTrackDiag25DegUpToRightBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -9422,22 +9397,22 @@ static void CorkscrewRCTrackDiag25DegUpToRightBank( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16682), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -9454,6 +9429,7 @@ static void CorkscrewRCTrackDiag25DegUpToRightBank( } /** rct2: 0x008A8148 */ +template static void CorkscrewRCTrackDiagLeftBankTo25DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -9521,22 +9497,22 @@ static void CorkscrewRCTrackDiagLeftBankTo25DegDown( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16684), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -9554,6 +9530,7 @@ static void CorkscrewRCTrackDiagLeftBankTo25DegDown( } /** rct2: 0x008A8158 */ +template static void CorkscrewRCTrackDiagRightBankTo25DegDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -9621,22 +9598,22 @@ static void CorkscrewRCTrackDiagRightBankTo25DegDown( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16679), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 4, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 4, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -9654,6 +9631,7 @@ static void CorkscrewRCTrackDiagRightBankTo25DegDown( } /** rct2: 0x008A8168 */ +template static void CorkscrewRCTrackDiag25DegDownToLeftBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -9724,22 +9702,22 @@ static void CorkscrewRCTrackDiag25DegDownToLeftBank( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16694), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -9756,6 +9734,7 @@ static void CorkscrewRCTrackDiag25DegDownToLeftBank( } /** rct2: 0x008A8178 */ +template static void CorkscrewRCTrackDiag25DegDownToRightBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -9826,22 +9805,22 @@ static void CorkscrewRCTrackDiag25DegDownToRightBank( { case 0: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16689), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalBSupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -9858,6 +9837,7 @@ static void CorkscrewRCTrackDiag25DegDownToRightBank( } /** rct2: 0x008A80A8 */ +template static void CorkscrewRCTrackDiagLeftBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -9925,22 +9905,22 @@ static void CorkscrewRCTrackDiagLeftBank( { case 0: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16663), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -9957,6 +9937,7 @@ static void CorkscrewRCTrackDiagLeftBank( } /** rct2: 0x008A80B8 */ +template static void CorkscrewRCTrackDiagRightBank( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -10024,22 +10005,22 @@ static void CorkscrewRCTrackDiagRightBank( { case 0: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16665), { -16, -16, height }, { { -16, -16, height }, { 32, 32, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::TopCorner, 0, height, session.SupportColours); break; case 2: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::RightCorner, 0, height, session.SupportColours); break; case 3: MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); + session, supportType, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight( @@ -10056,6 +10037,7 @@ static void CorkscrewRCTrackDiagRightBank( } /** rct2: 0x008A8188 */ +template static void CorkscrewRCTrackBlockBrakes( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -10064,19 +10046,20 @@ static void CorkscrewRCTrackBlockBrakes( PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(_CorkscrewRCBlockBrakeImages[direction][isClosed]), { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); - MetalASupportsPaintSetup(session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); PaintUtilSetGeneralSupportHeight(session, height + 32); } +template static void CorkscrewRCTrackBooster( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { if (!IsCsgLoaded()) { - CorkscrewRCTrackBrakes(session, ride, trackSequence, direction, height, trackElement); + CorkscrewRCTrackBrakes(session, ride, trackSequence, direction, height, trackElement); return; } @@ -10108,14 +10091,14 @@ static void CorkscrewRCTrackBooster( } if (TrackPaintUtilShouldPaintSupports(session.MapPosition)) { - MetalASupportsPaintSetup( - session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); } PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0); PaintUtilSetGeneralSupportHeight(session, height + 32); } +template static void CorkscrewRCTrackLeftTwistDownToUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -10142,8 +10125,7 @@ static void CorkscrewRCTrackLeftTwistDownToUp( session, direction, session.TrackColours.WithIndex(26977), { 0, 6, height }, { 32, 20, 3 }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -10216,8 +10198,7 @@ static void CorkscrewRCTrackLeftTwistDownToUp( PaintSegment::topRightSide, PaintSegment::bottomLeftSide), direction), 0xFFFF, 0); - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); switch (direction) { @@ -10233,6 +10214,7 @@ static void CorkscrewRCTrackLeftTwistDownToUp( } } +template static void CorkscrewRCTrackRightTwistDownToUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -10259,8 +10241,7 @@ static void CorkscrewRCTrackRightTwistDownToUp( session, direction, session.TrackColours.WithIndex(26989), { 0, 6, height }, { 32, 20, 3 }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -10333,8 +10314,7 @@ static void CorkscrewRCTrackRightTwistDownToUp( PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), direction), 0xFFFF, 0); - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); switch (direction) { @@ -10350,6 +10330,7 @@ static void CorkscrewRCTrackRightTwistDownToUp( } } +template static void CorkscrewRCTrackLeftTwistUpToDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -10384,8 +10365,7 @@ static void CorkscrewRCTrackLeftTwistUpToDown( PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), direction), 0xFFFF, 0); - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { @@ -10443,8 +10423,7 @@ static void CorkscrewRCTrackLeftTwistUpToDown( session, direction, session.TrackColours.WithIndex(26978), { 0, 6, height }, { 32, 20, 3 }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); switch (direction) { case 1: @@ -10467,6 +10446,7 @@ static void CorkscrewRCTrackLeftTwistUpToDown( } } +template static void CorkscrewRCTrackRightTwistUpToDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -10501,8 +10481,7 @@ static void CorkscrewRCTrackRightTwistUpToDown( PaintSegment::topRightSide, PaintSegment::bottomLeftSide), direction), 0xFFFF, 0); - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { @@ -10560,8 +10539,7 @@ static void CorkscrewRCTrackRightTwistUpToDown( session, direction, session.TrackColours.WithIndex(26990), { 0, 6, height }, { 32, 20, 3 }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); switch (direction) { case 1: @@ -10585,6 +10563,7 @@ static void CorkscrewRCTrackRightTwistUpToDown( } /** rct2: 0x00824FAC */ +template static void LayDownRCTrackLeftFlyerTwistUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -10611,8 +10590,7 @@ static void LayDownRCTrackLeftFlyerTwistUp( session, direction, session.TrackColours.WithIndex(26977), { 0, 6, height }, { 32, 20, 3 }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -10688,8 +10666,7 @@ static void LayDownRCTrackLeftFlyerTwistUp( PaintSegment::topRightSide, PaintSegment::bottomLeftSide), direction), 0xFFFF, 0); - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height + 33, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height + 33, session.SupportColours); switch (direction) { @@ -10706,6 +10683,7 @@ static void LayDownRCTrackLeftFlyerTwistUp( } /** rct2: 0x00824FBC */ +template static void LayDownRCTrackRightFlyerTwistUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -10732,8 +10710,7 @@ static void LayDownRCTrackRightFlyerTwistUp( session, direction, session.TrackColours.WithIndex(26989), { 0, 6, height }, { 32, 20, 3 }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -10807,8 +10784,7 @@ static void LayDownRCTrackRightFlyerTwistUp( PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide), direction), 0xFFFF, 0); - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height + 33, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height + 33, session.SupportColours); switch (direction) { @@ -10825,6 +10801,7 @@ static void LayDownRCTrackRightFlyerTwistUp( } /** rct2: 0x00824C3C */ +template static void LayDownRCTrackFlyerHalfLoopUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -10851,8 +10828,7 @@ static void LayDownRCTrackFlyerHalfLoopUp( session, direction, session.TrackColours.WithIndex(16609), { 0, 6, height }, { 32, 20, 7 }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 8, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 8, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1); @@ -10869,31 +10845,27 @@ static void LayDownRCTrackFlyerHalfLoopUp( session, direction, session.TrackColours.WithIndex(16595), { 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } }); MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 20, height, - session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 20, height, session.SupportColours); break; case 1: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16603), { 0, 14, height }, { { 28, 6, height }, { 3, 20, 63 } }); MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 15, height, - session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 15, height, session.SupportColours); break; case 2: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16600), { 0, 6, height }, { { 28, 6, height }, { 3, 20, 63 } }); MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 16, height, - session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 16, height, session.SupportColours); break; case 3: PaintAddImageAsParentRotated( session, direction, session.TrackColours.WithIndex(16608), { 0, 6, height }, { 32, 20, 3 }); MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 16, height, - session.SupportColours); + session, supportType, MetalSupportPlace::Centre, 16, height, session.SupportColours); break; } PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0); @@ -10963,6 +10935,7 @@ static void LayDownRCTrackFlyerHalfLoopUp( } /** rct2: 0x00824C5C */ +template static void LayDownRCTrackLeftFlyerCorkscrewUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -11005,8 +10978,7 @@ static void LayDownRCTrackLeftFlyerCorkscrewUp( direction), 0xFFFF, 0); } - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction != 2) { PaintUtilSetSegmentSupportHeight( @@ -11085,8 +11057,7 @@ static void LayDownRCTrackLeftFlyerCorkscrewUp( PaintSegment::bottomRightSide), direction), 0xFFFF, 0); - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height + 35, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height + 35, session.SupportColours); switch (direction) { @@ -11103,6 +11074,7 @@ static void LayDownRCTrackLeftFlyerCorkscrewUp( } /** rct2: 0x00824C6C */ +template static void LayDownRCTrackRightFlyerCorkscrewUp( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -11133,8 +11105,7 @@ static void LayDownRCTrackRightFlyerCorkscrewUp( { { 0, 6, height + 4 }, { 32, 20, 3 } }); break; } - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height, session.SupportColours); if (direction == 0 || direction == 3) { PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); @@ -11209,8 +11180,7 @@ static void LayDownRCTrackRightFlyerCorkscrewUp( PaintSegment::bottomRightSide), direction), 0xFFFF, 0); - MetalASupportsPaintSetup( - session, MetalSupportType::TubesInverted, MetalSupportPlace::Centre, 0, height + 35, session.SupportColours); + MetalASupportsPaintSetup(session, supportType, MetalSupportPlace::Centre, 0, height + 35, session.SupportColours); switch (direction) { @@ -11226,6 +11196,7 @@ static void LayDownRCTrackRightFlyerCorkscrewUp( } } +template static void LayDownRCTrackHalfLoopUninvertedDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) @@ -11235,257 +11206,257 @@ static void LayDownRCTrackHalfLoopUninvertedDown( return; } -TRACK_PAINT_FUNCTION GetTrackPaintFunctionCorkscrewRC(int32_t trackType) +template TRACK_PAINT_FUNCTION GetTrackPaintFunctionCorkscrewRC(int32_t trackType) { switch (trackType) { case TrackElemType::Flat: - return CorkscrewRCTrackFlat; + return CorkscrewRCTrackFlat; case TrackElemType::EndStation: case TrackElemType::BeginStation: case TrackElemType::MiddleStation: - return CorkscrewRCTrackStation; + return CorkscrewRCTrackStation; case TrackElemType::Up25: - return CorkscrewRCTrack25DegUp; + return CorkscrewRCTrack25DegUp; case TrackElemType::Up60: - return CorkscrewRCTrack60DegUp; + return CorkscrewRCTrack60DegUp; case TrackElemType::FlatToUp25: - return CorkscrewRCTrackFlatTo25DegUp; + return CorkscrewRCTrackFlatTo25DegUp; case TrackElemType::Up25ToUp60: - return CorkscrewRCTrack25DegUpTo60DegUp; + return CorkscrewRCTrack25DegUpTo60DegUp; case TrackElemType::Up60ToUp25: - return CorkscrewRCTrack60DegUpTo25DegUp; + return CorkscrewRCTrack60DegUpTo25DegUp; case TrackElemType::Up25ToFlat: - return CorkscrewRCTrack25DegUpToFlat; + return CorkscrewRCTrack25DegUpToFlat; case TrackElemType::Down25: - return CorkscrewRCTrack25DegDown; + return CorkscrewRCTrack25DegDown; case TrackElemType::Down60: - return CorkscrewRCTrack60DegDown; + return CorkscrewRCTrack60DegDown; case TrackElemType::FlatToDown25: - return CorkscrewRCTrackFlatTo25DegDown; + return CorkscrewRCTrackFlatTo25DegDown; case TrackElemType::Down25ToDown60: - return CorkscrewRCTrack25DegDownTo60DegDown; + return CorkscrewRCTrack25DegDownTo60DegDown; case TrackElemType::Down60ToDown25: - return CorkscrewRCTrack60DegDownTo25DegDown; + return CorkscrewRCTrack60DegDownTo25DegDown; case TrackElemType::Down25ToFlat: - return CorkscrewRCTrack25DegDownToFlat; + return CorkscrewRCTrack25DegDownToFlat; case TrackElemType::LeftQuarterTurn5Tiles: - return CorkscrewRCTrackLeftQuarterTurn5; + return CorkscrewRCTrackLeftQuarterTurn5; case TrackElemType::RightQuarterTurn5Tiles: - return CorkscrewRCTrackRightQuarterTurn5; + return CorkscrewRCTrackRightQuarterTurn5; case TrackElemType::FlatToLeftBank: - return CorkscrewRCTrackFlatToLeftBank; + return CorkscrewRCTrackFlatToLeftBank; case TrackElemType::FlatToRightBank: - return CorkscrewRCTrackFlatToRightBank; + return CorkscrewRCTrackFlatToRightBank; case TrackElemType::LeftBankToFlat: - return CorkscrewRCTrackLeftBankToFlat; + return CorkscrewRCTrackLeftBankToFlat; case TrackElemType::RightBankToFlat: - return CorkscrewRCTrackRightBankToFlat; + return CorkscrewRCTrackRightBankToFlat; case TrackElemType::BankedLeftQuarterTurn5Tiles: - return CorkscrewRCTrackBankedLeftQuarterTurn5; + return CorkscrewRCTrackBankedLeftQuarterTurn5; case TrackElemType::BankedRightQuarterTurn5Tiles: - return CorkscrewRCTrackBankedRightQuarterTurn5; + return CorkscrewRCTrackBankedRightQuarterTurn5; case TrackElemType::LeftBankToUp25: - return CorkscrewRCTrackLeftBankTo25DegUp; + return CorkscrewRCTrackLeftBankTo25DegUp; case TrackElemType::RightBankToUp25: - return CorkscrewRCTrackRightBankTo25DegUp; + return CorkscrewRCTrackRightBankTo25DegUp; case TrackElemType::Up25ToLeftBank: - return CorkscrewRCTrack25DegUpToLeftBank; + return CorkscrewRCTrack25DegUpToLeftBank; case TrackElemType::Up25ToRightBank: - return CorkscrewRCTrack25DegUpToRightBank; + return CorkscrewRCTrack25DegUpToRightBank; case TrackElemType::LeftBankToDown25: - return CorkscrewRCTrackLeftBankTo25DegDown; + return CorkscrewRCTrackLeftBankTo25DegDown; case TrackElemType::RightBankToDown25: - return CorkscrewRCTrackRightBankTo25DegDown; + return CorkscrewRCTrackRightBankTo25DegDown; case TrackElemType::Down25ToLeftBank: - return CorkscrewRCTrack25DegDownToLeftBank; + return CorkscrewRCTrack25DegDownToLeftBank; case TrackElemType::Down25ToRightBank: - return CorkscrewRCTrack25DegDownToRightBank; + return CorkscrewRCTrack25DegDownToRightBank; case TrackElemType::LeftBank: - return CorkscrewRCTrackLeftBank; + return CorkscrewRCTrackLeftBank; case TrackElemType::RightBank: - return CorkscrewRCTrackRightBank; + return CorkscrewRCTrackRightBank; case TrackElemType::LeftQuarterTurn5TilesUp25: - return CorkscrewRCTrackLeftQuarterTurn525DegUp; + return CorkscrewRCTrackLeftQuarterTurn525DegUp; case TrackElemType::RightQuarterTurn5TilesUp25: - return CorkscrewRCTrackRightQuarterTurn525DegUp; + return CorkscrewRCTrackRightQuarterTurn525DegUp; case TrackElemType::LeftQuarterTurn5TilesDown25: - return CorkscrewRCTrackLeftQuarterTurn525DegDown; + return CorkscrewRCTrackLeftQuarterTurn525DegDown; case TrackElemType::RightQuarterTurn5TilesDown25: - return CorkscrewRCTrackRightQuarterTurn525DegDown; + return CorkscrewRCTrackRightQuarterTurn525DegDown; case TrackElemType::SBendLeft: - return CorkscrewRCTrackSBendLeft; + return CorkscrewRCTrackSBendLeft; case TrackElemType::SBendRight: - return CorkscrewRCTrackSBendRight; + return CorkscrewRCTrackSBendRight; case TrackElemType::LeftVerticalLoop: - return CorkscrewRCTrackLeftVerticalLoop; + return CorkscrewRCTrackLeftVerticalLoop; case TrackElemType::RightVerticalLoop: - return CorkscrewRCTrackRightVerticalLoop; + return CorkscrewRCTrackRightVerticalLoop; case TrackElemType::LeftQuarterTurn3Tiles: - return CorkscrewRCTrackLeftQuarterTurn3; + return CorkscrewRCTrackLeftQuarterTurn3; case TrackElemType::RightQuarterTurn3Tiles: - return CorkscrewRCTrackRightQuarterTurn3; + return CorkscrewRCTrackRightQuarterTurn3; case TrackElemType::LeftBankedQuarterTurn3Tiles: - return CorkscrewRCTrackLeftQuarterTurn3Bank; + return CorkscrewRCTrackLeftQuarterTurn3Bank; case TrackElemType::RightBankedQuarterTurn3Tiles: - return CorkscrewRCTrackRightQuarterTurn3Bank; + return CorkscrewRCTrackRightQuarterTurn3Bank; case TrackElemType::LeftQuarterTurn3TilesUp25: - return CorkscrewRCTrackLeftQuarterTurn325DegUp; + return CorkscrewRCTrackLeftQuarterTurn325DegUp; case TrackElemType::RightQuarterTurn3TilesUp25: - return CorkscrewRCTrackRightQuarterTurn325DegUp; + return CorkscrewRCTrackRightQuarterTurn325DegUp; case TrackElemType::LeftQuarterTurn3TilesDown25: - return CorkscrewRCTrackLeftQuarterTurn325DegDown; + return CorkscrewRCTrackLeftQuarterTurn325DegDown; case TrackElemType::RightQuarterTurn3TilesDown25: - return CorkscrewRCTrackRightQuarterTurn325DegDown; + return CorkscrewRCTrackRightQuarterTurn325DegDown; case TrackElemType::HalfLoopUp: - return CorkscrewRCTrackHalfLoopUp; + return CorkscrewRCTrackHalfLoopUp; case TrackElemType::HalfLoopDown: - return CorkscrewRCTrackHalfLoopDown; + return CorkscrewRCTrackHalfLoopDown; case TrackElemType::LeftCorkscrewUp: - return CorkscrewRCTrackLeftCorkscrewUp; + return CorkscrewRCTrackLeftCorkscrewUp; case TrackElemType::RightCorkscrewUp: - return CorkscrewRCTrackRightCorkscrewUp; + return CorkscrewRCTrackRightCorkscrewUp; case TrackElemType::LeftCorkscrewDown: - return CorkscrewRCTrackLeftCorkscrewDown; + return CorkscrewRCTrackLeftCorkscrewDown; case TrackElemType::RightCorkscrewDown: - return CorkscrewRCTrackRightCorkscrewDown; + return CorkscrewRCTrackRightCorkscrewDown; case TrackElemType::LeftHalfBankedHelixUpSmall: - return CorkscrewRCTrackLeftHalfBankedHelixUpSmall; + return CorkscrewRCTrackLeftHalfBankedHelixUpSmall; case TrackElemType::RightHalfBankedHelixUpSmall: - return CorkscrewRCTrackRightHalfBankedHelixUpSmall; + return CorkscrewRCTrackRightHalfBankedHelixUpSmall; case TrackElemType::LeftHalfBankedHelixDownSmall: - return CorkscrewRCTrackLeftHalfBankedHelixDownSmall; + return CorkscrewRCTrackLeftHalfBankedHelixDownSmall; case TrackElemType::RightHalfBankedHelixDownSmall: - return CorkscrewRCTrackRightHalfBankedHelixDownSmall; + return CorkscrewRCTrackRightHalfBankedHelixDownSmall; case TrackElemType::LeftHalfBankedHelixUpLarge: - return CorkscrewRCTrackLeftHalfBankedHelixUpLarge; + return CorkscrewRCTrackLeftHalfBankedHelixUpLarge; case TrackElemType::RightHalfBankedHelixUpLarge: - return CorkscrewRCTrackRightHalfBankedHelixUpLarge; + return CorkscrewRCTrackRightHalfBankedHelixUpLarge; case TrackElemType::LeftHalfBankedHelixDownLarge: - return CorkscrewRCTrackLeftHalfBankedHelixDownLarge; + return CorkscrewRCTrackLeftHalfBankedHelixDownLarge; case TrackElemType::RightHalfBankedHelixDownLarge: - return CorkscrewRCTrackRightHalfBankedHelixDownLarge; + return CorkscrewRCTrackRightHalfBankedHelixDownLarge; case TrackElemType::LeftQuarterTurn1TileUp60: - return CorkscrewRCTrackLeftQuarterTurn160DegUp; + return CorkscrewRCTrackLeftQuarterTurn160DegUp; case TrackElemType::RightQuarterTurn1TileUp60: - return CorkscrewRCTrackRightQuarterTurn160DegUp; + return CorkscrewRCTrackRightQuarterTurn160DegUp; case TrackElemType::LeftQuarterTurn1TileDown60: - return CorkscrewRCTrackLeftQuarterTurn160DegDown; + return CorkscrewRCTrackLeftQuarterTurn160DegDown; case TrackElemType::RightQuarterTurn1TileDown60: - return CorkscrewRCTrackRightQuarterTurn160DegDown; + return CorkscrewRCTrackRightQuarterTurn160DegDown; case TrackElemType::Brakes: - return CorkscrewRCTrackBrakes; + return CorkscrewRCTrackBrakes; case TrackElemType::OnRidePhoto: - return CorkscrewRCTrackOnRidePhoto; + return CorkscrewRCTrackOnRidePhoto; case TrackElemType::FlatToUp60LongBase: - return CorkscrewRCTrackFlatTo60DegUpLongBase; + return CorkscrewRCTrackFlatTo60DegUpLongBase; case TrackElemType::Up60ToFlatLongBase: - return CorkscrewRCTrack60DegUpToFlatLongBase; + return CorkscrewRCTrack60DegUpToFlatLongBase; case TrackElemType::Down60ToFlatLongBase: - return CorkscrewRCTrack60DegDownToFlatLongBase; + return CorkscrewRCTrack60DegDownToFlatLongBase; case TrackElemType::FlatToDown60LongBase: - return CorkscrewRCTrackFlatTo60DegDownLongBase; + return CorkscrewRCTrackFlatTo60DegDownLongBase; case TrackElemType::LeftEighthToDiag: - return CorkscrewRCTrackLeftEighthToDiag; + return CorkscrewRCTrackLeftEighthToDiag; case TrackElemType::RightEighthToDiag: - return CorkscrewRCTrackRightEighthToDiag; + return CorkscrewRCTrackRightEighthToDiag; case TrackElemType::LeftEighthToOrthogonal: - return CorkscrewRCTrackLeftEighthToOrthogonal; + return CorkscrewRCTrackLeftEighthToOrthogonal; case TrackElemType::RightEighthToOrthogonal: - return CorkscrewRCTrackRightEighthToOrthogonal; + return CorkscrewRCTrackRightEighthToOrthogonal; case TrackElemType::LeftEighthBankToDiag: - return CorkscrewRCTrackLeftEighthBankToDiag; + return CorkscrewRCTrackLeftEighthBankToDiag; case TrackElemType::RightEighthBankToDiag: - return CorkscrewRCTrackRightEighthBankToDiag; + return CorkscrewRCTrackRightEighthBankToDiag; case TrackElemType::LeftEighthBankToOrthogonal: - return CorkscrewRCTrackLeftEighthBankToOrthogonal; + return CorkscrewRCTrackLeftEighthBankToOrthogonal; case TrackElemType::RightEighthBankToOrthogonal: - return CorkscrewRCTrackRightEighthBankToOrthogonal; + return CorkscrewRCTrackRightEighthBankToOrthogonal; case TrackElemType::DiagFlat: - return CorkscrewRCTrackDiagFlat; + return CorkscrewRCTrackDiagFlat; case TrackElemType::DiagUp25: - return CorkscrewRCTrackDiag25DegUp; + return CorkscrewRCTrackDiag25DegUp; case TrackElemType::DiagUp60: - return CorkscrewRCTrackDiag60DegUp; + return CorkscrewRCTrackDiag60DegUp; case TrackElemType::DiagFlatToUp25: - return CorkscrewRCTrackDiagFlatTo25DegUp; + return CorkscrewRCTrackDiagFlatTo25DegUp; case TrackElemType::DiagUp25ToUp60: - return CorkscrewRCTrackDiag25DegUpTo60DegUp; + return CorkscrewRCTrackDiag25DegUpTo60DegUp; case TrackElemType::DiagUp60ToUp25: - return CorkscrewRCTrackDiag60DegUpTo25DegUp; + return CorkscrewRCTrackDiag60DegUpTo25DegUp; case TrackElemType::DiagUp25ToFlat: - return CorkscrewRCTrackDiag25DegUpToFlat; + return CorkscrewRCTrackDiag25DegUpToFlat; case TrackElemType::DiagDown25: - return CorkscrewRCTrackDiag25DegDown; + return CorkscrewRCTrackDiag25DegDown; case TrackElemType::DiagDown60: - return CorkscrewRCTrackDiag60DegDown; + return CorkscrewRCTrackDiag60DegDown; case TrackElemType::DiagFlatToDown25: - return CorkscrewRCTrackDiagFlatTo25DegDown; + return CorkscrewRCTrackDiagFlatTo25DegDown; case TrackElemType::DiagDown25ToDown60: - return CorkscrewRCTrackDiag25DegDownTo60DegDown; + return CorkscrewRCTrackDiag25DegDownTo60DegDown; case TrackElemType::DiagDown60ToDown25: - return CorkscrewRCTrackDiag60DegDownTo25DegDown; + return CorkscrewRCTrackDiag60DegDownTo25DegDown; case TrackElemType::DiagDown25ToFlat: - return CorkscrewRCTrackDiag25DegDownToFlat; + return CorkscrewRCTrackDiag25DegDownToFlat; case TrackElemType::DiagFlatToLeftBank: - return CorkscrewRCTrackDiagFlatToLeftBank; + return CorkscrewRCTrackDiagFlatToLeftBank; case TrackElemType::DiagFlatToRightBank: - return CorkscrewRCTrackDiagFlatToRightBank; + return CorkscrewRCTrackDiagFlatToRightBank; case TrackElemType::DiagLeftBankToFlat: - return CorkscrewRCTrackDiagLeftBankToFlat; + return CorkscrewRCTrackDiagLeftBankToFlat; case TrackElemType::DiagRightBankToFlat: - return CorkscrewRCTrackDiagRightBankToFlat; + return CorkscrewRCTrackDiagRightBankToFlat; case TrackElemType::DiagLeftBankToUp25: - return CorkscrewRCTrackDiagLeftBankTo25DegUp; + return CorkscrewRCTrackDiagLeftBankTo25DegUp; case TrackElemType::DiagRightBankToUp25: - return CorkscrewRCTrackDiagRightBankTo25DegUp; + return CorkscrewRCTrackDiagRightBankTo25DegUp; case TrackElemType::DiagUp25ToLeftBank: - return CorkscrewRCTrackDiag25DegUpToLeftBank; + return CorkscrewRCTrackDiag25DegUpToLeftBank; case TrackElemType::DiagUp25ToRightBank: - return CorkscrewRCTrackDiag25DegUpToRightBank; + return CorkscrewRCTrackDiag25DegUpToRightBank; case TrackElemType::DiagLeftBankToDown25: - return CorkscrewRCTrackDiagLeftBankTo25DegDown; + return CorkscrewRCTrackDiagLeftBankTo25DegDown; case TrackElemType::DiagRightBankToDown25: - return CorkscrewRCTrackDiagRightBankTo25DegDown; + return CorkscrewRCTrackDiagRightBankTo25DegDown; case TrackElemType::DiagDown25ToLeftBank: - return CorkscrewRCTrackDiag25DegDownToLeftBank; + return CorkscrewRCTrackDiag25DegDownToLeftBank; case TrackElemType::DiagDown25ToRightBank: - return CorkscrewRCTrackDiag25DegDownToRightBank; + return CorkscrewRCTrackDiag25DegDownToRightBank; case TrackElemType::DiagLeftBank: - return CorkscrewRCTrackDiagLeftBank; + return CorkscrewRCTrackDiagLeftBank; case TrackElemType::DiagRightBank: - return CorkscrewRCTrackDiagRightBank; + return CorkscrewRCTrackDiagRightBank; case TrackElemType::BlockBrakes: - return CorkscrewRCTrackBlockBrakes; + return CorkscrewRCTrackBlockBrakes; case TrackElemType::DiagBrakes: - return CorkscrewRCTrackDiagBrakes; + return CorkscrewRCTrackDiagBrakes; case TrackElemType::DiagBlockBrakes: - return CorkscrewRCTrackDiagBlockBrakes; + return CorkscrewRCTrackDiagBlockBrakes; case TrackElemType::Booster: - return CorkscrewRCTrackBooster; + return CorkscrewRCTrackBooster; case TrackElemType::LeftTwistDownToUp: - return CorkscrewRCTrackLeftTwistDownToUp; + return CorkscrewRCTrackLeftTwistDownToUp; case TrackElemType::RightTwistDownToUp: - return CorkscrewRCTrackRightTwistDownToUp; + return CorkscrewRCTrackRightTwistDownToUp; case TrackElemType::LeftTwistUpToDown: - return CorkscrewRCTrackLeftTwistUpToDown; + return CorkscrewRCTrackLeftTwistUpToDown; case TrackElemType::RightTwistUpToDown: - return CorkscrewRCTrackRightTwistUpToDown; + return CorkscrewRCTrackRightTwistUpToDown; // From Lay-down case TrackElemType::LeftFlyerTwistUp: - return LayDownRCTrackLeftFlyerTwistUp; + return LayDownRCTrackLeftFlyerTwistUp; case TrackElemType::RightFlyerTwistUp: - return LayDownRCTrackRightFlyerTwistUp; + return LayDownRCTrackRightFlyerTwistUp; case TrackElemType::FlyerHalfLoopUninvertedUp: - return LayDownRCTrackFlyerHalfLoopUp; + return LayDownRCTrackFlyerHalfLoopUp; case TrackElemType::LeftFlyerCorkscrewUp: - return LayDownRCTrackLeftFlyerCorkscrewUp; + return LayDownRCTrackLeftFlyerCorkscrewUp; case TrackElemType::RightFlyerCorkscrewUp: - return LayDownRCTrackRightFlyerCorkscrewUp; + return LayDownRCTrackRightFlyerCorkscrewUp; case TrackElemType::FlyerHalfLoopUninvertedDown: - return LayDownRCTrackHalfLoopUninvertedDown; + return LayDownRCTrackHalfLoopUninvertedDown; } return nullptr; } diff --git a/src/openrct2/ride/coaster/LayDownRollerCoasterInverted.cpp b/src/openrct2/ride/coaster/LayDownRollerCoasterInverted.cpp index d63965bb4725..8bd7f1a77b73 100644 --- a/src/openrct2/ride/coaster/LayDownRollerCoasterInverted.cpp +++ b/src/openrct2/ride/coaster/LayDownRollerCoasterInverted.cpp @@ -19,6 +19,8 @@ #include "../RideData.h" #include "../TrackData.h" #include "../TrackPaint.h" +#include "CorkscrewRollerCoaster.hpp" + static constexpr ImageIndex kLaydownDiagFlatImages[2][NumOrthogonalDirections] = { { 26781, 26782, 26783, 26784 }, { 26809, 26810, 26811, 26812 }, @@ -7468,7 +7470,7 @@ static void LayDownRCTrackRightFlyerCorkscrewDown( PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, const TrackElement& trackElement) { - auto function = GetTrackPaintFunctionCorkscrewRC(TrackElemType::LeftFlyerCorkscrewUp); + auto function = GetTrackPaintFunctionCorkscrewRC(TrackElemType::LeftFlyerCorkscrewUp); function(session, ride, 2 - trackSequence, (direction + 3) % 4, height, trackElement); return; } diff --git a/src/openrct2/ride/coaster/meta/CorkscrewRollerCoaster.h b/src/openrct2/ride/coaster/meta/CorkscrewRollerCoaster.h index 875c55012800..9e7f1c2d2371 100644 --- a/src/openrct2/ride/coaster/meta/CorkscrewRollerCoaster.h +++ b/src/openrct2/ride/coaster/meta/CorkscrewRollerCoaster.h @@ -13,6 +13,7 @@ #include "../../RideData.h" #include "../../ShopItem.h" #include "../../Track.h" +#include "../CorkscrewRollerCoaster.hpp" // clang-format off constexpr RideTypeDescriptor CorkscrewRollerCoasterRTD = @@ -20,7 +21,7 @@ constexpr RideTypeDescriptor CorkscrewRollerCoasterRTD = .Category = RIDE_CATEGORY_ROLLERCOASTER, .StartTrackPiece = TrackElemType::EndStation, .TrackPaintFunctions = TrackDrawerDescriptor({ - .Drawer = GetTrackPaintFunctionCorkscrewRC, + .Drawer = GetTrackPaintFunctionCorkscrewRC, .EnabledTrackPieces = {TRACK_STRAIGHT, TRACK_STATION_END, TRACK_LIFT_HILL, TRACK_FLAT_ROLL_BANKING, TRACK_VERTICAL_LOOP, TRACK_SLOPE, TRACK_SLOPE_STEEP_UP, TRACK_SLOPE_STEEP_DOWN, TRACK_SLOPE_CURVE, TRACK_SLOPE_CURVE_STEEP, TRACK_S_BEND, TRACK_CURVE_SMALL, TRACK_CURVE, TRACK_CURVE_LARGE, TRACK_HALF_LOOP, TRACK_CORKSCREW, TRACK_HELIX_DOWN_BANKED_HALF, TRACK_HELIX_UP_BANKED_HALF, TRACK_BRAKES, TRACK_ON_RIDE_PHOTO, TRACK_BLOCK_BRAKES,TRACK_BOOSTER, TRACK_SLOPE_STEEP_LONG, TRACK_DIAG_BRAKES, TRACK_DIAG_BLOCK_BRAKES}, .ExtraTrackPieces = {TRACK_TWIST}, }), diff --git a/src/openrct2/ride/coaster/meta/Hypercoaster.h b/src/openrct2/ride/coaster/meta/Hypercoaster.h index 056f8ae89c55..19f28e01ee04 100644 --- a/src/openrct2/ride/coaster/meta/Hypercoaster.h +++ b/src/openrct2/ride/coaster/meta/Hypercoaster.h @@ -12,6 +12,7 @@ #include "../../RideData.h" #include "../../ShopItem.h" #include "../../Track.h" +#include "../CorkscrewRollerCoaster.hpp" // clang-format off constexpr RideTypeDescriptor HypercoasterRTD = @@ -19,7 +20,7 @@ constexpr RideTypeDescriptor HypercoasterRTD = .Category = RIDE_CATEGORY_ROLLERCOASTER, .StartTrackPiece = TrackElemType::EndStation, .TrackPaintFunctions = TrackDrawerDescriptor({ - .Drawer = GetTrackPaintFunctionCorkscrewRC, + .Drawer = GetTrackPaintFunctionCorkscrewRC, .EnabledTrackPieces = {TRACK_STRAIGHT, TRACK_STATION_END, TRACK_LIFT_HILL, TRACK_FLAT_ROLL_BANKING, TRACK_SLOPE, TRACK_SLOPE_STEEP_UP, TRACK_SLOPE_STEEP_DOWN, TRACK_SLOPE_CURVE, TRACK_SLOPE_CURVE_STEEP, TRACK_S_BEND, TRACK_CURVE_SMALL, TRACK_CURVE, TRACK_CURVE_LARGE, TRACK_HELIX_DOWN_BANKED_HALF, TRACK_HELIX_UP_BANKED_HALF, TRACK_BRAKES, TRACK_ON_RIDE_PHOTO, TRACK_BLOCK_BRAKES, TRACK_SLOPE_STEEP_LONG, TRACK_DIAG_BRAKES, TRACK_DIAG_BLOCK_BRAKES}, .ExtraTrackPieces = {TRACK_VERTICAL_LOOP, TRACK_HALF_LOOP, TRACK_CORKSCREW, TRACK_BOOSTER}, }), diff --git a/src/openrct2/ride/coaster/meta/LayDownRollerCoaster.h b/src/openrct2/ride/coaster/meta/LayDownRollerCoaster.h index b08620900701..840cac603872 100644 --- a/src/openrct2/ride/coaster/meta/LayDownRollerCoaster.h +++ b/src/openrct2/ride/coaster/meta/LayDownRollerCoaster.h @@ -13,6 +13,7 @@ #include "../../RideData.h" #include "../../ShopItem.h" #include "../../Track.h" +#include "../CorkscrewRollerCoaster.hpp" // clang-format off constexpr RideTypeDescriptor LayDownRollerCoasterRTD = @@ -21,7 +22,7 @@ constexpr RideTypeDescriptor LayDownRollerCoasterRTD = .StartTrackPiece = TrackElemType::EndStation, .TrackPaintFunctions = TrackDrawerDescriptor( { - .Drawer = GetTrackPaintFunctionCorkscrewRC, + .Drawer = GetTrackPaintFunctionCorkscrewRC, .EnabledTrackPieces = { TRACK_STRAIGHT, TRACK_STATION_END, TRACK_LIFT_HILL, TRACK_FLAT_ROLL_BANKING, TRACK_VERTICAL_LOOP, TRACK_SLOPE, TRACK_SLOPE_STEEP_UP, TRACK_SLOPE_STEEP_DOWN, TRACK_SLOPE_CURVE, TRACK_SLOPE_CURVE_STEEP, TRACK_S_BEND, TRACK_CURVE_SMALL, TRACK_CURVE, TRACK_CURVE_LARGE, TRACK_HELIX_DOWN_BANKED_HALF, TRACK_HELIX_UP_BANKED_HALF, TRACK_BRAKES, TRACK_ON_RIDE_PHOTO, TRACK_BLOCK_BRAKES, TRACK_INLINE_TWIST_UNINVERTED, TRACK_FLYING_HALF_LOOP_UNINVERTED_UP, TRACK_CORKSCREW_UNINVERTED, TRACK_SLOPE_STEEP_LONG, TRACK_DIAG_BRAKES, TRACK_DIAG_BLOCK_BRAKES }, .ExtraTrackPieces = { TRACK_FLYING_HALF_LOOP_UNINVERTED_DOWN, TRACK_BOOSTER }, }