From a2eb4de81577b40ee0f90d6afa30fa0555f64620 Mon Sep 17 00:00:00 2001 From: Bryce Date: Wed, 4 Mar 2026 22:52:02 -0800 Subject: [PATCH] done --- .opencode/skills/setpiece-creator/SKILL.md | 6 ++- SetPiece_.gd | 4 +- label.gd | 41 ++++++++++++------- .../kq4_003_fountain_pool.tscn | 15 ++++--- .../kq4_007_fishermans_shack.gd | 6 +++ .../kq4_007_fishermans_shack.tscn | 11 +++++ 6 files changed, 59 insertions(+), 24 deletions(-) diff --git a/.opencode/skills/setpiece-creator/SKILL.md b/.opencode/skills/setpiece-creator/SKILL.md index f507012..f99c7fc 100644 --- a/.opencode/skills/setpiece-creator/SKILL.md +++ b/.opencode/skills/setpiece-creator/SKILL.md @@ -28,7 +28,7 @@ scale = Vector2(0.783, 0.78) texture = ExtResource("2_u8g8b") ``` -The texture path references an ext_resource pointing to the background image. +The texture path references an ext_resource pointing to the background image. **Use this path for mask extraction, NOT pic_XXX_visual.png.** The .tscn references the AI-generated caption image which is what should be used. ### 2. Verify Entity Visibility @@ -50,12 +50,14 @@ Use `tools/extract_mask.py` to generate the mask: ```bash python tools/extract_mask.py "the [entity]" \ - scenes/kq4_XXX_room/background.png \ + scenes/kq4_XXX_room/caption_XXX_generated.png \ /tmp/[entity]_mask.png ``` **Subject phrasing:** Use descriptive phrasing like "the door of the ogre's cottage" for better results. +**CRITICAL:** Always use the background image path from the .tscn file (e.g., `caption_3_840023845_generated.png`), NOT `pic_XXX_visual.png`. The .tscn shows which image is actually used in-game. + ### 4. Generate Polygon Resource Use `tools/mask_to_polygon.py` to create the .tres file: diff --git a/SetPiece_.gd b/SetPiece_.gd index 0b1b501..4edf98d 100644 --- a/SetPiece_.gd +++ b/SetPiece_.gd @@ -31,7 +31,7 @@ signal looked signal touched signal talked signal entered(lab) -signal exited +signal exited(lab) @export var label: String @export var points_resource: PolygonPointsResource: @@ -52,7 +52,7 @@ func _process(delta): emit_signal("entered", label) else: if is_in == true: - emit_signal("exited") + emit_signal("exited", label) is_in = false diff --git a/label.gd b/label.gd index 960187c..035bd6d 100644 --- a/label.gd +++ b/label.gd @@ -1,20 +1,20 @@ extends Node2D -# Declare member variables here. Examples: -# var a = 2 -# var b = "text" +var hovered_setpieces: Array[String] = [] @onready var label : Label = $"label" func _ready(): _connect_setpieces(get_parent()) func _on_transitioned(s): + hovered_setpieces.clear() $label.hide() _connect_setpieces(get_parent()) func _connect_setpieces(scene: Node) -> void: - for n in scene.find_children("*", "SetPiece"): + for n in scene.find_children("*", "SetPiece", true, false): + print("LOOKING AT", n) n.connect("entered", Callable(self, "_on_setpiece_entered")) n.connect("exited", Callable(self, "_on_setpiece_exited")) @@ -64,20 +64,33 @@ func _process(delta): var s = label.size mouse_pos.x = clamp(mouse_pos.x, cam_top_left.x + margin, cam_bottom_right.x - label.size.x - margin) mouse_pos.y = clamp(mouse_pos.y, cam_top_left.y, cam_bottom_right.y) + + if $label.visible: + print("LABEL VISIBLE", $label.text) # Update label position global_position = mouse_pos -func _on_setpiece_entered(lab): - print("LABEL ENTERED ", lab) - $label.show() - $label.text = lab +func _on_setpiece_entered(lab: String) -> void: + if lab not in hovered_setpieces: + hovered_setpieces.append(lab) + _update_label() + + +func _on_setpiece_exited(lab: String) -> void: + hovered_setpieces.erase(lab) + _update_label() + + +func _update_label() -> void: + if hovered_setpieces.is_empty(): + $label.hide() + return - var size = label.label_settings.font.get_string_size(lab,HORIZONTAL_ALIGNMENT_LEFT,200,32) + var top_label = hovered_setpieces[0] + $label.show() + $label.text = top_label + + var size = label.label_settings.font.get_string_size(top_label, HORIZONTAL_ALIGNMENT_LEFT, 200, 32) label.size = size - - -func _on_setpiece_exited(): - $label.hide() - pass # Replace with function body. 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 3d29744..4646578 100644 --- a/scenes/kq4_003_fountain_pool/kq4_003_fountain_pool.tscn +++ b/scenes/kq4_003_fountain_pool/kq4_003_fountain_pool.tscn @@ -4,13 +4,13 @@ [ext_resource type="Texture2D" uid="uid://nb7ybebcy6ok" path="res://scenes/kq4_003_fountain_pool/caption_1_2884713022_generated.png" id="2_ev2w4"] [ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_1g2ot"] [ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_6r684"] -[ext_resource type="Resource" path="res://scenes/kq4_003_fountain_pool/pool_shap2.tres" id="4_nuxlg"] +[ext_resource type="Resource" uid="uid://biiu4g5skgjun" path="res://scenes/kq4_003_fountain_pool/pool_shap2.tres" id="4_nuxlg"] [ext_resource type="Texture2D" uid="uid://bmvcn5pl2qble" path="res://scenes/kq4_003_fountain_pool/fg.png" id="5_cu368"] -[ext_resource type="Resource" path="res://scenes/kq4_003_fountain_pool/columns_0.tres" id="6_7gmu8"] +[ext_resource type="Resource" uid="uid://bu8vcjwarqsym" path="res://scenes/kq4_003_fountain_pool/columns_0.tres" id="6_7gmu8"] [ext_resource type="Script" uid="uid://bounwnqg34t5k" path="res://SetPiece_.gd" id="6_n67q9"] -[ext_resource type="Resource" path="res://scenes/kq4_003_fountain_pool/columns_1.tres" id="7_hj5s8"] -[ext_resource type="Resource" path="res://scenes/kq4_003_fountain_pool/columns_2.tres" id="8_1m5ii"] -[ext_resource type="Resource" path="res://scenes/kq4_003_fountain_pool/columns_3.tres" id="9_s7130"] +[ext_resource type="Resource" uid="uid://byjfu6q8wx5vn" path="res://scenes/kq4_003_fountain_pool/columns_1.tres" id="7_hj5s8"] +[ext_resource type="Resource" uid="uid://dv2fngjcedsrt" path="res://scenes/kq4_003_fountain_pool/columns_2.tres" id="8_1m5ii"] +[ext_resource type="Resource" uid="uid://ufmqd22by6sj" path="res://scenes/kq4_003_fountain_pool/columns_3.tres" id="9_s7130"] [sub_resource type="NavigationPolygon" id="NavigationPolygon_heq0u"] vertices = PackedVector2Array(2047.41, 716.57, 2016.32, 718.031, 2012.05, 588.461, 2016.21, 588.297, -24.7109, 554.789, -30.1563, 678.656, -32.4922, 678.719, -26.5, 554.672, 1549.08, 973.094, 1600.39, 892.133, 1664.59, 879.789, 1849.6, 912.438, 2010.65, 1152.71, 1938.66, 866.219, 1997.01, 738.961, 1913.5, 767.961, 1652.01, 755.148, 1694.65, 795.859, 1548.2, 566.008, 1990.35, 536.656, 1991.42, 569.242, 1521.82, 587.352, -3.86719, 536.156, -3.4375, 526.25, 1322.68, 566.07, 572.727, 554.938, -28.5625, 1097.27, -11.0078, 698.188, 363.648, 688.758, 233.078, 917.219, 522.023, 998.82, 544.961, 937, 1256.86, 937, 1356.66, 1006.56, 1515.53, 657.82, 368.352, 561.688, 319.969, 1004.11) @@ -19,10 +19,10 @@ outlines = Array[PackedVector2Array]([PackedVector2Array(-13, 516, 1548, 556, 20 [node name="background" type="Node2D" unique_id=47039231] y_sort_enabled = true -scale = Vector2(0.77, 0.77) script = ExtResource("1_heq0u") [node name="bg" type="Sprite2D" parent="." unique_id=56586945] +scale = Vector2(0.78, 0.78) texture = ExtResource("2_ev2w4") centered = false @@ -49,6 +49,7 @@ position = Vector2(-150, 100) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) appear_at_node = "kq4_003_fountain_pool" target = "uid://1489d4oh9twtu" +label = "Meadow" [node name="entrance" parent="kq4_002_meadow" index="0"] position = Vector2(350, 500) @@ -62,6 +63,7 @@ color = Color(1, 1, 1, 1) polygon = PackedVector2Array(-235, -142, -147, 252, 155, 148, 102, -85) appear_at_node = "kq4_003_fountain_pool" target = "uid://1nxmm3b1kcdm1" +label = "Ogre's Cottage" [node name="entrance" parent="kq4_004_ogres_cottage" index="0"] position = Vector2(-79, 65) @@ -74,6 +76,7 @@ position = Vector2(910, 542) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) appear_at_node = "kq4_003_fountain_pool" target = "uid://1hkplw2a78b1y" +label = "Shady Wooded Forest" [node name="entrance" parent="kq4_009_shady_wooded_area" index="0"] position = Vector2(118, 514) diff --git a/scenes/kq4_007_fishermans_shack/kq4_007_fishermans_shack.gd b/scenes/kq4_007_fishermans_shack/kq4_007_fishermans_shack.gd index a6b3327..3e6632e 100644 --- a/scenes/kq4_007_fishermans_shack/kq4_007_fishermans_shack.gd +++ b/scenes/kq4_007_fishermans_shack/kq4_007_fishermans_shack.gd @@ -15,3 +15,9 @@ func _on_beach_2_interacted() -> void: func _on_open_ocean_interacted() -> void: $west_exit.default_script(self) + + +func _on_fishermans_house_looked() -> void: + start_main_script(ScriptBuilder.init( + ScriptBuilder.say(ego, "The fisherman's shack looks badly in need of repair, as the sun, wind, and salt spray have taken their toll. From the house, an old pier leads out into the ocean.") + ).build(self, "_on_script_complete")) diff --git a/scenes/kq4_007_fishermans_shack/kq4_007_fishermans_shack.tscn b/scenes/kq4_007_fishermans_shack/kq4_007_fishermans_shack.tscn index f848e68..3708d8e 100644 --- a/scenes/kq4_007_fishermans_shack/kq4_007_fishermans_shack.tscn +++ b/scenes/kq4_007_fishermans_shack/kq4_007_fishermans_shack.tscn @@ -4,6 +4,8 @@ [ext_resource type="Texture2D" uid="uid://djbrg233lxgyy" path="res://scenes/kq4_007_fishermans_shack/caption_3_840023845_generated.png" id="2_86g5m"] [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"] +[ext_resource type="Resource" uid="uid://bbepaofrwlurc" path="res://scenes/kq4_007_fishermans_shack/fishermans_house_polygon.tres" id="5_house"] +[ext_resource type="Script" uid="uid://bounwnqg34t5k" path="res://SetPiece_.gd" id="6_setpiece"] [sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] vertices = PackedVector2Array(366.85156, 1243.1484, -140.97656, 1182.2422, -76.0625, 588.09375, -30.171875, 216.07031, 1221.4063, 226.97656, 1994.1406, 468.39844, 2011.7969, 1321.9766, 1052.7422, 1419.8672, -76.0625, 588.0781) @@ -86,9 +88,18 @@ position = Vector2(506, 555) [node name="exit" parent="west_exit" index="1"] position = Vector2(-64, 534) +[node name="fishermans_house" type="Polygon2D" parent="." unique_id=1687430893 groups=["set-piece"]] +scale = Vector2(0.78, 0.78) +color = Color(0.5, 0.5, 0.5, 0.25) +polygon = PackedVector2Array(2269, 245, 2339, 677, 2243, 911, 1467.9487, 988.46155, 1102.5641, 748.71796, 1344.8718, 153.84616, 2052, 78) +script = ExtResource("6_setpiece") +label = "Fisherman's House" +points_resource = ExtResource("5_house") + [connection signal="interacted" from="kq4_001_beach" to="." method="_on_beach_interacted"] [connection signal="interacted" from="kq4_008_back_of_fishermans_shack" to="." method="_on_back_of_fishermans_shack_interacted"] [connection signal="interacted" from="kq4_013_beach" to="." method="_on_beach_2_interacted"] +[connection signal="looked" from="fishermans_house" to="." method="_on_fishermans_house_looked"] [editable path="kq4_001_beach"] [editable path="kq4_008_back_of_fishermans_shack"]