From b9525ce3b0363e2d04101c4afe15c9531d2dc4fa Mon Sep 17 00:00:00 2001 From: Tiger Jove Date: Mon, 19 Jan 2026 11:04:08 +0100 Subject: [PATCH] fix: accidentally made story playable appear before awaiting prepare_scene --- .../volunteer_room/shared_flat.gd | 3 ++- .../youth_room/youth_room.gd | 24 +++++-------------- src/dev-util/debug_save.tres | 16 +------------ src/dev-util/room_template.gd | 1 + .../collectable/collectable_ui.gd | 4 ++-- src/logic-scenes/interactable/interactable.gd | 15 ++++++------ src/singletons/scene_reference.gd | 12 +++++----- 7 files changed, 25 insertions(+), 50 deletions(-) diff --git a/src/base-environments/volunteer_room/shared_flat.gd b/src/base-environments/volunteer_room/shared_flat.gd index 6cbb05c..95ee246 100644 --- a/src/base-environments/volunteer_room/shared_flat.gd +++ b/src/base-environments/volunteer_room/shared_flat.gd @@ -22,7 +22,8 @@ func get_ready() -> void: #card_board.initialise_from_save(save_game) card_board.board_completed.connect(func(): #TODO: hook in ending - save_room()) + save_room() + ) func start_room(): diff --git a/src/base-environments/youth_room/youth_room.gd b/src/base-environments/youth_room/youth_room.gd index 539594e..5654930 100644 --- a/src/base-environments/youth_room/youth_room.gd +++ b/src/base-environments/youth_room/youth_room.gd @@ -10,12 +10,13 @@ extends RoomTemplate func start_room(): super.start_room() %UI.show() - + # To start breathing etc. %PlayerController.process_mode = Node.PROCESS_MODE_INHERIT await Main.curtain.open() + # Skip intro if already loaded. if not Scenes.is_sequence_repeating(Scenes.id.YOUTH_DRAVEN): # Play intro scene directly (not triggered by CollectableUi) await _play_intro_scene() @@ -31,9 +32,6 @@ func _play_intro_scene() -> void: var intro: Interactable = $logic/CeilingInteractable await intro.play_story() - Scenes.end_sequence(Scenes.id.YOUTH_DRAVEN) - - func get_ready(): super.get_ready() @@ -43,11 +41,11 @@ func get_ready(): save_game.is_childhood_board_complete = true save_room() ) - + pull_save_state(State.save_game) - + card_board.closed.connect(save_room) - + card_picker.cards_picked.connect(card_board.populate_board) ui.hide() @@ -89,12 +87,6 @@ func save_room(): save_game.mementos_complete = Scenes.completed_sequences super.save_room() -func prepare_transition(): - save_room() - $visuals/AnimationPlayer.play("conserve_performance") - await $visuals/AnimationPlayer.animation_finished - unload() - ## Override to handle scene-specific preparation (chest reveal animation) func prepare_scene_start(scene_id: Scenes.id, is_repeating: bool) -> void: @@ -106,8 +98,4 @@ func prepare_scene_start(scene_id: Scenes.id, is_repeating: bool) -> void: func play_chest_reveal() -> void: $visuals/AnimationPlayer.play("chest_reveal") $visuals/SecondaryAnimation.play("chest_reveal") - await $visuals/SecondaryAnimation.animation_finished - - -func unload(): - $visuals.queue_free() + await $visuals/AnimationPlayer.animation_finished diff --git a/src/dev-util/debug_save.tres b/src/dev-util/debug_save.tres index 138a2dd..764715f 100644 --- a/src/dev-util/debug_save.tres +++ b/src/dev-util/debug_save.tres @@ -1,24 +1,10 @@ -[gd_resource type="Resource" script_class="SaveGame" load_steps=3 format=3 uid="uid://bgplfqxa852wo"] +[gd_resource type="Resource" script_class="SaveGame" load_steps=2 format=3 uid="uid://bgplfqxa852wo"] [ext_resource type="Script" uid="uid://d06gpwuxmkxkt" path="res://dev-util/savegame.gd" id="1_jr18u"] -[ext_resource type="Texture2D" uid="uid://bk5ja14r7r6i4" path="res://import/interface-elements/empty_save_slot.png" id="2_b2tdf"] [resource] script = ExtResource("1_jr18u") -filepath = "DEBUG" unique_save_name = "DEBUG" -current_room = 0 mementos_complete = 1 -board_state = { -"cards": {}, -"randoms": [], -"stickies": {} -} -is_childhood_board_complete = false -thumbnail = ExtResource("2_b2tdf") last_saved = 1756993270 -is_valid = true -is_demo = false -is_empty = true -save_manually = false metadata/_custom_type_script = "uid://d06gpwuxmkxkt" diff --git a/src/dev-util/room_template.gd b/src/dev-util/room_template.gd index 158ec47..06a06c1 100644 --- a/src/dev-util/room_template.gd +++ b/src/dev-util/room_template.gd @@ -73,4 +73,5 @@ func unload(): ## Called before a scene starts to allow room-specific preparation (e.g., animations) ## Override in subclasses to add custom scene preparation logic func prepare_scene_start(_scene_id: Scenes.id, _is_repeating: bool) -> void: + prints("PREPARE SCENE", _scene_id, _is_repeating) await get_tree().process_frame # Dummy wait for LSP warning otherwise diff --git a/src/logic-scenes/collectable/collectable_ui.gd b/src/logic-scenes/collectable/collectable_ui.gd index 2217772..0942a62 100644 --- a/src/logic-scenes/collectable/collectable_ui.gd +++ b/src/logic-scenes/collectable/collectable_ui.gd @@ -172,7 +172,7 @@ func collect_memento() -> void: is_collected = true # Signal that a scene is starting (for music, etc.) - Scenes.begin_sequence(scene) + Scenes.begin_sequence(scene, false) # Hide mouse and collapse other interactables BEFORE showing canvas get_tree().call_group("interactables", "collapse") @@ -196,7 +196,7 @@ func collect_memento() -> void: Input.mouse_mode = Input.MOUSE_MODE_CAPTURED # Signal that the scene is finished - Scenes.end_sequence(scene) + Scenes.end_sequence(scene, false) if was_skipped: scene_skipped.emit(-1) diff --git a/src/logic-scenes/interactable/interactable.gd b/src/logic-scenes/interactable/interactable.gd index f5a59fa..e7da8f9 100644 --- a/src/logic-scenes/interactable/interactable.gd +++ b/src/logic-scenes/interactable/interactable.gd @@ -31,10 +31,10 @@ func _ready() -> void: view.scale = Vector3.ZERO frame.modulate.a = 0.0 Scenes.player_enable.connect(_player_active) # TODO: do I have to clean this up? - _load_interaction.call_deferred() + _pull_save_state.call_deferred() -func _load_interaction() -> void: +func _pull_save_state() -> void: if interaction: playable = interaction.instantiate() as Control canvas_layer.add_child(playable) @@ -107,13 +107,13 @@ func play_story() -> void: var repeat := collected collected = true - canvas_layer.show() - await playable.appear() + Scenes.begin_sequence(playable.scene_id, repeat) # Allow room to prepare for scene (e.g., play animations) await State.room.prepare_scene_start(playable.scene_id, repeat) - Scenes.begin_sequence(playable.scene_id) + canvas_layer.show() + await playable.appear() # Play the story await playable.play() @@ -123,13 +123,12 @@ func play_story() -> void: var picker := State.room.get_node("%Picker") as CardPicker await picker.pick_cards(playable.scene_id) - Scenes.end_sequence(playable.scene_id) # todo: maybe later? # Hide the CanvasLayer when done - await playable.vanish() + playable.vanish() canvas_layer.hide() - Scenes.player_enable.emit(true) + Scenes.end_sequence(playable.scene_id, repeat) # todo: maybe later? expand() diff --git a/src/singletons/scene_reference.gd b/src/singletons/scene_reference.gd index 094d372..38c0727 100644 --- a/src/singletons/scene_reference.gd +++ b/src/singletons/scene_reference.gd @@ -36,8 +36,8 @@ func _ready() -> void: pass # Called by CollectableUi when it starts playing a scene -func begin_sequence(scene_id: id) -> void: - print_debug(">>> Scenes.begin_sequence(%s)" % id.keys()[scene_id]) +func begin_sequence(scene_id: id, repeat: bool) -> void: + print_debug(">>> Scenes.begin_sequence(%s)" % str(id)) # Disable player movement during cutscenes player_enable.emit(false) @@ -46,14 +46,14 @@ func begin_sequence(scene_id: id) -> void: started_sequences = started_sequences | (1 << scene_id) # Emit signal for other systems (music, animations, etc.) - scene_starting.emit(scene_id, is_sequence_repeating(scene_id)) + scene_starting.emit(scene_id, repeat) # Called by CollectableUi when it finishes playing a scene -func end_sequence(scene_id: id) -> void: - print_debug(">>> Scenes.end_sequence(%s)" % id.keys()[scene_id]) +func end_sequence(scene_id: id, repeat: bool) -> void: + print_debug(">>> Scenes.end_sequence(%s)" % str(id)) # Emit signal before clearing state - scene_finished.emit(scene_id, is_sequence_repeating(scene_id)) + scene_finished.emit(scene_id, repeat) # Mark as completed completed_sequences = completed_sequences | (1 << scene_id)