1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-06 06:32:56 +01:00

Implement Classic Wooden Twister diagonal bank

This commit is contained in:
mix
2024-11-15 05:22:09 +00:00
committed by Gymnasiast
parent f0d85b0fc4
commit 273fa9a479
2 changed files with 121 additions and 0 deletions

View File

@@ -260,6 +260,14 @@ enum
SPR_CLASSIC_WOODEN_TWISTER_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_0_1 = SPR_CSG_BEGIN + 65979,
SPR_CLASSIC_WOODEN_TWISTER_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_1_2 = SPR_CSG_BEGIN + 65980,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_0 = SPR_CSG_BEGIN + 66049,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_1 = SPR_CSG_BEGIN + 66050,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_2 = SPR_CSG_BEGIN + 66051,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_3 = SPR_CSG_BEGIN + 66052,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_FRONT_0 = SPR_CSG_BEGIN + 66053,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_FRONT_2 = SPR_CSG_BEGIN + 66054,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_FLAT_TO_LEFT_BANK_0 = SPR_CSG_BEGIN + 66055,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_FLAT_TO_LEFT_BANK_1 = SPR_CSG_BEGIN + 66056,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_FLAT_TO_LEFT_BANK_2 = SPR_CSG_BEGIN + 66057,
@@ -600,6 +608,14 @@ enum
SPR_CLASSIC_WOODEN_TWISTER_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_0_1 = SPR_CSG_BEGIN + 66735,
SPR_CLASSIC_WOODEN_TWISTER_RC_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_25_DEG_UP_FRONT_HANDRAIL_1_2 = SPR_CSG_BEGIN + 66736,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_HANDRAIL_0 = SPR_CSG_BEGIN + 66805,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_HANDRAIL_1 = SPR_CSG_BEGIN + 66806,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_HANDRAIL_2 = SPR_CSG_BEGIN + 66807,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_HANDRAIL_3 = SPR_CSG_BEGIN + 66808,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_FRONT_HANDRAIL_0 = SPR_CSG_BEGIN + 66809,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_FRONT_HANDRAIL_2 = SPR_CSG_BEGIN + 66810,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_FLAT_TO_LEFT_BANK_HANDRAIL_0 = SPR_CSG_BEGIN + 66811,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_FLAT_TO_LEFT_BANK_HANDRAIL_1 = SPR_CSG_BEGIN + 66812,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_FLAT_TO_LEFT_BANK_HANDRAIL_2 = SPR_CSG_BEGIN + 66813,
@@ -1611,6 +1627,29 @@ static constexpr std::array<WoodenTrackSection, kNumOrthogonalDirections> kDiagU
},
} };
static constexpr std::array<WoodenTrackSection, kNumOrthogonalDirections> kDiagLeftBankImages = { {
{
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_0,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_HANDRAIL_0,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_FRONT_0,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_FRONT_HANDRAIL_0,
},
{
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_1,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_HANDRAIL_1,
},
{
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_2,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_HANDRAIL_2,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_FRONT_2,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_FRONT_HANDRAIL_2,
},
{
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_3,
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_LEFT_BANK_HANDRAIL_3,
},
} };
static constexpr std::array<WoodenTrackSection, kNumOrthogonalDirections> kDiagUp25ToRightBankImages = { {
{
SPR_CLASSIC_WOODEN_TWISTER_RC_DIAG_UP_25_TO_RIGHT_BANK_0,
@@ -2017,6 +2056,15 @@ static void ClassicWoodenTwisterRCTrackDiagRightBankToDown25(
session, ride, trackSequence, DirectionReverse(direction), height, trackElement, supportType);
}
static void ClassicWoodenTwisterRCTrackDiagRightBank(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement, SupportType supportType)
{
trackSequence = kMapReversedDiagonalStraight[trackSequence];
return WoodenRCTrackDiagLeftBank<false, kDiagLeftBankImages>(
session, ride, trackSequence, DirectionReverse(direction), height, trackElement, supportType);
}
static void ClassicWoodenTwisterRCTrackLeftEighthBankToOrthogonal(
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
const TrackElement& trackElement, SupportType supportType)
@@ -2140,6 +2188,11 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionClassicWoodenTwisterRC(OpenRCT2::Track
case TrackElemType::DiagRightBankToDown25:
return ClassicWoodenTwisterRCTrackDiagRightBankToDown25;
case TrackElemType::DiagLeftBank:
return WoodenRCTrackDiagLeftBank<false, kDiagLeftBankImages>;
case TrackElemType::DiagRightBank:
return ClassicWoodenTwisterRCTrackDiagRightBank;
case TrackElemType::LeftEighthBankToDiag:
return WoodenRCTrackLeftEighthBankToDiag<false, kLeftEighthBankToDiagImages>;
case TrackElemType::RightEighthBankToDiag:

View File

@@ -3156,6 +3156,74 @@ static void WoodenRCTrackDiagUp25ToBank(
PaintUtilSetGeneralSupportHeight(session, height + 56);
}
/** rct2: 0x008AC9D8 */
template<bool isClassic, std::array<WoodenTrackSection, kNumOrthogonalDirections> imageIds>
static void WoodenRCTrackDiagLeftBank(
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 3:
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[direction].track, imageIds[direction].handrail, { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 2 } });
break;
}
break;
case 1:
switch (direction)
{
case 0:
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[direction].track, imageIds[direction].handrail, { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 2 } });
if (imageIds[direction].frontTrack != ImageIndexUndefined)
{
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[direction].frontTrack, imageIds[direction].frontHandrail,
{ -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } });
}
break;
}
break;
case 2:
switch (direction)
{
case 2:
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[direction].track, imageIds[direction].handrail, { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 2 } });
if (imageIds[direction].frontTrack != ImageIndexUndefined)
{
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[direction].frontTrack, imageIds[direction].frontHandrail,
{ -16, -16, height }, { { -16, -16, height + 27 }, { 32, 32, 0 } });
}
break;
}
break;
case 3:
switch (direction)
{
case 1:
WoodenRCTrackPaint<isClassic>(
session, direction, imageIds[direction].track, imageIds[direction].handrail, { -16, -16, height },
{ { -16, -16, height }, { 32, 32, 2 } });
break;
}
break;
}
DrawSupportForSequenceA<OpenRCT2::TrackElemType::DiagLeftBank>(
session, supportType.wooden, trackSequence, direction, height, session.SupportColours);
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight);
}
/** rct2: 0x008AC998 */
template<bool isClassic, std::array<std::array<WoodenTrackSection, kNumOrthogonalDirections>, 4> imageIds>
static void WoodenRCTrackLeftEighthBankToDiag(