From ea4eb7775a1094532c5a52ef8aa8060b9414ecc5 Mon Sep 17 00:00:00 2001 From: Michael Steenbeek Date: Wed, 10 Jan 2018 11:03:48 +0100 Subject: [PATCH] Create scenery_set_(not_)invented() --- src/openrct2/management/Research.cpp | 28 +++++++++++++++++++--------- src/openrct2/management/Research.h | 2 +- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/openrct2/management/Research.cpp b/src/openrct2/management/Research.cpp index 2b5a6806fa..215af84fd6 100644 --- a/src/openrct2/management/Research.cpp +++ b/src/openrct2/management/Research.cpp @@ -61,8 +61,9 @@ uint32 gResearchedSceneryItems[MAX_RESEARCHED_SCENERY_ITEMS]; bool gSilentResearch = false; static void ride_type_set_invented(sint32 rideType); - static void ride_entry_set_invented(sint32 rideEntryIndex); +static void scenery_set_invented(uint16 sceneryItem); +static void scenery_set_not_invented(uint16 sceneryItem); /** * @@ -299,8 +300,7 @@ void research_finish_item(rct_research_item * researchItem) { for (sint32 i = 0; i < sceneryGroupEntry->entry_count; i++) { - sint32 subSceneryEntryIndex = sceneryGroupEntry->scenery_entries[i]; - gResearchedSceneryItems[subSceneryEntryIndex >> 5] |= 1UL << (subSceneryEntryIndex & 0x1F); + scenery_set_invented(sceneryGroupEntry->scenery_entries[i]); } set_format_arg(0, rct_string_id, sceneryGroupEntry->name); @@ -416,10 +416,7 @@ void research_reset_current_item() set_every_ride_entry_not_invented(); - for (auto &researchedSceneryItem : gResearchedSceneryItems) - { - researchedSceneryItem = 0xFFFFFFFF; - } + set_all_scenery_items_invented(); for (sint32 i = 0; i < MAX_SCENERY_GROUP_OBJECTS; ++i) { @@ -431,8 +428,7 @@ void research_reset_current_item() for (sint32 j = 0; j < scenery_set->entry_count; ++j) { - uint8 value = scenery_set->scenery_entries[j] & 0x1F; - gResearchedSceneryItems[scenery_set->scenery_entries[j] >> 5] &= ~(1UL << value); + scenery_set_not_invented(scenery_set->scenery_entries[j]); } } @@ -718,6 +714,20 @@ bool scenery_is_invented(uint16 sceneryItem) return invented; } +static void scenery_set_invented(uint16 sceneryItem) +{ + sint32 quadIndex = sceneryItem >> 5; + sint32 bitIndex = sceneryItem & 0x1F; + gResearchedSceneryItems[quadIndex] |= (uint32) 1 << bitIndex; +} + +static void scenery_set_not_invented(uint16 sceneryItem) +{ + sint32 quadIndex = sceneryItem >> 5; + sint32 bitIndex = sceneryItem & 0x1F; + gResearchedSceneryItems[quadIndex] &= ~((uint32) 1 << bitIndex); +} + bool scenery_group_is_invented(sint32 sgIndex) { auto invented = false; diff --git a/src/openrct2/management/Research.h b/src/openrct2/management/Research.h index bbf3409f1c..58d399ca5c 100644 --- a/src/openrct2/management/Research.h +++ b/src/openrct2/management/Research.h @@ -62,7 +62,7 @@ enum #define RESEARCHED_ITEMS_END_2 -3 #define MAX_RESEARCH_ITEMS 500 -#define MAX_RESEARCHED_SCENERY_ITEMS 56 +#define MAX_RESEARCHED_SCENERY_ITEMS 56 // Actually 56 * 32 = 1792 #define MAX_RESEARCHED_TRACK_TYPES 128 #define RESEARCH_ENTRY_RIDE_MASK 0x10000