1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-29 09:44:52 +01:00

clean up init_scenery a bit

This commit is contained in:
Ted John
2016-07-09 21:06:54 +01:00
parent 7b17b603f3
commit 3d824142ee
3 changed files with 25 additions and 19 deletions

View File

@@ -643,3 +643,11 @@ static void ride_entry_set_invented(int rideEntryIndex)
int bitIndex = rideEntryIndex & 0x1F;
gResearchedRideEntries[quadIndex] |= 1 << bitIndex;
}
bool scenery_is_invented(uint16 sceneryItem)
{
int quadIndex = sceneryItem >> 5;
int bitIndex = sceneryItem & 0x1F;
bool invented = (gResearchedSceneryItems[quadIndex] & ((uint32)1 << bitIndex));
return invented;
}

View File

@@ -105,5 +105,6 @@ void research_insert_scenery_group_entry(uint8 entryIndex, bool researched);
bool ride_type_is_invented(int rideType);
bool ride_entry_is_invented(int rideEntryIndex);
bool track_type_is_invented(uint8 rideType, int trackType);
bool scenery_is_invented(uint16 sceneryItem);
#endif

View File

@@ -187,7 +187,7 @@ void window_scenery_update_scroll(rct_window *w);
*/
void init_scenery_entry(rct_scenery_entry *sceneryEntry, int index, uint8 sceneryTabId)
{
if (gResearchedSceneryItems[index >> 5] & (1UL << (index & 0x1F))) {
if (scenery_is_invented(index)) {
if (sceneryTabId != 0xFF) {
for (int i = 0; i < SCENERY_ENTRIES_BY_TAB; i++) {
if (window_scenery_tab_entries[sceneryTabId][i] == -1)
@@ -199,7 +199,7 @@ void init_scenery_entry(rct_scenery_entry *sceneryEntry, int index, uint8 scener
}
}
for (int i = 0; i < 0x13; i++) {
for (int i = 0; i < 19; i++) {
int counter = 0;
while (window_scenery_tab_entries[i][counter] != -1)
@@ -213,10 +213,10 @@ void init_scenery_entry(rct_scenery_entry *sceneryEntry, int index, uint8 scener
}
for (int i = 0; i < SCENERY_ENTRIES_BY_TAB; i++) {
if (window_scenery_tab_entries[0x13][i] == -1)
if (window_scenery_tab_entries[19][i] == -1)
{
window_scenery_tab_entries[0x13][i] = index;
window_scenery_tab_entries[0x13][i + 1] = -1;
window_scenery_tab_entries[19][i] = index;
window_scenery_tab_entries[19][i + 1] = -1;
break;
}
}
@@ -229,24 +229,21 @@ void init_scenery_entry(rct_scenery_entry *sceneryEntry, int index, uint8 scener
*/
void init_scenery()
{
bool enabledScenerySets[0x14] = { false };
bool enabledScenerySets[20] = { false };
for (int scenerySetIndex = 0; scenerySetIndex < 0x14; scenerySetIndex++) {
for (int scenerySetIndex = 0; scenerySetIndex < 20; scenerySetIndex++) {
window_scenery_tab_entries[scenerySetIndex][0] = -1;
if (scenerySetIndex == 0x13)
if (scenerySetIndex == 19)
continue;
rct_scenery_set_entry* scenerySetEntry = get_scenery_group_entry(scenerySetIndex);
if ((uint32)scenerySetEntry == 0xFFFFFFFF)
if (scenerySetEntry == (rct_scenery_set_entry *)-1)
continue;
int sceneryTabEntryCount = 0;
for (int i = 0; i < scenerySetEntry->entry_count; i++) {
uint16 sceneryEntryId = scenerySetEntry->scenery_entries[i];
uint32 ecx = gResearchedSceneryItems[sceneryEntryId >> 5];
uint32 edx = 1u << (sceneryEntryId & 0x1F);
if (ecx & edx) {
if (scenery_is_invented(sceneryEntryId)) {
window_scenery_tab_entries[scenerySetIndex][sceneryTabEntryCount] = sceneryEntryId;
window_scenery_tab_entries[scenerySetIndex][++sceneryTabEntryCount] = -1;
} else {
@@ -257,7 +254,7 @@ void init_scenery()
// small scenery
for (uint16 sceneryId = 0; sceneryId < 0xFC; sceneryId++) {
if ((uint32)get_small_scenery_entry(sceneryId) == 0xFFFFFFFF)
if (get_small_scenery_entry(sceneryId) == (rct_scenery_entry *)-1)
continue;
rct_scenery_entry* sceneryEntry = get_small_scenery_entry(sceneryId);
@@ -268,7 +265,7 @@ void init_scenery()
for (int sceneryId = 0x300; sceneryId < 0x380; sceneryId++) {
int largeSceneryIndex = sceneryId - 0x300;
if ((uint32)get_large_scenery_entry(largeSceneryIndex) == 0xFFFFFFFF)
if (get_large_scenery_entry(largeSceneryIndex) == (rct_scenery_entry *)-1)
continue;
rct_scenery_entry* sceneryEntry = get_large_scenery_entry(largeSceneryIndex);
@@ -279,7 +276,7 @@ void init_scenery()
for (int sceneryId = 0x200; sceneryId < 0x280; sceneryId++) {
int wallSceneryIndex = sceneryId - 0x200;
if ((uint32)get_wall_entry(wallSceneryIndex) == 0xFFFFFFFF)
if (get_wall_entry(wallSceneryIndex) == (rct_scenery_entry *)-1)
continue;
rct_scenery_entry* sceneryEntry = get_wall_entry(wallSceneryIndex);
@@ -290,7 +287,7 @@ void init_scenery()
for (int sceneryId = 0x400; sceneryId < 0x420; sceneryId++) {
int bannerIndex = sceneryId - 0x400;
if ((uint32)get_banner_entry(bannerIndex) == 0xFFFFFFFF)
if (get_banner_entry(bannerIndex) == (rct_scenery_entry *)-1)
continue;
rct_scenery_entry* sceneryEntry = get_banner_entry(bannerIndex);
@@ -301,7 +298,7 @@ void init_scenery()
for (int sceneryId = 0x100; sceneryId < 0x10F; sceneryId++) {
int pathBitIndex = sceneryId - 0x100;
if ((uint32)get_footpath_item_entry(pathBitIndex) == 0xFFFFFFFF)
if (get_footpath_item_entry(pathBitIndex) == (rct_scenery_entry *)-1)
continue;
rct_scenery_entry* sceneryEntry = get_footpath_item_entry(pathBitIndex);
@@ -317,7 +314,7 @@ void init_scenery()
for (int scenerySetId = 0; scenerySetId < 19; scenerySetId++) {
rct_scenery_set_entry* sceneryEntry = get_scenery_group_entry(scenerySetId);
if ((uint32)sceneryEntry == 0xFFFFFFFF)
if (sceneryEntry == (rct_scenery_set_entry *)-1)
continue;
tabIndexes[usedValues] = scenerySetId;