diff --git a/src/openrct2/management/Research.cpp b/src/openrct2/management/Research.cpp index b0471647fa..77a39a8497 100644 --- a/src/openrct2/management/Research.cpp +++ b/src/openrct2/management/Research.cpp @@ -794,6 +794,7 @@ static void ResearchRebuildInventedTables() research_mark_item_as_researched(item); } + MarkAllUnrestrictedSceneryAsInvented(); } static void ResearchAddAllMissingItems(bool isResearched) diff --git a/src/openrct2/world/Scenery.cpp b/src/openrct2/world/Scenery.cpp index c35c79a127..278d6cb947 100644 --- a/src/openrct2/world/Scenery.cpp +++ b/src/openrct2/world/Scenery.cpp @@ -370,8 +370,9 @@ std::vector& GetRestrictedScenery() return _restrictedScenery; } -void RestrictAllMiscScenery() +static std::vector GetAllMiscScenery() { + std::vector miscScenery; std::vector nonMiscScenery; for (ObjectEntryIndex i = 0; i < MAX_SCENERY_GROUP_OBJECTS; i++) { @@ -395,11 +396,30 @@ void RestrictAllMiscScenery() { if (std::find(std::begin(nonMiscScenery), std::end(nonMiscScenery), sceneryItem) == std::end(nonMiscScenery)) { - _restrictedScenery.push_back(sceneryItem); + miscScenery.push_back(sceneryItem); } } } } + return miscScenery; +} + +void RestrictAllMiscScenery() +{ + auto miscScenery = GetAllMiscScenery(); + _restrictedScenery.insert(_restrictedScenery.begin(), miscScenery.begin(), miscScenery.end()); +} + +void MarkAllUnrestrictedSceneryAsInvented() +{ + auto miscScenery = GetAllMiscScenery(); + for (const auto& sceneryItem : miscScenery) + { + if (std::find(_restrictedScenery.begin(), _restrictedScenery.end(), sceneryItem) == _restrictedScenery.end()) + { + scenery_set_invented(sceneryItem); + } + } } ObjectType GetObjectTypeFromSceneryType(uint8_t type) diff --git a/src/openrct2/world/Scenery.h b/src/openrct2/world/Scenery.h index 395ec8416d..6cc3356cab 100644 --- a/src/openrct2/world/Scenery.h +++ b/src/openrct2/world/Scenery.h @@ -300,6 +300,7 @@ bool IsSceneryAvailableToBuild(const ScenerySelection& item); bool IsSceneryItemRestricted(const ScenerySelection& item); void ClearRestrictedScenery(); void RestrictAllMiscScenery(); +void MarkAllUnrestrictedSceneryAsInvented(); std::vector& GetRestrictedScenery(); ObjectType GetObjectTypeFromSceneryType(uint8_t type);