Update support drawing for thrill rides and water rides (#21007)

* Update support drawing for thrill rides and water rides

* Consolidate support drawing calls for Go Karts
This commit is contained in:
Michael Steenbeek 2023-12-18 11:38:25 +01:00 committed by GitHub
parent a467be257b
commit 9dd5fd8d98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 232 additions and 84 deletions

View File

@ -56,7 +56,8 @@ static void Paint3dCinema(
int32_t edges = edges_3x3[trackSequence];
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_MISC]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_MISC]);
const StationObject* stationObject = ride.GetStationObject();

View File

@ -95,7 +95,8 @@ static void PaintEnterprise(
int32_t edges = edges_4x4[trackSequence];
WoodenASupportsPaintSetup(session, direction & 1, 0, height, session.TrackColours[SCHEME_MISC]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_MISC]);
const StationObject* stationObject = ride.GetStationObject();
TrackPaintUtilPaintFloor(session, edges, session.TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject);

View File

@ -151,7 +151,9 @@ static void PaintGoKartsTrackFlat(
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_FLAT);
}
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilSetSegmentSupportHeight(session, SEGMENTS_ALL, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
@ -187,22 +189,22 @@ static void PaintGoKartsTrack25DegUp(
session.WoodenSupportsPrependTo = ps;
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_SUPPORTS],
WoodenSupportTransitionType::Up25Deg);
switch (direction)
{
case 0:
WoodenASupportsPaintSetup(session, 0, 9, height, session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilPushTunnelLeft(session, height - 8, TUNNEL_SQUARE_7);
break;
case 1:
WoodenASupportsPaintSetup(session, 1, 10, height, session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_SQUARE_8);
break;
case 2:
WoodenASupportsPaintSetup(session, 0, 11, height, session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_SQUARE_8);
break;
case 3:
WoodenASupportsPaintSetup(session, 1, 12, height, session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilPushTunnelRight(session, height - 8, TUNNEL_SQUARE_7);
break;
}
@ -241,22 +243,22 @@ static void PaintGoKartsTrackFlatTo25DegUp(
session.WoodenSupportsPrependTo = ps;
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_SUPPORTS],
WoodenSupportTransitionType::FlatToUp25Deg);
switch (direction)
{
case 0:
WoodenASupportsPaintSetup(session, 0, 1, height, session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilPushTunnelLeft(session, height, TUNNEL_SQUARE_FLAT);
break;
case 1:
WoodenASupportsPaintSetup(session, 1, 2, height, session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_8);
break;
case 2:
WoodenASupportsPaintSetup(session, 0, 3, height, session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilPushTunnelLeft(session, height, TUNNEL_SQUARE_8);
break;
case 3:
WoodenASupportsPaintSetup(session, 1, 4, height, session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_FLAT);
break;
}
@ -295,22 +297,23 @@ static void PaintGoKartsTrack25DegUpToFlat(
session.WoodenSupportsPrependTo = ps;
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_SUPPORTS],
WoodenSupportTransitionType::Up25DegToFlat);
switch (direction)
{
case 0:
WoodenASupportsPaintSetup(session, 0, 5, height, session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilPushTunnelLeft(session, height - 8, TUNNEL_SQUARE_FLAT);
break;
case 1:
WoodenASupportsPaintSetup(session, 1, 6, height, session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_14);
break;
case 2:
WoodenASupportsPaintSetup(session, 0, 7, height, session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_14);
break;
case 3:
WoodenASupportsPaintSetup(session, 1, 8, height, session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilPushTunnelRight(session, height - 8, TUNNEL_SQUARE_FLAT);
break;
}
@ -446,7 +449,9 @@ static void PaintGoKartsStation(
}
}
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilSetSegmentSupportHeight(session, SEGMENTS_ALL, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
@ -516,7 +521,9 @@ static void PaintGoKartsTrackLeftQuarterTurn1Tile(
break;
}
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilSetSegmentSupportHeight(session, SEGMENTS_ALL, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);

View File

@ -95,7 +95,8 @@ static void PaintLaunchedFreefallBase(
int32_t edges = edges_3x3[trackSequence];
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_MISC]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_MISC]);
const StationObject* stationObject = ride.GetStationObject();

View File

@ -109,7 +109,8 @@ static void PaintMotionSimulator(
int32_t edges = edges_2x2[trackSequence];
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_MISC]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_MISC]);
const StationObject* stationObject = ride.GetStationObject();

