From f85cac627d26a8adaf02fb5dcd49a95aaf5dd127 Mon Sep 17 00:00:00 2001 From: Hielke Morsink Date: Tue, 23 Jan 2024 00:11:34 +0100 Subject: [PATCH] #21193: Move gParkRating to GameState_t --- src/openrct2-ui/windows/GameBottomToolbar.cpp | 4 ++-- src/openrct2-ui/windows/Park.cpp | 2 +- src/openrct2/GameState.h | 1 + src/openrct2/interface/InteractiveConsole.cpp | 2 +- src/openrct2/management/Award.cpp | 2 +- src/openrct2/park/ParkFile.cpp | 2 +- src/openrct2/rct1/S4Importer.cpp | 2 +- src/openrct2/rct2/S6Importer.cpp | 2 +- src/openrct2/scenario/Scenario.cpp | 10 ++++---- .../scripting/bindings/world/ScPark.cpp | 12 ++++++---- src/openrct2/world/Park.cpp | 24 +++++++++++-------- src/openrct2/world/Park.h | 1 - 12 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src/openrct2-ui/windows/GameBottomToolbar.cpp b/src/openrct2-ui/windows/GameBottomToolbar.cpp index b6bfa08ac5..e1dd59cba5 100644 --- a/src/openrct2-ui/windows/GameBottomToolbar.cpp +++ b/src/openrct2-ui/windows/GameBottomToolbar.cpp @@ -143,7 +143,7 @@ private: auto screenCoords = windowPos + ScreenCoordsXY{ widget.left + 11, widget.midY() - 5 }; DrawParkRating( - dpi, colours[3], screenCoords, std::max(10, ((gParkRating / 4) * 263) / 256)); + dpi, colours[3], screenCoords, std::max(10, ((gameState.ParkRating / 4) * 263) / 256)); } } @@ -479,7 +479,7 @@ public: ft.Add(gParkValue); break; case WIDX_PARK_RATING: - ft.Add(gParkRating); + ft.Add(GetGameState().ParkRating); break; } return { fallback, ft }; diff --git a/src/openrct2-ui/windows/Park.cpp b/src/openrct2-ui/windows/Park.cpp index e481f43215..3e837ba179 100644 --- a/src/openrct2-ui/windows/Park.cpp +++ b/src/openrct2-ui/windows/Park.cpp @@ -697,7 +697,7 @@ private: // Current value auto ft = Formatter(); - ft.Add(gParkRating); + ft.Add(GetGameState().ParkRating); DrawTextBasic(dpi, screenPos + ScreenCoordsXY{ widget->left + 3, widget->top + 2 }, STR_PARK_RATING_LABEL, ft); // Graph border diff --git a/src/openrct2/GameState.h b/src/openrct2/GameState.h index 1e55a5cc71..e325dfa3ac 100644 --- a/src/openrct2/GameState.h +++ b/src/openrct2/GameState.h @@ -26,6 +26,7 @@ namespace OpenRCT2 { uint32_t CurrentTicks{}; uint64_t ParkFlags; + uint16_t ParkRating; ClimateType Climate; ClimateState ClimateNext; money64 Cash; diff --git a/src/openrct2/interface/InteractiveConsole.cpp b/src/openrct2/interface/InteractiveConsole.cpp index 2f161a6884..a7bd4c840c 100644 --- a/src/openrct2/interface/InteractiveConsole.cpp +++ b/src/openrct2/interface/InteractiveConsole.cpp @@ -557,7 +557,7 @@ static int32_t ConsoleCommandGet(InteractiveConsole& console, const arguments_t& { if (argv[0] == "park_rating") { - console.WriteFormatLine("park_rating %d", gParkRating); + console.WriteFormatLine("park_rating %d", gameState.ParkRating); } else if (argv[0] == "park_value") { diff --git a/src/openrct2/management/Award.cpp b/src/openrct2/management/Award.cpp index 044d0ce028..5cbd50a2ed 100644 --- a/src/openrct2/management/Award.cpp +++ b/src/openrct2/management/Award.cpp @@ -410,7 +410,7 @@ static bool AwardIsDeservedMostDisappointing(int32_t activeAwardTypes) { if (activeAwardTypes & EnumToFlag(AwardType::BestValue)) return false; - if (gParkRating > 650) + if (GetGameState().ParkRating > 650) return false; // Count the number of disappointing rides diff --git a/src/openrct2/park/ParkFile.cpp b/src/openrct2/park/ParkFile.cpp index 709efa71cb..60f497a68e 100644 --- a/src/openrct2/park/ParkFile.cpp +++ b/src/openrct2/park/ParkFile.cpp @@ -889,7 +889,7 @@ namespace OpenRCT2 cs.ReadWrite(gParkSize); cs.ReadWrite(gNumGuestsInPark); cs.ReadWrite(gNumGuestsHeadingForPark); - cs.ReadWrite(gParkRating); + cs.ReadWrite(gameState.ParkRating); cs.ReadWrite(gParkRatingCasualtyPenalty); cs.ReadWrite(gCurrentExpenditure); cs.ReadWrite(gCurrentProfit); diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 82c3704d85..137e455d4a 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -2126,7 +2126,7 @@ namespace RCT1 GetContext()->GetGameState()->SetDate(Date(_s4.Month, _s4.Day)); // Park rating - gParkRating = _s4.ParkRating; + gameState.ParkRating = _s4.ParkRating; auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark(); park.ResetHistories(); diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index e9e95f254a..d2506c571d 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -305,7 +305,7 @@ namespace RCT2 gStaffMechanicColour = _s6.MechanicColour; gStaffSecurityColour = _s6.SecurityColour; - gParkRating = _s6.ParkRating; + gameState.ParkRating = _s6.ParkRating; auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark(); park.ResetHistories(); diff --git a/src/openrct2/scenario/Scenario.cpp b/src/openrct2/scenario/Scenario.cpp index 1e266fd197..521f2e413d 100644 --- a/src/openrct2/scenario/Scenario.cpp +++ b/src/openrct2/scenario/Scenario.cpp @@ -114,7 +114,7 @@ void ScenarioReset() auto& gameState = GetGameState(); auto& park = GetContext()->GetGameState()->GetPark(); - gParkRating = park.CalculateParkRating(); + gameState.ParkRating = park.CalculateParkRating(); gParkValue = park.CalculateParkValue(); gCompanyValue = park.CalculateCompanyValue(); gHistoricalProfit = gameState.InitialCash - gBankLoan; @@ -621,7 +621,7 @@ ResultWithMessage ScenarioPrepareForSave() ObjectiveStatus Objective::CheckGuestsBy() const { - auto parkRating = gParkRating; + auto parkRating = GetGameState().ParkRating; int32_t currentMonthYear = GetDate().GetMonthsElapsed(); if (currentMonthYear == MONTH_COUNT * Year || AllowEarlyCompletion()) @@ -700,7 +700,8 @@ ObjectiveStatus Objective::Check10RollerCoasters() const */ ObjectiveStatus Objective::CheckGuestsAndRating() const { - if (gParkRating < 700 && GetDate().GetMonthsElapsed() >= 1) + auto& gameState = GetGameState(); + if (gameState.ParkRating < 700 && GetDate().GetMonthsElapsed() >= 1) { gScenarioParkRatingWarningDays++; if (gScenarioParkRatingWarningDays == 1) @@ -734,7 +735,6 @@ ObjectiveStatus Objective::CheckGuestsAndRating() const else if (gScenarioParkRatingWarningDays == 29) { News::AddItemToQueue(News::ItemType::Graph, STR_PARK_HAS_BEEN_CLOSED_DOWN, 0, {}); - auto& gameState = GetGameState(); gameState.ParkFlags &= ~PARK_FLAGS_PARK_OPEN; gameState.GuestInitialHappiness = 50; return ObjectiveStatus::Failure; @@ -745,7 +745,7 @@ ObjectiveStatus Objective::CheckGuestsAndRating() const gScenarioParkRatingWarningDays = 0; } - if (gParkRating >= 700) + if (gameState.ParkRating >= 700) if (gNumGuestsInPark >= NumGuests) return ObjectiveStatus::Success; diff --git a/src/openrct2/scripting/bindings/world/ScPark.cpp b/src/openrct2/scripting/bindings/world/ScPark.cpp index 12add30abd..431ac04c5e 100644 --- a/src/openrct2/scripting/bindings/world/ScPark.cpp +++ b/src/openrct2/scripting/bindings/world/ScPark.cpp @@ -57,9 +57,10 @@ namespace OpenRCT2::Scripting { ThrowIfGameStateNotMutable(); - if (GetGameState().Cash != value) + auto& gameState = GetGameState(); + if (gameState.Cash != value) { - GetGameState().Cash = value; + gameState.Cash = value; auto intent = Intent(INTENT_ACTION_UPDATE_CASH); ContextBroadcastIntent(&intent); } @@ -67,16 +68,17 @@ namespace OpenRCT2::Scripting int32_t ScPark::rating_get() const { - return gParkRating; + return GetGameState().ParkRating; } void ScPark::rating_set(int32_t value) { ThrowIfGameStateNotMutable(); auto valueClamped = std::min(std::max(0, value), 999); - if (gParkRating != valueClamped) + auto& gameState = GetGameState(); + if (gameState.ParkRating != valueClamped) { - gParkRating = std::min(std::max(0, value), 999); + gameState.ParkRating = std::min(std::max(0, value), 999); auto intent = Intent(INTENT_ACTION_UPDATE_PARK_RATING); ContextBroadcastIntent(&intent); } diff --git a/src/openrct2/world/Park.cpp b/src/openrct2/world/Park.cpp index 280fcc7490..07b9f54f8c 100644 --- a/src/openrct2/world/Park.cpp +++ b/src/openrct2/world/Park.cpp @@ -46,7 +46,6 @@ using namespace OpenRCT2; -uint16_t gParkRating; money64 gParkEntranceFee; uint32_t gParkSize; money64 gLandPrice; @@ -180,7 +179,7 @@ void ParkSetForcedRating(int32_t rating) { _forcedParkRating = rating; auto& park = GetContext()->GetGameState()->GetPark(); - gParkRating = park.CalculateParkRating(); + GetGameState().ParkRating = park.CalculateParkRating(); auto intent = Intent(INTENT_ACTION_UPDATE_PARK_RATING); ContextBroadcastIntent(&intent); } @@ -238,7 +237,7 @@ bool Park::IsOpen() const uint16_t Park::GetParkRating() const { - return gParkRating; + return GetGameState().ParkRating; } money64 Park::GetParkValue() const @@ -254,6 +253,7 @@ money64 Park::GetCompanyValue() const void Park::Initialise() { auto& gameState = GetGameState(); + Name = FormatStringID(STR_UNNAMED_PARK, nullptr); PluginStorage = {}; gStaffHandymanColour = COLOUR_BRIGHT_RED; @@ -263,7 +263,7 @@ void Park::Initialise() gNumGuestsInParkLastWeek = 0; gNumGuestsHeadingForPark = 0; gGuestChangeModifier = 0; - gParkRating = 0; + gameState.ParkRating = 0; _guestGenerationProbability = 0; gTotalRideValueForMoney = 0; _suggestedGuestMaximum = 0; @@ -296,7 +296,7 @@ void Park::Initialise() gScenarioObjective.NumGuests = 1000; gLandPrice = 90.00_GBP; gConstructionRightsPrice = 40.00_GBP; - GetGameState().ParkFlags = PARK_FLAGS_NO_MONEY | PARK_FLAGS_SHOW_REAL_GUEST_NAMES; + gameState.ParkFlags = PARK_FLAGS_NO_MONEY | PARK_FLAGS_SHOW_REAL_GUEST_NAMES; ResetHistories(); FinanceResetHistory(); AwardReset(); @@ -315,12 +315,13 @@ void Park::Update(const Date& date) UpdateHistories(); } - const auto currentTicks = GetGameState().CurrentTicks; + auto& gameState = GetGameState(); + const auto currentTicks = gameState.CurrentTicks; // Every ~13 seconds if (currentTicks % 512 == 0) { - gParkRating = CalculateParkRating(); + gameState.ParkRating = CalculateParkRating(); gParkValue = CalculateParkValue(); gCompanyValue = CalculateCompanyValue(); gTotalRideValueForMoney = CalculateTotalRideValueForMoney(); @@ -599,8 +600,10 @@ uint32_t Park::CalculateSuggestedMaxGuests() const uint32_t Park::CalculateGuestGenerationProbability() const { + auto& gameState = GetGameState(); + // Begin with 50 + park rating - uint32_t probability = 50 + std::clamp(gParkRating - 200, 0, 650); + uint32_t probability = 50 + std::clamp(gameState.ParkRating - 200, 0, 650); // The more guests, the lower the chance of a new one uint32_t numGuests = gNumGuestsInPark + gNumGuestsHeadingForPark; @@ -608,7 +611,7 @@ uint32_t Park::CalculateGuestGenerationProbability() const { probability /= 4; // Even lower for difficult guest generation - if (GetGameState().ParkFlags & PARK_FLAGS_DIFFICULT_GUEST_GENERATION) + if (gameState.ParkFlags & PARK_FLAGS_DIFFICULT_GUEST_GENERATION) { probability /= 4; } @@ -759,7 +762,8 @@ void Park::UpdateHistories() gNumGuestsInParkLastWeek = gNumGuestsInPark; // Update park rating, guests in park and current cash history - HistoryPushRecord(gParkRatingHistory, gParkRating / 4); + auto& gameState = GetGameState(); + HistoryPushRecord(gParkRatingHistory, gameState.ParkRating / 4); HistoryPushRecord(gGuestsInParkHistory, gNumGuestsInPark); HistoryPushRecord(gCashHistory, FinanceGetCurrentCash() - gBankLoan); diff --git a/src/openrct2/world/Park.h b/src/openrct2/world/Park.h index e21a2989e2..ce220f3416 100644 --- a/src/openrct2/world/Park.h +++ b/src/openrct2/world/Park.h @@ -92,7 +92,6 @@ namespace OpenRCT2 }; } // namespace OpenRCT2 -extern uint16_t gParkRating; extern money64 gParkEntranceFee; extern uint32_t gParkSize; extern money64 gLandPrice;