Add large zero g rolls to the Twister Roller Coaster
@@ -8383,6 +8383,246 @@
|
||||
"y": -29,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_1_1.png",
|
||||
"x": -25,
|
||||
"y": -47,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_1_2.png",
|
||||
"x": -26,
|
||||
"y": -51,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_1_3.png",
|
||||
"x": -17,
|
||||
"y": -52,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_1_4.png",
|
||||
"x": -17,
|
||||
"y": -42,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_1_5.png",
|
||||
"x": -21,
|
||||
"y": -29,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_2_1.png",
|
||||
"x": -25,
|
||||
"y": -44,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_2_2.png",
|
||||
"x": -28,
|
||||
"y": -34,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_2_3.png",
|
||||
"x": -32,
|
||||
"y": -26,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_2_4.png",
|
||||
"x": -30,
|
||||
"y": -19,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_3_1.png",
|
||||
"x": -9,
|
||||
"y": -31,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_3_2.png",
|
||||
"x": -17,
|
||||
"y": -30,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_3_3.png",
|
||||
"x": -31,
|
||||
"y": -41,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_3_4.png",
|
||||
"x": -24,
|
||||
"y": -31,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_3_5.png",
|
||||
"x": -9,
|
||||
"y": -9,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_3_6.png",
|
||||
"x": -27,
|
||||
"y": -23,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_4_1.png",
|
||||
"x": -18,
|
||||
"y": -55,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_4_2.png",
|
||||
"x": -17,
|
||||
"y": -48,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_4_3.png",
|
||||
"x": -10,
|
||||
"y": -31,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_4_4.png",
|
||||
"x": -9,
|
||||
"y": -39,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_left_4_5.png",
|
||||
"x": -23,
|
||||
"y": -30,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_1_1.png",
|
||||
"x": -25,
|
||||
"y": -57,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_1_2.png",
|
||||
"x": -32,
|
||||
"y": -51,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_1_3.png",
|
||||
"x": -32,
|
||||
"y": -31,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_1_4.png",
|
||||
"x": -32,
|
||||
"y": -40,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_1_5.png",
|
||||
"x": -32,
|
||||
"y": -30,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_2_1.png",
|
||||
"x": -24,
|
||||
"y": -32,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_2_2.png",
|
||||
"x": -25,
|
||||
"y": -30,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_2_3.png",
|
||||
"x": -24,
|
||||
"y": -41,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_2_4.png",
|
||||
"x": -19,
|
||||
"y": -31,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_2_5.png",
|
||||
"x": -8,
|
||||
"y": -8,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_2_6.png",
|
||||
"x": -8,
|
||||
"y": -23,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_3_1.png",
|
||||
"x": -19,
|
||||
"y": -43,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_3_2.png",
|
||||
"x": -14,
|
||||
"y": -33,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_3_3.png",
|
||||
"x": -5,
|
||||
"y": -26,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_3_4.png",
|
||||
"x": -25,
|
||||
"y": -19,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_4_1.png",
|
||||
"x": -23,
|
||||
"y": -46,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_4_2.png",
|
||||
"x": -21,
|
||||
"y": -50,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_4_3.png",
|
||||
"x": -32,
|
||||
"y": -51,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_4_4.png",
|
||||
"x": -29,
|
||||
"y": -42,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/bm/large_zero_g_roll_right_4_5.png",
|
||||
"x": -25,
|
||||
"y": -29,
|
||||
"palette": "keep"
|
||||
},
|
||||
{
|
||||
"path": "track/railway/quarter_turn_3_tiles_sw_se_part_3.png",
|
||||
"x": -8,
|
||||
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 908 B |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 918 B |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 929 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 910 B |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
@@ -18658,6 +18658,357 @@ static void TwisterRCTrackRightZeroGRollDown(
|
||||
TwisterRCTrackRightZeroGRollUp(session, ride, 2 - trackSequence, (direction + 2) & 3, height, trackElement, supportType);
|
||||
}
|
||||
|
||||
static void TwisterRCTrackLeftLargeZeroGRollUp(
|
||||
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, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 0)),
|
||||
{ 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } });
|
||||
break;
|
||||
case 1:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 5)),
|
||||
{ 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } });
|
||||
break;
|
||||
case 2:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 9)),
|
||||
{ 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } });
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 10)),
|
||||
{ 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } });
|
||||
break;
|
||||
case 3:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 15)),
|
||||
{ 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } });
|
||||
break;
|
||||
}
|
||||
MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 21, height, session.SupportColours);
|
||||
if (direction == 0 || direction == 3)
|
||||
{
|
||||
PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart);
|
||||
}
|
||||
PaintUtilSetSegmentSupportHeight(
|
||||
session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
||||
PaintUtilSetGeneralSupportHeight(session, height + 88);
|
||||
break;
|
||||
case 1:
|
||||
switch (direction)
|
||||
{
|
||||
case 0:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 1)),
|
||||
{ 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } });
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 2)),
|
||||
{ 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } });
|
||||
break;
|
||||
case 1:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 6)),
|
||||
{ 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } });
|
||||
break;
|
||||
case 2:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 11)),
|
||||
{ 0, 0, height }, { { 0, 2, height }, { 32, 0, 64 } });
|
||||
break;
|
||||
case 3:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 16)),
|
||||
{ 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } });
|
||||
break;
|
||||
}
|
||||
PaintUtilSetSegmentSupportHeight(
|
||||
session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
||||
PaintUtilSetGeneralSupportHeight(session, height + 72);
|
||||
break;
|
||||
case 2:
|
||||
switch (direction)
|
||||
{
|
||||
case 0:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 3)),
|
||||
{ 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } });
|
||||
break;
|
||||
case 1:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 7)),
|
||||
{ 0, 0, height }, { { 0, 30, height }, { 32, 0, 48 } });
|
||||
break;
|
||||
case 2:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 12)),
|
||||
{ 0, 0, height }, { { 0, 2, height }, { 32, 0, 48 } });
|
||||
break;
|
||||
case 3:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 17)),
|
||||
{ 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } });
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 18)),
|
||||
{ 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 3 } });
|
||||
break;
|
||||
}
|
||||
PaintUtilSetSegmentSupportHeight(
|
||||
session,
|
||||
PaintUtilRotateSegments(
|
||||
EnumsToFlags(
|
||||
PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner,
|
||||
PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide),
|
||||
direction),
|
||||
0xFFFF, 0);
|
||||
PaintUtilSetGeneralSupportHeight(session, height + 64);
|
||||
break;
|
||||
case 3:
|
||||
PaintUtilSetSegmentSupportHeight(
|
||||
session,
|
||||
PaintUtilRotateSegments(
|
||||
EnumsToFlags(
|
||||
PaintSegment::leftCorner, PaintSegment::topLeftSide, PaintSegment::topCorner,
|
||||
PaintSegment::bottomLeftSide, PaintSegment::centre, PaintSegment::topRightSide),
|
||||
direction),
|
||||
0xFFFF, 0);
|
||||
switch (direction)
|
||||
{
|
||||
case 0:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 4)),
|
||||
{ 0, 0, height }, { { 0, 26, height }, { 32, 0, 32 } });
|
||||
MetalASupportsPaintSetup(
|
||||
session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 25, session.SupportColours);
|
||||
break;
|
||||
case 1:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 8)),
|
||||
{ 0, 0, height }, { { 0, 26, height }, { 32, 0, 20 } });
|
||||
MetalASupportsPaintSetup(
|
||||
session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 32, session.SupportColours);
|
||||
break;
|
||||
case 2:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 13)),
|
||||
{ 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } });
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 14)),
|
||||
{ 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 3 } });
|
||||
MetalASupportsPaintSetup(
|
||||
session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 36, session.SupportColours);
|
||||
break;
|
||||
case 3:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 19)),
|
||||
{ 0, 0, height }, { { 0, 18, height }, { 32, 1, 30 } });
|
||||
MetalASupportsPaintSetup(
|
||||
session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 37, session.SupportColours);
|
||||
break;
|
||||
}
|
||||
switch (direction)
|
||||
{
|
||||
case 1:
|
||||
PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat);
|
||||
break;
|
||||
case 2:
|
||||
PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat);
|
||||
break;
|
||||
}
|
||||
PaintUtilSetGeneralSupportHeight(session, height + 40);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void TwisterRCTrackRightLargeZeroGRollUp(
|
||||
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, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 20)),
|
||||
{ 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } });
|
||||
break;
|
||||
case 1:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 25)),
|
||||
{ 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } });
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 26)),
|
||||
{ 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } });
|
||||
break;
|
||||
case 2:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 31)),
|
||||
{ 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } });
|
||||
break;
|
||||
case 3:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 35)),
|
||||
{ 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } });
|
||||
break;
|
||||
}
|
||||
MetalASupportsPaintSetup(session, supportType.metal, MetalSupportPlace::Centre, 21, height, session.SupportColours);
|
||||
if (direction == 0 || direction == 3)
|
||||
{
|
||||
PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::SlopeStart);
|
||||
}
|
||||
PaintUtilSetSegmentSupportHeight(
|
||||
session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
||||
PaintUtilSetGeneralSupportHeight(session, height + 88);
|
||||
break;
|
||||
case 1:
|
||||
switch (direction)
|
||||
{
|
||||
case 0:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 21)),
|
||||
{ 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } });
|
||||
break;
|
||||
case 1:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 27)),
|
||||
{ 0, 0, height }, { { 0, 2, height }, { 32, 0, 64 } });
|
||||
break;
|
||||
case 2:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 32)),
|
||||
{ 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } });
|
||||
break;
|
||||
case 3:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 36)),
|
||||
{ 0, 0, height }, { { 0, 6, height }, { 32, 20, 3 } });
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 37)),
|
||||
{ 0, 0, height }, { { 0, 30, height }, { 32, 0, 96 } });
|
||||
break;
|
||||
}
|
||||
PaintUtilSetSegmentSupportHeight(
|
||||
session, PaintUtilRotateSegments(BlockedSegments::kStraightFlat, direction), 0xFFFF, 0);
|
||||
PaintUtilSetGeneralSupportHeight(session, height + 72);
|
||||
break;
|
||||
case 2:
|
||||
switch (direction)
|
||||
{
|
||||
case 0:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 22)),
|
||||
{ 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } });
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 23)),
|
||||
{ 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 3 } });
|
||||
break;
|
||||
case 1:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 28)),
|
||||
{ 0, 0, height }, { { 0, 2, height }, { 32, 0, 48 } });
|
||||
break;
|
||||
case 2:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 33)),
|
||||
{ 0, 0, height }, { { 0, 30, height }, { 32, 0, 48 } });
|
||||
break;
|
||||
case 3:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 38)),
|
||||
{ 0, 0, height }, { { 0, 30, height }, { 32, 0, 64 } });
|
||||
break;
|
||||
}
|
||||
|
||||
PaintUtilSetSegmentSupportHeight(
|
||||
session,
|
||||
PaintUtilRotateSegments(
|
||||
EnumsToFlags(
|
||||
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
||||
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
||||
direction),
|
||||
0xFFFF, 0);
|
||||
PaintUtilSetGeneralSupportHeight(session, height + 64);
|
||||
break;
|
||||
case 3:
|
||||
PaintUtilSetSegmentSupportHeight(
|
||||
session,
|
||||
PaintUtilRotateSegments(
|
||||
EnumsToFlags(
|
||||
PaintSegment::rightCorner, PaintSegment::bottomCorner, PaintSegment::centre, PaintSegment::topRightSide,
|
||||
PaintSegment::bottomLeftSide, PaintSegment::bottomRightSide),
|
||||
direction),
|
||||
0xFFFF, 0);
|
||||
switch (direction)
|
||||
{
|
||||
case 0:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 24)),
|
||||
{ 0, 0, height }, { { 0, 18, height }, { 32, 1, 30 } });
|
||||
MetalASupportsPaintSetup(
|
||||
session, supportType.metal, MetalSupportPlace::BottomLeftSide, 0, height + 37, session.SupportColours);
|
||||
break;
|
||||
case 1:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 29)),
|
||||
{ 0, 0, height }, { { 0, 2, height }, { 32, 0, 32 } });
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 30)),
|
||||
{ 0, 0, height }, { { 0, 6, height + 40 }, { 32, 20, 3 } });
|
||||
MetalASupportsPaintSetup(
|
||||
session, supportType.metal, MetalSupportPlace::TopLeftSide, 0, height + 36, session.SupportColours);
|
||||
break;
|
||||
case 2:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 34)),
|
||||
{ 0, 0, height }, { { 0, 26, height }, { 32, 0, 20 } });
|
||||
MetalASupportsPaintSetup(
|
||||
session, supportType.metal, MetalSupportPlace::TopRightSide, 0, height + 32, session.SupportColours);
|
||||
break;
|
||||
case 3:
|
||||
PaintAddImageAsParentRotated(
|
||||
session, direction, session.TrackColours.WithIndex((SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 39)),
|
||||
{ 0, 0, height }, { { 0, 26, height }, { 40, 0, 32 } });
|
||||
MetalASupportsPaintSetup(
|
||||
session, supportType.metal, MetalSupportPlace::BottomRightSide, 0, height + 25, session.SupportColours);
|
||||
break;
|
||||
}
|
||||
switch (direction)
|
||||
{
|
||||
case 1:
|
||||
PaintUtilPushTunnelRight(session, height + 8, kTunnelGroup, TunnelSubType::Flat);
|
||||
break;
|
||||
case 2:
|
||||
PaintUtilPushTunnelLeft(session, height + 8, kTunnelGroup, TunnelSubType::Flat);
|
||||
break;
|
||||
}
|
||||
PaintUtilSetGeneralSupportHeight(session, height + 40);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void TwisterRCTrackLeftLargeZeroGRollDown(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
TwisterRCTrackLeftLargeZeroGRollUp(
|
||||
session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType);
|
||||
}
|
||||
|
||||
static void TwisterRCTrackRightLargeZeroGRollDown(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
TwisterRCTrackRightLargeZeroGRollUp(
|
||||
session, ride, 3 - trackSequence, (direction + 2) & 3, height, trackElement, supportType);
|
||||
}
|
||||
|
||||
TRACK_PAINT_FUNCTION GetTrackPaintFunctionTwisterRC(OpenRCT2::TrackElemType trackType)
|
||||
{
|
||||
switch (trackType)
|
||||
@@ -19169,6 +19520,16 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionTwisterRC(OpenRCT2::TrackElemType trac
|
||||
case TrackElemType::RightZeroGRollDown:
|
||||
return TwisterRCTrackRightZeroGRollDown;
|
||||
|
||||
// Large zero g rolls
|
||||
case TrackElemType::LeftLargeZeroGRollUp:
|
||||
return TwisterRCTrackLeftLargeZeroGRollUp;
|
||||
case TrackElemType::RightLargeZeroGRollUp:
|
||||
return TwisterRCTrackRightLargeZeroGRollUp;
|
||||
case TrackElemType::LeftLargeZeroGRollDown:
|
||||
return TwisterRCTrackLeftLargeZeroGRollDown;
|
||||
case TrackElemType::RightLargeZeroGRollDown:
|
||||
return TwisterRCTrackRightLargeZeroGRollDown;
|
||||
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ constexpr RideTypeDescriptor TwisterRollerCoasterRTD =
|
||||
.Drawer = GetTrackPaintFunctionTwisterRC,
|
||||
.supportType = MetalSupportType::Tubes,
|
||||
.enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::slopeSteepLong, TrackGroup::curveVertical, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::corkscrewLarge, TrackGroup::halfLoopMedium},
|
||||
.extraTrackGroups = {TrackGroup::liftHillSteep, TrackGroup::brakeForDrop, TrackGroup::zeroGRoll},
|
||||
.extraTrackGroups = {TrackGroup::liftHillSteep, TrackGroup::brakeForDrop, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge},
|
||||
}),
|
||||
.InvertedTrackPaintFunctions = {},
|
||||
.Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt |
|
||||
|
||||
@@ -24,7 +24,7 @@ constexpr RideTypeDescriptor VerticalDropCoasterRTD =
|
||||
.Drawer = GetTrackPaintFunctionTwisterRC,
|
||||
.supportType = MetalSupportType::Boxed,
|
||||
.enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::liftHillSteep, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::flatToSteepSlope, TrackGroup::slopeCurve, TrackGroup::slopeCurveSteep, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::slopeVertical, TrackGroup::slopeCurveBanked, TrackGroup::blockBrakes, TrackGroup::slopeRollBanking, TrackGroup::curveVertical, TrackGroup::halfLoopLarge, TrackGroup::brakeForDrop, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeCurveLarge, TrackGroup::halfLoopMedium},
|
||||
.extraTrackGroups = {TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::zeroGRoll},
|
||||
.extraTrackGroups = {TrackGroup::halfLoop, TrackGroup::corkscrew, TrackGroup::barrelRoll, TrackGroup::poweredLift, TrackGroup::halfLoopLarge, TrackGroup::quarterLoop, TrackGroup::booster, TrackGroup::twist, TrackGroup::zeroGRoll, TrackGroup::zeroGRollLarge},
|
||||
}),
|
||||
.InvertedTrackPaintFunctions = {},
|
||||
.Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt |
|
||||
|
||||
@@ -1291,7 +1291,8 @@ enum : ImageIndex
|
||||
SPR_G2_BM_TRACK_LARGE_CORKSCREW = SPR_G2_BM_TRACK_GENTLE_LARGE_CURVE_BANKED + 128,
|
||||
SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP = SPR_G2_BM_TRACK_LARGE_CORKSCREW + 40,
|
||||
SPR_G2_BM_TRACK_ZERO_G_ROLL = SPR_G2_BM_TRACK_MEDIUM_HALF_LOOP + 44,
|
||||
SPR_G2_BM_RC_END = SPR_G2_BM_TRACK_ZERO_G_ROLL + 32,
|
||||
SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL = SPR_G2_BM_TRACK_ZERO_G_ROLL + 32,
|
||||
SPR_G2_BM_RC_END = SPR_G2_BM_TRACK_LARGE_ZERO_G_ROLL + 40,
|
||||
|
||||
SPR_G2_MINIATURE_RAILWAY_BEGIN = SPR_G2_BM_RC_END,
|
||||
SPR_G2_MINIATURE_RAILWAY_QUARTER_TURN_3_TILES_SW_SE_PART_3 = SPR_G2_MINIATURE_RAILWAY_BEGIN,
|
||||
|
||||