From ebb264b702690a9a677241b18d044daf3fd4b3ae Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 2 Nov 2022 09:25:54 -0400 Subject: [PATCH] Add spinning tunnel drawing code to Mini Helicopters --- distribution/changelog.txt | 1 + src/openrct2/ride/gentle/MiniHelicopters.cpp | 28 +++++++++++++++++++ .../ride/gentle/meta/MiniHelicopters.h | 2 +- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index a829561b4f..28cf7a7fae 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -8,6 +8,7 @@ - Improved: [#18350] Changed ride vehicle list to have less padding. - Improved: [#18422] Allow adding images to music objects. - Improved: [#18428] [Plugin] Add widget description interfaces to documentation. +- Improved: [#18487] Mini Helicopters track can now draw spinning tunnels. - Improved: [#18514] Add colour preset to Spiral Slide. - Change: [#17998] Show cursor when using inverted mouse dragging. - Change: [#18230] Make the large flat to steep pieces available on the corkscrew roller coaster without cheats. diff --git a/src/openrct2/ride/gentle/MiniHelicopters.cpp b/src/openrct2/ride/gentle/MiniHelicopters.cpp index 7225a07094..ce9bc0594a 100644 --- a/src/openrct2/ride/gentle/MiniHelicopters.cpp +++ b/src/openrct2/ride/gentle/MiniHelicopters.cpp @@ -311,6 +311,31 @@ static void PaintMiniHelicoptersTrackRightQuarterTurn1Tile( PaintMiniHelicoptersTrackLeftQuarterTurn1Tile(session, ride, trackSequence, (direction + 3) % 4, height, trackElement); } +static void PaintMiniHelicoptersTrackSpinningTunnel( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + const uint32_t sprites[NumOrthogonalDirections][2] = { + { SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_NE_SW, 28773 }, + { SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_SE_NW, 28774 }, + { SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_NE_SW, 28773 }, + { SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_SE_NW, 28774 }, + }; + + ImageId imageId = session.TrackColours[SCHEME_TRACK].WithIndex(sprites[direction][0]); + ImageId underlay = session.TrackColours[SCHEME_TRACK].WithIndex(sprites[direction][1]); + + PaintAddImageAsParentRotated(session, direction, underlay, { 0, 6, height - 2 }, { 32, 20, 1 }, { 0, 6, height }); + PaintAddImageAsChildRotated(session, direction, imageId, { 0, 0, height }, { 32, 20, 3 }, { 0, 6, height }); + track_paint_util_spinning_tunnel_paint(session, 1, height, direction); + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0); + + WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_MISC]); + + PaintUtilSetSegmentSupportHeight(session, SEGMENTS_ALL, 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20); +} + /** * rct2: 0x0081F268 */ @@ -349,6 +374,9 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionMiniHelicopters(int32_t trackType) return PaintMiniHelicoptersTrackLeftQuarterTurn1Tile; case TrackElemType::RightQuarterTurn1Tile: return PaintMiniHelicoptersTrackRightQuarterTurn1Tile; + + case TrackElemType::SpinningTunnel: + return PaintMiniHelicoptersTrackSpinningTunnel; } return nullptr; diff --git a/src/openrct2/ride/gentle/meta/MiniHelicopters.h b/src/openrct2/ride/gentle/meta/MiniHelicopters.h index 537a6ca602..4a678027a7 100644 --- a/src/openrct2/ride/gentle/meta/MiniHelicopters.h +++ b/src/openrct2/ride/gentle/meta/MiniHelicopters.h @@ -21,7 +21,7 @@ constexpr const RideTypeDescriptor MiniHelicoptersRTD = SET_FIELD(AlternateType, RIDE_TYPE_NULL), SET_FIELD(Category, RIDE_CATEGORY_GENTLE), SET_FIELD(EnabledTrackPieces, {TRACK_STRAIGHT, TRACK_STATION_END, TRACK_SLOPE, TRACK_CURVE_VERY_SMALL, TRACK_CURVE_SMALL}), - SET_FIELD(ExtraTrackPieces, {}), + SET_FIELD(ExtraTrackPieces, {TRACK_SPINNING_TUNNEL}), SET_FIELD(CoveredTrackPieces, {}), SET_FIELD(StartTrackPiece, TrackElemType::EndStation), SET_FIELD(TrackPaintFunction, GetTrackPaintFunctionMiniHelicopters),