diff --git a/src/cheats.c b/src/cheats.c index a431a34266..880dce0bb9 100644 --- a/src/cheats.c +++ b/src/cheats.c @@ -3,6 +3,7 @@ #include "game.h" #include "interface/window.h" #include "network/network.h" +#include "management/finance.h" #include "world/climate.h" #include "world/footpath.h" #include "world/scenery.h" @@ -196,12 +197,12 @@ static void cheat_increase_money(money32 amount) { money32 currentMoney; - currentMoney = DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32)); + currentMoney = DECRYPT_MONEY(gCashEncrypted); if (currentMoney < INT_MAX - amount) currentMoney += amount; else currentMoney = INT_MAX; - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32) = ENCRYPT_MONEY(currentMoney); + gCashEncrypted = ENCRYPT_MONEY(currentMoney); window_invalidate_by_class(WC_FINANCES); window_invalidate_by_class(WC_BOTTOM_TOOLBAR); @@ -210,7 +211,7 @@ static void cheat_increase_money(money32 amount) static void cheat_clear_loan() { // First give money - game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_INCREASEMONEY, RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32), GAME_COMMAND_CHEAT, 0, 0); + game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_INCREASEMONEY, gBankLoan, GAME_COMMAND_CHEAT, 0, 0); // Then pay the loan money32 newLoan; @@ -389,7 +390,7 @@ void game_command_cheat(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* e case CHEAT_FREEZECLIMATE: gCheatsFreezeClimate = !gCheatsFreezeClimate; break; case CHEAT_NEVERENDINGMARKETING: gCheatsNeverendingMarketing = !gCheatsNeverendingMarketing; break; case CHEAT_OPENCLOSEPARK: park_set_open(park_is_open() ? 0 : 1); break; - case CHEAT_HAVEFUN: RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) = OBJECTIVE_HAVE_FUN; break; + case CHEAT_HAVEFUN: gScenarioObjectiveType = OBJECTIVE_HAVE_FUN; break; case CHEAT_SETFORCEDPARKRATING: if(*edx > -1) { park_rating_spinner_value = *edx; } set_forced_park_rating(*edx); break; } if (network_get_mode() == NETWORK_MODE_NONE) { diff --git a/src/editor.c b/src/editor.c index 613b9ba654..d88050c710 100644 --- a/src/editor.c +++ b/src/editor.c @@ -122,10 +122,10 @@ void editor_convert_save_to_scenario_callback(int result) safe_strcpy(s6Info->name, (const char*)RCT2_ADDRESS_SCENARIO_NAME, 64); safe_strcpy(s6Info->details, (const char*)RCT2_ADDRESS_SCENARIO_DETAILS, 256); - s6Info->objective_type = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8); - s6Info->objective_arg_1 = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8); - s6Info->objective_arg_2 = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, sint32); - s6Info->objective_arg_3 = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, sint16); + s6Info->objective_type = gScenarioObjectiveType; + s6Info->objective_arg_1 = gScenarioObjectiveYear; + s6Info->objective_arg_2 = gScenarioObjectiveCurrency; + s6Info->objective_arg_3 = gScenarioObjectiveNumGuests; climate_reset(RCT2_GLOBAL(RCT2_ADDRESS_CLIMATE, uint8)); rct_stex_entry* stex = g_stexEntries[0]; @@ -430,9 +430,9 @@ static void editor_clear_map_for_editing() reset_sprite_list(); staff_reset_modes(); gNumGuestsInPark = 0; - RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_HEADING_FOR_PARK, uint16) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_LAST_GUESTS_IN_PARK, uint16) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_CHANGE_MODIFIER, uint16) = 0; + gNumGuestsHeadingForPark = 0; + gNumGuestsInParkLastWeek = 0; + gGuestChangeModifier = 0; if (s6Header->type != S6_TYPE_SCENARIO) { research_populate_list_random(); research_remove_non_separate_vehicle_types(); @@ -450,19 +450,15 @@ static void editor_clear_map_for_editing() gParkFlags &= ~PARK_FLAGS_18; - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16) = clamp( - MONEY(10,00), - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16), - MONEY(100,00) - ); + gGuestInitialCash = clamp(MONEY(10,00), gGuestInitialCash, MONEY(100,00)); RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, uint32) = min(RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, uint32), 100000); finance_reset_cash_to_initial(); finance_update_loan_hash(); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) = clamp( + gBankLoan = clamp( MONEY(0,00), - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32), + gBankLoan, MONEY(5000000,00) ); @@ -472,11 +468,7 @@ static void editor_clear_map_for_editing() MONEY(5000000,00) ); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, uint8) = clamp( - 5, - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, uint8), - 80 - ); + gBankLoanInterestRate = clamp(5, gBankLoanInterestRate, 80); } climate_reset(RCT2_GLOBAL(RCT2_ADDRESS_CLIMATE, uint8)); diff --git a/src/game.c b/src/game.c index 83b20cf050..d3624d3311 100644 --- a/src/game.c +++ b/src/game.c @@ -265,7 +265,7 @@ void game_update() } if (network_get_mode() == NETWORK_MODE_CLIENT && network_get_status() == NETWORK_STATUS_CONNECTED && network_get_authstatus() == NETWORK_AUTH_OK) { - if (network_get_server_tick() - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) >= 10) { + if (network_get_server_tick() - gCurrentTicks >= 10) { // make sure client doesn't fall behind the server too much numUpdates += 10; } @@ -318,7 +318,7 @@ void game_update() // the flickering frequency is reduced by 4, compared to the original // it was done due to inability to reproduce original frequency // and decision that the original one looks too fast - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) % 4 == 0) + if (gCurrentTicks % 4 == 0) RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_MAP_FLASHING_FLAGS, uint16) ^= (1 << 15); // Handle guest map flashing @@ -347,12 +347,12 @@ void game_logic_update() /////////////////////////// network_update(); if (network_get_mode() == NETWORK_MODE_CLIENT && network_get_status() == NETWORK_STATUS_CONNECTED && network_get_authstatus() == NETWORK_AUTH_OK) { - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) >= network_get_server_tick()) { + if (gCurrentTicks >= network_get_server_tick()) { // dont run past the server return; } } - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32)++; + gCurrentTicks++; RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_TICKS, uint32)++; RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_AGE, sint16)++; if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_AGE, sint16) == 0) @@ -409,7 +409,7 @@ static int game_check_affordability(int cost) { if (cost <= 0)return cost; if (RCT2_GLOBAL(0x141F568, uint8) & 0xF0)return cost; - if (cost <= (sint32)(DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32))))return cost; + if (cost <= (sint32)(DECRYPT_MONEY(gCashEncrypted)))return cost; RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint32) = cost; diff --git a/src/game.h b/src/game.h index c9f31f4658..9d7188c294 100644 --- a/src/game.h +++ b/src/game.h @@ -122,6 +122,8 @@ extern rct_string_id gGameCommandErrorText; extern GAME_COMMAND_POINTER* new_game_command_table[66]; +#define gCurrentTicks RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) + extern int gGameSpeed; extern float gDayNightCycle; extern bool gInUpdateCode; diff --git a/src/interface/console.c b/src/interface/console.c index a6c8b4bba7..dde8bf33b8 100644 --- a/src/interface/console.c +++ b/src/interface/console.c @@ -16,6 +16,7 @@ #include "../object.h" #include "../world/banner.h" #include "../world/scenery.h" +#include "../management/finance.h" #include "../management/research.h" #include "../util/util.h" #include "console.h" @@ -467,37 +468,37 @@ static int cc_get(const utf8 **argv, int argc) { if (argc > 0) { if (strcmp(argv[0], "park_rating") == 0) { - console_printf("park_rating %d", RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, sint16)); + console_printf("park_rating %d", gParkRating); } else if (strcmp(argv[0], "money") == 0) { - console_printf("money %d.%d0", DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32)) / 10, DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32)) % 10); + console_printf("money %d.%d0", DECRYPT_MONEY(gCashEncrypted) / 10, DECRYPT_MONEY(gCashEncrypted) % 10); } else if (strcmp(argv[0], "current_loan") == 0) { - console_printf("current_loan %d", RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) / 10); + console_printf("current_loan %d", gBankLoan / 10); } else if (strcmp(argv[0], "max_loan") == 0) { console_printf("max_loan %d", RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32) / 10); } else if (strcmp(argv[0], "guest_initial_cash") == 0) { - console_printf("guest_initial_cash %d.%d0", RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16) / 10, RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16) % 10); + console_printf("guest_initial_cash %d.%d0", gGuestInitialCash / 10, gGuestInitialCash % 10); } else if (strcmp(argv[0], "guest_initial_happiness") == 0) { - uint32 current_happiness = RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HAPPINESS, uint8); + uint32 current_happiness = gGuestInitialHappiness; for (int i = 15; i <= 99; i++) { if (i == 99) { - console_printf("guest_initial_happiness %d%% (%d)", 15, RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HAPPINESS, uint8)); + console_printf("guest_initial_happiness %d%% (%d)", 15, gGuestInitialHappiness); } else if (current_happiness == calculate_guest_initial_happiness(i)) { - console_printf("guest_initial_happiness %d%% (%d)", i, RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HAPPINESS, uint8)); + console_printf("guest_initial_happiness %d%% (%d)", i, gGuestInitialHappiness); break; } } } else if (strcmp(argv[0], "guest_initial_hunger") == 0) { - console_printf("guest_initial_hunger %d%% (%d)", ((255 - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HUNGER, uint8)) * 100) / 255, RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HUNGER, uint8)); + console_printf("guest_initial_hunger %d%% (%d)", ((255 - gGuestInitialHunger) * 100) / 255, gGuestInitialHunger); } else if (strcmp(argv[0], "guest_initial_thirst") == 0) { - console_printf("guest_initial_thirst %d%% (%d)", ((255 - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_THIRST, uint8)) * 100) / 255, RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_THIRST, uint8)); + console_printf("guest_initial_thirst %d%% (%d)", ((255 - gGuestInitialThirst) * 100) / 255, gGuestInitialThirst); } else if (strcmp(argv[0], "guest_prefer_less_intense_rides") == 0) { console_printf("guest_prefer_less_intense_rides %d", (gParkFlags & PARK_FLAGS_PREF_LESS_INTENSE_RIDES) != 0); @@ -533,10 +534,10 @@ static int cc_get(const utf8 **argv, int argc) console_printf("park_open %d", (gParkFlags & PARK_FLAGS_PARK_OPEN) != 0); } else if (strcmp(argv[0], "land_rights_cost") == 0) { - console_printf("land_rights_cost %d.%d0", RCT2_GLOBAL(RCT2_ADDRESS_LAND_COST, money16) / 10, RCT2_GLOBAL(RCT2_ADDRESS_LAND_COST, money16) % 10); + console_printf("land_rights_cost %d.%d0", gLandPrice / 10, gLandPrice % 10); } else if (strcmp(argv[0], "construction_rights_cost") == 0) { - console_printf("construction_rights_cost %d.%d0", RCT2_GLOBAL(RCT2_ADDRESS_CONSTRUCTION_RIGHTS_COST, money32) / 10, RCT2_GLOBAL(RCT2_ADDRESS_CONSTRUCTION_RIGHTS_COST, money32) % 10); + console_printf("construction_rights_cost %d.%d0", gConstructionRightsPrice / 10, gConstructionRightsPrice % 10); } else if (strcmp(argv[0], "climate") == 0) { const utf8* climate_names[] = { "cool_and_wet", "warm", "hot_and_dry", "cold" }; @@ -601,11 +602,11 @@ static int cc_set(const utf8 **argv, int argc) } if (strcmp(argv[0], "money") == 0 && invalidArguments(&invalidArgs, double_valid[0])) { - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32) = ENCRYPT_MONEY(MONEY((int)double_val[0], ((int)(double_val[0] * 100)) % 100)); + gCashEncrypted = ENCRYPT_MONEY(MONEY((int)double_val[0], ((int)(double_val[0] * 100)) % 100)); console_execute_silent("get money"); } else if (strcmp(argv[0], "current_loan") == 0 && invalidArguments(&invalidArgs, int_valid[0])) { - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) = clamp(MONEY(int_val[0] - (int_val[0] % 1000), 0), MONEY(0, 0), RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32)); + gBankLoan = clamp(MONEY(int_val[0] - (int_val[0] % 1000), 0), MONEY(0, 0), RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32)); console_execute_silent("get current_loan"); } else if (strcmp(argv[0], "max_loan") == 0 && invalidArguments(&invalidArgs, int_valid[0])) { @@ -613,19 +614,19 @@ static int cc_set(const utf8 **argv, int argc) console_execute_silent("get max_loan"); } else if (strcmp(argv[0], "guest_initial_cash") == 0 && invalidArguments(&invalidArgs, double_valid[0])) { - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16) = clamp(MONEY((int)double_val[0], ((int)(double_val[0] * 100)) % 100), MONEY(0, 0), MONEY(1000, 0)); + gGuestInitialCash = clamp(MONEY((int)double_val[0], ((int)(double_val[0] * 100)) % 100), MONEY(0, 0), MONEY(1000, 0)); console_execute_silent("get guest_initial_cash"); } else if (strcmp(argv[0], "guest_initial_happiness") == 0 && invalidArguments(&invalidArgs, int_valid[0])) { - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HAPPINESS, uint8) = calculate_guest_initial_happiness((uint8)int_val[0]); + gGuestInitialHappiness = calculate_guest_initial_happiness((uint8)int_val[0]); console_execute_silent("get guest_initial_happiness"); } else if (strcmp(argv[0], "guest_initial_hunger") == 0 && invalidArguments(&invalidArgs, int_valid[0])) { - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HUNGER, uint8) = (clamp(int_val[0], 1, 84) * 255 / 100 - 255) * -1; + gGuestInitialHunger = (clamp(int_val[0], 1, 84) * 255 / 100 - 255) * -1; console_execute_silent("get guest_initial_hunger"); } else if (strcmp(argv[0], "guest_initial_thirst") == 0 && invalidArguments(&invalidArgs, int_valid[0])) { - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_THIRST, uint8) = (clamp(int_val[0], 1, 84) * 255 / 100 - 255) * -1; + gGuestInitialThirst = (clamp(int_val[0], 1, 84) * 255 / 100 - 255) * -1; console_execute_silent("get guest_initial_thirst"); } else if (strcmp(argv[0], "guest_prefer_less_intense_rides") == 0 && invalidArguments(&invalidArgs, int_valid[0])) { @@ -673,11 +674,11 @@ static int cc_set(const utf8 **argv, int argc) console_execute_silent("get park_open"); } else if (strcmp(argv[0], "land_rights_cost") == 0 && invalidArguments(&invalidArgs, double_valid[0])) { - RCT2_GLOBAL(RCT2_ADDRESS_LAND_COST, money16) = clamp(MONEY((int)double_val[0], ((int)(double_val[0] * 100)) % 100), MONEY(0, 0), MONEY(200, 0)); + gLandPrice = clamp(MONEY((int)double_val[0], ((int)(double_val[0] * 100)) % 100), MONEY(0, 0), MONEY(200, 0)); console_execute_silent("get land_rights_cost"); } else if (strcmp(argv[0], "construction_rights_cost") == 0 && invalidArguments(&invalidArgs, double_valid[0])) { - RCT2_GLOBAL(RCT2_ADDRESS_CONSTRUCTION_RIGHTS_COST, money16) = clamp(MONEY((int)double_val[0], ((int)(double_val[0] * 100)) % 100), MONEY(0, 0), MONEY(200, 0)); + gConstructionRightsPrice = clamp(MONEY((int)double_val[0], ((int)(double_val[0] * 100)) % 100), MONEY(0, 0), MONEY(200, 0)); console_execute_silent("get construction_rights_cost"); } else if (strcmp(argv[0], "climate") == 0) { diff --git a/src/interface/viewport.c b/src/interface/viewport.c index 745f54d125..e793f63fac 100644 --- a/src/interface/viewport.c +++ b/src/interface/viewport.c @@ -22,6 +22,7 @@ #include "../config.h" #include "../drawing/drawing.h" #include "../drawing/supports.h" +#include "../game.h" #include "../input.h" #include "../localisation/localisation.h" #include "../ride/ride_data.h" @@ -1416,7 +1417,7 @@ void viewport_ride_entrance_exit_paint_setup(uint8 direction, int height, rct_ma RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = 0x1C0; uint16 string_width = gfx_get_string_width(entrance_string); - uint16 scroll = (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) / 2) % string_width; + uint16 scroll = (gCurrentTicks / 2) % string_width; sub_98199C(scrolling_text_setup(string_id, scroll, style->scrolling_mode), 0, 0, 0x1C, 0x1C, 0x33, height + style->height, 2, 2, height + style->height, get_current_rotation()); } @@ -1488,8 +1489,8 @@ void viewport_park_entrance_paint_setup(uint8 direction, int height, rct_map_ele RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, uint32) = 0; if (gParkFlags & PARK_FLAGS_PARK_OPEN){ - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, rct_string_id) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id); - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, rct_string_id) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, rct_string_id); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, rct_string_id) = gParkName; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = gParkNameArgs; park_text_id = 1731; } @@ -1503,7 +1504,7 @@ void viewport_park_entrance_paint_setup(uint8 direction, int height, rct_map_ele RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = 0x1C0; uint16 string_width = gfx_get_string_width(park_name); - uint16 scroll = (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) / 2) % string_width; + uint16 scroll = (gCurrentTicks / 2) % string_width; if (entrance->scrolling_mode == 0xFF) break; @@ -1763,7 +1764,7 @@ void viewport_banner_paint_setup(uint8 direction, int height, rct_map_element* m RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = 0x1C0; uint16 string_width = gfx_get_string_width(RCT2_ADDRESS(RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, char)); - uint16 scroll = (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) / 2) % string_width; + uint16 scroll = (gCurrentTicks / 2) % string_width; sub_98199C(scrolling_text_setup(string_id, scroll, scrollingMode), 0, 0, 1, 1, 0x15, height + 22, boundBoxOffsetX, boundBoxOffsetY, boundBoxOffsetZ, get_current_rotation()); } diff --git a/src/interface/viewport_interaction.c b/src/interface/viewport_interaction.c index 60f8310a38..42c0544c65 100644 --- a/src/interface/viewport_interaction.c +++ b/src/interface/viewport_interaction.c @@ -86,8 +86,8 @@ int viewport_interaction_get_item_left(int x, int y, viewport_interaction_info * ride_set_map_tooltip(mapElement); break; case VIEWPORT_INTERACTION_ITEM_PARK: - RCT2_GLOBAL(RCT2_ADDRESS_MAP_TOOLTIP_ARGS + 0, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id); - RCT2_GLOBAL(RCT2_ADDRESS_MAP_TOOLTIP_ARGS + 2, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); + RCT2_GLOBAL(RCT2_ADDRESS_MAP_TOOLTIP_ARGS + 0, uint16) = gParkName; + RCT2_GLOBAL(RCT2_ADDRESS_MAP_TOOLTIP_ARGS + 2, uint32) = gParkNameArgs; break; default: info->type = VIEWPORT_INTERACTION_ITEM_NONE; diff --git a/src/localisation/date.c b/src/localisation/date.c index 50a754bce2..6e2cd7cc73 100644 --- a/src/localisation/date.c +++ b/src/localisation/date.c @@ -19,6 +19,7 @@ *****************************************************************************/ #include "../addresses.h" +#include "../game.h" #include "date.h" #include "string_ids.h" @@ -62,5 +63,5 @@ void date_reset() { RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, sint16) = MONTH_MARCH; RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_TICKS, sint16) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) = 0; + gCurrentTicks = 0; } diff --git a/src/management/award.c b/src/management/award.c index b7bb2e7c98..2dbc0bd5e1 100644 --- a/src/management/award.c +++ b/src/management/award.c @@ -416,7 +416,7 @@ static int award_is_deserved_most_disappointing(int awardType, int activeAwardTy if (activeAwardTypes & (1 << PARK_AWARD_BEST_VALUE)) return 0; - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, uint16) > 650) + if (gParkRating > 650) return 0; // Count the number of disappointing rides diff --git a/src/management/finance.c b/src/management/finance.c index 572ffc0035..fccd42ab72 100644 --- a/src/management/finance.c +++ b/src/management/finance.c @@ -58,11 +58,11 @@ money32 *gParkValueHistory = RCT2_ADDRESS(RCT2_ADDRESS_PARK_VALUE_HISTORY, money */ void finance_payment(money32 amount, rct_expenditure_type type) { - money32 cur_money = DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32)); + money32 cur_money = DECRYPT_MONEY(gCashEncrypted); money32 new_money = cur_money - amount; //overflow check - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32) = ENCRYPT_MONEY(new_money); + gCashEncrypted = ENCRYPT_MONEY(new_money); RCT2_ADDRESS(RCT2_ADDRESS_EXPENDITURE_TABLE, money32)[type] -= amount; if (dword_988E60[type] & 1) RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_EXPENDITURE, money32) -= amount; // Cumulative amount of money spent this day @@ -109,8 +109,8 @@ void finance_pay_research() */ void finance_pay_interest() { - money32 current_loan = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, sint32); - sint16 current_interest = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, sint16); + money32 current_loan = gBankLoan; + sint16 current_interest = gBankLoanInterestRate; money32 tempcost = (current_loan * 5 * current_interest) >> 14; // (5 * interest) / 2^14 is pretty close to if (gParkFlags & PARK_FLAGS_NO_MONEY) @@ -177,15 +177,15 @@ void finance_init() { RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32) = MONEY(10000,00); // Cheat detection - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32) = ENCRYPT_MONEY(MONEY(10000,00)); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) = MONEY(10000,00); + gCashEncrypted = ENCRYPT_MONEY(MONEY(10000,00)); + gBankLoan = MONEY(10000,00); RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32) = MONEY(20000,00); RCT2_GLOBAL(0x013587D0, uint32) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, uint8) = 10; - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, money32) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_COMPANY_VALUE, money32) = 0; + gBankLoanInterestRate = 10; + gParkValue = 0; + gCompanyValue = 0; RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, money32) = MONEY32_UNDEFINED; RCT2_GLOBAL(RCT2_ADDRESS_TOTAL_ADMISSIONS, uint32) = 0; RCT2_GLOBAL(RCT2_ADDRESS_INCOME_FROM_ADMISSIONS, uint32) = 0; @@ -222,7 +222,7 @@ void finance_update_daily_profit() current_profit -= research_cost_table[level]; // Loan costs - money32 current_loan = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32); + money32 current_loan = gBankLoan; current_profit -= current_loan / 600; // Ride costs @@ -253,7 +253,7 @@ void finance_update_loan_hash() sint32 value = 0x70093A; value -= RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32); value = ror32(value, 5); - value -= RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32); + value -= gBankLoan; value = ror32(value, 7); value += RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32); value = ror32(value, 3); @@ -272,7 +272,7 @@ money32 finance_get_initial_cash() money32 finance_get_current_loan() { - return RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32); + return gBankLoan; } money32 finance_get_maximum_loan() @@ -282,7 +282,7 @@ money32 finance_get_maximum_loan() money32 finance_get_current_cash() { - return DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32)); + return DECRYPT_MONEY(gCashEncrypted); } /** @@ -294,8 +294,8 @@ void game_command_set_current_loan(int* eax, int* ebx, int* ecx, int* edx, int* money32 money, loanDifference, currentLoan; money32 newLoan = *edx; - currentLoan = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32); - money = DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32)); + currentLoan = gBankLoan; + money = DECRYPT_MONEY(gCashEncrypted); loanDifference = currentLoan - newLoan; RCT2_GLOBAL(RCT2_ADDRESS_NEXT_EXPENDITURE_TYPE, uint8) = RCT_EXPENDITURE_TYPE_INTEREST * 4; @@ -315,9 +315,9 @@ void game_command_set_current_loan(int* eax, int* ebx, int* ecx, int* edx, int* if (*ebx & GAME_COMMAND_FLAG_APPLY) { money -= loanDifference; - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) = newLoan; + gBankLoan = newLoan; RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32) = money; - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32) = ENCRYPT_MONEY(money); + gCashEncrypted = ENCRYPT_MONEY(money); finance_update_loan_hash(); window_invalidate_by_class(WC_FINANCES); @@ -362,5 +362,5 @@ void finance_shift_expenditure_table() { */ void finance_reset_cash_to_initial() { - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32) = ENCRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32)); + gCashEncrypted = ENCRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32)); } diff --git a/src/management/finance.h b/src/management/finance.h index f0bb67fe90..79b9780e06 100644 --- a/src/management/finance.h +++ b/src/management/finance.h @@ -46,6 +46,10 @@ enum { #define EXPENDITURE_TABLE_MONTH_COUNT 16 #define EXPENDITURE_TABLE_TOTAL_COUNT (EXPENDITURE_TABLE_MONTH_COUNT * RCT_EXPENDITURE_TYPE_COUNT) +#define gCashEncrypted RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32) +#define gBankLoan RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) +#define gBankLoanInterestRate RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, sint8) + extern const money32 research_cost_table[4]; extern money32 *gCashHistory; diff --git a/src/network/network.cpp b/src/network/network.cpp index 90ea8b5ccf..d2cd44823b 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -45,6 +45,7 @@ extern "C" { #include "../interface/keyboard_shortcut.h" #include "../localisation/date.h" #include "../localisation/localisation.h" +#include "../management/finance.h" #include "../network/http.h" #include "../scenario.h" #include "../windows/error.h" @@ -912,7 +913,7 @@ void Network::UpdateClient() ProcessGameCommandQueue(); // Check synchronisation - if (!_desynchronised && !CheckSRAND(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32), RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_0, uint32))) { + if (!_desynchronised && !CheckSRAND(gCurrentTicks, RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_0, uint32))) { _desynchronised = true; char str_desync[256]; format_string(str_desync, STR_MULTIPLAYER_DESYNC, NULL); @@ -1128,9 +1129,9 @@ void Network::AdvertiseHeartbeat() json_object_set_new(gameInfo, "day", json_integer(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_TICKS, uint16))); json_object_set_new(gameInfo, "month", json_integer(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint16))); json_object_set_new(gameInfo, "guests", json_integer(gNumGuestsInPark)); - json_object_set_new(gameInfo, "parkValue", json_integer(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, money32))); + json_object_set_new(gameInfo, "parkValue", json_integer(gParkValue)); if (!(gParkFlags & PARK_FLAGS_NO_MONEY)) { - money32 cash = DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32)); + money32 cash = DECRYPT_MONEY(gCashEncrypted); json_object_set_new(gameInfo, "cash", json_integer(cash)); } @@ -1386,14 +1387,14 @@ void Network::Server_Send_CHAT(const char* text) void Network::Client_Send_GAMECMD(uint32 eax, uint32 ebx, uint32 ecx, uint32 edx, uint32 esi, uint32 edi, uint32 ebp, uint8 callback) { std::unique_ptr packet = std::move(NetworkPacket::Allocate()); - *packet << (uint32)NETWORK_COMMAND_GAMECMD << (uint32)RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) << eax << (ebx | GAME_COMMAND_FLAG_NETWORKED) << ecx << edx << esi << edi << ebp << callback; + *packet << (uint32)NETWORK_COMMAND_GAMECMD << (uint32)gCurrentTicks << eax << (ebx | GAME_COMMAND_FLAG_NETWORKED) << ecx << edx << esi << edi << ebp << callback; server_connection.QueuePacket(std::move(packet)); } void Network::Server_Send_GAMECMD(uint32 eax, uint32 ebx, uint32 ecx, uint32 edx, uint32 esi, uint32 edi, uint32 ebp, uint8 playerid, uint8 callback) { std::unique_ptr packet = std::move(NetworkPacket::Allocate()); - *packet << (uint32)NETWORK_COMMAND_GAMECMD << (uint32)RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) << eax << (ebx | GAME_COMMAND_FLAG_NETWORKED) << ecx << edx << esi << edi << ebp << playerid << callback; + *packet << (uint32)NETWORK_COMMAND_GAMECMD << (uint32)gCurrentTicks << eax << (ebx | GAME_COMMAND_FLAG_NETWORKED) << ecx << edx << esi << edi << ebp << playerid << callback; SendPacketToClients(*packet); } @@ -1401,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)RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) << (uint32)RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_0, uint32); + *packet << (uint32)NETWORK_COMMAND_TICK << (uint32)gCurrentTicks << (uint32)RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_SRAND_0, uint32); SendPacketToClients(*packet); } @@ -1574,7 +1575,7 @@ void Network::ProcessPacket(NetworkConnection& connection, NetworkPacket& packet void Network::ProcessGameCommandQueue() { - while (game_command_queue.begin() != game_command_queue.end() && game_command_queue.begin()->tick == RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32)) { + while (game_command_queue.begin() != game_command_queue.end() && game_command_queue.begin()->tick == gCurrentTicks) { // run all the game commands at the current tick const GameCommand& gc = (*game_command_queue.begin()); if (GetPlayerID() == gc.playerid) { @@ -1776,7 +1777,7 @@ void Network::Client_Handle_MAP(NetworkConnection& connection, NetworkPacket& pa if (game_load_network(rw)) { game_load_init(); game_command_queue.clear(); - server_tick = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32); + server_tick = gCurrentTicks; server_srand0_tick = 0; // window_network_status_open("Loaded new map from network"); _desynchronised = false; @@ -2450,7 +2451,7 @@ void network_set_password(const char* password) int network_get_mode() { return NETWORK_MODE_NONE; } int network_get_status() { return NETWORK_STATUS_NONE; } int network_get_authstatus() { return NETWORK_AUTH_NONE; } -uint32 network_get_server_tick() { return RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32); } +uint32 network_get_server_tick() { return gCurrentTicks; } void network_send_gamecmd(uint32 eax, uint32 ebx, uint32 ecx, uint32 edx, uint32 esi, uint32 edi, uint32 ebp, uint8 callback) {} void network_send_map() {} void network_update() {} diff --git a/src/peep/peep.c b/src/peep/peep.c index d0d5b491dc..1e4bba0524 100644 --- a/src/peep/peep.c +++ b/src/peep/peep.c @@ -177,7 +177,7 @@ void peep_update_all() peep = &(g_sprite_list[spriteIndex].peep); spriteIndex = peep->next; - if ((i & 0x7F) != (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 0x7F)) { + if ((i & 0x7F) != (gCurrentTicks & 0x7F)) { peep_update(peep); } else { sub_68F41A(peep, i); @@ -399,7 +399,7 @@ static void sub_68F41A(rct_peep *peep, int index) return; } - if ((index & 0x1FF) == (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 0x1FF)){ + if ((index & 0x1FF) == (gCurrentTicks & 0x1FF)){ //RCT2_GLOBAL(0x00F1EDFE, uint32) = index; not needed all cases accounted for if (peep->peep_flags & PEEP_FLAGS_CROWDED){ @@ -504,7 +504,7 @@ static void sub_68F41A(rct_peep *peep, int index) peep_pick_ride_to_go_on(peep); } - if ((index & 0x3FF) == (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 0x3FF)){ + if ((index & 0x3FF) == (gCurrentTicks & 0x3FF)){ if (peep->outside_of_park == 0 && (peep->state == PEEP_STATE_WALKING || peep->state == PEEP_STATE_SITTING)){ @@ -1321,7 +1321,7 @@ void peep_remove(rct_peep* peep){ RCT2_GLOBAL(RCT2_ADDRESS_BTM_TOOLBAR_DIRTY_FLAGS, uint16) |= BTM_TB_DIRTY_FLAG_PEEP_COUNT; } if (peep->state == PEEP_STATE_ENTERING_PARK){ - RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_HEADING_FOR_PARK, uint16)--; + gNumGuestsHeadingForPark--; } } peep_sprite_remove(peep); @@ -4342,7 +4342,7 @@ static void peep_update_1(rct_peep* peep){ * rct2: 0x690009 */ static void peep_update_picked(rct_peep* peep){ - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 0x1F) return; + if (gCurrentTicks & 0x1F) return; peep->sub_state++; if (peep->sub_state == 13){ peep_insert_new_thought(peep, PEEP_THOUGHT_TYPE_HELP, 0xFF); @@ -4476,7 +4476,7 @@ static void peep_update_entering_park(rct_peep* peep){ if (peep->var_37 != 1){ sub_693C9E(peep); if ((RCT2_GLOBAL(0xF1EE18, uint16) & 2)){ - RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_HEADING_FOR_PARK, uint16)--; + gNumGuestsHeadingForPark--; peep_sprite_remove(peep); } return; @@ -4495,7 +4495,7 @@ static void peep_update_entering_park(rct_peep* peep){ peep->outside_of_park = 0; peep->time_in_park = RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_TICKS, uint32); gNumGuestsInPark++; - RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_HEADING_FOR_PARK, uint16)--; + gNumGuestsHeadingForPark--; RCT2_GLOBAL(RCT2_ADDRESS_BTM_TOOLBAR_DIRTY_FLAGS, uint16) |= BTM_TB_DIRTY_FLAG_PEEP_COUNT; window_invalidate_by_class(WC_GUEST_LIST); } @@ -5452,7 +5452,7 @@ static void peep_update_walking(rct_peep* peep){ } else if (peep_has_empty_container(peep)){ if ((!(peep->next_var_29 & 0x18)) && - ((peep->sprite_index & 0x1FF) == (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 0x1FF))&& + ((peep->sprite_index & 0x1FF) == (gCurrentTicks & 0x1FF))&& ((0xFFFF & scenario_rand()) <= 4096)){ uint8 pos_stnd = 0; @@ -6116,9 +6116,9 @@ rct_peep *peep_generate(int x, int y, int z) peep->nausea_tolerance = RCT2_ADDRESS(0x009823A0, uint8)[nausea_tolerance]; - sint8 happiness = (scenario_rand() & 0x1F) - 15 + RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HAPPINESS, uint8); + sint8 happiness = (scenario_rand() & 0x1F) - 15 + gGuestInitialHappiness; - if (RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HAPPINESS, uint8) == 0) + if (gGuestInitialHappiness == 0) happiness += 0x80; peep->happiness = happiness; @@ -6126,11 +6126,11 @@ rct_peep *peep_generate(int x, int y, int z) peep->nausea = 0; peep->nausea_growth_rate = 0; - sint8 hunger = (scenario_rand() & 0x1F) - 15 + RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HUNGER, uint8); + sint8 hunger = (scenario_rand() & 0x1F) - 15 + gGuestInitialHunger; peep->hunger = hunger; - sint8 thirst = (scenario_rand() & 0x1F) - 15 + RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_THIRST, uint8); + sint8 thirst = (scenario_rand() & 0x1F) - 15 + gGuestInitialThirst; peep->thirst = thirst; @@ -6143,10 +6143,10 @@ rct_peep *peep_generate(int x, int y, int z) peep->id = RCT2_GLOBAL(0x013B0E6C, uint32)++; peep->name_string_idx = 767; - money32 cash = (scenario_rand() & 0x3) * 100 - 100 + RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16); + money32 cash = (scenario_rand() & 0x3) * 100 - 100 + gGuestInitialCash; if (cash < 0) cash = 0; - if (RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16) == 0){ + if (gGuestInitialCash == 0){ cash = 500; } @@ -6154,7 +6154,7 @@ rct_peep *peep_generate(int x, int y, int z) cash = 0; } - if (RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16) == (money16)0xFFFF){ + if (gGuestInitialCash == (money16)0xFFFF){ cash = 0; } @@ -6198,7 +6198,7 @@ rct_peep *peep_generate(int x, int y, int z) } peep_update_name_sort(peep); - RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_HEADING_FOR_PARK, uint16)++; + gNumGuestsHeadingForPark++; return peep; } @@ -6961,7 +6961,7 @@ static int peep_interact_with_entrance(rct_peep* peep, sint16 x, sint16 y, rct_m if (!(gParkFlags & PARK_FLAGS_PARK_OPEN)){ peep->state = PEEP_STATE_LEAVING_PARK; peep->var_37 = 1; - RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_HEADING_FOR_PARK, uint16)--; + gNumGuestsHeadingForPark--; peep_window_state_update(peep); return peep_return_to_center_of_tile(peep); } @@ -7019,7 +7019,7 @@ static int peep_interact_with_entrance(rct_peep* peep, sint16 x, sint16 y, rct_m if (!found){ peep->state = PEEP_STATE_LEAVING_PARK; peep->var_37 = 1; - RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_HEADING_FOR_PARK, uint16)--; + gNumGuestsHeadingForPark--; peep_window_state_update(peep); return peep_return_to_center_of_tile(peep); } @@ -7041,7 +7041,7 @@ static int peep_interact_with_entrance(rct_peep* peep, sint16 x, sint16 y, rct_m if (entranceFee > peep->cash_in_pocket){ peep->state = PEEP_STATE_LEAVING_PARK; peep->var_37 = 1; - RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_HEADING_FOR_PARK, uint16)--; + gNumGuestsHeadingForPark--; peep_window_state_update(peep); return peep_return_to_center_of_tile(peep); } diff --git a/src/peep/peep.h b/src/peep/peep.h index 75bd863297..9e57028ef3 100644 --- a/src/peep/peep.h +++ b/src/peep/peep.h @@ -599,6 +599,16 @@ enum { FOR_ALL_PEEPS(sprite_index, peep) \ if (peep->type == PEEP_TYPE_STAFF) +#define gGuestChangeModifier RCT2_GLOBAL(RCT2_ADDRESS_GUEST_CHANGE_MODIFIER, uint8) +#define gNumGuestsInPark RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_IN_PARK, uint16) +#define gNumGuestsInParkLastWeek RCT2_GLOBAL(RCT2_ADDRESS_LAST_GUESTS_IN_PARK, uint16) +#define gNumGuestsHeadingForPark RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_HEADING_FOR_PARK, uint16) + +#define gGuestInitialCash RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16) +#define gGuestInitialHappiness RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HAPPINESS, uint8) +#define gGuestInitialHunger RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HUNGER, uint8) +#define gGuestInitialThirst RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_THIRST, uint8) + int peep_get_staff_count(); int peep_can_be_picked_up(rct_peep* peep); void peep_update_all(); diff --git a/src/peep/staff.c b/src/peep/staff.c index b943148848..31493a4ee8 100644 --- a/src/peep/staff.c +++ b/src/peep/staff.c @@ -739,7 +739,7 @@ static int staff_path_finding_handyman(rct_peep* peep) uint8 validDirections = staff_get_valid_patrol_directions(peep, peep->next_x, peep->next_y); if ((peep->staff_orders & STAFF_ORDERS_SWEEPING) && - ((RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) + peep->sprite_index) & 0xFFF) > 110) { + ((gCurrentTicks + peep->sprite_index) & 0xFFF) > 110) { litterDirection = staff_handyman_direction_to_nearest_litter(peep); } diff --git a/src/rct1/S4Importer.cpp b/src/rct1/S4Importer.cpp index f2e49092b0..1f5b8754a5 100644 --- a/src/rct1/S4Importer.cpp +++ b/src/rct1/S4Importer.cpp @@ -653,16 +653,16 @@ void S4Importer::ImportMapAnimations() void S4Importer::ImportFinance() { gParkEntranceFee = _s4.park_entrance_fee; - RCT2_GLOBAL(RCT2_ADDRESS_LAND_COST, money16) = _s4.land_price; - RCT2_GLOBAL(RCT2_ADDRESS_CONSTRUCTION_RIGHTS_COST, money16) = _s4.construction_rights_price; + gLandPrice = _s4.land_price; + gConstructionRightsPrice = _s4.construction_rights_price; - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, uint32) = ENCRYPT_MONEY(_s4.cash); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) = _s4.loan; + gCashEncrypted = ENCRYPT_MONEY(_s4.cash); + gBankLoan = _s4.loan; RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32) = _s4.max_loan; RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32) = _s4.cash; - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_COMPANY_VALUE, money32) = _s4.company_value; - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, money32) = _s4.park_value; + gCompanyValue = _s4.company_value; + gParkValue = _s4.park_value; RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PROFIT, money32) = _s4.profit; for (int i = 0; i < 128; i++) @@ -917,22 +917,22 @@ void S4Importer::ImportParkName() rct_string_id stringId = user_string_allocate(4, parkName); if (stringId != 0) { - RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id) = stringId; - RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32) = 0; + gParkName = stringId; + gParkNameArgs = 0; } } void S4Importer::ImportParkFlags() { // Date and srand - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) = _s4.ticks; + 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; RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint16) = _s4.month; RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_TICKS, uint16) = _s4.day; // Park rating - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, uint16) = _s4.park_rating; + gParkRating = _s4.park_rating; for (int i = 0; i < 32; i++) { gParkRatingHistory[i] = _s4.park_rating_history[i]; @@ -958,9 +958,9 @@ void S4Importer::ImportParkFlags() } // Initial guest status - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16) = _s4.guest_initial_cash; - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HUNGER, uint8) = _s4.guest_initial_hunger; - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_THIRST, uint8) = _s4.guest_initial_thirst; + gGuestInitialCash = _s4.guest_initial_cash; + gGuestInitialHunger = _s4.guest_initial_hunger; + gGuestInitialThirst = _s4.guest_initial_thirst; // Staff colours RCT2_GLOBAL(RCT2_ADDRESS_HANDYMAN_COLOUR, uint8) = RCT1::GetColour(_s4.handman_colour); @@ -1023,10 +1023,10 @@ void S4Importer::ImportScenarioNameDetails() void S4Importer::ImportScenarioObjective() { - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) = _s4.scenario_objective_type; - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8) = _s4.scenario_objective_years; - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, uint32) = _s4.scenario_objective_currency; - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) = _s4.scenario_objective_num_guests; + gScenarioObjectiveType = _s4.scenario_objective_type; + gScenarioObjectiveYear = _s4.scenario_objective_years; + gScenarioObjectiveCurrency = _s4.scenario_objective_currency; + gScenarioObjectiveNumGuests = _s4.scenario_objective_num_guests; } void S4Importer::ImportSavedView() diff --git a/src/ride/ride.c b/src/ride/ride.c index 3f1025484d..c17fc52f9c 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -1943,7 +1943,7 @@ static void ride_update(int rideIndex) // Various things include news messages if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_DUE_INSPECTION)) - if (((RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) >> 1) & 255) == rideIndex) + if (((gCurrentTicks >> 1) & 255) == rideIndex) ride_breakdown_status_update(rideIndex); ride_inspection_update(ride); @@ -2039,7 +2039,7 @@ static void ride_spiral_slide_update(rct_ride *ride) rct_map_element *mapElement; rct_peep *peep; - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 3) + if (gCurrentTicks & 3) return; if (ride->slide_in_use == 0) return; @@ -2095,7 +2095,7 @@ static void ride_inspection_update(rct_ride *ride) { int i; - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 2047) + if (gCurrentTicks & 2047) return; if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_DESIGNER) return; @@ -2160,7 +2160,7 @@ static void ride_breakdown_update(int rideIndex) int breakdownReason, unreliabilityAccumulator; rct_ride *ride = get_ride(rideIndex); - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 255) + if (gCurrentTicks & 255) return; if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_DESIGNER) return; @@ -2168,7 +2168,7 @@ static void ride_breakdown_update(int rideIndex) if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED)) ride->downtime_history[0]++; - if (!(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 8191)) { + if (!(gCurrentTicks & 8191)) { int totalDowntime = ride->downtime_history[0] + ride->downtime_history[1] + @@ -2677,7 +2677,7 @@ static void ride_music_update(int rideIndex) // Oscillate parameters for a power cut effect when breaking down if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN)) { if (ride->breakdown_reason_pending == BREAKDOWN_CONTROL_FAILURE) { - if (!(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 7)) + if (!(gCurrentTicks & 7)) if (ride->breakdown_sound_modifier != 255) ride->breakdown_sound_modifier++; } else { @@ -6008,7 +6008,7 @@ foundRideEntry: ride->price_secondary = DefaultShopItemPrice[rideEntry->shop_item_secondary]; } - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) == OBJECTIVE_BUILD_THE_BEST) { + if (gScenarioObjectiveType == OBJECTIVE_BUILD_THE_BEST) { ride->price = 0; } @@ -6332,7 +6332,7 @@ void game_command_demolish_ride(int *eax, int *ebx, int *ecx, int *edx, int *esi user_string_free(ride->name); ride->type = RIDE_TYPE_NULL; window_invalidate_by_class(WC_RIDE_LIST); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, money32) = calculate_park_value(); + gParkValue = calculate_park_value(); RCT2_GLOBAL(RCT2_ADDRESS_COMMAND_MAP_X, uint16) = x; RCT2_GLOBAL(RCT2_ADDRESS_COMMAND_MAP_Y, uint16) = y; RCT2_GLOBAL(RCT2_ADDRESS_COMMAND_MAP_Z, uint16) = z; diff --git a/src/ride/station.c b/src/ride/station.c index 2b584b214a..b23aff115c 100644 --- a/src/ride/station.c +++ b/src/ride/station.c @@ -19,6 +19,7 @@ *****************************************************************************/ #include "../addresses.h" +#include "../game.h" #include "../scenario.h" #include "../world/sprite.h" #include "station.h" @@ -146,7 +147,7 @@ static void ride_update_station_normal(rct_ride *ride, int stationIndex) (ride->lifecycle_flags & (RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED)) || (ride->status == RIDE_STATUS_CLOSED && ride->num_riders == 0) ) { - if (time != 0 && time != 127 && !(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 7)) + if (time != 0 && time != 127 && !(gCurrentTicks & 7)) time--; ride->station_depart[stationIndex] = time; @@ -156,7 +157,7 @@ static void ride_update_station_normal(rct_ride *ride, int stationIndex) ride->station_depart[stationIndex] |= STATION_DEPART_FLAG; ride_invalidate_station_start(ride, stationIndex, 1); } else { - if (time != 127 && !(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 31)) + if (time != 127 && !(gCurrentTicks & 31)) time--; ride->station_depart[stationIndex] = time; diff --git a/src/ride/vehicle.c b/src/ride/vehicle.c index cdb733e76d..0b2ad10ac1 100644 --- a/src/ride/vehicle.c +++ b/src/ride/vehicle.c @@ -541,7 +541,7 @@ void vehicle_sounds_update() vehicle_sound->sound1_pan = vehicle_sound_params->pan_x; Mixer_Channel_Pan(vehicle_sound->sound1_channel, DStoMixerPan(vehicle_sound_params->pan_x)); } - if (!(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 3) && vehicle_sound_params->frequency != vehicle_sound->sound1_freq) { + if (!(gCurrentTicks & 3) && vehicle_sound_params->frequency != vehicle_sound->sound1_freq) { vehicle_sound->sound1_freq = vehicle_sound_params->frequency; uint16 frequency = vehicle_sound_params->frequency; if (_soundParams[sprite->vehicle.sound1_id][1] & 2) { @@ -596,7 +596,7 @@ void vehicle_sounds_update() vehicle_sound->sound2_pan = vehicle_sound_params->pan_x; Mixer_Channel_Pan(vehicle_sound->sound2_channel, DStoMixerPan(vehicle_sound_params->pan_x)); } - if (!(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 3) && vehicle_sound_params->frequency != vehicle_sound->sound2_freq) { + if (!(gCurrentTicks & 3) && vehicle_sound_params->frequency != vehicle_sound->sound2_freq) { vehicle_sound->sound2_freq = vehicle_sound_params->frequency; if (!(_soundParams[sprite->vehicle.sound2_id][1] & 1)) { uint16 frequency = (vehicle_sound_params->frequency * 2) - 3248; @@ -3847,7 +3847,7 @@ static void vehicle_update_haunted_house_operating(rct_vehicle* vehicle) { return; if (vehicle->vehicle_sprite_type != 0) { - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 1) { + if (gCurrentTicks & 1) { vehicle->vehicle_sprite_type++; vehicle_invalidate(vehicle); @@ -4320,7 +4320,7 @@ static void vehicle_update_sound(rct_vehicle *vehicle) switch (vehicleEntry->sound_range) { case 3: screamId = vehicle->scream_sound_id; - if (!(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 0x7F)) { + if (!(gCurrentTicks & 0x7F)) { if (vehicle->velocity < 0x40000 || vehicle->scream_sound_id != 255) goto loc_6D7A97; @@ -4336,7 +4336,7 @@ static void vehicle_update_sound(rct_vehicle *vehicle) case 4: screamId = vehicle->scream_sound_id; - if (!(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 0x7F)) { + if (!(gCurrentTicks & 0x7F)) { if (vehicle->velocity < 0x40000 || vehicle->scream_sound_id != 255) goto loc_6D7A97; @@ -5073,7 +5073,7 @@ static int vehicle_update_motion_bumper_car(rct_vehicle* vehicle) { vehicle->acceleration = 0; if (!(ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN)) || ride->breakdown_reason_pending != BREAKDOWN_SAFETY_CUT_OUT) { - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 1 && + if (gCurrentTicks & 1 && vehicle->var_34 != 0) { if (vehicle->var_34 > 0) { @@ -6911,7 +6911,7 @@ loc_6DAEB9: if (regs.eax < RCT2_GLOBAL(0x00F64E08, sint32)) { vehicle->acceleration = -RCT2_GLOBAL(0x00F64E08, sint32) * 16; } - else if (!(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 0x0F)) { + else if (!(gCurrentTicks & 0x0F)) { if (RCT2_GLOBAL(0x00F64E2C, uint8) == 0) { RCT2_GLOBAL(0x00F64E2C, uint8)++; audio_play_sound_at_location(SOUND_51, vehicle->x, vehicle->y, vehicle->z); diff --git a/src/scenario.c b/src/scenario.c index 3a5c4ea2d6..93b3e59179 100644 --- a/src/scenario.c +++ b/src/scenario.c @@ -274,14 +274,14 @@ void scenario_begin() sub_684AC3(); scenery_set_default_placement_configuration(); news_item_init_queue(); - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) != OBJECTIVE_NONE) + if (gScenarioObjectiveType != OBJECTIVE_NONE) window_park_objective_open(); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, sint16) = calculate_park_rating(); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, money32) = calculate_park_value(); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_COMPANY_VALUE, money32) = calculate_company_value(); - RCT2_GLOBAL(0x013587D0, money32) = RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32) - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32) = ENCRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, sint32)); + gParkRating = calculate_park_rating(); + gParkValue = calculate_park_value(); + gCompanyValue = calculate_company_value(); + RCT2_GLOBAL(0x013587D0, money32) = RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32) - gBankLoan; + gCashEncrypted = ENCRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, sint32)); finance_update_loan_hash(); @@ -328,7 +328,7 @@ void scenario_begin() // Set the last saved game path char parkName[128]; - format_string(parkName, RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id), (void*)RCT2_ADDRESS_PARK_NAME_ARGS); + format_string(parkName, gParkName, &gParkNameArgs); platform_get_user_directory(gScenarioSavePath, "save"); strncat(gScenarioSavePath, parkName, sizeof(gScenarioSavePath) - strlen(gScenarioSavePath) - 1); @@ -409,7 +409,7 @@ void scenario_failure() */ void scenario_success() { - const money32 companyValue = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_COMPANY_VALUE, money32); + const money32 companyValue = gCompanyValue; RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, uint32) = companyValue; peep_applause(); @@ -515,7 +515,7 @@ static void scenario_day_update() { finance_update_daily_profit(); peep_update_days_in_queue(); - switch (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8)) { + switch (gScenarioObjectiveType) { case OBJECTIVE_10_ROLLERCOASTERS: case OBJECTIVE_GUESTS_AND_RATING: case OBJECTIVE_10_ROLLERCOASTERS_LENGTH: @@ -724,7 +724,7 @@ void scenario_prepare_rides_for_save() rct_ride *ride; map_element_iterator it; - int isFiveCoasterObjective = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) == OBJECTIVE_FINISH_5_ROLLERCOASTERS; + int isFiveCoasterObjective = gScenarioObjectiveType == OBJECTIVE_FINISH_5_ROLLERCOASTERS; // Set all existing track to be indestructible map_element_iterator_begin(&it); @@ -766,16 +766,16 @@ int scenario_prepare_for_save() } if (s6Info->name[0] == 0) - format_string(s6Info->name, RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id), (void*)RCT2_ADDRESS_PARK_NAME_ARGS); + format_string(s6Info->name, gParkName, &gParkNameArgs); - s6Info->objective_type = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8); - s6Info->objective_arg_1 = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8); - s6Info->objective_arg_2 = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, sint32); - s6Info->objective_arg_3 = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16); + s6Info->objective_type = gScenarioObjectiveType; + s6Info->objective_arg_1 = gScenarioObjectiveYear; + s6Info->objective_arg_2 = gScenarioObjectiveCurrency; + s6Info->objective_arg_3 = gScenarioObjectiveNumGuests; scenario_prepare_rides_for_save(); - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) == OBJECTIVE_GUESTS_AND_RATING) + if (gScenarioObjectiveType == OBJECTIVE_GUESTS_AND_RATING) gParkFlags |= PARK_FLAGS_PARK_OPEN; // Fix #2385: saved scenarios did not initialise temperatures to selected climate @@ -1253,10 +1253,10 @@ bool scenario_save_s6(SDL_RWops* rw, rct_s6_data *s6) static void scenario_objective_check_guests_by() { - uint8 objectiveYear = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8); - sint16 parkRating = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, sint16); + uint8 objectiveYear = gScenarioObjectiveYear; + sint16 parkRating = gParkRating; sint16 guestsInPark = gNumGuestsInPark; - sint16 objectiveGuests = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16); + sint16 objectiveGuests = gScenarioObjectiveNumGuests; sint16 currentMonthYear = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, sint16); if (currentMonthYear == 8 * objectiveYear){ @@ -1269,10 +1269,10 @@ static void scenario_objective_check_guests_by() static void scenario_objective_check_park_value_by() { - uint8 objectiveYear = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8); + uint8 objectiveYear = gScenarioObjectiveYear; sint16 currentMonthYear = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, sint16); - money32 objectiveParkValue = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32); - money32 parkValue = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, money32); + money32 objectiveParkValue = gScenarioObjectiveCurrency; + money32 parkValue = gParkValue; if (currentMonthYear == 8 * objectiveYear) { if (parkValue >= objectiveParkValue) @@ -1321,7 +1321,7 @@ static void scenario_objective_check_10_rollercoasters() */ static void scenario_objective_check_guests_and_rating() { - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, uint16) < 700 && RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint16) >= 1) { + if (gParkRating < 700 && RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint16) >= 1) { RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16)++; if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16) == 1) { if (gConfigNotifications.park_rating_warnings) { @@ -1343,20 +1343,20 @@ static void scenario_objective_check_guests_and_rating() news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_HAS_BEEN_CLOSED_DOWN, 0); gParkFlags &= ~PARK_FLAGS_PARK_OPEN; scenario_failure(); - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HAPPINESS, uint8) = 50; + gGuestInitialHappiness = 50; } } else if (RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, money32) != 0x80000001) { RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16) = 0; } - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, uint16) >= 700) - if (gNumGuestsInPark >= RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16)) + if (gParkRating >= 700) + if (gNumGuestsInPark >= gScenarioObjectiveNumGuests) scenario_success(); } static void scenario_objective_check_monthly_ride_income() { - money32 objectiveMonthlyRideIncome = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32); + money32 objectiveMonthlyRideIncome = gScenarioObjectiveCurrency; money32 monthlyRideIncome = RCT2_GLOBAL(RCT2_ADDRESS_MONTHLY_RIDE_INCOME, money32); if (monthlyRideIncome >= objectiveMonthlyRideIncome) scenario_success(); @@ -1371,7 +1371,7 @@ static void scenario_objective_check_10_rollercoasters_length() { int i, rcs = 0; uint8 type_already_counted[256]; - sint16 objective_length = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16); + sint16 objective_length = gScenarioObjectiveNumGuests; rct_ride* ride; memset(type_already_counted, 0, 256); @@ -1402,7 +1402,7 @@ static void scenario_objective_check_finish_5_rollercoasters() int i; rct_ride* ride; - money32 objectiveRideExcitement = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32); + money32 objectiveRideExcitement = gScenarioObjectiveCurrency; // ORIGINAL BUG?: // This does not check if the rides are even rollercoasters nevermind the right rollercoasters to be finished. @@ -1418,9 +1418,9 @@ static void scenario_objective_check_finish_5_rollercoasters() static void scenario_objective_check_replay_loan_and_park_value() { - money32 objectiveParkValue = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32); - money32 parkValue = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, money32); - money32 currentLoan = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32); + money32 objectiveParkValue = gScenarioObjectiveCurrency; + money32 parkValue = gParkValue; + money32 currentLoan = gBankLoan; if (currentLoan <= 0 && parkValue >= objectiveParkValue) scenario_success(); @@ -1428,7 +1428,7 @@ static void scenario_objective_check_replay_loan_and_park_value() static void scenario_objective_check_monthly_food_income() { - money32 objectiveMonthlyIncome = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32); + money32 objectiveMonthlyIncome = gScenarioObjectiveCurrency; sint32 monthlyIncome = RCT2_GLOBAL(0x013578A4, money32) + RCT2_GLOBAL(0x013578A0, money32) + @@ -1445,16 +1445,8 @@ static void scenario_objective_check_monthly_food_income() */ static void scenario_objective_check() { - uint8 objective_type = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8), - objective_year = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8); - sint16 park_rating = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, sint16), - guests_in_park = gNumGuestsInPark, - objective_guests = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16), - cur_month_year = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, sint16); + uint8 objective_type = gScenarioObjectiveType; uint32 scenario_completed_company_value = RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, uint32); - sint32 objective_currency = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, sint32), - park_value = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, sint32); - if (scenario_completed_company_value != MONEY32_UNDEFINED) return; diff --git a/src/scenario.h b/src/scenario.h index 500f9ab6c1..d205267771 100644 --- a/src/scenario.h +++ b/src/scenario.h @@ -461,6 +461,11 @@ typedef struct { extern const rct_string_id ScenarioCategoryStringIds[SCENARIO_CATEGORY_COUNT]; +#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) + // Scenario list extern int gScenarioListCount; extern int gScenarioListCapacity; diff --git a/src/windows/editor_objective_options.c b/src/windows/editor_objective_options.c index 08a9a7d26f..8740c82da4 100644 --- a/src/windows/editor_objective_options.c +++ b/src/windows/editor_objective_options.c @@ -346,7 +346,7 @@ static void window_editor_objective_options_set_page(rct_window *w, int page) */ static void window_editor_objective_options_set_objective(rct_window *w, int objective) { - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) = objective; + gScenarioObjectiveType = objective; window_invalidate(w); // Set default objective arguments @@ -357,30 +357,30 @@ static void window_editor_objective_options_set_objective(rct_window *w, int obj case OBJECTIVE_10_ROLLERCOASTERS: break; case OBJECTIVE_GUESTS_BY: - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8) = 3; - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) = 1500; + gScenarioObjectiveYear = 3; + gScenarioObjectiveNumGuests = 1500; break; case OBJECTIVE_PARK_VALUE_BY: - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8) = 3; - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) = MONEY(50000,00); + gScenarioObjectiveYear = 3; + gScenarioObjectiveCurrency = MONEY(50000,00); break; case OBJECTIVE_GUESTS_AND_RATING: - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) = 2000; + gScenarioObjectiveNumGuests = 2000; break; case OBJECTIVE_MONTHLY_RIDE_INCOME: - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) = MONEY(10000,00); + gScenarioObjectiveCurrency = MONEY(10000,00); break; case OBJECTIVE_10_ROLLERCOASTERS_LENGTH: - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) = 1200; + gScenarioObjectiveNumGuests = 1200; break; case OBJECTIVE_FINISH_5_ROLLERCOASTERS: - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) = FIXED_2DP(6,70); + gScenarioObjectiveCurrency = FIXED_2DP(6,70); break; case OBJECTIVE_REPLAY_LOAN_AND_PARK_VALUE: - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) = MONEY(50000,00); + gScenarioObjectiveCurrency = MONEY(50000,00); break; case OBJECTIVE_MONTHLY_FOOD_INCOME: - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) = MONEY(1000,00); + gScenarioObjectiveCurrency = MONEY(1000,00); break; } } @@ -402,8 +402,8 @@ static void window_editor_objective_options_main_mouseup(rct_window *w, int widg window_editor_objective_options_set_page(w, widgetIndex - WIDX_TAB_1); break; case WIDX_PARK_NAME: - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 16, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); - window_text_input_open(w, WIDX_PARK_NAME, STR_PARK_NAME, STR_ENTER_PARK_NAME, RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id), 0, 32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 16, uint32) = gParkNameArgs; + window_text_input_open(w, WIDX_PARK_NAME, STR_PARK_NAME, STR_ENTER_PARK_NAME, gParkName, 0, 32); break; case WIDX_SCENARIO_NAME: safe_strcpy((char*)0x009BC677, s6Info->name, 64); @@ -494,7 +494,7 @@ static void window_editor_objective_options_show_objective_dropdown(rct_window * dropdownWidget->right - dropdownWidget->left - 3 ); - objectiveType = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8); + objectiveType = gScenarioObjectiveType; for (i = 0; i < numItems; i++) { if (gDropdownItemsArgs[i] - STR_OBJECTIVE_DROPDOWN_NONE == objectiveType) { dropdown_set_checked(i, true); @@ -552,46 +552,46 @@ static void window_editor_objective_options_show_category_dropdown(rct_window *w static void window_editor_objective_options_arg_1_increase(rct_window *w) { - switch (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8)) { + switch (gScenarioObjectiveType) { case OBJECTIVE_PARK_VALUE_BY: case OBJECTIVE_MONTHLY_RIDE_INCOME: case OBJECTIVE_REPLAY_LOAN_AND_PARK_VALUE: - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) >= MONEY(2000000,00)) { + if (gScenarioObjectiveCurrency >= MONEY(2000000,00)) { window_error_open(3264, STR_NONE); } else { - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) += MONEY(1000,0); + gScenarioObjectiveCurrency += MONEY(1000,0); window_invalidate(w); } break; case OBJECTIVE_MONTHLY_FOOD_INCOME: - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) >= MONEY(2000000,00)) { + if (gScenarioObjectiveCurrency >= MONEY(2000000,00)) { window_error_open(3264, STR_NONE); } else { - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) += MONEY(100,0); + gScenarioObjectiveCurrency += MONEY(100,0); window_invalidate(w); } break; case OBJECTIVE_10_ROLLERCOASTERS_LENGTH: - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) >= 5000) { + if (gScenarioObjectiveNumGuests >= 5000) { window_error_open(3264, STR_NONE); } else { - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) += 100; + gScenarioObjectiveNumGuests += 100; window_invalidate(w); } break; case OBJECTIVE_FINISH_5_ROLLERCOASTERS: - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) >= FIXED_2DP(9,90)) { + if (gScenarioObjectiveCurrency >= FIXED_2DP(9,90)) { window_error_open(3264, STR_NONE); } else { - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) += FIXED_2DP(0,10); + gScenarioObjectiveCurrency += FIXED_2DP(0,10); window_invalidate(w); } break; default: - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) >= 5000) { + if (gScenarioObjectiveNumGuests >= 5000) { window_error_open(3264, STR_NONE); } else { - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) += 50; + gScenarioObjectiveNumGuests += 50; window_invalidate(w); } break; @@ -600,46 +600,46 @@ static void window_editor_objective_options_arg_1_increase(rct_window *w) static void window_editor_objective_options_arg_1_decrease(rct_window *w) { - switch (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8)) { + switch (gScenarioObjectiveType) { case OBJECTIVE_PARK_VALUE_BY: case OBJECTIVE_MONTHLY_RIDE_INCOME: case OBJECTIVE_REPLAY_LOAN_AND_PARK_VALUE: - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) <= MONEY(1000,00)) { + if (gScenarioObjectiveCurrency <= MONEY(1000,00)) { window_error_open(3265, STR_NONE); } else { - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) -= MONEY(1000,0); + gScenarioObjectiveCurrency -= MONEY(1000,0); window_invalidate(w); } break; case OBJECTIVE_MONTHLY_FOOD_INCOME: - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) <= MONEY(1000,00)) { + if (gScenarioObjectiveCurrency <= MONEY(1000,00)) { window_error_open(3265, STR_NONE); } else { - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) -= MONEY(100,0); + gScenarioObjectiveCurrency -= MONEY(100,0); window_invalidate(w); } break; case OBJECTIVE_10_ROLLERCOASTERS_LENGTH: - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) <= 1000) { + if (gScenarioObjectiveNumGuests <= 1000) { window_error_open(3265, STR_NONE); } else { - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) -= 100; + gScenarioObjectiveNumGuests -= 100; window_invalidate(w); } break; case OBJECTIVE_FINISH_5_ROLLERCOASTERS: - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) <= FIXED_2DP(4,00)) { + if (gScenarioObjectiveCurrency <= FIXED_2DP(4,00)) { window_error_open(3265, STR_NONE); } else { - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) -= FIXED_2DP(0,10); + gScenarioObjectiveCurrency -= FIXED_2DP(0,10); window_invalidate(w); } break; default: - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) <= 250) { + if (gScenarioObjectiveNumGuests <= 250) { window_error_open(3265, STR_NONE); } else { - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) -= 50; + gScenarioObjectiveNumGuests -= 50; window_invalidate(w); } break; @@ -648,20 +648,20 @@ static void window_editor_objective_options_arg_1_decrease(rct_window *w) static void window_editor_objective_options_arg_2_increase(rct_window *w) { - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8) >= 25) { + if (gScenarioObjectiveYear >= 25) { window_error_open(3264, STR_NONE); } else { - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8)++; + gScenarioObjectiveYear++; window_invalidate(w); } } static void window_editor_objective_options_arg_2_decrease(rct_window *w) { - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8) <= 1) { + if (gScenarioObjectiveYear <= 1) { window_error_open(3265, STR_NONE); } else { - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8)--; + gScenarioObjectiveYear--; window_invalidate(w); } } @@ -712,7 +712,7 @@ static void window_editor_objective_options_main_dropdown(rct_window *w, int wid switch (widgetIndex) { case WIDX_OBJECTIVE_DROPDOWN: newObjectiveType = (uint8)(gDropdownItemsArgs[dropdownIndex] - 2397); - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) != newObjectiveType) + if (gScenarioObjectiveType != newObjectiveType) window_editor_objective_options_set_objective(w, newObjectiveType); break; case WIDX_CLIMATE_DROPDOWN: @@ -744,7 +744,7 @@ static void window_editor_objective_options_main_update(rct_window *w) widget_invalidate(w, WIDX_TAB_1); parkFlags = gParkFlags; - objectiveType = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8); + objectiveType = gScenarioObjectiveType; // Reset objective if invalid if (( @@ -782,7 +782,7 @@ static void window_editor_objective_options_main_textinput(rct_window *w, int wi park_set_name(text); if (s6Info->name[0] == 0) - format_string(s6Info->name, RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id), (void*)RCT2_ADDRESS_PARK_NAME_ARGS); + format_string(s6Info->name, gParkName, &gParkNameArgs); break; case WIDX_SCENARIO_NAME: strncpy(s6Info->name, text, 64); @@ -833,7 +833,7 @@ static void window_editor_objective_options_main_invalidate(rct_window *w) else w->disabled_widgets |= (WIDX_PARK_NAME | WIDX_SCENARIO_NAME); - switch (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8)) { + switch (gScenarioObjectiveType) { case OBJECTIVE_GUESTS_BY: case OBJECTIVE_PARK_VALUE_BY: window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_1].type = WWT_SPINNER; @@ -899,14 +899,14 @@ static void window_editor_objective_options_main_paint(rct_window *w, rct_drawpi // Objective value x = w->x + w->widgets[WIDX_OBJECTIVE].left + 1; y = w->y + w->widgets[WIDX_OBJECTIVE].top; - stringId = STR_OBJECTIVE_DROPDOWN_NONE + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8); + stringId = STR_OBJECTIVE_DROPDOWN_NONE + gScenarioObjectiveType; gfx_draw_string_left(dpi, 1193, &stringId, 0, x, y); if (w->widgets[WIDX_OBJECTIVE_ARG_1].type != WWT_EMPTY) { // Objective argument 1 label x = w->x + 28; y = w->y + w->widgets[WIDX_OBJECTIVE_ARG_1].top; - switch (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8)) { + switch (gScenarioObjectiveType) { case OBJECTIVE_GUESTS_BY: case OBJECTIVE_GUESTS_AND_RATING: stringId = 3303; @@ -933,26 +933,26 @@ static void window_editor_objective_options_main_paint(rct_window *w, rct_drawpi // Objective argument 1 value x = w->x + w->widgets[WIDX_OBJECTIVE_ARG_1].left + 1; y = w->y + w->widgets[WIDX_OBJECTIVE_ARG_1].top; - switch (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8)) { + switch (gScenarioObjectiveType) { case OBJECTIVE_GUESTS_BY: case OBJECTIVE_GUESTS_AND_RATING: stringId = 3309; - arg = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16); + arg = gScenarioObjectiveNumGuests; break; case OBJECTIVE_PARK_VALUE_BY: case OBJECTIVE_REPLAY_LOAN_AND_PARK_VALUE: case OBJECTIVE_MONTHLY_RIDE_INCOME: case OBJECTIVE_MONTHLY_FOOD_INCOME: stringId = 3246; - arg = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32); + arg = gScenarioObjectiveCurrency; break; case OBJECTIVE_10_ROLLERCOASTERS_LENGTH: stringId = 3310; - arg = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16); + arg = gScenarioObjectiveNumGuests; break; default: stringId = 3311; - arg = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32); + arg = gScenarioObjectiveCurrency; break; } gfx_draw_string_left(dpi, stringId, &arg, 0, x, y); @@ -967,7 +967,7 @@ static void window_editor_objective_options_main_paint(rct_window *w, rct_drawpi // Objective argument 2 value x = w->x + w->widgets[WIDX_OBJECTIVE_ARG_2].left + 1; y = w->y + w->widgets[WIDX_OBJECTIVE_ARG_2].top; - arg = (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8) * MONTH_COUNT) - 1; + arg = (gScenarioObjectiveYear * MONTH_COUNT) - 1; gfx_draw_string_left(dpi, 3302, &arg, 0, x, y); } @@ -990,9 +990,9 @@ static void window_editor_objective_options_main_paint(rct_window *w, rct_drawpi if (stex != NULL) { RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = stex->park_name; } else { - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = gParkName; } - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = gParkNameArgs; gfx_draw_string_left_clipped(dpi, 3298, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y, width); // Scenario name @@ -1006,7 +1006,7 @@ static void window_editor_objective_options_main_paint(rct_window *w, rct_drawpi safe_strcpy((char*)0x009BC677, s6Info->name, 64); RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = 3165; } - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = gParkNameArgs; gfx_draw_string_left_clipped(dpi, 3300, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y, width); // Scenario details label @@ -1025,7 +1025,7 @@ static void window_editor_objective_options_main_paint(rct_window *w, rct_drawpi safe_strcpy((char*)0x009BC677, s6Info->details, 256); RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = 3165; } - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = gParkNameArgs; gfx_draw_string_left_wrapped(dpi, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, x, y, width, 1191, 0); // Scenario category label diff --git a/src/windows/editor_scenario_options.c b/src/windows/editor_scenario_options.c index dd0c848953..d79d3abe1d 100644 --- a/src/windows/editor_scenario_options.c +++ b/src/windows/editor_scenario_options.c @@ -484,7 +484,7 @@ static void window_editor_scenario_options_financial_mousedown(int widgetIndex, case WIDX_INITIAL_CASH_INCREASE: if (RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32) < MONEY(1000000,00)) { RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32) += MONEY(500,00); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32) = ENCRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32)); + gCashEncrypted = ENCRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32)); finance_update_loan_hash(); } else { window_error_open(3248, STR_NONE); @@ -494,7 +494,7 @@ static void window_editor_scenario_options_financial_mousedown(int widgetIndex, case WIDX_INITIAL_CASH_DECREASE: if (RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32) > MONEY(0,00)) { RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32) -= MONEY(500,00); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32) = ENCRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32)); + gCashEncrypted = ENCRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32)); finance_update_loan_hash(); } else { window_error_open(3249, STR_NONE); @@ -502,9 +502,9 @@ static void window_editor_scenario_options_financial_mousedown(int widgetIndex, window_invalidate(w); break; case WIDX_INITIAL_LOAN_INCREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) < MONEY(5000000,00)) { - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) += MONEY(1000,00); - RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32) = max(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32), RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32)); + if (gBankLoan < MONEY(5000000,00)) { + gBankLoan += MONEY(1000,00); + RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32) = max(gBankLoan, RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32)); finance_update_loan_hash(); } else { window_error_open(3250, STR_NONE); @@ -512,9 +512,9 @@ static void window_editor_scenario_options_financial_mousedown(int widgetIndex, window_invalidate(w); break; case WIDX_INITIAL_LOAN_DECREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) > MONEY(0,00)) { - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) -= MONEY(1000,00); - RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32) = max(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32), RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32)); + if (gBankLoan > MONEY(0,00)) { + gBankLoan -= MONEY(1000,00); + RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32) = max(gBankLoan, RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32)); finance_update_loan_hash(); } else { window_error_open(3251, STR_NONE); @@ -524,7 +524,7 @@ static void window_editor_scenario_options_financial_mousedown(int widgetIndex, case WIDX_MAXIMUM_LOAN_INCREASE: if (RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32) < MONEY(5000000,00)) { RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32) += MONEY(1000,00); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) = min(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32), RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32)); + gBankLoan = min(gBankLoan, RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32)); finance_update_loan_hash(); } else { window_error_open(3252, STR_NONE); @@ -534,7 +534,7 @@ static void window_editor_scenario_options_financial_mousedown(int widgetIndex, case WIDX_MAXIMUM_LOAN_DECREASE: if (RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32) > MONEY(0,00)) { RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32) -= MONEY(1000,00); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) = min(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32), RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32)); + gBankLoan = min(gBankLoan, RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32)); finance_update_loan_hash(); } else { window_error_open(3253, STR_NONE); @@ -542,11 +542,11 @@ static void window_editor_scenario_options_financial_mousedown(int widgetIndex, window_invalidate(w); break; case WIDX_INTEREST_RATE_INCREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, money32) < 80) { - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, money32) < 0) { - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, money32) = 0; + if (gBankLoanInterestRate < 80) { + if (gBankLoanInterestRate < 0) { + gBankLoanInterestRate = 0; } else { - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, money32)++; + gBankLoanInterestRate++; } } else { window_error_open(3254, STR_NONE); @@ -554,11 +554,11 @@ static void window_editor_scenario_options_financial_mousedown(int widgetIndex, window_invalidate(w); break; case WIDX_INTEREST_RATE_DECREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, money32) > 0) { - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, money32) > 80) { - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, money32) = 80; + if (gBankLoanInterestRate > 0) { + if (gBankLoanInterestRate > 80) { + gBankLoanInterestRate = 80; } else { - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, money32)--; + gBankLoanInterestRate--; } } else { window_error_open(3255, STR_NONE); @@ -664,7 +664,7 @@ static void window_editor_scenario_options_financial_paint(rct_window *w, rct_dr x = w->x + w->widgets[WIDX_INITIAL_LOAN].left + 1; y = w->y + w->widgets[WIDX_INITIAL_LOAN].top; - gfx_draw_string_left(dpi, 3246, &RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32), 0, x, y); + gfx_draw_string_left(dpi, 3246, &gBankLoan, 0, x, y); } if (w->widgets[WIDX_MAXIMUM_LOAN].type != WWT_EMPTY) { @@ -685,7 +685,7 @@ static void window_editor_scenario_options_financial_paint(rct_window *w, rct_dr x = w->x + w->widgets[WIDX_INTEREST_RATE].left + 1; y = w->y + w->widgets[WIDX_INTEREST_RATE].top; - money16 interestRate = (money16)clamp(INT16_MIN, RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, money32), INT16_MAX); + money16 interestRate = (money16)clamp(INT16_MIN, gBankLoanInterestRate, INT16_MAX); gfx_draw_string_left(dpi, 3247, &interestRate, 0, x, y); } } @@ -737,64 +737,64 @@ static void window_editor_scenario_options_guests_mousedown(int widgetIndex, rct { switch (widgetIndex) { case WIDX_CASH_PER_GUEST_INCREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16) < MONEY(1000, 00)) { - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16) += MONEY(1, 00); + if (gGuestInitialCash < MONEY(1000, 00)) { + gGuestInitialCash += MONEY(1, 00); } else { window_error_open(3264, STR_NONE); } window_invalidate(w); break; case WIDX_CASH_PER_GUEST_DECREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16) > MONEY(0, 00)) { - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16) -= MONEY(1, 00); + if (gGuestInitialCash > MONEY(0, 00)) { + gGuestInitialCash -= MONEY(1, 00); } else { window_error_open(3265, STR_NONE); } window_invalidate(w); break; case WIDX_GUEST_INITIAL_HAPPINESS_INCREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HAPPINESS, uint8) < 250) { - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HAPPINESS, uint8) += 4; + if (gGuestInitialHappiness < 250) { + gGuestInitialHappiness += 4; } else { window_error_open(3264, STR_NONE); } window_invalidate(w); break; case WIDX_GUEST_INITIAL_HAPPINESS_DECREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HAPPINESS, uint8) > 40) { - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HAPPINESS, uint8) -= 4; + if (gGuestInitialHappiness > 40) { + gGuestInitialHappiness -= 4; } else { window_error_open(3265, STR_NONE); } window_invalidate(w); break; case WIDX_GUEST_INITIAL_HUNGER_INCREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HUNGER, uint8) > 40) { - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HUNGER, uint8) -= 4; + if (gGuestInitialHunger > 40) { + gGuestInitialHunger -= 4; } else { window_error_open(3264, STR_NONE); } window_invalidate(w); break; case WIDX_GUEST_INITIAL_HUNGER_DECREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HUNGER, uint8) < 250) { - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HUNGER, uint8) += 4; + if (gGuestInitialHunger < 250) { + gGuestInitialHunger += 4; } else { window_error_open(3265, STR_NONE); } window_invalidate(w); break; case WIDX_GUEST_INITIAL_THIRST_INCREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_THIRST, uint8) > 40) { - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_THIRST, uint8) -= 4; + if (gGuestInitialThirst > 40) { + gGuestInitialThirst -= 4; } else { window_error_open(3264, STR_NONE); } window_invalidate(w); break; case WIDX_GUEST_INITIAL_THIRST_DECREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_THIRST, uint8) < 250) { - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_THIRST, uint8) += 4; + if (gGuestInitialThirst < 250) { + gGuestInitialThirst += 4; } else { window_error_open(3265, STR_NONE); } @@ -881,7 +881,7 @@ static void window_editor_scenario_options_guests_paint(rct_window *w, rct_drawp // Cash per guest value x = w->x + w->widgets[WIDX_CASH_PER_GUEST].left + 1; y = w->y + w->widgets[WIDX_CASH_PER_GUEST].top; - arg = RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16); + arg = gGuestInitialCash; gfx_draw_string_left(dpi, 3246, &arg, 0, x, y); } @@ -893,7 +893,7 @@ static void window_editor_scenario_options_guests_paint(rct_window *w, rct_drawp // Guest initial happiness value x = w->x + w->widgets[WIDX_GUEST_INITIAL_HAPPINESS].left + 1; y = w->y + w->widgets[WIDX_GUEST_INITIAL_HAPPINESS].top; - arg = (RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HAPPINESS, uint8) * 100) / 255; + arg = (gGuestInitialHappiness * 100) / 255; gfx_draw_string_left(dpi, 3247, &arg, 0, x, y); // Guest initial hunger label @@ -904,7 +904,7 @@ static void window_editor_scenario_options_guests_paint(rct_window *w, rct_drawp // Guest initial hunger value x = w->x + w->widgets[WIDX_GUEST_INITIAL_HUNGER].left + 1; y = w->y + w->widgets[WIDX_GUEST_INITIAL_HUNGER].top; - arg = ((255 - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HUNGER, uint8)) * 100) / 255; + arg = ((255 - gGuestInitialHunger) * 100) / 255; gfx_draw_string_left(dpi, 3247, &arg, 0, x, y); // Guest initial thirst label @@ -915,7 +915,7 @@ static void window_editor_scenario_options_guests_paint(rct_window *w, rct_drawp // Guest initial thirst value x = w->x + w->widgets[WIDX_GUEST_INITIAL_THIRST].left + 1; y = w->y + w->widgets[WIDX_GUEST_INITIAL_THIRST].top; - arg = ((255 - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_THIRST, uint8)) * 100) / 255; + arg = ((255 - gGuestInitialThirst) * 100) / 255; gfx_draw_string_left(dpi, 3247, &arg, 0, x, y); } @@ -980,32 +980,32 @@ static void window_editor_scenario_options_park_mousedown(int widgetIndex, rct_w switch (widgetIndex) { case WIDX_LAND_COST_INCREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_LAND_COST, money16) < MONEY(200,00)) { - RCT2_GLOBAL(RCT2_ADDRESS_LAND_COST, money16) += MONEY(1,00); + if (gLandPrice < MONEY(200,00)) { + gLandPrice += MONEY(1,00); } else { window_error_open(3264, STR_NONE); } window_invalidate(w); break; case WIDX_LAND_COST_DECREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_LAND_COST, money16) > MONEY(5,00)) { - RCT2_GLOBAL(RCT2_ADDRESS_LAND_COST, money16) -= MONEY(1,00); + if (gLandPrice > MONEY(5,00)) { + gLandPrice -= MONEY(1,00); } else { window_error_open(3265, STR_NONE); } window_invalidate(w); break; case WIDX_CONSTRUCTION_RIGHTS_COST_INCREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_CONSTRUCTION_RIGHTS_COST, money16) < MONEY(200,00)) { - RCT2_GLOBAL(RCT2_ADDRESS_CONSTRUCTION_RIGHTS_COST, money16) += MONEY(1,00); + if (gConstructionRightsPrice < MONEY(200,00)) { + gConstructionRightsPrice += MONEY(1,00); } else { window_error_open(3264, STR_NONE); } window_invalidate(w); break; case WIDX_CONSTRUCTION_RIGHTS_COST_DECREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_CONSTRUCTION_RIGHTS_COST, money16) > MONEY(5,00)) { - RCT2_GLOBAL(RCT2_ADDRESS_CONSTRUCTION_RIGHTS_COST, money16) -= MONEY(1,00); + if (gConstructionRightsPrice > MONEY(5,00)) { + gConstructionRightsPrice -= MONEY(1,00); } else { window_error_open(3265, STR_NONE); } @@ -1191,7 +1191,7 @@ static void window_editor_scenario_options_park_paint(rct_window *w, rct_drawpix // Cost to buy land value x = w->x + w->widgets[WIDX_LAND_COST].left + 1; y = w->y + w->widgets[WIDX_LAND_COST].top; - arg = RCT2_GLOBAL(RCT2_ADDRESS_LAND_COST, money16); + arg = gLandPrice; gfx_draw_string_left(dpi, 3246, &arg, 0, x, y); } @@ -1204,7 +1204,7 @@ static void window_editor_scenario_options_park_paint(rct_window *w, rct_drawpix // Cost to buy construction rights value x = w->x + w->widgets[WIDX_CONSTRUCTION_RIGHTS_COST].left + 1; y = w->y + w->widgets[WIDX_CONSTRUCTION_RIGHTS_COST].top; - arg = RCT2_GLOBAL(RCT2_ADDRESS_CONSTRUCTION_RIGHTS_COST, money16); + arg = gConstructionRightsPrice; gfx_draw_string_left(dpi, 3246, &arg, 0, x, y); } diff --git a/src/windows/finances.c b/src/windows/finances.c index 12814bbf0b..85bbf0c753 100644 --- a/src/windows/finances.c +++ b/src/windows/finances.c @@ -600,13 +600,13 @@ static void window_finances_summary_mousedown(int widgetIndex, rct_window*w, rct switch (widgetIndex) { case WIDX_LOAN_INCREASE: - newLoan = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) + MONEY(1000, 00); + newLoan = gBankLoan + MONEY(1000, 00); gGameCommandErrorTitle = STR_CANT_BORROW_ANY_MORE_MONEY; finance_set_loan(newLoan); break; case WIDX_LOAN_DECREASE: - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) > 0) { - newLoan = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) - MONEY(1000, 00); + if (gBankLoan > 0) { + newLoan = gBankLoan - MONEY(1000, 00); gGameCommandErrorTitle = STR_CANT_PAY_BACK_LOAN; finance_set_loan(newLoan); } @@ -640,7 +640,7 @@ static void window_finances_summary_invalidate(rct_window *w) } window_finances_set_pressed_tab(w); - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, money32) = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, money32) = gBankLoan; } /** @@ -734,16 +734,16 @@ static void window_finances_summary_paint(rct_window *w, rct_drawpixelinfo *dpi) // Loan and interest rate gfx_draw_string_left(dpi, STR_FINANCES_SUMMARY_LOAN, NULL, 0, w->x + 4, w->y + 229); - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, uint8); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = gBankLoanInterestRate; gfx_draw_string_left(dpi, STR_FINANCES_SUMMARY_AT_X_PER_YEAR, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, w->x + 156, w->y + 229); // Current cash - money32 currentCash = DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32)); + money32 currentCash = DECRYPT_MONEY(gCashEncrypted); rct_string_id stringId = currentCash >= 0 ? STR_CASH_LABEL : STR_CASH_NEGATIVE_LABEL; gfx_draw_string_left(dpi, stringId, ¤tCash, 0, w->x + 4, w->y + 244); // Objective related financial information - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) == OBJECTIVE_MONTHLY_FOOD_INCOME) { + if (gScenarioObjectiveType == OBJECTIVE_MONTHLY_FOOD_INCOME) { // Last month's profit from food, drink and merchandise money32 lastMonthProfit = 0; if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint16) != 0) { @@ -756,8 +756,8 @@ static void window_finances_summary_paint(rct_window *w, rct_drawpixelinfo *dpi) gfx_draw_string_left(dpi, STR_LAST_MONTH_PROFIT_FROM_FOOD_DRINK_MERCHANDISE_SALES_LABEL, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, w->x + 280, w->y + 229); } else { // Park value and company value - gfx_draw_string_left(dpi, STR_PARK_VALUE_LABEL, (void*)RCT2_ADDRESS_CURRENT_PARK_VALUE, 0, w->x + 280, w->y + 229); - gfx_draw_string_left(dpi, STR_COMPANY_VALUE_LABEL, (void*)RCT2_ADDRESS_CURRENT_COMPANY_VALUE, 0, w->x + 280, w->y + 244); + gfx_draw_string_left(dpi, STR_PARK_VALUE_LABEL, &gParkValue, 0, w->x + 280, w->y + 229); + gfx_draw_string_left(dpi, STR_COMPANY_VALUE_LABEL, &gCompanyValue, 0, w->x + 280, w->y + 244); } } @@ -824,8 +824,8 @@ static void window_finances_financial_graph_paint(rct_window *w, rct_drawpixelin // Cash (less loan) money32 cashLessLoan = - DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32)) - - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32); + DECRYPT_MONEY(gCashEncrypted) - + gBankLoan; gfx_draw_string_left( dpi, @@ -933,7 +933,7 @@ static void window_finances_park_value_graph_paint(rct_window *w, rct_drawpixeli graphBottom = w->y + pageWidget->bottom - 4; // Park value - money32 parkValue = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, money32); + money32 parkValue = gParkValue; gfx_draw_string_left( dpi, STR_FINACNES_PARK_VALUE, @@ -1183,8 +1183,8 @@ static void window_finances_marketing_paint(rct_window *w, rct_drawpixelinfo *dp continue; noCampaignsActive = 0; - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id); - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = gParkName; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = gParkNameArgs; // Set special parameters switch (i) { diff --git a/src/windows/game_bottom_toolbar.c b/src/windows/game_bottom_toolbar.c index d101b71228..af38fe2a85 100644 --- a/src/windows/game_bottom_toolbar.c +++ b/src/windows/game_bottom_toolbar.c @@ -20,12 +20,14 @@ #include "../addresses.h" #include "../config.h" +#include "../game.h" #include "../input.h" #include "../interface/themes.h" #include "../interface/widget.h" #include "../interface/window.h" #include "../localisation/date.h" #include "../localisation/localisation.h" +#include "../management/finance.h" #include "../management/news_item.h" #include "../peep/peep.h" #include "../peep/staff.h" @@ -220,10 +222,10 @@ static void window_game_bottom_toolbar_tooltip(rct_window* w, int widgetIndex, r switch (widgetIndex) { case WIDX_MONEY: RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, int) = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PROFIT, sint32); - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, int) = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, sint32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, int) = gParkValue; break; case WIDX_PARK_RATING: - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, short) = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, sint16); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, short) = gParkRating; break; case WIDX_DATE: month = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, sint16) & 7; @@ -380,7 +382,7 @@ static void window_game_bottom_toolbar_draw_left_panel(rct_drawpixelinfo *dpi, r // Draw money if (!(gParkFlags & PARK_FLAGS_NO_MONEY)) { - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, int) = DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32)); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, int) = DECRYPT_MONEY(gCashEncrypted); gfx_draw_string_centred( dpi, (RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, int) < 0 ? 1391 : 1390), @@ -394,7 +396,7 @@ static void window_game_bottom_toolbar_draw_left_panel(rct_drawpixelinfo *dpi, r // Draw guests gfx_draw_string_centred( dpi, - STR_NUM_GUESTS + RCT2_GLOBAL(RCT2_ADDRESS_GUEST_CHANGE_MODIFIER, uint8), + STR_NUM_GUESTS + gGuestChangeModifier, x, y, (gHoverWidget.window_classification == WC_BOTTOM_TOOLBAR && gHoverWidget.widget_index == WIDX_GUESTS ? COLOUR_WHITE : w->colours[0] & 0x7F), &gNumGuestsInPark @@ -407,7 +409,7 @@ static void window_game_bottom_toolbar_draw_left_panel(rct_drawpixelinfo *dpi, r w->colours[3], w->x + window_game_bottom_toolbar_widgets[WIDX_PARK_RATING].left + 11, w->y + window_game_bottom_toolbar_widgets[WIDX_PARK_RATING].top, - max(10, ((RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, sint16) / 4) * 263) / 256) + max(10, ((gParkRating / 4) * 263) / 256) ); } @@ -421,7 +423,7 @@ static void window_game_bottom_toolbar_draw_park_rating(rct_drawpixelinfo *dpi, bar_width = (factor * (90 + WIDTH_MOD)) / 256; gfx_fill_rect_inset(dpi, x, y + 1, x + (93 + WIDTH_MOD), y + 9, w->colours[1], 48); - if (!(colour & 0x80000000) || RCT2_GLOBAL(RCT2_ADDRESS_GAME_PAUSED, uint8) != 0 || (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 8)) { + if (!(colour & 0x80000000) || RCT2_GLOBAL(RCT2_ADDRESS_GAME_PAUSED, uint8) != 0 || (gCurrentTicks & 8)) { if (bar_width > 2) gfx_fill_rect_inset(dpi, x + 2, y + 2, x + bar_width - 1, y + 8, colour & 0x7FFFFFFF, 0); } diff --git a/src/windows/guest.c b/src/windows/guest.c index eed0d725a0..606caca1dc 100644 --- a/src/windows/guest.c +++ b/src/windows/guest.c @@ -1404,7 +1404,7 @@ void window_guest_stats_bars_paint(int value, int x, int y, rct_window *w, rct_d colour &= ~(1 << 0x1F); if (!blink_flag || RCT2_GLOBAL(RCT2_ADDRESS_GAME_PAUSED, uint8) != 0 || - (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 8) == 0) + (gCurrentTicks & 8) == 0) { if (value <= 2) return; @@ -2096,8 +2096,8 @@ static rct_string_id window_guest_inventory_format_item(rct_peep *peep, int item // Default arguments RCT2_GLOBAL(args + 0, uint32) = ShopItemImage[item]; RCT2_GLOBAL(args + 4, uint16) = ShopItemStringIds[item].display; - RCT2_GLOBAL(args + 6, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, uint16); - RCT2_GLOBAL(args + 8, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); + RCT2_GLOBAL(args + 6, uint16) = gParkName; + RCT2_GLOBAL(args + 8, uint32) = gParkNameArgs; // Special overrides switch (item) { @@ -2116,8 +2116,8 @@ static rct_string_id window_guest_inventory_format_item(rct_peep *peep, int item switch (peep->voucher_type) { case VOUCHER_TYPE_PARK_ENTRY_FREE: RCT2_GLOBAL(args + 6, uint16) = 2418; - RCT2_GLOBAL(args + 8, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, uint16); - RCT2_GLOBAL(args + 10, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); + RCT2_GLOBAL(args + 8, uint16) = gParkName; + RCT2_GLOBAL(args + 10, uint32) = gParkNameArgs; break; case VOUCHER_TYPE_RIDE_FREE: ride = get_ride(peep->voucher_arguments); @@ -2127,8 +2127,8 @@ static rct_string_id window_guest_inventory_format_item(rct_peep *peep, int item break; case VOUCHER_TYPE_PARK_ENTRY_HALF_PRICE: RCT2_GLOBAL(args + 6, uint16) = 2420; - RCT2_GLOBAL(args + 8, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, uint16); - RCT2_GLOBAL(args + 10, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); + RCT2_GLOBAL(args + 8, uint16) = gParkName; + RCT2_GLOBAL(args + 10, uint32) = gParkNameArgs; break; case VOUCHER_TYPE_FOOD_OR_DRINK_FREE: RCT2_GLOBAL(args + 6, uint16) = 2421; diff --git a/src/windows/park.c b/src/windows/park.c index 403dad18bf..191dafa801 100644 --- a/src/windows/park.c +++ b/src/windows/park.c @@ -576,8 +576,8 @@ static void window_park_set_disabled_tabs(rct_window *w) static void window_park_prepare_window_title_text() { - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id); - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = gParkName; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = gParkNameArgs; } #pragma region Entrance page @@ -646,8 +646,8 @@ static void window_park_entrance_mouseup(rct_window *w, int widgetIndex) window_scroll_to_viewport(w); break; case WIDX_RENAME: - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 16, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); - window_text_input_open(w, WIDX_RENAME, STR_PARK_NAME, STR_ENTER_PARK_NAME, RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id), 0, 32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 16, uint32) = gParkNameArgs; + window_text_input_open(w, WIDX_RENAME, STR_PARK_NAME, STR_ENTER_PARK_NAME, gParkName, 0, 32); break; case WIDX_CLOSE_LIGHT: park_set_open(0); @@ -949,15 +949,15 @@ static void window_park_entrance_invalidate(rct_window *w) window_park_set_pressed_tab(w); // Set open / close park button state - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id); - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = gParkName; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = gParkNameArgs; window_park_entrance_widgets[WIDX_OPEN_OR_CLOSE].image = park_is_open() ? SPR_OPEN : SPR_CLOSED; window_park_entrance_widgets[WIDX_CLOSE_LIGHT].image = SPR_G2_RCT1_CLOSE_BUTTON_0 + !park_is_open() * 2 + widget_is_pressed(w, WIDX_CLOSE_LIGHT); window_park_entrance_widgets[WIDX_OPEN_LIGHT].image = SPR_G2_RCT1_OPEN_BUTTON_0 + park_is_open() * 2 + widget_is_pressed(w, WIDX_OPEN_LIGHT); // Only allow closing of park for guest / rating objective // Only allow closing of park when there is money - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) == OBJECTIVE_GUESTS_AND_RATING || + if (gScenarioObjectiveType == OBJECTIVE_GUESTS_AND_RATING || (gParkFlags & PARK_FLAGS_NO_MONEY)) w->disabled_widgets |= (1 << WIDX_OPEN_OR_CLOSE) | (1 << WIDX_CLOSE_LIGHT) | (1 << WIDX_OPEN_LIGHT); else @@ -981,7 +981,7 @@ static void window_park_entrance_invalidate(rct_window *w) if (theme_get_flags() & UITHEME_FLAG_USE_LIGHTS_PARK) { window_park_entrance_widgets[WIDX_OPEN_OR_CLOSE].type = WWT_EMPTY; - if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) == OBJECTIVE_GUESTS_AND_RATING) { + if (gScenarioObjectiveType == OBJECTIVE_GUESTS_AND_RATING) { window_park_entrance_widgets[WIDX_CLOSE_LIGHT].type = WWT_FLATBTN; window_park_entrance_widgets[WIDX_OPEN_LIGHT].type = WWT_FLATBTN; } @@ -1242,7 +1242,7 @@ static void window_park_rating_paint(rct_window *w, rct_drawpixelinfo *dpi) widget = &window_park_rating_widgets[WIDX_PAGE_BACKGROUND]; // Current value - gfx_draw_string_left(dpi, STR_PARK_RATING_LABEL, (void*)RCT2_ADDRESS_CURRENT_PARK_RATING, 0, x + widget->left + 3, y + widget->top + 2); + gfx_draw_string_left(dpi, STR_PARK_RATING_LABEL, &gParkRating, 0, x + widget->left + 3, y + widget->top + 2); // Graph border gfx_fill_rect_inset(dpi, x + widget->left + 4, y + widget->top + 15, x + widget->right - 4, y + widget->bottom - 4, w->colours[1], 0x30); @@ -1757,11 +1757,11 @@ static void window_park_objective_paint(rct_window *w, rct_drawpixelinfo *dpi) y += 10; // Objective - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, short) = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16); - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, short) = date_get_total_months(MONTH_OCTOBER, RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8)); - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, int) = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, sint32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, short) = gScenarioObjectiveNumGuests; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, short) = date_get_total_months(MONTH_OCTOBER, gScenarioObjectiveYear); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, int) = gScenarioObjectiveCurrency; - y += gfx_draw_string_left_wrapped(dpi, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, x, y, 221, 2385 + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8), 0); + y += gfx_draw_string_left_wrapped(dpi, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, x, y, 221, 2385 + gScenarioObjectiveType, 0); y += 5; // Objective outcome diff --git a/src/windows/ride.c b/src/windows/ride.c index 6a64669892..8d5fbdb1b2 100644 --- a/src/windows/ride.c +++ b/src/windows/ride.c @@ -3360,7 +3360,7 @@ static void window_ride_maintenance_draw_bar(rct_window *w, rct_drawpixelinfo *d gfx_fill_rect_inset(dpi, x, y, x + 149, y + 8, w->colours[1], 0x30); if (unk & (1u << 31)) { unk &= ~(1u << 31); - if (RCT2_GLOBAL(RCT2_ADDRESS_GAME_PAUSED, uint8) == 0 && (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 8)) + if (RCT2_GLOBAL(RCT2_ADDRESS_GAME_PAUSED, uint8) == 0 && (gCurrentTicks & 8)) return; } diff --git a/src/world/climate.c b/src/world/climate.c index fd62f11735..2cd0ed2baa 100644 --- a/src/world/climate.c +++ b/src/world/climate.c @@ -150,7 +150,7 @@ void climate_update() RCT2_GLOBAL(RCT2_ADDRESS_CLIMATE_UPDATE_TIMER, sint16)--; - } else if (!(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 0x7F)) { + } else if (!(gCurrentTicks & 0x7F)) { if (temperature == target_temperature) { if (cur_gloom == next_gloom) { diff --git a/src/world/duck.c b/src/world/duck.c index 6218339b59..8bfc2d9acd 100644 --- a/src/world/duck.c +++ b/src/world/duck.c @@ -1,5 +1,6 @@ #include "../addresses.h" #include "../audio/audio.h" +#include "../game.h" #include "../localisation/date.h" #include "../scenario.h" #include "sprite.h" @@ -113,7 +114,7 @@ static void duck_invalidate(rct_duck *duck) */ static void duck_update_fly_to_water(rct_duck *duck) { - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 3) + if (gCurrentTicks & 3) return; duck->var_26++; @@ -167,7 +168,7 @@ static void duck_update_fly_to_water(rct_duck *duck) */ static void duck_update_swim(rct_duck *duck) { - if ((RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) + duck->sprite_index) & 3) + if ((gCurrentTicks + duck->sprite_index) & 3) return; uint32 randomNumber = scenario_rand(); @@ -261,7 +262,7 @@ static void duck_update_double_drink(rct_duck *duck) */ static void duck_update_fly_away(rct_duck *duck) { - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 3) + if (gCurrentTicks & 3) return; duck->var_26++; diff --git a/src/world/fountain.c b/src/world/fountain.c index f7ea3e78d8..6317acf8a5 100644 --- a/src/world/fountain.c +++ b/src/world/fountain.c @@ -19,6 +19,7 @@ *****************************************************************************/ #include "../addresses.h" +#include "../game.h" #include "../scenario.h" #include "fountain.h" #include "map.h" @@ -106,7 +107,7 @@ void jumping_fountain_begin(int type, int x, int y, rct_map_element *mapElement) int z = mapElement->base_height * 8; // Change pattern approximately every 51 seconds - int pattern = (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) >> 11) & 7; + int pattern = (gCurrentTicks >> 11) & 7; switch (pattern) { case PATTERN_CYCLIC_SQUARES: // 0, 1, 2, 3 diff --git a/src/world/map_animation.c b/src/world/map_animation.c index f930c0cd26..486a100ec7 100644 --- a/src/world/map_animation.c +++ b/src/world/map_animation.c @@ -19,6 +19,7 @@ *****************************************************************************/ #include "../addresses.h" +#include "../game.h" #include "../ride/ride.h" #include "../ride/ride_data.h" #include "../ride/track.h" @@ -194,7 +195,7 @@ static bool map_animation_invalidate_small_scenery(int x, int y, int baseZ) if (sceneryEntry->small_scenery.flags & SMALL_SCENERY_FLAG_IS_CLOCK) { // Peep, looking at scenery - if (!(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 0x3FF) && RCT2_GLOBAL(RCT2_ADDRESS_GAME_PAUSED, uint8) == 0) { + if (!(gCurrentTicks & 0x3FF) && RCT2_GLOBAL(RCT2_ADDRESS_GAME_PAUSED, uint8) == 0) { int direction = mapElement->type & 3; int x2 = x - TileDirectionDelta[direction].x; int y2 = y - TileDirectionDelta[direction].y; @@ -458,7 +459,7 @@ static bool map_animation_invalidate_wall_door(int x, int y, int baseZ) rct_map_element *mapElement; rct_scenery_entry *sceneryEntry; - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 1) + if (gCurrentTicks & 1) return false; bool wasInvalidated = false; diff --git a/src/world/park.c b/src/world/park.c index 51b8d27603..a2d87dbdca 100644 --- a/src/world/park.c +++ b/src/world/park.c @@ -76,15 +76,15 @@ void park_init() int i; RCT2_GLOBAL(0x013CA740, uint8) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, uint16) = 777; + gParkName = 777; RCT2_GLOBAL(RCT2_ADDRESS_HANDYMAN_COLOUR, uint8) = COLOUR_BRIGHT_RED; RCT2_GLOBAL(RCT2_ADDRESS_MECHANIC_COLOUR, uint8) = COLOUR_LIGHT_BLUE; RCT2_GLOBAL(RCT2_ADDRESS_SECURITY_COLOUR, uint8) = COLOUR_YELLOW; gNumGuestsInPark = 0; - RCT2_GLOBAL(RCT2_ADDRESS_LAST_GUESTS_IN_PARK, uint16) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_HEADING_FOR_PARK, uint16) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_CHANGE_MODIFIER, uint16) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, uint16) = 0; + gNumGuestsInParkLastWeek = 0; + gNumGuestsHeadingForPark = 0; + gGuestChangeModifier = 0; + gParkRating = 0; _guestGenerationProbability = 0; RCT2_GLOBAL(RCT2_TOTAL_RIDE_VALUE, uint16) = 0; RCT2_GLOBAL(RCT2_ADDRESS_LAST_RESEARCHED_ITEM_SUBJECT, sint32) = -1; @@ -107,15 +107,15 @@ void park_init() RCT2_GLOBAL(RCT2_ADDRESS_ACTIVE_RESEARCH_TYPES, uint16) = 127; RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8) = 2; - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, uint16) = MONEY(50,00); // Cash per guest (average) - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HAPPINESS, uint8) = calculate_guest_initial_happiness(50); // 50% - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_HUNGER, uint8) = 200; - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_THIRST, uint8) = 200; - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) = 1; - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8) = 4; - RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) = 1000; - RCT2_GLOBAL(RCT2_ADDRESS_LAND_COST, uint16) = MONEY(90, 00); - RCT2_GLOBAL(RCT2_ADDRESS_CONSTRUCTION_RIGHTS_COST, uint16) = MONEY(40,00); + gGuestInitialCash = MONEY(50,00); // Cash per guest (average) + gGuestInitialHappiness = calculate_guest_initial_happiness(50); // 50% + gGuestInitialHunger = 200; + gGuestInitialThirst = 200; + gScenarioObjectiveType = OBJECTIVE_GUESTS_BY; + gScenarioObjectiveYear = 4; + gScenarioObjectiveNumGuests = 1000; + gLandPrice = MONEY(90, 00); + gConstructionRightsPrice = MONEY(40,00); RCT2_GLOBAL(0x01358774, uint16) = 0; gParkFlags = PARK_FLAGS_NO_MONEY | PARK_FLAGS_SHOW_REAL_GUEST_NAMES; park_reset_history(); @@ -327,9 +327,9 @@ money32 calculate_park_value() money32 calculate_company_value() { return - DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32)) + - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, money32) - - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32); + DECRYPT_MONEY(gCashEncrypted) + + gParkValue - + gBankLoan; } /** @@ -338,7 +338,7 @@ money32 calculate_company_value() */ void reset_park_entrances() { - RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id) = 0; + gParkName = 0; for (short i = 0; i < 4; i++) { RCT2_ADDRESS(RCT2_ADDRESS_PARK_ENTRANCE_X, uint16)[i] = 0x8000; @@ -413,10 +413,10 @@ static int park_calculate_guest_generation_probability() _suggestedGuestMaximum = suggestedMaxGuests; // Begin with 50 + park rating - probability = 50 + clamp(0, RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, uint16) - 200, 650); + probability = 50 + clamp(0, gParkRating - 200, 650); // The more guests, the lower the chance of a new one - int numGuests = gNumGuestsInPark + RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_HEADING_FOR_PARK, uint16); + int numGuests = gNumGuestsInPark + gNumGuestsHeadingForPark; if (numGuests > suggestedMaxGuests) { probability /= 4; @@ -539,10 +539,10 @@ void park_update() return; // Every 5 seconds approximately - if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) % 512 == 0) { - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, uint16) = calculate_park_rating(); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, money32) = calculate_park_value(); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_COMPANY_VALUE, money32) = calculate_company_value(); + if (gCurrentTicks % 512 == 0) { + gParkRating = calculate_park_rating(); + gParkValue = calculate_park_value(); + gCompanyValue = calculate_company_value(); window_invalidate_by_class(WC_FINANCES); _guestGenerationProbability = park_calculate_guest_generation_probability(); RCT2_GLOBAL(RCT2_ADDRESS_BTM_TOOLBAR_DIRTY_FLAGS, uint16) |= BTM_TB_DIRTY_FLAG_PARK_RATING; @@ -584,8 +584,8 @@ uint8 calculate_guest_initial_happiness(uint8 percentage) { void park_update_histories() { int guestsInPark = gNumGuestsInPark; - int lastGuestsInPark = RCT2_GLOBAL(RCT2_ADDRESS_LAST_GUESTS_IN_PARK, uint16); - RCT2_GLOBAL(RCT2_ADDRESS_LAST_GUESTS_IN_PARK, uint16) = guestsInPark; + int lastGuestsInPark = gNumGuestsInParkLastWeek; + gNumGuestsInParkLastWeek = guestsInPark; RCT2_GLOBAL(RCT2_ADDRESS_BTM_TOOLBAR_DIRTY_FLAGS, uint16) |= 4; int changeInGuestsInPark = guestsInPark - lastGuestsInPark; @@ -595,7 +595,7 @@ void park_update_histories() if (changeInGuestsInPark < 20) guestChangeModifier = 0; } - RCT2_GLOBAL(RCT2_ADDRESS_GUEST_CHANGE_MODIFIER, uint8) = guestChangeModifier; + gGuestChangeModifier = guestChangeModifier; // Update park rating history for (int i = 31; i > 0; i--) @@ -612,7 +612,7 @@ void park_update_histories() // Update current cash history for (int i = 127; i > 0; i--) gCashHistory[i] = gCashHistory[i - 1]; - gCashHistory[0] = DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32)) - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32); + gCashHistory[0] = DECRYPT_MONEY(gCashEncrypted) - gBankLoan; window_invalidate_by_class(WC_FINANCES); // Update weekly profit history @@ -631,7 +631,7 @@ void park_update_histories() // Update park value history for (int i = 127; i > 0; i--) gParkValueHistory[i] = gParkValueHistory[i - 1]; - gParkValueHistory[0] = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, money32); + gParkValueHistory[0] = gParkValue; } void park_set_entrance_fee(money32 value) @@ -899,7 +899,7 @@ void game_command_set_park_name(int *eax, int *ebx, int *ecx, int *edx, int *esi return; } - format_string(oldName, RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id), &RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32)); + format_string(oldName, gParkName, &gParkNameArgs); if (strcmp(oldName, newName) == 0) { *ebx = 0; return; @@ -920,8 +920,8 @@ void game_command_set_park_name(int *eax, int *ebx, int *ecx, int *edx, int *esi if (*ebx & GAME_COMMAND_FLAG_APPLY) { // Free the old ride name - user_string_free(RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id)); - RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id) = newUserStringId; + user_string_free(gParkName); + gParkName = newUserStringId; gfx_invalidate_screen(); } else { @@ -954,7 +954,7 @@ money32 map_buy_land_rights_for_tile(int x, int y, int setting, int flags) { update_park_fences(x, y + 32); update_park_fences(x, y - 32); } - return RCT2_GLOBAL(RCT2_ADDRESS_LAND_COST, uint16); + return gLandPrice; case 1: if (flags & GAME_COMMAND_FLAG_APPLY) { surfaceElement->properties.surface.ownership &= ~(OWNERSHIP_OWNED | OWNERSHIP_CONSTRUCTION_RIGHTS_OWNED); @@ -980,7 +980,7 @@ money32 map_buy_land_rights_for_tile(int x, int y, int setting, int flags) { uint16 baseHeight = surfaceElement->base_height * 8; map_invalidate_tile(x, y, baseHeight, baseHeight + 16); } - return RCT2_GLOBAL(RCT2_ADDRESS_CONSTRUCTION_RIGHTS_COST, uint16); + return gConstructionRightsPrice; case 3: if (flags & GAME_COMMAND_FLAG_APPLY) { surfaceElement->properties.surface.ownership &= ~OWNERSHIP_CONSTRUCTION_RIGHTS_OWNED; @@ -1030,7 +1030,7 @@ money32 map_buy_land_rights_for_tile(int x, int y, int setting, int flags) { } if (!(flags & GAME_COMMAND_FLAG_APPLY)) { - return RCT2_GLOBAL(RCT2_ADDRESS_LAND_COST, uint16); + return gLandPrice; } if ((newOwnership & 0xF0) != 0) { @@ -1111,7 +1111,7 @@ void game_command_buy_land_rights(int *eax, int *ebx, int *ecx, int *edx, int *e void set_forced_park_rating(int rating){ gForcedParkRating = rating; - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, uint16) = calculate_park_rating(); + gParkRating = calculate_park_rating(); RCT2_GLOBAL(RCT2_ADDRESS_BTM_TOOLBAR_DIRTY_FLAGS, uint16) |= BTM_TB_DIRTY_FLAG_PARK_RATING; window_invalidate_by_class(WC_PARK_INFORMATION); } diff --git a/src/world/park.h b/src/world/park.h index 7b477f3cad..224567fb0c 100644 --- a/src/world/park.h +++ b/src/world/park.h @@ -48,10 +48,18 @@ enum { PARK_FLAGS_SIX_FLAGS_DEPRECATED = (1 << 19) // Not used anymore }; +#define gParkName RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id) +#define gParkNameArgs RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32) #define gParkFlags RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) #define gParkSize RCT2_GLOBAL(RCT2_ADDRESS_PARK_SIZE, uint16) +#define gParkRating RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, uint16) #define gParkEntranceFee RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, money16) -#define gNumGuestsInPark RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_IN_PARK, uint16) + +#define gParkValue RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, money32) +#define gCompanyValue RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_COMPANY_VALUE, money32) + +#define gLandPrice RCT2_GLOBAL(RCT2_ADDRESS_LAND_COST, money16) +#define gConstructionRightsPrice RCT2_GLOBAL(RCT2_ADDRESS_CONSTRUCTION_RIGHTS_COST, money16) extern uint8 *gParkRatingHistory; extern uint8 *gGuestsInParkHistory;