diff --git a/src/object.h b/src/object.h index 3c48a0637e..7d0dc72b0e 100644 --- a/src/object.h +++ b/src/object.h @@ -51,6 +51,9 @@ typedef enum{ OBJECT_SELECTION_FLAG_8 = (1 << 7), }OBJECT_SELECTION_FLAGS; +#define OBJECT_ENTRY_GROUP_COUNT 11 +#define OBJECT_ENTRY_COUNT 721 + /** * Object entry structure. * size: 0x10 @@ -92,6 +95,7 @@ typedef struct { } rct_object_filters; extern rct_object_entry_group object_entry_groups[]; +extern void** gObjectList; extern char gTempObjectLoadName[9]; extern uint32 gInstalledObjectsCount; diff --git a/src/object_list.c b/src/object_list.c index ce5c972b43..d7677e2198 100644 --- a/src/object_list.c +++ b/src/object_list.c @@ -32,8 +32,6 @@ #include "world/scenery.h" #include "world/water.h" -#define OBJECT_ENTRY_GROUP_COUNT 11 -#define OBJECT_ENTRY_COUNT 721 #define FILTER_VERSION 1 typedef struct { @@ -89,6 +87,8 @@ rct_object_entry_group object_entry_groups[] = { (uint8**)(RCT2_ADDRESS_SCENARIO_TEXT_ENTRIES ), (rct_object_entry_extended*)(0x00F3F03C + (720 * 20)) // scenario text 0x009ADAE4, 0xF4287C }; +void **gObjectList = RCT2_ADDRESS(RCT2_ADDRESS_RIDE_ENTRIES, void*); + static int object_list_cache_load(int totalFiles, uint64 totalFileSize, int fileDateModifiedChecksum); static int object_list_cache_save(int fileCount, uint64 totalFileSize, int fileDateModifiedChecksum, int currentItemOffset); diff --git a/src/scenario.c b/src/scenario.c index 671a608b6c..085bba250e 100644 --- a/src/scenario.c +++ b/src/scenario.c @@ -786,8 +786,8 @@ int scenario_get_num_packed_objects_to_write() int i, count = 0; rct_object_entry_extended *entry = (rct_object_entry_extended*)0x00F3F03C; - for (i = 0; i < 721; i++, entry++) { - if (get_ride_entry(i) == (void *)0xFFFFFFFF || (entry->flags & 0xF0)) + for (i = 0; i < OBJECT_ENTRY_COUNT; i++, entry++) { + if (gObjectList[i] == (void *)0xFFFFFFFF || (entry->flags & 0xF0)) continue; count++; @@ -804,8 +804,8 @@ int scenario_write_packed_objects(SDL_RWops* rw) { int i; rct_object_entry_extended *entry = (rct_object_entry_extended*)0x00F3F03C; - for (i = 0; i < 721; i++, entry++) { - if (get_ride_entry(i) == (void *)0xFFFFFFFF || (entry->flags & 0xF0)) + for (i = 0; i < OBJECT_ENTRY_COUNT; i++, entry++) { + if (gObjectList[i] == (void *)0xFFFFFFFF || (entry->flags & 0xF0)) continue; if (!write_object_file(rw, (rct_object_entry*)entry)) @@ -844,8 +844,8 @@ int scenario_write_available_objects(FILE *file) // Write entries rct_object_entry_extended *srcEntry = (rct_object_entry_extended*)0x00F3F03C; rct_object_entry *dstEntry = (rct_object_entry*)buffer; - for (i = 0; i < 721; i++) { - if (get_ride_entry(i) == (void *)0xFFFFFFFF) + for (i = 0; i < OBJECT_ENTRY_COUNT; i++) { + if (gObjectList[i] == (void *)0xFFFFFFFF) memset(dstEntry, 0xFF, sizeof(rct_object_entry)); else *dstEntry = *((rct_object_entry*)srcEntry); @@ -990,10 +990,10 @@ int scenario_save(SDL_RWops* rw, int flags) memcpy(&s6->info, (rct_s6_info*)0x0141F570, sizeof(rct_s6_info)); - for (int i = 0; i < 721; i++) { + for (int i = 0; i < OBJECT_ENTRY_COUNT; i++) { rct_object_entry_extended *entry = &(RCT2_ADDRESS(0x00F3F03C, rct_object_entry_extended)[i]); - if (get_ride_entry(i) == (void *)0xFFFFFFFF) { + if (gObjectList[i] == (void *)0xFFFFFFFF) { memset(&s6->objects[i], 0xFF, sizeof(rct_object_entry)); } else { s6->objects[i] = *((rct_object_entry*)entry); @@ -1066,7 +1066,7 @@ int scenario_save_network(SDL_RWops* rw) for (int i = 0; i < 721; i++) { rct_object_entry_extended *entry = &(RCT2_ADDRESS(0x00F3F03C, rct_object_entry_extended)[i]); - if (get_ride_entry(i) == (void *)0xFFFFFFFF) { + if (gObjectList[i] == (void *)0xFFFFFFFF) { memset(&s6->objects[i], 0xFF, sizeof(rct_object_entry)); } else { s6->objects[i] = *((rct_object_entry*)entry); diff --git a/src/world/map.c b/src/world/map.c index 0395d83faf..0d219594e1 100644 --- a/src/world/map.c +++ b/src/world/map.c @@ -1635,7 +1635,7 @@ static money32 map_set_land_height(int flags, int x, int y, int height, int styl if(map_element_get_type(mapElement) != MAP_ELEMENT_TYPE_TRACK) continue; int rideIndex = mapElement->properties.track.ride_index; - int maxHeight = get_ride_entry(get_ride(rideIndex)->subtype)->max_height; + int maxHeight = ride_get_entry(get_ride(rideIndex))->max_height; if(maxHeight == 0) maxHeight = RCT2_GLOBAL(0x97D218 + 8 * get_ride(rideIndex)->type, uint8); int zDelta = mapElement->clearance_height - height;