diff --git a/src/object/ObjectManager.cpp b/src/object/ObjectManager.cpp index f430c668cb..ac9c8b72eb 100644 --- a/src/object/ObjectManager.cpp +++ b/src/object/ObjectManager.cpp @@ -462,4 +462,10 @@ extern "C" IObjectManager * objectManager = GetObjectManager(); objectManager->UnloadObjects(entries, count); } + + void object_manager_unload_all_objects() + { + IObjectManager * objectManager = GetObjectManager(); + objectManager->UnloadAll(); + } } diff --git a/src/object/ObjectManager.h b/src/object/ObjectManager.h index 452ff979bb..2a1c12dbc6 100644 --- a/src/object/ObjectManager.h +++ b/src/object/ObjectManager.h @@ -53,5 +53,6 @@ void * object_manager_get_loaded_object(const rct_object_entry * entry); uint8 object_manager_get_loaded_object_entry_index(const void * loadedObject); void * object_manager_load_object(const rct_object_entry * entry); void object_manager_unload_objects(const rct_object_entry * entries, size_t count); +void object_manager_unload_all_objects(); #endif diff --git a/src/ride/track_design.c b/src/ride/track_design.c index d09a3b90b8..e70f18d668 100644 --- a/src/ride/track_design.c +++ b/src/ride/track_design.c @@ -22,6 +22,7 @@ #include "../localisation/string_ids.h" #include "../management/finance.h" #include "../network/network.h" +#include "../object/ObjectManager.h" #include "../rct1.h" #include "../util/sawyercoding.h" #include "../util/util.h" @@ -325,26 +326,18 @@ void track_design_dispose(rct_track_td6 *td6) */ static void track_design_load_scenery_objects(rct_track_td6 *td6) { - uint8 entry_index = RCT2_GLOBAL(0xF44157, uint8); - rct_object_entry_extended* object_entry = &object_entry_groups[0].entries[entry_index]; + object_manager_unload_all_objects(); - rct_object_entry* copied_entry = RCT2_ADDRESS(0xF43414, rct_object_entry); - memcpy(copied_entry, object_entry, sizeof(rct_object_entry)); - - object_unload_all(); - object_load_chunk(-1, copied_entry, 0); - uint8 entry_type; - find_object_in_entry_group(copied_entry, &entry_type, &entry_index); - RCT2_GLOBAL(0xF44157, uint8) = entry_index; + // Load ride object + rct_object_entry * rideEntry = &td6->vehicle_object; + void * loadedObject = object_manager_load_object(rideEntry); + // Load scenery objects rct_td6_scenery_element *scenery = td6->scenery_elements; for (; (scenery->scenery_object.flags & 0xFF) != 0xFF; scenery++) { - if (!find_object_in_entry_group(&scenery->scenery_object, &entry_type, &entry_index)) { - object_load_chunk(-1, &scenery->scenery_object, 0); - } + rct_object_entry * sceneryEntry = &scenery->scenery_object; + object_manager_load_object(sceneryEntry); } - - reset_loaded_objects(); } /** diff --git a/src/windows/editor_object_selection.c b/src/windows/editor_object_selection.c index a9f67bf558..8350eb933c 100644 --- a/src/windows/editor_object_selection.c +++ b/src/windows/editor_object_selection.c @@ -1693,8 +1693,6 @@ static void window_editor_object_selection_manage_tracks() int entry_index = 0; for (; ((int)object_entry_groups[0].chunks[entry_index]) == -1; ++entry_index); - RCT2_GLOBAL(0xF44157, uint8) = entry_index; - rct_ride_entry* ride_entry = get_ride_entry(entry_index); uint8* ride_type_array = &ride_entry->ride_type[0];