mirror of https://github.com/OpenRCT2/OpenRCT2.git
Refactor of object_list.c
This commit is contained in:
parent
ddcf766fea
commit
936f2f127f
|
@ -156,7 +156,7 @@ void editor_convert_save_to_scenario()
|
|||
if ((int)stex != 0xFFFFFFFF) {
|
||||
object_unload(0, &object_entry_groups[OBJECT_TYPE_SCENARIO_TEXT].entries[0]);
|
||||
//RCT2_CALLPROC_EBPSAFE(0x006A9FC0);
|
||||
sub_6A9FC0();
|
||||
reset_loaded_objects();
|
||||
|
||||
format_string(s6Info->details, STR_NO_DETAILS_YET, NULL);
|
||||
s6Info->name[0] = 0;
|
||||
|
@ -464,7 +464,7 @@ static void sub_6A2B62()
|
|||
object_unload_all();
|
||||
|
||||
RCT2_CALLPROC_EBPSAFE(0x0069F53D);
|
||||
sub_6A9FC0();//RCT2_CALLPROC_EBPSAFE(0x006A9FC0);
|
||||
reset_loaded_objects();
|
||||
RCT2_CALLPROC_EBPSAFE(0x006A2730);
|
||||
RCT2_CALLPROC_EBPSAFE(0x006A2956);
|
||||
RCT2_CALLPROC_EBPSAFE(0x006A29B9);
|
||||
|
@ -836,7 +836,7 @@ static int editor_read_s6(const char *path)
|
|||
// Check expansion pack
|
||||
// RCT2_CALLPROC_EBPSAFE(0x006757E6);
|
||||
|
||||
sub_6A9FC0();//RCT2_CALLPROC_EBPSAFE(0x006A9FC0);
|
||||
reset_loaded_objects();//RCT2_CALLPROC_EBPSAFE(0x006A9FC0);
|
||||
map_update_tile_pointers();
|
||||
map_remove_all_rides();
|
||||
|
||||
|
@ -915,7 +915,7 @@ static int editor_read_s6(const char *path)
|
|||
rct_stex_entry* stex = g_stexEntries[0];
|
||||
if ((int)stex != 0xFFFFFFFF) {
|
||||
object_unload(0, &object_entry_groups[OBJECT_TYPE_SCENARIO_TEXT].entries[0]);
|
||||
sub_6A9FC0();//RCT2_CALLPROC_EBPSAFE(0x006A9FC0);
|
||||
reset_loaded_objects();//RCT2_CALLPROC_EBPSAFE(0x006A9FC0);
|
||||
|
||||
format_string(s6Info->details, STR_NO_DETAILS_YET, NULL);
|
||||
s6Info->name[0] = 0;
|
||||
|
|
22
src/game.c
22
src/game.c
|
@ -663,7 +663,7 @@ int game_load_save(const char *path)
|
|||
}
|
||||
|
||||
// The rest is the same as in scenario load and play
|
||||
sub_6A9FC0();//RCT2_CALLPROC_EBPSAFE(0x006A9FC0);
|
||||
reset_loaded_objects();
|
||||
map_update_tile_pointers();
|
||||
reset_0x69EBE4();// RCT2_CALLPROC_EBPSAFE(0x0069EBE4);
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) = SCREEN_FLAGS_PLAYING;
|
||||
|
@ -811,6 +811,26 @@ void game_autosave()
|
|||
scenario_save(path, 0x80000000);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006E3838
|
||||
*/
|
||||
void rct2_exit_reason(rct_string_id title, rct_string_id body){
|
||||
// Before this would set a quit message
|
||||
|
||||
char exit_title[255];
|
||||
format_string(exit_title, title, 0);
|
||||
|
||||
char exit_body[255];
|
||||
format_string(exit_body, body, 0);
|
||||
|
||||
log_error(exit_title);
|
||||
log_error(exit_body);
|
||||
|
||||
rct2_exit();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006E3879
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
#ifndef _GAME_H_
|
||||
#define _GAME_H_
|
||||
|
||||
#include "common.h"
|
||||
|
||||
enum GAME_COMMAND {
|
||||
GAME_COMMAND_0,
|
||||
GAME_COMMAND_1,
|
||||
|
@ -109,6 +111,7 @@ int game_load_save(const char *path);
|
|||
void game_pause_toggle(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp);
|
||||
char save_game();
|
||||
void rct2_exit();
|
||||
void rct2_exit_reason(rct_string_id title, rct_string_id body);
|
||||
void game_autosave();
|
||||
|
||||
#endif
|
||||
|
|
|
@ -87,7 +87,7 @@ int object_calculate_checksum(const rct_object_entry *entry, const char *data, i
|
|||
int object_paint(int type, int eax, int ebx, int ecx, int edx, int esi, int edi, int ebp);
|
||||
rct_object_entry *object_get_next(rct_object_entry *entry);
|
||||
int write_object_file(FILE *file, rct_object_entry* entry);
|
||||
void sub_6A9FC0();
|
||||
void reset_loaded_objects();
|
||||
int find_object_in_entry_group(rct_object_entry* entry, uint8* entry_type, uint8* entry_index);
|
||||
|
||||
rct_object_entry *object_list_find(rct_object_entry *entry);
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "platform/platform.h"
|
||||
#include "ride/track.h"
|
||||
#include "util/sawyercoding.h"
|
||||
#include "game.h"
|
||||
|
||||
#define OBJECT_ENTRY_GROUP_COUNT 11
|
||||
#define OBJECT_ENTRY_COUNT 721
|
||||
|
@ -165,19 +166,10 @@ static void object_list_examine()
|
|||
object_list_create_hash_table();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006DED68
|
||||
*/
|
||||
void reset_9E32F8()
|
||||
/* rct2: 0x006A9FC0 */
|
||||
void reset_loaded_objects()
|
||||
{
|
||||
uint8* edi = RCT2_ADDRESS(0x009E32F8, uint8);
|
||||
memset(edi, 0xFF, 90);
|
||||
}
|
||||
|
||||
void sub_6A9FC0()
|
||||
{
|
||||
reset_9E32F8();
|
||||
reset_type_to_ride_entry_index_map();
|
||||
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_TOTAL_NO_IMAGES, uint32) = 0xF26E;
|
||||
|
||||
|
@ -248,7 +240,7 @@ void object_list_load()
|
|||
//if (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FIRST_TIME_LOAD_OBJECTS, uint8) != 0)
|
||||
// RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FIRST_TIME_LOAD_OBJECTS, uint8) = 0;
|
||||
|
||||
sub_6A9FC0();
|
||||
reset_loaded_objects();
|
||||
|
||||
// Dispose installed object list
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_INSTALLED_OBJECT_LIST, sint32) != -1) {
|
||||
|
@ -259,7 +251,8 @@ void object_list_load()
|
|||
RCT2_GLOBAL(RCT2_ADDRESS_OBJECT_LIST_NO_ITEMS, uint32) = 0;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_INSTALLED_OBJECT_LIST, void*) = rct2_malloc(4096);
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_INSTALLED_OBJECT_LIST, int) == -1){
|
||||
RCT2_CALLPROC_X(0x006E3838, 0x343, 0xC5A, 0, 0, 0, 0, 0);
|
||||
log_error("Failed to allocate memory for object list");
|
||||
rct2_exit_reason(835, 3162);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -280,7 +273,8 @@ void object_list_load()
|
|||
installed_buffer_size += 0x1000;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_INSTALLED_OBJECT_LIST, void*) = rct2_realloc(RCT2_GLOBAL(RCT2_ADDRESS_INSTALLED_OBJECT_LIST, void*), installed_buffer_size);
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_INSTALLED_OBJECT_LIST, int) == -1){
|
||||
RCT2_CALLPROC_X(0x006E3838, 0x343, 0xC5A, 0, 0, 0, 0, 0);
|
||||
log_error("Failed to allocate memory for object list");
|
||||
rct2_exit_reason(835, 3162);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -288,18 +282,18 @@ void object_list_load()
|
|||
char path[MAX_PATH];
|
||||
subsitute_path(path, RCT2_ADDRESS(RCT2_ADDRESS_OBJECT_DATA_PATH, char), enumFileInfo.path);
|
||||
|
||||
rct_object_entry* entry = RCT2_ADDRESS(0x00F42B74, rct_object_entry);
|
||||
if (!object_load_entry(path, entry))
|
||||
rct_object_entry entry;
|
||||
if (!object_load_entry(path, &entry))
|
||||
continue;
|
||||
|
||||
rct_object_entry* installed_entry = (rct_object_entry*)(RCT2_GLOBAL(RCT2_ADDRESS_INSTALLED_OBJECT_LIST, uint8*) + current_item_offset);
|
||||
|
||||
current_item_offset += install_object_entry(entry, installed_entry, enumFileInfo.path);
|
||||
current_item_offset += install_object_entry(&entry, installed_entry, enumFileInfo.path);
|
||||
}
|
||||
platform_enumerate_files_end(enumFileHandle);
|
||||
}
|
||||
|
||||
sub_6A9FC0();
|
||||
reset_loaded_objects();
|
||||
|
||||
object_list_cache_save(fileCount, totalFileSize, fileDateModifiedChecksum, current_item_offset);
|
||||
|
||||
|
@ -349,7 +343,7 @@ static int object_list_cache_load(int totalFiles, uint64 totalFileSize, int file
|
|||
log_error("Potential mismatch in file numbers. Possible corrupt file. Consider deleting plugin.dat.");
|
||||
|
||||
fclose(file);
|
||||
sub_6A9FC0();
|
||||
reset_loaded_objects();
|
||||
object_list_examine();
|
||||
return 1;
|
||||
}
|
||||
|
@ -493,7 +487,7 @@ void object_unload_all()
|
|||
if (object_entry_groups[i].chunks[j] != (uint8*)0xFFFFFFFF)
|
||||
object_unload(j, &object_entry_groups[i].entries[j]);
|
||||
|
||||
sub_6A9FC0();
|
||||
reset_loaded_objects();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -140,6 +140,15 @@ rct_ride_type *ride_get_entry(rct_ride *ride)
|
|||
return GET_RIDE_ENTRY(ride->subtype);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006DED68
|
||||
*/
|
||||
void reset_type_to_ride_entry_index_map(){
|
||||
uint8* typeToRideEntryIndexMap = RCT2_ADDRESS(0x009E32F8, uint8);
|
||||
memset(typeToRideEntryIndexMap, 0xFF, 90);
|
||||
}
|
||||
|
||||
uint8 *get_ride_entry_indices_for_ride_type(uint8 rideType)
|
||||
{
|
||||
uint8 *typeToRideEntryIndexMap = (uint8*)0x009E32F8;
|
||||
|
|
|
@ -674,6 +674,7 @@ track_colour ride_get_track_colour(rct_ride *ride, int colourScheme);
|
|||
vehicle_colour ride_get_vehicle_colour(rct_ride *ride, int vehicleIndex);
|
||||
rct_ride_type *ride_get_entry(rct_ride *ride);
|
||||
uint8 *get_ride_entry_indices_for_ride_type(uint8 rideType);
|
||||
void reset_type_to_ride_entry_index_map();
|
||||
void ride_measurement_clear(rct_ride *ride);
|
||||
void ride_measurements_update();
|
||||
rct_ride_measurement *ride_get_measurement(int rideIndex, rct_string_id *message);
|
||||
|
|
|
@ -738,7 +738,7 @@ void load_track_scenery_objects(){
|
|||
scenery_entry += sizeof(rct_track_scenery);
|
||||
}
|
||||
|
||||
sub_6A9FC0();
|
||||
reset_loaded_objects();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -172,7 +172,7 @@ int scenario_load(const char *path)
|
|||
// Check expansion pack
|
||||
// RCT2_CALLPROC_EBPSAFE(0x006757E6);
|
||||
|
||||
sub_6A9FC0();
|
||||
reset_loaded_objects();
|
||||
map_update_tile_pointers();
|
||||
reset_0x69EBE4();// RCT2_CALLPROC_EBPSAFE(0x0069EBE4);
|
||||
return 1;
|
||||
|
@ -1133,7 +1133,7 @@ int scenario_save(char *path, int flags)
|
|||
fclose(file);
|
||||
|
||||
if (!(flags & 0x80000000))
|
||||
sub_6A9FC0();//RCT2_CALLPROC_EBPSAFE(0x006A9FC0);
|
||||
reset_loaded_objects();//RCT2_CALLPROC_EBPSAFE(0x006A9FC0);
|
||||
|
||||
gfx_invalidate_screen();
|
||||
RCT2_GLOBAL(0x009DEA66, uint16) = 0;
|
||||
|
|
|
@ -252,7 +252,7 @@ static void window_editor_object_selection_close()
|
|||
|
||||
RCT2_CALLPROC_EBPSAFE(0x6ABB66);
|
||||
editor_load_selected_objects();
|
||||
sub_6A9FC0();
|
||||
reset_loaded_objects();
|
||||
object_free_scenario_text();
|
||||
RCT2_CALLPROC_EBPSAFE(0x6AB316);
|
||||
RCT2_CALLPROC_EBPSAFE(0x685675);
|
||||
|
|
Loading…
Reference in New Issue