diff --git a/src/openrct2-ui/windows/EditorScenarioOptions.cpp b/src/openrct2-ui/windows/EditorScenarioOptions.cpp index 7841546a26..4d1ac035e0 100644 --- a/src/openrct2-ui/windows/EditorScenarioOptions.cpp +++ b/src/openrct2-ui/windows/EditorScenarioOptions.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -29,6 +30,8 @@ #include #include +using namespace OpenRCT2; + static constexpr int32_t WW_FINANCIAL = 280; static constexpr int32_t WH_FINANCIAL = 149; @@ -430,13 +433,14 @@ private: void FinancialMouseDown(WidgetIndex widgetIndex) { + auto& gameState = GetGameState(); switch (widgetIndex) { case WIDX_INITIAL_CASH_INCREASE: - if (gInitialCash < 1000000.00_GBP) + if (gameState.InitialCash < 1000000.00_GBP) { auto scenarioSetSetting = ScenarioSetSettingAction( - ScenarioSetSetting::InitialCash, gInitialCash + 500.00_GBP); + ScenarioSetSetting::InitialCash, gameState.InitialCash + 500.00_GBP); GameActions::Execute(&scenarioSetSetting); } else @@ -446,10 +450,10 @@ private: Invalidate(); break; case WIDX_INITIAL_CASH_DECREASE: - if (gInitialCash > 0.00_GBP) + if (gameState.InitialCash > 0.00_GBP) { auto scenarioSetSetting = ScenarioSetSettingAction( - ScenarioSetSetting::InitialCash, gInitialCash - 500.00_GBP); + ScenarioSetSetting::InitialCash, gameState.InitialCash - 500.00_GBP); GameActions::Execute(&scenarioSetSetting); } else @@ -623,7 +627,7 @@ private: screenCoords = windowPos + ScreenCoordsXY{ initialCashWidget.left + 1, initialCashWidget.top }; auto ft = Formatter(); - ft.Add(gInitialCash); + ft.Add(GetGameState().InitialCash); DrawTextBasic(dpi, screenCoords, STR_CURRENCY_FORMAT_LABEL, ft); } diff --git a/src/openrct2/Editor.cpp b/src/openrct2/Editor.cpp index 455b8316fd..471efc0ef2 100644 --- a/src/openrct2/Editor.cpp +++ b/src/openrct2/Editor.cpp @@ -336,7 +336,7 @@ namespace Editor gGuestInitialCash = std::clamp(gGuestInitialCash, 10.00_GBP, MAX_ENTRANCE_FEE); - gInitialCash = std::min(gInitialCash, 100000); + GetGameState().InitialCash = std::min(GetGameState().InitialCash, 100000); FinanceResetCashToInitial(); gBankLoan = std::clamp(gBankLoan, 0.00_GBP, 5000000.00_GBP); diff --git a/src/openrct2/GameState.h b/src/openrct2/GameState.h index f7f9133a79..6a9de6ccb4 100644 --- a/src/openrct2/GameState.h +++ b/src/openrct2/GameState.h @@ -25,6 +25,7 @@ namespace OpenRCT2 { uint32_t CurrentTicks{}; money64 Cash; + money64 InitialCash; }; GameState_t& GetGameState(); diff --git a/src/openrct2/actions/ScenarioSetSettingAction.cpp b/src/openrct2/actions/ScenarioSetSettingAction.cpp index 7665e168e5..e7b4a9d06a 100644 --- a/src/openrct2/actions/ScenarioSetSettingAction.cpp +++ b/src/openrct2/actions/ScenarioSetSettingAction.cpp @@ -48,6 +48,7 @@ GameActions::Result ScenarioSetSettingAction::Query() const GameActions::Result ScenarioSetSettingAction::Execute() const { + auto& gameState = GetGameState(); switch (_setting) { case ScenarioSetSetting::NoMoney: @@ -82,8 +83,8 @@ GameActions::Result ScenarioSetSettingAction::Execute() const } break; case ScenarioSetSetting::InitialCash: - gInitialCash = std::clamp(_value, 0.00_GBP, 1000000.00_GBP); - GetGameState().Cash = gInitialCash; + gameState.InitialCash = std::clamp(_value, 0.00_GBP, 1000000.00_GBP); + gameState.Cash = gameState.InitialCash; WindowInvalidateByClass(WindowClass::Finances); WindowInvalidateByClass(WindowClass::BottomToolbar); break; diff --git a/src/openrct2/interface/InteractiveConsole.cpp b/src/openrct2/interface/InteractiveConsole.cpp index 97f9448bae..870d10ee2a 100644 --- a/src/openrct2/interface/InteractiveConsole.cpp +++ b/src/openrct2/interface/InteractiveConsole.cpp @@ -571,7 +571,7 @@ static int32_t ConsoleCommandGet(InteractiveConsole& console, const arguments_t& } else if (argv[0] == "scenario_initial_cash") { - console.WriteFormatLine("scenario_initial_cash %d", gInitialCash / 10); + console.WriteFormatLine("scenario_initial_cash %d", GetGameState().InitialCash / 10); } else if (argv[0] == "current_loan") { diff --git a/src/openrct2/management/Finance.cpp b/src/openrct2/management/Finance.cpp index b4ed22ef14..a38785b02f 100644 --- a/src/openrct2/management/Finance.cpp +++ b/src/openrct2/management/Finance.cpp @@ -39,7 +39,6 @@ static constexpr int32_t dword_988E60[static_cast(ExpenditureType::Coun 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, }; -money64 gInitialCash; money64 gBankLoan; uint8_t gBankLoanInterestRate; money64 gMaxBankLoan; @@ -214,6 +213,8 @@ void FinanceResetHistory() */ void FinanceInit() { + auto& gameState = GetGameState(); + // It only initialises the first month for (uint32_t i = 0; i < static_cast(ExpenditureType::Count); i++) { @@ -226,9 +227,9 @@ void FinanceInit() gWeeklyProfitAverageDividend = 0; gWeeklyProfitAverageDivisor = 0; - gInitialCash = 10000.00_GBP; // Cheat detection + gameState.InitialCash = 10000.00_GBP; // Cheat detection - GetGameState().Cash = 10000.00_GBP; + gameState.Cash = 10000.00_GBP; gBankLoan = 10000.00_GBP; gMaxBankLoan = 20000.00_GBP; @@ -296,7 +297,7 @@ void FinanceUpdateDailyProfit() money64 FinanceGetInitialCash() { - return gInitialCash; + return GetGameState().InitialCash; } money64 FinanceGetCurrentLoan() @@ -356,7 +357,8 @@ void FinanceShiftExpenditureTable() */ void FinanceResetCashToInitial() { - GetGameState().Cash = gInitialCash; + auto& gameState = GetGameState(); + gameState.Cash = gameState.InitialCash; } /** diff --git a/src/openrct2/management/Finance.h b/src/openrct2/management/Finance.h index d7ec01b2bd..645614908d 100644 --- a/src/openrct2/management/Finance.h +++ b/src/openrct2/management/Finance.h @@ -38,7 +38,6 @@ constexpr uint8_t MaxBankLoanInterestRate = 255; extern const money64 research_cost_table[RESEARCH_FUNDING_COUNT]; -extern money64 gInitialCash; extern money64 gBankLoan; extern uint8_t gBankLoanInterestRate; extern money64 gMaxBankLoan; diff --git a/src/openrct2/park/ParkFile.cpp b/src/openrct2/park/ParkFile.cpp index 7be1a83ef1..8d069df73c 100644 --- a/src/openrct2/park/ParkFile.cpp +++ b/src/openrct2/park/ParkFile.cpp @@ -166,7 +166,7 @@ namespace OpenRCT2 } // Initial cash will eventually be removed - gInitialCash = gameState.Cash; + gameState.InitialCash = gameState.Cash; } void Save(GameState_t& gameState, IStream& stream) diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 17c9f24467..646a5cc2dc 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -1400,7 +1400,7 @@ namespace RCT1 gMaxBankLoan = 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; - gInitialCash = ToMoney64(_s4.Cash); + gameState.InitialCash = ToMoney64(_s4.Cash); gCompanyValue = ToMoney64(_s4.CompanyValue); gParkValue = CorrectRCT1ParkValue(_s4.ParkValue); diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index 14bf93c76a..3d1ac44929 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -260,7 +260,7 @@ namespace RCT2 ImportTileElements(); ImportEntities(); - gInitialCash = ToMoney64(_s6.InitialCash); + gameState.InitialCash = ToMoney64(_s6.InitialCash); gBankLoan = ToMoney64(_s6.CurrentLoan); gParkFlags = _s6.ParkFlags & ~PARK_FLAGS_NO_MONEY_SCENARIO; diff --git a/src/openrct2/scenario/Scenario.cpp b/src/openrct2/scenario/Scenario.cpp index 7ace861ede..a93678364e 100644 --- a/src/openrct2/scenario/Scenario.cpp +++ b/src/openrct2/scenario/Scenario.cpp @@ -110,12 +110,13 @@ void ScenarioReset() ScenerySetDefaultPlacementConfiguration(); News::InitQueue(); + auto& gameState = GetGameState(); auto& park = GetContext()->GetGameState()->GetPark(); gParkRating = park.CalculateParkRating(); gParkValue = park.CalculateParkValue(); gCompanyValue = park.CalculateCompanyValue(); - gHistoricalProfit = gInitialCash - gBankLoan; - GetGameState().Cash = gInitialCash; + gHistoricalProfit = gameState.InitialCash - gBankLoan; + gameState.Cash = gameState.InitialCash; { utf8 normalisedName[64];