mirror of https://github.com/OpenRCT2/OpenRCT2.git
integrate variables: object entry lists
This commit is contained in:
parent
7c9f59f1c5
commit
d07b9535c2
|
@ -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" />
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
29
src/object.c
29
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
|
@ -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...");
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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++;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue