From 291ef653f0d16c4542408b47949087bd8645544c Mon Sep 17 00:00:00 2001 From: Cold-Mint Date: Mon, 7 Oct 2024 23:29:08 +0800 Subject: [PATCH] =?UTF-8?q?Added=20wooden=20boxes=20and=20tutorial=20level?= =?UTF-8?q?s.=20=E5=8A=A0=E5=85=A5=E6=9C=A8=E7=AE=B1=E5=AD=90=E5=92=8C?= =?UTF-8?q?=E6=95=99=E7=A8=8B=E5=85=B3=E5=8D=A1=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/levelGraphs/test.yaml | 303 +----------------- locals/UI.csv | 4 + prefab/furnitures/SpellEditor.tscn | 2 + prefab/furnitures/WoodenBox.tscn | 29 ++ prefab/magics/x3.tscn | 6 + prefab/roomTemplates/dungeon/initialRoom.tscn | 106 ------ .../roomTemplates/tutorials/spellEditor.tscn | 119 +++++++ .../tutorials/tripleShotSpell.tscn | 133 ++++++++ project.godot | 1 + scripts/Config.cs | 1 + scripts/character/CharacterTemplate.cs | 1 + scripts/furniture/Barrier.cs | 18 ++ scripts/furniture/Furniture.cs | 8 +- scripts/projectile/Projectile.cs | 19 ++ .../spell/NodeSpawnOnKillCharacterSpell.cs | 3 - sprites/furnitures/wooden_box.png | Bin 0 -> 383 bytes sprites/furnitures/wooden_box.png.import | 34 ++ sprites/tutorials/spellEditor.png | Bin 0 -> 1523 bytes sprites/tutorials/spellEditor.png.import | 34 ++ sprites/tutorials/tripleShotSpell.png | Bin 0 -> 1944 bytes sprites/tutorials/tripleShotSpell.png.import | 34 ++ tileSets/dungeon.tres | 3 +- 22 files changed, 457 insertions(+), 401 deletions(-) create mode 100644 prefab/furnitures/WoodenBox.tscn delete mode 100644 prefab/roomTemplates/dungeon/initialRoom.tscn create mode 100644 prefab/roomTemplates/tutorials/spellEditor.tscn create mode 100644 prefab/roomTemplates/tutorials/tripleShotSpell.tscn create mode 100644 scripts/furniture/Barrier.cs create mode 100644 sprites/furnitures/wooden_box.png create mode 100644 sprites/furnitures/wooden_box.png.import create mode 100644 sprites/tutorials/spellEditor.png create mode 100644 sprites/tutorials/spellEditor.png.import create mode 100644 sprites/tutorials/tripleShotSpell.png create mode 100644 sprites/tutorials/tripleShotSpell.png.import diff --git a/data/levelGraphs/test.yaml b/data/levelGraphs/test.yaml index 1945392..4e4b36e 100644 --- a/data/levelGraphs/test.yaml +++ b/data/levelGraphs/test.yaml @@ -1,311 +1,34 @@ connection_data_list: - - from_id: c0255eb6-2c75-44f7-9058-0921fe8fb0d8 - to_id: 4ae948ea-82b7-4b2d-bec2-19ed8a9d4c03 + - from_id: 5a284c6f-2ce5-4dba-b32e-f0fcb9e9940d + to_id: 4de20bd2-b557-4c29-9613-d4b35ea1f239 from_port: 0 to_port: 0 - - from_id: 4ae948ea-82b7-4b2d-bec2-19ed8a9d4c03 - to_id: ba32e05c-0c80-4a79-b5ce-5b8150400e05 - from_port: 0 - to_port: 0 - - from_id: 4ae948ea-82b7-4b2d-bec2-19ed8a9d4c03 - to_id: 8b3d645a-96c0-407e-871d-6f4a0b69557b - from_port: 0 - to_port: 0 - - from_id: 8b3d645a-96c0-407e-871d-6f4a0b69557b - to_id: 7e3ae680-3d7e-4ae9-b82f-5bfbe1c2f613 - from_port: 0 - to_port: 0 - - from_id: ba32e05c-0c80-4a79-b5ce-5b8150400e05 - to_id: 7e3ae680-3d7e-4ae9-b82f-5bfbe1c2f613 - from_port: 0 - to_port: 0 - - from_id: c0255eb6-2c75-44f7-9058-0921fe8fb0d8 - to_id: 46d8c16d-66fb-409e-b02a-7825dcf59796 - from_port: 0 - to_port: 0 - - from_id: 7e3ae680-3d7e-4ae9-b82f-5bfbe1c2f613 - to_id: 20b486d3-3558-4d4a-b67b-d6df08e66a6a - from_port: 0 - to_port: 0 - - from_id: 7e3ae680-3d7e-4ae9-b82f-5bfbe1c2f613 - to_id: 012795b2-297c-404a-b96f-dff8a6b6a720 - from_port: 0 - to_port: 0 - - from_id: 012795b2-297c-404a-b96f-dff8a6b6a720 - to_id: 7eba7a72-88c9-4018-82db-100c9521938b - from_port: 0 - to_port: 0 - - from_id: 46d8c16d-66fb-409e-b02a-7825dcf59796 - to_id: 5e27b3cd-7de8-4476-b96f-199ffce9b10c - from_port: 0 - to_port: 0 - - from_id: 46d8c16d-66fb-409e-b02a-7825dcf59796 - to_id: 43d7c799-3db5-4b13-b160-f9133f15a970 - from_port: 0 - to_port: 0 - - from_id: 7eba7a72-88c9-4018-82db-100c9521938b - to_id: a54cf238-a368-4979-abb2-3a435b726d29 - from_port: 0 - to_port: 0 - - from_id: 20b486d3-3558-4d4a-b67b-d6df08e66a6a - to_id: e69c3d51-11d3-408f-bfc8-b955183e2abe - from_port: 0 - to_port: 0 - - from_id: e69c3d51-11d3-408f-bfc8-b955183e2abe - to_id: 27111bc7-cbbd-4a4f-9fe6-cf3948f74efd - from_port: 0 - to_port: 0 - - from_id: 27111bc7-cbbd-4a4f-9fe6-cf3948f74efd - to_id: 7e5d5fd3-1255-4523-8057-377a4fbd50d8 - from_port: 0 - to_port: 0 - - from_id: 5e27b3cd-7de8-4476-b96f-199ffce9b10c - to_id: 4129b4a0-a02e-4751-9ca8-b2bc1c679b02 - from_port: 0 - to_port: 0 - - from_id: 4129b4a0-a02e-4751-9ca8-b2bc1c679b02 - to_id: fb77ea9a-fd4d-4fc8-92a4-1e5d4d1219a8 - from_port: 0 - to_port: 0 - - from_id: fb77ea9a-fd4d-4fc8-92a4-1e5d4d1219a8 - to_id: 0aa908bd-b5fe-4a80-8e74-9a862d7c9af0 - from_port: 0 - to_port: 0 - - from_id: 43d7c799-3db5-4b13-b160-f9133f15a970 - to_id: dff8a1e6-a5ae-41b4-b136-95729bf3a8d3 - from_port: 0 - to_port: 0 - - from_id: dff8a1e6-a5ae-41b4-b136-95729bf3a8d3 - to_id: 676ba8a3-9ac8-4606-858e-5aa3b3e5101c - from_port: 0 - to_port: 0 - - from_id: 676ba8a3-9ac8-4606-858e-5aa3b3e5101c - to_id: 80c69468-6558-4c12-86cd-7ba6533d3758 - from_port: 0 - to_port: 0 - - from_id: 0aa908bd-b5fe-4a80-8e74-9a862d7c9af0 - to_id: c6f9bd56-5025-40f6-97b9-1e73eac1c5f6 - from_port: 0 - to_port: 0 - - from_id: 7e5d5fd3-1255-4523-8057-377a4fbd50d8 - to_id: 03896855-9956-4442-909c-7d633fa97ed9 - from_port: 0 - to_port: 0 - - from_id: 80c69468-6558-4c12-86cd-7ba6533d3758 - to_id: d43494e4-0ec3-4e29-a617-6a3ff7727a11 + - from_id: 4de20bd2-b557-4c29-9613-d4b35ea1f239 + to_id: 3053d123-3f71-4cd0-8f05-f821aa95c702 from_port: 0 to_port: 0 room_node_data_list: - - id: 8b3d645a-96c0-407e-871d-6f4a0b69557b - title: 房间4 + - id: 5a284c6f-2ce5-4dba-b32e-f0fcb9e9940d + title: 房间1 description: '' room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: ba32e05c-0c80-4a79-b5ce-5b8150400e05 - title: 房间3 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: 7e3ae680-3d7e-4ae9-b82f-5bfbe1c2f613 - title: 房间5 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: 20b486d3-3558-4d4a-b67b-d6df08e66a6a - title: 房间7 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: 012795b2-297c-404a-b96f-dff8a6b6a720 - title: 房间8 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: 46d8c16d-66fb-409e-b02a-7825dcf59796 - title: 房间6 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: 7eba7a72-88c9-4018-82db-100c9521938b - title: 房间9 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: 5e27b3cd-7de8-4476-b96f-199ffce9b10c - title: 房间10 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: a54cf238-a368-4979-abb2-3a435b726d29 - title: 房间12 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: e69c3d51-11d3-408f-bfc8-b955183e2abe - title: 房间13 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: 4ae948ea-82b7-4b2d-bec2-19ed8a9d4c03 - title: 大厅 - description: 比普通房间要大一些的房间,有多个门,用于连接到其他房间。 - room_template_set: - - res://prefab/roomTemplates/dungeon/utilityRoom.tscn - tags: - room_injection_processor_data: - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: c0255eb6-2c75-44f7-9058-0921fe8fb0d8 - title: 起点房间 - description: 测试的起点房间。 - room_template_set: - - res://prefab/roomTemplates/dungeon/initialRoom.tscn + - res://prefab/roomTemplates/tutorials/spellEditor.tscn tags: - StartingRoom - room_injection_processor_data: + room_injection_processor_data: '' enter_room_event_handler_id: exit_room_event_handler_id: - - id: 27111bc7-cbbd-4a4f-9fe6-cf3948f74efd - title: 房间15 + - id: 4de20bd2-b557-4c29-9613-d4b35ea1f239 + title: 房间2 description: '' room_template_set: - - res://prefab/roomTemplates/dungeon/ + - res://prefab/roomTemplates/tutorials/tripleShotSpell.tscn tags: room_injection_processor_data: '' enter_room_event_handler_id: exit_room_event_handler_id: - - id: 7e5d5fd3-1255-4523-8057-377a4fbd50d8 - title: 房间14 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: 4129b4a0-a02e-4751-9ca8-b2bc1c679b02 - title: 房间17 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: fb77ea9a-fd4d-4fc8-92a4-1e5d4d1219a8 - title: 房间18 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: 0aa908bd-b5fe-4a80-8e74-9a862d7c9af0 - title: 房间19 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: 43d7c799-3db5-4b13-b160-f9133f15a970 - title: 房间11 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: 676ba8a3-9ac8-4606-858e-5aa3b3e5101c - title: 房间23 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: dff8a1e6-a5ae-41b4-b136-95729bf3a8d3 - title: 房间20 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: 80c69468-6558-4c12-86cd-7ba6533d3758 - title: 房间24 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: c6f9bd56-5025-40f6-97b9-1e73eac1c5f6 - title: 房间22 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: 03896855-9956-4442-909c-7d633fa97ed9 - title: 房间21 - description: '' - room_template_set: - - res://prefab/roomTemplates/dungeon/ - tags: - room_injection_processor_data: '' - enter_room_event_handler_id: - exit_room_event_handler_id: - - id: d43494e4-0ec3-4e29-a617-6a3ff7727a11 - title: 房间16 + - id: 3053d123-3f71-4cd0-8f05-f821aa95c702 + title: 房间3 description: '' room_template_set: - res://prefab/roomTemplates/dungeon/ diff --git a/locals/UI.csv b/locals/UI.csv index 039f953..20b0c22 100644 --- a/locals/UI.csv +++ b/locals/UI.csv @@ -35,3 +35,7 @@ ui_translator,翻译,translator,翻訳 ui_unordered_list_tip,排名不分先后,Ranking is not in order,順位は関係ありません ui_loading,正在加载...,Loading...,読み込み中... ui_spell_editor,法术编辑器,Spell editor,スペルエディター +ui_tutorial_spellEditor,按E捡起地上的武器,\n法杖需要搭配法术使用,\n靠近工作台,\n鼠标左键使用工作台。\n鼠标左键拖动物品,\n以实现在不同的容器之间移动它们。,"Press E to pick up the weapon on the ground, \nthe wand needs to be used with the spell, \nclose to the workbench, \nthe left mouse button to use the workbench.\nDrag items with the left mouse button \nto move them between different containers.",Eを押して地面の武器を拾い上げます。\n杖は魔法と組み合わせて使います。\n作業台に近づいて、\nマウスの左ボタンで作業台を使います。\nマウスの左ボタンでモノをドラッグすると、\nさまざまな容器の間を移動できます。 +ui_tutorial_break_box,鼠标左键使用武器打破箱子->,"Use the left mouse button to break the box with the weapon->",マウスの左ボタンで箱を破ります-> +ui_tutorial_jump_onto_platform,W跳上平台,\nS从平台上跳下。,"W jumps onto the platform, \nS jumps off the platform.",Wは踊り場に、\nSは踊り場に飛び降りるのです。 +ui_tutorial_combine_more_powerful_spells,组合更强力的法术->,Combine more powerful spells->,より強力な術を組み合わせます-> diff --git a/prefab/furnitures/SpellEditor.tscn b/prefab/furnitures/SpellEditor.tscn index f2695c9..83be201 100644 --- a/prefab/furnitures/SpellEditor.tscn +++ b/prefab/furnitures/SpellEditor.tscn @@ -92,6 +92,8 @@ collision_layer = 256 collision_mask = 160 script = ExtResource("1_t1qdg") Path = "res://prefab/ui/SpellEditorUI.tscn" +_initialDurability = null +_maxDurability = null [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2(-0.5, -0.5) diff --git a/prefab/furnitures/WoodenBox.tscn b/prefab/furnitures/WoodenBox.tscn new file mode 100644 index 0000000..4992a16 --- /dev/null +++ b/prefab/furnitures/WoodenBox.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=5 format=3 uid="uid://dld3qttpsdjpe"] + +[ext_resource type="Script" path="res://scripts/furniture/Barrier.cs" id="1_hfnuj"] +[ext_resource type="Texture2D" uid="uid://cvlm5tmv43i8t" path="res://sprites/furnitures/wooden_box.png" id="2_24vtp"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_vx4tg"] +size = Vector2(32, 32) + +[sub_resource type="CircleShape2D" id="CircleShape2D_in1f7"] +radius = 52.6118 + +[node name="WoodenBox" type="RigidBody2D"] +collision_layer = 256 +collision_mask = 160 +script = ExtResource("1_hfnuj") +_initialDurability = null +_maxDurability = 1 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_vx4tg") + +[node name="OperateArea2D" type="Area2D" parent="."] +visible = false + +[node name="CollisionShape2D" type="CollisionShape2D" parent="OperateArea2D"] +shape = SubResource("CircleShape2D_in1f7") + +[node name="WoodenBox" type="Sprite2D" parent="."] +texture = ExtResource("2_24vtp") diff --git a/prefab/magics/x3.tscn b/prefab/magics/x3.tscn index 2a136dd..e9db64b 100644 --- a/prefab/magics/x3.tscn +++ b/prefab/magics/x3.tscn @@ -15,6 +15,12 @@ collision_layer = 8 collision_mask = 34 angular_damp = -1.0 script = ExtResource("1_cnhod") +NumberOfProjectiles = null +RandomAngle = null +UnitRadian = null +_projectilePath = null +_minContactInjury = null +_maxContactInjury = null [node name="DamageArea2D" type="Area2D" parent="."] collision_layer = 8 diff --git a/prefab/roomTemplates/dungeon/initialRoom.tscn b/prefab/roomTemplates/dungeon/initialRoom.tscn deleted file mode 100644 index 323a7a1..0000000 --- a/prefab/roomTemplates/dungeon/initialRoom.tscn +++ /dev/null @@ -1,106 +0,0 @@ -[gd_scene load_steps=9 format=4 uid="uid://du5ldsp613fei"] - -[ext_resource type="TileSet" uid="uid://c4wpp12rr44hi" path="res://tileSets/dungeon.tres" id="1_rn2om"] -[ext_resource type="Script" path="res://scripts/map/PlayerSpawn.cs" id="2_6p8mv"] -[ext_resource type="Script" path="res://scripts/map/ItemSpawn.cs" id="3_v1tlc"] -[ext_resource type="Texture2D" uid="uid://drw45jlmfo0su" path="res://sprites/light/White_100.png" id="5_4pssd"] -[ext_resource type="PackedScene" uid="uid://djsh4unystlf0" path="res://prefab/furnitures/SpellEditor.tscn" id="5_5u8y1"] - -[sub_resource type="RectangleShape2D" id="RectangleShape2D_kiih8"] -size = Vector2(507, 251) - -[sub_resource type="RectangleShape2D" id="RectangleShape2D_jxmys"] -size = Vector2(18, 57.75) - -[sub_resource type="NavigationPolygon" id="NavigationPolygon_064c7"] -vertices = PackedVector2Array(467.773, 174, 499.828, 174, 499.156, 214.969, 40.9375, 214.023, 40.0469, 41.0625, 470.758, 43.9297) -polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(0, 3, 4, 5)]) -outlines = Array[PackedVector2Array]([PackedVector2Array(30, 31, 31, 224, 509, 225, 510, 164, 478, 164, 481, 34)]) -source_geometry_group_name = &"navigation_polygon_source_group" - -[node name="InitialRoom" type="Node2D"] - -[node name="RoomArea" type="Area2D" parent="."] - -[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomArea"] -position = Vector2(254.5, 129.5) -shape = SubResource("RectangleShape2D_kiih8") - -[node name="RoomSlotList" type="Node2D" parent="."] - -[node name="Slot1" type="Area2D" parent="RoomSlotList"] -position = Vector2(491, 193) - -[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Slot1"] -position = Vector2(5, 0) -shape = SubResource("RectangleShape2D_jxmys") -debug_color = Color(0, 0.6, 0.701961, 0.419608) - -[node name="Marker2D" type="Marker2D" parent="."] -position = Vector2(221, 134) -script = ExtResource("2_6p8mv") - -[node name="ItemMarker2D" type="Marker2D" parent="."] -position = Vector2(142, 84) -script = ExtResource("3_v1tlc") -ItemId = "staff_necromancy" - -[node name="ItemMarker2D3" type="Marker2D" parent="."] -position = Vector2(214, 83) -script = ExtResource("3_v1tlc") -ItemId = "x3" - -[node name="ItemMarker2D4" type="Marker2D" parent="."] -position = Vector2(366, 90) -script = ExtResource("3_v1tlc") -ItemId = "necromancy" - -[node name="ItemMarker2D2" type="Marker2D" parent="."] -position = Vector2(321, 118) -script = ExtResource("3_v1tlc") -ItemId = "necromancy" - -[node name="ItemMarker2D5" type="Marker2D" parent="."] -position = Vector2(381, 136) -script = ExtResource("3_v1tlc") -ItemId = "iron_axe" - -[node name="ItemMarker2D6" type="Marker2D" parent="."] -position = Vector2(438, 79) -script = ExtResource("3_v1tlc") -ItemId = "curse" - -[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."] -navigation_polygon = SubResource("NavigationPolygon_064c7") - -[node name="TileMap" type="Node2D" parent="."] - -[node name="BackgroundWall" type="TileMapLayer" parent="TileMap"] -use_parent_material = true -tile_map_data = PackedByteArray("AAAOAAYAAQAGAAUAAAANAAYAAQAGAAUAAAAMAAYAAQAGAAUAAAALAAYAAQAGAAUAAAAKAAYAAQAGAAUAAAAJAAYAAQAGAAUAAAAIAAYAAQAGAAUAAAAHAAYAAQAGAAUAAAAGAAYAAQAGAAUAAAAOAAEAAQAGAAUAAAAOAAIAAQAGAAUAAAAOAAMAAQAGAAUAAAAOAAQAAQAGAAUAAAAOAAUAAQAGAAUAAAANAAUAAQAGAAUAAAANAAQAAQAGAAUAAAANAAMAAQAGAAUAAAANAAIAAQAGAAUAAAANAAEAAQAGAAUAAAAMAAEAAQAGAAUAAAALAAEAAQAGAAUAAAAKAAEAAQAGAAUAAAAJAAEAAQAGAAUAAAAIAAEAAQAGAAUAAAAHAAEAAQAGAAUAAAAGAAEAAQAGAAUAAAAFAAEAAQAGAAUAAAAEAAEAAQAGAAUAAAADAAEAAQAGAAUAAAACAAEAAQAGAAUAAAABAAEAAQAGAAUAAAABAAIAAQAGAAUAAAACAAIAAQAGAAUAAAADAAIAAQAGAAUAAAAEAAIAAQAGAAUAAAAFAAIAAQAGAAUAAAAGAAIAAQAGAAUAAAAHAAIAAQAGAAUAAAAIAAIAAQAGAAUAAAAJAAIAAQAGAAUAAAAKAAIAAQAGAAUAAAALAAIAAQAGAAUAAAAMAAIAAQAGAAUAAAAMAAMAAQAGAAUAAAALAAMAAQAGAAUAAAAKAAMAAQAGAAUAAAAJAAMAAQAGAAUAAAAIAAMAAQAEAAUAAAAHAAMAAQAGAAUAAAAGAAMAAQAGAAUAAAAFAAMAAQAEAAUAAAAEAAMAAQAGAAUAAAADAAMAAQAGAAUAAAACAAMAAQAGAAUAAAABAAMAAQAGAAUAAAABAAQAAQAGAAUAAAACAAQAAQAGAAUAAAADAAQAAQAGAAUAAAAEAAQAAQAGAAUAAAAFAAQAAQAGAAUAAAAGAAQAAQAGAAUAAAAHAAQAAQAGAAUAAAAIAAQAAQAGAAUAAAAJAAQAAQAGAAUAAAAKAAQAAQAGAAUAAAALAAQAAQAGAAUAAAAMAAQAAQAGAAUAAAAMAAUAAQAGAAUAAAALAAUAAQAGAAUAAAAKAAUAAQAGAAUAAAAJAAUAAQAGAAUAAAAIAAUAAQAGAAUAAAAHAAUAAQAGAAUAAAAGAAUAAQAGAAUAAAAFAAUAAQAGAAUAAAAEAAUAAQAGAAUAAAADAAUAAQAGAAUAAAACAAUAAQAGAAUAAAABAAUAAQAGAAUAAAABAAYAAQAGAAUAAAACAAYAAQAGAAUAAAADAAYAAQAGAAUAAAAEAAYAAQAGAAUAAAAFAAYAAQAGAAUAAAAPAAYAAQAGAAUAAAAPAAUAAQAGAAUAAAA=") -tile_set = ExtResource("1_rn2om") -navigation_enabled = false - -[node name="BackgroundDecoration" type="TileMapLayer" parent="TileMap"] -use_parent_material = true -tile_map_data = PackedByteArray("AAACAAYAAQAHAAUAAAAOAAEAAQAHAAQAAAA=") -tile_set = ExtResource("1_rn2om") - -[node name="Ground" type="TileMapLayer" parent="TileMap"] -use_parent_material = true -tile_map_data = PackedByteArray("AAAAAAAAAQAAAAMAAAAAAAEAAQACAAEAAAAAAAIAAQACAAEAAAAAAAMAAQACAAEAAAAAAAQAAQACAAEAAAAAAAcAAQAAAAUAAAAPAAAAAQACAAMAAAAPAAEAAQACAAQAAAAPAAIAAQACAAQAAAAPAAMAAQACAAQAAAAPAAQAAQACAAQAAAAPAAcAAQACAAUAAAAAAAUAAQACAAEAAAAAAAYAAQACAAEAAAABAAAAAQABAAIAAAACAAAAAQABAAIAAAADAAAAAQABAAIAAAAEAAAAAQABAAIAAAAFAAAAAQABAAIAAAAGAAAAAQABAAIAAAAHAAAAAQABAAIAAAAIAAAAAQABAAIAAAAJAAAAAQABAAIAAAAKAAAAAQABAAIAAAALAAAAAQABAAIAAAAMAAAAAQABAAIAAAANAAAAAQABAAIAAAAOAAAAAQABAAMAAAABAAcAAQABAAAAAAACAAcAAQABAAAAAAADAAcAAQABAAAAAAAEAAcAAQABAAAAAAAFAAcAAQABAAAAAAAGAAcAAQABAAAAAAAHAAcAAQABAAAAAAAIAAcAAQABAAAAAAAJAAcAAQABAAAAAAAKAAcAAQABAAAAAAALAAcAAQABAAAAAAAMAAcAAQABAAAAAAANAAcAAQABAAAAAAAOAAcAAQABAAAAAAA=") -tile_set = ExtResource("1_rn2om") - -[node name="Barrier" type="TileMapLayer" parent="TileMap"] -use_parent_material = true -tile_map_data = PackedByteArray("AAAPAAUAAQAAAAEAAAAPAAYAAQAAAAEAAAA=") -tile_set = ExtResource("1_rn2om") - -[node name="PointLight2D" type="PointLight2D" parent="."] -visible = false -position = Vector2(259.5, 128.5) -scale = Vector2(16.0312, 7.96875) -texture = ExtResource("5_4pssd") - -[node name="RigidBody2D" parent="." instance=ExtResource("5_5u8y1")] -position = Vector2(106, 147) diff --git a/prefab/roomTemplates/tutorials/spellEditor.tscn b/prefab/roomTemplates/tutorials/spellEditor.tscn new file mode 100644 index 0000000..2fd3228 --- /dev/null +++ b/prefab/roomTemplates/tutorials/spellEditor.tscn @@ -0,0 +1,119 @@ +[gd_scene load_steps=11 format=4 uid="uid://du5ldsp613fei"] + +[ext_resource type="Script" path="res://scripts/map/PlayerSpawn.cs" id="1_q04qt"] +[ext_resource type="TileSet" uid="uid://c4wpp12rr44hi" path="res://tileSets/dungeon.tres" id="2_5bnvh"] +[ext_resource type="Texture2D" uid="uid://drw45jlmfo0su" path="res://sprites/light/White_100.png" id="3_atgj7"] +[ext_resource type="Script" path="res://scripts/map/ItemSpawn.cs" id="4_6ihp7"] +[ext_resource type="PackedScene" uid="uid://djsh4unystlf0" path="res://prefab/furnitures/SpellEditor.tscn" id="5_0kep0"] +[ext_resource type="Texture2D" uid="uid://cdjmfqp854utu" path="res://sprites/tutorials/spellEditor.png" id="6_dbg76"] +[ext_resource type="PackedScene" uid="uid://dld3qttpsdjpe" path="res://prefab/furnitures/WoodenBox.tscn" id="7_jybe6"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_kiih8"] +size = Vector2(709, 296) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_jxmys"] +size = Vector2(23, 54.875) + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_064c7"] +vertices = PackedVector2Array(756.172, 267.297, 756.82, 306.008, 45.0312, 306.977, 723.094, 268.297, 45.9688, 42, 721.094, 42) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(3, 2, 4, 5)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(36, 32, 731, 32, 733, 258, 766, 257, 767, 316, 35, 317)]) +source_geometry_group_name = &"navigation_polygon_source_group" + +[node name="InitialRoom" type="Node2D"] + +[node name="RoomArea" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomArea"] +position = Vector2(383.5, 176) +shape = SubResource("RectangleShape2D_kiih8") + +[node name="RoomSlotList" type="Node2D" parent="."] + +[node name="Slot1" type="Area2D" parent="RoomSlotList"] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Slot1"] +position = Vector2(751.5, 289.438) +shape = SubResource("RectangleShape2D_jxmys") +debug_color = Color(0, 0.6, 0.701961, 0.419608) + +[node name="Marker2D" type="Marker2D" parent="."] +position = Vector2(54, 256) +script = ExtResource("1_q04qt") + +[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."] +navigation_polygon = SubResource("NavigationPolygon_064c7") + +[node name="TileMap" type="Node2D" parent="."] + +[node name="BackgroundWall" type="TileMapLayer" parent="TileMap"] +use_parent_material = true +tile_map_data = PackedByteArray("AAAOAAYAAQAGAAUAAAANAAYAAQAGAAUAAAAMAAYAAQAGAAUAAAALAAYAAQAGAAUAAAAKAAYAAQAGAAUAAAAJAAYAAQAGAAUAAAAIAAYAAQAGAAUAAAAHAAYAAQAGAAUAAAAGAAYAAQAGAAUAAAAOAAEAAQAGAAUAAAAOAAIAAQAGAAUAAAAOAAMAAQAGAAUAAAAOAAQAAQAGAAUAAAAOAAUAAQAGAAUAAAANAAUAAQAGAAUAAAANAAQAAQAGAAUAAAANAAMAAQAGAAUAAAANAAIAAQAGAAUAAAANAAEAAQAGAAUAAAAMAAEAAQAGAAUAAAALAAEAAQAGAAUAAAAKAAEAAQAGAAUAAAAJAAEAAQAGAAUAAAAIAAEAAQAGAAUAAAAHAAEAAQAGAAUAAAAGAAEAAQAGAAUAAAAFAAEAAQAGAAUAAAAEAAEAAQAGAAUAAAADAAEAAQAGAAUAAAACAAEAAQAGAAUAAAABAAEAAQAGAAUAAAABAAIAAQAGAAUAAAACAAIAAQAGAAUAAAADAAIAAQAGAAUAAAAEAAIAAQAGAAUAAAAFAAIAAQAGAAUAAAAGAAIAAQAGAAUAAAAHAAIAAQAGAAUAAAAIAAIAAQAGAAUAAAAJAAIAAQAGAAUAAAAKAAIAAQAGAAUAAAALAAIAAQAGAAUAAAAMAAIAAQAGAAUAAAAMAAMAAQAGAAUAAAALAAMAAQAGAAUAAAAKAAMAAQAGAAUAAAAJAAMAAQAGAAUAAAAIAAMAAQAGAAUAAAAHAAMAAQAGAAUAAAAGAAMAAQAGAAUAAAAFAAMAAQAGAAUAAAAEAAMAAQAGAAUAAAADAAMAAQAGAAUAAAACAAMAAQAGAAUAAAABAAMAAQAGAAUAAAABAAQAAQAGAAUAAAACAAQAAQAGAAUAAAADAAQAAQAGAAUAAAAEAAQAAQAGAAUAAAAFAAQAAQAGAAUAAAAGAAQAAQAGAAUAAAAHAAQAAQAGAAUAAAAIAAQAAQAGAAUAAAAJAAQAAQAGAAUAAAAKAAQAAQAGAAUAAAALAAQAAQAGAAUAAAAMAAQAAQAGAAUAAAAMAAUAAQAGAAUAAAALAAUAAQAGAAUAAAAKAAUAAQAGAAUAAAAJAAUAAQAGAAUAAAAIAAUAAQAGAAUAAAAHAAUAAQAGAAUAAAAGAAUAAQAGAAUAAAAFAAUAAQAGAAUAAAAEAAUAAQAGAAUAAAADAAUAAQAGAAUAAAACAAUAAQAGAAUAAAABAAUAAQAGAAUAAAABAAYAAQAGAAUAAAACAAYAAQAGAAUAAAADAAYAAQAGAAUAAAAEAAYAAQAGAAUAAAAFAAYAAQAGAAUAAAAPAAYAAQAGAAUAAAAPAAUAAQAGAAUAAAABAAcAAQAGAAUAAAABAAgAAQAGAAUAAAABAAkAAQAGAAUAAAACAAkAAQAGAAUAAAACAAgAAQAGAAUAAAACAAcAAQAGAAUAAAADAAcAAQAGAAUAAAADAAgAAQAGAAUAAAADAAkAAQAGAAUAAAAEAAkAAQAGAAUAAAAEAAgAAQAGAAUAAAAEAAcAAQAGAAUAAAAFAAcAAQAGAAUAAAAFAAgAAQAGAAUAAAAFAAkAAQAGAAUAAAAGAAkAAQAGAAUAAAAGAAgAAQAGAAUAAAAGAAcAAQAGAAUAAAAHAAgAAQAGAAUAAAAHAAkAAQAGAAUAAAAHAAcAAQAGAAUAAAAIAAcAAQAGAAUAAAAIAAgAAQAGAAUAAAAIAAkAAQAGAAUAAAAJAAkAAQAGAAUAAAAJAAgAAQAGAAUAAAAJAAcAAQAGAAUAAAAKAAcAAQAGAAUAAAAKAAgAAQAGAAUAAAAKAAkAAQAGAAUAAAALAAkAAQAGAAUAAAALAAgAAQAGAAUAAAALAAcAAQAGAAUAAAAMAAcAAQAGAAUAAAAMAAgAAQAGAAUAAAAMAAkAAQAGAAUAAAANAAkAAQAGAAUAAAANAAgAAQAGAAUAAAANAAcAAQAGAAUAAAAOAAcAAQAGAAUAAAAOAAgAAQAGAAUAAAAOAAkAAQAGAAUAAAAPAAkAAQAGAAUAAAAPAAgAAQAGAAUAAAAPAAcAAQAGAAUAAAAPAAQAAQAGAAUAAAAPAAMAAQAGAAUAAAAPAAIAAQAGAAUAAAAPAAEAAQAGAAUAAAAQAAEAAQAGAAUAAAARAAEAAQAGAAUAAAASAAEAAQAGAAUAAAATAAEAAQAGAAUAAAAUAAEAAQAGAAUAAAAVAAEAAQAGAAUAAAAWAAEAAQAGAAUAAAAWAAIAAQAGAAUAAAAVAAIAAQAGAAUAAAAUAAIAAQAGAAUAAAATAAIAAQAGAAUAAAASAAIAAQAGAAUAAAARAAIAAQAGAAUAAAAQAAIAAQAGAAUAAAAQAAMAAQAGAAUAAAARAAMAAQAGAAUAAAASAAMAAQAGAAUAAAATAAMAAQAGAAUAAAAUAAMAAQAGAAUAAAAVAAMAAQAGAAUAAAAWAAMAAQAGAAUAAAAWAAQAAQAGAAUAAAAVAAQAAQAGAAUAAAAUAAQAAQAGAAUAAAATAAQAAQAGAAUAAAASAAQAAQAGAAUAAAARAAQAAQAGAAUAAAAQAAQAAQAGAAUAAAAQAAUAAQAGAAUAAAARAAUAAQAGAAUAAAASAAUAAQAGAAUAAAATAAUAAQAGAAUAAAAUAAUAAQAGAAUAAAAVAAUAAQAGAAUAAAAWAAUAAQAGAAUAAAAWAAYAAQAGAAUAAAAVAAYAAQAGAAUAAAAUAAYAAQAGAAUAAAATAAYAAQAGAAUAAAASAAYAAQAGAAUAAAARAAYAAQAGAAUAAAAQAAYAAQAGAAUAAAAQAAcAAQAGAAUAAAARAAcAAQAGAAUAAAASAAcAAQAGAAUAAAATAAcAAQAGAAUAAAAUAAcAAQAGAAUAAAAVAAcAAQAGAAUAAAAWAAcAAQAGAAUAAAAWAAgAAQAGAAUAAAAVAAgAAQAGAAUAAAAUAAgAAQAGAAUAAAATAAgAAQAGAAUAAAASAAgAAQAGAAUAAAARAAgAAQAGAAUAAAAQAAgAAQAGAAUAAAAQAAkAAQAGAAUAAAARAAkAAQAGAAUAAAASAAkAAQAGAAUAAAATAAkAAQAGAAUAAAAUAAkAAQAGAAUAAAAVAAkAAQAGAAUAAAAWAAkAAQAGAAUAAAAXAAkAAQAGAAUAAAAXAAgAAQAGAAUAAAA=") +tile_set = ExtResource("2_5bnvh") +navigation_enabled = false + +[node name="BackgroundDecoration" type="TileMapLayer" parent="TileMap"] +use_parent_material = true +tile_map_data = PackedByteArray("AAAEAAkAAQAHAAUAAAAWAAEAAQAHAAQAAAA=") +tile_set = ExtResource("2_5bnvh") + +[node name="Ground" type="TileMapLayer" parent="TileMap"] +use_parent_material = true +tile_map_data = PackedByteArray("AAAAAAAAAQAAAAMAAAAAAAEAAQACAAEAAAAAAAIAAQACAAEAAAAAAAMAAQACAAEAAAAAAAQAAQACAAEAAAAAAAcAAQACAAEAAAAPAAAAAQABAAIAAAAAAAUAAQACAAEAAAAAAAYAAQACAAEAAAABAAAAAQABAAIAAAACAAAAAQABAAIAAAADAAAAAQABAAIAAAAEAAAAAQABAAIAAAAFAAAAAQABAAIAAAAGAAAAAQABAAIAAAAHAAAAAQABAAIAAAAIAAAAAQABAAIAAAAJAAAAAQABAAIAAAAKAAAAAQABAAIAAAALAAAAAQABAAIAAAAMAAAAAQABAAIAAAANAAAAAQABAAIAAAAOAAAAAQABAAMAAAAAAAgAAQACAAEAAAAAAAkAAQACAAEAAAAAAAoAAQAAAAUAAAABAAoAAQABAAAAAAACAAoAAQABAAAAAAADAAoAAQABAAAAAAAEAAoAAQABAAAAAAAFAAoAAQABAAAAAAAGAAoAAQABAAAAAAAHAAoAAQABAAAAAAAIAAoAAQABAAAAAAAJAAoAAQABAAAAAAAKAAoAAQABAAAAAAALAAoAAQABAAAAAAAMAAoAAQABAAAAAAANAAoAAQABAAAAAAAOAAoAAQABAAAAAAAPAAoAAQABAAAAAAAQAAoAAQABAAAAAAARAAoAAQABAAAAAAASAAoAAQABAAAAAAATAAoAAQABAAAAAAAUAAoAAQABAAAAAAAVAAoAAQABAAAAAAAWAAoAAQABAAAAAAAXAAoAAQACAAUAAAAQAAAAAQABAAIAAAARAAAAAQABAAIAAAASAAAAAQABAAIAAAATAAAAAQABAAIAAAAUAAAAAQABAAIAAAAXAAcAAQAAAAEAAAAXAAYAAQAAAAEAAAAXAAUAAQAAAAEAAAAXAAQAAQAAAAEAAAAXAAMAAQAAAAEAAAAXAAIAAQAAAAEAAAAXAAEAAQAAAAEAAAAXAAAAAQACAAMAAAAVAAAAAQABAAIAAAAWAAAAAQABAAIAAAA=") +tile_set = ExtResource("2_5bnvh") + +[node name="Barrier" type="TileMapLayer" parent="TileMap"] +use_parent_material = true +tile_map_data = PackedByteArray("AAAXAAgAAQAAAAEAAAAXAAkAAQAAAAEAAAA=") +tile_set = ExtResource("2_5bnvh") + +[node name="PointLight2D" type="PointLight2D" parent="."] +visible = false +position = Vector2(386, 178) +scale = Vector2(23.9375, 11.0625) +texture = ExtResource("3_atgj7") + +[node name="Marker2D2" type="Marker2D" parent="."] +position = Vector2(100, 250) +script = ExtResource("4_6ihp7") +ItemId = "staff_necromancy" + +[node name="Marker2D3" type="Marker2D" parent="."] +position = Vector2(134, 248) +script = ExtResource("4_6ihp7") +ItemId = "necromancy" + +[node name="Label" type="Label" parent="."] +offset_left = 37.0 +offset_top = 46.0 +offset_right = 200.0 +offset_bottom = 71.0 +text = "ui_tutorial_spellEditor" + +[node name="Label2" type="Label" parent="."] +offset_left = 391.0 +offset_top = 261.0 +offset_right = 554.0 +offset_bottom = 286.0 +text = "ui_tutorial_break_box" + +[node name="SpellEditor" type="Sprite2D" parent="."] +position = Vector2(621, 100) +texture = ExtResource("6_dbg76") + +[node name="RigidBody2D" parent="." instance=ExtResource("5_0kep0")] +position = Vector2(227, 283) +_initialDurability = null +_maxDurability = null + +[node name="WoodenBox" parent="." instance=ExtResource("7_jybe6")] +position = Vector2(715, 244) + +[node name="WoodenBox2" parent="." instance=ExtResource("7_jybe6")] +position = Vector2(715, 200) + +[node name="WoodenBox3" parent="." instance=ExtResource("7_jybe6")] +position = Vector2(715, 162) + +[node name="WoodenBox4" parent="." instance=ExtResource("7_jybe6")] +position = Vector2(714, 122) diff --git a/prefab/roomTemplates/tutorials/tripleShotSpell.tscn b/prefab/roomTemplates/tutorials/tripleShotSpell.tscn new file mode 100644 index 0000000..481eab3 --- /dev/null +++ b/prefab/roomTemplates/tutorials/tripleShotSpell.tscn @@ -0,0 +1,133 @@ +[gd_scene load_steps=11 format=4 uid="uid://dodxp4mm0emj3"] + +[ext_resource type="TileSet" uid="uid://c4wpp12rr44hi" path="res://tileSets/dungeon.tres" id="2_k54gk"] +[ext_resource type="Texture2D" uid="uid://drw45jlmfo0su" path="res://sprites/light/White_100.png" id="3_d6t7n"] +[ext_resource type="PackedScene" uid="uid://dld3qttpsdjpe" path="res://prefab/furnitures/WoodenBox.tscn" id="4_60glh"] +[ext_resource type="Script" path="res://scripts/map/ItemSpawn.cs" id="4_fh50l"] +[ext_resource type="PackedScene" uid="uid://djsh4unystlf0" path="res://prefab/furnitures/SpellEditor.tscn" id="5_ll4ng"] +[ext_resource type="Texture2D" uid="uid://kgodvs3ilxbs" path="res://sprites/tutorials/tripleShotSpell.png" id="6_2qcf3"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_kiih8"] +size = Vector2(709, 296) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_jxmys"] +size = Vector2(23, 54.875) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_xgxoy"] +size = Vector2(26, 57) + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_064c7"] +vertices = PackedVector2Array(728.094, 269, 755.672, 269, 754.328, 309.062, 457.93, 310.93, 621.094, 264.742, 619.094, 45.0781, 726.078, 45.9219, 562.906, 266.273, 456.93, 150.68, 564.898, 43.0078, 42.9531, 43.9766, 404.938, 157.18, 41.9609, 265.109, 405.93, 309.023, 10, 309.969, 10, 268.102) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(4, 5, 6, 0), PackedInt32Array(4, 0, 3, 7), PackedInt32Array(7, 3, 8, 9), PackedInt32Array(10, 9, 8, 11), PackedInt32Array(12, 10, 11, 13), PackedInt32Array(12, 13, 14, 15)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(33, 34, 32, 256, 0, 259, 0, 320, 416, 319, 415, 166, 447, 162, 448, 321, 764, 319, 766, 259, 738, 259, 736, 36, 609, 35, 611, 255, 573, 256, 575, 33)]) +source_geometry_group_name = &"navigation_polygon_source_group" + +[node name="InitialRoom" type="Node2D"] + +[node name="RoomArea" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomArea"] +position = Vector2(383.5, 176) +shape = SubResource("RectangleShape2D_kiih8") + +[node name="RoomSlotList" type="Node2D" parent="."] + +[node name="Slot1" type="Area2D" parent="RoomSlotList"] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Slot1"] +position = Vector2(751.5, 289.438) +shape = SubResource("RectangleShape2D_jxmys") +debug_color = Color(0, 0.6, 0.701961, 0.419608) + +[node name="Area2D" type="Area2D" parent="RoomSlotList"] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D"] +position = Vector2(17, 288) +shape = SubResource("RectangleShape2D_xgxoy") + +[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."] +navigation_polygon = SubResource("NavigationPolygon_064c7") + +[node name="TileMap" type="Node2D" parent="."] + +[node name="BackgroundWall" type="TileMapLayer" parent="TileMap"] +use_parent_material = true +tile_map_data = PackedByteArray("AAAOAAYAAQAGAAUAAAANAAYAAQAGAAUAAAAMAAYAAQAGAAUAAAALAAYAAQAGAAUAAAAKAAYAAQAGAAUAAAAJAAYAAQAGAAUAAAAIAAYAAQAGAAUAAAAHAAYAAQAGAAUAAAAGAAYAAQAGAAUAAAAOAAEAAQAGAAUAAAAOAAIAAQAGAAUAAAAOAAMAAQAGAAUAAAAOAAQAAQAGAAUAAAAOAAUAAQAGAAUAAAANAAUAAQAGAAUAAAANAAQAAQAGAAUAAAANAAMAAQAGAAUAAAANAAIAAQAGAAUAAAANAAEAAQAGAAUAAAAMAAEAAQAGAAUAAAALAAEAAQAGAAUAAAAKAAEAAQAGAAUAAAAJAAEAAQAGAAUAAAAIAAEAAQAGAAUAAAAHAAEAAQAGAAUAAAAGAAEAAQAGAAUAAAAFAAEAAQAGAAUAAAAEAAEAAQAGAAUAAAADAAEAAQAGAAUAAAACAAEAAQAGAAUAAAABAAEAAQAGAAUAAAABAAIAAQAGAAUAAAACAAIAAQAGAAUAAAADAAIAAQAGAAUAAAAEAAIAAQAGAAUAAAAFAAIAAQAGAAUAAAAGAAIAAQAGAAUAAAAHAAIAAQAGAAUAAAAIAAIAAQAGAAUAAAAJAAIAAQAGAAUAAAAKAAIAAQAGAAUAAAALAAIAAQAGAAUAAAAMAAIAAQAGAAUAAAAMAAMAAQAGAAUAAAALAAMAAQAGAAUAAAAKAAMAAQAGAAUAAAAJAAMAAQAGAAUAAAAIAAMAAQAGAAUAAAAHAAMAAQAGAAUAAAAGAAMAAQAGAAUAAAAFAAMAAQAGAAUAAAAEAAMAAQAGAAUAAAADAAMAAQAGAAUAAAACAAMAAQAGAAUAAAABAAMAAQAGAAUAAAABAAQAAQAGAAUAAAACAAQAAQAGAAUAAAADAAQAAQAGAAUAAAAEAAQAAQAGAAUAAAAFAAQAAQAGAAUAAAAGAAQAAQAGAAUAAAAHAAQAAQAGAAUAAAAIAAQAAQAGAAUAAAAJAAQAAQAGAAUAAAAKAAQAAQAGAAUAAAALAAQAAQAGAAUAAAAMAAQAAQAGAAUAAAAMAAUAAQAGAAUAAAALAAUAAQAGAAUAAAAKAAUAAQAGAAUAAAAJAAUAAQAGAAUAAAAIAAUAAQAGAAUAAAAHAAUAAQAGAAUAAAAGAAUAAQAGAAUAAAAFAAUAAQAGAAUAAAAEAAUAAQAGAAUAAAADAAUAAQAGAAUAAAACAAUAAQAGAAUAAAABAAUAAQAGAAUAAAABAAYAAQAGAAUAAAACAAYAAQAGAAUAAAADAAYAAQAGAAUAAAAEAAYAAQAGAAUAAAAFAAYAAQAGAAUAAAAPAAYAAQAGAAUAAAAPAAUAAQAGAAUAAAABAAcAAQAGAAUAAAABAAgAAQAGAAUAAAABAAkAAQAGAAUAAAACAAkAAQAGAAUAAAACAAgAAQAGAAUAAAACAAcAAQAGAAUAAAADAAcAAQAGAAUAAAADAAgAAQAGAAUAAAADAAkAAQAGAAUAAAAEAAkAAQAGAAUAAAAEAAgAAQAGAAUAAAAEAAcAAQAGAAUAAAAFAAcAAQAGAAUAAAAFAAgAAQAGAAUAAAAFAAkAAQAGAAUAAAAGAAkAAQAGAAUAAAAGAAgAAQAGAAUAAAAGAAcAAQAGAAUAAAAHAAgAAQAGAAUAAAAHAAkAAQAGAAUAAAAHAAcAAQAGAAUAAAAIAAcAAQAGAAUAAAAIAAgAAQAGAAUAAAAIAAkAAQAGAAUAAAAJAAkAAQAGAAUAAAAJAAgAAQAGAAUAAAAJAAcAAQAGAAUAAAAKAAcAAQAGAAUAAAAKAAgAAQAGAAUAAAAKAAkAAQAGAAUAAAALAAkAAQAGAAUAAAALAAgAAQAGAAUAAAALAAcAAQAGAAUAAAAMAAcAAQAGAAUAAAAMAAgAAQAGAAUAAAAMAAkAAQAGAAUAAAANAAkAAQAGAAUAAAANAAgAAQAGAAUAAAANAAcAAQAGAAUAAAAOAAcAAQAGAAUAAAAOAAgAAQAGAAUAAAAOAAkAAQAGAAUAAAAPAAkAAQAGAAUAAAAPAAgAAQAGAAUAAAAPAAcAAQAGAAUAAAAPAAQAAQAGAAUAAAAPAAMAAQAGAAUAAAAPAAIAAQAGAAUAAAAPAAEAAQAGAAUAAAAQAAEAAQAGAAUAAAARAAEAAQAGAAUAAAASAAEAAQAGAAUAAAATAAEAAQAGAAUAAAAUAAEAAQAGAAUAAAAVAAEAAQAGAAUAAAAWAAEAAQAGAAUAAAAWAAIAAQAGAAUAAAAVAAIAAQAGAAUAAAAUAAIAAQAGAAUAAAATAAIAAQAGAAUAAAASAAIAAQAGAAUAAAARAAIAAQAGAAUAAAAQAAIAAQAGAAUAAAAQAAMAAQAGAAUAAAARAAMAAQAGAAUAAAASAAMAAQAGAAUAAAATAAMAAQAGAAUAAAAUAAMAAQAGAAUAAAAVAAMAAQAGAAUAAAAWAAMAAQAGAAUAAAAWAAQAAQAGAAUAAAAVAAQAAQAGAAUAAAAUAAQAAQAGAAUAAAATAAQAAQAGAAUAAAASAAQAAQAGAAUAAAARAAQAAQAGAAUAAAAQAAQAAQAGAAUAAAAQAAUAAQAGAAUAAAARAAUAAQAGAAUAAAASAAUAAQAGAAUAAAATAAUAAQAGAAUAAAAUAAUAAQAGAAUAAAAVAAUAAQAGAAUAAAAWAAUAAQAGAAUAAAAWAAYAAQAGAAUAAAAVAAYAAQAGAAUAAAAUAAYAAQAGAAUAAAATAAYAAQAGAAUAAAASAAYAAQAGAAUAAAARAAYAAQAGAAUAAAAQAAYAAQAGAAUAAAAQAAcAAQAGAAUAAAARAAcAAQAGAAUAAAASAAcAAQAGAAUAAAATAAcAAQAGAAUAAAAUAAcAAQAGAAUAAAAVAAcAAQAGAAUAAAAWAAcAAQAGAAUAAAAWAAgAAQAGAAUAAAAVAAgAAQAGAAUAAAAUAAgAAQAGAAUAAAATAAgAAQAGAAUAAAASAAgAAQAGAAUAAAARAAgAAQAGAAUAAAAQAAgAAQAGAAUAAAAQAAkAAQAGAAUAAAARAAkAAQAGAAUAAAASAAkAAQAGAAUAAAATAAkAAQAGAAUAAAAUAAkAAQAGAAUAAAAVAAkAAQAGAAUAAAAWAAkAAQAGAAUAAAAXAAkAAQAGAAUAAAAXAAgAAQAGAAUAAAAAAAkAAQAGAAUAAAAAAAgAAQAGAAUAAAA=") +tile_set = ExtResource("2_k54gk") +navigation_enabled = false + +[node name="BackgroundDecoration" type="TileMapLayer" parent="TileMap"] +use_parent_material = true +tile_map_data = PackedByteArray("AAAWAAEAAQAHAAQAAAACAAkAAQAHAAEAAAA=") +tile_set = ExtResource("2_k54gk") + +[node name="Ground" type="TileMapLayer" parent="TileMap"] +use_parent_material = true +tile_map_data = PackedByteArray("AAAAAAAAAQAAAAMAAAAAAAEAAQACAAEAAAAAAAIAAQACAAEAAAAAAAMAAQACAAEAAAAAAAQAAQACAAEAAAAAAAcAAQACAAEAAAAPAAAAAQABAAIAAAAAAAUAAQACAAEAAAAAAAYAAQACAAEAAAABAAAAAQABAAIAAAACAAAAAQABAAIAAAADAAAAAQABAAIAAAAEAAAAAQABAAIAAAAFAAAAAQABAAIAAAAGAAAAAQABAAIAAAAHAAAAAQABAAIAAAAIAAAAAQABAAIAAAAJAAAAAQABAAIAAAAKAAAAAQABAAIAAAALAAAAAQABAAIAAAAMAAAAAQABAAIAAAANAAAAAQABAAIAAAAOAAAAAQABAAMAAAAAAAoAAQAAAAUAAAABAAoAAQABAAAAAAACAAoAAQABAAAAAAADAAoAAQABAAAAAAAEAAoAAQABAAAAAAAFAAoAAQABAAAAAAAGAAoAAQABAAAAAAAHAAoAAQABAAAAAAAIAAoAAQABAAAAAAAJAAoAAQABAAAAAAAKAAoAAQABAAAAAAALAAoAAQABAAAAAAAMAAoAAQABAAAAAAANAAoAAQABAAAAAAAOAAoAAQABAAAAAAAPAAoAAQABAAAAAAAQAAoAAQABAAAAAAARAAoAAQABAAAAAAASAAoAAQABAAAAAAATAAoAAQABAAAAAAAUAAoAAQABAAAAAAAVAAoAAQABAAAAAAAWAAoAAQABAAAAAAAXAAoAAQACAAUAAAAQAAAAAQABAAIAAAARAAAAAQABAAIAAAASAAAAAQABAAIAAAATAAAAAQABAAIAAAAUAAAAAQABAAIAAAAXAAcAAQAAAAEAAAAXAAYAAQAAAAEAAAAXAAUAAQAAAAEAAAAXAAQAAQAAAAEAAAAXAAMAAQAAAAEAAAAXAAIAAQAAAAEAAAAXAAEAAQAAAAEAAAAXAAAAAQACAAMAAAAVAAAAAQABAAIAAAAWAAAAAQABAAIAAAAEAAkAAQAEAAQAAAAFAAgAAQAEAAQAAAAGAAcAAQAEAAQAAAAHAAYAAQAEAAQAAAAIAAUAAQAEAAQAAAAKAAUAAQAEAAQAAAAMAAUAAQAEAAQAAAAOAAUAAQADAAQAAAAQAAUAAQAEAAQAAAASAAUAAQADAAAAAAAJAAUAAQAEAAQAAAALAAUAAQAEAAQAAAANAAkAAQADAAAAAAANAAgAAQADAAAAAAANAAcAAQADAAAAAAANAAYAAQADAAAAAAANAAUAAQADAAAAAAAPAAUAAQAEAAQAAAARAAUAAQAFAAQAAAASAAYAAQADAAAAAAASAAcAAQADAAAAAAASAAQAAQADAAAAAAASAAMAAQADAAAAAAASAAIAAQADAAAAAAASAAEAAQADAAAAAAA=") +tile_set = ExtResource("2_k54gk") + +[node name="Barrier" type="TileMapLayer" parent="TileMap"] +use_parent_material = true +tile_map_data = PackedByteArray("AAAXAAgAAQAAAAEAAAAXAAkAAQAAAAEAAAAAAAgAAQACAAEAAAAAAAkAAQACAAEAAAA=") +tile_set = ExtResource("2_k54gk") + +[node name="PointLight2D" type="PointLight2D" parent="."] +visible = false +position = Vector2(386, 178) +scale = Vector2(23.9375, 11.0625) +texture = ExtResource("3_d6t7n") + +[node name="Label" type="Label" parent="."] +offset_left = 54.0 +offset_top = 55.0 +offset_right = 277.0 +offset_bottom = 80.0 +text = "ui_tutorial_jump_onto_platform" + +[node name="Label2" type="Label" parent="."] +offset_left = 151.0 +offset_top = 126.0 +offset_right = 453.0 +offset_bottom = 151.0 +text = "ui_tutorial_combine_more_powerful_spells" + +[node name="Marker2D" type="Marker2D" parent="."] +position = Vector2(434, 105) +script = ExtResource("4_fh50l") +ItemId = "x3" + +[node name="WoodenBox" parent="." instance=ExtResource("4_60glh")] +position = Vector2(711, 179) + +[node name="WoodenBox4" parent="." instance=ExtResource("4_60glh")] +position = Vector2(676, 179) + +[node name="WoodenBox5" parent="." instance=ExtResource("4_60glh")] +position = Vector2(676, 144) + +[node name="WoodenBox6" parent="." instance=ExtResource("4_60glh")] +position = Vector2(675, 102) + +[node name="WoodenBox7" parent="." instance=ExtResource("4_60glh")] +position = Vector2(641, 180) + +[node name="WoodenBox8" parent="." instance=ExtResource("4_60glh")] +position = Vector2(640, 142) + +[node name="WoodenBox9" parent="." instance=ExtResource("4_60glh")] +position = Vector2(640, 101) + +[node name="WoodenBox2" parent="." instance=ExtResource("4_60glh")] +position = Vector2(712, 138) + +[node name="WoodenBox3" parent="." instance=ExtResource("4_60glh")] +position = Vector2(711, 98) + +[node name="RigidBody2D" parent="." instance=ExtResource("5_ll4ng")] +position = Vector2(473, 285) +_initialDurability = null +_maxDurability = null + +[node name="TripleShotSpell" type="Sprite2D" parent="."] +position = Vector2(637, 85) +texture = ExtResource("6_2qcf3") diff --git a/project.godot b/project.godot index ca91971..ecdbda5 100644 --- a/project.godot +++ b/project.godot @@ -169,6 +169,7 @@ locale/translations=PackedStringArray("res://locals/DeathInfo.en.translation", " 2d_physics/layer_8="Wall" 2d_physics/layer_9="Furniture" 2d_physics/layer_10="WeaponDamageArea" +2d_physics/layer_11="Barrier" [physics] diff --git a/scripts/Config.cs b/scripts/Config.cs index d808c10..8236050 100644 --- a/scripts/Config.cs +++ b/scripts/Config.cs @@ -583,6 +583,7 @@ public static class Config /// 武器伤害区域 /// public const int WeaponDamageArea = 10; + public const int Barrier = 11; } /// diff --git a/scripts/character/CharacterTemplate.cs b/scripts/character/CharacterTemplate.cs index fab0371..fd163ad 100644 --- a/scripts/character/CharacterTemplate.cs +++ b/scripts/character/CharacterTemplate.cs @@ -318,6 +318,7 @@ public partial class CharacterTemplate : CharacterBody2D //角色不能穿过墙壁和地板 SetCollisionMaskValue(Config.LayerNumber.Wall, true); SetCollisionMaskValue(Config.LayerNumber.Floor, true); + SetCollisionMaskValue(Config.LayerNumber.Barrier, true); InputPickable = true; } diff --git a/scripts/furniture/Barrier.cs b/scripts/furniture/Barrier.cs new file mode 100644 index 0000000..5264486 --- /dev/null +++ b/scripts/furniture/Barrier.cs @@ -0,0 +1,18 @@ +namespace ColdMint.scripts.furniture; + +/// +/// Barrier +/// 屏障型家具 +/// +public partial class Barrier : Furniture +{ + public override void _Ready() + { + base._Ready(); + CanSleep = false; + SetCollisionLayerValue(Config.LayerNumber.Barrier, true); + SetCollisionLayerValue(Config.LayerNumber.Furniture, false); + SetCollisionMaskValue(Config.LayerNumber.Furniture, true); + SetCollisionMaskValue(Config.LayerNumber.Barrier, true); + } +} \ No newline at end of file diff --git a/scripts/furniture/Furniture.cs b/scripts/furniture/Furniture.cs index 3155a2c..8fc7f96 100644 --- a/scripts/furniture/Furniture.cs +++ b/scripts/furniture/Furniture.cs @@ -31,6 +31,7 @@ public partial class Furniture : RigidBody2D } _durability = _initialDurability; + SetCollisionLayerValue(Config.LayerNumber.Furniture, true); SetCollisionMaskValue(Config.LayerNumber.Wall, true); SetCollisionMaskValue(Config.LayerNumber.Platform, true); SetCollisionMaskValue(Config.LayerNumber.Floor, true); @@ -60,6 +61,11 @@ public partial class Furniture : RigidBody2D /// public bool Damage(DamageTemplate damageTemplate) { - return false; + _durability -= damageTemplate.Damage; + if (_durability <= 0) + { + QueueFree(); + } + return true; } } \ No newline at end of file diff --git a/scripts/projectile/Projectile.cs b/scripts/projectile/Projectile.cs index e9cfb18..5fac312 100644 --- a/scripts/projectile/Projectile.cs +++ b/scripts/projectile/Projectile.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using ColdMint.scripts.camp; using ColdMint.scripts.character; using ColdMint.scripts.damage; +using ColdMint.scripts.furniture; using ColdMint.scripts.pickable; using ColdMint.scripts.projectile.decorator; using ColdMint.scripts.utils; @@ -117,6 +118,7 @@ public partial class Projectile : CharacterBody2D SetCollisionMaskValue(Config.LayerNumber.Player, true); SetCollisionMaskValue(Config.LayerNumber.Mob, true); SetCollisionMaskValue(Config.LayerNumber.PickAbleItem, true); + SetCollisionMaskValue(Config.LayerNumber.Barrier, true); //Platform collision layer is not allowed to collide //平台碰撞层不可碰撞 SetCollisionMaskValue(Config.LayerNumber.Platform, false); @@ -191,6 +193,11 @@ public partial class Projectile : CharacterBody2D return true; } + if (target is Furniture) + { + return true; + } + if (target is PickAbleTemplate pickAbleTemplate) { //The picked-up item cannot resist the bullet. @@ -258,6 +265,18 @@ public partial class Projectile : CharacterBody2D pickAbleTemplate.ApplyImpulse(new Vector2(normalized.X * _repelStrength * Config.CellSize, normalized.Y * _repelStrength * Config.CellSize)); } + }else if (target is Furniture furniture) + { + var damage = new Damage + { + Attacker = owner, + MaxDamage = _maxDamage, + MinDamage = _minDamage + }; + damage.CreateDamage(); + damage.MoveLeft = Velocity.X < 0; + damage.Type = _damageType; + furniture.Damage(damage); } } diff --git a/scripts/spell/NodeSpawnOnKillCharacterSpell.cs b/scripts/spell/NodeSpawnOnKillCharacterSpell.cs index 089fdf2..91ffd0f 100644 --- a/scripts/spell/NodeSpawnOnKillCharacterSpell.cs +++ b/scripts/spell/NodeSpawnOnKillCharacterSpell.cs @@ -1,4 +1,3 @@ -using ColdMint.scripts.debug; using ColdMint.scripts.projectile; using ColdMint.scripts.projectile.decorator; using Godot; @@ -31,10 +30,8 @@ public partial class NodeSpawnOnKillCharacterSpell : SpellPickAble { if (_nodeSpawnOnKillCharacterDecorator == null) { - LogCat.Log("添加失败"); return; } - LogCat.Log("添加成功"); projectile.AddProjectileDecorator(_nodeSpawnOnKillCharacterDecorator); } } \ No newline at end of file diff --git a/sprites/furnitures/wooden_box.png b/sprites/furnitures/wooden_box.png new file mode 100644 index 0000000000000000000000000000000000000000..ef759dd14e0519e3dae502085ff1b354dbb1b4b3 GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^TlROsrOa_r$dt7@`cGu6{1-oD!Mk|lH|>f-j_SJZ{L6V*qIO64F|_>-m#(!tZ9}cZ$x50|LS7@z-~fl zb@a;KGw)i_1=ck4lXv6R^!f9j_#*nN$4_LlnO*OFvP{S4D;rhx2|6K@#f|4x=n8bYn*9o-eURrWM(O!FOAM7Fa3J4TrR1q>Ko8sJ9%T2slJADNmFmxhiH*3=O@SXEQIZLw6|vVV(Nqkye6mAt4_ymswx zvqk}1X?(Yh-kI}qtbg+c6Q=?DXmHIFrUfpQlfC@T9U*fE0-I=L&6~fsKqaz^9{x~d zqv->IP1LvMX{z?q_qTN+6LmUwBX-b)I@Y{wBBw{=EKSez?gN9HteXk!ppN8Ck4NXE z((%{#(Dbt3l>{)zX!3+LjP7z+Ittjz zD#@E1pUI@L;>)x5!=&DEW} ztma$bj&ysSd;IQdQAm2Ga)ZIrZ(VfC)bXHg)t5Yx>dSeLgnL{y^&mBX(-HLZ#QpJDp!Rm}AFHiTB{KH+|UP_UcdksaA zo*sX``#@InnKT}>ErYu)Ri=5?;h@wdLiB3&#`WuxBz1dz`}V!m(a}K&p(w&R97Wm_s0csdp^K?Q>?)|*mRTHL-eSLvoC>|Ha#{MW4iJzRtjJ*UNWQ2L zT_L*mXgwSbMrSV0=ipA3WlWt4+FxCJV(ocb zp-?Ck3YEuKul`)Er&CE?$4MTnq>=Y92qCg8i=sF&F;Oa(G)+?!H4q4xI~lY$L&>9v z<}TeAb8ZjstW*;5`1trlsZ^@2Yy$(4$^#)GddUop3tL!`q1~1uI!_+T`BJqK4267t zUo~9Yw!OgfeC2T_EBPHMibC>WB}RAKE;=cvZi}5m9=?+h!g1W;!-pS#nGjFY>9O^m zW$!ivRMc^W5o8}obH9tZW$&H{@pLLWvehG)F&MPD`mQkg*n10eitO9Fu9K^t^ASRX zgqX=nbb4&N7qJ6F>b|xOvJbKuF_#G}Cb#^5lwgnN+AVuD`A7Qg^F&_LRbc^O8c;L!VFKCmds@g^By3vVV*6tw@Dyfpv7Lhjbh?9`x_;T#y*gn@ixO3J(W;;H| z@s7WrC-cWSzaPq%|KH~v|7}75000000002sKd4)Wo;!2YreaV3@}f;ghW{h0GiP7m z3J^P>H@X36ILI8-nk|`&#xv1)#*QO{16Z87*|ASDO*?n)JO0qg)9j}ECf@zn+T()* zSe&_0nSK6+7km146GH1_7x$d}j`Ir}ohFegqve(B=h-hJf{Z59>)N3dX?TU5UoOD<=#%Ghk| z!aFajs-o+4w?NvEMrQ{pVge8~N9#XNJBR z3U)knkEi#wY74IFBnnVTP-x*;tO9T`|Pj=(`l>s(v& zin?vzHfvjf2C>e}h2{L4Z+>KLE6^a;v$lpmp7U{R;Lc5!cLR-};(1P-5xICe;}iOK zb=uJoI9_G*-2C+gYALno74GldY*Rzvc;(J>hHkw6>J?K=hTZPn2pm+Qta&cAls3ar zmZs+g&%Fa%?CuGit*p$=OoZoT<;ch&P2Xm3B0xn-XHJ|En`wIZ_?{Yc1C5|`<|eO3 zGMd?4gI=I9l+K*MF(&V-K`YQ8*38`1i5tm8rd87tdHvwQUA629oNdj_$qNa?FlXIO z$G*{5%Z9-5*38_k?->EG1l~IiwT90E0{{R300000000000000000000000000001J zY@gd}xUstoQN2N`uVl`?!vCW@syASD?Bj=8v+_HGEyO4WqnYdeah;`f4*#9%R6S;n zTh_Ktrh{=~-A54p^mMXSX)E>|#K)#?oPscfDz2ou$}MD!iSkuK(1J2OiY-Rj1`u`0-1%J466 z2ikn@!GNbYD8{@~>4A{)&sI8aLwn#rRB_|l~}isOlR%rtFzF{g`B`S*WxZQq)G;~k=}OuDfj{3P(gIoj7|M^Ugt#rIn? znT#Y!larH5UNHg=42L>3lq z7XG+n$K8S;6dos2a=;a*DC;wqAG;F$_GvSpH>7mp$L9)z`rN|uU;a)AS$_3(b!yu3 zqF|HKYilbV%fzop%|l+HnGnKp-2VOhZ+)5=P0)$)JG^UNH?D>jS-GobB&E+Dq-7&* zOF6JrS?3TTc3Pf$PfD+OO+<_);^EQlUeUV7z_H3bhv;IjFU)Bf|DKj+uDH$;Lc}F0 znUd+m_)Z@J2W6??yfws5r;<`S*|8Ygw(|3-4+4~E(~=5~RN1wXRyrn-xT#$$j!?Wo z)#UCfI7Y?S=O|)Qcvmn~q3-rW=qx4r>706-yKUvmsjBFwb@n#jhzuL9?)H7@96jAH z5G(c?V$)ZBs=Le)LKL2z8uU(MPqjnUW9A4UI!Ei=MmGWWz+?cmhR*^+^$o5L00000 e0002c(Ebfb3W*PSuZLp*0000