mirror of https://github.com/OpenRCT2/OpenRCT2.git
11098 lines
487 KiB
C++
11098 lines
487 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 auto SPR_LOOPING_RC_BOOSTER_NE_SW = 15010;
|
|
static constexpr auto SPR_LOOPING_RC_BOOSTER_NW_SE = 15011;
|
|
|
|
static constexpr auto SPR_LOOPING_RC_FLAT_CHAINED_SW_NE = 15016;
|
|
static constexpr auto SPR_LOOPING_RC_FLAT_CHAINED_NW_SE = 15017;
|
|
|
|
static constexpr const uint32_t LoopingRCDiagBrakeImages[2 * NumOrthogonalDirections] = {
|
|
SPR_G2_LOOPING_DIAG_BRAKES, SPR_G2_LOOPING_DIAG_BRAKES + 2, SPR_G2_LOOPING_DIAG_BRAKES,
|
|
SPR_G2_LOOPING_DIAG_BRAKES + 2, SPR_G2_LOOPING_DIAG_BRAKES + 1, SPR_G2_LOOPING_DIAG_BRAKES + 3,
|
|
SPR_G2_LOOPING_DIAG_BRAKES + 1, SPR_G2_LOOPING_DIAG_BRAKES + 3,
|
|
};
|
|
|
|
/** rct2: 0x008A6370 */
|
|
static void LoopingRCTrackFlat(
|
|
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(15006), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15007), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15008), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15009), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15004), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15005), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
}
|
|
}
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
}
|
|
|
|
static void LoopingRCTrackStation(
|
|
PaintSession& session, const Ride& ride, [[maybe_unused]] uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
static constexpr uint32_t imageIdsFrictionWheels[4][2] = {
|
|
{ SPR_LOOPING_RC_BOOSTER_NE_SW, SPR_STATION_BASE_B_SW_NE },
|
|
{ SPR_LOOPING_RC_BOOSTER_NW_SE, SPR_STATION_BASE_B_NW_SE },
|
|
{ SPR_LOOPING_RC_BOOSTER_NE_SW, SPR_STATION_BASE_B_SW_NE },
|
|
{ SPR_LOOPING_RC_BOOSTER_NW_SE, SPR_STATION_BASE_B_NW_SE },
|
|
};
|
|
static constexpr uint32_t imageIdsShuttleLaunch[4][2] = {
|
|
{ SPR_LOOPING_RC_FLAT_CHAINED_SW_NE, SPR_STATION_BASE_B_SW_NE },
|
|
{ SPR_LOOPING_RC_FLAT_CHAINED_NW_SE, SPR_STATION_BASE_B_NW_SE },
|
|
{ SPR_LOOPING_RC_FLAT_CHAINED_SW_NE, SPR_STATION_BASE_B_SW_NE },
|
|
{ SPR_LOOPING_RC_FLAT_CHAINED_NW_SE, SPR_STATION_BASE_B_NW_SE },
|
|
};
|
|
const auto& imageIds = IsCsgLoaded() ? imageIdsFrictionWheels : imageIdsShuttleLaunch;
|
|
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(imageIds[direction][0]), { 0, 0, height },
|
|
{ { 0, 6, height + 3 }, { 32, 20, 1 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, GetStationColourScheme(session, trackElement).WithIndex(imageIds[direction][1]), { 0, 0, height },
|
|
{ 32, 32, 1 });
|
|
DrawSupportsSideBySide(session, direction, height, session.SupportColours, MetalSupportType::Tubes);
|
|
TrackPaintUtilDrawStation(session, ride, direction, height, trackElement);
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
|
|
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6380 */
|
|
static void LoopingRCTrack25DegUp(
|
|
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(15060), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15061), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15062), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15063), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15032), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15033), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15034), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15035), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
}
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6390 */
|
|
static void LoopingRCTrack60DegUp(
|
|
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(15076), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15077), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 98 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15078), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 98 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15079), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 32, height, session.SupportColours);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15048), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15049), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 98 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15050), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 98 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15051), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 32, height, session.SupportColours);
|
|
}
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 56, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A63A0 */
|
|
static void LoopingRCTrackFlatTo25DegUp(
|
|
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(15052), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15053), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15054), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15055), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 3, height, session.SupportColours);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15024), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15025), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15026), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15027), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 3, height, session.SupportColours);
|
|
}
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A63B0 */
|
|
static void LoopingRCTrack25DegUpTo60DegUp(
|
|
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(15064), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15065), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15068), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 66 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15066), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15069), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 66 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15067), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 12, height, session.SupportColours);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15036), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15037), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15040), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 66 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15038), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15041), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 66 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15039), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 12, height, session.SupportColours);
|
|
}
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 24, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A63C0 */
|
|
static void LoopingRCTrack60DegUpTo25DegUp(
|
|
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(15070), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15071), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15074), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 66 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15072), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15075), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 66 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15073), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 20, height, session.SupportColours);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15042), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15043), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15046), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 66 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15044), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15047), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 66 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15045), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 20, height, session.SupportColours);
|
|
}
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 24, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A63D0 */
|
|
static void LoopingRCTrack25DegUpToFlat(
|
|
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(15056), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15057), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15058), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15059), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15028), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15029), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15030), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15031), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours);
|
|
}
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_0);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_12);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A63E0 */
|
|
static void LoopingRCTrack25DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrack25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A63F0 */
|
|
static void LoopingRCTrack60DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrack60DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6400 */
|
|
static void LoopingRCTrackFlatTo25DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrack25DegUpToFlat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6410 */
|
|
static void LoopingRCTrack25DegDownTo60DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrack60DegUpTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6420 */
|
|
static void LoopingRCTrack60DegDownTo25DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrack25DegUpTo60DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6430 */
|
|
static void LoopingRCTrack25DegDownToFlat(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackFlatTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6440 */
|
|
static void LoopingRCTrackLeftQuarterTurn5(
|
|
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(15183), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15188), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15193), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15178), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15182), { 0, 0, height },
|
|
{ { 0, 0, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15187), { 0, 0, height },
|
|
{ { 0, 0, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15192), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15177), { 0, 0, height },
|
|
{ { 0, 16, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15181), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15186), { 0, 0, height },
|
|
{ { 16, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15191), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15176), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 4:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 5:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15180), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15185), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15190), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15175), { 0, 0, height },
|
|
{ { 16, 0, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 6:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15179), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15184), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15189), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15174), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintUtilPushTunnelRight(session, height, TUNNEL_0);
|
|
break;
|
|
case 3:
|
|
PaintUtilPushTunnelLeft(session, height, TUNNEL_0);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6450 */
|
|
static void LoopingRCTrackRightQuarterTurn5(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
|
|
LoopingRCTrackLeftQuarterTurn5(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6460 */
|
|
static void LoopingRCTrackFlatToLeftBank(
|
|
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(15080), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15092), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15081), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15093), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15082), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15083), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
}
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6470 */
|
|
static void LoopingRCTrackFlatToRightBank(
|
|
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(15084), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15085), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15086), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15094), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15087), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15095), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
}
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6480 */
|
|
static void LoopingRCTrackLeftBankToFlat(
|
|
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(15086), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15094), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15087), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15095), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15084), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15085), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
}
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6490 */
|
|
static void LoopingRCTrackRightBankToFlat(
|
|
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(15082), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15083), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15080), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15092), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15081), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15093), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
}
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A64A0 */
|
|
static void LoopingRCTrackBankedLeftQuarterTurn5(
|
|
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(15203), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15214), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15208), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15213), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15198), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15202), { 0, 0, height },
|
|
{ { 0, 0, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15207), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 32, 16, 1 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15212), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15197), { 0, 0, height },
|
|
{ { 0, 16, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15201), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15206), { 0, 0, height },
|
|
{ { 16, 16, height + 27 }, { 16, 16, 1 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15211), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15196), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 4:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 5:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15200), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15205), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 16, 32, 1 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15210), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15195), { 0, 0, height },
|
|
{ { 16, 0, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 6:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15199), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15204), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15209), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15215), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15194), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintUtilPushTunnelRight(session, height, TUNNEL_0);
|
|
break;
|
|
case 3:
|
|
PaintUtilPushTunnelLeft(session, height, TUNNEL_0);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A64B0 */
|
|
static void LoopingRCTrackBankedRightQuarterTurn5(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
|
|
LoopingRCTrackBankedLeftQuarterTurn5(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A64C0 */
|
|
static void LoopingRCTrackLeftBankTo25DegUp(
|
|
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(15096), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15112), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15097), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15113), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15098), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15099), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 3, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A64D0 */
|
|
static void LoopingRCTrackRightBankTo25DegUp(
|
|
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(15100), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15101), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15102), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15114), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15103), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15115), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 3, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A64E0 */
|
|
static void LoopingRCTrack25DegUpToLeftBank(
|
|
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(15104), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15116), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15105), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15117), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15106), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15107), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_0);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_12);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A64F0 */
|
|
static void LoopingRCTrack25DegUpToRightBank(
|
|
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(15108), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15109), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15110), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15118), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15111), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15119), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_0);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_12);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6500 */
|
|
static void LoopingRCTrackLeftBankTo25DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrack25DegUpToRightBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6510 */
|
|
static void LoopingRCTrackRightBankTo25DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrack25DegUpToLeftBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6520 */
|
|
static void LoopingRCTrack25DegDownToLeftBank(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackRightBankTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6530 */
|
|
static void LoopingRCTrack25DegDownToRightBank(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackLeftBankTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6540 */
|
|
static void LoopingRCTrackLeftBank(
|
|
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(15088), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15089), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15090), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15091), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
}
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6550 */
|
|
static void LoopingRCTrackRightBank(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackLeftBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6560 */
|
|
static void LoopingRCTrackLeftQuarterTurn525DegUp(
|
|
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(15296), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15301), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15306), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15311), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15297), { 0, 0, height }, { 32, 16, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15302), { 0, 0, height }, { 32, 16, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15307), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15312), { 0, 0, height },
|
|
{ { 0, 16, height }, { 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 + 72, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15298), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15303), { 0, 0, height },
|
|
{ { 16, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15308), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15313), { 0, 0, height }, { 16, 16, 3 });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
|
|
break;
|
|
case 4:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 5:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15299), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15304), { 0, 0, height }, { 16, 32, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15309), { 0, 0, height }, { 16, 32, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15314), { 0, 0, height },
|
|
{ { 16, 0, height }, { 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 + 72, 0x20);
|
|
break;
|
|
case 6:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15300), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15305), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15310), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15315), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_2);
|
|
break;
|
|
case 3:
|
|
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_2);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6570 */
|
|
static void LoopingRCTrackRightQuarterTurn525DegUp(
|
|
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(15276), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15281), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15286), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15291), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15277), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15282), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15287), { 0, 0, height }, { 32, 16, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15292), { 0, 0, height }, { 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 + 72, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15278), { 0, 0, height }, { 16, 16, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15283), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15288), { 0, 0, height },
|
|
{ { 16, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15293), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
|
|
break;
|
|
case 4:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 5:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15279), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15284), { 0, 0, height }, { 16, 32, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15289), { 0, 0, height }, { 16, 32, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15294), { 0, 0, height },
|
|
{ { 16, 0, height }, { 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 + 72, 0x20);
|
|
break;
|
|
case 6:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15280), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15285), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15290), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15295), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_2);
|
|
break;
|
|
case 1:
|
|
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_2);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6580 */
|
|
static void LoopingRCTrackLeftQuarterTurn525DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
|
|
LoopingRCTrackRightQuarterTurn525DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6590 */
|
|
static void LoopingRCTrackRightQuarterTurn525DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
|
|
LoopingRCTrackLeftQuarterTurn525DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A65A0 */
|
|
static void LoopingRCTrackSBendLeft(
|
|
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(15260), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15264), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15263), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15267), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15261), { 0, 0, height }, { 32, 26, 3 });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopLeftSide, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15265), { 0, 0, height }, { 32, 26, 3 });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopRightSide, 1, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15262), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 26, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15266), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 26, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::topRightSide, PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15262), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 26, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15266), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 26, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15261), { 0, 0, height }, { 32, 26, 3 });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopLeftSide, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15265), { 0, 0, height }, { 32, 26, 3 });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopRightSide, 1, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15263), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15267), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15260), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15264), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 1:
|
|
PaintUtilPushTunnelRight(session, height, TUNNEL_0);
|
|
break;
|
|
case 2:
|
|
PaintUtilPushTunnelLeft(session, height, TUNNEL_0);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A65B0 */
|
|
static void LoopingRCTrackSBendRight(
|
|
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(15268), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15272), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15271), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15275), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15269), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 26, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomRightSide, 0, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15273), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 26, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomLeftSide, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15270), { 0, 0, height }, { 32, 26, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15274), { 0, 0, height }, { 32, 26, 3 });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15270), { 0, 0, height }, { 32, 26, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15274), { 0, 0, height }, { 32, 26, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15269), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 26, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomRightSide, 0, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15273), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 26, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomLeftSide, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::topRightSide, PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15271), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15275), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15268), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15272), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 1:
|
|
PaintUtilPushTunnelRight(session, height, TUNNEL_0);
|
|
break;
|
|
case 2:
|
|
PaintUtilPushTunnelLeft(session, height, TUNNEL_0);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A65C0 */
|
|
static void LoopingRCTrackLeftVerticalLoop(
|
|
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(15348), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15356), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15355), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15363), { 0, 6, height }, { 32, 20, 7 });
|
|
break;
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::topRightSide, PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15349), { 0, 0, height }, { 32, 26, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15357), { 0, 14, height }, { 32, 2, 63 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15354), { 0, 6, height }, { 32, 26, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15362), { 0, 6, height }, { 32, 26, 3 });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::topRightSide, PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15350), { 16, 0, height },
|
|
{ { 16, 0, height }, { 3, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::ThickCentred, MetalSupportPlace::LeftCorner, 0, height - 8,
|
|
session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15364), { 16, 0, height },
|
|
{ { 16, 0, height }, { 3, 16, 119 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15358), { 12, 0, height },
|
|
{ { 12, 0, height }, { 3, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::ThickAltCentred, MetalSupportPlace::TopCorner, 0, height - 8,
|
|
session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15366), { 12, 0, height },
|
|
{ { 12, 0, height }, { 3, 16, 119 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15353), { 10, 16, height },
|
|
{ { 10, 16, height }, { 4, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Thick, MetalSupportPlace::RightCorner, 0, height - 8, session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15365), { 10, 16, height },
|
|
{ { 10, 16, height }, { 4, 16, 119 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15361), { 16, 16, height },
|
|
{ { 16, 16, height }, { 2, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::ThickAlt, MetalSupportPlace::BottomCorner, 0, height - 8,
|
|
session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15367), { 16, 16, height },
|
|
{ { 16, 16, height }, { 2, 16, 119 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 168, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15351), { 0, 0, height + 32 }, { 32, 16, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15359), { 0, 0, height + 32 }, { 32, 16, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15352), { 0, 16, height + 32 }, { 32, 16, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15360), { 0, 16, height + 32 }, { 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 4:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 5:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 6:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15352), { 0, 16, height + 32 }, { 32, 16, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15360), { 0, 16, height + 32 }, { 32, 16, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15351), { 0, 0, height + 32 }, { 32, 16, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15359), { 0, 0, height + 32 }, { 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 7:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15353), { 10, 16, height },
|
|
{ { 10, 16, height }, { 4, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Thick, MetalSupportPlace::RightCorner, 0, height - 8, session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15365), { 10, 16, height },
|
|
{ { 10, 16, height }, { 4, 16, 119 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15361), { 16, 16, height },
|
|
{ { 16, 16, height }, { 2, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::ThickAlt, MetalSupportPlace::BottomCorner, 0, height - 8,
|
|
session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15367), { 16, 16, height },
|
|
{ { 16, 16, height }, { 2, 16, 119 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15350), { 16, 0, height },
|
|
{ { 16, 0, height }, { 3, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::ThickCentred, MetalSupportPlace::LeftCorner, 0, height - 8,
|
|
session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15364), { 16, 0, height },
|
|
{ { 16, 0, height }, { 3, 16, 119 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15358), { 12, 0, height },
|
|
{ { 12, 0, height }, { 3, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::ThickAltCentred, MetalSupportPlace::TopCorner, 0, height - 8,
|
|
session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15366), { 12, 0, height },
|
|
{ { 12, 0, height }, { 3, 16, 119 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 168, 0x20);
|
|
break;
|
|
case 8:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15354), { 0, 6, height }, { 32, 26, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15362), { 0, 6, height }, { 32, 26, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15349), { 0, 0, height }, { 32, 26, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15357), { 0, 14, height }, { 32, 2, 63 });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 9:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15355), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15363), { 0, 6, height }, { 32, 20, 7 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15348), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15356), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
}
|
|
switch (direction)
|
|
{
|
|
case 1:
|
|
PaintUtilPushTunnelRight(session, height - 8, TUNNEL_1);
|
|
break;
|
|
case 2:
|
|
PaintUtilPushTunnelLeft(session, height - 8, TUNNEL_1);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A65D0 */
|
|
static void LoopingRCTrackRightVerticalLoop(
|
|
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(15383), { 0, 6, height }, { 32, 20, 7 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15375), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15376), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15368), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15382), { 0, 6, height }, { 32, 26, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15374), { 0, 6, height }, { 32, 26, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15377), { 0, 14, height }, { 32, 2, 63 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15369), { 0, 0, height }, { 32, 26, 3 });
|
|
break;
|
|
}
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15381), { 16, 16, height },
|
|
{ { 16, 16, height }, { 2, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Thick, MetalSupportPlace::BottomCorner, 0, height - 8, session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15384), { 16, 16, height },
|
|
{ { 16, 16, height }, { 2, 16, 119 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15373), { 10, 16, height },
|
|
{ { 10, 16, height }, { 4, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::ThickAlt, MetalSupportPlace::LeftCorner, 0, height - 8,
|
|
session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15386), { 10, 16, height },
|
|
{ { 10, 16, height }, { 4, 16, 119 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15378), { 12, 0, height },
|
|
{ { 12, 0, height }, { 3, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::ThickCentred, MetalSupportPlace::TopCorner, 0, height - 8,
|
|
session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15385), { 12, 0, height },
|
|
{ { 12, 0, height }, { 3, 16, 119 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15370), { 16, 0, height },
|
|
{ { 16, 0, height }, { 2, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::ThickAltCentred, MetalSupportPlace::RightCorner, 0, height - 8,
|
|
session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15387), { 16, 0, height },
|
|
{ { 16, 0, height }, { 2, 16, 119 } });
|
|
break;
|
|
}
|
|
PaintUtilSetGeneralSupportHeight(session, height + 168, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15380), { 0, 16, height + 32 }, { 32, 16, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15372), { 0, 16, height + 32 }, { 32, 16, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15379), { 0, 0, height + 32 }, { 32, 16, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15371), { 0, 0, height + 32 }, { 32, 16, 3 });
|
|
break;
|
|
}
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 4:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 5:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 6:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15379), { 0, 0, height + 32 }, { 32, 16, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15371), { 0, 0, height + 32 }, { 32, 16, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15380), { 0, 16, height + 32 }, { 32, 16, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15372), { 0, 16, height + 32 }, { 32, 16, 3 });
|
|
break;
|
|
}
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 7:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15378), { 12, 0, height },
|
|
{ { 12, 0, height }, { 3, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::ThickCentred, MetalSupportPlace::TopCorner, 0, height - 8,
|
|
session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15385), { 12, 0, height },
|
|
{ { 12, 0, height }, { 3, 16, 119 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15370), { 16, 0, height },
|
|
{ { 16, 0, height }, { 2, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::ThickAltCentred, MetalSupportPlace::RightCorner, 0, height - 8,
|
|
session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15387), { 16, 0, height },
|
|
{ { 16, 0, height }, { 2, 16, 119 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15381), { 16, 16, height },
|
|
{ { 16, 16, height }, { 2, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Thick, MetalSupportPlace::BottomCorner, 0, height - 8, session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15384), { 16, 16, height },
|
|
{ { 16, 16, height }, { 2, 16, 119 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15373), { 10, 16, height },
|
|
{ { 10, 16, height }, { 4, 16, 119 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::ThickAlt, MetalSupportPlace::LeftCorner, 0, height - 8,
|
|
session.TrackColours);
|
|
PaintAddImageAsChildRotated(
|
|
session, direction, session.TrackColours.WithIndex(15386), { 10, 16, height },
|
|
{ { 10, 16, height }, { 4, 16, 119 } });
|
|
break;
|
|
}
|
|
PaintUtilSetGeneralSupportHeight(session, height + 168, 0x20);
|
|
break;
|
|
case 8:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15377), { 0, 14, height }, { 32, 2, 63 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15369), { 0, 0, height }, { 32, 26, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15382), { 0, 6, height }, { 32, 26, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15374), { 0, 6, height }, { 32, 26, 3 });
|
|
break;
|
|
}
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 9:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15376), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15368), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15383), { 0, 6, height }, { 32, 20, 7 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15375), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
}
|
|
switch (direction)
|
|
{
|
|
case 1:
|
|
PaintUtilPushTunnelRight(session, height - 8, TUNNEL_1);
|
|
break;
|
|
case 2:
|
|
PaintUtilPushTunnelLeft(session, height - 8, TUNNEL_1);
|
|
break;
|
|
}
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
}
|
|
|
|
TrackPaintUtilRightVerticalLoopSegments(session, direction, trackSequence);
|
|
}
|
|
|
|
/** rct2: 0x008A6630 */
|
|
static void LoopingRCTrackLeftQuarterTurn3(
|
|
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(15125), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15128), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15131), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15122), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15124), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15127), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15130), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15121), { 0, 0, height },
|
|
{ { 16, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15123), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15126), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15129), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15120), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintUtilPushTunnelRight(session, height, TUNNEL_0);
|
|
break;
|
|
case 3:
|
|
PaintUtilPushTunnelLeft(session, height, TUNNEL_0);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6640 */
|
|
static void LoopingRCTrackRightQuarterTurn3(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
|
|
LoopingRCTrackLeftQuarterTurn3(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6650 */
|
|
static void LoopingRCTrackLeftQuarterTurn3Bank(
|
|
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(15137), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15144), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15140), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15143), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15134), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15136), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15139), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 16, 16, 1 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15142), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15133), { 0, 0, height },
|
|
{ { 16, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15135), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15138), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15141), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15145), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15132), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintUtilPushTunnelRight(session, height, TUNNEL_0);
|
|
break;
|
|
case 3:
|
|
PaintUtilPushTunnelLeft(session, height, TUNNEL_0);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6660 */
|
|
static void LoopingRCTrackRightQuarterTurn3Bank(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
|
|
LoopingRCTrackLeftQuarterTurn3Bank(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6670 */
|
|
static void LoopingRCTrackLeftQuarterTurn325DegUp(
|
|
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(15327), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15329), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15331), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15325), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 2:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15326), { 6, 0, height }, { 20, 32, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15328), { 6, 0, height }, { 20, 32, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15330), { 6, 0, height }, { 20, 32, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15324), { 6, 0, height }, { 20, 32, 3 });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_2);
|
|
break;
|
|
case 3:
|
|
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_2);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6680 */
|
|
static void LoopingRCTrackRightQuarterTurn325DegUp(
|
|
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(15316), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15318), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15320), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15322), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 2:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15317), { 6, 0, height }, { 20, 32, 3 });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15319), { 6, 0, height }, { 20, 32, 3 });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15321), { 6, 0, height }, { 20, 32, 3 });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 10, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15323), { 6, 0, height }, { 20, 32, 3 });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
break;
|
|
}
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_2);
|
|
break;
|
|
case 1:
|
|
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_2);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6690 */
|
|
static void LoopingRCTrackLeftQuarterTurn325DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
|
|
LoopingRCTrackRightQuarterTurn325DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A66A0 */
|
|
static void LoopingRCTrackRightQuarterTurn325DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
|
|
LoopingRCTrackLeftQuarterTurn325DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A66B0 */
|
|
static void LoopingRCTrackLeftHalfBankedHelixUpSmall(
|
|
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(15165), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15172), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15168), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15171), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15162), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 2, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15164), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15167), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 16, 16, 1 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15170), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15161), { 0, 0, height },
|
|
{ { 16, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15163), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15166), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15169), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15173), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15160), { 0, 0, height },
|
|
{ { 6, 0, height + 8 }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_0);
|
|
break;
|
|
case 3:
|
|
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_0);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 4:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15162), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15165), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15172), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15168), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15171), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 2, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintUtilPushTunnelRight(session, height, TUNNEL_0);
|
|
break;
|
|
case 1:
|
|
PaintUtilPushTunnelLeft(session, height, TUNNEL_0);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 5:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 6:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15161), { 0, 0, height },
|
|
{ { 16, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15164), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15167), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 16, 16, 1 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15170), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 7:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15160), { 0, 0, height },
|
|
{ { 0, 6, height + 8 }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15163), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15166), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15169), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15173), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A66C0 */
|
|
static void LoopingRCTrackRightHalfBankedHelixUpSmall(
|
|
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(15146), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15149), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15152), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15155), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15159), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 2, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15147), { 0, 0, height },
|
|
{ { 16, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15150), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15153), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 16, 16, 1 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15156), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15148), { 0, 0, height },
|
|
{ { 6, 0, height + 8 }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15151), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15158), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15154), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15157), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_0);
|
|
break;
|
|
case 1:
|
|
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_0);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 4:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15149), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15152), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15155), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15159), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15146), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 2, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintUtilPushTunnelRight(session, height, TUNNEL_0);
|
|
break;
|
|
case 3:
|
|
PaintUtilPushTunnelLeft(session, height, TUNNEL_0);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 5:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 6:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15150), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15153), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 16, 16, 1 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15156), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15147), { 0, 0, height },
|
|
{ { 16, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 7:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15151), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15158), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15154), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15157), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15148), { 0, 0, height },
|
|
{ { 0, 6, height + 8 }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A66D0 */
|
|
static void LoopingRCTrackLeftHalfBankedHelixDownSmall(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
if (trackSequence >= 4)
|
|
{
|
|
trackSequence -= 4;
|
|
direction = (direction - 1) & 3;
|
|
}
|
|
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
|
|
LoopingRCTrackRightHalfBankedHelixUpSmall(session, ride, trackSequence, (direction + 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A66E0 */
|
|
static void LoopingRCTrackRightHalfBankedHelixDownSmall(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
if (trackSequence >= 4)
|
|
{
|
|
trackSequence -= 4;
|
|
direction = (direction + 1) & 3;
|
|
}
|
|
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
|
|
LoopingRCTrackLeftHalfBankedHelixUpSmall(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A66F0 */
|
|
static void LoopingRCTrackLeftHalfBankedHelixUpLarge(
|
|
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(15247), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15258), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15252), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15257), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15242), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 1, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15246), { 0, 0, height },
|
|
{ { 0, 0, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15251), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 32, 16, 1 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15256), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15241), { 0, 0, height },
|
|
{ { 0, 16, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15245), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15250), { 0, 0, height },
|
|
{ { 16, 16, height + 27 }, { 16, 16, 1 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15255), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15240), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 4:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 5:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15244), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15249), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 16, 32, 1 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15254), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15239), { 0, 0, height },
|
|
{ { 16, 0, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 6:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15243), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15248), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15253), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15259), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15238), { 0, 0, height },
|
|
{ { 6, 0, height + 8 }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 7, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_0);
|
|
break;
|
|
case 3:
|
|
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_0);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 7:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15242), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15247), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15258), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15252), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15257), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 1, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintUtilPushTunnelRight(session, height, TUNNEL_0);
|
|
break;
|
|
case 1:
|
|
PaintUtilPushTunnelLeft(session, height, TUNNEL_0);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 8:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 9:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15241), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15246), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15251), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 16, 32, 1 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15256), { 0, 0, height },
|
|
{ { 16, 0, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 10:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15240), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15245), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15250), { 0, 0, height },
|
|
{ { 16, 16, height + 27 }, { 16, 16, 1 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15255), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 11:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 12:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15239), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15244), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15249), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 32, 16, 1 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15254), { 0, 0, height },
|
|
{ { 0, 0, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 13:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15238), { 0, 0, height },
|
|
{ { 0, 6, height + 8 }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15243), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15248), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15253), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15259), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 7, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6700 */
|
|
static void LoopingRCTrackRightHalfBankedHelixUpLarge(
|
|
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(15216), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15221), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15226), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15231), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15237), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 1, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15217), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15222), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15227), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 32, 16, 1 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15232), { 0, 0, height },
|
|
{ { 0, 0, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15218), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15223), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15228), { 0, 0, height },
|
|
{ { 16, 16, height + 27 }, { 16, 16, 1 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15233), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 4:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 5:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15219), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15224), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15229), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 16, 32, 1 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15234), { 0, 0, height },
|
|
{ { 16, 0, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 6:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15220), { 0, 0, height },
|
|
{ { 6, 0, height + 8 }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15225), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15236), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15230), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15235), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 7, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_0);
|
|
break;
|
|
case 1:
|
|
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_0);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 7:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15221), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15226), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15231), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15237), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15216), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 1, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintUtilPushTunnelRight(session, height, TUNNEL_0);
|
|
break;
|
|
case 3:
|
|
PaintUtilPushTunnelLeft(session, height, TUNNEL_0);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 8:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 9:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15222), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15227), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 16, 32, 1 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15232), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15217), { 0, 0, height },
|
|
{ { 16, 0, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 10:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15223), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15228), { 0, 0, height },
|
|
{ { 16, 16, height + 27 }, { 16, 16, 1 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15233), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15218), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 11:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 12:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15224), { 0, 0, height },
|
|
{ { 0, 0, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15229), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 32, 16, 1 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15234), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15219), { 0, 0, height },
|
|
{ { 0, 16, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 13:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15225), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15236), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15230), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15235), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15220), { 0, 0, height },
|
|
{ { 0, 6, height + 8 }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 7, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6710 */
|
|
static void LoopingRCTrackLeftHalfBankedHelixDownLarge(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
if (trackSequence >= 7)
|
|
{
|
|
trackSequence -= 7;
|
|
direction = (direction - 1) & 3;
|
|
}
|
|
trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
|
|
LoopingRCTrackRightHalfBankedHelixUpLarge(session, ride, trackSequence, (direction + 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6720 */
|
|
static void LoopingRCTrackRightHalfBankedHelixDownLarge(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
if (trackSequence >= 7)
|
|
{
|
|
trackSequence -= 7;
|
|
direction = (direction + 1) & 3;
|
|
}
|
|
trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
|
|
LoopingRCTrackLeftHalfBankedHelixUpLarge(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6750 */
|
|
static void LoopingRCTrackLeftQuarterTurn160DegUp(
|
|
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(15341), { 0, 0, height },
|
|
{ { 2, 2, height }, { 28, 28, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15345), { 0, 0, height },
|
|
{ { 2, 2, height + 99 }, { 28, 28, 1 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15342), { 0, 0, height },
|
|
{ { 2, 2, height }, { 28, 28, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15346), { 0, 0, height },
|
|
{ { 2, 2, height + 75 }, { 28, 28, 1 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15343), { 0, 0, height },
|
|
{ { 2, 2, height }, { 28, 28, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15347), { 0, 0, height },
|
|
{ { 2, 2, height + 99 }, { 28, 28, 1 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15340), { 0, 0, height },
|
|
{ { 2, 2, height }, { 28, 28, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15344), { 0, 0, height },
|
|
{ { 2, 2, height + 99 }, { 28, 28, 1 } });
|
|
break;
|
|
}
|
|
TrackPaintUtilLeftQuarterTurn1TileTunnel(session, direction, height, -8, TUNNEL_1, +56, TUNNEL_2);
|
|
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6730 */
|
|
static void LoopingRCTrackRightQuarterTurn160DegUp(
|
|
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(15332), { 0, 0, height },
|
|
{ { 2, 2, height }, { 28, 28, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15336), { 0, 0, height },
|
|
{ { 2, 2, height + 99 }, { 28, 28, 1 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15333), { 0, 0, height },
|
|
{ { 2, 2, height }, { 28, 28, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15337), { 0, 0, height },
|
|
{ { 2, 2, height + 99 }, { 28, 28, 1 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15334), { 0, 0, height },
|
|
{ { 2, 2, height }, { 28, 28, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15338), { 0, 0, height },
|
|
{ { 28, 2, height + 2 }, { 2, 28, 59 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15335), { 0, 0, height },
|
|
{ { 2, 2, height }, { 28, 28, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15339), { 0, 0, height },
|
|
{ { 2, 2, height + 75 }, { 28, 28, 1 } });
|
|
break;
|
|
}
|
|
TrackPaintUtilRightQuarterTurn1TileTunnel(session, direction, height, -8, TUNNEL_1, +56, TUNNEL_2);
|
|
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6740 */
|
|
static void LoopingRCTrackLeftQuarterTurn160DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackRightQuarterTurn160DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6760 */
|
|
static void LoopingRCTrackRightQuarterTurn160DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackLeftQuarterTurn160DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6770 */
|
|
static void LoopingRCTrackBrakes(
|
|
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(15012), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15014), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 1:
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15013), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15015), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
}
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6A40 */
|
|
static void LoopingRCTrack25DegUpLeftBanked(
|
|
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(15594), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15595), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15596), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15597), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6A50 */
|
|
static void LoopingRCTrack25DegUpRightBanked(
|
|
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(15598), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15599), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15600), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15601), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6780 */
|
|
static void LoopingRCTrackOnRidePhoto(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
TrackPaintUtilOnridePhotoPlatformPaint(session, direction, height, MetalSupportType::Tubes);
|
|
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15004), { 0, 0, height },
|
|
{ { 0, 6, height + 3 }, { 32, 20, 0 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15005), { 0, 0, height },
|
|
{ { 0, 6, height + 3 }, { 32, 20, 0 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15004), { 0, 0, height },
|
|
{ { 0, 6, height + 3 }, { 32, 20, 0 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15005), { 0, 0, height },
|
|
{ { 0, 6, height + 3 }, { 32, 20, 0 } });
|
|
break;
|
|
}
|
|
TrackPaintUtilOnridePhotoPaint(session, direction, height + 3, trackElement);
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6A60 */
|
|
static void LoopingRCTrack25DegDownLeftBanked(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrack25DegUpRightBanked(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6A70 */
|
|
static void LoopingRCTrack25DegDownRightBanked(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrack25DegUpLeftBanked(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6860 */
|
|
static void LoopingRCTrackLeftEighthToDiag(
|
|
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(15526), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15530), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15534), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15538), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15527), { 0, 0, height },
|
|
{ { 0, 0, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15531), { 0, 0, height },
|
|
{ { 0, 0, height }, { 34, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15535), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15539), { 0, 0, height },
|
|
{ { 0, 16, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15528), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15532), { 0, 0, height },
|
|
{ { 16, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15536), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15540), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 4:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15529), { 0, 0, height },
|
|
{ { 16, 16, height }, { 16, 16, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15533), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 18, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15537), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15541), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6870 */
|
|
static void LoopingRCTrackRightEighthToDiag(
|
|
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(15510), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15514), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15518), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15522), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15511), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15515), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15519), { 0, 0, height },
|
|
{ { 0, 0, height }, { 34, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15523), { 0, 0, height },
|
|
{ { 0, 0, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15512), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15516), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15520), { 0, 0, height },
|
|
{ { 4, 4, height }, { 28, 28, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15524), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 4:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15513), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15517), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15521), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 18, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15525), { 0, 0, height },
|
|
{ { 16, 16, height }, { 16, 16, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6880 */
|
|
static void LoopingRCTrackLeftEighthToOrthogonal(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
|
|
LoopingRCTrackRightEighthToDiag(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6890 */
|
|
static void LoopingRCTrackRightEighthToOrthogonal(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
|
|
LoopingRCTrackLeftEighthToDiag(session, ride, trackSequence, (direction + 3) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A68A0 */
|
|
static void LoopingRCTrackLeftEighthBankToDiag(
|
|
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(15558), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15562), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15566), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15570), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15559), { 0, 0, height },
|
|
{ { 0, 0, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15563), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 34, 16, 0 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15567), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15571), { 0, 0, height },
|
|
{ { 0, 16, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15560), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15564), { 0, 0, height },
|
|
{ { 16, 16, height + 27 }, { 16, 16, 0 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15568), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15572), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 4:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15561), { 0, 0, height },
|
|
{ { 16, 16, height }, { 16, 16, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15565), { 0, 0, height },
|
|
{ { 0, 16, height + 27 }, { 16, 18, 0 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15569), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15573), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A68B0 */
|
|
static void LoopingRCTrackRightEighthBankToDiag(
|
|
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(15542), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15546), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15550), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15554), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15543), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15547), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15551), { 0, 0, height },
|
|
{ { 0, 0, height + 27 }, { 34, 16, 0 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15555), { 0, 0, height },
|
|
{ { 0, 0, height }, { 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 + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15544), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15548), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15552), { 0, 0, height },
|
|
{ { 4, 4, height + 27 }, { 28, 28, 0 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15556), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 4:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15545), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15549), { 0, 0, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15553), { 0, 0, height },
|
|
{ { 0, 16, height + 27 }, { 16, 18, 0 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15557), { 0, 0, height },
|
|
{ { 16, 16, height }, { 16, 16, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A68C0 */
|
|
static void LoopingRCTrackLeftEighthBankToOrthogonal(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
|
|
LoopingRCTrackRightEighthBankToDiag(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A68D0 */
|
|
static void LoopingRCTrackRightEighthBankToOrthogonal(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
|
|
LoopingRCTrackLeftEighthBankToDiag(session, ride, trackSequence, (direction + 3) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6790 */
|
|
static void LoopingRCTrackDiagFlat(
|
|
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(15451), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15423), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 1:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15448), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15420), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 2:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15450), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15422), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 3:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15449), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15421), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session, PaintUtilRotateSegments(BlockedSegments::kDiagStraightFlat[trackSequence], direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
}
|
|
|
|
static constexpr CoordsXYZ diagBrakeBoundsOffsets[4] = {
|
|
{ 0, 0, 24 },
|
|
{ 0, 0, 24 },
|
|
{ 0, 0, 24 },
|
|
{ 0, 0, 24 },
|
|
};
|
|
|
|
static void LoopingRCTrackDiagBrakes(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
TrackPaintUtilDiagTilesPaint(
|
|
session, 3, height, direction, trackSequence, LoopingRCDiagBrakeImages, defaultDiagTileOffsets, defaultDiagBoundLengths,
|
|
nullptr);
|
|
|
|
TrackPaintUtilDiagTilesPaint(
|
|
session, 3, height, direction, trackSequence, LoopingRCDiagBrakeImages + 4, defaultDiagTileOffsets,
|
|
defaultDiagBoundLengths, diagBrakeBoundsOffsets);
|
|
|
|
if (trackSequence == 3)
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, kDiagSupportPlacement[direction], 0, height, session.SupportColours);
|
|
}
|
|
|
|
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A67C0 */
|
|
static void LoopingRCTrackDiag25DegUp(
|
|
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(15463), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15435), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 1:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15460), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15432), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 2:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15462), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15434), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 3:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15461), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 8, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 8, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 8, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15433), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 8, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 8, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 8, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A67F0 */
|
|
static void LoopingRCTrackDiag60DegUp(
|
|
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(15475), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15447), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
|
|
break;
|
|
case 1:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15472), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15444), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
|
|
break;
|
|
case 2:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15474), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15446), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
|
|
break;
|
|
case 3:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 36, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15473), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 36, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 36, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 36, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 36, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15445), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 36, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 36, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 36, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A67A0 */
|
|
static void LoopingRCTrackDiagFlatTo25DegUp(
|
|
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(15455), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15427), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 1:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15452), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15424), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 2:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15454), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15426), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 3:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15453), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15425), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A67D0 */
|
|
static void LoopingRCTrackDiag25DegUpTo60DegUp(
|
|
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(15467), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15439), { -16, -16, height },
|
|
{ { -16, -16, height }, { 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(15464), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15436), { -16, -16, height },
|
|
{ { -16, -16, height }, { 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(15466), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15438), { -16, -16, height },
|
|
{ { -16, -16, height }, { 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 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 16, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15465), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 16, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 16, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 16, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 16, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15437), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 16, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 16, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 16, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A67E0 */
|
|
static void LoopingRCTrackDiag60DegUpTo25DegUp(
|
|
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(15471), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15443), { -16, -16, height },
|
|
{ { -16, -16, height }, { 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(15468), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15440), { -16, -16, height },
|
|
{ { -16, -16, height }, { 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(15470), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15442), { -16, -16, height },
|
|
{ { -16, -16, height }, { 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 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 21, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15469), { -16, -16, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 21, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 21, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 21, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 21, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15441), { -16, -16, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 21, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 21, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 21, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A67B0 */
|
|
static void LoopingRCTrackDiag25DegUpToFlat(
|
|
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(15459), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15431), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 1:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15456), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15428), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 2:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15458), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15430), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 3:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15457), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15429), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6820 */
|
|
static void LoopingRCTrackDiag25DegDown(
|
|
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(15461), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15433), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 1:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15462), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15434), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 2:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15460), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15432), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 3:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15463), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 8, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 8, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 8, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15435), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 8, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 8, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 8, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6850 */
|
|
static void LoopingRCTrackDiag60DegDown(
|
|
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(15473), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15445), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
|
|
break;
|
|
case 1:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15474), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15446), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
|
|
break;
|
|
case 2:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15472), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15444), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
|
|
break;
|
|
case 3:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 28, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15475), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 28, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 28, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 28, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 28, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15447), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 28, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 28, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 28, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6800 */
|
|
static void LoopingRCTrackDiagFlatTo25DegDown(
|
|
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(15457), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15429), { -16, -16, height },
|
|
{ { -16, -16, height }, { 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(15458), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15430), { -16, -16, height },
|
|
{ { -16, -16, height }, { 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(15456), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15428), { -16, -16, height },
|
|
{ { -16, -16, height }, { 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 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15459), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15431), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
break;
|
|
}
|
|
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6830 */
|
|
static void LoopingRCTrackDiag25DegDownTo60DegDown(
|
|
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(15469), { -16, -16, height },
|
|
{ { 0, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15441), { -16, -16, height },
|
|
{ { 0, 0, height }, { 16, 16, 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(15470), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15442), { -16, -16, height },
|
|
{ { -16, -16, height }, { 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(15468), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15440), { -16, -16, height },
|
|
{ { -16, -16, height }, { 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 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 17, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15471), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 17, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 17, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 17, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 17, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15443), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 17, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 17, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 17, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6840 */
|
|
static void LoopingRCTrackDiag60DegDownTo25DegDown(
|
|
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(15465), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15437), { -16, -16, height },
|
|
{ { -16, -16, height }, { 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(15466), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15438), { -16, -16, height },
|
|
{ { -16, -16, height }, { 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(15464), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15436), { -16, -16, height },
|
|
{ { -16, -16, height }, { 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 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15467), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 8, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 8, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 8, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 8, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15439), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 8, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 8, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 8, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6810 */
|
|
static void LoopingRCTrackDiag25DegDownToFlat(
|
|
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(15453), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15425), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 1:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15454), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15426), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 2:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15452), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15424), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 3:
|
|
if (trackElement.HasChain())
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15455), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15427), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height,
|
|
session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height,
|
|
session.SupportColours);
|
|
break;
|
|
}
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6900 */
|
|
static void LoopingRCTrackDiagFlatToLeftBank(
|
|
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(15503), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15500), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15504), { -16, -16, height },
|
|
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15502), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15501), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6910 */
|
|
static void LoopingRCTrackDiagFlatToRightBank(
|
|
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(15508), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15505), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15507), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15509), { -16, -16, height },
|
|
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15506), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6920 */
|
|
static void LoopingRCTrackDiagLeftBankToFlat(
|
|
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(15506), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15507), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15509), { -16, -16, height },
|
|
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15505), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15508), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6930 */
|
|
static void LoopingRCTrackDiagRightBankToFlat(
|
|
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(15501), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15502), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15500), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15504), { -16, -16, height },
|
|
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15503), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6960 */
|
|
static void LoopingRCTrackDiagLeftBankTo25DegUp(
|
|
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(15493), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15490), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15494), { -16, -16, height },
|
|
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15492), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15491), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6970 */
|
|
static void LoopingRCTrackDiagRightBankTo25DegUp(
|
|
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(15498), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15495), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15497), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15499), { -16, -16, height },
|
|
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15496), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6940 */
|
|
static void LoopingRCTrackDiag25DegUpToLeftBank(
|
|
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(15483), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15480), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15484), { -16, -16, height },
|
|
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15482), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15481), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6950 */
|
|
static void LoopingRCTrackDiag25DegUpToRightBank(
|
|
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(15488), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15485), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15487), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15489), { -16, -16, height },
|
|
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15486), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6980 */
|
|
static void LoopingRCTrackDiagLeftBankTo25DegDown(
|
|
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(15486), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15487), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15489), { -16, -16, height },
|
|
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15485), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15488), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
break;
|
|
}
|
|
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6990 */
|
|
static void LoopingRCTrackDiagRightBankTo25DegDown(
|
|
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(15481), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15482), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15480), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15484), { -16, -16, height },
|
|
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15483), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 4, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 4, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
break;
|
|
}
|
|
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A69A0 */
|
|
static void LoopingRCTrackDiag25DegDownToLeftBank(
|
|
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(15496), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15497), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15499), { -16, -16, height },
|
|
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15495), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15498), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A69B0 */
|
|
static void LoopingRCTrackDiag25DegDownToRightBank(
|
|
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(15491), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15492), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15490), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15494), { -16, -16, height },
|
|
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15493), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalBSupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A68E0 */
|
|
static void LoopingRCTrackDiagLeftBank(
|
|
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(15479), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15476), { -16, -16, height },
|
|
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15478), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15477), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A68F0 */
|
|
static void LoopingRCTrackDiagRightBank(
|
|
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(15477), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 1:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15478), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15476), { -16, -16, height },
|
|
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::LeftCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15479), { -16, -16, height },
|
|
{ { -16, -16, height }, { 32, 32, 3 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::TopCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::RightCorner, 0, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::BottomCorner, 0, height, session.SupportColours);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6C00 */
|
|
static void LoopingRCTrackBlockBrakes(
|
|
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(15012), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15014), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
case 1:
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15013), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15015), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 26 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
}
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6BC0 */
|
|
static void LoopingRCTrackLeftBankedQuarterTurn325DegUp(
|
|
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(15689), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15691), { 0, 6, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15693), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15687), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 2:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15688), { 6, 0, height }, { 20, 32, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15690), { 6, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15692), { 6, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15686), { 6, 0, height }, { 20, 32, 3 });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_2);
|
|
break;
|
|
case 3:
|
|
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_2);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6BD0 */
|
|
static void LoopingRCTrackRightBankedQuarterTurn325DegUp(
|
|
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(15678), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15680), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15682), { 0, 6, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15684), { 0, 6, height }, { 32, 20, 3 });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 2:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15679), { 6, 0, height }, { 20, 32, 3 });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15681), { 6, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 34 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15683), { 6, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 34 } });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 10, height, session.SupportColours);
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15685), { 6, 0, height }, { 20, 32, 3 });
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
break;
|
|
}
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_2);
|
|
break;
|
|
case 1:
|
|
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_2);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6BE0 */
|
|
static void LoopingRCTrackLeftBankedQuarterTurn325DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
|
|
LoopingRCTrackRightBankedQuarterTurn325DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6BF0 */
|
|
static void LoopingRCTrackRightBankedQuarterTurn325DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
|
|
LoopingRCTrackLeftBankedQuarterTurn325DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6B80 */
|
|
static void LoopingRCTrackLeftBankedQuarterTurn525DegUp(
|
|
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(15658), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15663), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15668), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15673), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15659), { 0, 0, height }, { 32, 16, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15664), { 0, 0, height },
|
|
{ { 30, 30, height }, { 1, 1, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15669), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15674), { 0, 0, height },
|
|
{ { 0, 16, height }, { 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 + 72, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15660), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15665), { 0, 0, height },
|
|
{ { 30, 30, height }, { 1, 1, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15670), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15675), { 0, 0, height }, { 16, 16, 3 });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
|
|
break;
|
|
case 4:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 5:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15661), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15666), { 0, 0, height },
|
|
{ { 30, 30, height }, { 1, 1, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15671), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15676), { 0, 0, height },
|
|
{ { 16, 0, height }, { 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 + 72, 0x20);
|
|
break;
|
|
case 6:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15662), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15667), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15672), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15677), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 2:
|
|
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_2);
|
|
break;
|
|
case 3:
|
|
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_2);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6B90 */
|
|
static void LoopingRCTrackRightBankedQuarterTurn525DegUp(
|
|
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(15638), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15643), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15648), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15653), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
|
PaintSegment::bottomLeftSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 1:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 2:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15639), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15644), { 0, 0, height },
|
|
{ { 0, 16, height }, { 32, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15649), { 0, 0, height },
|
|
{ { 30, 30, height }, { 1, 1, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15654), { 0, 0, height }, { 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 + 72, 0x20);
|
|
break;
|
|
case 3:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15640), { 0, 0, height }, { 16, 16, 3 });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15645), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 16, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15650), { 0, 0, height },
|
|
{ { 30, 30, height }, { 1, 1, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15655), { 0, 0, height },
|
|
{ { 0, 16, height }, { 16, 16, 3 } });
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
|
|
break;
|
|
case 4:
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
case 5:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15641), { 0, 0, height },
|
|
{ { 16, 0, height }, { 16, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15646), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15651), { 0, 0, height },
|
|
{ { 30, 30, height }, { 1, 1, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15656), { 0, 0, height },
|
|
{ { 16, 0, height }, { 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 + 72, 0x20);
|
|
break;
|
|
case 6:
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15642), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15647), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15652), { 0, 0, height },
|
|
{ { 27, 0, height }, { 1, 32, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15657), { 0, 0, height },
|
|
{ { 6, 0, height }, { 20, 32, 3 } });
|
|
break;
|
|
}
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
switch (direction)
|
|
{
|
|
case 0:
|
|
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_2);
|
|
break;
|
|
case 1:
|
|
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_2);
|
|
break;
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(
|
|
session,
|
|
PaintUtilRotateSegments(
|
|
EnumsToFlags(
|
|
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
|
|
PaintSegment::bottomRightSide),
|
|
direction),
|
|
0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/** rct2: 0x008A6BA0 */
|
|
static void LoopingRCTrackLeftBankedQuarterTurn525DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
|
|
LoopingRCTrackRightBankedQuarterTurn525DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6BB0 */
|
|
static void LoopingRCTrackRightBankedQuarterTurn525DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
|
|
LoopingRCTrackLeftBankedQuarterTurn525DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6A80 */
|
|
static void LoopingRCTrack25DegUpToLeftBanked25DegUp(
|
|
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(15602), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15603), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15610), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15604), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15605), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6A90 */
|
|
static void LoopingRCTrack25DegUpToRightBanked25DegUp(
|
|
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(15606), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15607), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15608), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15611), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15609), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6AA0 */
|
|
static void LoopingRCTrackLeftBanked25DegUpTo25DegUp(
|
|
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(15612), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15613), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15620), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15614), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15615), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6AB0 */
|
|
static void LoopingRCTrackRightBanked25DegUpTo25DegUp(
|
|
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(15616), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15617), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15618), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15621), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15619), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 8, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_1);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6AC0 */
|
|
static void LoopingRCTrack25DegDownToLeftBanked25DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackRightBanked25DegUpTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6AD0 */
|
|
static void LoopingRCTrack25DegDownToRightBanked25DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackLeftBanked25DegUpTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6AE0 */
|
|
static void LoopingRCTrackLeftBanked25DegDownTo25DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrack25DegUpToRightBanked25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6AF0 */
|
|
static void LoopingRCTrackRightBanked25DegDownTo25DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrack25DegUpToLeftBanked25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6B00 */
|
|
static void LoopingRCTrackLeftBankedFlatToLeftBanked25DegUp(
|
|
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(15622), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15623), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15624), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15625), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 3, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6B10 */
|
|
static void LoopingRCTrackRightBankedFlatToRightBanked25DegUp(
|
|
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(15626), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15627), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15628), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15629), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 3, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6B40 */
|
|
static void LoopingRCTrackLeftBanked25DegUpToLeftBankedFlat(
|
|
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(15630), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15631), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15632), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15633), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_0);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_12);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6B50 */
|
|
static void LoopingRCTrackRightBanked25DegUpToRightBankedFlat(
|
|
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(15634), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15635), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15636), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15637), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_0);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_12);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6B60 */
|
|
static void LoopingRCTrackLeftBankedFlatToLeftBanked25DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackRightBanked25DegUpToRightBankedFlat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6B70 */
|
|
static void LoopingRCTrackRightBankedFlatToRightBanked25DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackLeftBanked25DegUpToLeftBankedFlat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6B20 */
|
|
static void LoopingRCTrackLeftBanked25DegDownToLeftBankedFlat(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackRightBankedFlatToRightBanked25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6B30 */
|
|
static void LoopingRCTrackRightBanked25DegDownToRightBankedFlat(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackLeftBankedFlatToLeftBanked25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A69C0 */
|
|
static void LoopingRCTrackFlatToLeftBanked25DegUp(
|
|
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(15574), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15575), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15582), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15576), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15577), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 3, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A69D0 */
|
|
static void LoopingRCTrackFlatToRightBanked25DegUp(
|
|
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(15578), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15579), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15580), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15583), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15581), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 3, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_2);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A69E0 */
|
|
static void LoopingRCTrackLeftBanked25DegUpToFlat(
|
|
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(15584), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15585), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15592), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15586), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15587), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_0);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_12);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A69F0 */
|
|
static void LoopingRCTrackRightBanked25DegUpToFlat(
|
|
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(15588), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15589), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 2:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15590), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15593), { 0, 0, height },
|
|
{ { 0, 27, height }, { 32, 1, 34 } });
|
|
break;
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(15591), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 6, height, session.SupportColours);
|
|
}
|
|
if (direction == 0 || direction == 3)
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_0);
|
|
}
|
|
else
|
|
{
|
|
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_12);
|
|
}
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20);
|
|
}
|
|
|
|
/** rct2: 0x008A6A00 */
|
|
static void LoopingRCTrackFlatToLeftBanked25DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackRightBanked25DegUpToFlat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6A10 */
|
|
static void LoopingRCTrackFlatToRightBanked25DegDown(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackLeftBanked25DegUpToFlat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6A20 */
|
|
static void LoopingRCTrackLeftBanked25DegDownToFlat(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackFlatToRightBanked25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
/** rct2: 0x008A6A30 */
|
|
static void LoopingRCTrackRightBanked25DegDownToFlat(
|
|
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
|
const TrackElement& trackElement)
|
|
{
|
|
LoopingRCTrackFlatToLeftBanked25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
|
|
}
|
|
|
|
static void LoopingRCTrackBooster(
|
|
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(SPR_LOOPING_RC_BOOSTER_NE_SW), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
case 1:
|
|
case 3:
|
|
PaintAddImageAsParentRotated(
|
|
session, direction, session.TrackColours.WithIndex(SPR_LOOPING_RC_BOOSTER_NW_SE), { 0, 0, height },
|
|
{ { 0, 6, height }, { 32, 20, 3 } });
|
|
break;
|
|
}
|
|
if (TrackPaintUtilShouldPaintSupports(session.MapPosition))
|
|
{
|
|
MetalASupportsPaintSetup(
|
|
session, MetalSupportType::Tubes, MetalSupportPlace::Centre, 0, height, session.SupportColours);
|
|
}
|
|
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_0);
|
|
PaintUtilSetSegmentSupportHeight(session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
|
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
|
|
}
|
|
|
|
TRACK_PAINT_FUNCTION GetTrackPaintFunctionLoopingRC(int32_t trackType)
|
|
{
|
|
switch (trackType)
|
|
{
|
|
case TrackElemType::Flat:
|
|
return LoopingRCTrackFlat;
|
|
case TrackElemType::EndStation:
|
|
case TrackElemType::BeginStation:
|
|
case TrackElemType::MiddleStation:
|
|
return LoopingRCTrackStation;
|
|
case TrackElemType::Up25:
|
|
return LoopingRCTrack25DegUp;
|
|
case TrackElemType::Up60:
|
|
return LoopingRCTrack60DegUp;
|
|
case TrackElemType::FlatToUp25:
|
|
return LoopingRCTrackFlatTo25DegUp;
|
|
case TrackElemType::Up25ToUp60:
|
|
return LoopingRCTrack25DegUpTo60DegUp;
|
|
case TrackElemType::Up60ToUp25:
|
|
return LoopingRCTrack60DegUpTo25DegUp;
|
|
case TrackElemType::Up25ToFlat:
|
|
return LoopingRCTrack25DegUpToFlat;
|
|
case TrackElemType::Down25:
|
|
return LoopingRCTrack25DegDown;
|
|
case TrackElemType::Down60:
|
|
return LoopingRCTrack60DegDown;
|
|
case TrackElemType::FlatToDown25:
|
|
return LoopingRCTrackFlatTo25DegDown;
|
|
case TrackElemType::Down25ToDown60:
|
|
return LoopingRCTrack25DegDownTo60DegDown;
|
|
case TrackElemType::Down60ToDown25:
|
|
return LoopingRCTrack60DegDownTo25DegDown;
|
|
case TrackElemType::Down25ToFlat:
|
|
return LoopingRCTrack25DegDownToFlat;
|
|
case TrackElemType::LeftQuarterTurn5Tiles:
|
|
return LoopingRCTrackLeftQuarterTurn5;
|
|
case TrackElemType::RightQuarterTurn5Tiles:
|
|
return LoopingRCTrackRightQuarterTurn5;
|
|
case TrackElemType::FlatToLeftBank:
|
|
return LoopingRCTrackFlatToLeftBank;
|
|
case TrackElemType::FlatToRightBank:
|
|
return LoopingRCTrackFlatToRightBank;
|
|
case TrackElemType::LeftBankToFlat:
|
|
return LoopingRCTrackLeftBankToFlat;
|
|
case TrackElemType::RightBankToFlat:
|
|
return LoopingRCTrackRightBankToFlat;
|
|
case TrackElemType::BankedLeftQuarterTurn5Tiles:
|
|
return LoopingRCTrackBankedLeftQuarterTurn5;
|
|
case TrackElemType::BankedRightQuarterTurn5Tiles:
|
|
return LoopingRCTrackBankedRightQuarterTurn5;
|
|
case TrackElemType::LeftBankToUp25:
|
|
return LoopingRCTrackLeftBankTo25DegUp;
|
|
case TrackElemType::RightBankToUp25:
|
|
return LoopingRCTrackRightBankTo25DegUp;
|
|
case TrackElemType::Up25ToLeftBank:
|
|
return LoopingRCTrack25DegUpToLeftBank;
|
|
case TrackElemType::Up25ToRightBank:
|
|
return LoopingRCTrack25DegUpToRightBank;
|
|
case TrackElemType::LeftBankToDown25:
|
|
return LoopingRCTrackLeftBankTo25DegDown;
|
|
case TrackElemType::RightBankToDown25:
|
|
return LoopingRCTrackRightBankTo25DegDown;
|
|
case TrackElemType::Down25ToLeftBank:
|
|
return LoopingRCTrack25DegDownToLeftBank;
|
|
case TrackElemType::Down25ToRightBank:
|
|
return LoopingRCTrack25DegDownToRightBank;
|
|
case TrackElemType::LeftBank:
|
|
return LoopingRCTrackLeftBank;
|
|
case TrackElemType::RightBank:
|
|
return LoopingRCTrackRightBank;
|
|
case TrackElemType::LeftQuarterTurn5TilesUp25:
|
|
return LoopingRCTrackLeftQuarterTurn525DegUp;
|
|
case TrackElemType::RightQuarterTurn5TilesUp25:
|
|
return LoopingRCTrackRightQuarterTurn525DegUp;
|
|
case TrackElemType::LeftQuarterTurn5TilesDown25:
|
|
return LoopingRCTrackLeftQuarterTurn525DegDown;
|
|
case TrackElemType::RightQuarterTurn5TilesDown25:
|
|
return LoopingRCTrackRightQuarterTurn525DegDown;
|
|
case TrackElemType::SBendLeft:
|
|
return LoopingRCTrackSBendLeft;
|
|
case TrackElemType::SBendRight:
|
|
return LoopingRCTrackSBendRight;
|
|
case TrackElemType::LeftVerticalLoop:
|
|
return LoopingRCTrackLeftVerticalLoop;
|
|
case TrackElemType::RightVerticalLoop:
|
|
return LoopingRCTrackRightVerticalLoop;
|
|
case TrackElemType::LeftQuarterTurn3Tiles:
|
|
return LoopingRCTrackLeftQuarterTurn3;
|
|
case TrackElemType::RightQuarterTurn3Tiles:
|
|
return LoopingRCTrackRightQuarterTurn3;
|
|
case TrackElemType::LeftBankedQuarterTurn3Tiles:
|
|
return LoopingRCTrackLeftQuarterTurn3Bank;
|
|
case TrackElemType::RightBankedQuarterTurn3Tiles:
|
|
return LoopingRCTrackRightQuarterTurn3Bank;
|
|
case TrackElemType::LeftQuarterTurn3TilesUp25:
|
|
return LoopingRCTrackLeftQuarterTurn325DegUp;
|
|
case TrackElemType::RightQuarterTurn3TilesUp25:
|
|
return LoopingRCTrackRightQuarterTurn325DegUp;
|
|
case TrackElemType::LeftQuarterTurn3TilesDown25:
|
|
return LoopingRCTrackLeftQuarterTurn325DegDown;
|
|
case TrackElemType::RightQuarterTurn3TilesDown25:
|
|
return LoopingRCTrackRightQuarterTurn325DegDown;
|
|
case TrackElemType::LeftHalfBankedHelixUpSmall:
|
|
return LoopingRCTrackLeftHalfBankedHelixUpSmall;
|
|
case TrackElemType::RightHalfBankedHelixUpSmall:
|
|
return LoopingRCTrackRightHalfBankedHelixUpSmall;
|
|
case TrackElemType::LeftHalfBankedHelixDownSmall:
|
|
return LoopingRCTrackLeftHalfBankedHelixDownSmall;
|
|
case TrackElemType::RightHalfBankedHelixDownSmall:
|
|
return LoopingRCTrackRightHalfBankedHelixDownSmall;
|
|
case TrackElemType::LeftHalfBankedHelixUpLarge:
|
|
return LoopingRCTrackLeftHalfBankedHelixUpLarge;
|
|
case TrackElemType::RightHalfBankedHelixUpLarge:
|
|
return LoopingRCTrackRightHalfBankedHelixUpLarge;
|
|
case TrackElemType::LeftHalfBankedHelixDownLarge:
|
|
return LoopingRCTrackLeftHalfBankedHelixDownLarge;
|
|
case TrackElemType::RightHalfBankedHelixDownLarge:
|
|
return LoopingRCTrackRightHalfBankedHelixDownLarge;
|
|
case TrackElemType::LeftQuarterTurn1TileUp60:
|
|
return LoopingRCTrackLeftQuarterTurn160DegUp;
|
|
case TrackElemType::RightQuarterTurn1TileUp60:
|
|
return LoopingRCTrackRightQuarterTurn160DegUp;
|
|
case TrackElemType::LeftQuarterTurn1TileDown60:
|
|
return LoopingRCTrackLeftQuarterTurn160DegDown;
|
|
case TrackElemType::RightQuarterTurn1TileDown60:
|
|
return LoopingRCTrackRightQuarterTurn160DegDown;
|
|
case TrackElemType::Brakes:
|
|
return LoopingRCTrackBrakes;
|
|
case TrackElemType::Up25LeftBanked:
|
|
return LoopingRCTrack25DegUpLeftBanked;
|
|
case TrackElemType::Up25RightBanked:
|
|
return LoopingRCTrack25DegUpRightBanked;
|
|
case TrackElemType::OnRidePhoto:
|
|
return LoopingRCTrackOnRidePhoto;
|
|
case TrackElemType::Down25LeftBanked:
|
|
return LoopingRCTrack25DegDownLeftBanked;
|
|
case TrackElemType::Down25RightBanked:
|
|
return LoopingRCTrack25DegDownRightBanked;
|
|
case TrackElemType::LeftEighthToDiag:
|
|
return LoopingRCTrackLeftEighthToDiag;
|
|
case TrackElemType::RightEighthToDiag:
|
|
return LoopingRCTrackRightEighthToDiag;
|
|
case TrackElemType::LeftEighthToOrthogonal:
|
|
return LoopingRCTrackLeftEighthToOrthogonal;
|
|
case TrackElemType::RightEighthToOrthogonal:
|
|
return LoopingRCTrackRightEighthToOrthogonal;
|
|
case TrackElemType::LeftEighthBankToDiag:
|
|
return LoopingRCTrackLeftEighthBankToDiag;
|
|
case TrackElemType::RightEighthBankToDiag:
|
|
return LoopingRCTrackRightEighthBankToDiag;
|
|
case TrackElemType::LeftEighthBankToOrthogonal:
|
|
return LoopingRCTrackLeftEighthBankToOrthogonal;
|
|
case TrackElemType::RightEighthBankToOrthogonal:
|
|
return LoopingRCTrackRightEighthBankToOrthogonal;
|
|
case TrackElemType::DiagFlat:
|
|
return LoopingRCTrackDiagFlat;
|
|
case TrackElemType::DiagUp25:
|
|
return LoopingRCTrackDiag25DegUp;
|
|
case TrackElemType::DiagUp60:
|
|
return LoopingRCTrackDiag60DegUp;
|
|
case TrackElemType::DiagFlatToUp25:
|
|
return LoopingRCTrackDiagFlatTo25DegUp;
|
|
case TrackElemType::DiagUp25ToUp60:
|
|
return LoopingRCTrackDiag25DegUpTo60DegUp;
|
|
case TrackElemType::DiagUp60ToUp25:
|
|
return LoopingRCTrackDiag60DegUpTo25DegUp;
|
|
case TrackElemType::DiagUp25ToFlat:
|
|
return LoopingRCTrackDiag25DegUpToFlat;
|
|
case TrackElemType::DiagDown25:
|
|
return LoopingRCTrackDiag25DegDown;
|
|
case TrackElemType::DiagDown60:
|
|
return LoopingRCTrackDiag60DegDown;
|
|
case TrackElemType::DiagFlatToDown25:
|
|
return LoopingRCTrackDiagFlatTo25DegDown;
|
|
case TrackElemType::DiagDown25ToDown60:
|
|
return LoopingRCTrackDiag25DegDownTo60DegDown;
|
|
case TrackElemType::DiagDown60ToDown25:
|
|
return LoopingRCTrackDiag60DegDownTo25DegDown;
|
|
case TrackElemType::DiagDown25ToFlat:
|
|
return LoopingRCTrackDiag25DegDownToFlat;
|
|
case TrackElemType::DiagFlatToLeftBank:
|
|
return LoopingRCTrackDiagFlatToLeftBank;
|
|
case TrackElemType::DiagFlatToRightBank:
|
|
return LoopingRCTrackDiagFlatToRightBank;
|
|
case TrackElemType::DiagLeftBankToFlat:
|
|
return LoopingRCTrackDiagLeftBankToFlat;
|
|
case TrackElemType::DiagRightBankToFlat:
|
|
return LoopingRCTrackDiagRightBankToFlat;
|
|
case TrackElemType::DiagLeftBankToUp25:
|
|
return LoopingRCTrackDiagLeftBankTo25DegUp;
|
|
case TrackElemType::DiagRightBankToUp25:
|
|
return LoopingRCTrackDiagRightBankTo25DegUp;
|
|
case TrackElemType::DiagUp25ToLeftBank:
|
|
return LoopingRCTrackDiag25DegUpToLeftBank;
|
|
case TrackElemType::DiagUp25ToRightBank:
|
|
return LoopingRCTrackDiag25DegUpToRightBank;
|
|
case TrackElemType::DiagLeftBankToDown25:
|
|
return LoopingRCTrackDiagLeftBankTo25DegDown;
|
|
case TrackElemType::DiagRightBankToDown25:
|
|
return LoopingRCTrackDiagRightBankTo25DegDown;
|
|
case TrackElemType::DiagDown25ToLeftBank:
|
|
return LoopingRCTrackDiag25DegDownToLeftBank;
|
|
case TrackElemType::DiagDown25ToRightBank:
|
|
return LoopingRCTrackDiag25DegDownToRightBank;
|
|
case TrackElemType::DiagLeftBank:
|
|
return LoopingRCTrackDiagLeftBank;
|
|
case TrackElemType::DiagRightBank:
|
|
return LoopingRCTrackDiagRightBank;
|
|
case TrackElemType::BlockBrakes:
|
|
return LoopingRCTrackBlockBrakes;
|
|
case TrackElemType::LeftBankedQuarterTurn3TileUp25:
|
|
return LoopingRCTrackLeftBankedQuarterTurn325DegUp;
|
|
case TrackElemType::RightBankedQuarterTurn3TileUp25:
|
|
return LoopingRCTrackRightBankedQuarterTurn325DegUp;
|
|
case TrackElemType::LeftBankedQuarterTurn3TileDown25:
|
|
return LoopingRCTrackLeftBankedQuarterTurn325DegDown;
|
|
case TrackElemType::RightBankedQuarterTurn3TileDown25:
|
|
return LoopingRCTrackRightBankedQuarterTurn325DegDown;
|
|
case TrackElemType::LeftBankedQuarterTurn5TileUp25:
|
|
return LoopingRCTrackLeftBankedQuarterTurn525DegUp;
|
|
case TrackElemType::RightBankedQuarterTurn5TileUp25:
|
|
return LoopingRCTrackRightBankedQuarterTurn525DegUp;
|
|
case TrackElemType::LeftBankedQuarterTurn5TileDown25:
|
|
return LoopingRCTrackLeftBankedQuarterTurn525DegDown;
|
|
case TrackElemType::RightBankedQuarterTurn5TileDown25:
|
|
return LoopingRCTrackRightBankedQuarterTurn525DegDown;
|
|
case TrackElemType::Up25ToLeftBankedUp25:
|
|
return LoopingRCTrack25DegUpToLeftBanked25DegUp;
|
|
case TrackElemType::Up25ToRightBankedUp25:
|
|
return LoopingRCTrack25DegUpToRightBanked25DegUp;
|
|
case TrackElemType::LeftBankedUp25ToUp25:
|
|
return LoopingRCTrackLeftBanked25DegUpTo25DegUp;
|
|
case TrackElemType::RightBankedUp25ToUp25:
|
|
return LoopingRCTrackRightBanked25DegUpTo25DegUp;
|
|
case TrackElemType::Down25ToLeftBankedDown25:
|
|
return LoopingRCTrack25DegDownToLeftBanked25DegDown;
|
|
case TrackElemType::Down25ToRightBankedDown25:
|
|
return LoopingRCTrack25DegDownToRightBanked25DegDown;
|
|
case TrackElemType::LeftBankedDown25ToDown25:
|
|
return LoopingRCTrackLeftBanked25DegDownTo25DegDown;
|
|
case TrackElemType::RightBankedDown25ToDown25:
|
|
return LoopingRCTrackRightBanked25DegDownTo25DegDown;
|
|
case TrackElemType::LeftBankedFlatToLeftBankedUp25:
|
|
return LoopingRCTrackLeftBankedFlatToLeftBanked25DegUp;
|
|
case TrackElemType::RightBankedFlatToRightBankedUp25:
|
|
return LoopingRCTrackRightBankedFlatToRightBanked25DegUp;
|
|
case TrackElemType::LeftBankedUp25ToLeftBankedFlat:
|
|
return LoopingRCTrackLeftBanked25DegUpToLeftBankedFlat;
|
|
case TrackElemType::RightBankedUp25ToRightBankedFlat:
|
|
return LoopingRCTrackRightBanked25DegUpToRightBankedFlat;
|
|
case TrackElemType::LeftBankedFlatToLeftBankedDown25:
|
|
return LoopingRCTrackLeftBankedFlatToLeftBanked25DegDown;
|
|
case TrackElemType::RightBankedFlatToRightBankedDown25:
|
|
return LoopingRCTrackRightBankedFlatToRightBanked25DegDown;
|
|
case TrackElemType::LeftBankedDown25ToLeftBankedFlat:
|
|
return LoopingRCTrackLeftBanked25DegDownToLeftBankedFlat;
|
|
case TrackElemType::RightBankedDown25ToRightBankedFlat:
|
|
return LoopingRCTrackRightBanked25DegDownToRightBankedFlat;
|
|
case TrackElemType::FlatToLeftBankedUp25:
|
|
return LoopingRCTrackFlatToLeftBanked25DegUp;
|
|
case TrackElemType::FlatToRightBankedUp25:
|
|
return LoopingRCTrackFlatToRightBanked25DegUp;
|
|
case TrackElemType::LeftBankedUp25ToFlat:
|
|
return LoopingRCTrackLeftBanked25DegUpToFlat;
|
|
case TrackElemType::RightBankedUp25ToFlat:
|
|
return LoopingRCTrackRightBanked25DegUpToFlat;
|
|
case TrackElemType::FlatToLeftBankedDown25:
|
|
return LoopingRCTrackFlatToLeftBanked25DegDown;
|
|
case TrackElemType::FlatToRightBankedDown25:
|
|
return LoopingRCTrackFlatToRightBanked25DegDown;
|
|
case TrackElemType::LeftBankedDown25ToFlat:
|
|
return LoopingRCTrackLeftBanked25DegDownToFlat;
|
|
case TrackElemType::RightBankedDown25ToFlat:
|
|
return LoopingRCTrackRightBanked25DegDownToFlat;
|
|
|
|
case TrackElemType::Booster:
|
|
return LoopingRCTrackBooster;
|
|
|
|
case TrackElemType::DiagBrakes:
|
|
case TrackElemType::DiagBlockBrakes:
|
|
return LoopingRCTrackDiagBrakes;
|
|
}
|
|
return GetTrackPaintFunctionLimLaunchedRC(trackType);
|
|
}
|