OpenRCT2/src/openrct2/ride/coaster/SuspendedSwingingCoaster.cpp

4994 lines
213 KiB
C++

/*****************************************************************************
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is licensed under the GNU General Public License version 3.
*****************************************************************************/
#include "../../drawing/Drawing.h"
#include "../../interface/Viewport.h"
#include "../../paint/Paint.h"
#include "../../paint/support/MetalSupports.h"
#include "../../paint/tile_element/Paint.TileElement.h"
#include "../../paint/tile_element/Segment.h"
#include "../../paint/track/Segment.h"
#include "../../sprites.h"
#include "../../world/Map.h"
#include "../RideData.h"
#include "../TrackData.h"
#include "../TrackPaint.h"
static constexpr ImageIndex kSuspendedSwingingRCDiagFlatImages[2][NumOrthogonalDirections] = {
{ 26183, 26184, 26185, 26186 },
{ 26211, 26212, 26213, 26214 },
};
/** rct2: 0x008A8958 */
static void SuspendedSwingingRCTrackFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25963), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 1:
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25964), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25961), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 1:
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25962), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
{
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 44, session.SupportColours);
}
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_INVERTED_3);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
}
/** rct2: 0x008A8AA8, 0x008A8AB8, 0x008A8AC8 */
static void SuspendedSwingingRCTrackStation(
PaintSession& session, const Ride& ride, [[maybe_unused]] uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
static constexpr uint32_t imageIds[4][3] = {
{ SPR_STATION_BASE_C_SW_NE, 25963, SPR_STATION_INVERTED_BAR_D_SW_NE },
{ SPR_STATION_BASE_C_NW_SE, 25964, SPR_STATION_INVERTED_BAR_D_NW_SE },
{ SPR_STATION_BASE_C_SW_NE, 25963, SPR_STATION_INVERTED_BAR_D_SW_NE },
{ SPR_STATION_BASE_C_NW_SE, 25964, SPR_STATION_INVERTED_BAR_D_NW_SE },
};
PaintAddImageAsParentRotated(
session, direction, GetStationColourScheme(session, trackElement).WithIndex(imageIds[direction][0]), { 0, 0, height },
{ { 0, 2, height }, { 32, 28, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIds[direction][1]), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
PaintAddImageAsChildRotated(
session, direction, session.SupportColours.WithIndex(imageIds[direction][2]), { 0, 6, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
DrawSupportsSideBySide(session, direction, height, session.SupportColours, MetalSupportType::Tubes);
TrackPaintUtilDrawStationInverted(session, ride, direction, height, trackElement, STATION_VARIANT_TALL);
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_INVERTED_9);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
}
/** rct2: 0x008A8968 */
static void SuspendedSwingingRCTrack25DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26001), { 0, 0, height + 29 },
{ { 0, 6, height + 45 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26002), { 0, 0, height + 29 },
{ { 0, 6, height + 45 }, { 32, 20, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26003), { 0, 0, height + 29 },
{ { 0, 6, height + 45 }, { 32, 20, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26004), { 0, 0, height + 29 },
{ { 0, 6, height + 45 }, { 32, 20, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25973), { 0, 0, height + 29 },
{ { 0, 6, height + 45 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25974), { 0, 0, height + 29 },
{ { 0, 6, height + 45 }, { 32, 20, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25975), { 0, 0, height + 29 },
{ { 0, 6, height + 45 }, { 32, 20, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25976), { 0, 0, height + 29 },
{ { 0, 6, height + 45 }, { 32, 20, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
{
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopRightSide, 0, height + 62, session.SupportColours);
break;
case 1:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomRightSide, 0, height + 62,
session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomLeftSide, 0, height + 62,
session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopLeftSide, 0, height + 62, session.SupportColours);
break;
}
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_INVERTED_4);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_INVERTED_5);
}
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
}
/** rct2: 0x008A8978 */
static void SuspendedSwingingRCTrack60DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25989), { 0, 0, height + 29 },
{ { 0, 6, height + 93 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25990), { 0, 0, height + 29 },
{ { 0, 4, height + 11 }, { 32, 2, 81 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25991), { 0, 0, height + 29 },
{ { 0, 4, height + 11 }, { 32, 2, 81 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25992), { 0, 0, height + 29 },
{ { 0, 6, height + 93 }, { 32, 20, 3 } });
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_INVERTED_4);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height + 56, TUNNEL_INVERTED_5);
}
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 120, 0x20);
}
/** rct2: 0x008A8988 */
static void SuspendedSwingingRCTrackFlatTo25DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25993), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25994), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25995), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25996), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25965), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25966), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25967), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25968), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
{
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopRightSide, 0, height + 54, session.SupportColours);
break;
case 1:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomRightSide, 0, height + 54,
session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomLeftSide, 0, height + 54,
session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopLeftSide, 0, height + 54, session.SupportColours);
break;
}
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_INVERTED_3);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_INVERTED_5);
}
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
}
/** rct2: 0x008A8998 */
static void SuspendedSwingingRCTrack25DegUpTo60DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25977), { 0, 0, height + 29 },
{ { 0, 6, height + 61 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25981), { 0, 0, height + 29 },
{ { 0, 10, height + 11 }, { 32, 10, 49 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25978), { 0, 0, height + 29 },
{ { 0, 4, height + 11 }, { 32, 2, 49 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25982), { 0, 0, height + 29 },
{ { 0, 10, height + 11 }, { 32, 10, 49 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25979), { 0, 0, height + 29 },
{ { 0, 4, height + 11 }, { 32, 2, 49 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25980), { 0, 0, height + 29 },
{ { 0, 6, height + 61 }, { 32, 20, 3 } });
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_INVERTED_4);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height + 24, TUNNEL_INVERTED_5);
}
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
}
/** rct2: 0x008A89A8 */
static void SuspendedSwingingRCTrack60DegUpTo25DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25983), { 0, 0, height + 29 },
{ { 0, 6, height + 61 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25987), { 0, 0, height + 29 },
{ { 0, 10, height + 11 }, { 32, 10, 49 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26090), { 0, 0, height + 29 },
{ { 0, 4, height + 11 }, { 32, 2, 49 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25988), { 0, 0, height + 29 },
{ { 0, 10, height + 11 }, { 32, 10, 49 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25985), { 0, 0, height + 29 },
{ { 0, 4, height + 11 }, { 32, 2, 49 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25986), { 0, 0, height + 29 },
{ { 0, 6, height + 61 }, { 32, 20, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25983), { 0, 0, height + 29 },
{ { 0, 6, height + 61 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25987), { 0, 0, height + 29 },
{ { 0, 10, height + 11 }, { 32, 10, 49 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25984), { 0, 0, height + 29 },
{ { 0, 4, height + 11 }, { 32, 2, 49 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25988), { 0, 0, height + 29 },
{ { 0, 10, height + 11 }, { 32, 10, 49 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25985), { 0, 0, height + 29 },
{ { 0, 4, height + 11 }, { 32, 2, 49 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25986), { 0, 0, height + 29 },
{ { 0, 6, height + 61 }, { 32, 20, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
{
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopRightSide, 0, height + 76, session.SupportColours);
break;
case 1:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomRightSide, 0, height + 76,
session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomLeftSide, 0, height + 76,
session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopLeftSide, 0, height + 76, session.SupportColours);
break;
}
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_INVERTED_4);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height + 24, TUNNEL_INVERTED_5);
}
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
}
/** rct2: 0x008A89B8 */
static void SuspendedSwingingRCTrack25DegUpToFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25997), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25998), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25999), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26000), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25969), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25970), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25971), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(25972), { 0, 0, height + 29 },
{ { 0, 6, height + 37 }, { 32, 20, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
{
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopRightSide, 0, height + 52, session.SupportColours);
break;
case 1:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomRightSide, 0, height + 52,
session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomLeftSide, 0, height + 52,
session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopLeftSide, 0, height + 52, session.SupportColours);
break;
}
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_INVERTED_3);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_13);
}
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
}
/** rct2: 0x008A89C8 */
static void SuspendedSwingingRCTrack25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
SuspendedSwingingRCTrack25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x008A89D8 */
static void SuspendedSwingingRCTrack60DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
SuspendedSwingingRCTrack60DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x008A89E8 */
static void SuspendedSwingingRCTrackFlatTo25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
SuspendedSwingingRCTrack25DegUpToFlat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x008A89F8 */
static void SuspendedSwingingRCTrack25DegDownTo60DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
SuspendedSwingingRCTrack60DegUpTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x008A8A08 */
static void SuspendedSwingingRCTrack60DegDownTo25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
SuspendedSwingingRCTrack25DegUpTo60DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x008A8A18 */
static void SuspendedSwingingRCTrack25DegDownToFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
SuspendedSwingingRCTrackFlatTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x008A8A28 */
static void SuspendedSwingingRCTrackLeftQuarterTurn5(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26014), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26019), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26024), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26009), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 44, session.SupportColours);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_INVERTED_3);
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26013), { 0, 0, height + 29 }, { 32, 16, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26018), { 0, 0, height + 29 }, { 32, 16, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26023), { 0, 0, height + 29 },
{ { 0, 16, height + 29 }, { 32, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26008), { 0, 0, height + 29 },
{ { 0, 16, height + 29 }, { 32, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::topRightSide, PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26012), { 0, 0, height + 29 },
{ { 0, 16, height + 29 }, { 16, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26017), { 0, 0, height + 29 },
{ { 16, 16, height + 29 }, { 16, 16, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26022), { 0, 0, height + 29 },
{ { 16, 0, height + 29 }, { 16, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26007), { 0, 0, height + 29 }, { 16, 16, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 4:
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 5:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26011), { 0, 0, height + 29 },
{ { 16, 0, height + 29 }, { 16, 32, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26016), { 0, 0, height + 29 }, { 16, 32, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26021), { 0, 0, height + 29 }, { 16, 32, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26006), { 0, 0, height + 29 },
{ { 16, 0, height + 29 }, { 16, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 6:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26010), { 0, 0, height + 29 },
{ { 6, 0, height + 29 }, { 20, 32, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26015), { 0, 0, height + 29 },
{ { 6, 0, height + 29 }, { 20, 32, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26020), { 0, 0, height + 29 },
{ { 6, 0, height + 29 }, { 20, 32, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26005), { 0, 0, height + 29 },
{ { 6, 0, height + 29 }, { 20, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 44, session.SupportColours);
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height, TUNNEL_INVERTED_3);
break;
case 3:
PaintUtilPushTunnelLeft(session, height, TUNNEL_INVERTED_3);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x008A8A38 */
static void SuspendedSwingingRCTrackRightQuarterTurn5(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
SuspendedSwingingRCTrackLeftQuarterTurn5(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
}
/** rct2: 0x008A8A48 */
static void SuspendedSwingingRCTrackLeftQuarterTurn525DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26097), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26102), { 0, 6, height + 29 }, { 32, 20, 11 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26107), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26112), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 54, session.SupportColours);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_INVERTED_4);
}
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 1:
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26098), { 0, 0, height + 29 }, { 32, 16, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26103), { 0, 0, height + 29 }, { 32, 16, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26108), { 0, 16, height + 29 }, { 32, 16, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26113), { 0, 16, height + 29 }, { 32, 16, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::topRightSide, PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26099), { 0, 16, height + 29 }, { 16, 16, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26104), { 16, 16, height + 29 }, { 16, 16, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26109), { 16, 0, height + 29 }, { 16, 16, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26114), { 0, 0, height + 29 }, { 16, 16, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 80, 0x20);
break;
case 4:
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 5:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26100), { 16, 0, height + 29 }, { 16, 32, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26105), { 0, 0, height + 29 }, { 16, 32, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26110), { 0, 0, height + 29 }, { 16, 32, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26115), { 16, 0, height + 29 },
{ { 16, 0, height + 37 }, { 16, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 6:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26101), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26106), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26111), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26116), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 54, session.SupportColours);
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_INVERTED_5);
break;
case 3:
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_INVERTED_5);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
}
}
/** rct2: 0x008A8A58 */
static void SuspendedSwingingRCTrackRightQuarterTurn525DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26077), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26082), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26087), { 0, 6, height + 29 }, { 32, 20, 11 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26092), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 54, session.SupportColours);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_INVERTED_4);
}
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 1:
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26078), { 0, 16, height + 29 }, { 32, 16, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26083), { 0, 16, height + 29 }, { 32, 16, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26088), { 0, 0, height + 29 }, { 32, 16, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26093), { 0, 0, height + 29 }, { 32, 16, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26079), { 0, 0, height + 29 }, { 16, 16, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26084), { 16, 0, height + 29 }, { 16, 16, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26089), { 16, 16, height + 29 }, { 16, 16, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26094), { 0, 16, height + 29 }, { 16, 16, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 80, 0x20);
break;
case 4:
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 5:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26080), { 16, 0, height + 29 },
{ { 16, 0, height + 37 }, { 16, 32, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26085), { 0, 0, height + 29 }, { 16, 32, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26090), { 0, 0, height + 29 }, { 16, 32, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26095), { 16, 0, height + 29 }, { 16, 32, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 6:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26081), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26086), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26091), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26096), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 54, session.SupportColours);
switch (direction)
{
case 0:
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_INVERTED_5);
break;
case 1:
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_INVERTED_5);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
}
}
/** rct2: 0x008A8A68 */
static void SuspendedSwingingRCTrackLeftQuarterTurn525DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
SuspendedSwingingRCTrackRightQuarterTurn525DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement);
}
/** rct2: 0x008A8A78 */
static void SuspendedSwingingRCTrackRightQuarterTurn525DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
SuspendedSwingingRCTrackLeftQuarterTurn525DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
}
/** rct2: 0x008A8A88 */
static void SuspendedSwingingRCTrackSBendLeft(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26139), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26146), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26142), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26143), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 44, session.SupportColours);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_INVERTED_3);
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26140), { 0, 0, height + 29 }, { 32, 26, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26145), { 0, 0, height + 29 }, { 32, 26, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26141), { 0, 6, height + 29 }, { 32, 26, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26144), { 0, 6, height + 29 }, { 32, 26, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::topRightSide, PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopLeftSide, 0, height + 44,
session.SupportColours);
break;
case 1:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopRightSide, 0, height + 44,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26141), { 0, 6, height + 29 }, { 32, 26, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26144), { 0, 6, height + 29 }, { 32, 26, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26140), { 0, 0, height + 29 }, { 32, 26, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26145), { 0, 0, height + 29 }, { 32, 26, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 2:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopLeftSide, 0, height + 44,
session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopRightSide, 0, height + 44,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26142), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26143), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26139), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26146), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 44, session.SupportColours);
switch (direction)
{
case 1:
PaintUtilPushTunnelRight(session, height, TUNNEL_INVERTED_3);
break;
case 2:
PaintUtilPushTunnelLeft(session, height, TUNNEL_INVERTED_3);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x008A8A98 */
static void SuspendedSwingingRCTrackSBendRight(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26135), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26150), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26138), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26147), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 44, session.SupportColours);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_INVERTED_3);
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26136), { 0, 6, height + 29 }, { 32, 26, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26149), { 0, 6, height + 29 }, { 32, 26, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26137), { 0, 0, height + 29 }, { 32, 26, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26148), { 0, 0, height + 29 }, { 32, 26, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomRightSide, 0, height + 44,
session.SupportColours);
break;
case 1:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomLeftSide, 0, height + 44,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26137), { 0, 0, height + 29 }, { 32, 26, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26148), { 0, 0, height + 29 }, { 32, 26, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26136), { 0, 6, height + 29 }, { 32, 26, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26149), { 0, 6, height + 29 }, { 32, 26, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::topRightSide, PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 2:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomRightSide, 0, height + 44,
session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomLeftSide, 0, height + 44,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26138), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26147), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26135), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26150), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 44, session.SupportColours);
switch (direction)
{
case 1:
PaintUtilPushTunnelRight(session, height, TUNNEL_INVERTED_3);
break;
case 2:
PaintUtilPushTunnelLeft(session, height, TUNNEL_INVERTED_3);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x008A8AD8 */
static void SuspendedSwingingRCTrackLeftQuarterTurn3(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26070), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26073), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26076), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26067), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 44, session.SupportColours);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_INVERTED_3);
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26069), { 0, 0, height + 29 },
{ { 16, 0, height + 29 }, { 16, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26072), { 0, 0, height + 29 }, { 16, 16, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26075), { 0, 0, height + 29 },
{ { 0, 16, height + 29 }, { 16, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26066), { 0, 0, height + 29 },
{ { 16, 16, height + 29 }, { 16, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26068), { 0, 0, height + 29 },
{ { 6, 0, height + 29 }, { 20, 32, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26071), { 0, 0, height + 29 },
{ { 6, 0, height + 29 }, { 20, 32, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26074), { 0, 0, height + 29 },
{ { 6, 0, height + 29 }, { 20, 32, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26065), { 0, 0, height + 29 },
{ { 6, 0, height + 29 }, { 20, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 44, session.SupportColours);
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height, TUNNEL_INVERTED_3);
break;
case 3:
PaintUtilPushTunnelLeft(session, height, TUNNEL_INVERTED_3);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x008A8AE8 */
static void SuspendedSwingingRCTrackRightQuarterTurn3(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
SuspendedSwingingRCTrackLeftQuarterTurn3(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
}
/** rct2: 0x008A8AF8 */
static void SuspendedSwingingRCTrackLeftQuarterTurn325DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26130), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26132), { 0, 6, height + 29 }, { 32, 20, 11 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26134), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26128), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 54, session.SupportColours);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_INVERTED_4);
}
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 1:
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 2:
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26129), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26131), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26133), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26127), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 54, session.SupportColours);
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_INVERTED_5);
break;
case 3:
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_INVERTED_5);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
}
}
/** rct2: 0x008A8B08 */
static void SuspendedSwingingRCTrackRightQuarterTurn325DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26119), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26121), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26123), { 0, 6, height + 29 }, { 32, 20, 11 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26125), { 0, 6, height + 29 }, { 32, 20, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 54, session.SupportColours);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_INVERTED_4);
}
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 1:
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 2:
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26120), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26122), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26124), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26126), { 6, 0, height + 29 }, { 20, 32, 3 });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 54, session.SupportColours);
switch (direction)
{
case 0:
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_INVERTED_5);
break;
case 1:
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_INVERTED_5);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
}
}
/** rct2: 0x008A8B18 */
static void SuspendedSwingingRCTrackLeftQuarterTurn325DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
SuspendedSwingingRCTrackRightQuarterTurn325DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement);
}
/** rct2: 0x008A8B28 */
static void SuspendedSwingingRCTrackRightQuarterTurn325DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
SuspendedSwingingRCTrackLeftQuarterTurn325DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
}
/** rct2: 0x008A8B38 */
static void SuspendedSwingingRCTrackBrakes(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (direction)
{
case 0:
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26117), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 1:
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26118), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
{
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 44, session.SupportColours);
}
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_INVERTED_3);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
}
/** rct2: 0x008A8B48 */
static void SuspendedSwingingRCTrackLeftQuarterHelixLargeUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26054), { 0, 0, height + 29 },
{ { 0, 6, height + 35 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26059), { 0, 0, height + 29 },
{ { 0, 6, height + 35 }, { 32, 20, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26064), { 0, 0, height + 29 },
{ { 0, 6, height + 35 }, { 32, 20, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26049), { 0, 0, height + 29 },
{ { 0, 6, height + 35 }, { 32, 20, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 46, session.SupportColours);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_INVERTED_3);
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26053), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 32, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26058), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 32, 16, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26063), { 0, 0, height + 29 },
{ { 0, 16, height + 43 }, { 32, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26048), { 0, 0, height + 29 },
{ { 0, 16, height + 43 }, { 32, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::topRightSide, PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26052), { 0, 0, height + 29 },
{ { 0, 16, height + 43 }, { 16, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26057), { 0, 0, height + 29 },
{ { 16, 16, height + 43 }, { 16, 16, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26062), { 0, 0, height + 29 },
{ { 16, 0, height + 43 }, { 16, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26047), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 16, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 4:
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 5:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26051), { 0, 0, height + 29 },
{ { 16, 0, height + 43 }, { 16, 32, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26056), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 16, 32, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26061), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 16, 32, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26046), { 0, 0, height + 29 },
{ { 16, 0, height + 43 }, { 16, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 6:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26050), { 0, 0, height + 29 },
{ { 6, 0, height + 43 }, { 20, 32, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26055), { 0, 0, height + 29 },
{ { 6, 0, height + 43 }, { 20, 32, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26060), { 0, 0, height + 29 },
{ { 6, 0, height + 43 }, { 20, 32, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26045), { 0, 0, height + 29 },
{ { 6, 0, height + 43 }, { 20, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 58, session.SupportColours);
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height + 16, TUNNEL_INVERTED_3);
break;
case 3:
PaintUtilPushTunnelLeft(session, height + 16, TUNNEL_INVERTED_3);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x008A8B58 */
static void SuspendedSwingingRCTrackRightQuarterHelixLargeUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26025), { 0, 0, height + 29 },
{ { 0, 6, height + 35 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26030), { 0, 0, height + 29 },
{ { 0, 6, height + 35 }, { 32, 20, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26035), { 0, 0, height + 29 },
{ { 0, 6, height + 35 }, { 32, 20, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26040), { 0, 0, height + 29 },
{ { 0, 6, height + 35 }, { 32, 20, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 46, session.SupportColours);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_INVERTED_3);
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26026), { 0, 0, height + 29 },
{ { 0, 16, height + 43 }, { 32, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26031), { 0, 0, height + 29 },
{ { 0, 16, height + 43 }, { 32, 16, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26036), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 32, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26041), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 32, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26027), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 16, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26032), { 0, 0, height + 29 },
{ { 16, 0, height + 43 }, { 16, 16, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26037), { 0, 0, height + 29 },
{ { 16, 16, height + 43 }, { 16, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26042), { 0, 0, height + 29 },
{ { 0, 16, height + 43 }, { 16, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 4:
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 5:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26028), { 0, 0, height + 29 },
{ { 16, 0, height + 43 }, { 16, 32, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26033), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 16, 32, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26038), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 16, 32, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26043), { 0, 0, height + 29 },
{ { 16, 0, height + 43 }, { 16, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 6:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26029), { 0, 0, height + 29 },
{ { 6, 0, height + 43 }, { 20, 32, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26034), { 0, 0, height + 29 },
{ { 6, 0, height + 43 }, { 20, 32, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26039), { 0, 0, height + 29 },
{ { 6, 0, height + 43 }, { 20, 32, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26044), { 0, 0, height + 29 },
{ { 6, 0, height + 43 }, { 20, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 58, session.SupportColours);
switch (direction)
{
case 0:
PaintUtilPushTunnelRight(session, height + 16, TUNNEL_INVERTED_3);
break;
case 1:
PaintUtilPushTunnelLeft(session, height + 16, TUNNEL_INVERTED_3);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x008A8B68 */
static void SuspendedSwingingRCTrackLeftQuarterHelixLargeDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26034), { 0, 0, height + 29 },
{ { 0, 6, height + 43 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26039), { 0, 0, height + 29 },
{ { 0, 6, height + 43 }, { 32, 20, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26044), { 0, 0, height + 29 },
{ { 0, 6, height + 43 }, { 32, 20, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26029), { 0, 0, height + 29 },
{ { 0, 6, height + 43 }, { 32, 20, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 58, session.SupportColours);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height + 16, TUNNEL_INVERTED_3);
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26033), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 32, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26038), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 32, 16, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26043), { 0, 0, height + 29 },
{ { 0, 16, height + 43 }, { 32, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26028), { 0, 0, height + 29 },
{ { 0, 16, height + 43 }, { 32, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::topRightSide, PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26032), { 0, 0, height + 29 },
{ { 0, 16, height + 43 }, { 16, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26037), { 0, 0, height + 29 },
{ { 16, 16, height + 43 }, { 16, 16, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26042), { 0, 0, height + 29 },
{ { 16, 0, height + 43 }, { 16, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26027), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 16, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 4:
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 5:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26031), { 0, 0, height + 29 },
{ { 16, 0, height + 43 }, { 16, 32, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26036), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 16, 32, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26041), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 16, 32, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26026), { 0, 0, height + 29 },
{ { 16, 0, height + 43 }, { 16, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 6:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26030), { 0, 0, height + 29 },
{ { 6, 0, height + 35 }, { 20, 32, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26035), { 0, 0, height + 29 },
{ { 6, 0, height + 35 }, { 20, 32, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26040), { 0, 0, height + 29 },
{ { 6, 0, height + 35 }, { 20, 32, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26025), { 0, 0, height + 29 },
{ { 6, 0, height + 35 }, { 20, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 46, session.SupportColours);
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height, TUNNEL_INVERTED_3);
break;
case 3:
PaintUtilPushTunnelLeft(session, height, TUNNEL_INVERTED_3);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x008A8B78 */
static void SuspendedSwingingRCTrackRightQuarterHelixLargeDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26045), { 0, 0, height + 29 },
{ { 0, 6, height + 43 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26050), { 0, 0, height + 29 },
{ { 0, 6, height + 43 }, { 32, 20, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26055), { 0, 0, height + 29 },
{ { 0, 6, height + 43 }, { 32, 20, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26060), { 0, 0, height + 29 },
{ { 0, 6, height + 43 }, { 32, 20, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 58, session.SupportColours);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height + 16, TUNNEL_INVERTED_3);
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26046), { 0, 0, height + 29 },
{ { 0, 16, height + 43 }, { 32, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26051), { 0, 0, height + 29 },
{ { 0, 16, height + 43 }, { 32, 16, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26056), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 32, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26061), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 32, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26047), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 16, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26052), { 0, 0, height + 29 },
{ { 16, 0, height + 43 }, { 16, 16, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26057), { 0, 0, height + 29 },
{ { 16, 16, height + 43 }, { 16, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26062), { 0, 0, height + 29 },
{ { 0, 16, height + 43 }, { 16, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 4:
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 5:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26048), { 0, 0, height + 29 },
{ { 16, 0, height + 43 }, { 16, 32, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26053), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 16, 32, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26058), { 0, 0, height + 29 },
{ { 0, 0, height + 43 }, { 16, 32, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26063), { 0, 0, height + 29 },
{ { 16, 0, height + 43 }, { 16, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 6:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26049), { 0, 0, height + 29 },
{ { 6, 0, height + 35 }, { 20, 32, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26054), { 0, 0, height + 29 },
{ { 6, 0, height + 35 }, { 20, 32, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26059), { 0, 0, height + 29 },
{ { 6, 0, height + 35 }, { 20, 32, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26064), { 0, 0, height + 29 },
{ { 6, 0, height + 35 }, { 20, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 46, session.SupportColours);
switch (direction)
{
case 0:
PaintUtilPushTunnelRight(session, height, TUNNEL_INVERTED_3);
break;
case 1:
PaintUtilPushTunnelLeft(session, height, TUNNEL_INVERTED_3);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x008A8B88 */
static void SuspendedSwingingRCTrackLeftEighthToDiag(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26167), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26171), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26175), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26179), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::centre, PaintSegment::topRightSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 44, session.SupportColours);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_INVERTED_3);
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26168), { 0, 0, height + 29 },
{ { 0, 0, height + 29 }, { 32, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26172), { 0, 0, height + 29 },
{ { 0, 0, height + 29 }, { 34, 16, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26176), { 0, 0, height + 29 },
{ { 0, 16, height + 29 }, { 32, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26180), { 0, 0, height + 29 },
{ { 0, 16, height + 29 }, { 32, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::topRightSide, PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26169), { 0, 0, height + 29 },
{ { 0, 16, height + 29 }, { 16, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26173), { 0, 0, height + 29 },
{ { 16, 16, height + 29 }, { 16, 16, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26177), { 0, 0, height + 29 },
{ { 16, 0, height + 29 }, { 16, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26181), { 0, 0, height + 29 },
{ { 0, 0, height + 29 }, { 16, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 4:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26170), { 0, 0, height + 29 },
{ { 16, 16, height + 29 }, { 16, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26174), { 0, 0, height + 29 },
{ { 0, 16, height + 29 }, { 16, 18, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26178), { 0, 0, height + 29 },
{ { 0, 0, height + 29 }, { 16, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26182), { 0, 0, height + 29 },
{ { 16, 0, height + 29 }, { 16, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::topRightSide, PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height + 44,
session.SupportColours);
break;
case 1:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height + 44,
session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height + 44, session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height + 44,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x008A8B98 */
static void SuspendedSwingingRCTrackRightEighthToDiag(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26151), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26155), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26159), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26163), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 44, session.SupportColours);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_INVERTED_3);
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26152), { 0, 0, height + 29 },
{ { 0, 16, height + 29 }, { 32, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26156), { 0, 0, height + 29 },
{ { 0, 16, height + 29 }, { 32, 16, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26160), { 0, 0, height + 29 },
{ { 0, 0, height + 29 }, { 34, 16, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26164), { 0, 0, height + 29 },
{ { 0, 0, height + 29 }, { 32, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26153), { 0, 0, height + 29 },
{ { 0, 0, height + 29 }, { 16, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26157), { 0, 0, height + 29 },
{ { 16, 0, height + 29 }, { 16, 16, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26161), { 0, 0, height + 29 },
{ { 4, 4, height + 29 }, { 28, 28, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26165), { 0, 0, height + 29 },
{ { 0, 16, height + 29 }, { 16, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 4:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26154), { 0, 0, height + 29 },
{ { 16, 0, height + 29 }, { 16, 16, 3 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26158), { 0, 0, height + 29 },
{ { 0, 0, height + 29 }, { 16, 16, 3 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26162), { 0, 0, height + 29 },
{ { 0, 16, height + 29 }, { 16, 18, 3 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26166), { 0, 0, height + 29 },
{ { 16, 16, height + 29 }, { 16, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::topRightSide, PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height + 44,
session.SupportColours);
break;
case 1:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height + 44, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height + 44,
session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height + 44,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x008A8BA8 */
static void SuspendedSwingingRCTrackLeftEighthToOrthogonal(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
SuspendedSwingingRCTrackRightEighthToDiag(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x008A8BB8 */
static void SuspendedSwingingRCTrackRightEighthToOrthogonal(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
SuspendedSwingingRCTrackLeftEighthToDiag(session, ride, trackSequence, (direction + 3) & 3, height, trackElement);
}
/** rct2: 0x008A8BC8 */
static void SuspendedSwingingRCTrackDiagFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
const auto* images = kSuspendedSwingingRCDiagFlatImages[trackElement.HasChain()];
TrackPaintUtilDiagTilesPaint(
session, 3, height + 29, direction, trackSequence, images, defaultDiagTileOffsets, defaultDiagBoundLengths, nullptr);
PaintUtilSetSegmentSupportHeight(
session, PaintUtilRotateSegments(BlockedSegments::kDiagStraightFlat[trackSequence], direction), 0xFFFF, 0);
if (trackSequence == 3)
MetalASupportsPaintSetupRotated(
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, direction, 0, height + 44, session.SupportColours);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
}
/** rct2: 0x008A8BF8 */
static void SuspendedSwingingRCTrackDiag25DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26226), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26198), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26223), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26195), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26225), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26197), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26224), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26196), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height + 56,
session.SupportColours);
break;
case 1:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height + 56, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height + 56,
session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height + 56,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
}
}
/** rct2: 0x008A8C58 */
static void SuspendedSwingingRCTrackDiag60DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26210), { -16, -16, height + 29 },
{ { -16, -16, height + 93 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 120, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26207), { -16, -16, height + 29 },
{ { -16, -16, height + 93 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 120, 0x20);
break;
case 2:
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26209), { -16, -16, height + 29 },
{ { -16, -16, height + 93 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 120, 0x20);
break;
case 3:
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26208), { -16, -16, height + 29 },
{ { -16, -16, height + 29 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 32, height + 44,
session.SupportColours);
break;
case 1:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 36, height + 44,
session.SupportColours);
break;
case 2:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 32, height + 44,
session.SupportColours);
break;
case 3:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 36, height + 44,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 120, 0x20);
break;
}
}
/** rct2: 0x008A8BD8 */
static void SuspendedSwingingRCTrackDiagFlatTo25DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26218), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26190), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26215), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26187), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26217), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26189), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26216), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26188), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height + 48,
session.SupportColours);
break;
case 1:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height + 48, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height + 48,
session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height + 48,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
break;
}
}
/** rct2: 0x008A8C38 */
static void SuspendedSwingingRCTrackDiag25DegUpTo60DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26202), { -16, -16, height + 29 },
{ { -16, -16, height + 61 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26199), { -16, -16, height + 29 },
{ { -16, -16, height + 61 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 2:
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26201), { -16, -16, height + 29 },
{ { -16, -16, height + 61 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 3:
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26200), { -16, -16, height + 29 },
{ { -16, -16, height + 61 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 16, height + 44,
session.SupportColours);
break;
case 1:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 16, height + 44,
session.SupportColours);
break;
case 2:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 16, height + 44,
session.SupportColours);
break;
case 3:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 16, height + 44,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
}
}
/** rct2: 0x008A8C48 */
static void SuspendedSwingingRCTrackDiag60DegUpTo25DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26206), { -16, -16, height + 29 },
{ { -16, -16, height + 61 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26203), { -16, -16, height + 29 },
{ { -16, -16, height + 61 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 2:
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26205), { -16, -16, height + 29 },
{ { -16, -16, height + 61 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 3:
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26204), { -16, -16, height + 29 },
{ { 0, 0, height + 61 }, { 16, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 21, height + 44,
session.SupportColours);
break;
case 1:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 21, height + 44,
session.SupportColours);
break;
case 2:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 21, height + 44,
session.SupportColours);
break;
case 3:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 21, height + 44,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
}
}
/** rct2: 0x008A8BE8 */
static void SuspendedSwingingRCTrackDiag25DegUpToFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26222), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26194), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26219), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26191), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26221), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26193), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26220), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26192), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height + 50,
session.SupportColours);
break;
case 1:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height + 50, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height + 50,
session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height + 50,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
}
}
/** rct2: 0x008A8C28 */
static void SuspendedSwingingRCTrackDiag25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26224), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26196), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26225), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26197), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26223), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26195), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26226), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26198), { -16, -16, height + 29 },
{ { -16, -16, height + 45 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height + 56,
session.SupportColours);
break;
case 1:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height + 56, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height + 56,
session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height + 56,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
}
}
/** rct2: 0x008A8C88 */
static void SuspendedSwingingRCTrackDiag60DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26208), { -16, -16, height + 29 },
{ { -16, -16, height + 29 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 120, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26209), { -16, -16, height + 29 },
{ { -16, -16, height + 93 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 120, 0x20);
break;
case 2:
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26207), { -16, -16, height + 29 },
{ { -16, -16, height + 93 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 120, 0x20);
break;
case 3:
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26210), { -16, -16, height + 29 },
{ { -16, -16, height + 93 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 120, 0x20);
break;
}
}
/** rct2: 0x008A8C08 */
static void SuspendedSwingingRCTrackDiagFlatTo25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26220), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26192), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26221), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26193), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26219), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26191), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26222), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26194), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height + 50,
session.SupportColours);
break;
case 1:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height + 50, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height + 50,
session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height + 50,
session.SupportColours);
break;
}
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
}
/** rct2: 0x008A8C68 */
static void SuspendedSwingingRCTrackDiag25DegDownTo60DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26204), { -16, -16, height + 29 },
{ { 0, 0, height + 61 }, { 16, 16, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26205), { -16, -16, height + 29 },
{ { -16, -16, height + 61 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 2:
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26203), { -16, -16, height + 29 },
{ { -16, -16, height + 61 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 3:
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26206), { -16, -16, height + 29 },
{ { -16, -16, height + 61 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 17, height + 44,
session.SupportColours);
break;
case 1:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 17, height + 44,
session.SupportColours);
break;
case 2:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 17, height + 44,
session.SupportColours);
break;
case 3:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 17, height + 44,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
}
}
/** rct2: 0x008A8C78 */
static void SuspendedSwingingRCTrackDiag60DegDownTo25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26200), { -16, -16, height + 29 },
{ { -16, -16, height + 61 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26201), { -16, -16, height + 29 },
{ { -16, -16, height + 61 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 2:
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26199), { -16, -16, height + 29 },
{ { -16, -16, height + 61 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
case 3:
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26202), { -16, -16, height + 29 },
{ { -16, -16, height + 61 }, { 32, 32, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 8, height + 44,
session.SupportColours);
break;
case 1:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 8, height + 44, session.SupportColours);
break;
case 2:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 8, height + 44,
session.SupportColours);
break;
case 3:
MetalBSupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 8, height + 44,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 88, 0x20);
break;
}
}
/** rct2: 0x008A8C18 */
static void SuspendedSwingingRCTrackDiag25DegDownToFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (trackElement.HasChain())
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26216), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26188), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
break;
case 1:
if (trackElement.HasChain())
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26217), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26189), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
break;
case 2:
if (trackElement.HasChain())
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26215), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26187), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
break;
case 3:
if (trackElement.HasChain())
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26218), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
else
{
switch (direction)
{
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26190), { -16, -16, height + 29 },
{ { -16, -16, height + 37 }, { 32, 32, 3 } });
break;
}
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
switch (direction)
{
case 0:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height + 48,
session.SupportColours);
break;
case 1:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height + 48, session.SupportColours);
break;
case 2:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height + 48,
session.SupportColours);
break;
case 3:
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height + 48,
session.SupportColours);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
break;
}
}
/** rct2: 0x008A8B38 */
static void SuspendedSwingingRCTrackBlockBrakes(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (direction)
{
case 0:
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26117), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
case 1:
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(26118), { 0, 0, height + 29 },
{ { 0, 6, height + 29 }, { 32, 20, 3 } });
break;
}
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
{
MetalASupportsPaintSetup(
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height + 44, session.SupportColours);
}
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_INVERTED_3);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
}
TRACK_PAINT_FUNCTION GetTrackPaintFunctionSuspendedSwingingRC(int32_t trackType)
{
switch (trackType)
{
case TrackElemType::Flat:
return SuspendedSwingingRCTrackFlat;
case TrackElemType::EndStation:
case TrackElemType::BeginStation:
case TrackElemType::MiddleStation:
return SuspendedSwingingRCTrackStation;
case TrackElemType::Up25:
return SuspendedSwingingRCTrack25DegUp;
case TrackElemType::Up60:
return SuspendedSwingingRCTrack60DegUp;
case TrackElemType::FlatToUp25:
return SuspendedSwingingRCTrackFlatTo25DegUp;
case TrackElemType::Up25ToUp60:
return SuspendedSwingingRCTrack25DegUpTo60DegUp;
case TrackElemType::Up60ToUp25:
return SuspendedSwingingRCTrack60DegUpTo25DegUp;
case TrackElemType::Up25ToFlat:
return SuspendedSwingingRCTrack25DegUpToFlat;
case TrackElemType::Down25:
return SuspendedSwingingRCTrack25DegDown;
case TrackElemType::Down60:
return SuspendedSwingingRCTrack60DegDown;
case TrackElemType::FlatToDown25:
return SuspendedSwingingRCTrackFlatTo25DegDown;
case TrackElemType::Down25ToDown60:
return SuspendedSwingingRCTrack25DegDownTo60DegDown;
case TrackElemType::Down60ToDown25:
return SuspendedSwingingRCTrack60DegDownTo25DegDown;
case TrackElemType::Down25ToFlat:
return SuspendedSwingingRCTrack25DegDownToFlat;
case TrackElemType::LeftQuarterTurn5Tiles:
return SuspendedSwingingRCTrackLeftQuarterTurn5;
case TrackElemType::RightQuarterTurn5Tiles:
return SuspendedSwingingRCTrackRightQuarterTurn5;
case TrackElemType::LeftQuarterTurn5TilesUp25:
return SuspendedSwingingRCTrackLeftQuarterTurn525DegUp;
case TrackElemType::RightQuarterTurn5TilesUp25:
return SuspendedSwingingRCTrackRightQuarterTurn525DegUp;
case TrackElemType::LeftQuarterTurn5TilesDown25:
return SuspendedSwingingRCTrackLeftQuarterTurn525DegDown;
case TrackElemType::RightQuarterTurn5TilesDown25:
return SuspendedSwingingRCTrackRightQuarterTurn525DegDown;
case TrackElemType::SBendLeft:
return SuspendedSwingingRCTrackSBendLeft;
case TrackElemType::SBendRight:
return SuspendedSwingingRCTrackSBendRight;
case TrackElemType::LeftQuarterTurn3Tiles:
return SuspendedSwingingRCTrackLeftQuarterTurn3;
case TrackElemType::RightQuarterTurn3Tiles:
return SuspendedSwingingRCTrackRightQuarterTurn3;
case TrackElemType::LeftQuarterTurn3TilesUp25:
return SuspendedSwingingRCTrackLeftQuarterTurn325DegUp;
case TrackElemType::RightQuarterTurn3TilesUp25:
return SuspendedSwingingRCTrackRightQuarterTurn325DegUp;
case TrackElemType::LeftQuarterTurn3TilesDown25:
return SuspendedSwingingRCTrackLeftQuarterTurn325DegDown;
case TrackElemType::RightQuarterTurn3TilesDown25:
return SuspendedSwingingRCTrackRightQuarterTurn325DegDown;
case TrackElemType::Brakes:
return SuspendedSwingingRCTrackBrakes;
case TrackElemType::LeftQuarterHelixLargeUp:
return SuspendedSwingingRCTrackLeftQuarterHelixLargeUp;
case TrackElemType::RightQuarterHelixLargeUp:
return SuspendedSwingingRCTrackRightQuarterHelixLargeUp;
case TrackElemType::LeftQuarterHelixLargeDown:
return SuspendedSwingingRCTrackLeftQuarterHelixLargeDown;
case TrackElemType::RightQuarterHelixLargeDown:
return SuspendedSwingingRCTrackRightQuarterHelixLargeDown;
case TrackElemType::LeftEighthToDiag:
return SuspendedSwingingRCTrackLeftEighthToDiag;
case TrackElemType::RightEighthToDiag:
return SuspendedSwingingRCTrackRightEighthToDiag;
case TrackElemType::LeftEighthToOrthogonal:
return SuspendedSwingingRCTrackLeftEighthToOrthogonal;
case TrackElemType::RightEighthToOrthogonal:
return SuspendedSwingingRCTrackRightEighthToOrthogonal;
case TrackElemType::DiagFlat:
return SuspendedSwingingRCTrackDiagFlat;
case TrackElemType::DiagUp25:
return SuspendedSwingingRCTrackDiag25DegUp;
case TrackElemType::DiagUp60:
return SuspendedSwingingRCTrackDiag60DegUp;
case TrackElemType::DiagFlatToUp25:
return SuspendedSwingingRCTrackDiagFlatTo25DegUp;
case TrackElemType::DiagUp25ToUp60:
return SuspendedSwingingRCTrackDiag25DegUpTo60DegUp;
case TrackElemType::DiagUp60ToUp25:
return SuspendedSwingingRCTrackDiag60DegUpTo25DegUp;
case TrackElemType::DiagUp25ToFlat:
return SuspendedSwingingRCTrackDiag25DegUpToFlat;
case TrackElemType::DiagDown25:
return SuspendedSwingingRCTrackDiag25DegDown;
case TrackElemType::DiagDown60:
return SuspendedSwingingRCTrackDiag60DegDown;
case TrackElemType::DiagFlatToDown25:
return SuspendedSwingingRCTrackDiagFlatTo25DegDown;
case TrackElemType::DiagDown25ToDown60:
return SuspendedSwingingRCTrackDiag25DegDownTo60DegDown;
case TrackElemType::DiagDown60ToDown25:
return SuspendedSwingingRCTrackDiag60DegDownTo25DegDown;
case TrackElemType::DiagDown25ToFlat:
return SuspendedSwingingRCTrackDiag25DegDownToFlat;
case TrackElemType::BlockBrakes:
return SuspendedSwingingRCTrackBlockBrakes;
}
return nullptr;
}