Implement Classic Wooden Twister small left bank to gentle up turn

This commit is contained in:
mix 2024-11-14 05:34:36 +00:00 committed by Gymnasiast
parent 7a26c9979a
commit 025be8c298
No known key found for this signature in database
GPG key ID: DBFFF47AB2CA3EDD
3 changed files with 311 additions and 319 deletions

View file

@ -239,12 +239,27 @@ enum
SPR_CLASSIC_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_0_3 = SPR_CSG_BEGIN + 65961,
SPR_CLASSIC_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_1_3 = SPR_CSG_BEGIN + 65962,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_3 = SPR_CSG_BEGIN + 65963,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_3 = SPR_CSG_BEGIN + 65964,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_0 = SPR_CSG_BEGIN + 65965,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_0 = SPR_CSG_BEGIN + 65966,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_1 = SPR_CSG_BEGIN + 65967,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_1 = SPR_CSG_BEGIN + 65968,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_2 = SPR_CSG_BEGIN + 65969,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_2 = SPR_CSG_BEGIN + 65970,
SPR_CLASSIC_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_0_0 = SPR_CSG_BEGIN + 65971,
SPR_CLASSIC_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_0 = SPR_CSG_BEGIN + 65972,
SPR_CLASSIC_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_1 = SPR_CSG_BEGIN + 65973,
SPR_CLASSIC_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_0_2 = SPR_CSG_BEGIN + 65974,
SPR_CLASSIC_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_2 = SPR_CSG_BEGIN + 65975,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_3 = SPR_CSG_BEGIN + 65976,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_0_3 = SPR_CSG_BEGIN + 65977,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_1 = SPR_CSG_BEGIN + 65978,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_0_1 = SPR_CSG_BEGIN + 65979,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_2 = SPR_CSG_BEGIN + 65980,
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_HANDRAIL_0 = SPR_CSG_BEGIN + 66203,
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_HANDRAIL_1 = SPR_CSG_BEGIN + 66204,
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_HANDRAIL_2 = SPR_CSG_BEGIN + 66205,
@ -464,11 +479,26 @@ enum
SPR_CLASSIC_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_3 = SPR_CSG_BEGIN + 66717,
SPR_CLASSIC_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_3 = SPR_CSG_BEGIN + 66718,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_3 = SPR_CSG_BEGIN + 66719,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_3 = SPR_CSG_BEGIN + 66720,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_0 = SPR_CSG_BEGIN + 66721,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_0 = SPR_CSG_BEGIN + 66722,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_1 = SPR_CSG_BEGIN + 66723,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_1 = SPR_CSG_BEGIN + 66724,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_2 = SPR_CSG_BEGIN + 66725,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_2 = SPR_CSG_BEGIN + 66726,
SPR_CLASSIC_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_0_0 = SPR_CSG_BEGIN + 66727,
SPR_CLASSIC_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_0 = SPR_CSG_BEGIN + 66728,
SPR_CLASSIC_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_1 = SPR_CSG_BEGIN + 66729,
SPR_CLASSIC_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_0_2 = SPR_CSG_BEGIN + 66730,
SPR_CLASSIC_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_2 = SPR_CSG_BEGIN + 66731,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_3 = SPR_CSG_BEGIN + 66732,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_0_3 = SPR_CSG_BEGIN + 66733,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_1 = SPR_CSG_BEGIN + 66734,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_0_1 = SPR_CSG_BEGIN + 66735,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_2 = SPR_CSG_BEGIN + 66736,
};
static constexpr std::array<StraightWoodenTrack, kNumOrthogonalDirections> kFlatToLeftBankImages = { {
@ -1170,6 +1200,56 @@ static constexpr std::array<std::array<StraightWoodenTrack, kNumOrthogonalDirect
}
};
static constexpr std::array<std::array<StraightWoodenTrack, kNumOrthogonalDirections>, 2>
kLeftBankToLeftQuarterTurn325DegUpImages = { {
{ {
{
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_0,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_0,
},
{
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_1,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_1,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_0_1,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_0_1,
},
{
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_2,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_2,
},
{
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_3,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_3,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_0_3,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_0_3,
},
} },
{ {
{
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_0,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_0,
},
{
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_1,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_1,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_1,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_1,
},
{
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_2,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_2,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_2,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_2,
},
{
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_3,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_3,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_3,
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_3,
},
} },
} };
static constexpr std::array<std::array<StraightWoodenTrack, kNumOrthogonalDirections>, 2>
kRightBankToRightQuarterTurn325DegUpImages = { {
{ {
@ -1358,6 +1438,15 @@ static void ClassicWoodenTwisterRCTrackLeftQuarterTurn325DegDownToLeftBank(
session, ride, trackSequence, DirectionNext(direction), height, trackElement, supportType);
}
static void ClassicWoodenTwisterRCTrackRightQuarterTurn325DegDownToRightBank(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement, SupportType supportType)
{
trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
WoodenRCTrackLeftBankToLeftQuarterTurn325DegUp<false, kLeftBankToLeftQuarterTurn325DegUpImages>(
session, ride, trackSequence, DirectionPrev(direction), height, trackElement, supportType);
}
// Stylistically, this coaster is _very_ similar to the regular Wooden Roller Coaster.
// The only difference is the degree of the banking.
// As such, all non-banked pieces are simply drawn as regular wooden roller coaster pieces.
@ -1428,10 +1517,14 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionClassicWoodenTwisterRC(OpenRCT2::Track
case TrackElemType::RightHalfBankedHelixDownLarge:
return ClassicWoodenTwisterRCTrackRightHalfBankedHelixDownLarge;
case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25:
return WoodenRCTrackLeftBankToLeftQuarterTurn325DegUp<false, kLeftBankToLeftQuarterTurn325DegUpImages>;
case TrackElemType::RightBankToRightQuarterTurn3TilesUp25:
return WoodenRCTrackRightBankToRightQuarterTurn325DegUp<false, kRightBankToRightQuarterTurn325DegUpImages>;
case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank:
return ClassicWoodenTwisterRCTrackLeftQuarterTurn325DegDownToLeftBank;
case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank:
return ClassicWoodenTwisterRCTrackRightQuarterTurn325DegDownToRightBank;
default:
return GetTrackPaintFunctionWoodenRC(trackType);

View file

@ -331,12 +331,24 @@ enum
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_1_2 = 23952,
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_0_3 = 23953,
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_1_3 = 23954,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_3 = 23955,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_3 = 23956,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_0 = 23957,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_0 = 23958,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_1 = 23959,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_1 = 23960,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_2 = 23961,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_2 = 23962,
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_0_0 = 23963,
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_0 = 23964,
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_1 = 23965,
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_0_2 = 23966,
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_2 = 23967,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_3 = 23968,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_0_3 = 23969,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_1 = 23970,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_0_1 = 23971,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_2 = 23972,
SPR_WOODEN_RC_STATION_SW_NE = 23973,
SPR_WOODEN_RC_STATION_NW_SE = 23974,
@ -637,12 +649,24 @@ enum
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_2 = 24818,
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_3 = 24819,
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_3 = 24820,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_3 = 24821,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_3 = 24822,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_0 = 24823,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_0 = 24824,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_1 = 24825,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_1 = 24826,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_2 = 24827,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_2 = 24828,
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_0_0 = 24829,
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_0 = 24830,
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_1 = 24831,
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_0_2 = 24832,
SPR_WOODEN_RC_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_2 = 24833,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_3 = 24834,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_0_3 = 24835,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_1 = 24836,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_0_1 = 24837,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_2 = 24838,
SPR_WOODEN_RC_STATION_RAILS_SW_NE = 24839,
SPR_WOODEN_RC_STATION_RAILS_NW_SE = 24840,
@ -1382,6 +1406,56 @@ static constexpr std::array<std::array<StraightWoodenTrack, kNumOrthogonalDirect
}
};
static constexpr std::array<std::array<StraightWoodenTrack, kNumOrthogonalDirections>, 2>
kLeftBankToLeftQuarterTurn325DegUpImages = { {
{ {
{
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_0,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_0,
},
{
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_1,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_1,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_0_1,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_0_1,
},
{
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_2,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_2,
},
{
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_0_3,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_0_3,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_0_3,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_0_3,
},
} },
{ {
{
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_0,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_0,
},
{
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_1,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_1,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_1,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_1,
},
{
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_2,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_2,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_2,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_2,
},
{
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_1_3,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_HANDRAIL_1_3,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_3,
SPR_WOODEN_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_3,
},
} },
} };
static constexpr std::array<std::array<StraightWoodenTrack, kNumOrthogonalDirections>, 2>
kRightBankToRightQuarterTurn325DegUpImages = { {
{ {
@ -11256,168 +11330,6 @@ static void WoodenRCTrackDiagRightBank(
}
}
/** rct2: 0x008ACB38 */
template<bool isClassic>
static void WoodenRCTrackLeftBankToLeftQuarterTurn325DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement, SupportType supportType)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23958), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24824), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23960), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24826), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23971), { 0, 6, height },
{ { 0, 6, height + 67 }, { 32, 20, 0 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24837), { 0, 6, height },
{ { 0, 6, height + 67 }, { 32, 20, 0 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23962), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24828), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23956), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24822), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23969), { 0, 6, height },
{ { 0, 6, height + 67 }, { 32, 20, 0 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24835), { 0, 6, height },
{ { 0, 6, height + 67 }, { 32, 20, 0 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 64);
break;
case 1:
PaintUtilSetGeneralSupportHeight(session, height + 48);
break;
case 2:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23957), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24823), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23959), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24825), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23970), { 6, 0, height },
{ { 6, 0, height + 67 }, { 20, 32, 0 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24836), { 6, 0, height },
{ { 6, 0, height + 67 }, { 20, 32, 0 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23961), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24827), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23972), { 6, 0, height },
{ { 6, 0, height + 67 }, { 20, 32, 0 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24838), { 6, 0, height },
{ { 6, 0, height + 67 }, { 20, 32, 0 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23955), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24821), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23968), { 6, 0, height },
{ { 6, 0, height + 67 }, { 20, 32, 0 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24834), { 6, 0, height },
{ { 6, 0, height + 67 }, { 20, 32, 0 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
}
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::SlopeEnd);
break;
case 3:
PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::SlopeEnd);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 64);
break;
}
}
/** rct2: 0x008ACB58 */
template<bool isClassic>
static void WoodenRCTrackLeftQuarterTurn325DegDownToLeftBank(
@ -11435,160 +11347,9 @@ static void WoodenRCTrackRightQuarterTurn325DegDownToRightBank(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement, SupportType supportType)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23955), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24821), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23968), { 0, 6, height },
{ { 0, 6, height + 67 }, { 32, 20, 0 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24834), { 0, 6, height },
{ { 0, 6, height + 67 }, { 32, 20, 0 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23957), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24823), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23959), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24825), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23970), { 0, 6, height },
{ { 0, 6, height + 67 }, { 32, 20, 0 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24836), { 0, 6, height },
{ { 0, 6, height + 67 }, { 32, 20, 0 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23961), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24827), { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23972), { 0, 6, height },
{ { 0, 6, height + 67 }, { 32, 20, 0 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24838), { 0, 6, height },
{ { 0, 6, height + 67 }, { 32, 20, 0 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::SlopeEnd);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 64);
break;
case 1:
PaintUtilSetGeneralSupportHeight(session, height + 48);
break;
case 2:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::bottomLeftSide,
PaintSegment::bottomRightSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48);
break;
case 3:
switch (direction)
{
case 0:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23956), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24822), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23969), { 6, 0, height },
{ { 6, 0, height + 67 }, { 20, 32, 0 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24835), { 6, 0, height },
{ { 6, 0, height + 67 }, { 20, 32, 0 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
case 1:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23958), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24824), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 2:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23960), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24826), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23971), { 6, 0, height },
{ { 6, 0, height + 67 }, { 20, 32, 0 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24837), { 6, 0, height },
{ { 6, 0, height + 67 }, { 20, 32, 0 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 3:
PaintAddImageAsParentRotated(
session, direction, WoodenRCGetTrackColour<isClassic>(session).WithIndex(23962), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
PaintAddImageAsChildRotated(
session, direction, WoodenRCGetRailsColour(session).WithIndex(24828), { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
}
switch (direction)
{
case 0:
PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::Flat);
break;
case 1:
PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::Flat);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 64);
break;
}
trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
WoodenRCTrackLeftBankToLeftQuarterTurn325DegUp<isClassic, kLeftBankToLeftQuarterTurn325DegUpImages>(
session, ride, trackSequence, DirectionPrev(direction), height, trackElement, supportType);
}
/** rct2: 0x008ACDF8 */
@ -14958,7 +14719,7 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionWoodenAndClassicWoodenRC(OpenRCT2::Tra
case TrackElemType::DiagRightBank:
return WoodenRCTrackDiagRightBank<isClassic>;
case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25:
return WoodenRCTrackLeftBankToLeftQuarterTurn325DegUp<isClassic>;
return WoodenRCTrackLeftBankToLeftQuarterTurn325DegUp<isClassic, kLeftBankToLeftQuarterTurn325DegUpImages>;
case TrackElemType::RightBankToRightQuarterTurn3TilesUp25:
return WoodenRCTrackRightBankToRightQuarterTurn325DegUp<isClassic, kRightBankToRightQuarterTurn325DegUpImages>;
case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank:

View file

@ -2676,6 +2676,144 @@ static void WoodenRCTrackRightHalfBankedHelixUpLarge(
}
}
/** rct2: 0x008ACB38 */
template<bool isClassic, std::array<std::array<StraightWoodenTrack, kNumOrthogonalDirections>, 2> imageIds>
static void WoodenRCTrackLeftBankToLeftQuarterTurn325DegUp(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement, SupportType supportType)
{
switch (trackSequence)
{
case 0:
switch (direction)
{
case 0:
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[0][direction].track, imageIds[0][direction].handrail, { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[0][direction].track, imageIds[0][direction].handrail, { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
if (imageIds[0][direction].frontTrack != ImageIndexUndefined)
{
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[0][direction].frontTrack, imageIds[0][direction].frontHandrail,
{ 0, 6, height }, { { 0, 6, height + 67 }, { 32, 20, 0 } });
}
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[0][direction].track, imageIds[0][direction].handrail, { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[0][direction].track, imageIds[0][direction].handrail, { 0, 6, height },
{ { 0, 6, height }, { 32, 20, 2 } });
if (imageIds[0][direction].frontTrack != ImageIndexUndefined)
{
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[0][direction].frontTrack, imageIds[0][direction].frontHandrail,
{ 0, 6, height }, { { 0, 6, height + 67 }, { 32, 20, 0 } });
}
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
}
if (direction == 0 || direction == 3)
{
PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat);
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 64);
break;
case 1:
PaintUtilSetGeneralSupportHeight(session, height + 48);
break;
case 2:
PaintUtilSetSegmentSupportHeight(
session,
PaintUtilRotateSegments(
EnumsToFlags(
PaintSegment::leftCorner, PaintSegment::centre, PaintSegment::topLeftSide,
PaintSegment::bottomLeftSide),
direction),
0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 48);
break;
case 3:
switch (direction)
{
case 0:
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[1][direction].track, imageIds[1][direction].handrail, { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner3, height, session.SupportColours);
break;
case 1:
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[1][direction].track, imageIds[1][direction].handrail, { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
if (imageIds[1][direction].frontTrack != ImageIndexUndefined)
{
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[1][direction].frontTrack, imageIds[1][direction].frontHandrail,
{ 6, 0, height }, { { 6, 0, height + 67 }, { 20, 32, 0 } });
}
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner0, height, session.SupportColours);
break;
case 2:
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[1][direction].track, imageIds[1][direction].handrail, { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
if (imageIds[1][direction].frontTrack != ImageIndexUndefined)
{
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[1][direction].frontTrack, imageIds[1][direction].frontHandrail,
{ 6, 0, height }, { { 6, 0, height + 67 }, { 20, 32, 0 } });
}
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner1, height, session.SupportColours);
break;
case 3:
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[1][direction].track, imageIds[1][direction].handrail, { 6, 0, height },
{ { 6, 0, height }, { 20, 32, 2 } });
if (imageIds[1][direction].frontTrack != ImageIndexUndefined)
{
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[1][direction].frontTrack, imageIds[1][direction].frontHandrail,
{ 6, 0, height }, { { 6, 0, height + 67 }, { 20, 32, 0 } });
}
WoodenASupportsPaintSetup(
session, supportType.wooden, WoodenSupportSubType::Corner2, height, session.SupportColours);
break;
}
switch (direction)
{
case 2:
PaintUtilPushTunnelRight(session, height, kTunnelGroup, TunnelSubType::SlopeEnd);
break;
case 3:
PaintUtilPushTunnelLeft(session, height, kTunnelGroup, TunnelSubType::SlopeEnd);
break;
}
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 64);
break;
}
}
/** rct2: 0x008ACB48 */
template<bool isClassic, std::array<std::array<StraightWoodenTrack, kNumOrthogonalDirections>, 2> imageIds>
static void WoodenRCTrackRightBankToRightQuarterTurn325DegUp(