View File

@ -107,7 +107,8 @@ static void PaintRotoDropBase(
int32_t edges = edges_3x3[trackSequence];
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_MISC]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_MISC]);
const StationObject* stationObject = ride.GetStationObject();

View File

@ -163,7 +163,9 @@ static void PaintSwingingShip(
if (relativeTrackSequence == 1 || relativeTrackSequence == 4)
{
WoodenASupportsPaintSetup(session, direction & 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
}
else if (direction & 1)
{

View File

@ -189,7 +189,8 @@ static void PaintTopSpin(
int32_t edges = edges_3x3[trackSequence];
WoodenASupportsPaintSetup(session, direction & 1, 0, height, session.TrackColours[SCHEME_MISC]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_MISC]);
const StationObject* stationObject = ride.GetStationObject();

View File

@ -91,7 +91,8 @@ static void PaintTwist(
ImageId imageId;
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_MISC]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_MISC]);
const StationObject* stationObject = ride.GetStationObject();
TrackPaintUtilPaintFloor(session, edges, session.TrackColours[SCHEME_MISC], height, floorSpritesCork, stationObject);

View File

@ -295,7 +295,9 @@ static void PaintRiverRapidsTrackFlat(
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 10, 10, height }, { 1, 2, 5 } });
}
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
if (direction & 1)
{
@ -334,7 +336,9 @@ static void PaintRiverRapidsTrack25Deg(PaintSession& session, uint8_t direction,
imageId = session.TrackColours[SCHEME_TRACK].WithIndex(sprites[direction][1]);
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 0, 27, height + 16 }, { 32, 1, 34 } });
WoodenASupportsPaintSetup(session, 0, 9, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::Up25Deg);
PaintUtilPushTunnelLeft(session, height - 8, TUNNEL_SQUARE_7);
break;
@ -346,7 +350,9 @@ static void PaintRiverRapidsTrack25Deg(PaintSession& session, uint8_t direction,
imageId = session.TrackColours[SCHEME_TRACK].WithIndex(sprites[direction][1]);
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 27, 0, height + 16 }, { 1, 32, 34 } });
WoodenASupportsPaintSetup(session, 1, 10, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::Up25Deg);
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_SQUARE_8);
break;
@ -358,7 +364,9 @@ static void PaintRiverRapidsTrack25Deg(PaintSession& session, uint8_t direction,
imageId = session.TrackColours[SCHEME_TRACK].WithIndex(sprites[direction][1]);
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 0, 27, height + 16 }, { 32, 1, 34 } });
WoodenASupportsPaintSetup(session, 0, 11, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::Up25Deg);
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_SQUARE_8);
break;
@ -369,7 +377,9 @@ static void PaintRiverRapidsTrack25Deg(PaintSession& session, uint8_t direction,
imageId = session.TrackColours[SCHEME_TRACK].WithIndex(sprites[direction][1]);
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 27, 0, height + 16 }, { 1, 32, 34 } });
WoodenASupportsPaintSetup(session, 1, 12, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::Up25Deg);
PaintUtilPushTunnelRight(session, height - 8, TUNNEL_SQUARE_7);
break;
}
@ -393,7 +403,9 @@ static void PaintRiverRapidsTrack25DegToFlatA(
imageId = session.TrackColours[SCHEME_TRACK].WithIndex(sprites[direction][1]);
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 0, 27, height + 16 }, { 32, 1, 18 } });
WoodenASupportsPaintSetup(session, 0, 5, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::Up25DegToFlat);
PaintUtilPushTunnelLeft(session, height - 8, TUNNEL_SQUARE_FLAT);
break;
@ -405,7 +417,9 @@ static void PaintRiverRapidsTrack25DegToFlatA(
imageId = session.TrackColours[SCHEME_TRACK].WithIndex(sprites[direction][1]);
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 27, 0, height + 16 }, { 1, 32, 18 } });
WoodenASupportsPaintSetup(session, 1, 6, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::Up25DegToFlat);
PaintUtilPushTunnelRight(session, height + 8, TUNNEL_14);
break;
@ -418,7 +432,9 @@ static void PaintRiverRapidsTrack25DegToFlatA(
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 0, 27, height }, { 32, 1, 18 } });
WoodenASupportsPaintSetup(session, 0, 7, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::Up25DegToFlat);
PaintUtilPushTunnelLeft(session, height + 8, TUNNEL_14);
break;
@ -429,7 +445,9 @@ static void PaintRiverRapidsTrack25DegToFlatA(
imageId = session.TrackColours[SCHEME_TRACK].WithIndex(sprites[direction][1]);
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 27, 0, height + 16 }, { 1, 32, 18 } });
WoodenASupportsPaintSetup(session, 1, 8, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::Up25DegToFlat);
PaintUtilPushTunnelRight(session, height - 8, TUNNEL_SQUARE_FLAT);
break;
}
@ -453,7 +471,9 @@ static void PaintRiverRapidsTrack25DegToFlatB(
imageId = session.TrackColours[SCHEME_TRACK].WithIndex(sprites[direction][1]);
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 0, 27, height + 16 }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(session, 0, 1, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::FlatToUp25Deg);
PaintUtilPushTunnelLeft(session, height, TUNNEL_SQUARE_FLAT);
break;
@ -465,7 +485,9 @@ static void PaintRiverRapidsTrack25DegToFlatB(
imageId = session.TrackColours[SCHEME_TRACK].WithIndex(sprites[direction][1]);
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 27, 0, height + 16 }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(session, 1, 2, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::FlatToUp25Deg);
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_8);
break;
@ -477,7 +499,9 @@ static void PaintRiverRapidsTrack25DegToFlatB(
imageId = session.TrackColours[SCHEME_TRACK].WithIndex(sprites[direction][1]);
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 0, 27, height + 16 }, { 32, 1, 26 } });
WoodenASupportsPaintSetup(session, 0, 3, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::FlatToUp25Deg);
PaintUtilPushTunnelLeft(session, height, TUNNEL_SQUARE_8);
break;
@ -488,7 +512,9 @@ static void PaintRiverRapidsTrack25DegToFlatB(
imageId = session.TrackColours[SCHEME_TRACK].WithIndex(sprites[direction][1]);
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 27, 0, height + 16 }, { 1, 32, 26 } });
WoodenASupportsPaintSetup(session, 1, 4, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::FlatToUp25Deg);
PaintUtilPushTunnelRight(session, height, TUNNEL_SQUARE_FLAT);
break;
}
@ -596,7 +622,9 @@ static void PaintRiverRapidsTrackLeftQuarterTurn1Tile(
break;
}
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilSetSegmentSupportHeight(session, SEGMENTS_ALL, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
}
@ -653,7 +681,9 @@ static void PaintRiverRapidsTrackRightQuarterTurn1Tile(
break;
}
WoodenASupportsPaintSetup(session, 1 - (direction & 1), 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NwSe, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilSetSegmentSupportHeight(session, SEGMENTS_ALL, 0xFFFF, 0);
PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20);
}
@ -713,7 +743,9 @@ static void PaintRiverRapidsTrackWaterfall(
PaintAddImageAsChild(session, imageId, { 0, 0, height }, bb);
}
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
if (direction & 1)
{
@ -754,7 +786,9 @@ static void PaintRiverRapidsTrackRapids(
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 0, 27, height + 17 }, { 32, 1, 11 } });
}
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
if (direction & 1)
{
@ -825,7 +859,9 @@ static void PaintRiverRapidsTrackWhirlpool(
PaintAddImageAsParent(session, imageId, { 0, 0, height }, bb);
}
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
if (direction & 1)
{

View File

@ -484,7 +484,9 @@ static void PaintSplashBoatsTrack25DegUp(
PaintAddImageAsParentRotated(session, direction, imageId, { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsParentRotated(session, direction, frontImageId, { 0, 0, height }, { { 0, 27, height }, { 32, 1, 50 } });
WoodenASupportsPaintSetup(session, (direction & 1), 9 + direction, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_SUPPORTS],
WoodenSupportTransitionType::Up25Deg);
if (direction == 0 || direction == 3)
{
@ -509,7 +511,9 @@ static void PaintSplashBoatsTrack60DegUp(
session, direction, imageId, { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsParentRotated(session, direction, frontImageId, { 0, 0, height }, { { 0, 27, height }, { 32, 1, 98 } });
WoodenASupportsPaintSetup(session, (direction & 1), 21 + direction, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_SUPPORTS],
WoodenSupportTransitionType::Up60Deg);
if (direction == 0 || direction == 3)
{
@ -533,7 +537,9 @@ static void PaintSplashBoatsTrackFlatTo25DegUp(
PaintAddImageAsParentRotated(session, direction, imageId, { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsParentRotated(session, direction, frontImageId, { 0, 0, height }, { { 0, 27, height }, { 32, 1, 42 } });
WoodenASupportsPaintSetup(session, (direction & 1), 1 + direction, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_SUPPORTS],
WoodenSupportTransitionType::FlatToUp25Deg);
if (direction == 0 || direction == 3)
{
@ -557,7 +563,9 @@ static void PaintSplashBoatsTrack25DegUpToFlat(
PaintAddImageAsParentRotated(session, direction, imageId, { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsParentRotated(session, direction, frontImageId, { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } });
WoodenASupportsPaintSetup(session, (direction & 1), 5 + direction, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_SUPPORTS],
WoodenSupportTransitionType::Up25DegToFlat);
if (direction == 0 || direction == 3)
{
@ -582,7 +590,9 @@ static void PaintSplashBoatsTrack25DegUpTo60DegUp(
session, direction, imageId, { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsParentRotated(session, direction, frontImageId, { 0, 0, height }, { { 0, 27, height }, { 32, 1, 66 } });
WoodenASupportsPaintSetup(session, (direction & 1), 13 + direction, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_SUPPORTS],
WoodenSupportTransitionType::Up25DegToUp60Deg);
if (direction == 0 || direction == 3)
{
@ -607,7 +617,9 @@ static void PaintSplashBoatsTrack60DegUpTo25DegUp(
session, direction, imageId, { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsParentRotated(session, direction, frontImageId, { 0, 0, height }, { { 0, 27, height }, { 32, 1, 66 } });
WoodenASupportsPaintSetup(session, (direction & 1), 17 + direction, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height, session.TrackColours[SCHEME_SUPPORTS],
WoodenSupportTransitionType::Up60DegToUp25Deg);
if (direction == 0 || direction == 3)
{
@ -631,9 +643,9 @@ static void PaintSplashBoatsTrack25DegDown(
PaintAddImageAsParentRotated(session, direction, imageId, { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsParentRotated(session, direction, frontImageId, { 0, 0, height }, { { 0, 27, height }, { 32, 1, 50 } });
static constexpr uint8_t specialSupport[] = { 11, 12, 9, 10 };
WoodenASupportsPaintSetup(
session, (direction & 1), specialSupport[direction], height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, (direction + 2) % NumOrthogonalDirections, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::Up25Deg);
if (direction == 0 || direction == 3)
{
@ -664,9 +676,9 @@ static void PaintSplashBoatsTrackFlatTo25DegDown(
PaintAddImageAsParentRotated(session, direction, imageId, { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsParentRotated(session, direction, frontImageId, { 0, 0, height }, { { 0, 27, height }, { 32, 1, 34 } });
static constexpr uint8_t specialSupport[] = { 7, 8, 5, 6 };
WoodenASupportsPaintSetup(
session, (direction & 1), specialSupport[direction], height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, (direction + 2) % NumOrthogonalDirections, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::Up25DegToFlat);
if (direction == 0 || direction == 3)
{
@ -704,9 +716,9 @@ static void PaintSplashBoatsTrack25DegDownToFlat(
PaintAddImageAsParentRotated(session, direction, imageId, { 0, 0, height }, { { 0, 6, height }, { 32, 20, 2 } });
PaintAddImageAsParentRotated(session, direction, frontImageId, { 0, 0, height }, { { 0, 27, height }, { 32, 1, 42 } });
static constexpr uint8_t specialSupport[] = { 3, 4, 1, 2 };
WoodenASupportsPaintSetup(
session, (direction & 1), specialSupport[direction], height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, (direction + 2) % NumOrthogonalDirections, height,
session.TrackColours[SCHEME_SUPPORTS], WoodenSupportTransitionType::FlatToUp25Deg);
if (direction == 0 || direction == 3)
{
@ -749,7 +761,9 @@ static void PaintSplashBoatsTrackFlat(
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { { 0, 27, height }, { 32, 1, 26 } });
}
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
if (direction & 1)
{
@ -788,7 +802,9 @@ static void PaintSplashBoatsStation(
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { 32, 32, 1 });
}
WoodenASupportsPaintSetup(session, (direction & 1), 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
TrackPaintUtilDrawNarrowStationPlatform(session, ride, direction, height, 7, trackElement);
@ -810,14 +826,48 @@ static void PaintSplashBoatsTrackLeftQuarterTurn5Tiles(
if (trackSequence != 1 && trackSequence != 4)
{
static constexpr uint8_t supportTypes[][7] = {
{ 0, 0xFF, 5, 3, 0xFF, 5, 1 },
{ 1, 0xFF, 2, 4, 0xFF, 2, 0 },
{ 0, 0xFF, 3, 5, 0xFF, 3, 1 },
{ 1, 0xFF, 4, 2, 0xFF, 4, 0 },
static constexpr WoodenSupportSubType supportTypes[NumOrthogonalDirections][7] = {
{
WoodenSupportSubType::NeSw,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner3,
WoodenSupportSubType::Corner1,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner3,
WoodenSupportSubType::NwSe,
},
{
WoodenSupportSubType::NwSe,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner0,
WoodenSupportSubType::Corner2,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner0,
WoodenSupportSubType::NeSw,
},
{
WoodenSupportSubType::NeSw,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner1,
WoodenSupportSubType::Corner3,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner1,
WoodenSupportSubType::NwSe,
},
{
WoodenSupportSubType::NwSe,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner2,
WoodenSupportSubType::Corner0,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner2,
WoodenSupportSubType::NeSw,
},
};
uint8_t supportType = supportTypes[direction][trackSequence];
WoodenASupportsPaintSetup(session, supportType, 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetup(
session, WoodenSupportType::Truss, supportTypes[direction][trackSequence], height,
session.TrackColours[SCHEME_SUPPORTS]);
}
switch (trackSequence)
@ -889,14 +939,48 @@ static void PaintSplashBoatsTrackRightQuarterTurn5Tiles(
if (trackSequence != 1 && trackSequence != 4)
{
static constexpr uint8_t supportTypes[][7] = {
{ 0, 0xFF, 4, 2, 0xFF, 4, 1 },
{ 1, 0xFF, 5, 3, 0xFF, 5, 0 },
{ 0, 0xFF, 2, 4, 0xFF, 2, 1 },
{ 1, 0xFF, 3, 5, 0xFF, 3, 0 },
static constexpr WoodenSupportSubType supportTypes[][7] = {
{
WoodenSupportSubType::NeSw,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner2,
WoodenSupportSubType::Corner0,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner2,
WoodenSupportSubType::NwSe,
},
{
WoodenSupportSubType::NwSe,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner3,
WoodenSupportSubType::Corner1,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner3,
WoodenSupportSubType::NeSw,
},
{
WoodenSupportSubType::NeSw,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner0,
WoodenSupportSubType::Corner2,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner0,
WoodenSupportSubType::NwSe,
},
{
WoodenSupportSubType::NwSe,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner1,
WoodenSupportSubType::Corner3,
WoodenSupportSubType::NeSw, // Unused
WoodenSupportSubType::Corner1,
WoodenSupportSubType::NeSw,
},
};
uint8_t supportType = supportTypes[direction][trackSequence];
WoodenASupportsPaintSetup(session, supportType, 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetup(
session, WoodenSupportType::Truss, supportTypes[direction][trackSequence], height,
session.TrackColours[SCHEME_SUPPORTS]);
}
switch (trackSequence)
@ -991,8 +1075,6 @@ static void PaintSplashBoatsTrackSBendLeft(
auto imageId = session.TrackColours[SCHEME_TRACK].WithIndex(imageIds[direction][trackSequence][0]);
auto frontImageId = session.TrackColours[SCHEME_TRACK].WithIndex(imageIds[direction][trackSequence][1]);
int16_t bboy;
static constexpr int32_t supportTypes1[] = { 5, 2, 3, 4 };
static constexpr int32_t supportTypes2[] = { 3, 4, 5, 2 };
switch (trackSequence)
{
@ -1000,7 +1082,9 @@ static void PaintSplashBoatsTrackSBendLeft(
PaintAddImageAsParentRotated(session, direction, imageId, { 0, 0, height }, { { 0, 2, height }, { 32, 27, 2 } });
PaintAddImageAsParentRotated(
session, direction, frontImageId, { 0, 0, height }, { { 0, 2, height + 27 }, { 32, 27, 0 } });
WoodenASupportsPaintSetup(session, direction & 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilSetSegmentSupportHeight(session, SEGMENTS_ALL, 0xFFFF, 0);
break;
case 1:
@ -1009,7 +1093,9 @@ static void PaintSplashBoatsTrackSBendLeft(
PaintAddImageAsParentRotated(
session, direction, frontImageId, { 0, 0, height }, { { 0, bboy, height + 27 }, { 32, 26, 0 } });
WoodenASupportsPaintSetup(session, supportTypes1[direction], 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::Corner3, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilSetSegmentSupportHeight(
session,
@ -1022,7 +1108,9 @@ static void PaintSplashBoatsTrackSBendLeft(
PaintAddImageAsParentRotated(
session, direction, frontImageId, { 0, 0, height }, { { 0, bboy, height + 27 }, { 32, 26, 0 } });
WoodenASupportsPaintSetup(session, supportTypes2[direction], 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::Corner1, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilSetSegmentSupportHeight(
session,
@ -1033,7 +1121,9 @@ static void PaintSplashBoatsTrackSBendLeft(
PaintAddImageAsParentRotated(session, direction, imageId, { 0, 0, height }, { { 0, 2, height }, { 32, 27, 2 } });
PaintAddImageAsParentRotated(
session, direction, frontImageId, { 0, 0, height }, { { 0, 2, height + 27 }, { 32, 27, 0 } });
WoodenASupportsPaintSetup(session, direction & 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilSetSegmentSupportHeight(session, SEGMENTS_ALL, 0xFFFF, 0);
break;
}
@ -1091,8 +1181,6 @@ static void PaintSplashBoatsTrackSBendRight(
auto imageId = session.TrackColours[SCHEME_TRACK].WithIndex(imageIds[direction][trackSequence][0]);
auto frontImageId = session.TrackColours[SCHEME_TRACK].WithIndex(imageIds[direction][trackSequence][1]);
int16_t bboy;
static constexpr int32_t supportTypes1[] = { 4, 5, 2, 3 };
static constexpr int32_t supportTypes2[] = { 2, 3, 4, 5 };
switch (trackSequence)
{
@ -1100,7 +1188,9 @@ static void PaintSplashBoatsTrackSBendRight(
PaintAddImageAsParentRotated(session, direction, imageId, { 0, 0, height }, { { 0, 2, height }, { 32, 27, 2 } });
PaintAddImageAsParentRotated(
session, direction, frontImageId, { 0, 0, height }, { { 0, 2, height + 27 }, { 32, 27, 0 } });
WoodenASupportsPaintSetup(session, direction & 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilSetSegmentSupportHeight(session, SEGMENTS_ALL, 0xFFFF, 0);
break;
case 1:
@ -1109,7 +1199,9 @@ static void PaintSplashBoatsTrackSBendRight(
PaintAddImageAsParentRotated(
session, direction, frontImageId, { 0, 0, height }, { { 0, bboy, height + 27 }, { 32, 26, 0 } });
WoodenASupportsPaintSetup(session, supportTypes1[direction], 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::Corner2, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilSetSegmentSupportHeight(
session,
@ -1122,7 +1214,9 @@ static void PaintSplashBoatsTrackSBendRight(
PaintAddImageAsParentRotated(
session, direction, frontImageId, { 0, 0, height }, { { 0, bboy, height + 27 }, { 32, 26, 0 } });
WoodenASupportsPaintSetup(session, supportTypes2[direction], 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::Corner0, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilSetSegmentSupportHeight(
session,
@ -1133,7 +1227,9 @@ static void PaintSplashBoatsTrackSBendRight(
PaintAddImageAsParentRotated(session, direction, imageId, { 0, 0, height }, { { 0, 2, height }, { 32, 27, 2 } });
PaintAddImageAsParentRotated(
session, direction, frontImageId, { 0, 0, height }, { { 0, 2, height + 27 }, { 32, 27, 0 } });
WoodenASupportsPaintSetup(session, direction & 1, 0, height, session.TrackColours[SCHEME_SUPPORTS]);
WoodenASupportsPaintSetupRotated(
session, WoodenSupportType::Truss, WoodenSupportSubType::NeSw, direction, height,
session.TrackColours[SCHEME_SUPPORTS]);
PaintUtilSetSegmentSupportHeight(session, SEGMENTS_ALL, 0xFFFF, 0);
break;
}