diff --git a/src/addresses.h b/src/addresses.h index 470d1046af..234d64e705 100644 --- a/src/addresses.h +++ b/src/addresses.h @@ -330,6 +330,7 @@ #define RCT2_ADDRESS_HANDYMAN_COLOUR 0x01357BCD #define RCT2_ADDRESS_MECHANIC_COLOUR 0x01357BCE #define RCT2_ADDRESS_SECURITY_COLOUR 0x01357BCF +#define RCT2_ADDRESS_RESEARCHED_SCENERY_ITEMS 0x01357BD0 #define RCT2_ADDRESS_ACTIVE_RESEARCH_TYPES 0x01357CF2 #define RCT2_ADDRESS_RESEARH_PROGRESS_STAGE 0x01357CF3 diff --git a/src/management/research.c b/src/management/research.c index 297a1ac957..f0fd0f7944 100644 --- a/src/management/research.c +++ b/src/management/research.c @@ -42,6 +42,7 @@ uint32 *gResearchedRideTypes = RCT2_ADDRESS(RCT2_ADDRESS_RESEARCHED_RIDE_TYPES, uint32 *gResearchedRideEntries = RCT2_ADDRESS(RCT2_ADDRESS_RESEARCHED_RIDE_ENTRIES, uint32); uint32 *gResearchedTrackTypesA = RCT2_ADDRESS(RCT2_ADDRESS_RESEARCHED_TRACK_TYPES_A, uint32); uint32 *gResearchedTrackTypesB = RCT2_ADDRESS(RCT2_ADDRESS_RESEARCHED_TRACK_TYPES_B, uint32); +uint32 *gResearchedSceneryItems = RCT2_ADDRESS(RCT2_ADDRESS_RESEARCHED_SCENERY_ITEMS, uint32); bool gSilentResearch = false; @@ -223,7 +224,7 @@ void research_finish_item(sint32 entryIndex) scenerySetEntry = g_scenerySetEntries[entryIndex & 0xFFFF]; for (i = 0; i < scenerySetEntry->entry_count; i++) { subSceneryEntryIndex = scenerySetEntry->scenery_entries[i]; - RCT2_ADDRESS(0x01357BD0, sint32)[subSceneryEntryIndex >> 5] |= 1u << (subSceneryEntryIndex & 0x1F); + gResearchedSceneryItems[subSceneryEntryIndex >> 5] |= 1UL << (subSceneryEntryIndex & 0x1F); } // I don't think 0x009AC06C is ever not 0, so probably redundant @@ -324,8 +325,8 @@ void sub_684AC3(){ gResearchedRideEntries[i] = 0; } - for (int i = 0; i < 56; i++){ - RCT2_ADDRESS(0x01357BD0, uint32)[i] = -1; + for (int i = 0; i < 56; i++) { + gResearchedSceneryItems[i] = 0xFFFFFFFF; } for (int i = 0; i < 19; ++i){ @@ -334,7 +335,7 @@ void sub_684AC3(){ for (int j = 0; j < scenery_set->entry_count; ++j){ uint8 value = scenery_set->scenery_entries[j] & 0x1F; - RCT2_ADDRESS(0x01357BD0, uint32)[scenery_set->scenery_entries[j] >> 5] &= ~(1u << value); + gResearchedSceneryItems[scenery_set->scenery_entries[j] >> 5] &= ~(1UL << value); } } diff --git a/src/management/research.h b/src/management/research.h index cc5868e8e0..f2d88a675b 100644 --- a/src/management/research.h +++ b/src/management/research.h @@ -78,6 +78,7 @@ extern uint32 *gResearchedRideTypes; extern uint32 *gResearchedRideEntries; extern uint32 *gResearchedTrackTypesA; extern uint32 *gResearchedTrackTypesB; +extern uint32 *gResearchedSceneryItems; extern bool gSilentResearch; void research_reset_items(); diff --git a/src/rct2/S6Exporter.cpp b/src/rct2/S6Exporter.cpp index 061fc907d7..35bdb5121e 100644 --- a/src/rct2/S6Exporter.cpp +++ b/src/rct2/S6Exporter.cpp @@ -289,7 +289,7 @@ void S6Exporter::Export() _s6.mechanic_colour = gStaffMechanicColour; _s6.security_colour = gStaffSecurityColour; - memcpy(_s6.dword_01357BD0, RCT2_ADDRESS(0x01357BD0, uint32), sizeof(_s6.dword_01357BD0)); + memcpy(_s6.researched_scenery_items, gResearchedSceneryItems, sizeof(_s6.researched_scenery_items)); _s6.park_rating = gParkRating; diff --git a/src/rct2/S6Importer.cpp b/src/rct2/S6Importer.cpp index 439c3092ff..5d43fedce3 100644 --- a/src/rct2/S6Importer.cpp +++ b/src/rct2/S6Importer.cpp @@ -221,7 +221,7 @@ void S6Importer::Import() gStaffMechanicColour = _s6.mechanic_colour; gStaffSecurityColour = _s6.security_colour; - memcpy(RCT2_ADDRESS(0x01357BD0, uint32), _s6.dword_01357BD0, sizeof(_s6.dword_01357BD0)); + memcpy(gResearchedSceneryItems, _s6.researched_scenery_items, sizeof(_s6.researched_scenery_items)); gParkRating = _s6.park_rating; diff --git a/src/scenario.h b/src/scenario.h index 0f99318ea1..609eb2a3cf 100644 --- a/src/scenario.h +++ b/src/scenario.h @@ -176,7 +176,7 @@ typedef struct { uint8 security_colour; // Ignored in scenario - uint32 dword_01357BD0[56]; + uint32 researched_scenery_items[56]; // SC6[9] uint16 park_rating; diff --git a/src/windows/editor_bottom_toolbar.c b/src/windows/editor_bottom_toolbar.c index bd86c977db..973787dd53 100644 --- a/src/windows/editor_bottom_toolbar.c +++ b/src/windows/editor_bottom_toolbar.c @@ -160,8 +160,9 @@ void window_editor_bottom_toolbar_jump_back_to_object_selection() { */ static void sub_6DFED0() { - for (int i = 0; i < 56; i++) - RCT2_ADDRESS(0x01357BD0, sint32)[i] = -1; + for (int i = 0; i < 56; i++) { + gResearchedSceneryItems[i] = 0xFFFFFFFF; + } } /** diff --git a/src/windows/scenery.c b/src/windows/scenery.c index 1555c5facf..2435b13999 100644 --- a/src/windows/scenery.c +++ b/src/windows/scenery.c @@ -185,8 +185,9 @@ void window_scenery_update_scroll(rct_window *w); * Was part of 0x006DFA00 * The same code repeated five times for every scenery entry type */ -void init_scenery_entry(rct_scenery_entry *sceneryEntry, int index, uint8 sceneryTabId) { - if (RCT2_ADDRESS(0x01357BD0, sint32)[index >> 5] & (1u << (index & 0x1F))) { +void init_scenery_entry(rct_scenery_entry *sceneryEntry, int index, uint8 sceneryTabId) +{ + if (gResearchedSceneryItems[index >> 5] & (1UL << (index & 0x1F))) { if (sceneryTabId != 0xFF) { for (int i = 0; i < SCENERY_ENTRIES_BY_TAB; i++) { if (window_scenery_tab_entries[sceneryTabId][i] == -1) @@ -243,7 +244,7 @@ void init_scenery() for (int i = 0; i < scenerySetEntry->entry_count; i++) { uint16 sceneryEntryId = scenerySetEntry->scenery_entries[i]; - uint32 ecx = RCT2_ADDRESS(0x01357BD0, uint32)[sceneryEntryId >> 5]; + uint32 ecx = gResearchedSceneryItems[sceneryEntryId >> 5]; uint32 edx = 1u << (sceneryEntryId & 0x1F); if (ecx & edx) { window_scenery_tab_entries[scenerySetIndex][sceneryTabEntryCount] = sceneryEntryId; diff --git a/src/world/park.c b/src/world/park.c index 36de9d75fe..1c532a329b 100644 --- a/src/world/park.c +++ b/src/world/park.c @@ -100,8 +100,9 @@ void park_init() for (i = 0; i < 2; i++) gResearchedRideTypes[i] = 0; - for (i = 0; i < 56; i++) - RCT2_ADDRESS(0x01357BD0, sint32)[i] = -1; + for (i = 0; i < 56; i++) { + gResearchedSceneryItems[i] = 0xFFFFFFFF; + } gParkEntranceFee = MONEY(10, 00); gPeepSpawns[0].x = UINT16_MAX;