From b5219d76d879db999940059888220c026a86f4a2 Mon Sep 17 00:00:00 2001 From: frutiemax Date: Sun, 22 Aug 2021 10:18:37 -0400 Subject: [PATCH] Part of #13874: Replace pricing tables --- src/openrct2-ui/windows/NewRide.cpp | 5 ++++- src/openrct2/actions/MazePlaceTrackAction.cpp | 8 ++++++-- src/openrct2/actions/MazeSetTrackAction.cpp | 8 ++++++-- src/openrct2/actions/TrackPlaceAction.cpp | 6 ++++-- src/openrct2/actions/TrackRemoveAction.cpp | 8 ++++++-- src/openrct2/ride/TrackData.cpp | 2 +- src/openrct2/ride/TrackData.h | 2 -- 7 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/openrct2-ui/windows/NewRide.cpp b/src/openrct2-ui/windows/NewRide.cpp index 6bdcc02b25..0e4868a487 100644 --- a/src/openrct2-ui/windows/NewRide.cpp +++ b/src/openrct2-ui/windows/NewRide.cpp @@ -33,6 +33,8 @@ #include #include +using namespace OpenRCT2::TrackMetaData; + static constexpr const rct_string_id WINDOW_TITLE = STR_NONE; constexpr size_t AVAILABILITY_STRING_SIZE = 256; static constexpr const int32_t WH = 382; @@ -943,7 +945,8 @@ static void window_new_ride_paint_ride_information( // Get price of ride int32_t unk2 = GetRideTypeDescriptor(item.Type).StartTrackPiece; money64 price = GetRideTypeDescriptor(item.Type).BuildCosts.TrackPrice; - price *= TrackPricing[unk2]; + const auto& teDescriptor = GetTrackElementDescriptor(unk2); + price *= teDescriptor.Pricing; price = (price >> 17) * 10 * GetRideTypeDescriptor(item.Type).BuildCosts.PriceEstimateMultiplier; // diff --git a/src/openrct2/actions/MazePlaceTrackAction.cpp b/src/openrct2/actions/MazePlaceTrackAction.cpp index aa394ea0ea..8e049bcd13 100644 --- a/src/openrct2/actions/MazePlaceTrackAction.cpp +++ b/src/openrct2/actions/MazePlaceTrackAction.cpp @@ -12,6 +12,8 @@ #include "../ride/RideData.h" #include "../ride/TrackData.h" +using namespace OpenRCT2::TrackMetaData; + MazePlaceTrackAction::MazePlaceTrackAction(const CoordsXYZ& location, NetworkRideId_t rideIndex, uint16_t mazeEntry) : _loc(location) , _rideIndex(rideIndex) @@ -113,7 +115,8 @@ GameActions::Result::Ptr MazePlaceTrackAction::Query() const return res; } - money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * TrackPricing[TrackElemType::Maze]) >> 16)); + const auto& teDescriptor = GetTrackElementDescriptor(TrackElemType::Maze); + money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * teDescriptor.Pricing) >> 16)); res->Cost = canBuild->Cost + price / 2 * 10; return res; @@ -154,7 +157,8 @@ GameActions::Result::Ptr MazePlaceTrackAction::Execute() const return canBuild; } - money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * TrackPricing[TrackElemType::Maze]) >> 16)); + const auto& teDescriptor = GetTrackElementDescriptor(TrackElemType::Maze); + money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * teDescriptor.Pricing) >> 16)); res->Cost = canBuild->Cost + price / 2 * 10; auto startLoc = _loc.ToTileStart(); diff --git a/src/openrct2/actions/MazeSetTrackAction.cpp b/src/openrct2/actions/MazeSetTrackAction.cpp index d2755adb1c..f7f78114c3 100644 --- a/src/openrct2/actions/MazeSetTrackAction.cpp +++ b/src/openrct2/actions/MazeSetTrackAction.cpp @@ -21,6 +21,8 @@ #include "../world/Footpath.h" #include "../world/Park.h" +using namespace OpenRCT2::TrackMetaData; + MazeSetTrackAction::MazeSetTrackAction( const CoordsXYZD& location, bool initialPlacement, NetworkRideId_t rideIndex, uint8_t mode) : _loc(location) @@ -134,7 +136,8 @@ GameActions::Result::Ptr MazeSetTrackAction::Query() const return res; } - money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * TrackPricing[TrackElemType::Maze]) >> 16)); + const auto& teDescriptor = GetTrackElementDescriptor(TrackElemType::Maze); + money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * teDescriptor.Pricing) >> 16)); res->Cost = price / 2 * 10; return res; @@ -169,7 +172,8 @@ GameActions::Result::Ptr MazeSetTrackAction::Execute() const auto tileElement = map_get_track_element_at_of_type_from_ride(_loc, TrackElemType::Maze, _rideIndex); if (tileElement == nullptr) { - money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * TrackPricing[TrackElemType::Maze]) >> 16)); + const auto& teDescriptor = GetTrackElementDescriptor(TrackElemType::Maze); + money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * teDescriptor.Pricing) >> 16)); res->Cost = price / 2 * 10; auto startLoc = _loc.ToTileStart(); diff --git a/src/openrct2/actions/TrackPlaceAction.cpp b/src/openrct2/actions/TrackPlaceAction.cpp index b961f6ffda..5e335fd6ed 100644 --- a/src/openrct2/actions/TrackPlaceAction.cpp +++ b/src/openrct2/actions/TrackPlaceAction.cpp @@ -368,7 +368,8 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const } money32 price = ride->GetRideTypeDescriptor().BuildCosts.TrackPrice; - price *= TrackPricing[_trackType]; + const auto& teDescriptor = GetTrackElementDescriptor(_trackType); + price *= teDescriptor.Pricing; price >>= 16; res->Cost = cost + ((price / 2) * 10); @@ -656,7 +657,8 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const } money32 price = ride->GetRideTypeDescriptor().BuildCosts.TrackPrice; - price *= TrackPricing[_trackType]; + const auto& teDescriptor = GetTrackElementDescriptor(_trackType); + price *= teDescriptor.Pricing; price >>= 16; res->Cost = cost + ((price / 2) * 10); diff --git a/src/openrct2/actions/TrackRemoveAction.cpp b/src/openrct2/actions/TrackRemoveAction.cpp index 0165bb721f..aa20954400 100644 --- a/src/openrct2/actions/TrackRemoveAction.cpp +++ b/src/openrct2/actions/TrackRemoveAction.cpp @@ -19,6 +19,8 @@ #include "../world/Surface.h" #include "RideSetSettingAction.h" +using namespace OpenRCT2::TrackMetaData; + TrackRemoveAction::TrackRemoveAction(track_type_t trackType, int32_t sequence, const CoordsXYZD& origin) : _trackType(trackType) , _sequence(sequence) @@ -226,7 +228,8 @@ GameActions::Result::Ptr TrackRemoveAction::Query() const } money32 price = ride->GetRideTypeDescriptor().BuildCosts.TrackPrice; - price *= TrackPricing[trackType]; + const auto& teDescriptor = GetTrackElementDescriptor(trackType); + price *= teDescriptor.Pricing; price >>= 16; price = (price + cost) / 2; if (ride->lifecycle_flags & RIDE_LIFECYCLE_EVER_BEEN_OPENED) @@ -473,7 +476,8 @@ GameActions::Result::Ptr TrackRemoveAction::Execute() const } money32 price = ride->GetRideTypeDescriptor().BuildCosts.TrackPrice; - price *= TrackPricing[trackType]; + const auto& teDescriptor = GetTrackElementDescriptor(trackType); + price *= teDescriptor.Pricing; price >>= 16; price = (price + cost) / 2; if (ride->lifecycle_flags & RIDE_LIFECYCLE_EVER_BEEN_OPENED) diff --git a/src/openrct2/ride/TrackData.cpp b/src/openrct2/ride/TrackData.cpp index 061f4077d2..4a49ddc40c 100644 --- a/src/openrct2/ride/TrackData.cpp +++ b/src/openrct2/ride/TrackData.cpp @@ -3774,7 +3774,7 @@ const static track_type_t AlternativeTrackTypes[TrackElemType::Count] = { }; /** rct2: 0x0099DA34 */ -const money32 TrackPricing[TrackElemType::Count] = { +const static money32 TrackPricing[TrackElemType::Count] = { 65536, // TrackElemType::Flat 98304, // TrackElemType::EndStation 98304, // TrackElemType::BeginStation diff --git a/src/openrct2/ride/TrackData.h b/src/openrct2/ride/TrackData.h index e507487fa5..2664b8fc61 100644 --- a/src/openrct2/ride/TrackData.h +++ b/src/openrct2/ride/TrackData.h @@ -40,8 +40,6 @@ struct track_descriptor extern const track_descriptor gTrackDescriptors[142]; -extern const money32 TrackPricing[TrackElemType::Count]; - struct dodgems_track_size { uint8_t left;