diff options
| author | Jan Tuomi <jan@jantuomi.fi> | 2026-02-05 22:02:42 +0200 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2026-02-05 23:11:06 +0200 |
| commit | 8967f6bb6e8ecb3b5b4073424692ce0ddfec61cb (patch) | |
| tree | 5961c0b5226d077c6b1e97c02c1f5fcc1d6a729f | |
| parent | f53d1d99707c5063a35c0c68890e0947077108ad (diff) | |
| -rw-r--r-- | cinematic.gd (renamed from dialogue.gd) | 15 | ||||
| -rw-r--r-- | cinematic.gd.uid (renamed from dialogue.gd.uid) | 0 | ||||
| -rw-r--r-- | cinematics/intro.gd | 49 | ||||
| -rw-r--r-- | cinematics/intro.gd.uid | 1 | ||||
| -rw-r--r-- | cinematics/relic_get.gd (renamed from dialogues/relic_get.gd) | 9 | ||||
| -rw-r--r-- | cinematics/relic_get.gd.uid (renamed from dialogues/relic_get.gd.uid) | 0 | ||||
| -rw-r--r-- | cinematics/test1.gd (renamed from dialogues/test1.gd) | 9 | ||||
| -rw-r--r-- | cinematics/test1.gd.uid (renamed from dialogues/test1.gd.uid) | 0 | ||||
| -rw-r--r-- | dialogues/cine_intro_ship1.gd | 27 | ||||
| -rw-r--r-- | dialogues/cine_intro_ship1.gd.uid | 1 | ||||
| -rw-r--r-- | relic.gd | 4 | ||||
| -rw-r--r-- | rooms/cine_intro.gd | 21 | ||||
| -rw-r--r-- | rooms/cine_intro.gd.uid | 2 | ||||
| -rw-r--r-- | rooms/cine_intro.tscn | 8 | ||||
| -rw-r--r-- | rooms/ship1.gd | 8 | ||||
| -rw-r--r-- | rooms/ship1.gd.uid | 2 | ||||
| -rw-r--r-- | rooms/ship1.tscn | 2 | ||||
| -rw-r--r-- | rooms/test2.tscn | 4 | ||||
| -rw-r--r-- | rooms/test3.tscn | 10 | ||||
| -rw-r--r-- | top.gd | 3 | ||||
| -rw-r--r-- | transition_player.gd | 8 |
21 files changed, 101 insertions, 82 deletions
diff --git a/dialogue.gd b/cinematic.gd index 311d5e2..dbc29ea 100644 --- a/dialogue.gd +++ b/cinematic.gd @@ -1,10 +1,9 @@ -class_name Dialogue +class_name Cinematic extends Node signal next(arg: Variant) -@onready var parent: Node2D = get_parent() -@onready var cam: GameCamera = parent.get_node("GameCamera") +@onready var top: Top = get_tree().root.get_node("Top") enum Type { SAY, ASK } var type: Type @@ -15,10 +14,11 @@ func say(who: Object, text: String): if who is Node2D: tb.global_position = who.global_position + Vector2(0, -20) else: - tb.global_position = cam.global_position + var room = top.get_active_room() + tb.global_position = room.get_node("GameCamera").global_position tb.add_to_group("text_bubbles") - parent.add_child(tb) + top.add_child(tb) type = Type.SAY await next @@ -30,10 +30,11 @@ func ask(who: Object, text: String, options: Array[String]) -> String: if who is Node2D: tb.global_position = who.global_position + Vector2(0, -20) else: - tb.global_position = cam.global_position + var room = top.get_active_room() + tb.global_position = room.get_node("GameCamera").global_position tb.add_to_group("text_bubbles") - parent.add_child(tb) + top.add_child(tb) type = Type.ASK return await next diff --git a/dialogue.gd.uid b/cinematic.gd.uid index f06507a..f06507a 100644 --- a/dialogue.gd.uid +++ b/cinematic.gd.uid diff --git a/cinematics/intro.gd b/cinematics/intro.gd new file mode 100644 index 0000000..2549088 --- /dev/null +++ b/cinematics/intro.gd @@ -0,0 +1,49 @@ +class_name CineIntro +extends Cinematic + +func _ready(): + await top.get_transition_player().transition_finished + + var ap: AnimationPlayer = top.get_active_room().get_node("AnimationPlayer") + + ap.play("cine_intro") + top.play_cine_bars() + + await ap.animation_finished + + top.get_transition_player().room_transition( + null, "res://rooms/ship1.tscn", null, + func (_player): pass) + + await ship1() + + queue_free() + +func ship1(): + await top.get_transition_player().room_changed + var room = top.get_active_room() + + var player: Player = room.get_node("Player") + var captain: Node2D = room.get_node("Captain") + var crew1: Node2D = room.get_node("Crew1") + var crew2: Node2D = room.get_node("Crew2") + + player.remove_from_group("camera_target") + + await top.get_transition_player().transition_finished + + await say(captain, "Crew!") + + player.velocity.x = -1 # flip + crew1.flip_h = true + crew2.flip_h = true + + await get_tree().create_timer(1.0).timeout + + await say(captain, "The Frogcorp Scientific Excursion commences today!") + await say(captain, "TODO") + + await top.clear_cine_bars() + + player.request_state_normal() + player.add_to_group("camera_target") diff --git a/cinematics/intro.gd.uid b/cinematics/intro.gd.uid new file mode 100644 index 0000000..a39d2f1 --- /dev/null +++ b/cinematics/intro.gd.uid @@ -0,0 +1 @@ +uid://c1brkwqi07uem diff --git a/dialogues/relic_get.gd b/cinematics/relic_get.gd index a086c36..40d3b9f 100644 --- a/dialogues/relic_get.gd +++ b/cinematics/relic_get.gd @@ -1,14 +1,13 @@ -class_name DialogueRelicGet -extends Dialogue +class_name CineRelicGet +extends Cinematic -@onready var top: Top = get_tree().root.get_node("Top") -@onready var player: Player = parent.get_node("Player") var r: Node2D func _init(relic: Node2D): r = relic func _ready(): + var player: Player = get_room_node("Player") var mp: AudioStreamPlayer = top.get_node("MusicPlayer") mp.stream_paused = true player.request_play_fanfare_sfx() @@ -23,3 +22,5 @@ func _ready(): get_tree().paused = false mp.stream_paused = false + + queue_free() diff --git a/dialogues/relic_get.gd.uid b/cinematics/relic_get.gd.uid index c5ed07a..c5ed07a 100644 --- a/dialogues/relic_get.gd.uid +++ b/cinematics/relic_get.gd.uid diff --git a/dialogues/test1.gd b/cinematics/test1.gd index d411484..9ef48b7 100644 --- a/dialogues/test1.gd +++ b/cinematics/test1.gd @@ -1,10 +1,9 @@ -class_name DialogueTest1 -extends Dialogue - -@onready var player: Player = parent.get_node("Player") -@onready var npc: Node2D = parent.get_node("DialogueTestNPC") +class_name CinematicTest1 +extends Cinematic func _ready(): + var player: Player = get_room_node("Player") + var npc: Node2D = get_room_node("CinematicTestNPC") player.request_state_forced("DROP") await say(player, "hello") diff --git a/dialogues/test1.gd.uid b/cinematics/test1.gd.uid index 57573c2..57573c2 100644 --- a/dialogues/test1.gd.uid +++ b/cinematics/test1.gd.uid diff --git a/dialogues/cine_intro_ship1.gd b/dialogues/cine_intro_ship1.gd deleted file mode 100644 index fb9a5e4..0000000 --- a/dialogues/cine_intro_ship1.gd +++ /dev/null @@ -1,27 +0,0 @@ -class_name DialogueCineIntroShip1 -extends Dialogue - -@onready var top: Top = get_tree().root.get_node("Top") -@onready var player: Player = parent.get_node("Player") -@onready var captain: Node2D = parent.get_node("Captain") -@onready var crew1: Node2D = parent.get_node("Crew1") -@onready var crew2: Node2D = parent.get_node("Crew2") - -func _ready(): - player.remove_from_group("camera_target") - - await say(captain, "Crew!") - - player.velocity.x = -1 # flip - crew1.flip_h = true - crew2.flip_h = true - - await get_tree().create_timer(1.0).timeout - - await say(captain, "The Frogcorp Scientific Excursion commences today!") - await say(captain, "TODO") - - await top.clear_cine_bars() - - player.request_state_normal() - player.add_to_group("camera_target") diff --git a/dialogues/cine_intro_ship1.gd.uid b/dialogues/cine_intro_ship1.gd.uid deleted file mode 100644 index 50d36eb..0000000 --- a/dialogues/cine_intro_ship1.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bgtapiu3u8vre @@ -31,6 +31,6 @@ func _on_area_2d_body_entered(player: Player) -> void: if already_got: queue_free() else: - var dia = DialogueRelicGet.new(self) + var dia = CineRelicGet.new(self) dia.process_mode = Node.PROCESS_MODE_ALWAYS - get_parent().add_child(dia) + top.add_child(dia) diff --git a/rooms/cine_intro.gd b/rooms/cine_intro.gd index fc6c881..5c08744 100644 --- a/rooms/cine_intro.gd +++ b/rooms/cine_intro.gd @@ -1,18 +1,9 @@ -class_name CineIntro -extends Node2D +class_name RoomCineIntro +extends Room +@onready var top: Top = get_tree().root.get_node("Top") +# Called when the node enters the scene tree for the first time. func _ready() -> void: - run() - -func run(): - var top: Top = get_tree().root.get_node("Top") - - $AnimationPlayer.play("cine_intro") - await get_tree().create_timer(0.5).timeout - top.play_cine_bars() - - await $AnimationPlayer.animation_finished - - top.get_transition_player().room_transition(null, "res://rooms/ship1.tscn", null, - func (_player): pass) + var cine = CineIntro.new() + top.add_child(cine) diff --git a/rooms/cine_intro.gd.uid b/rooms/cine_intro.gd.uid index a39d2f1..28f4a85 100644 --- a/rooms/cine_intro.gd.uid +++ b/rooms/cine_intro.gd.uid @@ -1 +1 @@ -uid://c1brkwqi07uem +uid://smifdf5yqj8r diff --git a/rooms/cine_intro.tscn b/rooms/cine_intro.tscn index f35adb5..5874c20 100644 --- a/rooms/cine_intro.tscn +++ b/rooms/cine_intro.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=13 format=4 uid="uid://b0ovj5ki7tg3s"] [ext_resource type="PackedScene" uid="uid://dfyvkc2qlcdac" path="res://game_camera.tscn" id="1_1pf6u"] -[ext_resource type="Script" uid="uid://c1brkwqi07uem" path="res://rooms/cine_intro.gd" id="1_678l5"] +[ext_resource type="Script" uid="uid://smifdf5yqj8r" path="res://rooms/cine_intro.gd" id="1_678l5"] [ext_resource type="Texture2D" uid="uid://dngaqobccmxtx" path="res://assets/redshipr.png" id="2_678l5"] [ext_resource type="Texture2D" uid="uid://dyg22seb4ktom" path="res://assets.untracked/kenney_1-bit-platformer-pack/Tiles/Transparent/tile_0296.png" id="3_ig0ct"] [ext_resource type="TileSet" uid="uid://0cd30n67d6k5" path="res://tileset_kenney_platformer.tres" id="4_bawvl"] @@ -42,7 +42,7 @@ tracks/0/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, -"values": [Color(1, 1, 1, 1)] +"values": [Color(1, 1, 1, 0)] } tracks/1/type = "value" tracks/1/imported = false @@ -54,7 +54,7 @@ tracks/1/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, -"values": [Color(1, 1, 1, 1)] +"values": [Color(1, 1, 1, 0)] } tracks/2/type = "value" tracks/2/imported = false @@ -159,10 +159,12 @@ texture = ExtResource("3_ig0ct") process_material = SubResource("ParticleProcessMaterial_dfwsi") [node name="TileMapLayer" type="TileMapLayer" parent="."] +modulate = Color(1, 1, 1, 0) tile_map_data = PackedByteArray("AAD//wYAAwANAAAAAAAAAAYAAwANAAAAAAABAAYAAwANAAAAAAADAAQAAwANAAAAAAAFAAUAAwANAAAAAAAGAAUAAwANAAAAAAAJAAMAAwANAAAAAAAKAAMAAwANAAAAAAALAAMAAwANAAAAAAAKAAQAAwANAAAAAAAKAAYAAwANAAAAAAALAAYAAwANAAAAAAAMAAYAAwANAAAAAAABAAMAAwANAAAAAAAAAAAAAwAAAAEAAAAGAP//AwAAAAEAAAAJAAAAAwAAAAEAAAAEAAAAAwAAAAEAAAABAAEAAwAAAAEAAAAMAP//AwAAAAEAAAABAP3/AwAAAAEAAAAEAP7/AwAAAAEAAAAIAPv/AwAAAAEAAAALAPz/AwAAAAEAAAALAPj/AwAAAAEAAAAHAPf/AwAAAAEAAAAGAPr/AwAAAAEAAAADAPz/AwAAAAEAAAD///n/AwAAAAEAAAD+//3/AwAAAAEAAAACAPf/AwAAAAEAAAAHAPX/AwAAAAEAAAAJAPb/AwAAAAEAAAADAPT/AwAAAAEAAAAAAPT/AwAAAAEAAAD///b/AwAAAAEAAAAMAPT/AwAAAAEAAAAMAPn/AwAAAAEAAAA=") tile_set = ExtResource("4_bawvl") [node name="InLowOrbit" type="Label" parent="."] +modulate = Color(1, 1, 1, 0) offset_left = -24.0 offset_top = -121.0 offset_right = 456.0 diff --git a/rooms/ship1.gd b/rooms/ship1.gd index ce25a30..93f3ddd 100644 --- a/rooms/ship1.gd +++ b/rooms/ship1.gd @@ -1,10 +1,2 @@ class_name RoomShip1 extends Room - -@onready var top: Top = get_tree().root.get_node("Top") -@onready var player: Player = $Player - -func _ready() -> void: - if not top.inventory.cine_intro_done: - var dia = DialogueCineIntroShip1.new() - add_child(dia) diff --git a/rooms/ship1.gd.uid b/rooms/ship1.gd.uid index e99461f..4440676 100644 --- a/rooms/ship1.gd.uid +++ b/rooms/ship1.gd.uid @@ -1 +1 @@ -uid://u860i6080apx +uid://cxclie8hu2iei diff --git a/rooms/ship1.tscn b/rooms/ship1.tscn index b91d846..6af7ecb 100644 --- a/rooms/ship1.tscn +++ b/rooms/ship1.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=8 format=4 uid="uid://d1cs3f3is4ueq"] -[ext_resource type="Script" uid="uid://u860i6080apx" path="res://rooms/ship1.gd" id="1_b0bog"] +[ext_resource type="Script" uid="uid://cxclie8hu2iei" path="res://rooms/ship1.gd" id="1_b0bog"] [ext_resource type="Texture2D" uid="uid://7hiwc37lcc7e" path="res://assets.untracked/kenney_1-bit-platformer-pack/Tiles/Default/tile_0011.png" id="2_b0bog"] [ext_resource type="TileSet" uid="uid://0cd30n67d6k5" path="res://tileset_kenney_platformer.tres" id="3_vy3ys"] [ext_resource type="PackedScene" uid="uid://dfyvkc2qlcdac" path="res://game_camera.tscn" id="4_k7i86"] diff --git a/rooms/test2.tscn b/rooms/test2.tscn index 2facbd8..c62b602 100644 --- a/rooms/test2.tscn +++ b/rooms/test2.tscn @@ -103,10 +103,10 @@ func _physics_process(delta: float) -> void: func _on_player_entered(_player: Player) -> void: oscing = false - var dia = DialogueGotAbilities.new(self) + var dia = CinematicGotAbilities.new(self) get_parent().add_child(dia) -class DialogueGotAbilities extends Dialogue: +class CinematicGotAbilities extends Cinematic: @onready var player: Player = parent.get_node(\"Player\") @onready var top: Top = get_tree().root.get_node(\"Top\") diff --git a/rooms/test3.tscn b/rooms/test3.tscn index d8857d4..185907a 100644 --- a/rooms/test3.tscn +++ b/rooms/test3.tscn @@ -23,7 +23,7 @@ point_count = 6 script/source = "extends Sprite2D func _on_player_entered(_p: Player) -> void: - var d = DialogueTest1.new() + var d = CinematicTest1.new() get_parent().add_child(d) " @@ -105,20 +105,20 @@ target_door = "DoorLeft" [node name="ComputerPath" type="Path2D" parent="."] curve = SubResource("Curve2D_bml3v") -[node name="DialogueTestNPC" type="Sprite2D" parent="."] +[node name="CinematicTestNPC" type="Sprite2D" parent="."] modulate = Color(0.30980393, 1, 1, 1) position = Vector2(-104, -56) texture = ExtResource("9_i0ft4") script = SubResource("GDScript_bplq6") -[node name="Area2D" type="Area2D" parent="DialogueTestNPC"] +[node name="Area2D" type="Area2D" parent="CinematicTestNPC"] collision_layer = 32 collision_mask = 2 -[node name="CollisionShape2D" type="CollisionShape2D" parent="DialogueTestNPC/Area2D"] +[node name="CollisionShape2D" type="CollisionShape2D" parent="CinematicTestNPC/Area2D"] position = Vector2(1, 1.75) shape = SubResource("RectangleShape2D_rlnij") [connection signal="body_entered" from="Computer1/Area2D" to="Computer1" method="_on_area_2d_body_entered"] [connection signal="body_entered" from="Computer2/Area2D" to="Computer2" method="_on_area_2d_body_entered"] -[connection signal="body_entered" from="DialogueTestNPC/Area2D" to="DialogueTestNPC" method="_on_player_entered"] +[connection signal="body_entered" from="CinematicTestNPC/Area2D" to="CinematicTestNPC" method="_on_player_entered"] @@ -52,6 +52,9 @@ func replace_active_room(new_room: Node, on_changed: Callable): new_room.process_mode = Node.PROCESS_MODE_PAUSABLE add_child(new_room) +func get_active_room() -> Room: + return get_node("ActiveRoom") + func get_transition_player() -> TransitionPlayer: return $TransitionPlayer diff --git a/transition_player.gd b/transition_player.gd index ba719eb..080d3ef 100644 --- a/transition_player.gd +++ b/transition_player.gd @@ -1,6 +1,9 @@ class_name TransitionPlayer extends AnimationPlayer +signal transition_finished +signal room_changed + var _transition_room: Node var _transition_door_name: Variant # String or null var _override_player_fn: Variant # Callable or null @@ -33,6 +36,8 @@ func room_transition(from_door: Door, top.game_set(Top.SAVE_ACTIVE_ROOM_PATH, to_room_path) top.game_set(Top.SAVE_LAST_DOOR_NAME, door_name) + await transition_finished + func _transition_start(): var top: Top = get_tree().root.get_node("Top") @@ -55,6 +60,7 @@ func _on_room_changed(): top.game_save() play("room_trans_end") + room_changed.emit() func _transition_end(): var top: Top = get_tree().root.get_node("Top") @@ -69,3 +75,5 @@ func _transition_end(): player.request_state_normal() _override_player_fn = null + + transition_finished.emit() |
