mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-21 22:13:07 +01:00
Refactor gResearchedSceneryItems
This commit is contained in:
@@ -56,7 +56,7 @@ uint8 gResearchUncompletedCategories;
|
||||
|
||||
static bool _researchedRideTypes[RIDE_TYPE_COUNT];
|
||||
static bool _researchedRideEntries[MAX_RIDE_OBJECTS];
|
||||
uint32 gResearchedSceneryItems[MAX_RESEARCHED_SCENERY_ITEMS];
|
||||
static bool _researchedSceneryItems[MAX_RESEARCHED_SCENERY_ITEMS];
|
||||
|
||||
bool gSilentResearch = false;
|
||||
|
||||
@@ -706,24 +706,17 @@ void ride_entry_set_invented(sint32 rideEntryIndex)
|
||||
|
||||
bool scenery_is_invented(uint16 sceneryItem)
|
||||
{
|
||||
sint32 quadIndex = sceneryItem >> 5;
|
||||
sint32 bitIndex = sceneryItem & 0x1F;
|
||||
bool invented = (gResearchedSceneryItems[quadIndex] & ((uint32) 1 << bitIndex));
|
||||
return invented;
|
||||
return _researchedSceneryItems[sceneryItem];
|
||||
}
|
||||
|
||||
void scenery_set_invented(uint16 sceneryItem)
|
||||
{
|
||||
sint32 quadIndex = sceneryItem >> 5;
|
||||
sint32 bitIndex = sceneryItem & 0x1F;
|
||||
gResearchedSceneryItems[quadIndex] |= (uint32) 1 << bitIndex;
|
||||
_researchedSceneryItems[sceneryItem] = true;
|
||||
}
|
||||
|
||||
void scenery_set_not_invented(uint16 sceneryItem)
|
||||
{
|
||||
sint32 quadIndex = sceneryItem >> 5;
|
||||
sint32 bitIndex = sceneryItem & 0x1F;
|
||||
gResearchedSceneryItems[quadIndex] &= ~((uint32) 1 << bitIndex);
|
||||
_researchedSceneryItems[sceneryItem] = false;
|
||||
}
|
||||
|
||||
bool scenery_group_is_invented(sint32 sgIndex)
|
||||
@@ -754,10 +747,12 @@ bool scenery_group_is_invented(sint32 sgIndex)
|
||||
|
||||
void set_all_scenery_items_invented()
|
||||
{
|
||||
for (auto &researchedSceneryItem : gResearchedSceneryItems)
|
||||
{
|
||||
researchedSceneryItem = 0xFFFFFFFF;
|
||||
}
|
||||
Memory::Set(_researchedSceneryItems, true, sizeof(_researchedSceneryItems));
|
||||
}
|
||||
|
||||
void set_all_scenery_items_not_invented()
|
||||
{
|
||||
Memory::Set(_researchedSceneryItems, false, sizeof(_researchedSceneryItems));
|
||||
}
|
||||
|
||||
void set_every_ride_type_invented()
|
||||
|
||||
@@ -58,12 +58,12 @@ enum
|
||||
#define RESEARCHED_ITEMS_SEPARATOR -1
|
||||
// Everything before this point and after separator still requires research
|
||||
#define RESEARCHED_ITEMS_END -2
|
||||
// Extra end of list entry. Unsure why?
|
||||
// Extra end of list entry. Leftover from RCT1.
|
||||
#define RESEARCHED_ITEMS_END_2 -3
|
||||
|
||||
#define MAX_RESEARCH_ITEMS 500
|
||||
#define MAX_RESEARCHED_SCENERY_ITEMS 56 // Actually 56 * 32 = 1792
|
||||
#define MAX_RESEARCHED_TRACK_TYPES 128
|
||||
#define MAX_RESEARCH_ITEMS 500
|
||||
#define MAX_RESEARCHED_TRACK_TYPES 128
|
||||
#define MAX_RESEARCHED_SCENERY_ITEMS 1792
|
||||
|
||||
#define RESEARCH_ENTRY_RIDE_MASK 0x10000
|
||||
|
||||
@@ -110,7 +110,6 @@ extern rct_research_item gResearchNextItem;
|
||||
|
||||
extern rct_research_item gResearchItems[MAX_RESEARCH_ITEMS];
|
||||
extern uint8 gResearchUncompletedCategories;
|
||||
extern uint32 gResearchedSceneryItems[MAX_RESEARCHED_SCENERY_ITEMS];
|
||||
extern bool gSilentResearch;
|
||||
|
||||
void research_reset_items();
|
||||
@@ -140,6 +139,7 @@ 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_all_scenery_items_not_invented();
|
||||
void set_every_ride_type_invented();
|
||||
void set_every_ride_type_not_invented();
|
||||
void set_every_ride_entry_invented();
|
||||
|
||||
@@ -22,20 +22,21 @@
|
||||
#include "../common.h"
|
||||
#include "../rct12/RCT12.h"
|
||||
|
||||
#define RCT2_MAX_STAFF 200
|
||||
#define RCT2_MAX_BANNERS_IN_PARK 250
|
||||
#define RCT2_MAX_VEHICLES_PER_RIDE 32
|
||||
#define RCT2_MAX_CARS_PER_TRAIN 32
|
||||
#define RCT2_MAX_CATEGORIES_PER_RIDE 2
|
||||
#define RCT2_MAX_RIDE_TYPES_PER_RIDE_ENTRY 3
|
||||
#define RCT2_MAX_VEHICLES_PER_RIDE_ENTRY 4
|
||||
#define RCT2_DOWNTIME_HISTORY_SIZE 8
|
||||
#define RCT2_CUSTOMER_HISTORY_SIZE 10
|
||||
#define RCT2_MAX_SPRITES 10000
|
||||
#define RCT2_MAX_TILE_ELEMENTS 0x30000
|
||||
#define RCT2_MAX_ANIMATED_OBJECTS 2000
|
||||
#define RCT2_MAX_RESEARCHED_RIDE_TYPE_QUADS 8 // With 32 bits per uint32, this means there is room for 256 types.
|
||||
#define RCT2_MAX_RESEARCHED_RIDE_ENTRY_QUADS 8 // With 32 bits per uint32, this means there is room for 256 entries.
|
||||
#define RCT2_MAX_STAFF 200
|
||||
#define RCT2_MAX_BANNERS_IN_PARK 250
|
||||
#define RCT2_MAX_VEHICLES_PER_RIDE 32
|
||||
#define RCT2_MAX_CARS_PER_TRAIN 32
|
||||
#define RCT2_MAX_CATEGORIES_PER_RIDE 2
|
||||
#define RCT2_MAX_RIDE_TYPES_PER_RIDE_ENTRY 3
|
||||
#define RCT2_MAX_VEHICLES_PER_RIDE_ENTRY 4
|
||||
#define RCT2_DOWNTIME_HISTORY_SIZE 8
|
||||
#define RCT2_CUSTOMER_HISTORY_SIZE 10
|
||||
#define RCT2_MAX_SPRITES 10000
|
||||
#define RCT2_MAX_TILE_ELEMENTS 0x30000
|
||||
#define RCT2_MAX_ANIMATED_OBJECTS 2000
|
||||
#define RCT2_MAX_RESEARCHED_RIDE_TYPE_QUADS 8 // With 32 bits per uint32, this means there is room for 256 types.
|
||||
#define RCT2_MAX_RESEARCHED_RIDE_ENTRY_QUADS 8 // With 32 bits per uint32, this means there is room for 256 entries.
|
||||
#define RCT2_MAX_RESEARCHED_SCENERY_ITEM_QUADS 56 // With 32 bits per uint32, this means there is room for 1792 items.
|
||||
|
||||
|
||||
typedef struct rct2_install_info {
|
||||
|
||||
@@ -238,7 +238,7 @@ void S6Exporter::Export()
|
||||
_s6.mechanic_colour = gStaffMechanicColour;
|
||||
_s6.security_colour = gStaffSecurityColour;
|
||||
|
||||
memcpy(_s6.researched_scenery_items, gResearchedSceneryItems, sizeof(_s6.researched_scenery_items));
|
||||
ExportResearchedSceneryItems();
|
||||
|
||||
_s6.park_rating = gParkRating;
|
||||
|
||||
@@ -683,6 +683,21 @@ void S6Exporter::ExportResearchedRideEntries()
|
||||
}
|
||||
}
|
||||
|
||||
void S6Exporter::ExportResearchedSceneryItems()
|
||||
{
|
||||
Memory::Set(_s6.researched_scenery_items, false, sizeof(_s6.researched_scenery_items));
|
||||
|
||||
for (uint16 sceneryEntryIndex = 0; sceneryEntryIndex < RCT2_MAX_RESEARCHED_SCENERY_ITEM_QUADS; sceneryEntryIndex++)
|
||||
{
|
||||
if (scenery_is_invented(sceneryEntryIndex))
|
||||
{
|
||||
sint32 quadIndex = sceneryEntryIndex >> 5;
|
||||
sint32 bitIndex = sceneryEntryIndex & 0x1F;
|
||||
_s6.researched_scenery_items[quadIndex] |= (uint32) 1 << bitIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern "C"
|
||||
{
|
||||
enum {
|
||||
|
||||
@@ -53,6 +53,7 @@ private:
|
||||
static uint32 GetLoanHash(money32 initialCash, money32 bankLoan, uint32 maxBankLoan);
|
||||
void ExportResearchedRideTypes();
|
||||
void ExportResearchedRideEntries();
|
||||
void ExportResearchedSceneryItems();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -236,6 +236,7 @@ public:
|
||||
// pad_01357400
|
||||
ImportResearchedRideTypes();
|
||||
ImportResearchedRideEntries();
|
||||
ImportResearchedSceneryItems();
|
||||
// _s6.researched_track_types_a
|
||||
// _s6.researched_track_types_b
|
||||
|
||||
@@ -256,7 +257,7 @@ public:
|
||||
gStaffMechanicColour = _s6.mechanic_colour;
|
||||
gStaffSecurityColour = _s6.security_colour;
|
||||
|
||||
memcpy(gResearchedSceneryItems, _s6.researched_scenery_items, sizeof(_s6.researched_scenery_items));
|
||||
ImportResearchedSceneryItems();
|
||||
|
||||
gParkRating = _s6.park_rating;
|
||||
|
||||
@@ -708,7 +709,8 @@ public:
|
||||
sint32 bitIndex = rideType & 0x1F;
|
||||
bool invented = (_s6.researched_ride_types[quadIndex] & ((uint32) 1 << bitIndex));
|
||||
|
||||
ride_type_set_invented(rideType);
|
||||
if (invented)
|
||||
ride_type_set_invented(rideType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -722,9 +724,24 @@ public:
|
||||
sint32 bitIndex = rideEntryIndex & 0x1F;
|
||||
bool invented = (_s6.researched_ride_entries[quadIndex] & ((uint32) 1 << bitIndex));
|
||||
|
||||
ride_entry_set_invented(rideEntryIndex);
|
||||
if (invented)
|
||||
ride_entry_set_invented(rideEntryIndex);
|
||||
}
|
||||
}
|
||||
|
||||
void ImportResearchedSceneryItems()
|
||||
{
|
||||
set_all_scenery_items_not_invented();
|
||||
|
||||
for (uint16 sceneryEntryIndex = 0; sceneryEntryIndex < RCT2_MAX_RESEARCHED_SCENERY_ITEM_QUADS; sceneryEntryIndex++)
|
||||
{
|
||||
sint32 quadIndex = sceneryEntryIndex >> 5;
|
||||
sint32 bitIndex = sceneryEntryIndex & 0x1F;
|
||||
bool invented = (_s6.researched_scenery_items[quadIndex] & ((uint32) 1 << bitIndex));
|
||||
|
||||
if (invented)
|
||||
scenery_set_invented(sceneryEntryIndex);
|
||||
}
|
||||
}
|
||||
|
||||
void Initialise()
|
||||
|
||||
Reference in New Issue
Block a user