From 0de7f28c93d0507458fa1e8eec93bdc8a5a2d5be Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Tue, 27 Jul 2021 16:33:03 +0200 Subject: [PATCH] Hide brown base on flat rides if "no platform" station style is selected --- src/openrct2/object/StationObject.cpp | 1 + src/openrct2/object/StationObject.h | 1 + src/openrct2/ride/TrackPaint.cpp | 10 +++++++++- src/openrct2/ride/TrackPaint.h | 3 ++- src/openrct2/ride/gentle/Circus.cpp | 8 ++++++-- src/openrct2/ride/gentle/CrookedHouse.cpp | 8 ++++++-- src/openrct2/ride/gentle/FerrisWheel.cpp | 8 ++++++-- src/openrct2/ride/gentle/HauntedHouse.cpp | 8 ++++++-- src/openrct2/ride/gentle/MerryGoRound.cpp | 8 ++++++-- src/openrct2/ride/gentle/SpaceRings.cpp | 3 ++- src/openrct2/ride/thrill/3dCinema.cpp | 8 ++++++-- src/openrct2/ride/thrill/Enterprise.cpp | 3 ++- src/openrct2/ride/thrill/MotionSimulator.cpp | 7 ++++++- src/openrct2/ride/thrill/TopSpin.cpp | 8 ++++++-- src/openrct2/ride/thrill/Twist.cpp | 3 ++- 15 files changed, 67 insertions(+), 20 deletions(-) diff --git a/src/openrct2/object/StationObject.cpp b/src/openrct2/object/StationObject.cpp index 38a7a55969..4b88153142 100644 --- a/src/openrct2/object/StationObject.cpp +++ b/src/openrct2/object/StationObject.cpp @@ -94,6 +94,7 @@ void StationObject::ReadJson(IReadObjectContext* context, json_t& root) { "hasPrimaryColour", STATION_OBJECT_FLAGS::HAS_PRIMARY_COLOUR }, { "hasSecondaryColour", STATION_OBJECT_FLAGS::HAS_SECONDARY_COLOUR }, { "isTransparent", STATION_OBJECT_FLAGS::IS_TRANSPARENT }, + { "noPlatforms", STATION_OBJECT_FLAGS::NO_PLATFORMS }, }); } diff --git a/src/openrct2/object/StationObject.h b/src/openrct2/object/StationObject.h index 06e7b3ddbf..6965a81592 100644 --- a/src/openrct2/object/StationObject.h +++ b/src/openrct2/object/StationObject.h @@ -16,6 +16,7 @@ namespace STATION_OBJECT_FLAGS const uint32_t HAS_PRIMARY_COLOUR = 1 << 0; const uint32_t HAS_SECONDARY_COLOUR = 1 << 1; const uint32_t IS_TRANSPARENT = 1 << 2; + const uint32_t NO_PLATFORMS = 1 << 3; } // namespace STATION_OBJECT_FLAGS class StationObject final : public Object diff --git a/src/openrct2/ride/TrackPaint.cpp b/src/openrct2/ride/TrackPaint.cpp index fba68ed5a2..0b0f1d9e6f 100644 --- a/src/openrct2/ride/TrackPaint.cpp +++ b/src/openrct2/ride/TrackPaint.cpp @@ -205,6 +205,10 @@ enum bool track_paint_util_has_fence( enum edge_t edge, const CoordsXY& position, const TileElement* tileElement, Ride* ride, uint8_t rotation) { + const auto* stationObject = ride_get_station_object(ride); + if (stationObject != nullptr && stationObject->Flags & STATION_OBJECT_FLAGS::NO_PLATFORMS) + return false; + TileCoordsXY offset; switch (edge) { @@ -232,8 +236,12 @@ bool track_paint_util_has_fence( } void track_paint_util_paint_floor( - paint_session* session, uint8_t edges, uint32_t colourFlags, uint16_t height, const uint32_t floorSprites[4]) + paint_session* session, uint8_t edges, uint32_t colourFlags, uint16_t height, const uint32_t floorSprites[4], + const StationObject* stationStyle) { + if (stationStyle != nullptr && stationStyle->Flags & STATION_OBJECT_FLAGS::NO_PLATFORMS) + return; + uint32_t imageId; if (edges & EDGE_SW && edges & EDGE_SE) diff --git a/src/openrct2/ride/TrackPaint.h b/src/openrct2/ride/TrackPaint.h index 07cac144dd..4866947198 100644 --- a/src/openrct2/ride/TrackPaint.h +++ b/src/openrct2/ride/TrackPaint.h @@ -280,7 +280,8 @@ extern const size_t mini_golf_peep_animation_lengths[]; bool track_paint_util_has_fence( enum edge_t edge, const CoordsXY& position, const TileElement* tileElement, Ride* ride, uint8_t rotation); void track_paint_util_paint_floor( - paint_session* session, uint8_t edges, uint32_t colourFlags, uint16_t height, const uint32_t floorSprites[4]); + paint_session* session, uint8_t edges, uint32_t colourFlags, uint16_t height, const uint32_t floorSprites[4], + const StationObject* stationStyle); void track_paint_util_paint_fences( paint_session* session, uint8_t edges, const CoordsXY& position, const TileElement* tileElement, Ride* ride, uint32_t colourFlags, uint16_t height, const uint32_t fenceSprites[4], uint8_t rotation); diff --git a/src/openrct2/ride/gentle/Circus.cpp b/src/openrct2/ride/gentle/Circus.cpp index ecdf7b25c4..4d174b03a5 100644 --- a/src/openrct2/ride/gentle/Circus.cpp +++ b/src/openrct2/ride/gentle/Circus.cpp @@ -62,9 +62,13 @@ static void paint_circus( wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr); - track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork); - auto ride = get_ride(rideIndex); + StationObject* stationObject = nullptr; + if (ride != nullptr) + stationObject = ride_get_station_object(ride); + + track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject); + if (ride != nullptr) { track_paint_util_paint_fences( diff --git a/src/openrct2/ride/gentle/CrookedHouse.cpp b/src/openrct2/ride/gentle/CrookedHouse.cpp index 76153fb2fb..bebbbf042d 100644 --- a/src/openrct2/ride/gentle/CrookedHouse.cpp +++ b/src/openrct2/ride/gentle/CrookedHouse.cpp @@ -72,9 +72,13 @@ static void paint_crooked_house( wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr); - track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork); - auto ride = get_ride(rideIndex); + StationObject* stationObject = nullptr; + if (ride != nullptr) + stationObject = ride_get_station_object(ride); + + track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject); + if (ride != nullptr) { track_paint_util_paint_fences( diff --git a/src/openrct2/ride/gentle/FerrisWheel.cpp b/src/openrct2/ride/gentle/FerrisWheel.cpp index da58c30b44..4ed9d0e38c 100644 --- a/src/openrct2/ride/gentle/FerrisWheel.cpp +++ b/src/openrct2/ride/gentle/FerrisWheel.cpp @@ -151,12 +151,16 @@ static void paint_ferris_wheel( wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_MISC], nullptr); - track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork); + auto ride = get_ride(rideIndex); + StationObject* stationObject = nullptr; + if (ride != nullptr) + stationObject = ride_get_station_object(ride); + + track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject); uint32_t imageId; uint8_t rotation = session->CurrentRotation; uint32_t colourFlags = session->TrackColours[SCHEME_MISC]; - auto ride = get_ride(rideIndex); if (ride != nullptr) { if (edges & EDGE_NW && track_paint_util_has_fence(EDGE_NW, session->MapPosition, tileElement, ride, rotation)) diff --git a/src/openrct2/ride/gentle/HauntedHouse.cpp b/src/openrct2/ride/gentle/HauntedHouse.cpp index 33ffc26c6c..5caeffb7f2 100644 --- a/src/openrct2/ride/gentle/HauntedHouse.cpp +++ b/src/openrct2/ride/gentle/HauntedHouse.cpp @@ -104,9 +104,13 @@ static void paint_haunted_house( wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr); - track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork); - auto ride = get_ride(rideIndex); + StationObject* stationObject = nullptr; + if (ride != nullptr) + stationObject = ride_get_station_object(ride); + + track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject); + if (ride != nullptr) { track_paint_util_paint_fences( diff --git a/src/openrct2/ride/gentle/MerryGoRound.cpp b/src/openrct2/ride/gentle/MerryGoRound.cpp index 90778ee6d2..1ce354af1b 100644 --- a/src/openrct2/ride/gentle/MerryGoRound.cpp +++ b/src/openrct2/ride/gentle/MerryGoRound.cpp @@ -113,9 +113,13 @@ static void paint_merry_go_round( wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr); - track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork); - auto ride = get_ride(rideIndex); + StationObject* stationObject = nullptr; + if (ride != nullptr) + stationObject = ride_get_station_object(ride); + + track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject); + if (ride != nullptr) { track_paint_util_paint_fences( diff --git a/src/openrct2/ride/gentle/SpaceRings.cpp b/src/openrct2/ride/gentle/SpaceRings.cpp index 2a27d69183..46a04546df 100644 --- a/src/openrct2/ride/gentle/SpaceRings.cpp +++ b/src/openrct2/ride/gentle/SpaceRings.cpp @@ -102,7 +102,8 @@ static void paint_space_rings( wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr); - track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork); + StationObject* stationObject = ride_get_station_object(ride); + track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject); switch (trackSequence) { diff --git a/src/openrct2/ride/thrill/3dCinema.cpp b/src/openrct2/ride/thrill/3dCinema.cpp index bd85544280..7378e59d23 100644 --- a/src/openrct2/ride/thrill/3dCinema.cpp +++ b/src/openrct2/ride/thrill/3dCinema.cpp @@ -62,9 +62,13 @@ static void paint_3d_cinema( wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr); - track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork); - auto ride = get_ride(rideIndex); + StationObject* stationObject = nullptr; + if (ride != nullptr) + stationObject = ride_get_station_object(ride); + + track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject); + if (ride != nullptr) { track_paint_util_paint_fences( diff --git a/src/openrct2/ride/thrill/Enterprise.cpp b/src/openrct2/ride/thrill/Enterprise.cpp index 68b6d7a5fe..2020ef0424 100644 --- a/src/openrct2/ride/thrill/Enterprise.cpp +++ b/src/openrct2/ride/thrill/Enterprise.cpp @@ -92,7 +92,8 @@ static void paint_enterprise( wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_MISC], nullptr); - track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork); + StationObject* stationObject = ride_get_station_object(ride); + track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject); track_paint_util_paint_fences( session, edges, session->MapPosition, tileElement, ride, session->TrackColours[SCHEME_TRACK], height, fenceSpritesRope, diff --git a/src/openrct2/ride/thrill/MotionSimulator.cpp b/src/openrct2/ride/thrill/MotionSimulator.cpp index ac687f3e22..942ed2720d 100644 --- a/src/openrct2/ride/thrill/MotionSimulator.cpp +++ b/src/openrct2/ride/thrill/MotionSimulator.cpp @@ -140,9 +140,14 @@ static void paint_motionsimulator( int32_t edges = edges_2x2[trackSequence]; wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr); - track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork); auto ride = get_ride(rideIndex); + StationObject* stationObject = nullptr; + if (ride != nullptr) + stationObject = ride_get_station_object(ride); + + track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject); + if (ride != nullptr) { track_paint_util_paint_fences( diff --git a/src/openrct2/ride/thrill/TopSpin.cpp b/src/openrct2/ride/thrill/TopSpin.cpp index acf58a18ea..f37471c55e 100644 --- a/src/openrct2/ride/thrill/TopSpin.cpp +++ b/src/openrct2/ride/thrill/TopSpin.cpp @@ -255,9 +255,13 @@ static void paint_top_spin( wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_MISC], nullptr); - track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork); - auto ride = get_ride(rideIndex); + StationObject* stationObject = nullptr; + if (ride != nullptr) + stationObject = ride_get_station_object(ride); + + track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject); + if (ride != nullptr) { track_paint_util_paint_fences( diff --git a/src/openrct2/ride/thrill/Twist.cpp b/src/openrct2/ride/thrill/Twist.cpp index 1c0d26192c..ef05e114e2 100644 --- a/src/openrct2/ride/thrill/Twist.cpp +++ b/src/openrct2/ride/thrill/Twist.cpp @@ -94,7 +94,8 @@ static void paint_twist( wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr); - track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_MISC], height, floorSpritesCork); + StationObject* stationObject = ride_get_station_object(ride); + track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_MISC], height, floorSpritesCork, stationObject); switch (trackSequence) {