diff --git a/src/game.c b/src/game.c index 3aabbadc22..c0cdb9dfba 100644 --- a/src/game.c +++ b/src/game.c @@ -679,7 +679,7 @@ static void rct2_to_utf8_self(char *buffer, size_t length) void game_convert_strings_to_utf8() { // Scenario details - rct2_to_utf8_self(RCT2_ADDRESS(RCT2_ADDRESS_SCENARIO_COMPLETED_BY, char), 32); + rct2_to_utf8_self(gScenarioCompletedBy, 32); rct2_to_utf8_self(gScenarioName, 64); rct2_to_utf8_self(gScenarioDetails, 256); diff --git a/src/management/finance.c b/src/management/finance.c index bee850fadf..da36cd6d1f 100644 --- a/src/management/finance.c +++ b/src/management/finance.c @@ -187,7 +187,7 @@ void finance_init() { gBankLoanInterestRate = 10; gParkValue = 0; gCompanyValue = 0; - RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, money32) = MONEY32_UNDEFINED; + gScenarioCompletedCompanyValue = MONEY32_UNDEFINED; RCT2_GLOBAL(RCT2_ADDRESS_TOTAL_ADMISSIONS, uint32) = 0; RCT2_GLOBAL(RCT2_ADDRESS_INCOME_FROM_ADMISSIONS, uint32) = 0; diff --git a/src/network/network.cpp b/src/network/network.cpp index a37456a4b8..77706d6dce 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -913,7 +913,7 @@ void Network::UpdateClient() ProcessGameCommandQueue(); // Check synchronisation - if (!_desynchronised && !CheckSRAND(gCurrentTicks, RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_0, uint32))) { + if (!_desynchronised && !CheckSRAND(gCurrentTicks, gScenarioSrand0)) { _desynchronised = true; char str_desync[256]; format_string(str_desync, STR_MULTIPLAYER_DESYNC, NULL); @@ -1402,7 +1402,7 @@ void Network::Server_Send_TICK() { last_tick_sent_time = SDL_GetTicks(); std::unique_ptr packet = std::move(NetworkPacket::Allocate()); - *packet << (uint32)NETWORK_COMMAND_TICK << (uint32)gCurrentTicks << (uint32)RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_0, uint32); + *packet << (uint32)NETWORK_COMMAND_TICK << (uint32)gCurrentTicks << (uint32)gScenarioSrand0; SendPacketToClients(*packet); } diff --git a/src/rct1/S4Importer.cpp b/src/rct1/S4Importer.cpp index b3f069c918..2fdbe6cc3a 100644 --- a/src/rct1/S4Importer.cpp +++ b/src/rct1/S4Importer.cpp @@ -927,8 +927,8 @@ void S4Importer::ImportParkFlags() { // Date and srand gCurrentTicks = _s4.ticks; - RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_0, uint32) = _s4.random_a; - RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_1, uint32) = _s4.random_b; + gScenarioSrand0 = _s4.random_a; + gScenarioSrand1 = _s4.random_b; gDateMonthsElapsed = _s4.month; gDateMonthTicks = _s4.day; diff --git a/src/scenario.c b/src/scenario.c index d185bb5059..e8a0dfa553 100644 --- a/src/scenario.c +++ b/src/scenario.c @@ -63,6 +63,7 @@ static const char *_scenarioFileName = ""; char *gScenarioName = RCT2_ADDRESS(RCT2_ADDRESS_SCENARIO_NAME, char); char *gScenarioDetails = RCT2_ADDRESS(RCT2_ADDRESS_SCENARIO_DETAILS, char); +char *gScenarioCompletedBy = RCT2_ADDRESS(RCT2_ADDRESS_SCENARIO_COMPLETED_BY, char); char gScenarioSavePath[MAX_PATH]; int gFirstTimeSave = 1; uint32 gLastAutoSaveTick = 0; @@ -266,8 +267,8 @@ void scenario_begin() window_new_ride_init_vars(); // Set the scenario pseduo-random seeds - RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_0, sint32) ^= platform_get_ticks(); - RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_1, sint32) ^= platform_get_ticks(); + gScenarioSrand0 ^= platform_get_ticks(); + gScenarioSrand1 ^= platform_get_ticks(); RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_UPDATE_TICKS, sint16) = 0; gParkFlags &= ~PARK_FLAGS_NO_MONEY; @@ -343,7 +344,7 @@ void scenario_begin() RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PROFIT, money32) = 0; RCT2_GLOBAL(0x01358334, money32) = 0; RCT2_GLOBAL(0x01358338, uint16) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, uint32) = MONEY32_UNDEFINED; + gScenarioCompletedCompanyValue = MONEY32_UNDEFINED; RCT2_GLOBAL(RCT2_ADDRESS_TOTAL_ADMISSIONS, uint32) = 0; RCT2_GLOBAL(RCT2_ADDRESS_INCOME_FROM_ADMISSIONS, uint32) = 0; RCT2_GLOBAL(0x013587D8, uint16) = 63; @@ -399,7 +400,7 @@ void scenario_set_filename(const char *value) */ void scenario_failure() { - RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, uint32) = 0x80000001; + gScenarioCompletedCompanyValue = 0x80000001; scenario_end(); } @@ -411,7 +412,7 @@ void scenario_success() { const money32 companyValue = gCompanyValue; - RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, uint32) = companyValue; + gScenarioCompletedCompanyValue = companyValue; peep_applause(); scenario_index_entry *scenario = scenario_list_find_by_filename(_scenarioFileName); @@ -448,7 +449,7 @@ void scenario_success_submit_name(const char *name) money32 scenarioWinCompanyValue = RCT2_GLOBAL(0x013587C0, money32); if (scenario->highscore->company_value == scenarioWinCompanyValue) { scenario->highscore->name = _strdup(name); - safe_strcpy(RCT2_ADDRESS(RCT2_ADDRESS_SCENARIO_COMPLETED_BY, char), name, 32); + safe_strcpy(gScenarioCompletedBy, name, 32); scenario_scores_save(); } } @@ -697,9 +698,9 @@ unsigned int scenario_rand() } #endif - int eax = RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_0, uint32); - RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_0, uint32) += ror32(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_1, uint32) ^ 0x1234567F, 7); - return RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_1, uint32) = ror32(eax, 3); + uint32 originalSrand0 = gScenarioSrand0; + gScenarioSrand0 += ror32(gScenarioSrand1 ^ 0x1234567F, 7); + return gScenarioSrand1 = ror32(originalSrand0, 3); } unsigned int scenario_rand_max(unsigned int max) @@ -1322,31 +1323,31 @@ static void scenario_objective_check_10_rollercoasters() static void scenario_objective_check_guests_and_rating() { if (gParkRating < 700 && gDateMonthsElapsed >= 1) { - RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16)++; - if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16) == 1) { + gScenarioParkRatingWarningDays++; + if (gScenarioParkRatingWarningDays == 1) { if (gConfigNotifications.park_rating_warnings) { news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_RATING_WARNING_4_WEEKS_REMAINING, 0); } - } else if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16) == 8) { + } else if (gScenarioParkRatingWarningDays == 8) { if (gConfigNotifications.park_rating_warnings) { news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_RATING_WARNING_3_WEEKS_REMAINING, 0); } - } else if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16) == 15) { + } else if (gScenarioParkRatingWarningDays == 15) { if (gConfigNotifications.park_rating_warnings) { news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_RATING_WARNING_2_WEEKS_REMAINING, 0); } - } else if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16) == 22) { + } else if (gScenarioParkRatingWarningDays == 22) { if (gConfigNotifications.park_rating_warnings) { news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_RATING_WARNING_1_WEEK_REMAINING, 0); } - } else if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16) == 29) { + } else if (gScenarioParkRatingWarningDays == 29) { news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_HAS_BEEN_CLOSED_DOWN, 0); gParkFlags &= ~PARK_FLAGS_PARK_OPEN; scenario_failure(); gGuestInitialHappiness = 50; } - } else if (RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, money32) != 0x80000001) { - RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16) = 0; + } else if (gScenarioCompletedCompanyValue != 0x80000001) { + gScenarioParkRatingWarningDays = 0; } if (gParkRating >= 700) @@ -1445,13 +1446,11 @@ static void scenario_objective_check_monthly_food_income() */ static void scenario_objective_check() { - uint8 objective_type = gScenarioObjectiveType; - uint32 scenario_completed_company_value = RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, uint32); - - if (scenario_completed_company_value != MONEY32_UNDEFINED) + if (gScenarioCompletedCompanyValue != MONEY32_UNDEFINED) { return; + } - switch (objective_type) { + switch (gScenarioObjectiveType) { case OBJECTIVE_GUESTS_BY: scenario_objective_check_guests_by(); break; diff --git a/src/scenario.h b/src/scenario.h index 55b7411288..4667a3fb3d 100644 --- a/src/scenario.h +++ b/src/scenario.h @@ -461,11 +461,17 @@ typedef struct { extern const rct_string_id ScenarioCategoryStringIds[SCENARIO_CATEGORY_COUNT]; +#define gScenarioSrand0 RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_0, uint32) +#define gScenarioSrand1 RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_1, uint32) + #define gScenarioObjectiveType RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) #define gScenarioObjectiveYear RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8) #define gScenarioObjectiveNumGuests RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) #define gScenarioObjectiveCurrency RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) +#define gScenarioParkRatingWarningDays RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16) +#define gScenarioCompletedCompanyValue RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, money32) + // Scenario list extern int gScenarioListCount; extern int gScenarioListCapacity; @@ -473,6 +479,7 @@ extern scenario_index_entry *gScenarioList; extern char *gScenarioName; extern char *gScenarioDetails; +extern char *gScenarioCompletedBy; extern char gScenarioSavePath[MAX_PATH]; extern int gFirstTimeSave; extern uint32 gLastAutoSaveTick; diff --git a/src/windows/park.c b/src/windows/park.c index 78e1fe1e5c..3491847b6b 100644 --- a/src/windows/park.c +++ b/src/windows/park.c @@ -1765,13 +1765,13 @@ static void window_park_objective_paint(rct_window *w, rct_drawpixelinfo *dpi) y += 5; // Objective outcome - if (RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, money32) != MONEY32_UNDEFINED) { - if (RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, money32) == 0x80000001) { + if (gScenarioCompletedCompanyValue != MONEY32_UNDEFINED) { + if (gScenarioCompletedCompanyValue == 0x80000001) { // Objective failed gfx_draw_string_left_wrapped(dpi, NULL, x, y, 222, 2789, 0); } else { // Objective completed - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, int) = RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, money32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, int) = gScenarioCompletedCompanyValue; gfx_draw_string_left_wrapped(dpi, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, x, y, 222, 2788, 0); } }