diff --git a/src/openrct2-ui/windows/EditorBottomToolbar.cpp b/src/openrct2-ui/windows/EditorBottomToolbar.cpp index 9b51786196..244694bbec 100644 --- a/src/openrct2-ui/windows/EditorBottomToolbar.cpp +++ b/src/openrct2-ui/windows/EditorBottomToolbar.cpp @@ -227,6 +227,7 @@ void window_editor_bottom_toolbar_jump_forward_from_object_selection() return; if (gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) { + set_every_ride_type_invented(); set_every_ride_entry_invented(); context_open_window(WC_CONSTRUCT_RIDE); gS6Info.editor_step = EDITOR_STEP_ROLLERCOASTER_DESIGNER; diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index ece7111fb9..42e55d1212 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -1233,6 +1233,7 @@ static sint32 get_object_from_object_selection(uint8 object_type, sint32 y) */ static void window_editor_object_selection_manage_tracks() { + set_every_ride_type_invented(); set_every_ride_entry_invented(); gS6Info.editor_step = EDITOR_STEP_TRACK_DESIGNS_MANAGER; diff --git a/src/openrct2/management/Research.cpp b/src/openrct2/management/Research.cpp index 215af84fd6..67e64987ea 100644 --- a/src/openrct2/management/Research.cpp +++ b/src/openrct2/management/Research.cpp @@ -54,16 +54,13 @@ rct_research_item gResearchItems[MAX_RESEARCH_ITEMS]; // 0x00EE787C uint8 gResearchUncompletedCategories; -bool gResearchedRideTypes[RIDE_TYPE_COUNT]; -bool gResearchedRideEntries[MAX_RIDE_OBJECTS]; +static bool _researchedRideTypes[RIDE_TYPE_COUNT]; +static bool _researchedRideEntries[MAX_RIDE_OBJECTS]; 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); + /** * @@ -414,6 +411,7 @@ void research_reset_current_item() ebp->category = cat; } + set_every_ride_type_not_invented(); set_every_ride_entry_not_invented(); set_all_scenery_items_invented(); @@ -683,12 +681,12 @@ void research_insert_scenery_group_entry(uint8 entryIndex, bool researched) bool ride_type_is_invented(sint32 rideType) { - return gResearchedRideTypes[rideType]; + return _researchedRideTypes[rideType]; } bool ride_entry_is_invented(sint32 rideEntryIndex) { - return gResearchedRideEntries[rideEntryIndex]; + return _researchedRideEntries[rideEntryIndex]; } bool track_piece_is_available_for_ride_type(uint8 rideType, sint32 trackType) @@ -696,14 +694,14 @@ bool track_piece_is_available_for_ride_type(uint8 rideType, sint32 trackType) return RideTypePossibleTrackConfigurations[rideType] & (1ULL << trackType); } -static void ride_type_set_invented(sint32 rideType) +void ride_type_set_invented(sint32 rideType) { - gResearchedRideTypes[rideType] = true; + _researchedRideTypes[rideType] = true; } -static void ride_entry_set_invented(sint32 rideEntryIndex) +void ride_entry_set_invented(sint32 rideEntryIndex) { - gResearchedRideEntries[rideEntryIndex] = true; + _researchedRideEntries[rideEntryIndex] = true; } bool scenery_is_invented(uint16 sceneryItem) @@ -714,14 +712,14 @@ bool scenery_is_invented(uint16 sceneryItem) return invented; } -static void scenery_set_invented(uint16 sceneryItem) +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) +void scenery_set_not_invented(uint16 sceneryItem) { sint32 quadIndex = sceneryItem >> 5; sint32 bitIndex = sceneryItem & 0x1F; @@ -762,16 +760,24 @@ void set_all_scenery_items_invented() } } +void set_every_ride_type_invented() +{ + Memory::Set(_researchedRideTypes, true, sizeof(_researchedRideTypes)); +} + +void set_every_ride_type_not_invented() +{ + Memory::Set(_researchedRideTypes, false, sizeof(_researchedRideTypes)); +} + void set_every_ride_entry_invented() { - Memory::Set(gResearchedRideTypes, true, sizeof(gResearchedRideTypes)); - Memory::Set(gResearchedRideEntries, true, sizeof(gResearchedRideEntries)); + Memory::Set(_researchedRideEntries, true, sizeof(_researchedRideEntries)); } void set_every_ride_entry_not_invented() { - Memory::Set(gResearchedRideTypes, false, sizeof(gResearchedRideTypes)); - Memory::Set(gResearchedRideEntries, false, sizeof(gResearchedRideEntries)); + Memory::Set(_researchedRideEntries, false, sizeof(_researchedRideEntries)); } /** diff --git a/src/openrct2/management/Research.h b/src/openrct2/management/Research.h index 58d399ca5c..b93c586aca 100644 --- a/src/openrct2/management/Research.h +++ b/src/openrct2/management/Research.h @@ -110,8 +110,6 @@ extern rct_research_item gResearchNextItem; extern rct_research_item gResearchItems[MAX_RESEARCH_ITEMS]; extern uint8 gResearchUncompletedCategories; -extern bool gResearchedRideTypes[RIDE_TYPE_COUNT]; -extern bool gResearchedRideEntries[MAX_RIDE_OBJECTS]; extern uint32 gResearchedSceneryItems[MAX_RESEARCHED_SCENERY_ITEMS]; extern bool gSilentResearch; @@ -132,12 +130,18 @@ void research_remove(rct_research_item * researchItem); void research_insert_ride_entry(uint8 entryIndex, bool researched); void research_insert_scenery_group_entry(uint8 entryIndex, bool researched); +void ride_type_set_invented(sint32 rideType); +void ride_entry_set_invented(sint32 rideEntryIndex); +void scenery_set_invented(uint16 sceneryItem); +void scenery_set_not_invented(uint16 sceneryItem); bool ride_type_is_invented(sint32 rideType); bool ride_entry_is_invented(sint32 rideEntryIndex); bool track_piece_is_available_for_ride_type(uint8 rideType, sint32 trackType); bool scenery_group_is_invented(sint32 sgIndex); bool scenery_is_invented(uint16 sceneryItem); void set_all_scenery_items_invented(); +void set_every_ride_type_invented(); +void set_every_ride_type_not_invented(); void set_every_ride_entry_invented(); void set_every_ride_entry_not_invented(); rct_string_id research_item_get_name(rct_research_item * researchItem); diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index 7549e5257f..36e2eec6bc 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -700,7 +700,7 @@ public: void ImportResearchedRideTypes() { - Memory::Set(gResearchedRideTypes, false, sizeof(gResearchedRideTypes)); + set_every_ride_type_not_invented(); for (sint32 rideType = 0; rideType < RIDE_TYPE_COUNT; rideType++) { @@ -708,13 +708,13 @@ public: sint32 bitIndex = rideType & 0x1F; bool invented = (_s6.researched_ride_types[quadIndex] & ((uint32) 1 << bitIndex)); - gResearchedRideTypes[rideType] = invented; + ride_type_set_invented(rideType); } } void ImportResearchedRideEntries() { - Memory::Set(gResearchedRideEntries, false, sizeof(gResearchedRideEntries)); + set_every_ride_entry_not_invented(); for (sint32 rideEntryIndex = 0; rideEntryIndex < MAX_RIDE_OBJECTS; rideEntryIndex++) { @@ -722,7 +722,7 @@ public: sint32 bitIndex = rideEntryIndex & 0x1F; bool invented = (_s6.researched_ride_entries[quadIndex] & ((uint32) 1 << bitIndex)); - gResearchedRideEntries[rideEntryIndex] = invented; + ride_entry_set_invented(rideEntryIndex); } } diff --git a/src/openrct2/world/Park.cpp b/src/openrct2/world/Park.cpp index 28b58bebc8..ad1c4a30b9 100644 --- a/src/openrct2/world/Park.cpp +++ b/src/openrct2/world/Park.cpp @@ -109,7 +109,7 @@ void park_init() research_reset_items(); finance_init(); - Memory::Set(gResearchedRideTypes, false, sizeof(gResearchedRideTypes)); + set_every_ride_type_not_invented(); set_all_scenery_items_invented();