mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-06 06:32:56 +01:00
remove object entry addresses and use constants
This commit is contained in:
@@ -561,7 +561,7 @@ IObjectRepository * GetObjectRepository()
|
||||
return _objectRepository;
|
||||
}
|
||||
|
||||
Object * _loadedObjects[721] = { nullptr };
|
||||
Object * _loadedObjects[OBJECT_ENTRY_COUNT] = { nullptr };
|
||||
|
||||
int GetObjectEntryIndex(uint8 objectType, uint8 entryIndex)
|
||||
{
|
||||
@@ -640,7 +640,7 @@ extern "C"
|
||||
|
||||
void reset_loaded_objects()
|
||||
{
|
||||
for (int i = 0; i < 721; i++)
|
||||
for (int i = 0; i < OBJECT_ENTRY_COUNT; i++)
|
||||
{
|
||||
Object * object = _loadedObjects[i];
|
||||
if (object != nullptr)
|
||||
@@ -662,7 +662,7 @@ extern "C"
|
||||
|
||||
void * object_repository_find_loaded_object(const rct_object_entry * objectEntry)
|
||||
{
|
||||
for (size_t i = 0; i < 721; i++)
|
||||
for (size_t i = 0; i < OBJECT_ENTRY_COUNT; i++)
|
||||
{
|
||||
Object * object = _loadedObjects[i];
|
||||
if (object != nullptr)
|
||||
@@ -690,7 +690,7 @@ extern "C"
|
||||
|
||||
void object_unload_all()
|
||||
{
|
||||
for (int i = 0; i < 721; i++)
|
||||
for (int i = 0; i < OBJECT_ENTRY_COUNT; i++)
|
||||
{
|
||||
Object * object = _loadedObjects[i];
|
||||
if (object != nullptr)
|
||||
|
||||
@@ -259,19 +259,37 @@ void object_list_init()
|
||||
}
|
||||
}
|
||||
|
||||
void *get_loaded_object_entry(size_t index)
|
||||
void get_type_entry_index(size_t index, uint8 * outObjectType, uint8 * outEntryIndex)
|
||||
{
|
||||
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];
|
||||
index -= groupCount;
|
||||
objectType++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void *entry = object_entry_groups[objectType].chunks[index];
|
||||
if (outObjectType != NULL) *outObjectType = objectType;
|
||||
if (outEntryIndex != NULL) *outEntryIndex = (uint8)index;
|
||||
}
|
||||
|
||||
const rct_object_entry * get_loaded_object_entry(size_t index)
|
||||
{
|
||||
uint8 objectType, entryIndex;
|
||||
get_type_entry_index(index, &objectType, &entryIndex);
|
||||
|
||||
rct_object_entry * entry = (rct_object_entry *)&(object_entry_groups[objectType].entries[entryIndex]);
|
||||
return entry;
|
||||
}
|
||||
|
||||
void * get_loaded_object_chunk(size_t index)
|
||||
{
|
||||
uint8 objectType, entryIndex;
|
||||
get_type_entry_index(index, &objectType, &entryIndex);
|
||||
|
||||
void *entry = object_entry_groups[objectType].chunks[entryIndex];
|
||||
return entry;
|
||||
}
|
||||
|
||||
@@ -34,4 +34,5 @@
|
||||
#endif
|
||||
|
||||
void object_list_init();
|
||||
void *get_loaded_object_entry(size_t index);
|
||||
const rct_object_entry * get_loaded_object_entry(size_t index);
|
||||
void * get_loaded_object_chunk(size_t index);
|
||||
|
||||
@@ -132,7 +132,7 @@ void S6Exporter::Save(SDL_RWops * rw, bool isScenario)
|
||||
|
||||
// 3: Write available objects chunk
|
||||
chunkHeader.encoding = CHUNK_ENCODING_ROTATE;
|
||||
chunkHeader.length = 721 * sizeof(rct_object_entry);
|
||||
chunkHeader.length = OBJECT_ENTRY_COUNT * sizeof(rct_object_entry);
|
||||
encodedLength = sawyercoding_write_chunk_buffer(buffer, (uint8*)_s6.objects, chunkHeader);
|
||||
SDL_RWwrite(rw, buffer, encodedLength, 1);
|
||||
|
||||
@@ -228,19 +228,18 @@ void S6Exporter::Export()
|
||||
{
|
||||
_s6.info = *gS6Info;
|
||||
|
||||
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]);
|
||||
void *entryData = get_loaded_object_entry(i);
|
||||
const rct_object_entry * entry = get_loaded_object_entry(i);
|
||||
void * entryData = get_loaded_object_chunk(i);
|
||||
if (entryData == (void *)0xFFFFFFFF)
|
||||
{
|
||||
memset(&_s6.objects[i], 0xFF, sizeof(rct_object_entry));
|
||||
Memory::Set(&_s6.objects[i], 0xFF, sizeof(rct_object_entry));
|
||||
}
|
||||
else
|
||||
{
|
||||
_s6.objects[i] = *((rct_object_entry*)entry);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_s6.elapsed_months = gDateMonthsElapsed;
|
||||
|
||||
@@ -700,17 +700,14 @@ int scenario_prepare_for_save()
|
||||
*/
|
||||
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 < OBJECT_ENTRY_COUNT; i++, entry++) {
|
||||
void *entryData = get_loaded_object_entry(i);
|
||||
if (entryData == (void*)0xFFFFFFFF || (entry->flags & 0xF0)) {
|
||||
continue;
|
||||
int count = 0;
|
||||
for (int i = 0; i < OBJECT_ENTRY_COUNT; i++) {
|
||||
const rct_object_entry *entry = get_loaded_object_entry(i);
|
||||
void *entryData = get_loaded_object_chunk(i);
|
||||
if (entryData != (void*)0xFFFFFFFF && !(entry->flags & 0xF0)) {
|
||||
count++;
|
||||
}
|
||||
count++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
@@ -720,18 +717,15 @@ int scenario_get_num_packed_objects_to_write()
|
||||
*/
|
||||
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++) {
|
||||
void *entryData = get_loaded_object_entry(i);
|
||||
if (entryData == (void*)0xFFFFFFFF || (entry->flags & 0xF0)) {
|
||||
continue;
|
||||
}
|
||||
if (!object_saved_packed(rw, (rct_object_entry*)entry)) {
|
||||
return 0;
|
||||
for (int i = 0; i < OBJECT_ENTRY_COUNT; i++) {
|
||||
const rct_object_entry *entry = get_loaded_object_entry(i);
|
||||
void *entryData = get_loaded_object_chunk(i);
|
||||
if (entryData != (void*)0xFFFFFFFF && !(entry->flags & 0xF0)) {
|
||||
if (!object_saved_packed(rw, entry)) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -745,7 +739,7 @@ int scenario_write_available_objects(FILE *file)
|
||||
int i, encodedLength;
|
||||
sawyercoding_chunk_header chunkHeader;
|
||||
|
||||
const int totalEntries = 721;
|
||||
const int totalEntries = OBJECT_ENTRY_COUNT;
|
||||
const int bufferLength = totalEntries * sizeof(rct_object_entry);
|
||||
|
||||
// Initialise buffers
|
||||
@@ -762,17 +756,14 @@ 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 < OBJECT_ENTRY_COUNT; i++) {
|
||||
void *entryData = get_loaded_object_entry(i);
|
||||
void *entryData = get_loaded_object_chunk(i);
|
||||
if (entryData == (void*)0xFFFFFFFF) {
|
||||
memset(dstEntry, 0xFF, sizeof(rct_object_entry));
|
||||
} else {
|
||||
*dstEntry = *((rct_object_entry*)srcEntry);
|
||||
*dstEntry = *get_loaded_object_entry(i);
|
||||
}
|
||||
|
||||
srcEntry++;
|
||||
dstEntry++;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user