From 1c285dbf9f991b3a7fec8c96e306031e92f80ffe Mon Sep 17 00:00:00 2001 From: Harry Hopkinson <63599884+Harry-Hopkinson@users.noreply.github.com> Date: Tue, 13 Feb 2024 20:36:35 +0000 Subject: [PATCH] Move gMaxBankLoan to GameState --- src/openrct2-ui/windows/EditorScenarioOptions.cpp | 10 +++++----- src/openrct2-ui/windows/Finances.cpp | 5 +++-- src/openrct2/Editor.cpp | 2 +- src/openrct2/GameState.h | 1 + src/openrct2/actions/ParkSetLoanAction.cpp | 5 +++-- src/openrct2/actions/ScenarioSetSettingAction.cpp | 6 +++--- src/openrct2/interface/InteractiveConsole.cpp | 4 ++-- src/openrct2/management/Finance.cpp | 5 ++--- src/openrct2/management/Finance.h | 1 - src/openrct2/park/ParkFile.cpp | 2 +- src/openrct2/rct1/S4Importer.cpp | 2 +- src/openrct2/rct2/S6Importer.cpp | 2 +- src/openrct2/scripting/bindings/world/ScPark.cpp | 7 ++++--- 13 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/openrct2-ui/windows/EditorScenarioOptions.cpp b/src/openrct2-ui/windows/EditorScenarioOptions.cpp index 1565fd8459..61a3f2c8ca 100644 --- a/src/openrct2-ui/windows/EditorScenarioOptions.cpp +++ b/src/openrct2-ui/windows/EditorScenarioOptions.cpp @@ -491,10 +491,10 @@ private: Invalidate(); break; case WIDX_MAXIMUM_LOAN_INCREASE: - if (gMaxBankLoan < 5000000.00_GBP) + if (gameState.MaxBankLoan < 5000000.00_GBP) { auto scenarioSetSetting = ScenarioSetSettingAction( - ScenarioSetSetting::MaximumLoanSize, gMaxBankLoan + 1000.00_GBP); + ScenarioSetSetting::MaximumLoanSize, gameState.MaxBankLoan + 1000.00_GBP); GameActions::Execute(&scenarioSetSetting); } else @@ -504,10 +504,10 @@ private: Invalidate(); break; case WIDX_MAXIMUM_LOAN_DECREASE: - if (gMaxBankLoan > 0.00_GBP) + if (gameState.MaxBankLoan > 0.00_GBP) { auto scenarioSetSetting = ScenarioSetSettingAction( - ScenarioSetSetting::MaximumLoanSize, gMaxBankLoan - 1000.00_GBP); + ScenarioSetSetting::MaximumLoanSize, gameState.MaxBankLoan - 1000.00_GBP); GameActions::Execute(&scenarioSetSetting); } else @@ -654,7 +654,7 @@ private: screenCoords = windowPos + ScreenCoordsXY{ maximumLoanWidget.left + 1, maximumLoanWidget.top }; auto ft = Formatter(); - ft.Add(gMaxBankLoan); + ft.Add(GetGameState().MaxBankLoan); DrawTextBasic(dpi, screenCoords, STR_CURRENCY_FORMAT_LABEL, ft); } diff --git a/src/openrct2-ui/windows/Finances.cpp b/src/openrct2-ui/windows/Finances.cpp index ebd929d2f8..18eb409b31 100644 --- a/src/openrct2-ui/windows/Finances.cpp +++ b/src/openrct2-ui/windows/Finances.cpp @@ -484,6 +484,7 @@ public: void OnMouseDownSummary(WidgetIndex widgetIndex) { + auto& gameState = GetGameState(); switch (widgetIndex) { case WIDX_LOAN_INCREASE: @@ -491,9 +492,9 @@ public: // If loan can be increased, do so. // If not, action shows error message. auto newLoan = gBankLoan + 1000.00_GBP; - if (gBankLoan < gMaxBankLoan) + if (gBankLoan < gameState.MaxBankLoan) { - newLoan = std::min(gMaxBankLoan, newLoan); + newLoan = std::min(gameState.MaxBankLoan, newLoan); } auto gameAction = ParkSetLoanAction(newLoan); GameActions::Execute(&gameAction); diff --git a/src/openrct2/Editor.cpp b/src/openrct2/Editor.cpp index 05b49f17f8..31c76d9463 100644 --- a/src/openrct2/Editor.cpp +++ b/src/openrct2/Editor.cpp @@ -346,7 +346,7 @@ namespace Editor gBankLoan = std::clamp(gBankLoan, 0.00_GBP, 5000000.00_GBP); - gMaxBankLoan = std::clamp(gMaxBankLoan, 0.00_GBP, 5000000.00_GBP); + gameState.MaxBankLoan = std::clamp(gameState.MaxBankLoan, 0.00_GBP, 5000000.00_GBP); gBankLoanInterestRate = std::clamp(gBankLoanInterestRate, 5, MaxBankLoanInterestRate); } diff --git a/src/openrct2/GameState.h b/src/openrct2/GameState.h index f4c335b8ba..7d961d6fb5 100644 --- a/src/openrct2/GameState.h +++ b/src/openrct2/GameState.h @@ -61,6 +61,7 @@ namespace OpenRCT2 uint16_t ScenarioParkRatingWarningDays; money64 ScenarioCompletedCompanyValue; money64 ScenarioCompanyValueRecord; + money64 MaxBankLoan; random_engine_t ScenarioRand; int32_t MapBaseZ; TileCoordsXY MapSize; diff --git a/src/openrct2/actions/ParkSetLoanAction.cpp b/src/openrct2/actions/ParkSetLoanAction.cpp index 4849e72dee..b52e67221f 100644 --- a/src/openrct2/actions/ParkSetLoanAction.cpp +++ b/src/openrct2/actions/ParkSetLoanAction.cpp @@ -43,7 +43,8 @@ void ParkSetLoanAction::Serialise(DataSerialiser& stream) GameActions::Result ParkSetLoanAction::Query() const { - if (_value > gBankLoan && _value > gMaxBankLoan) + auto& gameState = GetGameState(); + if (_value > gBankLoan && _value > gameState.MaxBankLoan) { return GameActions::Result( GameActions::Status::Disallowed, STR_CANT_BORROW_ANY_MORE_MONEY, STR_BANK_REFUSES_TO_INCREASE_LOAN); @@ -55,7 +56,7 @@ GameActions::Result ParkSetLoanAction::Query() const // The “isPayingBack” check is needed to allow increasing the loan when the player is in debt. const auto isPayingBack = gBankLoan > _value; const auto amountToPayBack = gBankLoan - _value; - if (isPayingBack && amountToPayBack > GetGameState().Cash) + if (isPayingBack && amountToPayBack > gameState.Cash) { return GameActions::Result( GameActions::Status::InsufficientFunds, STR_CANT_PAY_BACK_LOAN, STR_NOT_ENOUGH_CASH_AVAILABLE); diff --git a/src/openrct2/actions/ScenarioSetSettingAction.cpp b/src/openrct2/actions/ScenarioSetSettingAction.cpp index 608ca9dfe8..da901da05e 100644 --- a/src/openrct2/actions/ScenarioSetSettingAction.cpp +++ b/src/openrct2/actions/ScenarioSetSettingAction.cpp @@ -91,12 +91,12 @@ GameActions::Result ScenarioSetSettingAction::Execute() const break; case ScenarioSetSetting::InitialLoan: gBankLoan = std::clamp(_value, 0.00_GBP, 5000000.00_GBP); - gMaxBankLoan = std::max(gBankLoan, gMaxBankLoan); + gameState.MaxBankLoan = std::max(gBankLoan, gameState.MaxBankLoan); WindowInvalidateByClass(WindowClass::Finances); break; case ScenarioSetSetting::MaximumLoanSize: - gMaxBankLoan = std::clamp(_value, 0.00_GBP, 5000000.00_GBP); - gBankLoan = std::min(gBankLoan, gMaxBankLoan); + gameState.MaxBankLoan = std::clamp(_value, 0.00_GBP, 5000000.00_GBP); + gBankLoan = std::min(gBankLoan, gameState.MaxBankLoan); WindowInvalidateByClass(WindowClass::Finances); break; case ScenarioSetSetting::AnnualInterestRate: diff --git a/src/openrct2/interface/InteractiveConsole.cpp b/src/openrct2/interface/InteractiveConsole.cpp index 999d7d375c..654e1901c3 100644 --- a/src/openrct2/interface/InteractiveConsole.cpp +++ b/src/openrct2/interface/InteractiveConsole.cpp @@ -581,7 +581,7 @@ static int32_t ConsoleCommandGet(InteractiveConsole& console, const arguments_t& } else if (argv[0] == "max_loan") { - console.WriteFormatLine("max_loan %d", gMaxBankLoan / 10); + console.WriteFormatLine("max_loan %d", gameState.MaxBankLoan / 10); } else if (argv[0] == "guest_initial_cash") { @@ -812,7 +812,7 @@ static int32_t ConsoleCommandSet(InteractiveConsole& console, const arguments_t& else if (argv[0] == "current_loan" && InvalidArguments(&invalidArgs, int_valid[0])) { auto amount = std::clamp( - ToMoney64FromGBP(int_val[0]) - ToMoney64FromGBP(int_val[0] % 1000), 0.00_GBP, gMaxBankLoan); + ToMoney64FromGBP(int_val[0]) - ToMoney64FromGBP(int_val[0] % 1000), 0.00_GBP, gameState.MaxBankLoan); auto scenarioSetSetting = ScenarioSetSettingAction(ScenarioSetSetting::InitialLoan, amount); scenarioSetSetting.SetCallback([&console](const GameAction*, const GameActions::Result* res) { if (res->Error != GameActions::Status::Ok) diff --git a/src/openrct2/management/Finance.cpp b/src/openrct2/management/Finance.cpp index 4667921d95..627f244f48 100644 --- a/src/openrct2/management/Finance.cpp +++ b/src/openrct2/management/Finance.cpp @@ -41,7 +41,6 @@ static constexpr int32_t dword_988E60[static_cast(ExpenditureType::Coun money64 gBankLoan; uint8_t gBankLoanInterestRate; -money64 gMaxBankLoan; money64 gCurrentExpenditure; money64 gCurrentProfit; money64 gHistoricalProfit; @@ -231,7 +230,7 @@ void FinanceInit() gameState.Cash = 10000.00_GBP; gBankLoan = 10000.00_GBP; - gMaxBankLoan = 20000.00_GBP; + gameState.MaxBankLoan = 20000.00_GBP; gHistoricalProfit = 0; @@ -308,7 +307,7 @@ money64 FinanceGetCurrentLoan() money64 FinanceGetMaximumLoan() { - return gMaxBankLoan; + return GetGameState().MaxBankLoan; } money64 FinanceGetCurrentCash() diff --git a/src/openrct2/management/Finance.h b/src/openrct2/management/Finance.h index 1216ce14d9..8543b3da05 100644 --- a/src/openrct2/management/Finance.h +++ b/src/openrct2/management/Finance.h @@ -40,7 +40,6 @@ extern const money64 research_cost_table[RESEARCH_FUNDING_COUNT]; extern money64 gBankLoan; extern uint8_t gBankLoanInterestRate; -extern money64 gMaxBankLoan; extern money64 gCurrentExpenditure; extern money64 gCurrentProfit; diff --git a/src/openrct2/park/ParkFile.cpp b/src/openrct2/park/ParkFile.cpp index e7c40061dc..171373f882 100644 --- a/src/openrct2/park/ParkFile.cpp +++ b/src/openrct2/park/ParkFile.cpp @@ -804,7 +804,7 @@ namespace OpenRCT2 cs.ReadWrite(park.Name); cs.ReadWrite(gameState.Cash); cs.ReadWrite(gBankLoan); - cs.ReadWrite(gMaxBankLoan); + cs.ReadWrite(gameState.MaxBankLoan); cs.ReadWrite(gBankLoanInterestRate); cs.ReadWrite(gameState.ParkFlags); if (version <= 18) diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 6b32b13bee..ad250ed7c7 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -1397,7 +1397,7 @@ namespace RCT1 gameState.Cash = ToMoney64(_s4.Cash); gBankLoan = ToMoney64(_s4.Loan); - gMaxBankLoan = ToMoney64(_s4.MaxLoan); + gameState.MaxBankLoan = ToMoney64(_s4.MaxLoan); // It's more like 1.33%, but we can only use integers. Can be fixed once we have our own save format. gBankLoanInterestRate = 1; gameState.InitialCash = ToMoney64(_s4.Cash); diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index 4a049b37db..112b3ce648 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -340,7 +340,7 @@ namespace RCT2 gameState.ParkSize = _s6.ParkSize; gameState.GuestGenerationProbability = _s6.GuestGenerationProbability; gameState.TotalRideValueForMoney = _s6.TotalRideValueForMoney; - gMaxBankLoan = ToMoney64(_s6.MaximumLoan); + gameState.MaxBankLoan = ToMoney64(_s6.MaximumLoan); gameState.GuestInitialCash = ToMoney64(_s6.GuestInitialCash); gameState.GuestInitialHunger = _s6.GuestInitialHunger; gameState.GuestInitialThirst = _s6.GuestInitialThirst; diff --git a/src/openrct2/scripting/bindings/world/ScPark.cpp b/src/openrct2/scripting/bindings/world/ScPark.cpp index 494d96723d..210ca8f159 100644 --- a/src/openrct2/scripting/bindings/world/ScPark.cpp +++ b/src/openrct2/scripting/bindings/world/ScPark.cpp @@ -102,15 +102,16 @@ namespace OpenRCT2::Scripting money64 ScPark::maxBankLoan_get() const { - return gMaxBankLoan; + return GetGameState().MaxBankLoan; } void ScPark::maxBankLoan_set(money64 value) { ThrowIfGameStateNotMutable(); - if (gMaxBankLoan != value) + auto& gameState = GetGameState(); + if (gameState.MaxBankLoan != value) { - gMaxBankLoan = value; + gameState.MaxBankLoan = value; auto intent = Intent(INTENT_ACTION_UPDATE_CASH); ContextBroadcastIntent(&intent); }