From 729a60f6c00c9cf2423b54ddb010cfa305d36e43 Mon Sep 17 00:00:00 2001 From: Julian Murgia Date: Mon, 15 Nov 2021 09:18:15 +0100 Subject: [PATCH] Manage save game in case of room loading failure (#441) --- addons/escoria-core/game/core-scripts/esc/types/esc_object.gd | 3 ++- addons/escoria-core/game/core-scripts/esc_room.gd | 3 ++- addons/escoria-core/game/main.gd | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/addons/escoria-core/game/core-scripts/esc/types/esc_object.gd b/addons/escoria-core/game/core-scripts/esc/types/esc_object.gd index 10f14b69..3edde98d 100644 --- a/addons/escoria-core/game/core-scripts/esc/types/esc_object.gd +++ b/addons/escoria-core/game/core-scripts/esc/types/esc_object.gd @@ -70,7 +70,8 @@ func get_save_data() -> Dictionary: save_data["interactive"] = self.interactive save_data["state"] = self.state - if self.node.get("is_movable") and self.node.is_movable: + if is_instance_valid(self.node) and \ + self.node.get("is_movable") and self.node.is_movable: save_data["global_transform"] = self.node.global_transform save_data["last_deg"] = wrapi(self.node._movable._get_angle() + 1, 0, 360) save_data["last_dir"] = self.node._movable.last_dir diff --git a/addons/escoria-core/game/core-scripts/esc_room.gd b/addons/escoria-core/game/core-scripts/esc_room.gd index 685089bc..6c0fce48 100644 --- a/addons/escoria-core/game/core-scripts/esc_room.gd +++ b/addons/escoria-core/game/core-scripts/esc_room.gd @@ -180,7 +180,8 @@ func perform_script_events(): ) escoria.globals_manager.set_global( "ESC_LAST_SCENE", - escoria.main.current_scene.global_id, + escoria.main.current_scene.global_id \ + if escoria.main.current_scene != null else "", true ) diff --git a/addons/escoria-core/game/main.gd b/addons/escoria-core/game/main.gd index bcc4f56b..fcb9998f 100644 --- a/addons/escoria-core/game/main.gd +++ b/addons/escoria-core/game/main.gd @@ -126,7 +126,9 @@ func set_camera_limits(camera_limit_id: int = 0) -> void: func save_game(p_savegame_res: Resource) -> void: p_savegame_res.main = { ESCSaveGame.MAIN_LAST_SCENE_GLOBAL_ID_KEY: last_scene_global_id, - ESCSaveGame.MAIN_CURRENT_SCENE_FILENAME_KEY: current_scene.filename + ESCSaveGame.MAIN_CURRENT_SCENE_FILENAME_KEY: current_scene.filename \ + if current_scene != null \ + else "No current scene (not loaded yet)" }