From d07b9535c23a3962b5c7ad456a97e77f43fa1747 Mon Sep 17 00:00:00 2001 From: Ted John Date: Wed, 15 Jun 2016 14:59:01 +0200 Subject: [PATCH] integrate variables: object entry lists --- openrct2.vcxproj | 1 + src/addresses.c | 4 +- src/addresses.h | 4 +- src/object.c | 29 +++++------ src/object.h | 5 +- src/object_list.c | 72 +++++++++++++++++++++------ src/object_list.h | 39 +++++++++++++++ src/openrct2.c | 4 ++ src/paint/map_element/fence.c | 2 +- src/rct2/S6Exporter.cpp | 5 +- src/ride/ride.c | 8 +-- src/scenario.c | 20 +++++--- src/scenario_list.c | 3 +- src/windows/editor_object_selection.c | 3 +- src/world/footpath.c | 1 + src/world/footpath.h | 2 - src/world/scenery.c | 13 ++--- src/world/scenery.h | 10 ---- 18 files changed, 155 insertions(+), 70 deletions(-) create mode 100644 src/object_list.h diff --git a/openrct2.vcxproj b/openrct2.vcxproj index ec0c401011..ef0aabeab6 100644 --- a/openrct2.vcxproj +++ b/openrct2.vcxproj @@ -415,6 +415,7 @@ + diff --git a/src/addresses.c b/src/addresses.c index 41c35bca99..d8e9f06c60 100644 --- a/src/addresses.c +++ b/src/addresses.c @@ -29,7 +29,7 @@ int DISABLE_OPT RCT2_CALLPROC_X(int address, int _eax, int _ebx, int _ecx, int _edx, int _esi, int _edi, int _ebp) { int result = 0; -#ifdef PLATFORM_X86 +#if defined(PLATFORM_X86) && !defined(NO_RCT2) #ifdef _MSC_VER __asm { push ebp @@ -81,7 +81,7 @@ int DISABLE_OPT RCT2_CALLPROC_X(int address, int _eax, int _ebx, int _ecx, int _ int DISABLE_OPT RCT2_CALLFUNC_X(int address, int *_eax, int *_ebx, int *_ecx, int *_edx, int *_esi, int *_edi, int *_ebp) { int result = 0; -#ifdef PLATFORM_X86 +#if defined(PLATFORM_X86) && !defined(NO_RCT2) #ifdef _MSC_VER __asm { // Store C's base pointer diff --git a/src/addresses.h b/src/addresses.h index cbfff546a9..c1e333f428 100644 --- a/src/addresses.h +++ b/src/addresses.h @@ -102,9 +102,6 @@ #define RCT2_ADDRESS_EDITOR_OBJECT_FLAGS_LIST 0x009ADAEC #define RCT2_ADDRESS_TOTAL_NO_IMAGES 0x009ADAF0 -#define RCT2_ADDRESS_SCENARIO_TEXT_TEMP_CHUNK 0x009ADAF8 - - #define RCT2_ADDRESS_CURRENT_SOUND_DEVICE 0x009AF280 #define RCT2_ADDRESS_VEHICLE_SOUND_LIST 0x009AF288 @@ -461,6 +458,7 @@ #define RCT2_ADDRESS_MAP_TOOLTIP_ARGS 0x009A9808 #define RCT2_ADDRESS_CONFIG_FIRST_TIME_LOAD_OBJECTS 0x009AA00D #define RCT2_ADDRESS_CONFIG_FIRST_TIME_LOAD_CONFIG 0x009AB4C6 +#define RCT2_ADDRESS_SCENARIO_TEXT_TEMP_CHUNK 0x009ADAF8 #define RCT2_ADDRESS_NAUSEA_THRESHOLDS 0x00982390 //uint16 #define RCT2_ADDRESS_BTM_TOOLBAR_DIRTY_FLAGS 0x009A9804 diff --git a/src/object.c b/src/object.c index d308c2c583..ddeff1e4bb 100644 --- a/src/object.c +++ b/src/object.c @@ -16,18 +16,19 @@ #include "addresses.h" #include "config.h" +#include "drawing/drawing.h" #include "localisation/localisation.h" #include "object.h" +#include "object_list.h" #include "platform/platform.h" -#include "ride/ride.h" -#include "util/sawyercoding.h" -#include "drawing/drawing.h" -#include "world/footpath.h" -#include "world/water.h" -#include "world/entrance.h" -#include "world/scenery.h" -#include "scenario.h" #include "rct1.h" +#include "ride/ride.h" +#include "scenario.h" +#include "util/sawyercoding.h" +#include "world/entrance.h" +#include "world/footpath.h" +#include "world/scenery.h" +#include "world/water.h" char gTempObjectLoadName[9] = { 0 }; @@ -117,9 +118,9 @@ int object_load_file(int groupIndex, const rct_object_entry *entry, int* chunkSi return 0; } - uint8** chunk_list = object_entry_groups[objectType].chunks; + void** chunk_list = object_entry_groups[objectType].chunks; if (groupIndex == -1) { - for (groupIndex = 0; chunk_list[groupIndex] != (uint8*)-1; groupIndex++) { + for (groupIndex = 0; chunk_list[groupIndex] != (void*)-1; groupIndex++) { if (groupIndex + 1 >= object_entry_group_counts[objectType]) { log_error("Object Load failed due to too many objects of a certain type."); free(chunk); @@ -1708,7 +1709,7 @@ int object_get_scenario_text(rct_object_entry *entry) // This is being changed to force the images to be loaded into a different // image id. RCT2_GLOBAL(RCT2_ADDRESS_TOTAL_NO_IMAGES, uint32) = 0x726E; - RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_TEXT_TEMP_CHUNK, uint32) = (int)chunk; + gStexTempChunk = (rct_stex_entry*)chunk; // Not used anywhere. RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_TEXT_TEMP_OBJECT, rct_object_entry) = openedEntry; @@ -1739,9 +1740,9 @@ int object_get_scenario_text(rct_object_entry *entry) */ void object_free_scenario_text() { - if (RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_TEXT_TEMP_CHUNK, void*) != NULL) { - free(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_TEXT_TEMP_CHUNK, void*)); - RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_TEXT_TEMP_CHUNK, void*) = NULL; + if (gStexTempChunk != NULL) { + free(gStexTempChunk); + gStexTempChunk = NULL; } } diff --git a/src/object.h b/src/object.h index d2cf8d2824..c991489913 100644 --- a/src/object.h +++ b/src/object.h @@ -78,7 +78,7 @@ extern int object_entry_group_counts[]; extern int object_entry_group_encoding[]; typedef struct rct_object_entry_group { - uint8 **chunks; + void **chunks; rct_object_entry_extended *entries; } rct_object_entry_group; #ifdef PLATFORM_32BIT @@ -99,8 +99,7 @@ typedef struct rct_object_filters { assert_struct_size(rct_object_filters, 3); #pragma pack(pop) -extern rct_object_entry_group object_entry_groups[]; -extern void** gObjectList; +extern const rct_object_entry_group object_entry_groups[]; extern char gTempObjectLoadName[9]; extern uint32 gInstalledObjectsCount; diff --git a/src/object_list.c b/src/object_list.c index 1fd71edbe5..25f3b5ecd5 100644 --- a/src/object_list.c +++ b/src/object_list.c @@ -19,6 +19,7 @@ #include "game.h" #include "localisation/localisation.h" #include "object.h" +#include "object_list.h" #include "platform/platform.h" #include "rct1.h" #include "ride/track.h" @@ -72,22 +73,35 @@ int object_entry_group_encoding[] = { CHUNK_ENCODING_ROTATE }; -// 0x98D97C chunk address', 0x98D980 object_entries -rct_object_entry_group object_entry_groups[] = { - (uint8**)(RCT2_ADDRESS_RIDE_ENTRIES ), (rct_object_entry_extended*)(0x00F3F03C ), // rides - (uint8**)(RCT2_ADDRESS_SMALL_SCENERY_ENTRIES ), (rct_object_entry_extended*)(0x00F3F03C + (128 * 20)), // small scenery 0x009AD1A4, 0xF2FA3C - (uint8**)(RCT2_ADDRESS_LARGE_SCENERY_ENTRIES ), (rct_object_entry_extended*)(0x00F3F03C + (380 * 20)), // large scenery 0x009AD594, 0xF40DEC - (uint8**)(RCT2_ADDRESS_WALL_SCENERY_ENTRIES ), (rct_object_entry_extended*)(0x00F3F03C + (508 * 20)), // walls 0x009AD794, 0xF417EC - (uint8**)(RCT2_ADDRESS_BANNER_SCENERY_ENTRIES ), (rct_object_entry_extended*)(0x00F3F03C + (636 * 20)), // banners 0x009AD994, 0xF421EC - (uint8**)(RCT2_ADDRESS_PATH_TYPES ), (rct_object_entry_extended*)(0x00F3F03C + (668 * 20)), // paths 0x009ADA14, 0xF4246C - (uint8**)(RCT2_ADDRESS_PATH_BIT_SCENERY_ENTRIES), (rct_object_entry_extended*)(0x00F3F03C + (684 * 20)), // path bits 0x009ADA54, 0xF425AC - (uint8**)(RCT2_ADDRESS_SCENERY_SET_ENTRIES ), (rct_object_entry_extended*)(0x00F3F03C + (699 * 20)), // scenery sets 0x009ADA90, 0xF426D8 - (uint8**)(RCT2_ADDRESS_PARK_ENTRANCE_ENTRIES ), (rct_object_entry_extended*)(0x00F3F03C + (718 * 20)), // park entrance 0x009ADADC, 0xF42854 - (uint8**)(RCT2_ADDRESS_WATER_ENTRIES ), (rct_object_entry_extended*)(0x00F3F03C + (719 * 20)), // water 0x009ADAE0, 0xF42868 - (uint8**)(RCT2_ADDRESS_SCENARIO_TEXT_ENTRIES ), (rct_object_entry_extended*)(0x00F3F03C + (720 * 20)) // scenario text 0x009ADAE4, 0xF4287C -}; +#if NO_RCT2 + rct_ride_entry *gRideEntries[128]; + rct_small_scenery_entry *gSmallSceneryEntries[252]; + rct_large_scenery_entry *gLargeSceneryEntries[128]; + rct_wall_scenery_entry *gWallSceneryEntries[128]; + rct_banner *gBannerSceneryEntries[32]; + rct_footpath_entry *gFootpathEntries[16]; + rct_path_bit_scenery_entry *gFootpathAdditionEntries[15]; + rct_scenery_set_entry *gSceneryGroupEntries[19]; + rct_entrance_type *gParkEntranceEntries[1]; + rct_water_type *gWaterEntries[1]; + rct_stex_entry *gStexEntries[1]; +#endif -void **gObjectList = RCT2_ADDRESS(RCT2_ADDRESS_RIDE_ENTRIES, void*); + +// 0x98D97C chunk address', 0x98D980 object_entries +const rct_object_entry_group object_entry_groups[] = { + (void**)(gRideEntries ), (rct_object_entry_extended*)(0x00F3F03C ), // rides + (void**)(gSmallSceneryEntries ), (rct_object_entry_extended*)(0x00F3F03C + (128 * 20)), // small scenery 0x009AD1A4, 0xF2FA3C + (void**)(gLargeSceneryEntries ), (rct_object_entry_extended*)(0x00F3F03C + (380 * 20)), // large scenery 0x009AD594, 0xF40DEC + (void**)(gWallSceneryEntries ), (rct_object_entry_extended*)(0x00F3F03C + (508 * 20)), // walls 0x009AD794, 0xF417EC + (void**)(gBannerSceneryEntries ), (rct_object_entry_extended*)(0x00F3F03C + (636 * 20)), // banners 0x009AD994, 0xF421EC + (void**)(gFootpathEntries ), (rct_object_entry_extended*)(0x00F3F03C + (668 * 20)), // paths 0x009ADA14, 0xF4246C + (void**)(gFootpathAdditionEntries ), (rct_object_entry_extended*)(0x00F3F03C + (684 * 20)), // path bits 0x009ADA54, 0xF425AC + (void**)(gSceneryGroupEntries ), (rct_object_entry_extended*)(0x00F3F03C + (699 * 20)), // scenery sets 0x009ADA90, 0xF426D8 + (void**)(gParkEntranceEntries ), (rct_object_entry_extended*)(0x00F3F03C + (718 * 20)), // park entrance 0x009ADADC, 0xF42854 + (void**)(gWaterEntries ), (rct_object_entry_extended*)(0x00F3F03C + (719 * 20)), // water 0x009ADAE0, 0xF42868 + (void**)(gStexEntries ), (rct_object_entry_extended*)(0x00F3F03C + (720 * 20)) // scenario text 0x009ADAE4, 0xF4287C +}; 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); @@ -98,6 +112,8 @@ static void load_object_filter(rct_object_entry* entry, uint8* chunk, rct_object static rct_object_filters *_installedObjectFilters = NULL; +rct_stex_entry *gStexTempChunk; + uint32 gInstalledObjectsCount; rct_object_entry *gInstalledObjects; uint32 gNumInstalledRCT2Objects; @@ -885,3 +901,29 @@ rct_object_filters *get_object_filter(int index) { return &_installedObjectFilters[index]; } + +void object_list_init() +{ + for (uint8 objectType = 0; objectType < OBJECT_ENTRY_GROUP_COUNT; objectType++) { + for (size_t i = 0; i < object_entry_group_counts[objectType]; i++) { + object_entry_groups[objectType].chunks[i] = (void*)-1; + } + } +} + +void *get_loaded_object_entry(size_t index) +{ + uint8 objectType = OBJECT_TYPE_RIDE; + for (size_t i = 0; i < OBJECT_ENTRY_GROUP_COUNT; i++) { + size_t groupCount = object_entry_group_counts[i]; + if (index >= groupCount) { + index -= object_entry_group_counts[i]; + objectType++; + } else { + break; + } + } + + void *entry = object_entry_groups[objectType].chunks[index]; + return entry; +} diff --git a/src/object_list.h b/src/object_list.h new file mode 100644 index 0000000000..34b360b88e --- /dev/null +++ b/src/object_list.h @@ -0,0 +1,39 @@ +#pragma once + +#include "ride/ride.h" +#include "world/banner.h" +#include "world/entrance.h" +#include "world/footpath.h" +#include "world/scenery.h" +#include "world/water.h" + +#if NO_RCT2 + extern rct_ride_entry *gRideEntries[128]; + extern rct_small_scenery_entry *gSmallSceneryEntries[252]; + extern rct_large_scenery_entry *gLargeSceneryEntries[128]; + extern rct_wall_scenery_entry *gWallSceneryEntries[128]; + extern rct_banner *gBannerSceneryEntries[32]; + extern rct_footpath_entry *gFootpathEntries[16]; + extern rct_path_bit_scenery_entry *gFootpathAdditionEntries[15]; + extern rct_scenery_set_entry *gSceneryGroupEntries[19]; + extern rct_entrance_type *gParkEntranceEntries[1]; + extern rct_water_type *gWaterEntries[1]; + extern rct_stex_entry *gStexEntries[1]; +#else + #define gRideEntries RCT2_ADDRESS(RCT2_ADDRESS_RIDE_ENTRIES, rct_ride_entry*) + #define gSmallSceneryEntries RCT2_ADDRESS(RCT2_ADDRESS_SMALL_SCENERY_ENTRIES, rct_small_scenery_entry*) + #define gLargeSceneryEntries RCT2_ADDRESS(RCT2_ADDRESS_LARGE_SCENERY_ENTRIES, rct_large_scenery_entry*) + #define gWallSceneryEntries RCT2_ADDRESS(RCT2_ADDRESS_WALL_SCENERY_ENTRIES, rct_wall_scenery_entry*) + #define gBannerSceneryEntries RCT2_ADDRESS(RCT2_ADDRESS_BANNER_SCENERY_ENTRIES, rct_banner*) + #define gFootpathEntries RCT2_ADDRESS(RCT2_ADDRESS_PATH_TYPES, rct_footpath_entry*) + #define gFootpathAdditionEntries RCT2_ADDRESS(RCT2_ADDRESS_PATH_BIT_SCENERY_ENTRIES, rct_path_bit_scenery_entry*) + #define gSceneryGroupEntries RCT2_ADDRESS(RCT2_ADDRESS_SCENERY_SET_ENTRIES, rct_scenery_set_entry*) + #define gParkEntranceEntries RCT2_ADDRESS(RCT2_ADDRESS_PARK_ENTRANCE_ENTRIES, rct_entrance_type*) + #define gWaterEntries RCT2_ADDRESS(RCT2_ADDRESS_WATER_ENTRIES, rct_water_type*) + #define gStexEntries RCT2_ADDRESS(RCT2_ADDRESS_SCENARIO_TEXT_ENTRIES, rct_stex_entry*) +#endif + +extern rct_stex_entry *gStexTempChunk; + +void object_list_init(); +void *get_loaded_object_entry(size_t index); diff --git a/src/openrct2.c b/src/openrct2.c index 3e9f151cca..d23a700736 100644 --- a/src/openrct2.c +++ b/src/openrct2.c @@ -29,6 +29,7 @@ #include "localisation/localisation.h" #include "network/http.h" #include "network/network.h" +#include "object_list.h" #include "openrct2.h" #include "platform/crash.h" #include "platform/platform.h" @@ -220,6 +221,9 @@ bool openrct2_initialise() audio_init(); audio_populate_devices(); } + + object_list_init(); + if (!language_open(gConfigGeneral.language)) { log_error("Failed to open configured language..."); diff --git a/src/paint/map_element/fence.c b/src/paint/map_element/fence.c index 35bfb9ea1c..4ed0fb3394 100644 --- a/src/paint/map_element/fence.c +++ b/src/paint/map_element/fence.c @@ -135,7 +135,7 @@ void fence_paint(uint8 direction, int height, rct_map_element * map_element) rct_drawpixelinfo * dpi = RCT2_GLOBAL(0x140E9A8, rct_drawpixelinfo *); gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_WALL; - rct_scenery_entry * sceneryEntry = gWallSceneryEntries[map_element->properties.fence.type]; + rct_scenery_entry * sceneryEntry = get_wall_entry(map_element->properties.fence.type); uint32 frameNum = 0; if (sceneryEntry->wall.flags2 & WALL_SCENERY_2_FLAG_5) { diff --git a/src/rct2/S6Exporter.cpp b/src/rct2/S6Exporter.cpp index 43f22c160d..47c7c21544 100644 --- a/src/rct2/S6Exporter.cpp +++ b/src/rct2/S6Exporter.cpp @@ -231,15 +231,18 @@ void S6Exporter::Export() for (int i = 0; i < 721; i++) { rct_object_entry_extended *entry = &(RCT2_ADDRESS(0x00F3F03C, rct_object_entry_extended)[i]); - +// FIXME: not sure what's going on in here +/* if (gObjectList[i] == (void *)0xFFFFFFFF) { memset(&_s6.objects[i], 0xFF, sizeof(rct_object_entry)); } else +*/ { _s6.objects[i] = *((rct_object_entry*)entry); } + } _s6.elapsed_months = gDateMonthsElapsed; diff --git a/src/ride/ride.c b/src/ride/ride.c index efe8f7af7c..f5318b8a68 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -30,6 +30,7 @@ #include "../management/marketing.h" #include "../management/news_item.h" #include "../network/network.h" +#include "../object_list.h" #include "../peep/peep.h" #include "../peep/staff.h" #include "../rct1.h" @@ -41,14 +42,14 @@ #include "../world/footpath.h" #include "../world/map.h" #include "../world/map_animation.h" -#include "../world/sprite.h" #include "../world/scenery.h" +#include "../world/sprite.h" #include "cable_lift.h" #include "ride.h" #include "ride_data.h" +#include "station.h" #include "track.h" #include "track_data.h" -#include "station.h" #pragma region Ride classification table @@ -125,7 +126,6 @@ static const int RideInspectionInterval[] = { 10, 20, 30, 45, 60, 120, 0, 0 }; -rct_ride_entry **gRideTypeList = RCT2_ADDRESS(RCT2_ADDRESS_RIDE_ENTRIES, rct_ride_entry*); rct_ride* gRideList = RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride); rct_ride_measurement *gRideMeasurements = RCT2_ADDRESS(RCT2_ADDRESS_RIDE_MEASUREMENTS, rct_ride_measurement); bool gGotoStartPlacementMode = false; @@ -211,7 +211,7 @@ rct_ride_entry *get_ride_entry(int index) log_error("invalid index %d for ride type", index); return NULL; } - return gRideTypeList[index]; + return gRideEntries[index]; } void get_ride_entry_name(char *name, int index) diff --git a/src/scenario.c b/src/scenario.c index 566dcff2f9..7f22310439 100644 --- a/src/scenario.c +++ b/src/scenario.c @@ -29,6 +29,7 @@ #include "management/news_item.h" #include "network/network.h" #include "object.h" +#include "object_list.h" #include "openrct2.h" #include "peep/staff.h" #include "platform/platform.h" @@ -688,9 +689,10 @@ int scenario_get_num_packed_objects_to_write() rct_object_entry_extended *entry = (rct_object_entry_extended*)0x00F3F03C; for (i = 0; i < OBJECT_ENTRY_COUNT; i++, entry++) { - if (gObjectList[i] == (void *)0xFFFFFFFF || (entry->flags & 0xF0)) + void *entryData = get_loaded_object_entry(i); + if (entryData == (void*)0xFFFFFFFF || (entry->flags & 0xF0)) { continue; - + } count++; } @@ -706,11 +708,13 @@ int scenario_write_packed_objects(SDL_RWops* rw) int i; rct_object_entry_extended *entry = (rct_object_entry_extended*)0x00F3F03C; for (i = 0; i < OBJECT_ENTRY_COUNT; i++, entry++) { - if (gObjectList[i] == (void *)0xFFFFFFFF || (entry->flags & 0xF0)) + void *entryData = get_loaded_object_entry(i); + if (entryData == (void*)0xFFFFFFFF || (entry->flags & 0xF0)) { continue; - - if (!write_object_file(rw, (rct_object_entry*)entry)) + } + if (!write_object_file(rw, (rct_object_entry*)entry)) { return 0; + } } return 1; @@ -746,10 +750,12 @@ int scenario_write_available_objects(FILE *file) rct_object_entry_extended *srcEntry = (rct_object_entry_extended*)0x00F3F03C; rct_object_entry *dstEntry = (rct_object_entry*)buffer; for (i = 0; i < OBJECT_ENTRY_COUNT; i++) { - if (gObjectList[i] == (void *)0xFFFFFFFF) + void *entryData = get_loaded_object_entry(i); + if (entryData == (void*)0xFFFFFFFF) { memset(dstEntry, 0xFF, sizeof(rct_object_entry)); - else + } else { *dstEntry = *((rct_object_entry*)srcEntry); + } srcEntry++; dstEntry++; diff --git a/src/scenario_list.c b/src/scenario_list.c index 68d6c1ff23..c2d9538a8a 100644 --- a/src/scenario_list.c +++ b/src/scenario_list.c @@ -17,6 +17,7 @@ #include "addresses.h" #include "config.h" #include "localisation/localisation.h" +#include "object_list.h" #include "platform/platform.h" #include "scenario.h" #include "util/util.h" @@ -196,7 +197,7 @@ static void scenario_translate(scenario_index_entry *scenarioEntry, const rct_ob // Checks for a scenario string object (possibly for localisation) if ((stexObjectEntry->flags & 0xFF) != 255) { if (object_get_scenario_text((rct_object_entry*)stexObjectEntry)) { - rct_stex_entry* stex_entry = RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_TEXT_TEMP_CHUNK, rct_stex_entry*); + rct_stex_entry* stex_entry = gStexTempChunk; format_string(scenarioEntry->name, stex_entry->scenario_name, NULL); format_string(scenarioEntry->details, stex_entry->details, NULL); object_free_scenario_text(); diff --git a/src/windows/editor_object_selection.c b/src/windows/editor_object_selection.c index 3d74519d74..53d294ba5a 100644 --- a/src/windows/editor_object_selection.c +++ b/src/windows/editor_object_selection.c @@ -26,6 +26,7 @@ #include "../localisation/localisation.h" #include "../management/research.h" #include "../object.h" +#include "../object_list.h" #include "../rct1.h" #include "../ride/ride.h" #include "../ride/ride_data.h" @@ -1293,7 +1294,7 @@ static void window_editor_object_selection_paint(rct_window *w, rct_drawpixelinf gfx_draw_string_left(dpi, 3164, gCommonFormatArgs, 0, x, y); } - rct_stex_entry* stex_entry = RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_TEXT_TEMP_CHUNK, rct_stex_entry*); + rct_stex_entry* stex_entry = gStexTempChunk; /*gfx_fill_rect_inset(dpi, w->x + window_editor_object_selection_widgets[WIDX_FILTER_STRING_BUTTON].left, diff --git a/src/world/footpath.c b/src/world/footpath.c index a16b140d62..6eaac1da90 100644 --- a/src/world/footpath.c +++ b/src/world/footpath.c @@ -22,6 +22,7 @@ #include "../management/finance.h" #include "../network/network.h" #include "../util/util.h" +#include "../object_list.h" #include "footpath.h" #include "map.h" #include "map_animation.h" diff --git a/src/world/footpath.h b/src/world/footpath.h index bc9270abb1..198aeac6fc 100644 --- a/src/world/footpath.h +++ b/src/world/footpath.h @@ -46,8 +46,6 @@ enum { FOOTPATH_SEARCH_TOO_COMPLEX }; -#define gFootpathEntries ((rct_footpath_entry**)object_entry_groups[OBJECT_TYPE_PATHS].chunks) - extern uint8 gFootpathProvisionalFlags; extern rct_xyz16 gFootpathProvisionalPosition; extern uint8 gFootpathConstructionMode; diff --git a/src/world/scenery.c b/src/world/scenery.c index 611f0a040d..1eb2f4d403 100644 --- a/src/world/scenery.c +++ b/src/world/scenery.c @@ -20,6 +20,7 @@ #include "../localisation/localisation.h" #include "../scenario.h" #include "../cheats.h" +#include "../object_list.h" #include "climate.h" #include "fountain.h" #include "map.h" @@ -240,30 +241,30 @@ void scenery_remove_ghost_tool_placement(){ rct_scenery_entry *get_small_scenery_entry(int entryIndex) { - return gSmallSceneryEntries[entryIndex]; + return (rct_scenery_entry*)gSmallSceneryEntries[entryIndex]; } rct_scenery_entry *get_large_scenery_entry(int entryIndex) { - return gLargeSceneryEntries[entryIndex]; + return (rct_scenery_entry*)gLargeSceneryEntries[entryIndex]; } rct_scenery_entry *get_wall_entry(int entryIndex) { - return gWallSceneryEntries[entryIndex]; + return (rct_scenery_entry*)gWallSceneryEntries[entryIndex]; } rct_scenery_entry *get_banner_entry(int entryIndex) { - return gBannerSceneryEntries[entryIndex]; + return (rct_scenery_entry*)gBannerSceneryEntries[entryIndex]; } rct_scenery_entry *get_footpath_item_entry(int entryIndex) { - return gPathBitSceneryEntries[entryIndex]; + return (rct_scenery_entry*)gFootpathAdditionEntries[entryIndex]; } rct_scenery_set_entry *get_scenery_group_entry(int entryIndex) { - return gScenerySetEntries[entryIndex]; + return (rct_scenery_set_entry*)gSceneryGroupEntries[entryIndex]; } diff --git a/src/world/scenery.h b/src/world/scenery.h index 9a2f5e990b..0f46018a55 100644 --- a/src/world/scenery.h +++ b/src/world/scenery.h @@ -208,16 +208,6 @@ enum { #define SCENERY_ENTRIES_BY_TAB 128 -#define gSmallSceneryEntries ((rct_scenery_entry**)object_entry_groups[OBJECT_TYPE_SMALL_SCENERY].chunks) -#define gLargeSceneryEntries ((rct_scenery_entry**)object_entry_groups[OBJECT_TYPE_LARGE_SCENERY].chunks) -#define gWallSceneryEntries ((rct_scenery_entry**)object_entry_groups[OBJECT_TYPE_WALLS].chunks) -#define gBannerSceneryEntries ((rct_scenery_entry**)object_entry_groups[OBJECT_TYPE_BANNERS].chunks) - -// Often 0x009ADA50 is used for pathBits this is 1 entry before g_pathBitSceneryEntries and is used -// because 0 represents no path bits on a path. So remember to remove 1 when using it for 0x009ADA50 -#define gPathBitSceneryEntries ((rct_scenery_entry**)object_entry_groups[OBJECT_TYPE_PATH_BITS].chunks) -#define gScenerySetEntries ((rct_scenery_set_entry**)object_entry_groups[OBJECT_TYPE_SCENERY_SETS].chunks) - extern uint8 gWindowSceneryActiveTabIndex; extern uint16 gWindowSceneryTabSelections[20]; extern uint8 gWindowSceneryClusterEnabled;