From 83acafe05ae9825505668aa505b2af0b4ffc0e64 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 25 Apr 2016 23:26:26 +0100 Subject: [PATCH] add global macros for research variables --- src/management/finance.c | 4 +-- src/management/research.c | 59 +++++++++++++++++++-------------------- src/management/research.h | 9 ++++++ src/rct1/S4Importer.cpp | 18 ++++++------ src/windows/finances.c | 10 +++---- src/windows/research.c | 30 ++++++++++---------- src/world/park.c | 13 +++++++-- 7 files changed, 78 insertions(+), 65 deletions(-) diff --git a/src/management/finance.c b/src/management/finance.c index a2736f0805..152a7d5feb 100644 --- a/src/management/finance.c +++ b/src/management/finance.c @@ -102,7 +102,7 @@ void finance_pay_research() if (gParkFlags & PARK_FLAGS_NO_MONEY) return; - level = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8); + level = gResearchFundingLevel; finance_payment(research_cost_table[level] / 4, RCT_EXPENDITURE_TYPE_RESEARCH); } @@ -221,7 +221,7 @@ void finance_update_daily_profit() } // Research costs - uint8 level = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8); + uint8 level = gResearchFundingLevel; current_profit -= research_cost_table[level]; // Loan costs diff --git a/src/management/research.c b/src/management/research.c index 1031893f8f..257f57e9a9 100644 --- a/src/management/research.c +++ b/src/management/research.c @@ -76,29 +76,27 @@ void research_update_uncompleted_types() */ static void research_calculate_expected_date() { - int progress = RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS, uint16); - int progressStage = RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8); - int researchLevel = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8); - int currentDay = gDateMonthTicks; - int currentMonth = gDateMonthsElapsed; + int progress = gResearchProgress; + int progressStage = gResearchProgressStage; + int researchLevel = gResearchFundingLevel; int expectedDay, expectedMonth, dayQuotient, dayRemainder, progressRemaining, daysRemaining; if (progressStage == RESEARCH_STAGE_INITIAL_RESEARCH || researchLevel == RESEARCH_FUNDING_NONE) { - RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_EXPECTED_DAY, uint8) = 255; + gResearchExpectedDay = 255; } else { progressRemaining = progressStage == RESEARCH_STAGE_COMPLETING_DESIGN ? 0x10000 : 0x20000; progressRemaining -= progress; daysRemaining = (progressRemaining / _researchRate[researchLevel]) * 128; - expectedDay = currentDay + (daysRemaining & 0xFFFF); + expectedDay = gDateMonthTicks + (daysRemaining & 0xFFFF); dayQuotient = expectedDay / 0x10000; dayRemainder = expectedDay % 0x10000; - expectedMonth = date_get_month(currentMonth + dayQuotient + (daysRemaining >> 16)); + expectedMonth = date_get_month(gDateMonthsElapsed + dayQuotient + (daysRemaining >> 16)); expectedDay = (dayRemainder * days_in_month[expectedMonth]) >> 16; - RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_EXPECTED_DAY, uint8) = expectedDay; - RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_EXPECTED_MONTH, uint8) = expectedMonth; + gResearchExpectedDay = expectedDay; + gResearchExpectedMonth = expectedMonth; } } @@ -116,7 +114,6 @@ static void research_next_design() { rct_research_item *firstUnresearchedItem, *researchItem, tmp; int ignoreActiveResearchTypes; - int activeResearchTypes = RCT2_GLOBAL(RCT2_ADDRESS_ACTIVE_RESEARCH_TYPES, uint16); // Skip already researched items firstUnresearchedItem = gResearchItems; @@ -133,22 +130,22 @@ static void research_next_design() researchItem = firstUnresearchedItem; continue; } else { - RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS, uint16) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8) = RESEARCH_STAGE_FINISHED_ALL; + gResearchProgress = 0; + gResearchProgressStage = RESEARCH_STAGE_FINISHED_ALL; research_invalidate_related_windows(); // Reset funding to 0 if no more rides. research_set_funding(0); return; } - } else if (ignoreActiveResearchTypes || (activeResearchTypes & (1 << researchItem->category))) { + } else if (ignoreActiveResearchTypes || (gResearchPriorities & (1 << researchItem->category))) { break; } } - RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_ITEM, uint32) = researchItem->entryIndex; - RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_CATEGORY, uint8) = researchItem->category; - RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS, uint16) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8) = RESEARCH_STAGE_DESIGNING; + gResearchNextItem = researchItem->entryIndex; + gResearchNextCategory = researchItem->category; + gResearchProgress = 0; + gResearchProgressStage = RESEARCH_STAGE_DESIGNING; // Bubble research item up until it is above the researched items separator do { @@ -250,28 +247,28 @@ void research_update() if (RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_TICKS, uint32) % 32 != 0) return; - researchLevel = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8); + researchLevel = gResearchFundingLevel; - currentResearchProgress = RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS, uint16); + currentResearchProgress = gResearchProgress; currentResearchProgress += _researchRate[researchLevel]; if (currentResearchProgress <= 0xFFFF) { - RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS, uint16) = currentResearchProgress; + gResearchProgress = currentResearchProgress; } else { - switch (RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8)) { + switch (gResearchProgressStage) { case RESEARCH_STAGE_INITIAL_RESEARCH: research_next_design(); research_calculate_expected_date(); break; case RESEARCH_STAGE_DESIGNING: - RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS, uint16) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8) = RESEARCH_STAGE_COMPLETING_DESIGN; + gResearchProgress = 0; + gResearchProgressStage = RESEARCH_STAGE_COMPLETING_DESIGN; research_calculate_expected_date(); research_invalidate_related_windows(); break; case RESEARCH_STAGE_COMPLETING_DESIGN: - research_finish_item(RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_ITEM, sint32)); - RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS, uint16) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8) = 0; + research_finish_item((sint32)gResearchNextItem); + gResearchProgress = 0; + gResearchProgressStage = 0; research_calculate_expected_date(); research_update_uncompleted_types(); research_invalidate_related_windows(); @@ -338,8 +335,8 @@ void sub_684AC3(){ } RCT2_GLOBAL(RCT2_ADDRESS_LAST_RESEARCHED_ITEM_SUBJECT, sint32) = -1; - RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8) = 0; - RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS, uint16) = 0; + gResearchProgressStage = 0; + gResearchProgress = 0; } /** @@ -565,10 +562,10 @@ void game_command_set_research_funding(int* eax, int* ebx, int* ecx, int* edx, i log_warning("Invalid research rate %d", fundingAmount); return; } - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8) = fundingAmount; + gResearchFundingLevel = fundingAmount; } else - RCT2_GLOBAL(RCT2_ADDRESS_ACTIVE_RESEARCH_TYPES, uint8) = activeCategories; + gResearchPriorities = activeCategories; window_invalidate_by_class(WC_FINANCES); window_invalidate_by_class(WC_RESEARCH); diff --git a/src/management/research.h b/src/management/research.h index 737efea96c..51045adf4e 100644 --- a/src/management/research.h +++ b/src/management/research.h @@ -66,6 +66,15 @@ enum { RESEARCH_CATEGORY_SCENERYSET }; +#define gResearchFundingLevel RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8) +#define gResearchPriorities RCT2_GLOBAL(RCT2_ADDRESS_ACTIVE_RESEARCH_TYPES, uint8) +#define gResearchProgress RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS, uint16) +#define gResearchProgressStage RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8) +#define gResearchExpectedMonth RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_EXPECTED_MONTH, uint8) +#define gResearchExpectedDay RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_EXPECTED_DAY, uint8) +#define gResearchNextCategory RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_CATEGORY, uint8) +#define gResearchNextItem RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_ITEM, uint32) + extern rct_research_item *gResearchItems; extern uint8 gResearchUncompletedCategories; extern bool gSilentResearch; diff --git a/src/rct1/S4Importer.cpp b/src/rct1/S4Importer.cpp index 9297e87465..4b36878ada 100644 --- a/src/rct1/S4Importer.cpp +++ b/src/rct1/S4Importer.cpp @@ -856,7 +856,7 @@ void S4Importer::ImportResearch() research_remove_non_separate_vehicle_types(); // Research funding / priority - uint16 activeResearchTypes = 0; + uint8 activeResearchTypes = 0; if (_s4.research_priority & RCT1_RESEARCH_EXPENDITURE_ROLLERCOASTERS) { activeResearchTypes |= (1 << RESEARCH_CATEGORY_ROLLERCOASTER); @@ -879,16 +879,16 @@ void S4Importer::ImportResearch() { activeResearchTypes |= (1 << RESEARCH_CATEGORY_SCENERYSET); } - RCT2_GLOBAL(RCT2_ADDRESS_ACTIVE_RESEARCH_TYPES, uint16) = activeResearchTypes; - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8) = _s4.research_level; + gResearchPriorities = activeResearchTypes; + gResearchFundingLevel = _s4.research_level; // Research history - RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS, uint8) = _s4.research_progress; - // RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8) = - RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_ITEM, uint8) = _s4.next_research_item; - RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_CATEGORY, uint8) = _s4.next_research_category; - // RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_EXPECTED_DAY, uint8) = - // RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_EXPECTED_MONTH, uint8) = + gResearchProgress = _s4.research_progress; + // gResearchProgressStage = + gResearchNextItem = _s4.next_research_item; + gResearchNextCategory = _s4.next_research_category; + // gResearchExpectedDay = + // gResearchExpectedMonth = } diff --git a/src/windows/finances.c b/src/windows/finances.c index 948bfb94ba..52ba917180 100644 --- a/src/windows/finances.c +++ b/src/windows/finances.c @@ -1263,7 +1263,7 @@ static void window_finances_research_mouseup(rct_window *w, int widgetIndex) case WIDX_WATER_RIDES: case WIDX_SHOPS_AND_STALLS: case WIDX_SCENERY_AND_THEMING: - activeResearchTypes = RCT2_GLOBAL(RCT2_ADDRESS_ACTIVE_RESEARCH_TYPES, uint16); + activeResearchTypes = gResearchPriorities; activeResearchTypes ^= 1 << (widgetIndex - WIDX_TRANSPORT_RIDES); research_set_priority(activeResearchTypes); break; @@ -1298,7 +1298,7 @@ static void window_finances_research_mousedown(int widgetIndex, rct_window *w, r dropdownWidget->right - dropdownWidget->left - 3 ); - int currentResearchLevel = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8); + int currentResearchLevel = gResearchFundingLevel; dropdown_set_checked(currentResearchLevel, true); } @@ -1340,17 +1340,17 @@ static void window_finances_research_invalidate(rct_window *w) } window_finances_set_pressed_tab(w); - if (RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8) == RESEARCH_STAGE_FINISHED_ALL) { + if (gResearchProgressStage == RESEARCH_STAGE_FINISHED_ALL) { window_finances_research_widgets[WIDX_RESEARCH_FUNDING].type = WWT_EMPTY; window_finances_research_widgets[WIDX_RESEARCH_FUNDING_DROPDOWN_BUTTON].type = WWT_EMPTY; } - int currentResearchLevel = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8); + int currentResearchLevel = gResearchFundingLevel; // Current funding window_finances_research_widgets[WIDX_RESEARCH_FUNDING].image = STR_NO_FUNDING + currentResearchLevel; // Checkboxes - int activeResearchTypes = RCT2_GLOBAL(RCT2_ADDRESS_ACTIVE_RESEARCH_TYPES, uint16); + uint8 activeResearchTypes = gResearchPriorities; int uncompletedResearchTypes = gResearchUncompletedCategories; for (int i = 0; i < 7; i++) { int mask = 1 << i; diff --git a/src/windows/research.c b/src/windows/research.c index 33938e8dc9..dffd424b92 100644 --- a/src/windows/research.c +++ b/src/windows/research.c @@ -330,7 +330,7 @@ void window_research_development_page_paint(rct_window *w, rct_drawpixelinfo *dp int y = w->y + w->widgets[WIDX_CURRENTLY_IN_DEVELOPMENT_GROUP + baseWidgetIndex].top + 12; rct_string_id stringId; - if (RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8) == RESEARCH_STAGE_FINISHED_ALL) { + if (gResearchProgressStage == RESEARCH_STAGE_FINISHED_ALL) { stringId = STR_RESEARCH_UNKNOWN; gfx_draw_string_left_wrapped(dpi, &stringId, x, y, 296, STR_RESEARCH_TYPE_LABEL, 0); y += 25; @@ -345,10 +345,10 @@ void window_research_development_page_paint(rct_window *w, rct_drawpixelinfo *dp } else { // Research type stringId = STR_RESEARCH_UNKNOWN; - if (RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8) != RESEARCH_STAGE_INITIAL_RESEARCH) { - stringId = STR_TRANSPORT_RIDE + RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_CATEGORY, uint8); - if (RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8) != RESEARCH_STAGE_DESIGNING) { - uint32 typeId = RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_ITEM, uint32); + if (gResearchProgressStage != RESEARCH_STAGE_INITIAL_RESEARCH) { + stringId = STR_TRANSPORT_RIDE + gResearchNextCategory; + if (gResearchProgressStage != RESEARCH_STAGE_DESIGNING) { + uint32 typeId = gResearchNextItem; if (typeId >= 0x10000) { rct_ride_entry *rideEntry = get_ride_entry(typeId & 0xFF); stringId = (rideEntry->flags & RIDE_ENTRY_FLAG_SEPARATE_RIDE_NAME) ? @@ -363,18 +363,18 @@ void window_research_development_page_paint(rct_window *w, rct_drawpixelinfo *dp y += 25; // Progress - stringId = 2285 + RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8); + stringId = 2285 + gResearchProgressStage; gfx_draw_string_left_wrapped(dpi, &stringId, x, y, 296, STR_RESEARCH_PROGRESS_LABEL, 0); y += 15; // Expected RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = STR_UNKNOWN; - if (RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8) != 0) { - uint16 expectedDay = RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_EXPECTED_DAY, uint8); + if (gResearchProgressStage != 0) { + uint16 expectedDay = gResearchExpectedDay; if (expectedDay != 255) { RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = 2289; RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = STR_DATE_DAY_1 + expectedDay; - RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, uint16) = STR_MONTH_MARCH + RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_EXPECTED_MONTH, uint8); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, uint16) = STR_MONTH_MARCH + gResearchExpectedMonth; } } gfx_draw_string_left(dpi, STR_RESEARCH_EXPECTED_LABEL, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); @@ -429,7 +429,7 @@ static void window_research_funding_mouseup(rct_window *w, int widgetIndex) case WIDX_WATER_RIDES: case WIDX_SHOPS_AND_STALLS: case WIDX_SCENERY_AND_THEMING: - activeResearchTypes = RCT2_GLOBAL(RCT2_ADDRESS_ACTIVE_RESEARCH_TYPES, uint16); + activeResearchTypes = gResearchPriorities; activeResearchTypes ^= 1 << (widgetIndex - WIDX_TRANSPORT_RIDES); research_set_priority(activeResearchTypes); break; @@ -464,7 +464,7 @@ static void window_research_funding_mousedown(int widgetIndex, rct_window *w, rc dropdownWidget->right - dropdownWidget->left - 3 ); - int currentResearchLevel = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8); + int currentResearchLevel = gResearchFundingLevel; dropdown_set_checked(currentResearchLevel, true); } @@ -509,7 +509,7 @@ static void window_research_funding_invalidate(rct_window *w) window_research_set_pressed_tab(w); if ((gParkFlags & PARK_FLAGS_NO_MONEY) || - (RCT2_GLOBAL(RCT2_ADDRESS_RESEARH_PROGRESS_STAGE, uint8) == RESEARCH_STAGE_FINISHED_ALL)) { + (gResearchProgressStage == RESEARCH_STAGE_FINISHED_ALL)) { //window_research_funding_widgets[WIDX_FUNDING_GROUP].type = WWT_EMPTY; window_research_funding_widgets[WIDX_RESEARCH_FUNDING].type = WWT_EMPTY; window_research_funding_widgets[WIDX_RESEARCH_FUNDING_DROPDOWN_BUTTON].type = WWT_EMPTY; @@ -519,12 +519,12 @@ static void window_research_funding_invalidate(rct_window *w) window_research_funding_widgets[WIDX_RESEARCH_FUNDING_DROPDOWN_BUTTON].type = WWT_DROPDOWN_BUTTON; // Current funding - int currentResearchLevel = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8); + int currentResearchLevel = gResearchFundingLevel; window_research_funding_widgets[WIDX_RESEARCH_FUNDING].image = STR_NO_FUNDING + currentResearchLevel; } // Checkboxes - int activeResearchTypes = RCT2_GLOBAL(RCT2_ADDRESS_ACTIVE_RESEARCH_TYPES, uint16); + uint8 activeResearchTypes = gResearchPriorities; int uncompletedResearchTypes = gResearchUncompletedCategories; for (int i = 0; i < 7; i++) { int mask = 1 << i; @@ -563,7 +563,7 @@ void window_research_funding_page_paint(rct_window *w, rct_drawpixelinfo *dpi, i if (gParkFlags & PARK_FLAGS_NO_MONEY) return; - int currentResearchLevel = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8); + int currentResearchLevel = gResearchFundingLevel; money32 currentResearchCostPerWeek = research_cost_table[currentResearchLevel]; gfx_draw_string_left(dpi, STR_RESEARCH_COST_PER_MONTH, ¤tResearchCostPerWeek, 0, w->x + 10, w->y + 77); } diff --git a/src/world/park.c b/src/world/park.c index 2d7cce3dd5..eeb4b351f3 100644 --- a/src/world/park.c +++ b/src/world/park.c @@ -109,9 +109,16 @@ void park_init() gParkEntranceFee = MONEY(10, 00); gPeepSpawns[0].x = UINT16_MAX; - RCT2_GLOBAL(0x013573F8, sint16) = -1; - RCT2_GLOBAL(RCT2_ADDRESS_ACTIVE_RESEARCH_TYPES, uint16) = 127; - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8) = 2; + gPeepSpawns[1].x = UINT16_MAX; + gResearchPriorities = + (1 << RESEARCH_CATEGORY_TRANSPORT) | + (1 << RESEARCH_CATEGORY_GENTLE) | + (1 << RESEARCH_CATEGORY_ROLLERCOASTER) | + (1 << RESEARCH_CATEGORY_THRILL) | + (1 << RESEARCH_CATEGORY_WATER) | + (1 << RESEARCH_CATEGORY_SHOP) | + (1 << RESEARCH_CATEGORY_SCENERYSET); + gResearchFundingLevel = RESEARCH_FUNDING_NORMAL; gGuestInitialCash = MONEY(50,00); // Cash per guest (average) gGuestInitialHappiness = calculate_guest_initial_happiness(50); // 50%