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

7419 lines
346 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/WoodenSupports.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 uint32_t MINE_TRAIN_BLOCK_BRAKE_SW_NE_OPEN = 20060;
static constexpr uint32_t MINE_TRAIN_BLOCK_BRAKE_NW_SE_OPEN = 20061;
static constexpr uint32_t MINE_TRAIN_BLOCK_BRAKE_SW_NE_CLOSED = 20062;
static constexpr uint32_t MINE_TRAIN_BLOCK_BRAKE_NW_SE_CLOSED = 20063;
static constexpr uint32_t _MineTrainBlockBrakeImages[NumOrthogonalDirections][2] = {
{ MINE_TRAIN_BLOCK_BRAKE_SW_NE_OPEN, MINE_TRAIN_BLOCK_BRAKE_SW_NE_CLOSED },
{ MINE_TRAIN_BLOCK_BRAKE_NW_SE_OPEN, MINE_TRAIN_BLOCK_BRAKE_NW_SE_CLOSED },
{ MINE_TRAIN_BLOCK_BRAKE_SW_NE_OPEN, MINE_TRAIN_BLOCK_BRAKE_SW_NE_CLOSED },
{ MINE_TRAIN_BLOCK_BRAKE_NW_SE_OPEN, MINE_TRAIN_BLOCK_BRAKE_NW_SE_CLOSED },
};
static constexpr const uint32_t MinetrainRCDiagBrakeImages[NumOrthogonalDirections] = {
SPR_G2_MINETRAIN_DIAG_BRAKES,
SPR_G2_MINETRAIN_DIAG_BRAKES + 1,
SPR_G2_MINETRAIN_DIAG_BRAKES,
SPR_G2_MINETRAIN_DIAG_BRAKES + 1,
};
static constexpr const uint32_t MinetrainRCDiagBlockBrakeImages[2][NumOrthogonalDirections] = {
{
SPR_G2_MINETRAIN_DIAG_BRAKES + 3,
SPR_G2_MINETRAIN_DIAG_BRAKES + 5,
SPR_G2_MINETRAIN_DIAG_BRAKES + 3,
SPR_G2_MINETRAIN_DIAG_BRAKES + 5,
},
{
SPR_G2_MINETRAIN_DIAG_BRAKES + 2,
SPR_G2_MINETRAIN_DIAG_BRAKES + 4,
SPR_G2_MINETRAIN_DIAG_BRAKES + 2,
SPR_G2_MINETRAIN_DIAG_BRAKES + 4,
},
};
// Magic number 4 refers to the number of track blocks in a diagonal track element
static constexpr const WoodenSupportSubType MineTrainRCDiagonalSupports[4][NumOrthogonalDirections] = {
{ WoodenSupportSubType::Null, WoodenSupportSubType::Null, WoodenSupportSubType::Null, WoodenSupportSubType::Null },
{ WoodenSupportSubType::Corner0, WoodenSupportSubType::Corner1, WoodenSupportSubType::Corner2,
WoodenSupportSubType::Corner3 },
{ WoodenSupportSubType::Corner2, WoodenSupportSubType::Corner3, WoodenSupportSubType::Corner0,
WoodenSupportSubType::Corner1 },
{ WoodenSupportSubType::Null, WoodenSupportSubType::Null, WoodenSupportSubType::Null, WoodenSupportSubType::Null },
};
/** rct2: 0x0071BFA4 */
static void MineTrainRCTrackFlat(
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(20054), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20055), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20056), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20057), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
}
else
{
switch (direction)
{
case 0:
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20052), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20053), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
}
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
}
/** rct2: 0x0071C154, 0x0071C164, 0x0071C174 */
static void MineTrainRCTrackStation(
PaintSession& session, const Ride& ride, [[maybe_unused]] uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
static constexpr uint32_t imageIds[4][2] = {
{ 20064, SPR_STATION_BASE_B_SW_NE },
{ 20065, SPR_STATION_BASE_B_NW_SE },
{ 20064, SPR_STATION_BASE_B_SW_NE },
{ 20065, SPR_STATION_BASE_B_NW_SE },
};
PaintAddImageAsParentRotated(
session, direction, GetStationColourScheme(session, trackElement).WithIndex(imageIds[direction][1]),
{ 0, 0, height - 2 }, { { 0, 2, height }, { 32, 28, 1 } });
if (trackElement.GetTrackType() == TrackElemType::EndStation)
{
bool isClosed = trackElement.IsBrakeClosed();
PaintAddImageAsChildRotated(
session, direction, session.TrackColours.WithIndex(_MineTrainBlockBrakeImages[direction][isClosed]),
{ 0, 0, height }, { { 0, 0, height }, { 32, 20, 1 } });
}
else
{
PaintAddImageAsChildRotated(
session, direction, session.TrackColours.WithIndex(imageIds[direction][0]), { 0, 0, height },
{ { 0, 0, height }, { 32, 20, 1 } });
}
DrawSupportsSideBySide(session, direction, height, session.SupportColours, MetalSupportType::Boxed);
TrackPaintUtilDrawStation(session, ride, direction, height, trackElement);
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
}
/** rct2: 0x0071BFB4 */
static void MineTrainRCTrack25DegUp(
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(20102), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20103), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20104), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20105), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20074), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20075), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20076), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20077), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
}
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
WoodenSupportTransitionType::Up25Deg);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_SQUARE_7);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_SQUARE_8);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
}
/** rct2: 0x0071BFC4 */
static void MineTrainRCTrack60DegUp(
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(20090), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 1:
session.WoodenSupportsPrependTo = PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20091), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 98 } });
break;
case 2:
session.WoodenSupportsPrependTo = PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20092), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 98 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20093), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
WoodenSupportTransitionType::Up60Deg);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_SQUARE_7);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height + 56, TUNNEL_SQUARE_8);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
}
/** rct2: 0x0071BFD4 */
static void MineTrainRCTrackFlatTo25DegUp(
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(20094), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20095), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20096), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20097), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20066), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20067), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20068), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20069), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
}
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
WoodenSupportTransitionType::FlatToUp25Deg);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_8);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
}
/** rct2: 0x0071BFE4 */
static void MineTrainRCTrack25DegUpTo60DegUp(
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(20078), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 1:
session.WoodenSupportsPrependTo = PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20079), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20082), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 66 } });
break;
case 2:
session.WoodenSupportsPrependTo = PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20080), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20083), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 66 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20081), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
WoodenSupportTransitionType::Up25DegToUp60Deg);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_SQUARE_7);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height + 24, TUNNEL_SQUARE_8);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
}
/** rct2: 0x0071BFF4 */
static void MineTrainRCTrack60DegUpTo25DegUp(
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(20084), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 1:
session.WoodenSupportsPrependTo = PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20085), { 0, 0, height },
{ { 4, 29, height - 16 }, { 24, 1, 61 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20088), { 0, 0, height },
{ { 0, 4, height }, { 32, 2, 66 } });
break;
case 2:
session.WoodenSupportsPrependTo = PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20086), { 0, 0, height },
{ { 4, 29, height - 16 }, { 24, 1, 61 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20089), { 0, 0, height },
{ { 0, 4, height }, { 32, 2, 66 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20087), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
WoodenSupportTransitionType::Up60DegToUp25Deg);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_SQUARE_7);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height + 24, TUNNEL_SQUARE_8);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
}
/** rct2: 0x0071C004 */
static void MineTrainRCTrack25DegUpToFlat(
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(20098), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20099), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20100), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20101), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
}
}
else
{
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20070), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20071), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20072), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20073), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
}
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
WoodenSupportTransitionType::Up25DegToFlat);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_SQUARE_FLAT);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_14);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20);
}
/** rct2: 0x0071C014 */
static void MineTrainRCTrack25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
MineTrainRCTrack25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x0071C024 */
static void MineTrainRCTrack60DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
MineTrainRCTrack60DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x0071C034 */
static void MineTrainRCTrackFlatTo25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
MineTrainRCTrack25DegUpToFlat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x0071C044 */
static void MineTrainRCTrack25DegDownTo60DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
MineTrainRCTrack60DegUpTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x0071C054 */
static void MineTrainRCTrack60DegDownTo25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
MineTrainRCTrack25DegUpTo60DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x0071C064 */
static void MineTrainRCTrack25DegDownToFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
MineTrainRCTrackFlatTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x0071C0B4 */
static void MineTrainRCTrackLeftQuarterTurn5(
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(20155), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20160), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20165), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20150), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::rightCorner, PaintSegment::topRightSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20154), { 0, 0, height }, { 32, 16, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20159), { 0, 0, height }, { 32, 16, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20164), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20149), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, 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(20153), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20158), { 0, 0, height },
{ { 16, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20163), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20148), { 0, 0, height }, { 16, 16, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre,
PaintSegment::topLeftSide, PaintSegment::topRightSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 4:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::rightCorner, PaintSegment::topRightSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 5:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20152), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20157), { 0, 0, height }, { 16, 32, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20162), { 0, 0, height }, { 16, 32, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20147), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
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(20151), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20156), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20161), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20146), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
}
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_FLAT);
break;
case 3:
PaintUtilPushTunnelLeft(session, height, TUNNEL_SQUARE_FLAT);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C0C4 */
static void MineTrainRCTrackRightQuarterTurn5(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
MineTrainRCTrackLeftQuarterTurn5(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
}
/** rct2: 0x0071C074 */
static void MineTrainRCTrackFlatToLeftBank(
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(20106), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20114), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20107), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20115), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20108), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20109), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
}
/** rct2: 0x0071C084 */
static void MineTrainRCTrackFlatToRightBank(
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(20110), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20111), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20112), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20116), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20113), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20117), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
}
/** rct2: 0x0071C094 */
static void MineTrainRCTrackLeftBankToFlat(
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(20112), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20116), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20113), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20117), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20110), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20111), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
}
/** rct2: 0x0071C0A4 */
static void MineTrainRCTrackRightBankToFlat(
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(20108), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20109), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20106), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20114), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20107), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20115), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
}
/** rct2: 0x0071C0D4 */
static void MineTrainRCTrackBankedLeftQuarterTurn5(
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(20175), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20186), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20180), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20185), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20170), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::rightCorner, PaintSegment::topRightSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20174), { 0, 0, height }, { 32, 16, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20179), { 0, 0, height },
{ { 0, 0, height + 27 }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20184), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20169), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, 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(20173), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20178), { 0, 0, height },
{ { 16, 16, height + 27 }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20183), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20168), { 0, 0, height }, { 16, 16, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre,
PaintSegment::topLeftSide, PaintSegment::topRightSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 4:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::rightCorner, PaintSegment::topRightSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 5:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20172), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20177), { 0, 0, height },
{ { 0, 0, height + 27 }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20182), { 0, 0, height }, { 16, 32, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20167), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
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(20171), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20176), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20181), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20187), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20166), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
}
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_FLAT);
break;
case 3:
PaintUtilPushTunnelLeft(session, height, TUNNEL_SQUARE_FLAT);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C0E4 */
static void MineTrainRCTrackBankedRightQuarterTurn5(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
MineTrainRCTrackBankedLeftQuarterTurn5(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
}
/** rct2: 0x0071C204 */
static void MineTrainRCTrackLeftBankTo25DegUp(
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(20118), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20122), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 34 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20119), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20123), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 34 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20120), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20121), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
WoodenSupportTransitionType::FlatToUp25Deg);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_8);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
}
/** rct2: 0x0071C214 */
static void MineTrainRCTrackRightBankTo25DegUp(
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(20124), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20125), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20126), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20128), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 34 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20127), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20129), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 34 } });
break;
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
WoodenSupportTransitionType::FlatToUp25Deg);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_8);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
}
/** rct2: 0x0071C224 */
static void MineTrainRCTrack25DegUpToLeftBank(
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(20130), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20134), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 34 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20131), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20135), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 34 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20132), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20133), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
WoodenSupportTransitionType::Up25DegToFlat);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_SQUARE_FLAT);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_14);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20);
}
/** rct2: 0x0071C234 */
static void MineTrainRCTrack25DegUpToRightBank(
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(20136), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20137), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20138), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20140), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 34 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20139), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20141), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 34 } });
break;
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
WoodenSupportTransitionType::Up25DegToFlat);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_SQUARE_FLAT);
}
else
{
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_14);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 40, 0x20);
}
/** rct2: 0x0071C244 */
static void MineTrainRCTrackLeftBankTo25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
MineTrainRCTrack25DegUpToRightBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x0071C254 */
static void MineTrainRCTrackRightBankTo25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
MineTrainRCTrack25DegUpToLeftBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x0071C264 */
static void MineTrainRCTrack25DegDownToLeftBank(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
MineTrainRCTrackRightBankTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x0071C274 */
static void MineTrainRCTrack25DegDownToRightBank(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
MineTrainRCTrackLeftBankTo25DegUp(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x0071C304 */
static void MineTrainRCTrackLeftBank(
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(20142), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20143), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20144), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20145), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
}
/** rct2: 0x0071C314 */
static void MineTrainRCTrackRightBank(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
MineTrainRCTrackLeftBank(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x0071C0F4 */
static void MineTrainRCTrackLeftQuarterTurn525DegUp(
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(20250), { 0, 0, height },
{ { 0, 2, height }, { 32, 27, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20255), { 0, 0, height },
{ { 0, 2, height }, { 32, 27, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20260), { 0, 0, height },
{ { 0, 2, height }, { 32, 27, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20265), { 0, 0, height },
{ { 0, 2, height }, { 32, 27, 1 } });
break;
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
WoodenSupportTransitionType::Up25Deg);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_SQUARE_7);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 1:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::rightCorner, PaintSegment::topRightSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20251), { 0, 0, height },
{ { 0, 0, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20256), { 0, 0, height },
{ { 0, 0, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20261), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20266), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, 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 + 72, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20252), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20257), { 0, 0, height },
{ { 16, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20262), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20267), { 0, 0, height },
{ { 0, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre,
PaintSegment::topLeftSide, PaintSegment::topRightSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
break;
case 4:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::rightCorner, PaintSegment::topRightSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 5:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20253), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20258), { 0, 0, height },
{ { 0, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20263), { 0, 0, height },
{ { 0, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20268), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
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(20254), { 0, 0, height },
{ { 2, 0, height }, { 27, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours,
WoodenSupportTransitionType::Up25Deg, 3);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20259), { 0, 0, height },
{ { 2, 0, height }, { 27, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours,
WoodenSupportTransitionType::Up25Deg, 0);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20264), { 0, 0, height },
{ { 2, 0, height }, { 27, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours,
WoodenSupportTransitionType::Up25Deg, 1);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20269), { 0, 0, height },
{ { 2, 0, height }, { 27, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours,
WoodenSupportTransitionType::Up25Deg, 2);
break;
}
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_SQUARE_8);
break;
case 3:
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_SQUARE_8);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
}
}
/** rct2: 0x0071C104 */
static void MineTrainRCTrackRightQuarterTurn525DegUp(
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(20230), { 0, 0, height },
{ { 0, 2, height }, { 32, 27, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20235), { 0, 0, height },
{ { 0, 2, height }, { 32, 27, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20240), { 0, 0, height },
{ { 0, 2, height }, { 32, 27, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20245), { 0, 0, height },
{ { 0, 2, height }, { 32, 27, 1 } });
break;
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
WoodenSupportTransitionType::Up25Deg);
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_SQUARE_7);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 1:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::topCorner, PaintSegment::topLeftSide, PaintSegment::topRightSide), direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20231), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20236), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20241), { 0, 0, height },
{ { 0, 0, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20246), { 0, 0, height },
{ { 0, 0, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, 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 + 72, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20232), { 0, 0, height },
{ { 0, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20237), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20242), { 0, 0, height },
{ { 16, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20247), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::rightCorner, PaintSegment::centre,
PaintSegment::topLeftSide, PaintSegment::topRightSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 64, 0x20);
break;
case 4:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::topCorner, PaintSegment::topLeftSide, PaintSegment::topRightSide), direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 5:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20233), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20238), { 0, 0, height },
{ { 0, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20243), { 0, 0, height },
{ { 0, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20248), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
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(20234), { 0, 0, height },
{ { 2, 0, height }, { 27, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours,
WoodenSupportTransitionType::Up25Deg, 1);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20239), { 0, 0, height },
{ { 2, 0, height }, { 27, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours,
WoodenSupportTransitionType::Up25Deg, 2);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20244), { 0, 0, height },
{ { 2, 0, height }, { 27, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours,
WoodenSupportTransitionType::Up25Deg, 3);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20249), { 0, 0, height },
{ { 2, 0, height }, { 27, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours,
WoodenSupportTransitionType::Up25Deg, 0);
break;
}
switch (direction)
{
case 0:
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_SQUARE_8);
break;
case 1:
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_SQUARE_8);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
}
}
/** rct2: 0x0071C114 */
static void MineTrainRCTrackLeftQuarterTurn525DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
MineTrainRCTrackRightQuarterTurn525DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement);
}
/** rct2: 0x0071C124 */
static void MineTrainRCTrackRightQuarterTurn525DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
MineTrainRCTrackLeftQuarterTurn525DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
}
/** rct2: 0x0071C134 */
static void MineTrainRCTrackSBendLeft(
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(20270), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20274), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20273), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20277), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20271), { 0, 0, height }, { 32, 26, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20275), { 0, 0, height }, { 32, 26, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20272), { 0, 0, height },
{ { 0, 6, height }, { 32, 26, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20276), { 0, 0, height },
{ { 0, 6, height }, { 32, 26, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, 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 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20272), { 0, 0, height },
{ { 0, 6, height }, { 32, 26, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20276), { 0, 0, height },
{ { 0, 6, height }, { 32, 26, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20271), { 0, 0, height }, { 32, 26, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20275), { 0, 0, height }, { 32, 26, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, 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(20273), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20277), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20270), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20274), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
switch (direction)
{
case 1:
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_FLAT);
break;
case 2:
PaintUtilPushTunnelLeft(session, height, TUNNEL_SQUARE_FLAT);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C144 */
static void MineTrainRCTrackSBendRight(
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(20278), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20282), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20281), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20285), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20279), { 0, 0, height },
{ { 0, 6, height }, { 32, 26, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20283), { 0, 0, height },
{ { 0, 6, height }, { 32, 26, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20280), { 0, 0, height }, { 32, 26, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20284), { 0, 0, height }, { 32, 26, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, 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 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20280), { 0, 0, height }, { 32, 26, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20284), { 0, 0, height }, { 32, 26, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20279), { 0, 0, height },
{ { 0, 6, height }, { 32, 26, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20283), { 0, 0, height },
{ { 0, 6, height }, { 32, 26, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, 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(20281), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20285), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20278), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20282), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
switch (direction)
{
case 1:
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_FLAT);
break;
case 2:
PaintUtilPushTunnelLeft(session, height, TUNNEL_SQUARE_FLAT);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C184 */
static void MineTrainRCTrackLeftQuarterTurn3(
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(20193), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20196), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20199), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20190), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, direction, height, session.SupportColours);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20192), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20195), { 0, 0, height }, { 16, 16, 1 });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20198), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20189), { 0, 0, height },
{ { 16, 16, height }, { 16, 16, 1 } });
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(20191), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20194), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20197), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20188), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
}
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_FLAT);
break;
case 3:
PaintUtilPushTunnelLeft(session, height, TUNNEL_SQUARE_FLAT);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C194 */
static void MineTrainRCTrackRightQuarterTurn3(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
MineTrainRCTrackLeftQuarterTurn3(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
}
/** rct2: 0x0071C1A4 */
static void MineTrainRCTrackLeftQuarterTurn3Bank(
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(20205), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20212), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20208), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20211), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20202), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, direction, height, session.SupportColours);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20204), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20207), { 0, 0, height },
{ { 0, 0, height + 27 }, { 16, 16, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20210), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20201), { 0, 0, height },
{ { 16, 16, height }, { 16, 16, 1 } });
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(20203), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20206), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20209), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20213), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20200), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
}
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_FLAT);
break;
case 3:
PaintUtilPushTunnelLeft(session, height, TUNNEL_SQUARE_FLAT);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C1B4 */
static void MineTrainRCTrackRightQuarterTurn3Bank(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
MineTrainRCTrackLeftQuarterTurn3Bank(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
}
/** rct2: 0x0071C1C4 */
static void MineTrainRCTrackLeftQuarterTurn325DegUp(
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(20225), { 0, 6, height }, { 32, 20, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20227), { 0, 6, height }, { 32, 20, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20229), { 0, 6, height }, { 32, 20, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20223), { 0, 6, height }, { 32, 20, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_SQUARE_7);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 1:
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, direction, height, session.SupportColours);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 2:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20224), { 6, 0, height }, { 20, 32, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20226), { 6, 0, height }, { 20, 32, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20228), { 6, 0, height }, { 20, 32, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20222), { 6, 0, height }, { 20, 32, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
}
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_SQUARE_8);
break;
case 3:
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_SQUARE_8);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
}
}
/** rct2: 0x0071C1D4 */
static void MineTrainRCTrackRightQuarterTurn325DegUp(
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(20214), { 0, 6, height }, { 32, 20, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20216), { 0, 6, height }, { 32, 20, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20218), { 0, 6, height }, { 32, 20, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20220), { 0, 6, height }, { 32, 20, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_SQUARE_7);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 1:
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 2:
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:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20215), { 6, 0, height }, { 20, 32, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20217), { 6, 0, height }, { 20, 32, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20219), { 6, 0, height }, { 20, 32, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20221), { 6, 0, height }, { 20, 32, 1 });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
}
switch (direction)
{
case 0:
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_SQUARE_8);
break;
case 1:
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_SQUARE_8);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
}
}
/** rct2: 0x0071C1E4 */
static void MineTrainRCTrackLeftQuarterTurn325DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
MineTrainRCTrackRightQuarterTurn325DegUp(session, ride, trackSequence, (direction + 1) & 3, height, trackElement);
}
/** rct2: 0x0071C1F4 */
static void MineTrainRCTrackRightQuarterTurn325DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
MineTrainRCTrackLeftQuarterTurn325DegUp(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
}
/** rct2: 0x0071C284 */
static void MineTrainRCTrackLeftHalfBankedHelixUpSmall(
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(20305), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20312), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20308), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20311), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20302), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner,
PaintSegment::bottomRightSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, direction, height, session.SupportColours);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20304), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20307), { 0, 0, height },
{ { 0, 0, height + 27 }, { 16, 16, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20310), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20301), { 0, 0, height },
{ { 16, 16, height }, { 16, 16, 1 } });
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(20303), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20306), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20309), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20313), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20300), { 0, 0, height },
{ { 6, 0, height + 8 }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
}
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_SQUARE_FLAT);
break;
case 3:
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_SQUARE_FLAT);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::rightCorner,
PaintSegment::topRightSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 4:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20302), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20305), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20312), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20308), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20311), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
}
switch (direction)
{
case 0:
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_FLAT);
break;
case 1:
PaintUtilPushTunnelLeft(session, height, TUNNEL_SQUARE_FLAT);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner,
PaintSegment::topRightSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 5:
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 6:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20301), { 0, 0, height },
{ { 16, 16, height }, { 16, 16, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20304), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20307), { 0, 0, height },
{ { 0, 0, height + 27 }, { 16, 16, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20310), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
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(20300), { 0, 0, height },
{ { 0, 6, height + 8 }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20303), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20306), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20309), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20313), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::bottomCorner,
PaintSegment::topLeftSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C294 */
static void MineTrainRCTrackRightHalfBankedHelixUpSmall(
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(20286), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20289), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20292), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20295), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20299), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::bottomCorner,
PaintSegment::topLeftSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20287), { 0, 0, height },
{ { 16, 16, height }, { 16, 16, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20290), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20293), { 0, 0, height },
{ { 0, 0, height + 27 }, { 16, 16, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20296), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
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(20288), { 0, 0, height },
{ { 6, 0, height + 8 }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20291), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20298), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20294), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20297), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
}
switch (direction)
{
case 0:
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_SQUARE_FLAT);
break;
case 1:
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_SQUARE_FLAT);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner,
PaintSegment::topRightSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 4:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20289), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20292), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20295), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20299), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20286), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
}
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_FLAT);
break;
case 3:
PaintUtilPushTunnelLeft(session, height, TUNNEL_SQUARE_FLAT);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::rightCorner,
PaintSegment::topRightSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 5:
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, direction, height, session.SupportColours);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 6:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20290), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20293), { 0, 0, height },
{ { 0, 0, height + 27 }, { 16, 16, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20296), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20287), { 0, 0, height },
{ { 16, 16, height }, { 16, 16, 1 } });
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(20291), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20298), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20294), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20297), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20288), { 0, 0, height },
{ { 0, 6, height + 8 }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner,
PaintSegment::bottomRightSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C2A4 */
static void MineTrainRCTrackLeftHalfBankedHelixDownSmall(
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];
MineTrainRCTrackRightHalfBankedHelixUpSmall(session, ride, trackSequence, (direction + 1) & 3, height, trackElement);
}
/** rct2: 0x0071C2B4 */
static void MineTrainRCTrackRightHalfBankedHelixDownSmall(
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];
MineTrainRCTrackLeftHalfBankedHelixUpSmall(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
}
/** rct2: 0x0071C2C4 */
static void MineTrainRCTrackLeftHalfBankedHelixUpLarge(
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(20345), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20356), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20350), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20355), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20340), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner,
PaintSegment::bottomRightSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::rightCorner, PaintSegment::topRightSide, PaintSegment::bottomRightSide),
direction),
48, 0x20);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20344), { 0, 0, height },
{ { 0, 0, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20349), { 0, 0, height },
{ { 0, 0, height + 27 }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20354), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20339), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, 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(20343), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20348), { 0, 0, height },
{ { 16, 16, height + 27 }, { 16, 16, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20178), { 0, 0, height },
{ { 16, 16, height + 27 }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20353), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20338), { 0, 0, height },
{ { 0, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::bottomCorner, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 4:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::rightCorner, PaintSegment::topRightSide, PaintSegment::bottomRightSide),
direction),
48, 0x20);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 5:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20342), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20347), { 0, 0, height },
{ { 0, 0, height + 27 }, { 16, 32, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20177), { 0, 0, height },
{ { 0, 0, height + 27 }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20352), { 0, 0, height },
{ { 0, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20337), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
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(20341), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20346), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20351), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20357), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20336), { 0, 0, height },
{ { 6, 0, height + 8 }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
}
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_SQUARE_FLAT);
break;
case 3:
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_SQUARE_FLAT);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::rightCorner,
PaintSegment::topRightSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 7:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20340), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20345), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20356), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20350), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20355), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
}
switch (direction)
{
case 0:
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_FLAT);
break;
case 1:
PaintUtilPushTunnelLeft(session, height, TUNNEL_SQUARE_FLAT);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner,
PaintSegment::topRightSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 8:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::topCorner, PaintSegment::topLeftSide, PaintSegment::topRightSide), direction),
48, 0x20);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 9:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20339), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20344), { 0, 0, height },
{ { 0, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20349), { 0, 0, height },
{ { 0, 0, height + 27 }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20354), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
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(20338), { 0, 0, height },
{ { 0, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20343), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20348), { 0, 0, height },
{ { 16, 16, height + 27 }, { 16, 16, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20178), { 0, 0, height },
{ { 16, 16, height + 27 }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20353), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::rightCorner, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 11:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::topCorner, PaintSegment::topLeftSide, PaintSegment::topRightSide), direction),
48, 0x20);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 12:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20337), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20342), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20347), { 0, 0, height },
{ { 0, 0, height + 27 }, { 32, 16, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20177), { 0, 0, height },
{ { 0, 0, height + 27 }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20352), { 0, 0, height },
{ { 0, 0, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, 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 13:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20336), { 0, 0, height },
{ { 0, 6, height + 8 }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20341), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20346), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20351), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20357), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::bottomCorner,
PaintSegment::topLeftSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C2D4 */
static void MineTrainRCTrackRightHalfBankedHelixUpLarge(
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(20314), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20319), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20324), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20329), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20335), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::bottomCorner,
PaintSegment::topLeftSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::topCorner, PaintSegment::topLeftSide, PaintSegment::topRightSide), direction),
48, 0x20);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20315), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20320), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20325), { 0, 0, height },
{ { 0, 0, height + 27 }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20330), { 0, 0, height },
{ { 0, 0, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, 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(20316), { 0, 0, height },
{ { 0, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20321), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20326), { 0, 0, height },
{ { 16, 16, height + 27 }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20331), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::rightCorner, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 4:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::topCorner, PaintSegment::topLeftSide, PaintSegment::topRightSide), direction),
48, 0x20);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 5:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20317), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20322), { 0, 0, height },
{ { 0, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20327), { 0, 0, height },
{ { 0, 0, height + 27 }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20332), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
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(20318), { 0, 0, height },
{ { 6, 0, height + 8 }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20323), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20334), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20328), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20333), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
}
switch (direction)
{
case 0:
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_SQUARE_FLAT);
break;
case 1:
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_SQUARE_FLAT);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner,
PaintSegment::topRightSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 7:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20319), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20324), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20329), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20335), { 0, 0, height },
{ { 27, 0, height }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20314), { 0, 0, height },
{ { 6, 0, height }, { 20, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
}
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_FLAT);
break;
case 3:
PaintUtilPushTunnelLeft(session, height, TUNNEL_SQUARE_FLAT);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::leftCorner, PaintSegment::rightCorner,
PaintSegment::topRightSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 8:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::rightCorner, PaintSegment::topRightSide, PaintSegment::bottomRightSide),
direction),
48, 0x20);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 9:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20320), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20325), { 0, 0, height },
{ { 0, 0, height + 27 }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20330), { 0, 0, height },
{ { 0, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20315), { 0, 0, height },
{ { 16, 0, height }, { 16, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
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(20321), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20326), { 0, 0, height },
{ { 16, 16, height + 27 }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20331), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20316), { 0, 0, height },
{ { 0, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::bottomCorner, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 11:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(PaintSegment::rightCorner, PaintSegment::topRightSide, PaintSegment::bottomRightSide),
direction),
48, 0x20);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 12:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20322), { 0, 0, height },
{ { 0, 0, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20327), { 0, 0, height },
{ { 0, 0, height + 27 }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20332), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20317), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, 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 13:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20323), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20334), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20328), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20333), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20318), { 0, 0, height },
{ { 0, 6, height + 8 }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height + 8, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::rightCorner, PaintSegment::bottomCorner,
PaintSegment::bottomRightSide),
direction),
48, 0x20);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C2E4 */
static void MineTrainRCTrackLeftHalfBankedHelixDownLarge(
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 = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
MineTrainRCTrackRightHalfBankedHelixUpLarge(session, ride, trackSequence, (direction + 1) & 3, height, trackElement);
}
/** rct2: 0x0071C2F4 */
static void MineTrainRCTrackRightHalfBankedHelixDownLarge(
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 = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
MineTrainRCTrackLeftHalfBankedHelixUpLarge(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
}
/** rct2: 0x0071C324 */
static void MineTrainRCTrackBrakes(
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(20058), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20059), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
}
/** rct2: 0x0071C334 */
static void MineTrainRCTrackOnRidePhoto(
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(20052), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20053), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20052), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20053), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
TrackPaintUtilOnridePhotoPaint(session, direction, height + 2, trackElement);
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
}
/** rct2: 0x0071C354 */
static void MineTrainRCTrackLeftEighthToDiag(
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(20452), { 0, 0, height },
{ { 0, 0, height }, { 32, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20456), { 0, 0, height },
{ { 0, 0, height }, { 32, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20460), { 0, 0, height },
{ { 0, 0, height }, { 32, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20464), { 0, 0, height },
{ { 0, 0, height }, { 32, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20453), { 0, 0, height },
{ { 0, 0, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20457), { 0, 0, height },
{ { 0, 0, height }, { 34, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20461), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20465), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20454), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20458), { 0, 0, height },
{ { 16, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20462), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20466), { 0, 0, height },
{ { 0, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 3:
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 4:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20455), { 0, 0, height },
{ { 16, 16, height }, { 16, 16, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20459), { 0, 0, height },
{ { 0, 16, height }, { 16, 18, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20463), { 0, 0, height },
{ { 0, 0, height }, { 16, 16, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20467), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C364 */
static void MineTrainRCTrackRightEighthToDiag(
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(20436), { 0, 0, height },
{ { 0, 0, height }, { 32, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20440), { 0, 0, height },
{ { 0, 0, height }, { 32, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20444), { 0, 0, height },
{ { 0, 0, height }, { 32, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20448), { 0, 0, height },
{ { 0, 0, height }, { 32, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20437), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20441), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20445), { 0, 0, height },
{ { 0, 0, height }, { 34, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20449), { 0, 0, height },
{ { 0, 0, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20438), { 0, 0, height },
{ { 0, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20442), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20446), { 0, 0, height },
{ { 4, 4, height }, { 28, 28, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20450), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 3:
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 4:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20439), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20443), { 0, 0, height },
{ { 0, 0, height }, { 16, 16, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20447), { 0, 0, height },
{ { 0, 16, height }, { 16, 18, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20451), { 0, 0, height },
{ { 16, 16, height }, { 16, 16, 1 } });
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C374 */
static void MineTrainRCTrackLeftEighthToOrthogonal(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
MineTrainRCTrackRightEighthToDiag(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x0071C384 */
static void MineTrainRCTrackRightEighthToOrthogonal(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
MineTrainRCTrackLeftEighthToDiag(session, ride, trackSequence, (direction + 3) & 3, height, trackElement);
}
/** rct2: 0x0071C394 */
static void MineTrainRCTrackLeftEighthBankToDiag(
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(20484), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20488), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20492), { 0, 0, height },
{ { 0, 0, height }, { 32, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20496), { 0, 0, height },
{ { 0, 27, height }, { 32, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20485), { 0, 0, height },
{ { 0, 0, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20489), { 0, 0, height },
{ { 0, 0, height + 27 }, { 34, 16, 0 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20493), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20497), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20486), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20490), { 0, 0, height },
{ { 16, 16, height + 27 }, { 16, 16, 0 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20494), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20498), { 0, 0, height },
{ { 0, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 3:
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 4:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20487), { 0, 0, height },
{ { 16, 16, height }, { 16, 16, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20491), { 0, 0, height },
{ { 0, 16, height + 27 }, { 16, 18, 0 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20495), { 0, 0, height },
{ { 0, 0, height }, { 16, 16, 1 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20499), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C3A4 */
static void MineTrainRCTrackRightEighthBankToDiag(
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(20468), { 0, 0, height },
{ { 0, 0, height }, { 32, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20472), { 0, 0, height },
{ { 0, 0, height }, { 32, 32, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20476), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20480), { 0, 0, height },
{ { 0, 27, height }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20469), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20473), { 0, 0, height },
{ { 0, 16, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20477), { 0, 0, height },
{ { 0, 0, height + 27 }, { 34, 16, 0 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20481), { 0, 0, height },
{ { 0, 0, height }, { 32, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::NwSe, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20470), { 0, 0, height },
{ { 0, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20474), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20478), { 0, 0, height },
{ { 4, 4, height + 27 }, { 28, 28, 0 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20482), { 0, 0, height },
{ { 0, 16, height }, { 16, 16, 1 } });
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 3:
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 4:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20471), { 0, 0, height },
{ { 16, 0, height }, { 16, 16, 1 } });
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20475), { 0, 0, height },
{ { 0, 0, height }, { 16, 16, 1 } });
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20479), { 0, 0, height },
{ { 0, 16, height + 27 }, { 16, 18, 0 } });
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20483), { 0, 0, height },
{ { 16, 16, height }, { 16, 16, 1 } });
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C3B4 */
static void MineTrainRCTrackLeftEighthBankToOrthogonal(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
MineTrainRCTrackRightEighthBankToDiag(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
}
/** rct2: 0x0071C3C4 */
static void MineTrainRCTrackRightEighthBankToOrthogonal(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
MineTrainRCTrackLeftEighthBankToDiag(session, ride, trackSequence, (direction + 3) & 3, height, trackElement);
}
/** rct2: 0x0071C344 */
static void MineTrainRCTrackDiagFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20389 : 20361;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
if (direction == 0)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20386 : 20358;
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
if (direction == 2)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20388 : 20360;
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 3:
if (direction == 1)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20387 : 20359;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
static void MineTrainRCTrackDiagBrakes(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
TrackPaintUtilDiagTilesPaint(
session, 1, height, direction, trackSequence, MinetrainRCDiagBrakeImages, defaultDiagTileOffsets,
defaultDiagBoundLengths, nullptr);
if (MineTrainRCDiagonalSupports[trackSequence][direction] != WoodenSupportSubType::Null)
{
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, MineTrainRCDiagonalSupports[trackSequence][0], height, session.SupportColours);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
}
static void MineTrainRCTrackDiagBlockBrakes(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
TrackPaintUtilDiagTilesPaint(
session, 13, height, direction, trackSequence, MinetrainRCDiagBlockBrakeImages[trackElement.IsBrakeClosed()],
defaultDiagTileOffsets, defaultDiagBoundLengths, nullptr);
if (MineTrainRCDiagonalSupports[trackSequence][direction] != WoodenSupportSubType::Null)
{
WoodenASupportsPaintSetup(
session, WoodenSupportType::Mine, MineTrainRCDiagonalSupports[trackSequence][direction], height,
session.SupportColours);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
}
/** rct2: 0x0071C414 */
static void MineTrainRCTrackDiag25DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20401 : 20373;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 1:
if (direction == 0)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20398 : 20370;
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 2:
if (direction == 2)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20400 : 20372;
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 3:
if (direction == 1)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20399 : 20371;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
}
}
/** rct2: 0x0071C474 */
static void MineTrainRCTrackDiag60DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20385), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20382), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20384), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20383), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
break;
}
}
/** rct2: 0x0071C3F4 */
static void MineTrainRCTrackDiagFlatTo25DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20393 : 20365;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
if (direction == 0)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20390 : 20362;
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
if (direction == 2)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20392 : 20364;
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
if (direction == 1)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20391 : 20363;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x0071C454 */
static void MineTrainRCTrackDiag25DegUpTo60DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20377), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20374), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20376), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20375), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
}
}
/** rct2: 0x0071C464 */
static void MineTrainRCTrackDiag60DegUpTo25DegUp(
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(20381), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20378), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20380), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20379), { -16, -16, height },
{ { 0, 0, height }, { 16, 16, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
}
}
/** rct2: 0x0071C404 */
static void MineTrainRCTrackDiag25DegUpToFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20397 : 20369;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 1:
if (direction == 0)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20394 : 20366;
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 2:
if (direction == 2)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20396 : 20368;
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 3:
if (direction == 1)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20395 : 20367;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
}
}
/** rct2: 0x0071C444 */
static void MineTrainRCTrackDiag25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20399 : 20371;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 1:
if (direction == 0)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20400 : 20372;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 2:
if (direction == 2)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20398 : 20370;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 3:
if (direction == 1)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20401 : 20373;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
}
}
/** rct2: 0x0071C4A4 */
static void MineTrainRCTrackDiag60DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20383), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20384), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20382), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20385), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 104, 0x20);
break;
}
}
/** rct2: 0x0071C424 */
static void MineTrainRCTrackDiagFlatTo25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20395 : 20367;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
break;
case 1:
if (direction == 0)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20396 : 20368;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
break;
case 2:
if (direction == 2)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20394 : 20366;
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
break;
case 3:
if (direction == 1)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20397 : 20369;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
break;
}
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
}
/** rct2: 0x0071C484 */
static void MineTrainRCTrackDiag25DegDownTo60DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20379), { -16, -16, height },
{ { 0, 0, height }, { 16, 16, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20380), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20378), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20381), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
}
}
/** rct2: 0x0071C494 */
static void MineTrainRCTrackDiag60DegDownTo25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20375), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20376), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20374), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20377), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 72, 0x20);
break;
}
}
/** rct2: 0x0071C434 */
static void MineTrainRCTrackDiag25DegDownToFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20391 : 20363;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
if (direction == 0)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20392 : 20364;
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
if (direction == 2)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20390 : 20362;
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
if (direction == 1)
{
ImageIndex imageIndex = trackElement.HasChain() ? 20393 : 20365;
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(imageIndex), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x0071C4D4 */
static void MineTrainRCTrackDiagFlatToLeftBank(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20409), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20406), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20410), { -16, -16, height },
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20408), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20407), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C4B4 */
static void MineTrainRCTrackDiagFlatToRightBank(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20414), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20411), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20413), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20415), { -16, -16, height },
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20412), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C4C4 */
static void MineTrainRCTrackDiagLeftBankToFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20412), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20413), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20415), { -16, -16, height },
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20411), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20414), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C4E4 */
static void MineTrainRCTrackDiagRightBankToFlat(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20407), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20408), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20406), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20410), { -16, -16, height },
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20409), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C514 */
static void MineTrainRCTrackDiagLeftBankTo25DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20429), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20426), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20430), { -16, -16, height },
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20428), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20427), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x0071C524 */
static void MineTrainRCTrackDiagRightBankTo25DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20434), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20431), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20433), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20435), { -16, -16, height },
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20432), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x0071C4F4 */
static void MineTrainRCTrackDiag25DegUpToLeftBank(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20419), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20416), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20420), { -16, -16, height },
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20418), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20417), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
}
}
/** rct2: 0x0071C504 */
static void MineTrainRCTrackDiag25DegUpToRightBank(
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(20424), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20421), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20423), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20425), { -16, -16, height },
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height + 16,
session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20422), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
break;
}
}
/** rct2: 0x0071C534 */
static void MineTrainRCTrackDiagLeftBankTo25DegDown(
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(20422), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
break;
}
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20423), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20425), { -16, -16, height },
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height + 16,
session.SupportColours);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20421), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height + 16,
session.SupportColours);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20424), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
}
/** rct2: 0x0071C544 */
static void MineTrainRCTrackDiagRightBankTo25DegDown(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20417), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20418), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height + 16,
session.SupportColours);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20416), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20420), { -16, -16, height },
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
}
WoodenBSupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height + 16,
session.SupportColours);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20419), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20);
}
/** rct2: 0x0071C554 */
static void MineTrainRCTrackDiag25DegDownToLeftBank(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20432), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20433), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20435), { -16, -16, height },
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20431), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20434), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x0071C564 */
static void MineTrainRCTrackDiag25DegDownToRightBank(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20427), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20428), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20426), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20430), { -16, -16, height },
{ { -16, -16, height + 35 }, { 32, 32, 0 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20429), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 1 } });
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48, 0x20);
break;
}
}
/** rct2: 0x0071C3D4 */
static void MineTrainRCTrackDiagLeftBank(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20405), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
}
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20402), { -16, -16, height },
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20404), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20403), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
}
break;
}
PaintUtilSetSegmentSupportHeight(
session, PaintUtilRotateSegments(BlockedSegments::kDiagStraightFlat[trackSequence], direction), 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
}
/** rct2: 0x0071C3E4 */
static void MineTrainRCTrackDiagRightBank(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
switch (trackSequence)
{
case 0:
if (direction == 3)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20403), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::rightCorner, PaintSegment::centre, PaintSegment::topRightSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 1:
if (direction == 0)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20404), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner0, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::topCorner, PaintSegment::centre, PaintSegment::topLeftSide, PaintSegment::topRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 2:
if (direction == 2)
{
PaintAddImageAsParent(
session, session.TrackColours.WithIndex(20402), { -16, -16, height },
{ { -16, -16, height + 27 }, { 32, 32, 0 } });
}
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::Corner2, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
case 3:
if (direction == 1)
{
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(20405), { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 3 } });
}
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
break;
}
}
/** rct2: 0x0071C574 */
static void MineTrainRCTrackBlockBrakes(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement)
{
bool isClosed = trackElement.IsBrakeClosed();
PaintAddImageAsParentRotated(
session, direction, session.TrackColours.WithIndex(_MineTrainBlockBrakeImages[direction][isClosed]), { 0, 0, height },
{ { 0, 6, height }, { 32, 20, 1 } });
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Mine, WoodenSupportSubType::NeSw, direction, height, session.SupportColours);
PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_SQUARE_FLAT);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
}
TRACK_PAINT_FUNCTION GetTrackPaintFunctionMineTrainRC(int32_t trackType)
{
switch (trackType)
{
case TrackElemType::Flat:
return MineTrainRCTrackFlat;
case TrackElemType::EndStation:
case TrackElemType::BeginStation:
case TrackElemType::MiddleStation:
return MineTrainRCTrackStation;
case TrackElemType::Up25:
return MineTrainRCTrack25DegUp;
case TrackElemType::Up60:
return MineTrainRCTrack60DegUp;
case TrackElemType::FlatToUp25:
return MineTrainRCTrackFlatTo25DegUp;
case TrackElemType::Up25ToUp60:
return MineTrainRCTrack25DegUpTo60DegUp;
case TrackElemType::Up60ToUp25:
return MineTrainRCTrack60DegUpTo25DegUp;
case TrackElemType::Up25ToFlat:
return MineTrainRCTrack25DegUpToFlat;
case TrackElemType::Down25:
return MineTrainRCTrack25DegDown;
case TrackElemType::Down60:
return MineTrainRCTrack60DegDown;
case TrackElemType::FlatToDown25:
return MineTrainRCTrackFlatTo25DegDown;
case TrackElemType::Down25ToDown60:
return MineTrainRCTrack25DegDownTo60DegDown;
case TrackElemType::Down60ToDown25:
return MineTrainRCTrack60DegDownTo25DegDown;
case TrackElemType::Down25ToFlat:
return MineTrainRCTrack25DegDownToFlat;
case TrackElemType::LeftQuarterTurn5Tiles:
return MineTrainRCTrackLeftQuarterTurn5;
case TrackElemType::RightQuarterTurn5Tiles:
return MineTrainRCTrackRightQuarterTurn5;
case TrackElemType::FlatToLeftBank:
return MineTrainRCTrackFlatToLeftBank;
case TrackElemType::FlatToRightBank:
return MineTrainRCTrackFlatToRightBank;
case TrackElemType::LeftBankToFlat:
return MineTrainRCTrackLeftBankToFlat;
case TrackElemType::RightBankToFlat:
return MineTrainRCTrackRightBankToFlat;
case TrackElemType::BankedLeftQuarterTurn5Tiles:
return MineTrainRCTrackBankedLeftQuarterTurn5;
case TrackElemType::BankedRightQuarterTurn5Tiles:
return MineTrainRCTrackBankedRightQuarterTurn5;
case TrackElemType::LeftBankToUp25:
return MineTrainRCTrackLeftBankTo25DegUp;
case TrackElemType::RightBankToUp25:
return MineTrainRCTrackRightBankTo25DegUp;
case TrackElemType::Up25ToLeftBank:
return MineTrainRCTrack25DegUpToLeftBank;
case TrackElemType::Up25ToRightBank:
return MineTrainRCTrack25DegUpToRightBank;
case TrackElemType::LeftBankToDown25:
return MineTrainRCTrackLeftBankTo25DegDown;
case TrackElemType::RightBankToDown25:
return MineTrainRCTrackRightBankTo25DegDown;
case TrackElemType::Down25ToLeftBank:
return MineTrainRCTrack25DegDownToLeftBank;
case TrackElemType::Down25ToRightBank:
return MineTrainRCTrack25DegDownToRightBank;
case TrackElemType::LeftBank:
return MineTrainRCTrackLeftBank;
case TrackElemType::RightBank:
return MineTrainRCTrackRightBank;
case TrackElemType::LeftQuarterTurn5TilesUp25:
return MineTrainRCTrackLeftQuarterTurn525DegUp;
case TrackElemType::RightQuarterTurn5TilesUp25:
return MineTrainRCTrackRightQuarterTurn525DegUp;
case TrackElemType::LeftQuarterTurn5TilesDown25:
return MineTrainRCTrackLeftQuarterTurn525DegDown;
case TrackElemType::RightQuarterTurn5TilesDown25:
return MineTrainRCTrackRightQuarterTurn525DegDown;
case TrackElemType::SBendLeft:
return MineTrainRCTrackSBendLeft;
case TrackElemType::SBendRight:
return MineTrainRCTrackSBendRight;
case TrackElemType::LeftQuarterTurn3Tiles:
return MineTrainRCTrackLeftQuarterTurn3;
case TrackElemType::RightQuarterTurn3Tiles:
return MineTrainRCTrackRightQuarterTurn3;
case TrackElemType::LeftBankedQuarterTurn3Tiles:
return MineTrainRCTrackLeftQuarterTurn3Bank;
case TrackElemType::RightBankedQuarterTurn3Tiles:
return MineTrainRCTrackRightQuarterTurn3Bank;
case TrackElemType::LeftQuarterTurn3TilesUp25:
return MineTrainRCTrackLeftQuarterTurn325DegUp;
case TrackElemType::RightQuarterTurn3TilesUp25:
return MineTrainRCTrackRightQuarterTurn325DegUp;
case TrackElemType::LeftQuarterTurn3TilesDown25:
return MineTrainRCTrackLeftQuarterTurn325DegDown;
case TrackElemType::RightQuarterTurn3TilesDown25:
return MineTrainRCTrackRightQuarterTurn325DegDown;
case TrackElemType::LeftHalfBankedHelixUpSmall:
return MineTrainRCTrackLeftHalfBankedHelixUpSmall;
case TrackElemType::RightHalfBankedHelixUpSmall:
return MineTrainRCTrackRightHalfBankedHelixUpSmall;
case TrackElemType::LeftHalfBankedHelixDownSmall:
return MineTrainRCTrackLeftHalfBankedHelixDownSmall;
case TrackElemType::RightHalfBankedHelixDownSmall:
return MineTrainRCTrackRightHalfBankedHelixDownSmall;
case TrackElemType::LeftHalfBankedHelixUpLarge:
return MineTrainRCTrackLeftHalfBankedHelixUpLarge;
case TrackElemType::RightHalfBankedHelixUpLarge:
return MineTrainRCTrackRightHalfBankedHelixUpLarge;
case TrackElemType::LeftHalfBankedHelixDownLarge:
return MineTrainRCTrackLeftHalfBankedHelixDownLarge;
case TrackElemType::RightHalfBankedHelixDownLarge:
return MineTrainRCTrackRightHalfBankedHelixDownLarge;
case TrackElemType::Brakes:
return MineTrainRCTrackBrakes;
case TrackElemType::OnRidePhoto:
return MineTrainRCTrackOnRidePhoto;
case TrackElemType::LeftEighthToDiag:
return MineTrainRCTrackLeftEighthToDiag;
case TrackElemType::RightEighthToDiag:
return MineTrainRCTrackRightEighthToDiag;
case TrackElemType::LeftEighthToOrthogonal:
return MineTrainRCTrackLeftEighthToOrthogonal;
case TrackElemType::RightEighthToOrthogonal:
return MineTrainRCTrackRightEighthToOrthogonal;
case TrackElemType::LeftEighthBankToDiag:
return MineTrainRCTrackLeftEighthBankToDiag;
case TrackElemType::RightEighthBankToDiag:
return MineTrainRCTrackRightEighthBankToDiag;
case TrackElemType::LeftEighthBankToOrthogonal:
return MineTrainRCTrackLeftEighthBankToOrthogonal;
case TrackElemType::RightEighthBankToOrthogonal:
return MineTrainRCTrackRightEighthBankToOrthogonal;
case TrackElemType::DiagFlat:
return MineTrainRCTrackDiagFlat;
case TrackElemType::DiagUp25:
return MineTrainRCTrackDiag25DegUp;
case TrackElemType::DiagUp60:
return MineTrainRCTrackDiag60DegUp;
case TrackElemType::DiagFlatToUp25:
return MineTrainRCTrackDiagFlatTo25DegUp;
case TrackElemType::DiagUp25ToUp60:
return MineTrainRCTrackDiag25DegUpTo60DegUp;
case TrackElemType::DiagUp60ToUp25:
return MineTrainRCTrackDiag60DegUpTo25DegUp;
case TrackElemType::DiagUp25ToFlat:
return MineTrainRCTrackDiag25DegUpToFlat;
case TrackElemType::DiagDown25:
return MineTrainRCTrackDiag25DegDown;
case TrackElemType::DiagDown60:
return MineTrainRCTrackDiag60DegDown;
case TrackElemType::DiagFlatToDown25:
return MineTrainRCTrackDiagFlatTo25DegDown;
case TrackElemType::DiagDown25ToDown60:
return MineTrainRCTrackDiag25DegDownTo60DegDown;
case TrackElemType::DiagDown60ToDown25:
return MineTrainRCTrackDiag60DegDownTo25DegDown;
case TrackElemType::DiagDown25ToFlat:
return MineTrainRCTrackDiag25DegDownToFlat;
case TrackElemType::DiagFlatToLeftBank:
return MineTrainRCTrackDiagFlatToLeftBank;
case TrackElemType::DiagFlatToRightBank:
return MineTrainRCTrackDiagFlatToRightBank;
case TrackElemType::DiagLeftBankToFlat:
return MineTrainRCTrackDiagLeftBankToFlat;
case TrackElemType::DiagRightBankToFlat:
return MineTrainRCTrackDiagRightBankToFlat;
case TrackElemType::DiagLeftBankToUp25:
return MineTrainRCTrackDiagLeftBankTo25DegUp;
case TrackElemType::DiagRightBankToUp25:
return MineTrainRCTrackDiagRightBankTo25DegUp;
case TrackElemType::DiagUp25ToLeftBank:
return MineTrainRCTrackDiag25DegUpToLeftBank;
case TrackElemType::DiagUp25ToRightBank:
return MineTrainRCTrackDiag25DegUpToRightBank;
case TrackElemType::DiagLeftBankToDown25:
return MineTrainRCTrackDiagLeftBankTo25DegDown;
case TrackElemType::DiagRightBankToDown25:
return MineTrainRCTrackDiagRightBankTo25DegDown;
case TrackElemType::DiagDown25ToLeftBank:
return MineTrainRCTrackDiag25DegDownToLeftBank;
case TrackElemType::DiagDown25ToRightBank:
return MineTrainRCTrackDiag25DegDownToRightBank;
case TrackElemType::DiagLeftBank:
return MineTrainRCTrackDiagLeftBank;
case TrackElemType::DiagRightBank:
return MineTrainRCTrackDiagRightBank;
case TrackElemType::BlockBrakes:
return MineTrainRCTrackBlockBrakes;
case TrackElemType::DiagBrakes:
return MineTrainRCTrackDiagBrakes;
case TrackElemType::DiagBlockBrakes:
return MineTrainRCTrackDiagBlockBrakes;
}
return nullptr;
}