integrate variables: object entry lists

This commit is contained in:
Ted John 2016-06-15 14:59:01 +02:00 committed by Michał Janiszewski
parent 7c9f59f1c5
commit d07b9535c2
18 changed files with 155 additions and 70 deletions

View File

@ -415,6 +415,7 @@
<ClInclude Include="src\network\network.h" />
<ClInclude Include="src\network\NetworkKey.h" />
<ClInclude Include="src\object.h" />
<ClInclude Include="src\object_list.h" />
<ClInclude Include="src\openrct2.h" />
<ClInclude Include="src\paint\map_element\map_element.h" />
<ClInclude Include="src\paint\map_element\surface.h" />

View File

@ -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

View File

@ -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

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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;
}

39
src/object_list.h Normal file
View File

@ -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);

View File

@ -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...");

View File

@ -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) {

View File

@ -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;

View File

@ -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)

View File

@ -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++;

View File

@ -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();

View File

@ -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,

View File

@ -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"

View File

@ -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;

View File

@ -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];
}

View File

@ -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;