extends Node func saveGameData(file_name: String): var save_data = GameSaveResource.new() var objects_container = get_node_or_null("/root/World/objects") if objects_container: for object in objects_container.get_children(): # Recursively force ownership of ALL child structures to the root object set_owner_recursive(object, object) var packed_node = PackedScene.new() if packed_node.pack(object) == OK: save_data.stored_scenes.append(packed_node) var player_node = get_node_or_null("/root/World/PlayerController") if player_node: var hotbar_control = player_node.get_node_or_null("Camera3D/CanvasLayer/HotBar") if hotbar_control and "hotbar" in hotbar_control: save_data.stored_hotbar = hotbar_control.hotbar.duplicate(true) for child in player_node.get_children(): child.owner = player_node var packed_player = PackedScene.new() if packed_player.pack(player_node) == OK: save_data.stored_player = packed_player var full_path = "user://" + file_name var save_result = ResourceSaver.save(save_data, full_path) if save_result == OK: print("Successfully saved all nodes and items to: ", full_path) func set_owner_recursive(node: Node, root: Node): if node != root: node.owner = root for child in node.get_children(): set_owner_recursive(child, root) func loadGameData(file_name: String): var full_path = "user://" + file_name if not ResourceLoader.exists(full_path): print("Error: Save file '", full_path, "' does not exist.") return var save_data = ResourceLoader.load(full_path) as GameSaveResource if not save_data: print("Error: Could not parse save file.") return var objects_node = get_node_or_null("/root/World/objects") if objects_node: for child in objects_node.get_children(): child.queue_free() for packed_node in save_data.stored_scenes: if packed_node: objects_node.add_child(packed_node.instantiate()) if save_data.stored_player: var current_player = get_node_or_null("/root/World/PlayerController") if current_player: var player_parent = current_player.get_parent() var restored_player = save_data.stored_player.instantiate() restored_player.name = "PlayerController_New" var hotbar_control = restored_player.get_node_or_null("Camera3D/CanvasLayer/HotBar") if hotbar_control and save_data.stored_hotbar: hotbar_control.hotbar = save_data.stored_hotbar.duplicate(true) player_parent.add_child(restored_player) current_player.queue_free() await get_tree().process_frame if is_instance_valid(restored_player): restored_player.name = "PlayerController" var final_hotbar = restored_player.get_node_or_null("Camera3D/CanvasLayer/HotBar") if final_hotbar and final_hotbar.has_method("updateHotbar"): final_hotbar.updateHotbar(final_hotbar.hotbar) print("Player and inventory data successfully restored!") print("Successfully reloaded game state from disk!")