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;