From 6f9468a31601515271c5c152f4413cc82cd8b95c Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Tue, 27 Jul 2021 17:01:22 +0200 Subject: [PATCH] Implement invisible platforms on some tracked rides --- src/openrct2/ride/TrackPaint.cpp | 11 ++++++++- src/openrct2/ride/TrackPaint.h | 2 +- .../coaster/AirPoweredVerticalCoaster.cpp | 2 +- .../ride/coaster/BolligerMabillardTrack.cpp | 2 +- src/openrct2/ride/coaster/HybridCoaster.cpp | 2 +- .../ride/coaster/ReverseFreefallCoaster.cpp | 2 +- src/openrct2/ride/transport/Monorail.cpp | 24 ++++++++++++------- src/openrct2/ride/water/RiverRapids.cpp | 2 +- src/openrct2/ride/water/SplashBoats.cpp | 2 +- 9 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/openrct2/ride/TrackPaint.cpp b/src/openrct2/ride/TrackPaint.cpp index ca8cdcd4cf..f662d129fa 100644 --- a/src/openrct2/ride/TrackPaint.cpp +++ b/src/openrct2/ride/TrackPaint.cpp @@ -550,6 +550,9 @@ void track_paint_util_draw_station_inverted( auto stationObj = ride_get_station_object(ride); const bool hasGreenLight = tileElement->AsTrack()->HasGreenLight(); + if (stationObj != nullptr && stationObj->Flags & STATION_OBJECT_FLAGS::NO_PLATFORMS) + return; + bool hasFence; uint32_t imageId; @@ -849,11 +852,14 @@ bool track_paint_util_draw_station_covers_2( return true; } -void track_paint_util_draw_station_platform( +void track_paint_util_draw_narrow_station_platform( paint_session* session, Ride* ride, Direction direction, int32_t height, int32_t zOffset, const TileElement* tileElement) { CoordsXY position = session->MapPosition; auto stationObj = ride_get_station_object(ride); + if (stationObj != nullptr && stationObj->Flags & STATION_OBJECT_FLAGS::NO_PLATFORMS) + return; + if (direction & 1) { bool hasFence = track_paint_util_has_fence(EDGE_NE, position, tileElement, ride, session->CurrentRotation); @@ -898,6 +904,9 @@ void track_paint_util_draw_pier( paint_session* session, Ride* ride, const StationObject* stationObj, const CoordsXY& position, Direction direction, int32_t height, const TileElement* tileElement, uint8_t rotation) { + if (stationObj != nullptr && stationObj->Flags & STATION_OBJECT_FLAGS::NO_PLATFORMS) + return; + bool hasFence; uint32_t imageId; diff --git a/src/openrct2/ride/TrackPaint.h b/src/openrct2/ride/TrackPaint.h index 4866947198..1cd6608667 100644 --- a/src/openrct2/ride/TrackPaint.h +++ b/src/openrct2/ride/TrackPaint.h @@ -290,7 +290,7 @@ bool track_paint_util_draw_station_covers( bool track_paint_util_draw_station_covers_2( paint_session* session, enum edge_t edge, bool hasFence, const StationObject* stationObject, uint16_t height, uint8_t stationVariant); -void track_paint_util_draw_station_platform( +void track_paint_util_draw_narrow_station_platform( paint_session* session, Ride* ride, Direction direction, int32_t height, int32_t zOffset, const TileElement* tileElement); void track_paint_util_draw_station( paint_session* session, ride_id_t rideIndex, Direction direction, uint16_t height, const TileElement* tileElement); diff --git a/src/openrct2/ride/coaster/AirPoweredVerticalCoaster.cpp b/src/openrct2/ride/coaster/AirPoweredVerticalCoaster.cpp index 920876083d..4826338faa 100644 --- a/src/openrct2/ride/coaster/AirPoweredVerticalCoaster.cpp +++ b/src/openrct2/ride/coaster/AirPoweredVerticalCoaster.cpp @@ -220,7 +220,7 @@ static void air_powered_vertical_rc_track_station( auto ride = get_ride(rideIndex); if (ride != nullptr) - track_paint_util_draw_station_platform(session, ride, direction, height, 5, tileElement); + track_paint_util_draw_narrow_station_platform(session, ride, direction, height, 5, tileElement); paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); diff --git a/src/openrct2/ride/coaster/BolligerMabillardTrack.cpp b/src/openrct2/ride/coaster/BolligerMabillardTrack.cpp index 55bdd29ef7..fae8f5ce31 100644 --- a/src/openrct2/ride/coaster/BolligerMabillardTrack.cpp +++ b/src/openrct2/ride/coaster/BolligerMabillardTrack.cpp @@ -98,7 +98,7 @@ void bolliger_mabillard_track_station( auto ride = get_ride(rideIndex); if (ride != nullptr) - track_paint_util_draw_station_platform(session, ride, direction, height, 9, tileElement); + track_paint_util_draw_narrow_station_platform(session, ride, direction, height, 9, tileElement); paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); diff --git a/src/openrct2/ride/coaster/HybridCoaster.cpp b/src/openrct2/ride/coaster/HybridCoaster.cpp index 5b332640ff..92021bbd9a 100644 --- a/src/openrct2/ride/coaster/HybridCoaster.cpp +++ b/src/openrct2/ride/coaster/HybridCoaster.cpp @@ -85,7 +85,7 @@ namespace HybridRC auto ride = get_ride(rideIndex); if (ride != nullptr) - track_paint_util_draw_station_platform(session, ride, direction, height, 10, tileElement); + track_paint_util_draw_narrow_station_platform(session, ride, direction, height, 10, tileElement); paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT); paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); diff --git a/src/openrct2/ride/coaster/ReverseFreefallCoaster.cpp b/src/openrct2/ride/coaster/ReverseFreefallCoaster.cpp index fb860fb3c0..c374e6770f 100644 --- a/src/openrct2/ride/coaster/ReverseFreefallCoaster.cpp +++ b/src/openrct2/ride/coaster/ReverseFreefallCoaster.cpp @@ -254,7 +254,7 @@ static void paint_reverse_freefall_rc_station( auto ride = get_ride(rideIndex); if (ride != nullptr) - track_paint_util_draw_station_platform(session, ride, direction, height, 5, tileElement); + track_paint_util_draw_narrow_station_platform(session, ride, direction, height, 5, tileElement); paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(session, height + 32, 0x20); diff --git a/src/openrct2/ride/transport/Monorail.cpp b/src/openrct2/ride/transport/Monorail.cpp index eccd89fa0f..956c423ad7 100644 --- a/src/openrct2/ride/transport/Monorail.cpp +++ b/src/openrct2/ride/transport/Monorail.cpp @@ -9,6 +9,7 @@ #include "../../common.h" #include "../../interface/Viewport.h" +#include "../../object/StationObject.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" #include "../../world/Map.h" @@ -458,16 +459,23 @@ static void paint_monorail_station( const TileElement* tileElement) { uint32_t imageId; + const StationObject* stationObject = nullptr; + const auto* ride = get_ride(rideIndex); + if (ride != nullptr) + stationObject = ride_get_station_object(ride); - if (direction == 0 || direction == 2) + if (stationObject == nullptr || !(stationObject->Flags & STATION_OBJECT_FLAGS::NO_PLATFORMS)) { - imageId = SPR_STATION_BASE_B_SW_NE | session->TrackColours[SCHEME_MISC]; - PaintAddImageAsParent(session, imageId, 0, 0, 32, 28, 2, height - 2, 0, 2, height); - } - else if (direction == 1 || direction == 3) - { - imageId = SPR_STATION_BASE_B_NW_SE | session->TrackColours[SCHEME_MISC]; - PaintAddImageAsParent(session, imageId, 0, 0, 28, 32, 2, height - 2, 2, 0, height); + if (direction == 0 || direction == 2) + { + imageId = SPR_STATION_BASE_B_SW_NE | session->TrackColours[SCHEME_MISC]; + PaintAddImageAsParent(session, imageId, 0, 0, 32, 28, 2, height - 2, 0, 2, height); + } + else if (direction == 1 || direction == 3) + { + imageId = SPR_STATION_BASE_B_NW_SE | session->TrackColours[SCHEME_MISC]; + PaintAddImageAsParent(session, imageId, 0, 0, 28, 32, 2, height - 2, 2, 0, height); + } } imageId = monorail_track_pieces_flat[direction] | session->TrackColours[SCHEME_TRACK]; diff --git a/src/openrct2/ride/water/RiverRapids.cpp b/src/openrct2/ride/water/RiverRapids.cpp index b2b215d6f3..d3f58ab408 100644 --- a/src/openrct2/ride/water/RiverRapids.cpp +++ b/src/openrct2/ride/water/RiverRapids.cpp @@ -325,7 +325,7 @@ static void paint_river_rapids_station( paint_river_rapids_track_flat(session, rideIndex, trackSequence, direction, height, tileElement); auto ride = get_ride(rideIndex); if (ride != nullptr) - track_paint_util_draw_station_platform(session, ride, direction, height, 12, tileElement); + track_paint_util_draw_narrow_station_platform(session, ride, direction, height, 12, tileElement); paint_util_set_general_support_height(session, height + 32, 0x20); } diff --git a/src/openrct2/ride/water/SplashBoats.cpp b/src/openrct2/ride/water/SplashBoats.cpp index 8d693895d4..9589d5dab9 100644 --- a/src/openrct2/ride/water/SplashBoats.cpp +++ b/src/openrct2/ride/water/SplashBoats.cpp @@ -811,7 +811,7 @@ static void paint_splash_boats_station( auto ride = get_ride(rideIndex); if (ride != nullptr) - track_paint_util_draw_station_platform(session, ride, direction, height, 7, tileElement); + track_paint_util_draw_narrow_station_platform(session, ride, direction, height, 7, tileElement); paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT);