Skip to content

Commit

Permalink
OpenRCT2#21193: Move gParkRating to GameState_t
Browse files Browse the repository at this point in the history
  • Loading branch information
Broxzier committed Jan 22, 2024
1 parent b5786c2 commit f85cac6
Show file tree
Hide file tree
Showing 12 changed files with 35 additions and 29 deletions.
4 changes: 2 additions & 2 deletions src/openrct2-ui/windows/GameBottomToolbar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ class GameBottomToolbar final : public Window
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));
}
}

Expand Down Expand Up @@ -479,7 +479,7 @@ class GameBottomToolbar final : public Window
ft.Add<money64>(gParkValue);
break;
case WIDX_PARK_RATING:
ft.Add<int16_t>(gParkRating);
ft.Add<int16_t>(GetGameState().ParkRating);
break;
}
return { fallback, ft };
Expand Down
2 changes: 1 addition & 1 deletion src/openrct2-ui/windows/Park.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -697,7 +697,7 @@ class ParkWindow final : public Window

// Current value
auto ft = Formatter();
ft.Add<uint16_t>(gParkRating);
ft.Add<uint16_t>(GetGameState().ParkRating);
DrawTextBasic(dpi, screenPos + ScreenCoordsXY{ widget->left + 3, widget->top + 2 }, STR_PARK_RATING_LABEL, ft);

// Graph border
Expand Down
1 change: 1 addition & 0 deletions src/openrct2/GameState.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ namespace OpenRCT2
{
uint32_t CurrentTicks{};
uint64_t ParkFlags;
uint16_t ParkRating;
ClimateType Climate;
ClimateState ClimateNext;
money64 Cash;
Expand Down
2 changes: 1 addition & 1 deletion src/openrct2/interface/InteractiveConsole.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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")
{
Expand Down
2 changes: 1 addition & 1 deletion src/openrct2/management/Award.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/openrct2/park/ParkFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion src/openrct2/rct1/S4Importer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
2 changes: 1 addition & 1 deletion src/openrct2/rct2/S6Importer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
10 changes: 5 additions & 5 deletions src/openrct2/scenario/Scenario.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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())
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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;
Expand All @@ -745,7 +745,7 @@ ObjectiveStatus Objective::CheckGuestsAndRating() const
gScenarioParkRatingWarningDays = 0;
}

if (gParkRating >= 700)
if (gameState.ParkRating >= 700)
if (gNumGuestsInPark >= NumGuests)
return ObjectiveStatus::Success;

Expand Down
12 changes: 7 additions & 5 deletions src/openrct2/scripting/bindings/world/ScPark.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,26 +57,28 @@ 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);
}
}

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);
}
Expand Down
24 changes: 14 additions & 10 deletions src/openrct2/world/Park.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@

using namespace OpenRCT2;

uint16_t gParkRating;
money64 gParkEntranceFee;
uint32_t gParkSize;
money64 gLandPrice;
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -238,7 +237,7 @@ bool Park::IsOpen() const

uint16_t Park::GetParkRating() const
{
return gParkRating;
return GetGameState().ParkRating;
}

money64 Park::GetParkValue() const
Expand All @@ -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;
Expand All @@ -263,7 +263,7 @@ void Park::Initialise()
gNumGuestsInParkLastWeek = 0;
gNumGuestsHeadingForPark = 0;
gGuestChangeModifier = 0;
gParkRating = 0;
gameState.ParkRating = 0;
_guestGenerationProbability = 0;
gTotalRideValueForMoney = 0;
_suggestedGuestMaximum = 0;
Expand Down Expand Up @@ -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();
Expand All @@ -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();
Expand Down Expand Up @@ -599,16 +600,18 @@ 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;
if (numGuests > _suggestedGuestMaximum)
{
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;
}
Expand Down Expand Up @@ -759,7 +762,8 @@ void Park::UpdateHistories()
gNumGuestsInParkLastWeek = gNumGuestsInPark;

// Update park rating, guests in park and current cash history
HistoryPushRecord<uint8_t, 32>(gParkRatingHistory, gParkRating / 4);
auto& gameState = GetGameState();
HistoryPushRecord<uint8_t, 32>(gParkRatingHistory, gameState.ParkRating / 4);
HistoryPushRecord<uint32_t, 32>(gGuestsInParkHistory, gNumGuestsInPark);
HistoryPushRecord<money64, std::size(gCashHistory)>(gCashHistory, FinanceGetCurrentCash() - gBankLoan);

Expand Down
1 change: 0 additions & 1 deletion src/openrct2/world/Park.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ namespace OpenRCT2
};
} // namespace OpenRCT2

extern uint16_t gParkRating;
extern money64 gParkEntranceFee;
extern uint32_t gParkSize;
extern money64 gLandPrice;
Expand Down

0 comments on commit f85cac6

Please sign in to comment.