From 0343d721e37aea79e7252e3546395bf49b45ca04 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Fri, 23 Jan 2026 22:26:47 +0100 Subject: [PATCH] Fix: diagonal and inclined brakes not counted when calculating upkeep cost --- distribution/changelog.txt | 1 + src/openrct2/ride/RideRatings.cpp | 22 ++++++---------------- src/openrct2/ride/Track.cpp | 5 +++++ src/openrct2/ride/Track.h | 1 + 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 88e13c4eed..0a6d4916b4 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -11,6 +11,7 @@ - Fix: [#25799] The animated options tab icon of the news window does not always redraw. - Fix: [#25850] Guests do not have their happiness penalised by low energy, low hunger, low thirst, high toilet. Ride nausea generation different compared to vanilla. - Fix: [#25854] When a guest is at 0 happiness or energy, the game draws too big of a bar in the guest stats window. +- Fix: [#25862] Diagonal and inclined brakes are not counted when calculating upkeep cost. 0.4.30 (2026-01-04) ------------------------------------------------------------------------ diff --git a/src/openrct2/ride/RideRatings.cpp b/src/openrct2/ride/RideRatings.cpp index 7278a2b82d..a3b609cdd3 100644 --- a/src/openrct2/ride/RideRatings.cpp +++ b/src/openrct2/ride/RideRatings.cpp @@ -865,22 +865,12 @@ static void ride_ratings_score_close_proximity(RideRating::UpdateState& state, T ride_ratings_score_close_proximity_in_direction(state, inputTileElement, (direction - 1) & 3); ride_ratings_score_close_proximity_loops(state, inputTileElement); - switch (state.ProximityTrackType) - { - case TrackElemType::brakes: - state.AmountOfBrakes++; - break; - case TrackElemType::booster: - case TrackElemType::diagBooster: - state.amountOfBoosters++; - break; - case TrackElemType::leftReverser: - case TrackElemType::rightReverser: - state.AmountOfReversers++; - break; - default: - break; - } + if (TrackTypeIsBrakes(state.ProximityTrackType)) + state.AmountOfBrakes++; + else if (TrackTypeIsBooster(state.ProximityTrackType)) + state.amountOfBoosters++; + else if (TrackTypeIsReverser(state.ProximityTrackType)) + state.AmountOfReversers++; } static void RideRatingsCalculate(RideRating::UpdateState& state, Ride& ride) diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index a1caba833a..664f10d2d5 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -663,6 +663,11 @@ bool TrackTypeIsBooster(TrackElemType trackType) } } +bool TrackTypeIsReverser(TrackElemType trackType) +{ + return (trackType == TrackElemType::leftReverser) || (trackType == TrackElemType::rightReverser); +} + bool TrackElementIsCovered(TrackElemType trackElementType) { switch (trackElementType) diff --git a/src/openrct2/ride/Track.h b/src/openrct2/ride/Track.h index 9f94f47d8f..d3d88996bd 100644 --- a/src/openrct2/ride/Track.h +++ b/src/openrct2/ride/Track.h @@ -739,6 +739,7 @@ bool TrackTypeIsStation(OpenRCT2::TrackElemType trackType); bool TrackTypeIsBrakes(OpenRCT2::TrackElemType trackType); bool TrackTypeIsBlockBrakes(OpenRCT2::TrackElemType trackType); bool TrackTypeIsBooster(OpenRCT2::TrackElemType trackType); +bool TrackTypeIsReverser(OpenRCT2::TrackElemType trackType); TrackRoll TrackGetActualBank(OpenRCT2::TileElement* tileElement, TrackRoll bank); TrackRoll TrackGetActualBank2(ride_type_t rideType, bool isInverted, TrackRoll bank);