From 0474ded71ae1ed102bfcc779b76107b31a1041cf Mon Sep 17 00:00:00 2001 From: Bryce Date: Sat, 21 Feb 2026 15:36:42 -0800 Subject: [PATCH] most areas connected --- .opencode/skills/kq4-exit-checker/SKILL.md | 4 + scenes/kq4_001_beach/kq4_001_beach.gd | 2 +- .../kq4_003_fountain_pool.gd | 4 + .../kq4_003_fountain_pool.tscn | 51 +++---- .../kq4_004_ogres_cottage.gd | 4 + .../kq4_004_ogres_cottage.tscn | 16 +++ .../kq4_005_forest_grove.gd | 17 +++ .../kq4_005_forest_grove.gd.uid | 1 + .../kq4_005_forest_grove.tscn | 98 +++++++++++++ .../kq4_005_forest_grove.tscn.uid | 1 + .../kq4_005_forest_grove/pic_005_visual.png | 3 + .../pic_005_visual.png.import | 40 ++++++ .../kq4_011_enchanted_grove.tscn | 2 + scenes/kq4_013_beach/kq4_013_beach.gd | 2 +- scenes/kq4_016_graveyard/kq4_016_graveyard.gd | 4 + .../kq4_016_graveyard/kq4_016_graveyard.tscn | 15 ++ .../kq4_017_spooky_house_exterior.gd | 17 +++ .../kq4_017_spooky_house_exterior.gd.uid | 1 + .../kq4_017_spooky_house_exterior.tscn | 99 +++++++++++++ .../kq4_017_spooky_house_exterior.tscn.uid | 1 + .../pic_017_visual.png | 3 + .../pic_017_visual.png.import | 40 ++++++ scenes/kq4_018_cemetery/kq4_018_cemetery.gd | 13 ++ .../kq4_018_cemetery/kq4_018_cemetery.gd.uid | 1 + scenes/kq4_018_cemetery/kq4_018_cemetery.tscn | 83 +++++++++++ .../kq4_018_cemetery.tscn.uid | 1 + scenes/kq4_018_cemetery/pic_018_visual.png | 3 + .../pic_018_visual.png.import | 40 ++++++ .../kq4_019_coastal_cliffs.gd | 4 + .../kq4_019_coastal_cliffs.tscn | 14 ++ .../kq4_022_gnomes_cottage.gd | 4 +- .../kq4_022_gnomes_cottage.tscn | 20 +-- .../kq4_023_forest_path_with_cottage.gd | 12 ++ .../kq4_023_forest_path_with_cottage.tscn | 14 +- .../kq4_024_waterfall_and_pool.gd | 13 ++ .../kq4_024_waterfall_and_pool.gd.uid | 1 + .../kq4_024_waterfall_and_pool.tscn | 84 +++++++++++ .../kq4_024_waterfall_and_pool.tscn.uid | 1 + .../pic_024_visual.png | 3 + .../pic_024_visual.png.import | 40 ++++++ .../kq4_025_beach_at_river_delta.gd | 2 +- .../kq4_028_mine_entrance.gd | 6 +- .../kq4_028_mine_entrance.tscn | 23 +-- .../kq4_029_dense_forest.gd | 17 +++ .../kq4_029_dense_forest.gd.uid | 1 + .../kq4_029_dense_forest.tscn | 99 +++++++++++++ .../kq4_029_dense_forest.tscn.uid | 1 + .../kq4_029_dense_forest/pic_029_visual.png | 3 + .../pic_029_visual.png.import | 40 ++++++ .../kq4_030_mountain_pass.gd | 13 ++ .../kq4_030_mountain_pass.gd.uid | 1 + .../kq4_030_mountain_pass.tscn | 83 +++++++++++ .../kq4_030_mountain_pass.tscn.uid | 1 + .../kq4_030_mountain_pass/pic_030_visual.png | 3 + .../pic_030_visual.png.import | 40 ++++++ .../kq4_031_open_ocean/kq4_031_open_ocean.gd | 10 +- .../kq4_031_open_ocean.tscn | 30 ++++ scripts/check_transitions.py | 135 ++++++++++++++++++ 58 files changed, 1225 insertions(+), 59 deletions(-) create mode 100644 scenes/kq4_005_forest_grove/kq4_005_forest_grove.gd create mode 100644 scenes/kq4_005_forest_grove/kq4_005_forest_grove.gd.uid create mode 100644 scenes/kq4_005_forest_grove/kq4_005_forest_grove.tscn create mode 100644 scenes/kq4_005_forest_grove/kq4_005_forest_grove.tscn.uid create mode 100644 scenes/kq4_005_forest_grove/pic_005_visual.png create mode 100644 scenes/kq4_005_forest_grove/pic_005_visual.png.import create mode 100644 scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.gd create mode 100644 scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.gd.uid create mode 100644 scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.tscn create mode 100644 scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.tscn.uid create mode 100644 scenes/kq4_017_spooky_house_exterior/pic_017_visual.png create mode 100644 scenes/kq4_017_spooky_house_exterior/pic_017_visual.png.import create mode 100644 scenes/kq4_018_cemetery/kq4_018_cemetery.gd create mode 100644 scenes/kq4_018_cemetery/kq4_018_cemetery.gd.uid create mode 100644 scenes/kq4_018_cemetery/kq4_018_cemetery.tscn create mode 100644 scenes/kq4_018_cemetery/kq4_018_cemetery.tscn.uid create mode 100644 scenes/kq4_018_cemetery/pic_018_visual.png create mode 100644 scenes/kq4_018_cemetery/pic_018_visual.png.import create mode 100644 scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.gd create mode 100644 scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.gd.uid create mode 100644 scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.tscn create mode 100644 scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.tscn.uid create mode 100644 scenes/kq4_024_waterfall_and_pool/pic_024_visual.png create mode 100644 scenes/kq4_024_waterfall_and_pool/pic_024_visual.png.import create mode 100644 scenes/kq4_029_dense_forest/kq4_029_dense_forest.gd create mode 100644 scenes/kq4_029_dense_forest/kq4_029_dense_forest.gd.uid create mode 100644 scenes/kq4_029_dense_forest/kq4_029_dense_forest.tscn create mode 100644 scenes/kq4_029_dense_forest/kq4_029_dense_forest.tscn.uid create mode 100644 scenes/kq4_029_dense_forest/pic_029_visual.png create mode 100644 scenes/kq4_029_dense_forest/pic_029_visual.png.import create mode 100644 scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.gd create mode 100644 scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.gd.uid create mode 100644 scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.tscn create mode 100644 scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.tscn.uid create mode 100644 scenes/kq4_030_mountain_pass/pic_030_visual.png create mode 100644 scenes/kq4_030_mountain_pass/pic_030_visual.png.import create mode 100755 scripts/check_transitions.py diff --git a/.opencode/skills/kq4-exit-checker/SKILL.md b/.opencode/skills/kq4-exit-checker/SKILL.md index 2f27111..e3534d2 100644 --- a/.opencode/skills/kq4-exit-checker/SKILL.md +++ b/.opencode/skills/kq4-exit-checker/SKILL.md @@ -19,6 +19,8 @@ Use this skill when you need to verify that room transitions are properly wired ### Step 1: Run the Skill When you invoke this skill, specify the room number (e.g., "9", "009", or "kq4_009_shady_wooded_area"). +Begin by running python ./scripts/check_transitions.py, which will show each room's transitions + The skill will: 1. Load the specified room's .tscn file @@ -28,8 +30,10 @@ The skill will: - The `appear_at_node` value matches a node in the target scene - The node name follows the naming convention - A return transition exists in the destination room + - The room actually goes to the correct room specified in the room's spec (./kq4-sierra-decompile/rooms/) ### Step 2: Review Results + The skill outputs: - **Valid transitions**: Confirmed working connections - **Invalid transitions**: Issues found with target UIDs or appear_at_node names diff --git a/scenes/kq4_001_beach/kq4_001_beach.gd b/scenes/kq4_001_beach/kq4_001_beach.gd index c8a4118..91d844e 100644 --- a/scenes/kq4_001_beach/kq4_001_beach.gd +++ b/scenes/kq4_001_beach/kq4_001_beach.gd @@ -14,4 +14,4 @@ func _on_meadow_interacted() -> void: func _on_open_ocean_interacted() -> void: - $west_exit.default_script(self) + $kq4_031_open_ocean.default_script(self) diff --git a/scenes/kq4_003_fountain_pool/kq4_003_fountain_pool.gd b/scenes/kq4_003_fountain_pool/kq4_003_fountain_pool.gd index 3d1e862..788fce9 100644 --- a/scenes/kq4_003_fountain_pool/kq4_003_fountain_pool.gd +++ b/scenes/kq4_003_fountain_pool/kq4_003_fountain_pool.gd @@ -15,3 +15,7 @@ func _on_shady_wooded_area_interacted() -> void: func _on_forest_path_interacted() -> void: $kq4_010_forest_path.default_script(self) + + +func _on_forest_path_27_interacted() -> void: + $kq4_027_forest_path.default_script(self) diff --git a/scenes/kq4_003_fountain_pool/kq4_003_fountain_pool.tscn b/scenes/kq4_003_fountain_pool/kq4_003_fountain_pool.tscn index a3a6e97..535e4f1 100644 --- a/scenes/kq4_003_fountain_pool/kq4_003_fountain_pool.tscn +++ b/scenes/kq4_003_fountain_pool/kq4_003_fountain_pool.tscn @@ -1,4 +1,4 @@ -[gd_scene format=3 uid="uid://151dbn9bybiwx"] +[gd_scene format=3 uid="uid://dyk4rcqsk3aed"] [ext_resource type="Script" uid="uid://2mmn5y4b67lg" path="res://scenes/kq4_003_fountain_pool/kq4_003_fountain_pool.gd" id="1_heq0u"] [ext_resource type="Texture2D" uid="uid://0ak807tg6jso" path="res://scenes/kq4_003_fountain_pool/ComfyUI_10001_.png" id="2_heq0u"] @@ -11,34 +11,34 @@ vertices = PackedVector2Array(2047.41, 716.57, 2016.32, 718.031, 2012.05, 588.46 polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(4, 5, 6, 7), PackedInt32Array(8, 9, 10, 11, 12), PackedInt32Array(13, 14, 12), PackedInt32Array(14, 13, 15), PackedInt32Array(16, 14, 15, 17), PackedInt32Array(11, 13, 12), PackedInt32Array(18, 19, 20, 21), PackedInt32Array(22, 23, 18, 24, 25), PackedInt32Array(26, 27, 28, 29), PackedInt32Array(30, 31, 32, 33), PackedInt32Array(16, 17, 10, 9, 24, 34), PackedInt32Array(21, 34, 24), PackedInt32Array(18, 21, 24), PackedInt32Array(35, 22, 25), PackedInt32Array(28, 35, 25), PackedInt32Array(28, 25, 29), PackedInt32Array(26, 29, 36), PackedInt32Array(12, 26, 36, 30, 33), PackedInt32Array(12, 33, 8)]) outlines = Array[PackedVector2Array]([PackedVector2Array(-13, 516, 1548, 556, 2000, 526, 2021, 1163, -39, 1107), PackedVector2Array(577, 565, 247, 917, 324, 994, 515, 989, 538, 927, 1260, 927, 1359, 996, 1543, 964, 1588, 893, 1318, 576), PackedVector2Array(-43, 689, 354, 679, 358, 571, -36, 544), PackedVector2Array(1526, 653, 1655, 745, 2060, 726, 2024, 578, 1531, 597), PackedVector2Array(1702, 805, 1678, 872, 1848, 902, 1927, 861, 1906, 779)]) -[node name="background" type="Node2D"] +[node name="background" type="Node2D" unique_id=47039231] y_sort_enabled = true script = ExtResource("1_heq0u") -[node name="bg" type="Sprite2D" parent="."] +[node name="bg" type="Sprite2D" parent="." unique_id=56586945] scale = Vector2(0.470459, 0.467949) texture = ExtResource("2_heq0u") centered = false -[node name="StartScalePoint" type="Node2D" parent="."] +[node name="StartScalePoint" type="Node2D" parent="." unique_id=248986742] position = Vector2(1476, 742) script = ExtResource("3_1g2ot") target_scale = 0.25 -[node name="EndScalePoint" type="Node2D" parent="."] +[node name="EndScalePoint" type="Node2D" parent="." unique_id=141160145] position = Vector2(1408, 1097) scale = Vector2(0.44, 0.44) script = ExtResource("3_1g2ot") target_scale = 0.35 -[node name="pathfind" type="NavigationRegion2D" parent="."] +[node name="pathfind" type="NavigationRegion2D" parent="." unique_id=1039746920] position = Vector2(-1, 0) navigation_polygon = SubResource("NavigationPolygon_heq0u") -[node name="default-starting-point" type="Node2D" parent="."] +[node name="default-starting-point" type="Node2D" parent="." unique_id=1811687548] position = Vector2(194, 819) -[node name="kq4_002_meadow" parent="." instance=ExtResource("4_6r684")] +[node name="kq4_002_meadow" parent="." unique_id=1924834520 instance=ExtResource("4_6r684")] position = Vector2(-150, 100) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) appear_at_node = "kq4_003_fountain_pool" @@ -51,20 +51,7 @@ position = Vector2(350, 500) [node name="exit" parent="kq4_002_meadow" index="1"] position = Vector2(100, 480) -[node name="kq4_010_forest_path" parent="." instance=ExtResource("4_6r684")] -position = Vector2(910, -213) -polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) -appear_at_node = "kq4_003_fountain_pool" -target = "uid://3ujj97iw54vo5" -label = "Forest Path" - -[node name="entrance" parent="kq4_010_forest_path" index="0"] -position = Vector2(133, 643) - -[node name="exit" parent="kq4_010_forest_path" index="1"] -position = Vector2(174, 519) - -[node name="kq4_004_ogres_cottage" parent="." instance=ExtResource("4_6r684")] +[node name="kq4_004_ogres_cottage" parent="." unique_id=670184730 instance=ExtResource("4_6r684")] position = Vector2(1912, 756) color = Color(1, 1, 1, 1) polygon = PackedVector2Array(-235, -142, -147, 252, 155, 148, 102, -85) @@ -78,7 +65,7 @@ position = Vector2(-79, 65) [node name="exit" parent="kq4_004_ogres_cottage" index="1"] position = Vector2(66, 71) -[node name="kq4_009_shady_wooded_area" parent="." instance=ExtResource("4_6r684")] +[node name="kq4_009_shady_wooded_area" parent="." unique_id=1832225568 instance=ExtResource("4_6r684")] position = Vector2(910, 542) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) appear_at_node = "kq4_003_fountain_pool" @@ -91,16 +78,30 @@ position = Vector2(118, 514) [node name="exit" parent="kq4_009_shady_wooded_area" index="1"] position = Vector2(151, 615) -[node name="Fg" type="Sprite2D" parent="."] +[node name="kq4_027_forest_path" parent="." unique_id=1810021557 instance=ExtResource("4_6r684")] +position = Vector2(500, 100) +polygon = PackedVector2Array(122, 279, -87, 649, 688, 583, 650, 277) +appear_at_node = "kq4_003_fountain_pool" +target = "uid://1fpyosj18xls7" +label = "Forest Path" + +[node name="entrance" parent="kq4_027_forest_path" index="0"] +position = Vector2(207, 489) + +[node name="exit" parent="kq4_027_forest_path" index="1"] +position = Vector2(396, 438) + +[node name="Fg" type="Sprite2D" parent="." unique_id=1431047880] scale = Vector2(1.163, 1.179) texture = ExtResource("5_cu368") centered = false [connection signal="interacted" from="kq4_002_meadow" to="." method="_on_meadow_interacted"] -[connection signal="interacted" from="kq4_010_forest_path" to="." method="_on_forest_path_interacted"] [connection signal="interacted" from="kq4_004_ogres_cottage" to="." method="_on_ogre_house_interacted"] [connection signal="interacted" from="kq4_009_shady_wooded_area" to="." method="_on_shady_wooded_area_interacted"] +[connection signal="interacted" from="kq4_027_forest_path" to="." method="_on_forest_path_27_interacted"] [editable path="kq4_002_meadow"] [editable path="kq4_004_ogres_cottage"] [editable path="kq4_009_shady_wooded_area"] +[editable path="kq4_027_forest_path"] diff --git a/scenes/kq4_004_ogres_cottage/kq4_004_ogres_cottage.gd b/scenes/kq4_004_ogres_cottage/kq4_004_ogres_cottage.gd index 2bec3bb..f279285 100644 --- a/scenes/kq4_004_ogres_cottage/kq4_004_ogres_cottage.gd +++ b/scenes/kq4_004_ogres_cottage/kq4_004_ogres_cottage.gd @@ -11,3 +11,7 @@ func _on_pool_interacted() -> void: func _on_forest_path_interacted() -> void: $kq4_010_forest_path.default_script(self) + + +func _on_forest_grove_interacted() -> void: + $kq4_005_forest_grove.default_script(self) diff --git a/scenes/kq4_004_ogres_cottage/kq4_004_ogres_cottage.tscn b/scenes/kq4_004_ogres_cottage/kq4_004_ogres_cottage.tscn index d6336a7..8d767da 100644 --- a/scenes/kq4_004_ogres_cottage/kq4_004_ogres_cottage.tscn +++ b/scenes/kq4_004_ogres_cottage/kq4_004_ogres_cottage.tscn @@ -82,8 +82,24 @@ position = Vector2(118, 514) [node name="exit" parent="kq4_010_forest_path" index="1"] position = Vector2(151, 615) +[node name="kq4_005_forest_grove" parent="." instance=ExtResource("4_67nph")] +position = Vector2(1766, 74) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_004_ogres_cottage" +target = "uid://1c470jsfmdhxx" +label = "Forest Grove" + +[node name="entrance" parent="kq4_005_forest_grove" index="0"] +position = Vector2(24, 565) + +[node name="exit" parent="kq4_005_forest_grove" index="1"] +position = Vector2(293, 554) + [connection signal="interacted" from="kq4_010_forest_path" to="." method="_on_forest_path_interacted"] +[connection signal="interacted" from="kq4_005_forest_grove" to="." method="_on_forest_grove_interacted"] + [editable path="kq4_028_mine_entrance"] [editable path="kq4_003_fountain_pool"] [editable path="kq4_010_forest_path"] +[editable path="kq4_005_forest_grove"] diff --git a/scenes/kq4_005_forest_grove/kq4_005_forest_grove.gd b/scenes/kq4_005_forest_grove/kq4_005_forest_grove.gd new file mode 100644 index 0000000..4321207 --- /dev/null +++ b/scenes/kq4_005_forest_grove/kq4_005_forest_grove.gd @@ -0,0 +1,17 @@ +extends Scene + + +func _on_dense_forest_interacted() -> void: + $kq4_029_dense_forest.default_script(self) + + +func _on_enchanted_grove_interacted() -> void: + $kq4_011_enchanted_grove.default_script(self) + + +func _on_cave_entrance_interacted() -> void: + $kq4_006_cave_entrance.default_script(self) + + +func _on_ogres_cottage_interacted() -> void: + $kq4_004_ogres_cottage.default_script(self) diff --git a/scenes/kq4_005_forest_grove/kq4_005_forest_grove.gd.uid b/scenes/kq4_005_forest_grove/kq4_005_forest_grove.gd.uid new file mode 100644 index 0000000..ded7ddc --- /dev/null +++ b/scenes/kq4_005_forest_grove/kq4_005_forest_grove.gd.uid @@ -0,0 +1 @@ +uid://dlpvtnjxp0uq7 diff --git a/scenes/kq4_005_forest_grove/kq4_005_forest_grove.tscn b/scenes/kq4_005_forest_grove/kq4_005_forest_grove.tscn new file mode 100644 index 0000000..0a1fde6 --- /dev/null +++ b/scenes/kq4_005_forest_grove/kq4_005_forest_grove.tscn @@ -0,0 +1,98 @@ +[gd_scene format=3 uid="uid://1c470jsfmdhxx"] + +[ext_resource type="Script" path="res://scenes/kq4_005_forest_grove/kq4_005_forest_grove.gd" id="1_abc"] +[ext_resource type="Texture2D" path="res://scenes/kq4_005_forest_grove/pic_005_visual.png" id="2_abc"] +[ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"] +[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"] + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] +vertices = PackedVector2Array(374.47656, 1145.0078, -140.75781, 1180.2031, -76.11719, 588.6797, -53.679688, 490.4922, 1222.4688, 227.3125, 1994.2422, 468.4297, 2012.7031, 1020.2031, 1268.1875, 1113.0234) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(3, 4, 5, 6, 7, 0)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-62, 482, 1223, 217, 2004, 461, 2023, 1029, 1269, 1123, 375, 1155, -152, 1191, -86, 587)]) + +[node name="background" type="Node2D" unique_id=657573819] +y_sort_enabled = true +script = ExtResource("1_abc") + +[node name="bg" type="Sprite2D" parent="." unique_id=874052749] +scale = Vector2(6, 6) +texture = ExtResource("2_abc") +centered = false + +[node name="StartScalePoint" type="Node2D" parent="." unique_id=1640687858] +position = Vector2(1476, 742) +script = ExtResource("3_abc") +target_scale = 0.25 + +[node name="EndScalePoint" type="Node2D" parent="." unique_id=1996763530] +position = Vector2(1408, 1097) +scale = Vector2(0.44, 0.44) +script = ExtResource("3_abc") +target_scale = 0.35 + +[node name="pathfind" type="NavigationRegion2D" parent="." unique_id=1418661203] +position = Vector2(-1, 0) +navigation_polygon = SubResource("NavigationPolygon_ppo6b") + +[node name="default-starting-point" type="Node2D" parent="." unique_id=1018141532] +position = Vector2(194, 819) + +[node name="kq4_029_dense_forest" parent="." unique_id=484638394 instance=ExtResource("4_abc")] +position = Vector2(910, -213) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_005_forest_grove" +target = "uid://1sfzaldfq5kn1" +label = "Dense Forest" + +[node name="entrance" parent="kq4_029_dense_forest" index="0"] +position = Vector2(133, 643) + +[node name="exit" parent="kq4_029_dense_forest" index="1"] +position = Vector2(174, 519) + +[node name="kq4_006_cave_entrance" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] +position = Vector2(1766, 74) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_005_forest_grove" +label = "Cave Entrance" + +[node name="entrance" parent="kq4_006_cave_entrance" index="0"] +position = Vector2(24, 565) + +[node name="exit" parent="kq4_006_cave_entrance" index="1"] +position = Vector2(293, 554) + +[node name="kq4_011_enchanted_grove" parent="." unique_id=990092106 instance=ExtResource("4_abc")] +position = Vector2(910, 542) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_005_forest_grove" +target = "uid://ujxktwdn8l8r" +label = "Enchanted Grove" + +[node name="entrance" parent="kq4_011_enchanted_grove" index="0"] +position = Vector2(118, 514) + +[node name="exit" parent="kq4_011_enchanted_grove" index="1"] +position = Vector2(151, 615) + +[node name="kq4_004_ogres_cottage" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_005_forest_grove" +target = "uid://1nxmm3b1kcdm1" +label = "Ogre's Cottage" + +[node name="entrance" parent="kq4_004_ogres_cottage" index="0"] +position = Vector2(506, 555) + +[node name="exit" parent="kq4_004_ogres_cottage" index="1"] +position = Vector2(-64, 534) + +[connection signal="interacted" from="kq4_029_dense_forest" to="." method="_on_dense_forest_interacted"] +[connection signal="interacted" from="kq4_006_cave_entrance" to="." method="_on_cave_entrance_interacted"] +[connection signal="interacted" from="kq4_011_enchanted_grove" to="." method="_on_enchanted_grove_interacted"] +[connection signal="interacted" from="kq4_004_ogres_cottage" to="." method="_on_ogres_cottage_interacted"] + +[editable path="kq4_029_dense_forest"] +[editable path="kq4_006_cave_entrance"] +[editable path="kq4_011_enchanted_grove"] +[editable path="kq4_004_ogres_cottage"] diff --git a/scenes/kq4_005_forest_grove/kq4_005_forest_grove.tscn.uid b/scenes/kq4_005_forest_grove/kq4_005_forest_grove.tscn.uid new file mode 100644 index 0000000..b806a13 --- /dev/null +++ b/scenes/kq4_005_forest_grove/kq4_005_forest_grove.tscn.uid @@ -0,0 +1 @@ +uid://1c470jsfmdhxx diff --git a/scenes/kq4_005_forest_grove/pic_005_visual.png b/scenes/kq4_005_forest_grove/pic_005_visual.png new file mode 100644 index 0000000..018c4be --- /dev/null +++ b/scenes/kq4_005_forest_grove/pic_005_visual.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:341781f349e1557c36c7cdfefeff25cc1e4be907e86e683e0ce4c7c2fb0315b0 +size 18400 diff --git a/scenes/kq4_005_forest_grove/pic_005_visual.png.import b/scenes/kq4_005_forest_grove/pic_005_visual.png.import new file mode 100644 index 0000000..e47d241 --- /dev/null +++ b/scenes/kq4_005_forest_grove/pic_005_visual.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c55n7trnggl6x" +path="res://.godot/imported/pic_005_visual.png-762fdaa5ad557ec4e32f759d84933f2e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/kq4_005_forest_grove/pic_005_visual.png" +dest_files=["res://.godot/imported/pic_005_visual.png-762fdaa5ad557ec4e32f759d84933f2e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/kq4_011_enchanted_grove/kq4_011_enchanted_grove.tscn b/scenes/kq4_011_enchanted_grove/kq4_011_enchanted_grove.tscn index 33fa32a..f144318 100644 --- a/scenes/kq4_011_enchanted_grove/kq4_011_enchanted_grove.tscn +++ b/scenes/kq4_011_enchanted_grove/kq4_011_enchanted_grove.tscn @@ -41,6 +41,7 @@ position = Vector2(194, 819) position = Vector2(910, -213) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) appear_at_node = "kq4_011_enchanted_grove" +target = "uid://1c470jsfmdhxx" label = "Forest Grove" [node name="entrance" parent="kq4_005_forest_grove" index="0"] @@ -65,6 +66,7 @@ position = Vector2(293, 554) position = Vector2(910, 542) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) appear_at_node = "kq4_011_enchanted_grove" +target = "uid://1kz9yo5f1tpc6" label = "Spooky House Exterior" [node name="entrance" parent="kq4_017_spooky_house_exterior" index="0"] diff --git a/scenes/kq4_013_beach/kq4_013_beach.gd b/scenes/kq4_013_beach/kq4_013_beach.gd index e3d5c14..2e32848 100644 --- a/scenes/kq4_013_beach/kq4_013_beach.gd +++ b/scenes/kq4_013_beach/kq4_013_beach.gd @@ -14,4 +14,4 @@ func _on_green_meadow_interacted() -> void: func _on_open_ocean_interacted() -> void: - $west_exit.default_script(self) + $kq4_031_open_ocean.default_script(self) diff --git a/scenes/kq4_016_graveyard/kq4_016_graveyard.gd b/scenes/kq4_016_graveyard/kq4_016_graveyard.gd index dd6ffef..9f0f94a 100644 --- a/scenes/kq4_016_graveyard/kq4_016_graveyard.gd +++ b/scenes/kq4_016_graveyard/kq4_016_graveyard.gd @@ -11,3 +11,7 @@ func _on_forest_path_interacted() -> void: func _on_gnomes_cottage_interacted() -> void: $kq4_022_gnomes_cottage.default_script(self) + + +func _on_spooky_house_exterior_interacted() -> void: + $kq4_017_spooky_house_exterior.default_script(self) diff --git a/scenes/kq4_016_graveyard/kq4_016_graveyard.tscn b/scenes/kq4_016_graveyard/kq4_016_graveyard.tscn index d0ef06d..273e89c 100644 --- a/scenes/kq4_016_graveyard/kq4_016_graveyard.tscn +++ b/scenes/kq4_016_graveyard/kq4_016_graveyard.tscn @@ -76,11 +76,26 @@ position = Vector2(133, 643) [node name="exit" parent="kq4_022_gnomes_cottage" index="1"] position = Vector2(174, 519) +[node name="kq4_017_spooky_house_exterior" parent="." unique_id=1117747815 instance=ExtResource("4_abc")] +position = Vector2(1766, 74) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_016_graveyard" +target = "uid://1kz9yo5f1tpc6" +label = "Spooky House Exterior" + +[node name="entrance" parent="kq4_017_spooky_house_exterior" index="0"] +position = Vector2(24, 565) + +[node name="exit" parent="kq4_017_spooky_house_exterior" index="1"] +position = Vector2(293, 554) + [connection signal="interacted" from="kq4_015_frog_pond" to="." method="_on_frog_pond_interacted"] [connection signal="interacted" from="kq4_010_forest_path" to="." method="_on_forest_path_interacted"] [connection signal="interacted" from="kq4_022_gnomes_cottage" to="." method="_on_gnomes_cottage_interacted"] +[connection signal="interacted" from="kq4_017_spooky_house_exterior" to="." method="_on_spooky_house_exterior_interacted"] [editable path="kq4_015_frog_pond"] [editable path="kq4_010_forest_path"] [editable path="kq4_022_gnomes_cottage"] +[editable path="kq4_017_spooky_house_exterior"] diff --git a/scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.gd b/scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.gd new file mode 100644 index 0000000..5093a51 --- /dev/null +++ b/scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.gd @@ -0,0 +1,17 @@ +extends Scene + + +func _on_enchanted_grove_interacted() -> void: + $kq4_011_enchanted_grove.default_script(self) + + +func _on_graveyard_interacted() -> void: + $kq4_016_graveyard.default_script(self) + + +func _on_forest_path_with_cottage_interacted() -> void: + $kq4_023_forest_path_with_cottage.default_script(self) + + +func _on_cemetery_interacted() -> void: + $kq4_018_cemetery.default_script(self) diff --git a/scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.gd.uid b/scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.gd.uid new file mode 100644 index 0000000..f4fe764 --- /dev/null +++ b/scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.gd.uid @@ -0,0 +1 @@ +uid://ngvn8144qom7 diff --git a/scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.tscn b/scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.tscn new file mode 100644 index 0000000..8d418b9 --- /dev/null +++ b/scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.tscn @@ -0,0 +1,99 @@ +[gd_scene format=3 uid="uid://1kz9yo5f1tpc6"] + +[ext_resource type="Script" path="res://scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.gd" id="1_abc"] +[ext_resource type="Texture2D" path="res://scenes/kq4_017_spooky_house_exterior/pic_017_visual.png" id="2_abc"] +[ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"] +[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"] + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] +vertices = PackedVector2Array(374.47656, 1145.0078, -140.75781, 1180.2031, -76.11719, 588.6797, -53.679688, 490.4922, 1222.4688, 227.3125, 1994.2422, 468.4297, 2012.7031, 1020.2031, 1268.1875, 1113.0234) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(3, 4, 5, 6, 7, 0)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-62, 482, 1223, 217, 2004, 461, 2023, 1029, 1269, 1123, 375, 1155, -152, 1191, -86, 587)]) + +[node name="background" type="Node2D" unique_id=657573819] +y_sort_enabled = true +script = ExtResource("1_abc") + +[node name="bg" type="Sprite2D" parent="." unique_id=874052749] +scale = Vector2(6, 6) +texture = ExtResource("2_abc") +centered = false + +[node name="StartScalePoint" type="Node2D" parent="." unique_id=1640687858] +position = Vector2(1476, 742) +script = ExtResource("3_abc") +target_scale = 0.25 + +[node name="EndScalePoint" type="Node2D" parent="." unique_id=1996763530] +position = Vector2(1408, 1097) +scale = Vector2(0.44, 0.44) +script = ExtResource("3_abc") +target_scale = 0.35 + +[node name="pathfind" type="NavigationRegion2D" parent="." unique_id=1418661203] +position = Vector2(-1, 0) +navigation_polygon = SubResource("NavigationPolygon_ppo6b") + +[node name="default-starting-point" type="Node2D" parent="." unique_id=1018141532] +position = Vector2(194, 819) + +[node name="kq4_011_enchanted_grove" parent="." unique_id=484638394 instance=ExtResource("4_abc")] +position = Vector2(910, -213) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_017_spooky_house_exterior" +target = "uid://ujxktwdn8l8r" +label = "Enchanted Grove" + +[node name="entrance" parent="kq4_011_enchanted_grove" index="0"] +position = Vector2(133, 643) + +[node name="exit" parent="kq4_011_enchanted_grove" index="1"] +position = Vector2(174, 519) + +[node name="kq4_018_cemetery" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] +position = Vector2(1766, 74) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_017_spooky_house_exterior" +target = "uid://35amqvpjgpf2x" +label = "Cemetery" + +[node name="entrance" parent="kq4_018_cemetery" index="0"] +position = Vector2(24, 565) + +[node name="exit" parent="kq4_018_cemetery" index="1"] +position = Vector2(293, 554) + +[node name="kq4_023_forest_path_with_cottage" parent="." unique_id=990092106 instance=ExtResource("4_abc")] +position = Vector2(910, 542) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_017_spooky_house_exterior" +target = "uid://1mhkt47y9jjhc" +label = "Forest Path with Cottage" + +[node name="entrance" parent="kq4_023_forest_path_with_cottage" index="0"] +position = Vector2(118, 514) + +[node name="exit" parent="kq4_023_forest_path_with_cottage" index="1"] +position = Vector2(151, 615) + +[node name="kq4_016_graveyard" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_017_spooky_house_exterior" +target = "uid://27b2k6gky3afg" +label = "Graveyard" + +[node name="entrance" parent="kq4_016_graveyard" index="0"] +position = Vector2(506, 555) + +[node name="exit" parent="kq4_016_graveyard" index="1"] +position = Vector2(-64, 534) + +[connection signal="interacted" from="kq4_011_enchanted_grove" to="." method="_on_enchanted_grove_interacted"] +[connection signal="interacted" from="kq4_018_cemetery" to="." method="_on_cemetery_interacted"] +[connection signal="interacted" from="kq4_023_forest_path_with_cottage" to="." method="_on_forest_path_with_cottage_interacted"] +[connection signal="interacted" from="kq4_016_graveyard" to="." method="_on_graveyard_interacted"] + +[editable path="kq4_011_enchanted_grove"] +[editable path="kq4_018_cemetery"] +[editable path="kq4_023_forest_path_with_cottage"] +[editable path="kq4_016_graveyard"] diff --git a/scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.tscn.uid b/scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.tscn.uid new file mode 100644 index 0000000..f8261f5 --- /dev/null +++ b/scenes/kq4_017_spooky_house_exterior/kq4_017_spooky_house_exterior.tscn.uid @@ -0,0 +1 @@ +uid://1kz9yo5f1tpc6 diff --git a/scenes/kq4_017_spooky_house_exterior/pic_017_visual.png b/scenes/kq4_017_spooky_house_exterior/pic_017_visual.png new file mode 100644 index 0000000..78d5725 --- /dev/null +++ b/scenes/kq4_017_spooky_house_exterior/pic_017_visual.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7752f9c9f79da91f1b6257ef9eee0081d89f7d6af935fdc69869f91ad4126bf1 +size 16123 diff --git a/scenes/kq4_017_spooky_house_exterior/pic_017_visual.png.import b/scenes/kq4_017_spooky_house_exterior/pic_017_visual.png.import new file mode 100644 index 0000000..e98833b --- /dev/null +++ b/scenes/kq4_017_spooky_house_exterior/pic_017_visual.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b57yy6cc775at" +path="res://.godot/imported/pic_017_visual.png-22741fcad584e3c60d2e4bebf00c162a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/kq4_017_spooky_house_exterior/pic_017_visual.png" +dest_files=["res://.godot/imported/pic_017_visual.png-22741fcad584e3c60d2e4bebf00c162a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/kq4_018_cemetery/kq4_018_cemetery.gd b/scenes/kq4_018_cemetery/kq4_018_cemetery.gd new file mode 100644 index 0000000..28d8fab --- /dev/null +++ b/scenes/kq4_018_cemetery/kq4_018_cemetery.gd @@ -0,0 +1,13 @@ +extends Scene + + +func _on_haunted_forest_interacted() -> void: + $kq4_012_haunted_forest.default_script(self) + + +func _on_waterfall_and_pool_interacted() -> void: + $kq4_024_waterfall_and_pool.default_script(self) + + +func _on_spooky_house_exterior_interacted() -> void: + $kq4_017_spooky_house_exterior.default_script(self) diff --git a/scenes/kq4_018_cemetery/kq4_018_cemetery.gd.uid b/scenes/kq4_018_cemetery/kq4_018_cemetery.gd.uid new file mode 100644 index 0000000..e317894 --- /dev/null +++ b/scenes/kq4_018_cemetery/kq4_018_cemetery.gd.uid @@ -0,0 +1 @@ +uid://1oricgqlfv2k diff --git a/scenes/kq4_018_cemetery/kq4_018_cemetery.tscn b/scenes/kq4_018_cemetery/kq4_018_cemetery.tscn new file mode 100644 index 0000000..be0bba1 --- /dev/null +++ b/scenes/kq4_018_cemetery/kq4_018_cemetery.tscn @@ -0,0 +1,83 @@ +[gd_scene format=3 uid="uid://35amqvpjgpf2x"] + +[ext_resource type="Script" path="res://scenes/kq4_018_cemetery/kq4_018_cemetery.gd" id="1_abc"] +[ext_resource type="Texture2D" path="res://scenes/kq4_018_cemetery/pic_018_visual.png" id="2_abc"] +[ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"] +[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"] + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] +vertices = PackedVector2Array(374.47656, 1145.0078, -140.75781, 1180.2031, -76.11719, 588.6797, -53.679688, 490.4922, 1222.4688, 227.3125, 1994.2422, 468.4297, 2012.7031, 1020.2031, 1268.1875, 1113.0234) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(3, 4, 5, 6, 7, 0)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-62, 482, 1223, 217, 2004, 461, 2023, 1029, 1269, 1123, 375, 1155, -152, 1191, -86, 587)]) + +[node name="background" type="Node2D" unique_id=657573819] +y_sort_enabled = true +script = ExtResource("1_abc") + +[node name="bg" type="Sprite2D" parent="." unique_id=874052749] +scale = Vector2(6, 6) +texture = ExtResource("2_abc") +centered = false + +[node name="StartScalePoint" type="Node2D" parent="." unique_id=1640687858] +position = Vector2(1476, 742) +script = ExtResource("3_abc") +target_scale = 0.25 + +[node name="EndScalePoint" type="Node2D" parent="." unique_id=1996763530] +position = Vector2(1408, 1097) +scale = Vector2(0.44, 0.44) +script = ExtResource("3_abc") +target_scale = 0.35 + +[node name="pathfind" type="NavigationRegion2D" parent="." unique_id=1418661203] +position = Vector2(-1, 0) +navigation_polygon = SubResource("NavigationPolygon_ppo6b") + +[node name="default-starting-point" type="Node2D" parent="." unique_id=1018141532] +position = Vector2(194, 819) + +[node name="kq4_012_haunted_forest" parent="." unique_id=484638394 instance=ExtResource("4_abc")] +position = Vector2(910, -213) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_018_cemetery" +label = "Haunted Forest" + +[node name="entrance" parent="kq4_012_haunted_forest" index="0"] +position = Vector2(133, 643) + +[node name="exit" parent="kq4_012_haunted_forest" index="1"] +position = Vector2(174, 519) + +[node name="kq4_024_waterfall_and_pool" parent="." unique_id=990092106 instance=ExtResource("4_abc")] +position = Vector2(910, 542) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_018_cemetery" +target = "uid://33baqytea2g56" +label = "Waterfall and Pool" + +[node name="entrance" parent="kq4_024_waterfall_and_pool" index="0"] +position = Vector2(118, 514) + +[node name="exit" parent="kq4_024_waterfall_and_pool" index="1"] +position = Vector2(151, 615) + +[node name="kq4_017_spooky_house_exterior" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_018_cemetery" +target = "uid://1kz9yo5f1tpc6" +label = "Spooky House Exterior" + +[node name="entrance" parent="kq4_017_spooky_house_exterior" index="0"] +position = Vector2(506, 555) + +[node name="exit" parent="kq4_017_spooky_house_exterior" index="1"] +position = Vector2(-64, 534) + +[connection signal="interacted" from="kq4_012_haunted_forest" to="." method="_on_haunted_forest_interacted"] +[connection signal="interacted" from="kq4_024_waterfall_and_pool" to="." method="_on_waterfall_and_pool_interacted"] +[connection signal="interacted" from="kq4_017_spooky_house_exterior" to="." method="_on_spooky_house_exterior_interacted"] + +[editable path="kq4_012_haunted_forest"] +[editable path="kq4_024_waterfall_and_pool"] +[editable path="kq4_017_spooky_house_exterior"] diff --git a/scenes/kq4_018_cemetery/kq4_018_cemetery.tscn.uid b/scenes/kq4_018_cemetery/kq4_018_cemetery.tscn.uid new file mode 100644 index 0000000..2a8b190 --- /dev/null +++ b/scenes/kq4_018_cemetery/kq4_018_cemetery.tscn.uid @@ -0,0 +1 @@ +uid://35amqvpjgpf2x diff --git a/scenes/kq4_018_cemetery/pic_018_visual.png b/scenes/kq4_018_cemetery/pic_018_visual.png new file mode 100644 index 0000000..ecf47eb --- /dev/null +++ b/scenes/kq4_018_cemetery/pic_018_visual.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf8e0c7ff81950e6abacfc8506e12e5e8340c886de9449b7ae9ec5f742ebeae5 +size 17038 diff --git a/scenes/kq4_018_cemetery/pic_018_visual.png.import b/scenes/kq4_018_cemetery/pic_018_visual.png.import new file mode 100644 index 0000000..64469ac --- /dev/null +++ b/scenes/kq4_018_cemetery/pic_018_visual.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cjobwcbr0ojgm" +path="res://.godot/imported/pic_018_visual.png-95fb36e791eb2f226ec2e4b45884fec6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/kq4_018_cemetery/pic_018_visual.png" +dest_files=["res://.godot/imported/pic_018_visual.png-95fb36e791eb2f226ec2e4b45884fec6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/kq4_019_coastal_cliffs/kq4_019_coastal_cliffs.gd b/scenes/kq4_019_coastal_cliffs/kq4_019_coastal_cliffs.gd index f8cf17d..3d59cca 100644 --- a/scenes/kq4_019_coastal_cliffs/kq4_019_coastal_cliffs.gd +++ b/scenes/kq4_019_coastal_cliffs/kq4_019_coastal_cliffs.gd @@ -11,3 +11,7 @@ func _on_beach_interacted() -> void: func _on_beach_at_river_delta_interacted() -> void: $kq4_025_beach_at_river_delta.default_script(self) + + +func _on_open_ocean_interacted() -> void: + $kq4_031_open_ocean.default_script(self) diff --git a/scenes/kq4_019_coastal_cliffs/kq4_019_coastal_cliffs.tscn b/scenes/kq4_019_coastal_cliffs/kq4_019_coastal_cliffs.tscn index 6b531be..97d32fe 100644 --- a/scenes/kq4_019_coastal_cliffs/kq4_019_coastal_cliffs.tscn +++ b/scenes/kq4_019_coastal_cliffs/kq4_019_coastal_cliffs.tscn @@ -53,10 +53,24 @@ position = Vector2(1400, 300) [node name="exit" parent="kq4_013_beach" index="1"] position = Vector2(1400, 150) +[node name="kq4_031_open_ocean" parent="." index="8" instance=ExtResource("4_8xjvi")] +polygon = PackedVector2Array(100, 400, 200, 500, 400, 500, 500, 400) +appear_at_node = "kq4_019_coastal_cliffs" +target = "uid://2f7c49hpkducc" +label = "Open Ocean" + +[node name="entrance" parent="kq4_031_open_ocean" index="0"] +position = Vector2(300, 450) + +[node name="exit" parent="kq4_031_open_ocean" index="1"] +position = Vector2(150, 450) + [connection signal="interacted" from="kq4_013_beach" to="." method="_on_beach_interacted"] [connection signal="interacted" from="kq4_020_meadow" to="." method="_on_meadow_interacted"] [connection signal="interacted" from="kq4_025_beach_at_river_delta" to="." method="_on_beach_at_river_delta_interacted"] +[connection signal="interacted" from="kq4_031_open_ocean" to="." method="_on_open_ocean_interacted"] [editable path="kq4_020_meadow"] [editable path="kq4_025_beach_at_river_delta"] [editable path="kq4_013_beach"] +[editable path="kq4_031_open_ocean"] diff --git a/scenes/kq4_022_gnomes_cottage/kq4_022_gnomes_cottage.gd b/scenes/kq4_022_gnomes_cottage/kq4_022_gnomes_cottage.gd index 5c03db0..5b229d9 100644 --- a/scenes/kq4_022_gnomes_cottage/kq4_022_gnomes_cottage.gd +++ b/scenes/kq4_022_gnomes_cottage/kq4_022_gnomes_cottage.gd @@ -6,7 +6,7 @@ func _on_graveyard_interacted() -> void: func _on_028_interacted() -> void: - $kq4_028.default_script(self) + $kq4_028_mine_entrance.default_script(self) func _on_023_interacted() -> void: @@ -14,4 +14,4 @@ func _on_023_interacted() -> void: func _on_021_interacted() -> void: - $kq4_021.default_script(self) + $kq4_021_bridge_over_stream.default_script(self) diff --git a/scenes/kq4_022_gnomes_cottage/kq4_022_gnomes_cottage.tscn b/scenes/kq4_022_gnomes_cottage/kq4_022_gnomes_cottage.tscn index 0aa7b91..e2ace82 100644 --- a/scenes/kq4_022_gnomes_cottage/kq4_022_gnomes_cottage.tscn +++ b/scenes/kq4_022_gnomes_cottage/kq4_022_gnomes_cottage.tscn @@ -50,17 +50,17 @@ position = Vector2(133, 643) [node name="exit" parent="kq4_016_graveyard" index="1"] position = Vector2(174, 519) -[node name="kq4_028" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] +[node name="kq4_028_mine_entrance" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] position = Vector2(910, 542) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) appear_at_node = "kq4_022_gnomes_cottage" target = "uid://qkcwifq2lb9m" label = "South Exit" -[node name="entrance" parent="kq4_028" index="0"] +[node name="entrance" parent="kq4_028_mine_entrance" index="0"] position = Vector2(118, 514) -[node name="exit" parent="kq4_028" index="1"] +[node name="exit" parent="kq4_028_mine_entrance" index="1"] position = Vector2(151, 615) [node name="kq4_023_forest_path_with_cottage" parent="." unique_id=990092106 instance=ExtResource("4_abc")] @@ -76,24 +76,24 @@ position = Vector2(24, 565) [node name="exit" parent="kq4_023_forest_path_with_cottage" index="1"] position = Vector2(293, 554) -[node name="kq4_021" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] +[node name="kq4_021_bridge_over_stream" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) appear_at_node = "kq4_022_gnomes_cottage" target = "uid://3uxipzjekijqc" label = "West Exit" -[node name="entrance" parent="kq4_021" index="0"] +[node name="entrance" parent="kq4_021_bridge_over_stream" index="0"] position = Vector2(506, 555) -[node name="exit" parent="kq4_021" index="1"] +[node name="exit" parent="kq4_021_bridge_over_stream" index="1"] position = Vector2(-64, 534) [connection signal="interacted" from="kq4_016_graveyard" to="." method="_on_graveyard_interacted"] -[connection signal="interacted" from="kq4_028" to="." method="_on_028_interacted"] +[connection signal="interacted" from="kq4_028_mine_entrance" to="." method="_on_028_interacted"] [connection signal="interacted" from="kq4_023_forest_path_with_cottage" to="." method="_on_023_interacted"] -[connection signal="interacted" from="kq4_021" to="." method="_on_021_interacted"] +[connection signal="interacted" from="kq4_021_bridge_over_stream" to="." method="_on_021_interacted"] [editable path="kq4_016_graveyard"] -[editable path="kq4_028"] +[editable path="kq4_028_mine_entrance"] [editable path="kq4_023_forest_path_with_cottage"] -[editable path="kq4_021"] +[editable path="kq4_021_bridge_over_stream"] diff --git a/scenes/kq4_023_forest_path_with_cottage/kq4_023_forest_path_with_cottage.gd b/scenes/kq4_023_forest_path_with_cottage/kq4_023_forest_path_with_cottage.gd index 812b53f..42b2bd8 100644 --- a/scenes/kq4_023_forest_path_with_cottage/kq4_023_forest_path_with_cottage.gd +++ b/scenes/kq4_023_forest_path_with_cottage/kq4_023_forest_path_with_cottage.gd @@ -3,3 +3,15 @@ extends Scene func _on_gnomes_cottage_interacted() -> void: $kq4_022_gnomes_cottage.default_script(self) + + +func _on_spooky_house_exterior_interacted() -> void: + $kq4_017_spooky_house_exterior.default_script(self) + + +func _on_waterfall_and_pool_interacted() -> void: + $kq4_024_waterfall_and_pool.default_script(self) + + +func _on_dense_forest_interacted() -> void: + $kq4_029_dense_forest.default_script(self) diff --git a/scenes/kq4_023_forest_path_with_cottage/kq4_023_forest_path_with_cottage.tscn b/scenes/kq4_023_forest_path_with_cottage/kq4_023_forest_path_with_cottage.tscn index ad02093..b8df9aa 100644 --- a/scenes/kq4_023_forest_path_with_cottage/kq4_023_forest_path_with_cottage.tscn +++ b/scenes/kq4_023_forest_path_with_cottage/kq4_023_forest_path_with_cottage.tscn @@ -40,7 +40,8 @@ position = Vector2(194, 819) [node name="kq4_017_spooky_house_exterior" parent="." unique_id=484638394 instance=ExtResource("4_abc")] position = Vector2(910, -213) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) -appear_at_node = "kq4_017_spooky_house_exterior" +appear_at_node = "kq4_023_forest_path_with_cottage" +target = "uid://1kz9yo5f1tpc6" label = "Spooky House Exterior" [node name="entrance" parent="kq4_017_spooky_house_exterior" index="0"] @@ -52,7 +53,8 @@ position = Vector2(174, 519) [node name="kq4_024_waterfall_and_pool" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] position = Vector2(1766, 74) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) -appear_at_node = "kq4_024_waterfall_and_pool" +appear_at_node = "kq4_023_forest_path_with_cottage" +target = "uid://33baqytea2g56" label = "Waterfall and Pool" [node name="entrance" parent="kq4_024_waterfall_and_pool" index="0"] @@ -64,7 +66,8 @@ position = Vector2(293, 554) [node name="kq4_029_dense_forest" parent="." unique_id=990092106 instance=ExtResource("4_abc")] position = Vector2(910, 542) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) -appear_at_node = "kq4_029_dense_forest" +appear_at_node = "kq4_023_forest_path_with_cottage" +target = "uid://1sfzaldfq5kn1" label = "Dense Forest" [node name="entrance" parent="kq4_029_dense_forest" index="0"] @@ -75,7 +78,7 @@ position = Vector2(151, 615) [node name="kq4_022_gnomes_cottage" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) -appear_at_node = "kq4_022_gnomes_cottage" +appear_at_node = "kq4_023_forest_path_with_cottage" target = "uid://3oq4x3exoimdb" label = "Gnome's Cottage" @@ -85,6 +88,9 @@ position = Vector2(506, 555) [node name="exit" parent="kq4_022_gnomes_cottage" index="1"] position = Vector2(-64, 534) +[connection signal="interacted" from="kq4_017_spooky_house_exterior" to="." method="_on_spooky_house_exterior_interacted"] +[connection signal="interacted" from="kq4_024_waterfall_and_pool" to="." method="_on_waterfall_and_pool_interacted"] +[connection signal="interacted" from="kq4_029_dense_forest" to="." method="_on_dense_forest_interacted"] [connection signal="interacted" from="kq4_022_gnomes_cottage" to="." method="_on_gnomes_cottage_interacted"] [editable path="kq4_017_spooky_house_exterior"] diff --git a/scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.gd b/scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.gd new file mode 100644 index 0000000..0947557 --- /dev/null +++ b/scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.gd @@ -0,0 +1,13 @@ +extends Scene + + +func _on_cemetery_interacted() -> void: + $kq4_018_cemetery.default_script(self) + + +func _on_mountain_pass_interacted() -> void: + $kq4_030_mountain_pass.default_script(self) + + +func _on_forest_path_with_cottage_interacted() -> void: + $kq4_023_forest_path_with_cottage.default_script(self) diff --git a/scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.gd.uid b/scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.gd.uid new file mode 100644 index 0000000..17c06cd --- /dev/null +++ b/scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.gd.uid @@ -0,0 +1 @@ +uid://cbq2b0g2qc65u diff --git a/scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.tscn b/scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.tscn new file mode 100644 index 0000000..5479f58 --- /dev/null +++ b/scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.tscn @@ -0,0 +1,84 @@ +[gd_scene format=3 uid="uid://33baqytea2g56"] + +[ext_resource type="Script" path="res://scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.gd" id="1_abc"] +[ext_resource type="Texture2D" path="res://scenes/kq4_024_waterfall_and_pool/pic_024_visual.png" id="2_abc"] +[ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"] +[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"] + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] +vertices = PackedVector2Array(374.47656, 1145.0078, -140.75781, 1180.2031, -76.11719, 588.6797, -53.679688, 490.4922, 1222.4688, 227.3125, 1994.2422, 468.4297, 2012.7031, 1020.2031, 1268.1875, 1113.0234) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(3, 4, 5, 6, 7, 0)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-62, 482, 1223, 217, 2004, 461, 2023, 1029, 1269, 1123, 375, 1155, -152, 1191, -86, 587)]) + +[node name="background" type="Node2D" unique_id=657573819] +y_sort_enabled = true +script = ExtResource("1_abc") + +[node name="bg" type="Sprite2D" parent="." unique_id=874052749] +scale = Vector2(6, 6) +texture = ExtResource("2_abc") +centered = false + +[node name="StartScalePoint" type="Node2D" parent="." unique_id=1640687858] +position = Vector2(1476, 742) +script = ExtResource("3_abc") +target_scale = 0.25 + +[node name="EndScalePoint" type="Node2D" parent="." unique_id=1996763530] +position = Vector2(1408, 1097) +scale = Vector2(0.44, 0.44) +script = ExtResource("3_abc") +target_scale = 0.35 + +[node name="pathfind" type="NavigationRegion2D" parent="." unique_id=1418661203] +position = Vector2(-1, 0) +navigation_polygon = SubResource("NavigationPolygon_ppo6b") + +[node name="default-starting-point" type="Node2D" parent="." unique_id=1018141532] +position = Vector2(194, 819) + +[node name="kq4_018_cemetery" parent="." unique_id=484638394 instance=ExtResource("4_abc")] +position = Vector2(910, -213) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_024_waterfall_and_pool" +target = "uid://35amqvpjgpf2x" +label = "Cemetery" + +[node name="entrance" parent="kq4_018_cemetery" index="0"] +position = Vector2(133, 643) + +[node name="exit" parent="kq4_018_cemetery" index="1"] +position = Vector2(174, 519) + +[node name="kq4_030_mountain_pass" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] +position = Vector2(910, 542) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_024_waterfall_and_pool" +target = "uid://7dfmw11k58wd" +label = "Mountain Pass" + +[node name="entrance" parent="kq4_030_mountain_pass" index="0"] +position = Vector2(118, 514) + +[node name="exit" parent="kq4_030_mountain_pass" index="1"] +position = Vector2(151, 615) + +[node name="kq4_023_forest_path_with_cottage" parent="." unique_id=990092106 instance=ExtResource("4_abc")] +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_024_waterfall_and_pool" +target = "uid://1mhkt47y9jjhc" +label = "Forest Path with Cottage" + +[node name="entrance" parent="kq4_023_forest_path_with_cottage" index="0"] +position = Vector2(506, 555) + +[node name="exit" parent="kq4_023_forest_path_with_cottage" index="1"] +position = Vector2(-64, 534) + +[connection signal="interacted" from="kq4_018_cemetery" to="." method="_on_cemetery_interacted"] +[connection signal="interacted" from="kq4_030_mountain_pass" to="." method="_on_mountain_pass_interacted"] +[connection signal="interacted" from="kq4_023_forest_path_with_cottage" to="." method="_on_forest_path_with_cottage_interacted"] + +[editable path="kq4_018_cemetery"] +[editable path="kq4_030_mountain_pass"] +[editable path="kq4_023_forest_path_with_cottage"] diff --git a/scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.tscn.uid b/scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.tscn.uid new file mode 100644 index 0000000..b6583c0 --- /dev/null +++ b/scenes/kq4_024_waterfall_and_pool/kq4_024_waterfall_and_pool.tscn.uid @@ -0,0 +1 @@ +uid://33baqytea2g56 diff --git a/scenes/kq4_024_waterfall_and_pool/pic_024_visual.png b/scenes/kq4_024_waterfall_and_pool/pic_024_visual.png new file mode 100644 index 0000000..46edb64 --- /dev/null +++ b/scenes/kq4_024_waterfall_and_pool/pic_024_visual.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25acdc4348ede3f9c255205385eb65a0adbf5455152712ec2b9ead840af39d95 +size 16422 diff --git a/scenes/kq4_024_waterfall_and_pool/pic_024_visual.png.import b/scenes/kq4_024_waterfall_and_pool/pic_024_visual.png.import new file mode 100644 index 0000000..b782581 --- /dev/null +++ b/scenes/kq4_024_waterfall_and_pool/pic_024_visual.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bqddklpe5r50d" +path="res://.godot/imported/pic_024_visual.png-2c3a203a4eaedf6b2a14d632a4eb3d5a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/kq4_024_waterfall_and_pool/pic_024_visual.png" +dest_files=["res://.godot/imported/pic_024_visual.png-2c3a203a4eaedf6b2a14d632a4eb3d5a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/kq4_025_beach_at_river_delta/kq4_025_beach_at_river_delta.gd b/scenes/kq4_025_beach_at_river_delta/kq4_025_beach_at_river_delta.gd index 4d89eab..e1da0a0 100644 --- a/scenes/kq4_025_beach_at_river_delta/kq4_025_beach_at_river_delta.gd +++ b/scenes/kq4_025_beach_at_river_delta/kq4_025_beach_at_river_delta.gd @@ -10,7 +10,7 @@ func _on_river_meadow_interacted() -> void: func _on_open_ocean_interacted() -> void: - $west_exit.default_script(self) + $kq4_031_open_ocean.default_script(self) func _on_beach_interacted() -> void: diff --git a/scenes/kq4_028_mine_entrance/kq4_028_mine_entrance.gd b/scenes/kq4_028_mine_entrance/kq4_028_mine_entrance.gd index cadaab3..9256f8a 100644 --- a/scenes/kq4_028_mine_entrance/kq4_028_mine_entrance.gd +++ b/scenes/kq4_028_mine_entrance/kq4_028_mine_entrance.gd @@ -5,8 +5,8 @@ func _on_gnomes_cottage_interacted() -> void: $kq4_022_gnomes_cottage.default_script(self) -func _on_029_interacted() -> void: - $kq4_029.default_script(self) +func _on_dense_forest_interacted() -> void: + $kq4_029_dense_forest.default_script(self) func _on_ogres_cottage_interacted() -> void: @@ -14,4 +14,4 @@ func _on_ogres_cottage_interacted() -> void: func _on_forest_path_interacted() -> void: - $kq4_027.default_script(self) + $kq4_027_forest_path.default_script(self) diff --git a/scenes/kq4_028_mine_entrance/kq4_028_mine_entrance.tscn b/scenes/kq4_028_mine_entrance/kq4_028_mine_entrance.tscn index 6a39fe7..1c298b0 100644 --- a/scenes/kq4_028_mine_entrance/kq4_028_mine_entrance.tscn +++ b/scenes/kq4_028_mine_entrance/kq4_028_mine_entrance.tscn @@ -50,16 +50,17 @@ position = Vector2(133, 643) [node name="exit" parent="kq4_022_gnomes_cottage" index="1"] position = Vector2(174, 519) -[node name="kq4_029" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] +[node name="kq4_029_dense_forest" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] position = Vector2(1766, 74) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) appear_at_node = "kq4_028_mine_entrance" -label = "East Exit" +target = "uid://1sfzaldfq5kn1" +label = "Dense Forest" -[node name="entrance" parent="kq4_029" index="0"] +[node name="entrance" parent="kq4_029_dense_forest" index="0"] position = Vector2(24, 565) -[node name="exit" parent="kq4_029" index="1"] +[node name="exit" parent="kq4_029_dense_forest" index="1"] position = Vector2(293, 554) [node name="kq4_004_ogres_cottage" parent="." unique_id=990092106 instance=ExtResource("4_abc")] @@ -75,25 +76,25 @@ position = Vector2(118, 514) [node name="exit" parent="kq4_004_ogres_cottage" index="1"] position = Vector2(151, 615) -[node name="kq4_027" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] +[node name="kq4_027_forest_path" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) appear_at_node = "kq4_028_mine_entrance" target = "uid://1fpyosj18xls7" label = "Forest Path" -[node name="entrance" parent="kq4_027" index="0"] +[node name="entrance" parent="kq4_027_forest_path" index="0"] position = Vector2(506, 555) -[node name="exit" parent="kq4_027" index="1"] +[node name="exit" parent="kq4_027_forest_path" index="1"] position = Vector2(-64, 534) -[connection signal="interacted" from="kq4_027" to="." method="_on_forest_path_interacted"] +[connection signal="interacted" from="kq4_027_forest_path" to="." method="_on_forest_path_interacted"] [connection signal="interacted" from="kq4_022_gnomes_cottage" to="." method="_on_gnomes_cottage_interacted"] -[connection signal="interacted" from="kq4_029" to="." method="_on_029_interacted"] +[connection signal="interacted" from="kq4_029_dense_forest" to="." method="_on_dense_forest_interacted"] [connection signal="interacted" from="kq4_004_ogres_cottage" to="." method="_on_ogres_cottage_interacted"] [editable path="kq4_022_gnomes_cottage"] -[editable path="kq4_029"] +[editable path="kq4_029_dense_forest"] [editable path="kq4_004_ogres_cottage"] -[editable path="kq4_027"] +[editable path="kq4_027_forest_path"] diff --git a/scenes/kq4_029_dense_forest/kq4_029_dense_forest.gd b/scenes/kq4_029_dense_forest/kq4_029_dense_forest.gd new file mode 100644 index 0000000..14ee764 --- /dev/null +++ b/scenes/kq4_029_dense_forest/kq4_029_dense_forest.gd @@ -0,0 +1,17 @@ +extends Scene + + +func _on_forest_path_with_cottage_interacted() -> void: + $kq4_023_forest_path_with_cottage.default_script(self) + + +func _on_forest_grove_interacted() -> void: + $kq4_005_forest_grove.default_script(self) + + +func _on_mountain_pass_interacted() -> void: + $kq4_030_mountain_pass.default_script(self) + + +func _on_mine_entrance_interacted() -> void: + $kq4_028_mine_entrance.default_script(self) diff --git a/scenes/kq4_029_dense_forest/kq4_029_dense_forest.gd.uid b/scenes/kq4_029_dense_forest/kq4_029_dense_forest.gd.uid new file mode 100644 index 0000000..d7ed714 --- /dev/null +++ b/scenes/kq4_029_dense_forest/kq4_029_dense_forest.gd.uid @@ -0,0 +1 @@ +uid://bdf3esx2gpltx diff --git a/scenes/kq4_029_dense_forest/kq4_029_dense_forest.tscn b/scenes/kq4_029_dense_forest/kq4_029_dense_forest.tscn new file mode 100644 index 0000000..045ac24 --- /dev/null +++ b/scenes/kq4_029_dense_forest/kq4_029_dense_forest.tscn @@ -0,0 +1,99 @@ +[gd_scene format=3 uid="uid://1sfzaldfq5kn1"] + +[ext_resource type="Script" path="res://scenes/kq4_029_dense_forest/kq4_029_dense_forest.gd" id="1_abc"] +[ext_resource type="Texture2D" path="res://scenes/kq4_029_dense_forest/pic_029_visual.png" id="2_abc"] +[ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"] +[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"] + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] +vertices = PackedVector2Array(374.47656, 1145.0078, -140.75781, 1180.2031, -76.11719, 588.6797, -53.679688, 490.4922, 1222.4688, 227.3125, 1994.2422, 468.4297, 2012.7031, 1020.2031, 1268.1875, 1113.0234) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(3, 4, 5, 6, 7, 0)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-62, 482, 1223, 217, 2004, 461, 2023, 1029, 1269, 1123, 375, 1155, -152, 1191, -86, 587)]) + +[node name="background" type="Node2D" unique_id=657573819] +y_sort_enabled = true +script = ExtResource("1_abc") + +[node name="bg" type="Sprite2D" parent="." unique_id=874052749] +scale = Vector2(6, 6) +texture = ExtResource("2_abc") +centered = false + +[node name="StartScalePoint" type="Node2D" parent="." unique_id=1640687858] +position = Vector2(1476, 742) +script = ExtResource("3_abc") +target_scale = 0.25 + +[node name="EndScalePoint" type="Node2D" parent="." unique_id=1996763530] +position = Vector2(1408, 1097) +scale = Vector2(0.44, 0.44) +script = ExtResource("3_abc") +target_scale = 0.35 + +[node name="pathfind" type="NavigationRegion2D" parent="." unique_id=1418661203] +position = Vector2(-1, 0) +navigation_polygon = SubResource("NavigationPolygon_ppo6b") + +[node name="default-starting-point" type="Node2D" parent="." unique_id=1018141532] +position = Vector2(194, 819) + +[node name="kq4_023_forest_path_with_cottage" parent="." unique_id=484638394 instance=ExtResource("4_abc")] +position = Vector2(910, -213) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_029_dense_forest" +target = "uid://1mhkt47y9jjhc" +label = "Forest Path with Cottage" + +[node name="entrance" parent="kq4_023_forest_path_with_cottage" index="0"] +position = Vector2(133, 643) + +[node name="exit" parent="kq4_023_forest_path_with_cottage" index="1"] +position = Vector2(174, 519) + +[node name="kq4_030_mountain_pass" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] +position = Vector2(1766, 74) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_029_dense_forest" +target = "uid://7dfmw11k58wd" +label = "Mountain Pass" + +[node name="entrance" parent="kq4_030_mountain_pass" index="0"] +position = Vector2(24, 565) + +[node name="exit" parent="kq4_030_mountain_pass" index="1"] +position = Vector2(293, 554) + +[node name="kq4_005_forest_grove" parent="." unique_id=990092106 instance=ExtResource("4_abc")] +position = Vector2(910, 542) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_029_dense_forest" +target = "uid://1c470jsfmdhxx" +label = "Forest Grove" + +[node name="entrance" parent="kq4_005_forest_grove" index="0"] +position = Vector2(118, 514) + +[node name="exit" parent="kq4_005_forest_grove" index="1"] +position = Vector2(151, 615) + +[node name="kq4_028_mine_entrance" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_029_dense_forest" +target = "uid://qkcwifq2lb9m" +label = "Mine Entrance" + +[node name="entrance" parent="kq4_028_mine_entrance" index="0"] +position = Vector2(506, 555) + +[node name="exit" parent="kq4_028_mine_entrance" index="1"] +position = Vector2(-64, 534) + +[connection signal="interacted" from="kq4_023_forest_path_with_cottage" to="." method="_on_forest_path_with_cottage_interacted"] +[connection signal="interacted" from="kq4_030_mountain_pass" to="." method="_on_mountain_pass_interacted"] +[connection signal="interacted" from="kq4_005_forest_grove" to="." method="_on_forest_grove_interacted"] +[connection signal="interacted" from="kq4_028_mine_entrance" to="." method="_on_mine_entrance_interacted"] + +[editable path="kq4_023_forest_path_with_cottage"] +[editable path="kq4_030_mountain_pass"] +[editable path="kq4_005_forest_grove"] +[editable path="kq4_028_mine_entrance"] diff --git a/scenes/kq4_029_dense_forest/kq4_029_dense_forest.tscn.uid b/scenes/kq4_029_dense_forest/kq4_029_dense_forest.tscn.uid new file mode 100644 index 0000000..93d9d0a --- /dev/null +++ b/scenes/kq4_029_dense_forest/kq4_029_dense_forest.tscn.uid @@ -0,0 +1 @@ +uid://1sfzaldfq5kn1 diff --git a/scenes/kq4_029_dense_forest/pic_029_visual.png b/scenes/kq4_029_dense_forest/pic_029_visual.png new file mode 100644 index 0000000..bae701a --- /dev/null +++ b/scenes/kq4_029_dense_forest/pic_029_visual.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f325381a88653265b3889ab9b7f33fff44997262606c1c6e8e17998dbbec9066 +size 14610 diff --git a/scenes/kq4_029_dense_forest/pic_029_visual.png.import b/scenes/kq4_029_dense_forest/pic_029_visual.png.import new file mode 100644 index 0000000..1f382d9 --- /dev/null +++ b/scenes/kq4_029_dense_forest/pic_029_visual.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cccxa28badyuv" +path="res://.godot/imported/pic_029_visual.png-13065378b5dd5025abf0e3ef38a6a6ff.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/kq4_029_dense_forest/pic_029_visual.png" +dest_files=["res://.godot/imported/pic_029_visual.png-13065378b5dd5025abf0e3ef38a6a6ff.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.gd b/scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.gd new file mode 100644 index 0000000..d612a3b --- /dev/null +++ b/scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.gd @@ -0,0 +1,13 @@ +extends Scene + + +func _on_waterfall_and_pool_interacted() -> void: + $kq4_024_waterfall_and_pool.default_script(self) + + +func _on_mountain_path_to_dark_castle_interacted() -> void: + $kq4_079_mountain_path_to_dark_castle.default_script(self) + + +func _on_dense_forest_interacted() -> void: + $kq4_029_dense_forest.default_script(self) diff --git a/scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.gd.uid b/scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.gd.uid new file mode 100644 index 0000000..d094b8d --- /dev/null +++ b/scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.gd.uid @@ -0,0 +1 @@ +uid://dis82jrbe2iny diff --git a/scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.tscn b/scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.tscn new file mode 100644 index 0000000..148b09b --- /dev/null +++ b/scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.tscn @@ -0,0 +1,83 @@ +[gd_scene format=3 uid="uid://7dfmw11k58wd"] + +[ext_resource type="Script" path="res://scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.gd" id="1_abc"] +[ext_resource type="Texture2D" path="res://scenes/kq4_030_mountain_pass/pic_030_visual.png" id="2_abc"] +[ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"] +[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"] + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] +vertices = PackedVector2Array(374.47656, 1145.0078, -140.75781, 1180.2031, -76.11719, 588.6797, -53.679688, 490.4922, 1222.4688, 227.3125, 1994.2422, 468.4297, 2012.7031, 1020.2031, 1268.1875, 1113.0234) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(3, 4, 5, 6, 7, 0)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-62, 482, 1223, 217, 2004, 461, 2023, 1029, 1269, 1123, 375, 1155, -152, 1191, -86, 587)]) + +[node name="background" type="Node2D" unique_id=657573819] +y_sort_enabled = true +script = ExtResource("1_abc") + +[node name="bg" type="Sprite2D" parent="." unique_id=874052749] +scale = Vector2(6, 6) +texture = ExtResource("2_abc") +centered = false + +[node name="StartScalePoint" type="Node2D" parent="." unique_id=1640687858] +position = Vector2(1476, 742) +script = ExtResource("3_abc") +target_scale = 0.25 + +[node name="EndScalePoint" type="Node2D" parent="." unique_id=1996763530] +position = Vector2(1408, 1097) +scale = Vector2(0.44, 0.44) +script = ExtResource("3_abc") +target_scale = 0.35 + +[node name="pathfind" type="NavigationRegion2D" parent="." unique_id=1418661203] +position = Vector2(-1, 0) +navigation_polygon = SubResource("NavigationPolygon_ppo6b") + +[node name="default-starting-point" type="Node2D" parent="." unique_id=1018141532] +position = Vector2(194, 819) + +[node name="kq4_024_waterfall_and_pool" parent="." unique_id=484638394 instance=ExtResource("4_abc")] +position = Vector2(910, -213) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_030_mountain_pass" +target = "uid://33baqytea2g56" +label = "Waterfall and Pool" + +[node name="entrance" parent="kq4_024_waterfall_and_pool" index="0"] +position = Vector2(133, 643) + +[node name="exit" parent="kq4_024_waterfall_and_pool" index="1"] +position = Vector2(174, 519) + +[node name="kq4_079_mountain_path_to_dark_castle" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] +position = Vector2(1766, 74) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_030_mountain_pass" +label = "Mountain Path to Dark Castle" + +[node name="entrance" parent="kq4_079_mountain_path_to_dark_castle" index="0"] +position = Vector2(24, 565) + +[node name="exit" parent="kq4_079_mountain_path_to_dark_castle" index="1"] +position = Vector2(293, 554) + +[node name="kq4_029_dense_forest" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_030_mountain_pass" +target = "uid://1sfzaldfq5kn1" +label = "Dense Forest" + +[node name="entrance" parent="kq4_029_dense_forest" index="0"] +position = Vector2(506, 555) + +[node name="exit" parent="kq4_029_dense_forest" index="1"] +position = Vector2(-64, 534) + +[connection signal="interacted" from="kq4_024_waterfall_and_pool" to="." method="_on_waterfall_and_pool_interacted"] +[connection signal="interacted" from="kq4_079_mountain_path_to_dark_castle" to="." method="_on_mountain_path_to_dark_castle_interacted"] +[connection signal="interacted" from="kq4_029_dense_forest" to="." method="_on_dense_forest_interacted"] + +[editable path="kq4_024_waterfall_and_pool"] +[editable path="kq4_079_mountain_path_to_dark_castle"] +[editable path="kq4_029_dense_forest"] diff --git a/scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.tscn.uid b/scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.tscn.uid new file mode 100644 index 0000000..e37ff79 --- /dev/null +++ b/scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.tscn.uid @@ -0,0 +1 @@ +uid://7dfmw11k58wd diff --git a/scenes/kq4_030_mountain_pass/pic_030_visual.png b/scenes/kq4_030_mountain_pass/pic_030_visual.png new file mode 100644 index 0000000..177fd40 --- /dev/null +++ b/scenes/kq4_030_mountain_pass/pic_030_visual.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f83db0cc52a657cba421a5fdfd1d2962537f92aa726654db3eace0b106a659a +size 15777 diff --git a/scenes/kq4_030_mountain_pass/pic_030_visual.png.import b/scenes/kq4_030_mountain_pass/pic_030_visual.png.import new file mode 100644 index 0000000..864f5c0 --- /dev/null +++ b/scenes/kq4_030_mountain_pass/pic_030_visual.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ju0ocwt5qeri" +path="res://.godot/imported/pic_030_visual.png-8847369d7043d6b15bee268577f77e91.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/kq4_030_mountain_pass/pic_030_visual.png" +dest_files=["res://.godot/imported/pic_030_visual.png-8847369d7043d6b15bee268577f77e91.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/kq4_031_open_ocean/kq4_031_open_ocean.gd b/scenes/kq4_031_open_ocean/kq4_031_open_ocean.gd index e8cb201..5d40339 100644 --- a/scenes/kq4_031_open_ocean/kq4_031_open_ocean.gd +++ b/scenes/kq4_031_open_ocean/kq4_031_open_ocean.gd @@ -6,4 +6,12 @@ func _on_beach_interacted() -> void: func _on_beach_at_river_delta_interacted() -> void: - $east_exit.default_script(self) + $kq4_025_beach_at_river_delta.default_script(self) + + +func _on_coastal_cliffs_interacted() -> void: + $kq4_019_coastal_cliffs.default_script(self) + + +func _on_beach_13_interacted() -> void: + $kq4_013_beach.default_script(self) diff --git a/scenes/kq4_031_open_ocean/kq4_031_open_ocean.tscn b/scenes/kq4_031_open_ocean/kq4_031_open_ocean.tscn index 967df5c..9842193 100644 --- a/scenes/kq4_031_open_ocean/kq4_031_open_ocean.tscn +++ b/scenes/kq4_031_open_ocean/kq4_031_open_ocean.tscn @@ -63,6 +63,32 @@ position = Vector2(24, 565) [node name="exit" parent="kq4_025_beach_at_river_delta" index="1"] position = Vector2(293, 554) +[node name="kq4_019_coastal_cliffs" parent="." unique_id=1926756564 instance=ExtResource("4_abc")] +position = Vector2(100, 300) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_031_open_ocean" +target = "uid://3eh8ys3v25m45" +label = "Coastal Cliffs" + +[node name="entrance" parent="kq4_019_coastal_cliffs" index="0"] +position = Vector2(133, 643) + +[node name="exit" parent="kq4_019_coastal_cliffs" index="1"] +position = Vector2(174, 519) + +[node name="kq4_013_beach" parent="." unique_id=1936756565 instance=ExtResource("4_abc")] +position = Vector2(1500, 200) +polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) +appear_at_node = "kq4_031_open_ocean" +target = "uid://2bqawc9w4uu59" +label = "Beach" + +[node name="entrance" parent="kq4_013_beach" index="0"] +position = Vector2(133, 643) + +[node name="exit" parent="kq4_013_beach" index="1"] +position = Vector2(174, 519) + [node name="south_exit" parent="." unique_id=990092106 instance=ExtResource("4_abc")] position = Vector2(910, 542) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) @@ -86,8 +112,12 @@ position = Vector2(-64, 534) [connection signal="interacted" from="kq4_001_beach" to="." method="_on_beach_interacted"] [connection signal="interacted" from="kq4_025_beach_at_river_delta" to="." method="_on_beach_at_river_delta_interacted"] +[connection signal="interacted" from="kq4_019_coastal_cliffs" to="." method="_on_coastal_cliffs_interacted"] +[connection signal="interacted" from="kq4_013_beach" to="." method="_on_beach_13_interacted"] [editable path="kq4_001_beach"] [editable path="kq4_025_beach_at_river_delta"] +[editable path="kq4_019_coastal_cliffs"] +[editable path="kq4_013_beach"] [editable path="south_exit"] [editable path="west_exit"] diff --git a/scripts/check_transitions.py b/scripts/check_transitions.py new file mode 100755 index 0000000..7d7645c --- /dev/null +++ b/scripts/check_transitions.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python3 +"""Validates transition nodes in KQ4 room scenes.""" + +import re +import sys +from pathlib import Path +from dataclasses import dataclass +from typing import Optional + + +@dataclass +class Transition: + exit_node_name: str + target_uid: str + appear_at_node: str + label: str + source_room: str + + +@dataclass +class SceneInfo: + uid: str + path: Path + node_names: set[str] + + +def find_uid_files(root: Path) -> dict[str, Path]: + """Build a mapping of UID -> file path from all .uid files.""" + uid_map = {} + for uid_file in root.rglob("*.uid"): + uid_content = uid_file.read_text().strip() + if uid_content.startswith("uid://"): + resource_path = uid_file.with_suffix("") + if resource_path.exists(): + uid_map[uid_content] = resource_path + else: + uid_map[uid_content] = uid_file.with_suffix("") + return uid_map + + +def parse_scene_file(tscn_path: Path) -> tuple[Optional[str], set[str], list[Transition]]: + """Parse a .tscn file to extract UID, node names, and transitions.""" + content = tscn_path.read_text() + + scene_uid = None + uid_match = re.search(r'\[gd_scene[^\]]*uid="([^"]+)"', content) + if uid_match: + scene_uid = uid_match.group(1) + + node_names = set(re.findall(r'^\[node name="([^"]+)"', content, re.MULTILINE)) + + transitions = [] + room_name = tscn_path.stem + + transition_pattern = re.compile( + r'\[node name="([^"]+)"[^\]]*instance=ExtResource\([^\)]+\)\]\s*\n' + r'((?:[^\[]+\n)*)', + re.MULTILINE + ) + + for match in transition_pattern.finditer(content): + node_name = match.group(1) + body = match.group(2) + + target_match = re.search(r'^target = "([^"]+)"', body, re.MULTILINE) + appear_match = re.search(r'^appear_at_node = "([^"]+)"', body, re.MULTILINE) + label_match = re.search(r'^label = "([^"]+)"', body, re.MULTILINE) + + if target_match and appear_match: + transitions.append(Transition( + exit_node_name=node_name, + target_uid=target_match.group(1), + appear_at_node=appear_match.group(1), + label=label_match.group(1) if label_match else node_name, + source_room=room_name + )) + + return scene_uid, node_names, transitions + + +def main(): + root = Path(__file__).parent.parent + scenes_dir = root / "scenes" + + uid_map = find_uid_files(root) + + scene_files = list(scenes_dir.glob("kq4_*/kq4_*.tscn")) + scene_files = [f for f in scene_files if "placeholder_template" not in str(f)] + + scenes_by_uid: dict[str, SceneInfo] = {} + all_transitions: list[Transition] = [] + + for scene_file in scene_files: + scene_uid, node_names, transitions = parse_scene_file(scene_file) + if scene_uid: + scenes_by_uid[scene_uid] = SceneInfo( + uid=scene_uid, + path=scene_file, + node_names=node_names + ) + all_transitions.extend(transitions) + + errors = 0 + + for t in all_transitions: + source_room = t.source_room + target_scene = scenes_by_uid.get(t.target_uid) + + if target_scene is None: + print(f"ERROR: {source_room} exit '{t.exit_node_name}' -> target UID '{t.target_uid}' NOT FOUND") + errors += 1 + continue + + target_room_name = target_scene.path.stem + + if t.appear_at_node not in target_scene.node_names: + print(f"ERROR: {source_room} exit '{t.exit_node_name}' -> {target_room_name} node '{t.appear_at_node}' NOT FOUND") + errors += 1 + continue + + print(f"OK: {source_room} exit '{t.exit_node_name}' -> {target_room_name} (node: {t.appear_at_node})") + + print(f"\n{'='*60}") + print(f"Checked {len(all_transitions)} transitions across {len(scene_files)} rooms") + + if errors: + print(f"FOUND {errors} ERROR(S)") + sys.exit(1) + else: + print("All transitions valid!") + sys.exit(0) + + +if __name__ == "__main__": + main()