diff --git a/art/ui/UI/AttackButton.png b/art/ui/UI/AttackButton.png new file mode 100644 index 0000000..ebbddc5 Binary files /dev/null and b/art/ui/UI/AttackButton.png differ diff --git a/art/ui/UI/AttackButton.png.import b/art/ui/UI/AttackButton.png.import new file mode 100644 index 0000000..7370887 --- /dev/null +++ b/art/ui/UI/AttackButton.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bn56p0ytuo060" +path="res://.godot/imported/AttackButton.png-ab1949863046f66b014201d64778c962.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/ui/UI/AttackButton.png" +dest_files=["res://.godot/imported/AttackButton.png-ab1949863046f66b014201d64778c962.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/art/ui/UI/MagicButton.png b/art/ui/UI/MagicButton.png new file mode 100644 index 0000000..d1e06c8 Binary files /dev/null and b/art/ui/UI/MagicButton.png differ diff --git a/art/ui/UI/MagicButton.png.import b/art/ui/UI/MagicButton.png.import new file mode 100644 index 0000000..fa1ee45 --- /dev/null +++ b/art/ui/UI/MagicButton.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bcs0e1bpu8wm1" +path="res://.godot/imported/MagicButton.png-f688abbb37e617bc75b48afd1bffb745.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/ui/UI/MagicButton.png" +dest_files=["res://.godot/imported/MagicButton.png-f688abbb37e617bc75b48afd1bffb745.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/art/ui/UI/attack_select_wheel.png b/art/ui/UI/attack_select_wheel.png new file mode 100644 index 0000000..4822e11 Binary files /dev/null and b/art/ui/UI/attack_select_wheel.png differ diff --git a/art/ui/UI/attack_select_wheel.png.import b/art/ui/UI/attack_select_wheel.png.import new file mode 100644 index 0000000..844ba0e --- /dev/null +++ b/art/ui/UI/attack_select_wheel.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://qlfwuakhe57t" +path="res://.godot/imported/attack_select_wheel.png-437439dea02962dbfc00f0c03b7b3deb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/ui/UI/attack_select_wheel.png" +dest_files=["res://.godot/imported/attack_select_wheel.png-437439dea02962dbfc00f0c03b7b3deb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/prefabs/fight/fight_base_scene.tscn b/prefabs/fight/fight_base_scene.tscn new file mode 100644 index 0000000..6ed38f9 --- /dev/null +++ b/prefabs/fight/fight_base_scene.tscn @@ -0,0 +1,49 @@ +[gd_scene load_steps=3 format=3 uid="uid://hk8ahyp6dgl6"] + +[ext_resource type="Script" uid="uid://c76mhhqyk4lgh" path="res://scripts/CSharp/Common/Fight/FightInstance.cs" id="1_ygesl"] +[ext_resource type="Script" uid="uid://oe1uypehqvr7" path="res://scripts/CSharp/Common/Fight/FightStateManager.cs" id="2_b0ivm"] + +[node name="FightBaseScene" type="Node2D" node_paths=PackedStringArray("_friendlyFightSpots", "_enemyFightSpots", "camPositionNode", "_fightStateManager", "_fightEndText")] +script = ExtResource("1_ygesl") +_friendlyFightSpots = [NodePath("FriendlyPositions/FriendPos1"), NodePath("FriendlyPositions/FriendPos2"), NodePath("FriendlyPositions/FriendPos3")] +_enemyFightSpots = [NodePath("EnemyPositions/EnemyPos1"), NodePath("EnemyPositions/EnemyPos2"), NodePath("EnemyPositions/EnemyPos3")] +camPositionNode = NodePath("CamPositionMarker") +_fightStateManager = NodePath("FightStateManager") +_fightEndText = NodePath("ResultText") + +[node name="FriendlyPositions" type="Node2D" parent="."] +position = Vector2(-625, -6) + +[node name="FriendPos1" type="Node2D" parent="FriendlyPositions"] +position = Vector2(0, -395) + +[node name="FriendPos2" type="Node2D" parent="FriendlyPositions"] + +[node name="FriendPos3" type="Node2D" parent="FriendlyPositions"] +position = Vector2(0, 424) + +[node name="EnemyPositions" type="Node2D" parent="."] +position = Vector2(611, -12) + +[node name="EnemyPos1" type="Node2D" parent="EnemyPositions"] +position = Vector2(0, -395) + +[node name="EnemyPos2" type="Node2D" parent="EnemyPositions"] + +[node name="EnemyPos3" type="Node2D" parent="EnemyPositions"] +position = Vector2(0, 424) + +[node name="FightStateManager" type="Node" parent="."] +script = ExtResource("2_b0ivm") + +[node name="CamPositionMarker" type="Node2D" parent="."] + +[node name="ResultText" type="Label" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_font_sizes/font_size = 141 +horizontal_alignment = 1 +vertical_alignment = 1 diff --git a/prefabs/fight/fight_manager_autoload.tscn b/prefabs/fight/fight_manager_autoload.tscn new file mode 100644 index 0000000..8102fe1 --- /dev/null +++ b/prefabs/fight/fight_manager_autoload.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=3 format=3 uid="uid://cnjsepvaqdbyq"] + +[ext_resource type="Script" uid="uid://j5ge24rk25wm" path="res://scripts/CSharp/Common/Fight/FightManager.cs" id="1_8p7ev"] +[ext_resource type="PackedScene" uid="uid://cpanatqdjjpa3" path="res://prefabs/fight/fighters/vesna_fighter.tscn" id="2_ak1vo"] + +[node name="FightManagerAutoload" type="Node"] +script = ExtResource("1_8p7ev") +fightingVesnaScene = ExtResource("2_ak1vo") diff --git a/prefabs/fight/fighters/enemy_blob_fighter.tscn b/prefabs/fight/fighters/enemy_blob_fighter.tscn new file mode 100644 index 0000000..f1515fe --- /dev/null +++ b/prefabs/fight/fighters/enemy_blob_fighter.tscn @@ -0,0 +1,89 @@ +[gd_scene load_steps=7 format=3 uid="uid://bp64p6y72j71w"] + +[ext_resource type="Texture2D" uid="uid://ccrnmx6bd842k" path="res://art/characters/farm fäulnis blobs.png" id="1_vem8k"] +[ext_resource type="Script" uid="uid://by88f32fou7lh" path="res://scripts/CSharp/Common/Fight/Fighter.cs" id="2_4w1ab"] +[ext_resource type="Texture2D" uid="uid://qlfwuakhe57t" path="res://art/ui/UI/attack_select_wheel.png" id="3_v4f83"] +[ext_resource type="Texture2D" uid="uid://bn56p0ytuo060" path="res://art/ui/UI/AttackButton.png" id="5_vbkts"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_284vk"] +radius = 291.58 + +[sub_resource type="CircleShape2D" id="CircleShape2D_s74nc"] +radius = 173.44 + +[node name="EnemyBlobFighter" type="Node2D" node_paths=PackedStringArray("_attackButtons", "_targetButtons", "_targetMarker", "_healthText", "_visualSprite")] +script = ExtResource("2_4w1ab") +name = "Blob" +maxHealth = 50 +attackStrength = 5 +_attackButtons = NodePath("FightButtons") +_targetButtons = NodePath("TargetButtons") +_targetMarker = NodePath("TargetButtons/TargetMarker") +_healthText = NodePath("HealthShow") +_visualSprite = NodePath("Sprite2D") + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = ExtResource("1_vem8k") +offset = Vector2(-8, -130) +region_enabled = true +region_rect = Rect2(1735.63, 108.423, 320.374, 333.577) + +[node name="TargetButtons" type="Node2D" parent="."] +visible = false + +[node name="TargetMarker" type="Sprite2D" parent="TargetButtons"] +visible = false +z_index = 200 +position = Vector2(8, -122) +scale = Vector2(4.245, 4.245) +texture = ExtResource("3_v4f83") + +[node name="Area2D" type="Area2D" parent="TargetButtons"] +position = Vector2(3, -76) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="TargetButtons/Area2D"] +shape = SubResource("CircleShape2D_284vk") + +[node name="FightButtons" type="Node2D" parent="."] +visible = false +position = Vector2(3, -588) + +[node name="CircleBackground" type="Sprite2D" parent="FightButtons"] +z_index = 200 +scale = Vector2(4.245, 4.245) +texture = ExtResource("3_v4f83") + +[node name="AttackButton" type="Node2D" parent="FightButtons"] +position = Vector2(0, -536) + +[node name="ButtonBackground" type="Sprite2D" parent="FightButtons/AttackButton"] +z_index = 200 +scale = Vector2(2.48, 2.48) +texture = ExtResource("5_vbkts") + +[node name="Area2D" type="Area2D" parent="FightButtons/AttackButton"] +collision_layer = 16 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="FightButtons/AttackButton/Area2D"] +shape = SubResource("CircleShape2D_s74nc") + +[node name="HealthShow" type="Label" parent="."] +z_index = 200 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -197.0 +offset_top = -451.0 +offset_right = 207.0 +offset_bottom = -305.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_font_sizes/font_size = 106 +text = "100/100" +horizontal_alignment = 1 +vertical_alignment = 1 + +[connection signal="input_event" from="TargetButtons/Area2D" to="." method="TargetMouseEvent"] +[connection signal="mouse_entered" from="TargetButtons/Area2D" to="." method="StartHoverTarget"] +[connection signal="mouse_exited" from="TargetButtons/Area2D" to="." method="EndHoverTarget"] +[connection signal="input_event" from="FightButtons/AttackButton/Area2D" to="." method="AttackMouseEvent"] diff --git a/prefabs/fight/fighters/vesna_fighter.tscn b/prefabs/fight/fighters/vesna_fighter.tscn new file mode 100644 index 0000000..6b82bb8 --- /dev/null +++ b/prefabs/fight/fighters/vesna_fighter.tscn @@ -0,0 +1,84 @@ +[gd_scene load_steps=7 format=3 uid="uid://cpanatqdjjpa3"] + +[ext_resource type="Script" uid="uid://by88f32fou7lh" path="res://scripts/CSharp/Common/Fight/Fighter.cs" id="1_f3j2x"] +[ext_resource type="Texture2D" uid="uid://om2axn1vfa5o" path="res://art/animation/Vesna2D/Vesna Anims Sequences/S01-Idle/0001.png" id="2_2ud32"] +[ext_resource type="Texture2D" uid="uid://qlfwuakhe57t" path="res://art/ui/UI/attack_select_wheel.png" id="3_80knd"] +[ext_resource type="Texture2D" uid="uid://bn56p0ytuo060" path="res://art/ui/UI/AttackButton.png" id="4_0tqnl"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_0tqnl"] +radius = 291.58 + +[sub_resource type="CircleShape2D" id="CircleShape2D_4r2vf"] +radius = 173.44 + +[node name="VesnaFighter" type="Node2D" node_paths=PackedStringArray("_attackButtons", "_targetButtons", "_targetMarker", "_healthText", "_visualSprite")] +script = ExtResource("1_f3j2x") +name = "Vesna" +maxHealth = 100 +attackStrength = 10 +_attackButtons = NodePath("FightButtons") +_targetButtons = NodePath("TargetButtons") +_targetMarker = NodePath("TargetButtons/TargetMarker") +_healthText = NodePath("HealthShow") +_visualSprite = NodePath("Sprite2D") + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = ExtResource("2_2ud32") +offset = Vector2(43, -379) + +[node name="TargetButtons" type="Node2D" parent="."] +visible = false + +[node name="TargetMarker" type="Sprite2D" parent="TargetButtons"] +visible = false +z_index = 200 +position = Vector2(8, -122) +scale = Vector2(4.245, 4.245) +texture = ExtResource("3_80knd") + +[node name="Area2D" type="Area2D" parent="TargetButtons"] +position = Vector2(3, -76) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="TargetButtons/Area2D"] +shape = SubResource("CircleShape2D_0tqnl") + +[node name="FightButtons" type="Node2D" parent="."] +visible = false +position = Vector2(3, -714) + +[node name="CircleBackground" type="Sprite2D" parent="FightButtons"] +z_index = 200 +scale = Vector2(4.245, 4.245) +texture = ExtResource("3_80knd") + +[node name="AttackButton" type="Node2D" parent="FightButtons"] +position = Vector2(0, -536) + +[node name="ButtonBackground" type="Sprite2D" parent="FightButtons/AttackButton"] +z_index = 200 +scale = Vector2(2.48, 2.48) +texture = ExtResource("4_0tqnl") + +[node name="Area2D" type="Area2D" parent="FightButtons/AttackButton"] +collision_layer = 16 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="FightButtons/AttackButton/Area2D"] +shape = SubResource("CircleShape2D_4r2vf") + +[node name="HealthShow" type="Label" parent="."] +z_index = 200 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -197.0 +offset_top = -947.0 +offset_right = 207.0 +offset_bottom = -801.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_font_sizes/font_size = 106 +text = "100/100" +horizontal_alignment = 1 +vertical_alignment = 1 + +[connection signal="input_event" from="FightButtons/AttackButton/Area2D" to="." method="AttackMouseEvent"] diff --git a/project.godot b/project.godot index 3da4b99..615be9c 100644 --- a/project.godot +++ b/project.godot @@ -26,8 +26,9 @@ buses/default_bus_layout="uid://b6dwkmkyb0axk" Dialogic="*res://addons/dialogic/Core/DialogicGameHandler.gd" InventoryManager="*res://scripts/CSharp/Common/Inventory/InventoryManager.cs" -Signal_Debugger="*res://addons/SignalVisualizer/Debugger/SignalDebugger.gd" QuestManager="*res://scripts/CSharp/Common/Quest/QuestManager.cs" +FightManagerAutoload="*res://prefabs/fight/fight_manager_autoload.tscn" +Signal_Debugger="*res://addons/SignalVisualizer/Debugger/SignalDebugger.gd" [dialogic] @@ -213,6 +214,7 @@ locale/translations=PackedStringArray("res://dialog/translations/dialogic_charac 3d_physics/layer_1="General" 2d_physics/layer_2="Background elements" 2d_physics/layer_3="player" +2d_physics/layer_5="fight ui" 3d_physics/layer_5="Player" [rendering] diff --git a/scenes/Babushka_scene_forest_fight_1_2d.tscn b/scenes/Babushka_scene_forest_fight_1_2d.tscn new file mode 100644 index 0000000..7fcd136 --- /dev/null +++ b/scenes/Babushka_scene_forest_fight_1_2d.tscn @@ -0,0 +1,2139 @@ +[gd_scene load_steps=69 format=3 uid="uid://dfyb4dckoltpw"] + +[ext_resource type="Script" uid="uid://cssdu8viimwm6" path="res://scripts/CSharp/Common/SceneTransition.cs" id="1_vl6d5"] +[ext_resource type="PackedScene" uid="uid://bm21nqepnwaik" path="res://scenes/Babushka_scene_indoor_common_room.tscn" id="2_5evxf"] +[ext_resource type="Script" uid="uid://bqomwxclsbhd3" path="res://scripts/CSharp/Common/Camera/CameraController.cs" id="3_jrqoq"] +[ext_resource type="Texture2D" uid="uid://8sr11ex30n0m" path="res://art/mockups/Kenney_Backgrounds/Samples/uncolored_hills.png" id="4_6el7d"] +[ext_resource type="Texture2D" uid="uid://be1nofeo7an0" path="res://art/mockups/Kenney_Backgrounds/PNG/cloud2.png" id="5_253jf"] +[ext_resource type="Texture2D" uid="uid://o6vnf7n7qp8o" path="res://art/mockups/Kenney_Backgrounds/PNG/cloud6.png" id="6_each5"] +[ext_resource type="Texture2D" uid="uid://cc0o84q5u437k" path="res://art/mockups/Kenney_Backgrounds/PNG/cloud7.png" id="7_2dgm0"] +[ext_resource type="Texture2D" uid="uid://cqdb0iqhlk5st" path="res://art/mockups/Kenney_Backgrounds/PNG/cloud8.png" id="8_2f1a4"] +[ext_resource type="Texture2D" uid="uid://cydc6feouwxys" path="res://art/mockups/Kenney_Backgrounds/PNG/Flat/hills1.png" id="9_o05tm"] +[ext_resource type="Texture2D" uid="uid://vt1gtr2trvwt" path="res://art/mockups/Kenney_Backgrounds/PNG/Flat/hills2.png" id="10_v3ice"] +[ext_resource type="Texture2D" uid="uid://b6k4vrgj745k" path="res://art/mockups/Kenney_Backgrounds/PNG/Flat/tree03.png" id="11_ytc4h"] +[ext_resource type="Texture2D" uid="uid://dchn4jd4d7q3w" path="res://art/mockups/Kenney_Backgrounds/PNG/Flat/tree01.png" id="12_xkek4"] +[ext_resource type="Texture2D" uid="uid://8ai3me0j0wi" path="res://art/mockups/Kenney_Backgrounds/PNG/Flat/tree04.png" id="13_5vhxl"] +[ext_resource type="Texture2D" uid="uid://g83vpep7rwwd" path="res://art/mockups/Kenney_Backgrounds/PNG/Flat/tree12.png" id="14_j4xpp"] +[ext_resource type="Texture2D" uid="uid://bleimj6jr1jka" path="res://art/general/rectangle.png" id="15_h7aym"] +[ext_resource type="Texture2D" uid="uid://dxrc50i65wuc4" path="res://art/mockups/Jelena 2d/jelena_mockup_bg01.png" id="16_hycfe"] +[ext_resource type="Texture2D" uid="uid://dv2jepy2el544" path="res://art/mockups/Kenney_Backgrounds/PNG/Flat/tree11.png" id="17_pm4c4"] +[ext_resource type="Shader" uid="uid://do5og8uubh2m5" path="res://shader/HSV.gdshader" id="18_curof"] +[ext_resource type="Texture2D" uid="uid://d0e8a7qsfkhy3" path="res://art/mockups/Jelena 2d/jelena_mockup_bg_02.png" id="19_seocn"] +[ext_resource type="Texture2D" uid="uid://bqoyk3fsrmu1x" path="res://art/nature/baum märz 2025/back back trees.png" id="20_iqoej"] +[ext_resource type="Texture2D" uid="uid://451bkvxcxab7" path="res://art/nature/baum märz 2025/gräser und büsche.png" id="21_8en1r"] +[ext_resource type="Texture2D" uid="uid://dldk8n51ag8fh" path="res://art/nature/baum märz 2025/backtreebois team brandon.png" id="22_adc3m"] +[ext_resource type="Texture2D" uid="uid://bmjjfd5ngptxe" path="res://art/nature/baum märz 2025/backtreebois team kennedy.png" id="23_uhyft"] +[ext_resource type="Texture2D" uid="uid://bcw6oeovkmiup" path="res://art/nature/baum märz 2025/sonnenblumeseamless.png" id="24_3fmyy"] +[ext_resource type="Shader" uid="uid://xnky830dtfsn" path="res://shader/repeat_texture.gdshader" id="25_sgom5"] +[ext_resource type="Script" uid="uid://di0xxwfw43m0i" path="res://scripts/CSharp/Common/Fight/FightStarter.cs" id="26_gg38r"] +[ext_resource type="PackedScene" uid="uid://hk8ahyp6dgl6" path="res://prefabs/fight/fight_base_scene.tscn" id="27_55b52"] +[ext_resource type="PackedScene" uid="uid://bp64p6y72j71w" path="res://prefabs/fight/fighters/enemy_blob_fighter.tscn" id="27_hfhye"] +[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Player2D.tscn" id="29_3jjxs"] +[ext_resource type="Resource" uid="uid://dlcmqfjvgphqu" path="res://resources/items/rake.tres" id="30_l10vl"] +[ext_resource type="Resource" uid="uid://cndd64batns31" path="res://resources/items/wateringcan.tres" id="31_c2gvt"] +[ext_resource type="Texture2D" uid="uid://dyueumlr5ltvr" path="res://art/nature/baum märz 2025/megaeichel megaast.png" id="37_gg38r"] +[ext_resource type="Texture2D" uid="uid://cuqkp4qvcg8jc" path="res://art/nature/baum märz 2025/trauerweiden.png" id="39_hfhye"] +[ext_resource type="Shader" uid="uid://braevmqauoek7" path="res://shader/swaying_plant.gdshader" id="39_mp3tl"] +[ext_resource type="Texture2D" uid="uid://bely5cfbf2x52" path="res://art/nature/baum märz 2025/umgeknackst.png" id="40_26tkn"] +[ext_resource type="Texture2D" uid="uid://dgavbfci8x178" path="res://art/nature/grass/grass-1.png" id="41_2hsma"] +[ext_resource type="Texture2D" uid="uid://h2b5aufaaw7w" path="res://art/nature/grass/grass-2.png" id="42_r01kr"] +[ext_resource type="Texture2D" uid="uid://b644ofy7fml5w" path="res://art/nature/grass/grass-5.png" id="43_8vxd2"] +[ext_resource type="Texture2D" uid="uid://badnnid7dgnpk" path="res://art/nature/grass/grass-4.png" id="44_dh8gs"] +[ext_resource type="Texture2D" uid="uid://ct7ea8ikor5rf" path="res://art/nature/grass/grass-3.png" id="45_30axv"] +[ext_resource type="Texture2D" uid="uid://d3dwl6ph0pu1d" path="res://art/nature/grass/grass-6.png" id="46_kg80k"] +[ext_resource type="PackedScene" uid="uid://cgjc4wurbgimy" path="res://prefabs/UI/Inventory/Inventory.tscn" id="50_r0n5l"] +[ext_resource type="AudioStream" uid="uid://dku1rq5cocisg" path="res://audio/Music/Farming_90BPM_69Bars.wav" id="51_x7raj"] +[ext_resource type="Script" uid="uid://clxb3n668oud3" path="res://scripts/CSharp/Common/Audio/AudioDebugger.cs" id="52_x1mmf"] +[ext_resource type="AudioStream" uid="uid://cfqg50am0swb7" path="res://audio/Music/Farming_90BPM_69Bars_Loop.wav" id="53_krhcq"] +[ext_resource type="AudioStream" uid="uid://vcftvrpi6c7k" path="res://audio/sfx/Farming/SFX_Harke_03_Solo.wav" id="54_4l7ky"] +[ext_resource type="AudioStream" uid="uid://bxh5m04vdo0sr" path="res://audio/sfx/Farming/SFX_Harke_04_Solo.wav" id="55_dk5xw"] +[ext_resource type="Script" uid="uid://cfnrd5k1k0gxw" path="res://scripts/CSharp/Common/AudioPlayer.cs" id="56_bjj0f"] +[ext_resource type="AudioStream" uid="uid://dapsknn486aee" path="res://audio/sfx/Farming/SFX_WateringPlants_01.wav" id="57_ehh6a"] +[ext_resource type="AudioStream" uid="uid://dnyne8wov50so" path="res://audio/sfx/Farming/SFX_WateringPlants_02.wav" id="58_mfld1"] +[ext_resource type="AudioStream" uid="uid://fsiypqhql67w" path="res://audio/sfx/Farming/SFX_GettingWater_01.wav" id="59_soiyx"] +[ext_resource type="AudioStream" uid="uid://foyw26hq1qp5" path="res://audio/sfx/Farming/SFX_GettingWater_02.wav" id="60_xtahx"] +[ext_resource type="AudioStream" uid="uid://c43a6x43jkikl" path="res://audio/sfx/Farming/SFX_GettingWater_Well_01_Reverb.wav" id="61_qkd2b"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_wtdui"] +shader = ExtResource("18_curof") +shader_parameter/hue_shift = 0.0 +shader_parameter/saturation_mult = 0.603 +shader_parameter/value_mult = 1.0 +shader_parameter/brightness_add = 0.0 +shader_parameter/contrast_mult = 1.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_8ey8m"] +shader = ExtResource("18_curof") +shader_parameter/hue_shift = -0.076 +shader_parameter/saturation_mult = 0.939 +shader_parameter/value_mult = 0.401 +shader_parameter/brightness_add = 0.0 +shader_parameter/contrast_mult = 1.0 + +[sub_resource type="Gradient" id="Gradient_kt1wx"] +colors = PackedColorArray(0.348791, 0.400092, 0.435264, 1, 0.219333, 0.251087, 0.329259, 1) + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_ubx8m"] + +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_d53cn"] +seamless = true +color_ramp = SubResource("Gradient_kt1wx") +noise = SubResource("FastNoiseLite_ubx8m") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ubx8m"] +shader = ExtResource("25_sgom5") +shader_parameter/tiling_scale = Vector2(7.79, 5.2) +shader_parameter/noise = SubResource("NoiseTexture2D_d53cn") + +[sub_resource type="Gradient" id="Gradient_eryax"] +offsets = PackedFloat32Array(0, 0.743902, 1) +colors = PackedColorArray(0.22, 0.1078, 0.16764, 1, 0.443137, 0.4, 0.360784, 1, 0.6, 0.4853, 0.414, 1) + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_wgikv"] +frequency = 0.0296 +fractal_octaves = 7 +fractal_gain = 0.795 +domain_warp_enabled = true + +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_e5alv"] +seamless = true +color_ramp = SubResource("Gradient_eryax") +noise = SubResource("FastNoiseLite_wgikv") + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_hfhye"] +size = Vector2(1054.5, 2334.5) + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_bcdgk"] +shader = ExtResource("39_mp3tl") +shader_parameter/speed = 1.0 +shader_parameter/minStrength = 0.05 +shader_parameter/maxStrength = 0.187 +shader_parameter/strengthScale = 100.0 +shader_parameter/interval = 3.5 +shader_parameter/detail = 2.095 +shader_parameter/distortion = 1.0 +shader_parameter/heightOffset = 0.51 +shader_parameter/offset = 1.0 + +[sub_resource type="AudioStreamPlaylist" id="AudioStreamPlaylist_ceriq"] +loop = false +stream_count = 1 +stream_0 = ExtResource("51_x7raj") + +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_ceriq"] +streams_count = 2 +stream_0/stream = ExtResource("54_4l7ky") +stream_1/stream = ExtResource("55_dk5xw") + +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_p4qqi"] +streams_count = 2 +stream_0/stream = ExtResource("57_ehh6a") +stream_1/stream = ExtResource("58_mfld1") + +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_618my"] +streams_count = 3 +stream_0/stream = ExtResource("59_soiyx") +stream_1/stream = ExtResource("60_xtahx") +stream_2/stream = ExtResource("61_qkd2b") + +[node name="BabushkaSceneFarmOutside2d" type="Node2D"] +script = ExtResource("1_vl6d5") +_sceneToLoad = ExtResource("2_5evxf") + +[node name="Camera2D" type="Camera2D" parent="." node_paths=PackedStringArray("_followNode")] +position = Vector2(3180, 1961) +scale = Vector2(1, 0.993819) +offset = Vector2(0, -500) +zoom = Vector2(0.25, 0.25) +limit_left = -6000 +limit_top = -800 +limit_right = 16000 +limit_bottom = 4700 +editor_draw_limits = true +script = ExtResource("3_jrqoq") +_followNode = NodePath("../YSorted/Vesna/CharacterBody2D") + +[node name="ParallaxBackground" type="ParallaxBackground" parent="."] + +[node name="background color layer" type="ParallaxLayer" parent="ParallaxBackground"] +position = Vector2(0, -552) +motion_scale = Vector2(0.1, 0.1) +motion_mirroring = Vector2(2048, 0) + +[node name="Sprite2D2" type="Sprite2D" parent="ParallaxBackground/background color layer"] +modulate = Color(0.5607, 0.89, 0.675955, 1) +z_index = -500 +position = Vector2(4096, 0) +scale = Vector2(2, 2) +texture = ExtResource("4_6el7d") +centered = false +offset = Vector2(0, -100) + +[node name="Sprite2D3" type="Sprite2D" parent="ParallaxBackground/background color layer"] +modulate = Color(0.5607, 0.89, 0.675955, 1) +z_index = -500 +scale = Vector2(2, 2) +texture = ExtResource("4_6el7d") +centered = false +offset = Vector2(0, -100) + +[node name="Sprite2D4" type="Sprite2D" parent="ParallaxBackground/background color layer"] +modulate = Color(0.5607, 0.89, 0.675955, 1) +z_index = -500 +position = Vector2(8192, 0) +scale = Vector2(2, 2) +texture = ExtResource("4_6el7d") +centered = false +offset = Vector2(0, -100) + +[node name="clouds layer" type="ParallaxLayer" parent="ParallaxBackground"] +position = Vector2(-7, -138) +motion_scale = Vector2(0.2, 0.2) +motion_mirroring = Vector2(7000, 0) + +[node name="cloud" type="Sprite2D" parent="ParallaxBackground/clouds layer"] +z_index = -400 +position = Vector2(792, 400) +scale = Vector2(2, 2) +texture = ExtResource("5_253jf") +centered = false +offset = Vector2(0, -100) + +[node name="cloud2" type="Sprite2D" parent="ParallaxBackground/clouds layer"] +z_index = -400 +position = Vector2(2656, 272) +scale = Vector2(2, 2) +texture = ExtResource("6_each5") +centered = false +offset = Vector2(0, -100) + +[node name="cloud3" type="Sprite2D" parent="ParallaxBackground/clouds layer"] +z_index = -400 +position = Vector2(3240, 488) +scale = Vector2(2, 2) +texture = ExtResource("7_2dgm0") +centered = false +offset = Vector2(0, -100) + +[node name="cloud4" type="Sprite2D" parent="ParallaxBackground/clouds layer"] +z_index = -400 +position = Vector2(5461, 185) +scale = Vector2(2, 2) +texture = ExtResource("8_2f1a4") +centered = false +offset = Vector2(0, -100) + +[node name="background layer 3" type="ParallaxLayer" parent="ParallaxBackground"] +position = Vector2(18, -713) +motion_scale = Vector2(0.25, 0.25) +motion_mirroring = Vector2(5424, 0) + +[node name="Kenney assets" type="Node2D" parent="ParallaxBackground/background layer 3"] +position = Vector2(0, -39) +scale = Vector2(1.2, 1.2) + +[node name="hills" type="Sprite2D" parent="ParallaxBackground/background layer 3/Kenney assets"] +modulate = Color(0.709819, 0.713726, 0.717632, 1) +z_index = -300 +position = Vector2(0, 1420) +scale = Vector2(3, 3) +texture = ExtResource("9_o05tm") +centered = false +offset = Vector2(0, -100) + +[node name="hills 1" type="Sprite2D" parent="ParallaxBackground/background layer 3/Kenney assets"] +modulate = Color(0.709819, 0.713726, 0.717632, 1) +z_index = -300 +position = Vector2(2999, 1420) +scale = Vector2(3, 3) +texture = ExtResource("10_v3ice") +centered = false +offset = Vector2(0, -100) + +[node name="tree" type="Sprite2D" parent="ParallaxBackground/background layer 3/Kenney assets"] +modulate = Color(0.651194, 0.592081, 0.635554, 1) +z_index = -300 +position = Vector2(376, 1136) +scale = Vector2(2.33333, 1.64286) +texture = ExtResource("11_ytc4h") + +[node name="tree2" type="Sprite2D" parent="ParallaxBackground/background layer 3/Kenney assets"] +modulate = Color(0.651194, 0.592081, 0.635554, 1) +z_index = -300 +position = Vector2(312, 1160) +scale = Vector2(2.33333, 1.64286) +texture = ExtResource("11_ytc4h") + +[node name="tree3" type="Sprite2D" parent="ParallaxBackground/background layer 3/Kenney assets"] +modulate = Color(0.651194, 0.592081, 0.635554, 1) +z_index = -300 +position = Vector2(216, 1072) +scale = Vector2(1.46078, 0.957947) +texture = ExtResource("12_xkek4") + +[node name="tree4" type="Sprite2D" parent="ParallaxBackground/background layer 3/Kenney assets"] +modulate = Color(0.651194, 0.592081, 0.635554, 1) +z_index = -300 +position = Vector2(104, 1128) +scale = Vector2(2.33333, 1.64286) +texture = ExtResource("11_ytc4h") + +[node name="tree5" type="Sprite2D" parent="ParallaxBackground/background layer 3/Kenney assets"] +modulate = Color(0.651194, 0.592081, 0.635554, 1) +z_index = -300 +position = Vector2(1640, 1088) +scale = Vector2(2.33333, 1.64286) +texture = ExtResource("11_ytc4h") + +[node name="tree6" type="Sprite2D" parent="ParallaxBackground/background layer 3/Kenney assets"] +modulate = Color(0.651194, 0.592081, 0.635554, 1) +z_index = -300 +position = Vector2(2456, 1256) +scale = Vector2(2.33333, 1.64286) +texture = ExtResource("11_ytc4h") + +[node name="tree7" type="Sprite2D" parent="ParallaxBackground/background layer 3/Kenney assets"] +modulate = Color(0.651194, 0.592081, 0.635554, 1) +z_index = -300 +position = Vector2(2392, 1288) +scale = Vector2(2.33333, 1.64286) +texture = ExtResource("11_ytc4h") + +[node name="tree8" type="Sprite2D" parent="ParallaxBackground/background layer 3/Kenney assets"] +modulate = Color(0.651194, 0.592081, 0.635554, 1) +z_index = -300 +position = Vector2(2568, 1200) +scale = Vector2(1.33805, 0.991627) +texture = ExtResource("13_5vhxl") + +[node name="tree9" type="Sprite2D" parent="ParallaxBackground/background layer 3/Kenney assets"] +modulate = Color(0.651194, 0.592081, 0.635554, 1) +z_index = -300 +position = Vector2(3376, 1224) +scale = Vector2(2.33333, 1.64286) +texture = ExtResource("11_ytc4h") + +[node name="tree10" type="Sprite2D" parent="ParallaxBackground/background layer 3/Kenney assets"] +modulate = Color(0.651194, 0.592081, 0.635554, 1) +z_index = -300 +position = Vector2(3488, 1248) +scale = Vector2(0.939717, 0.72619) +texture = ExtResource("14_j4xpp") + +[node name="tree11" type="Sprite2D" parent="ParallaxBackground/background layer 3/Kenney assets"] +modulate = Color(0.651194, 0.592081, 0.635554, 1) +z_index = -300 +position = Vector2(4912, 1078.25) +scale = Vector2(2.33333, 1.64286) +texture = ExtResource("11_ytc4h") + +[node name="Sprite2D" type="Sprite2D" parent="ParallaxBackground/background layer 3/Kenney assets"] +modulate = Color(0.584268, 0.659007, 0.690272, 1) +z_index = -300 +position = Vector2(3069.17, 2218.33) +scale = Vector2(12, 3) +texture = ExtResource("15_h7aym") + +[node name="JelenaMockupBg01" type="Sprite2D" parent="ParallaxBackground/background layer 3"] +visible = false +position = Vector2(3552, 1296) +scale = Vector2(3, 3.062) +texture = ExtResource("16_hycfe") + +[node name="background layer 4" type="ParallaxLayer" parent="ParallaxBackground"] +position = Vector2(0, -82) +motion_scale = Vector2(0.5, 0.5) +motion_mirroring = Vector2(10480, 0) + +[node name="Kenney Assets" type="Node2D" parent="ParallaxBackground/background layer 4"] +visible = false + +[node name="hills" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.525643, 0.556909, 0.560815, 1) +position = Vector2(0, 1420) +scale = Vector2(4, 4) +texture = ExtResource("9_o05tm") +centered = false +offset = Vector2(-200, -80) + +[node name="hills 1" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.525643, 0.556909, 0.560815, 1) +position = Vector2(3999, 1420) +scale = Vector2(4, 4) +texture = ExtResource("10_v3ice") +centered = false +offset = Vector2(-200, -80) + +[node name="tree" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(128, 784) +scale = Vector2(5.11066, 3.99823) +texture = ExtResource("17_pm4c4") + +[node name="tree2" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(976, 952) +scale = Vector2(3.7465, 2.76803) +texture = ExtResource("17_pm4c4") + +[node name="tree9" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(1160, 976) +scale = Vector2(3.7465, 2.76803) +texture = ExtResource("17_pm4c4") +flip_h = true + +[node name="tree3" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(1368, 800) +scale = Vector2(3.7465, 2.76803) +texture = ExtResource("17_pm4c4") + +[node name="tree4" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(2328, 880) +scale = Vector2(3.7465, 2.76803) +texture = ExtResource("17_pm4c4") + +[node name="tree5" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(3112, 944) +scale = Vector2(3.7465, 2.76803) +texture = ExtResource("17_pm4c4") + +[node name="tree6" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(4248, 960) +scale = Vector2(3.7465, 2.76803) +texture = ExtResource("17_pm4c4") + +[node name="tree10" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(5376, 848) +scale = Vector2(3.7465, 2.76803) +texture = ExtResource("17_pm4c4") +flip_h = true + +[node name="tree11" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(5624, 976) +scale = Vector2(2.93619, 1.96107) +texture = ExtResource("17_pm4c4") + +[node name="tree12" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(5856.97, 753.531) +scale = Vector2(3.3702, 3.05266) +texture = ExtResource("17_pm4c4") + +[node name="tree13" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(6888, 912) +scale = Vector2(3.3702, 3.05266) +texture = ExtResource("17_pm4c4") +flip_h = true + +[node name="tree14" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(7088.48, 752.766) +scale = Vector2(3.69909, 3.46732) +texture = ExtResource("17_pm4c4") + +[node name="tree15" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(7224, 888) +scale = Vector2(3.1922, 3.25497) +texture = ExtResource("17_pm4c4") + +[node name="tree7" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(4392, 1152) +scale = Vector2(2.55123, 1.88928) +texture = ExtResource("17_pm4c4") +flip_h = true + +[node name="tree8" type="Sprite2D" parent="ParallaxBackground/background layer 4/Kenney Assets"] +modulate = Color(0.431357, 0.282353, 0.415717, 1) +position = Vector2(2944, 992) +scale = Vector2(3.008, 2.76803) +texture = ExtResource("17_pm4c4") + +[node name="JelenaMockupBg02" type="Sprite2D" parent="ParallaxBackground/background layer 4"] +z_index = -200 +material = SubResource("ShaderMaterial_wtdui") +position = Vector2(2668, 726) +scale = Vector2(2.75, 2.75) +texture = ExtResource("19_seocn") + +[node name="JelenaMockupBg03" type="Sprite2D" parent="ParallaxBackground/background layer 4"] +z_index = -200 +material = SubResource("ShaderMaterial_wtdui") +position = Vector2(7923, 727) +scale = Vector2(2.75, 2.75) +texture = ExtResource("19_seocn") + +[node name="back back trees layer" type="ParallaxLayer" parent="ParallaxBackground"] +position = Vector2(0, -256) +motion_scale = Vector2(0.7, 0.7) +motion_mirroring = Vector2(9965, 0) + +[node name="hills" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +modulate = Color(0.345703, 0.360648, 0.242876, 1) +position = Vector2(993, 1576) +scale = Vector2(5, 5) +texture = ExtResource("9_o05tm") +centered = false +offset = Vector2(-200, -80) + +[node name="hills 1" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +modulate = Color(0.345703, 0.360648, 0.242876, 1) +position = Vector2(5961, 1582) +scale = Vector2(5, 5) +texture = ExtResource("10_v3ice") +centered = false +offset = Vector2(-200, -80) + +[node name="tree" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(3017.3, 536.15) +scale = Vector2(1.7, 1.7) +texture = ExtResource("20_iqoej") +region_enabled = true +region_rect = Rect2(770, 3, 304, 979) + +[node name="tree2" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(1807.5, 1408) +scale = Vector2(1.7, 1.7) +texture = ExtResource("20_iqoej") +region_enabled = true +region_rect = Rect2(399, 420, 228, 493) + +[node name="tree4" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(3321.3, 600.15) +scale = Vector2(1.7, 1.7) +texture = ExtResource("20_iqoej") +region_enabled = true +region_rect = Rect2(1770, -4, 289, 930) + +[node name="tree11" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(460, 622) +scale = Vector2(1.7, 1.7) +texture = ExtResource("20_iqoej") +region_enabled = true +region_rect = Rect2(1770, -4, 289, 930) + +[node name="tree5" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(5081.3, 696.15) +scale = Vector2(1.7, 1.7) +texture = ExtResource("20_iqoej") +region_enabled = true +region_rect = Rect2(2283, 2, 186, 840) + +[node name="tree10" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(8470, 694) +scale = Vector2(1.7, 1.7) +texture = ExtResource("20_iqoej") +region_enabled = true +region_rect = Rect2(2283, 2, 186, 840) + +[node name="tree3" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(6596.8, 1566.35) +scale = Vector2(1.7, 1.7) +texture = ExtResource("20_iqoej") +region_enabled = true +region_rect = Rect2(399, 420, 228, 493) + +[node name="tree8" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(8110.6, 758.5) +scale = Vector2(1.7, 1.7) +texture = ExtResource("20_iqoej") +region_enabled = true +region_rect = Rect2(1770, -4, 289, 930) + +[node name="tree9" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(10240, 850) +scale = Vector2(1.7, 1.7) +texture = ExtResource("20_iqoej") +region_enabled = true +region_rect = Rect2(2283, 2, 186, 840) + +[node name="tree6" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(5641.3, 1168.15) +scale = Vector2(1.7, 1.7) +texture = ExtResource("20_iqoej") +region_enabled = true +region_rect = Rect2(2609, 434, 304, 467) + +[node name="tree7" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(5161.3, 608.15) +scale = Vector2(1.7, 1.7) +texture = ExtResource("20_iqoej") +region_enabled = true +region_rect = Rect2(3111, -4, 167, 949) + +[node name="bush" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(3239.5, 1288) +texture = ExtResource("21_8en1r") +region_enabled = true +region_rect = Rect2(149, 15, 464, 478) + +[node name="bush2" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(1791.5, 1448) +texture = ExtResource("21_8en1r") +flip_h = true +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush3" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(1255.5, 1392) +texture = ExtResource("21_8en1r") +flip_h = true +region_enabled = true +region_rect = Rect2(0, 604, 248, 228) + +[node name="bush4" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(5471.5, 1432) +texture = ExtResource("21_8en1r") +flip_h = true +region_enabled = true +region_rect = Rect2(1837, 651, 139, 180) + +[node name="bush5" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(5007.5, 1312) +texture = ExtResource("21_8en1r") +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush6" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] +material = SubResource("ShaderMaterial_8ey8m") +position = Vector2(3583.5, 1248) +scale = Vector2(0.575, 0.575) +texture = ExtResource("21_8en1r") +flip_h = true +region_enabled = true +region_rect = Rect2(358, 523, 345, 289) + +[node name="back tree bois layer 5" type="ParallaxLayer" parent="ParallaxBackground"] +position = Vector2(28, -28) +motion_mirroring = Vector2(10000, 0) + +[node name="tree" type="Sprite2D" parent="ParallaxBackground/back tree bois layer 5"] +modulate = Color(0.674561, 0.721424, 0.744786, 1) +z_index = 1 +position = Vector2(1483.7, 800) +scale = Vector2(1.6, 1.6) +texture = ExtResource("22_adc3m") +region_enabled = true +region_rect = Rect2(-2, -5, 911, 1386) + +[node name="tree2" type="Sprite2D" parent="ParallaxBackground/back tree bois layer 5"] +modulate = Color(0.674561, 0.721424, 0.744786, 1) +z_index = 1 +position = Vector2(771.7, 664) +scale = Vector2(1.6, 1.6) +texture = ExtResource("23_uhyft") +region_enabled = true +region_rect = Rect2(0, 4, 604, 1363) + +[node name="tree3" type="Sprite2D" parent="ParallaxBackground/back tree bois layer 5"] +modulate = Color(0.674561, 0.721424, 0.744786, 1) +z_index = 1 +position = Vector2(1763.7, 728) +scale = Vector2(1.6, 1.6) +texture = ExtResource("23_uhyft") +region_enabled = true +region_rect = Rect2(626, -4, 711, 1519) + +[node name="tree12" type="Sprite2D" parent="ParallaxBackground/back tree bois layer 5"] +modulate = Color(0.674561, 0.721424, 0.744786, 1) +z_index = 1 +position = Vector2(9464, 731) +scale = Vector2(1.6, 1.6) +texture = ExtResource("23_uhyft") +region_enabled = true +region_rect = Rect2(626, -4, 711, 1519) + +[node name="tree4" type="Sprite2D" parent="ParallaxBackground/back tree bois layer 5"] +modulate = Color(0.674561, 0.721424, 0.744786, 1) +z_index = 1 +position = Vector2(2939.7, 752) +scale = Vector2(1.8, 1.8) +texture = ExtResource("23_uhyft") +region_enabled = true +region_rect = Rect2(1504, -2, 402, 1124) + +[node name="tree5" type="Sprite2D" parent="ParallaxBackground/back tree bois layer 5"] +modulate = Color(0.674561, 0.721424, 0.744786, 1) +z_index = 1 +position = Vector2(3683.7, 800) +scale = Vector2(1.8, 1.8) +texture = ExtResource("22_adc3m") +region_enabled = true +region_rect = Rect2(927, -1, 736, 1294) + +[node name="tree6" type="Sprite2D" parent="ParallaxBackground/back tree bois layer 5"] +modulate = Color(0.674561, 0.721424, 0.744786, 1) +z_index = 1 +position = Vector2(115.7, 608) +scale = Vector2(1.8, 1.8) +texture = ExtResource("22_adc3m") +region_enabled = true +region_rect = Rect2(1834, -5, 733, 1360) + +[node name="tree7" type="Sprite2D" parent="ParallaxBackground/back tree bois layer 5"] +modulate = Color(0.674561, 0.721424, 0.744786, 1) +z_index = 1 +position = Vector2(6259.7, 728) +scale = Vector2(1.6, 1.6) +texture = ExtResource("23_uhyft") +region_enabled = true +region_rect = Rect2(626, -4, 711, 1519) + +[node name="tree8" type="Sprite2D" parent="ParallaxBackground/back tree bois layer 5"] +modulate = Color(0.674561, 0.721424, 0.744786, 1) +z_index = 1 +position = Vector2(7435.7, 752) +scale = Vector2(1.8, 1.8) +texture = ExtResource("23_uhyft") +region_enabled = true +region_rect = Rect2(1504, -2, 402, 1124) + +[node name="tree11" type="Sprite2D" parent="ParallaxBackground/back tree bois layer 5"] +modulate = Color(0.674561, 0.721424, 0.744786, 1) +z_index = 1 +position = Vector2(9092, 636) +scale = Vector2(1.8, 1.8) +texture = ExtResource("23_uhyft") +region_enabled = true +region_rect = Rect2(1504, -2, 402, 1124) + +[node name="tree9" type="Sprite2D" parent="ParallaxBackground/back tree bois layer 5"] +modulate = Color(0.674561, 0.721424, 0.744786, 1) +z_index = 1 +position = Vector2(8179.7, 800) +scale = Vector2(1.8, 1.8) +texture = ExtResource("22_adc3m") +region_enabled = true +region_rect = Rect2(927, -1, 736, 1294) + +[node name="tree10" type="Sprite2D" parent="ParallaxBackground/back tree bois layer 5"] +modulate = Color(0.674561, 0.721424, 0.744786, 1) +z_index = 1 +position = Vector2(4611.7, 608) +scale = Vector2(1.8, 1.8) +texture = ExtResource("22_adc3m") +region_enabled = true +region_rect = Rect2(1834, -5, 733, 1360) + +[node name="sunflower field" type="ParallaxLayer" parent="ParallaxBackground"] +visible = false +motion_mirroring = Vector2(3779, 0) + +[node name="Sonnenblumeseamless" type="Sprite2D" parent="ParallaxBackground/sunflower field"] +z_index = -50 +position = Vector2(1892, 1863) +texture = ExtResource("24_3fmyy") + +[node name="Sonnenblumeseamless2" type="Sprite2D" parent="ParallaxBackground/sunflower field"] +z_index = -50 +position = Vector2(9411, 1863) +texture = ExtResource("24_3fmyy") + +[node name="ground layer" type="ParallaxLayer" parent="ParallaxBackground"] +position = Vector2(80, 208) +motion_mirroring = Vector2(8192, 0) + +[node name="floortile00" type="Sprite2D" parent="ParallaxBackground/ground layer"] +z_index = -10 +texture_repeat = 2 +material = SubResource("ShaderMaterial_ubx8m") +position = Vector2(3888, 2688) +scale = Vector2(16, 5.48) +texture = SubResource("NoiseTexture2D_e5alv") + +[node name="Fence" type="Node2D" parent="."] + +[node name="Fight" type="Node2D" parent="."] + +[node name="FightStarter" type="Node2D" parent="Fight" node_paths=PackedStringArray("_fightInstance")] +script = ExtResource("26_gg38r") +enemies = Array[PackedScene]([null, ExtResource("27_hfhye"), ExtResource("27_hfhye")]) +_fightInstance = NodePath("../FightBaseScene") + +[node name="TriggerArea" type="Area2D" parent="Fight/FightStarter"] +position = Vector2(8681, 2487) +collision_mask = 4 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Fight/FightStarter/TriggerArea"] +position = Vector2(2425.75, -4.75) +shape = SubResource("RectangleShape2D_hfhye") + +[node name="FightBaseScene" parent="Fight" instance=ExtResource("27_55b52")] +position = Vector2(11249, 2494) + +[node name="FriendlyPositions" parent="Fight/FightBaseScene" index="0"] +position = Vector2(-1048, 3) + +[node name="FriendPos1" parent="Fight/FightBaseScene/FriendlyPositions" index="0"] +position = Vector2(0, -464) + +[node name="FriendPos2" parent="Fight/FightBaseScene/FriendlyPositions" index="1"] +position = Vector2(69, 9) + +[node name="FriendPos3" parent="Fight/FightBaseScene/FriendlyPositions" index="2"] +position = Vector2(0, 525) + +[node name="EnemyPositions" parent="Fight/FightBaseScene" index="1"] +position = Vector2(1162, -12) + +[node name="EnemyPos1" parent="Fight/FightBaseScene/EnemyPositions" index="0"] +position = Vector2(-18, -482) + +[node name="EnemyPos2" parent="Fight/FightBaseScene/EnemyPositions" index="1"] +position = Vector2(-133, 19) + +[node name="EnemyPos3" parent="Fight/FightBaseScene/EnemyPositions" index="2"] +position = Vector2(32, 562) + +[node name="YSorted" type="Node2D" parent="."] +z_index = 1 +y_sort_enabled = true + +[node name="Vesna" parent="YSorted" instance=ExtResource("29_3jjxs")] +z_index = 1 +position = Vector2(3180, 2125) +_hoe = ExtResource("30_l10vl") +_wateringCan = ExtResource("31_c2gvt") + +[node name="FarmingControls" parent="YSorted/Vesna" index="1" node_paths=PackedStringArray("_camera")] +_camera = NodePath("../../../Camera2D") + +[node name="ForestVisuals" type="Node2D" parent="YSorted"] +position = Vector2(-60, -250) + +[node name="Static" type="Node2D" parent="YSorted/ForestVisuals"] +position = Vector2(-8213, 84) + +[node name="greenery" type="Node2D" parent="YSorted/ForestVisuals/Static"] + +[node name="left side" type="Node2D" parent="YSorted/ForestVisuals/Static/greenery"] + +[node name="bush" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +modulate = Color(1, 0.86, 0.86, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(12572, 2621.14) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -237) +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush5" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(12569, 3624.14) +scale = Vector2(-2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -237) +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush6" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +modulate = Color(0.8428, 0.8771, 0.98, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(10871, 4010.14) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -237) +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush7" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +modulate = Color(1, 0.86, 0.86, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(11020, 2268.14) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -237) +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush8" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(11265, 2268.14) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -237) +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush9" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +modulate = Color(0.8428, 0.8771, 0.98, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(11376, 2268.14) +scale = Vector2(-1.86739, 2.34145) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -237) +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush2" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(13069, 2044) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -196) +region_enabled = true +region_rect = Rect2(1699, 76, 280, 230) + +[node name="bush4" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +modulate = Color(0.8428, 0.8771, 0.98, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(16878, 2099) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(0, 604, 248, 228) + +[node name="bush10" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(7757, 2032) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1837, 651, 139, 180) + +[node name="bush11" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(8891, 2100) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1464, 419, 144, 115) + +[node name="bush12" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +modulate = Color(1, 0.86, 0.86, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(9170, 2052) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1699, 76, 280, 230) + +[node name="bush13" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +modulate = Color(0.8428, 0.8771, 0.98, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(8145, 4141) +scale = Vector2(-2.82886, 2.51195) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1699, 76, 280, 230) + +[node name="bush14" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(8925, 4194) +scale = Vector2(-5.54387, 3.80466) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush15" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +modulate = Color(1, 0.86, 0.86, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(7757, 4194) +scale = Vector2(3.21806, 3.18583) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush16" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +modulate = Color(0.8428, 0.8771, 0.98, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(14148, 1749) +scale = Vector2(-2.40318, 3.59175) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush17" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(9556, 2071) +scale = Vector2(-2.40318, 3.59175) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush18" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(9887, 2216) +scale = Vector2(-1.87764, 2.59175) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush19" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +modulate = Color(0.8428, 0.8771, 0.98, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(10074, 2216) +scale = Vector2(1.53273, 1.82378) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush20" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(10217, 2026) +scale = Vector2(-1.93815, 1.5875) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1837, 651, 139, 180) + +[node name="bush21" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(10721, 2026) +scale = Vector2(-1.93815, 1.5875) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1837, 651, 139, 180) + +[node name="bush22" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +modulate = Color(0.8428, 0.8771, 0.98, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(13292, 2026) +scale = Vector2(-1.93815, 1.5875) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1837, 651, 139, 180) + +[node name="bush25" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(12369, 2026) +scale = Vector2(-1.93815, 1.5875) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush26" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +modulate = Color(1, 0.86, 0.86, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(13458, 2026) +scale = Vector2(1.41694, 1.75208) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush27" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(13687, 1938) +scale = Vector2(1.40272, 1.38546) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(0, 604, 248, 228) + +[node name="bush23" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +z_index = 1 +y_sort_enabled = true +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(15022, 3301) +scale = Vector2(-1.93815, 1.5875) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1837, 651, 139, 180) + +[node name="bush24" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +modulate = Color(0.8428, 0.8771, 0.98, 1) +z_index = 2 +y_sort_enabled = true +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(15973, 3380) +scale = Vector2(-1.93815, 1.5875) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1464, 419, 144, 115) + +[node name="bush3" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] +modulate = Color(1, 0.86, 0.86, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(7053, 2891) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -50) +region_enabled = true +region_rect = Rect2(1464, 419, 144, 115) + +[node name="right side" type="Node2D" parent="YSorted/ForestVisuals/Static/greenery"] +position = Vector2(13188, 30) + +[node name="bush" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(4360, 2049) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -237) +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush5" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(3008, 3136) +scale = Vector2(-2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -237) +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush6" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(5757, 4296) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -237) +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush7" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(5051, 2217) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -237) +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush8" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +modulate = Color(0.8428, 0.8771, 0.98, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(4008, 2250) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -237) +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush9" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(5325, 2263) +scale = Vector2(-1.86739, 2.34145) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -237) +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush2" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +modulate = Color(0.8428, 0.8771, 0.98, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(1909, 3074) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -196) +region_enabled = true +region_rect = Rect2(1699, 76, 280, 230) + +[node name="bush4" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(7361, 2026) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(0, 604, 248, 228) + +[node name="bush10" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(7757, 2032) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1837, 651, 139, 180) + +[node name="bush28" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +z_index = 100 +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(6412, 4038) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(0, 604, 248, 228) + +[node name="bush29" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +z_index = 100 +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(7690, 4131) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1837, 651, 139, 180) + +[node name="bush11" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(8981, 2112) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1464, 419, 144, 115) + +[node name="bush12" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(9208, 2026) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1699, 76, 280, 230) + +[node name="bush13" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +z_index = 100 +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(8235, 4262) +scale = Vector2(-2.82886, 2.51195) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1699, 76, 280, 230) + +[node name="bush14" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +z_index = 100 +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(8827, 4460) +scale = Vector2(-5.54387, 3.80466) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -151.895) +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush15" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +modulate = Color(0.8428, 0.8771, 0.98, 1) +z_index = 100 +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(9713, 4457) +scale = Vector2(3.21806, 3.18583) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush16" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +modulate = Color(0.8428, 0.8771, 0.98, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(3348, 2074) +scale = Vector2(-2.40318, 3.59175) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush17" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(9556, 2071) +scale = Vector2(-2.40318, 3.59175) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(130, 0, 201, 278) + +[node name="bush18" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(9887, 2216) +scale = Vector2(-1.87764, 2.59175) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush19" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(10074, 2216) +scale = Vector2(1.53273, 1.82378) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush20" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(10217, 2026) +scale = Vector2(-1.93815, 1.5875) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1837, 651, 139, 180) + +[node name="bush21" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(10721, 2026) +scale = Vector2(-1.93815, 1.5875) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1837, 651, 139, 180) + +[node name="bush22" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +modulate = Color(0.8428, 0.8771, 0.98, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(10802, 2596) +scale = Vector2(-1.93815, 1.5875) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1837, 651, 139, 180) + +[node name="bush25" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(10802, 2779) +scale = Vector2(-1.93815, 1.5875) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush26" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(10963, 3651) +scale = Vector2(1.41694, 1.75208) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1368, 673, 186, 136) + +[node name="bush27" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +modulate = Color(0.8428, 0.8771, 0.98, 1) +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(10831, 3016) +scale = Vector2(1.40272, 1.38546) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(0, 604, 248, 228) + +[node name="bush23" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +z_index = 1 +y_sort_enabled = true +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(10963, 3820) +scale = Vector2(-1.93815, 1.5875) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1837, 651, 139, 180) + +[node name="bush24" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +z_index = 2 +y_sort_enabled = true +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(10831, 2250) +scale = Vector2(-1.93815, 1.5875) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -172) +region_enabled = true +region_rect = Rect2(1464, 419, 144, 115) + +[node name="bush3" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/right side"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(6758, 1838) +scale = Vector2(2, 2) +texture = ExtResource("21_8en1r") +offset = Vector2(0, -50) +region_enabled = true +region_rect = Rect2(1464, 419, 144, 115) + +[node name="grass" type="Node2D" parent="YSorted/ForestVisuals/Static/greenery"] + +[node name="grass" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(16914, 3590) +scale = Vector2(5.77602, 3.87779) +texture = ExtResource("41_2hsma") +region_enabled = true +region_rect = Rect2(42, 16, 176, 163) + +[node name="grass44" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(20689, 3151) +scale = Vector2(12.2062, 8.82233) +texture = ExtResource("41_2hsma") +region_enabled = true +region_rect = Rect2(42, 16, 176, 163) + +[node name="grass55" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(18349, 2842) +scale = Vector2(12.2062, 8.82233) +texture = ExtResource("41_2hsma") +region_enabled = true +region_rect = Rect2(42, 16, 176, 163) + +[node name="grass45" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(22407, 2639) +scale = Vector2(9.80195, 6.42344) +texture = ExtResource("41_2hsma") +region_enabled = true +region_rect = Rect2(42, 16, 176, 163) + +[node name="grass46" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(22344, 3309) +scale = Vector2(12.2062, 8.82233) +texture = ExtResource("41_2hsma") +region_enabled = true +region_rect = Rect2(42, 16, 176, 163) + +[node name="grass13" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.954868, 0.882599, 0.798501, 1) +z_index = -5 +position = Vector2(11998, 2044.14) +scale = Vector2(5.77602, 3.87779) +texture = ExtResource("41_2hsma") +region_enabled = true +region_rect = Rect2(332, 194, 179, 154) + +[node name="grass14" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(11275, 2550.14) +scale = Vector2(5.77602, 3.87779) +texture = ExtResource("41_2hsma") +region_enabled = true +region_rect = Rect2(22, 226, 197, 145) + +[node name="grass15" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(13031, 3052) +scale = Vector2(9.0736, 7.40714) +texture = ExtResource("41_2hsma") +region_enabled = true +region_rect = Rect2(22, 226, 197, 145) + +[node name="grass16" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(11206, 2950) +scale = Vector2(5.58376, 4.48372) +texture = ExtResource("41_2hsma") +region_enabled = true +region_rect = Rect2(305, 25, 186, 153) + +[node name="grass18" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.78, 0.78, 0.78, 1) +z_index = -5 +position = Vector2(13063, 3166.14) +scale = Vector2(5.58376, 2.56212) +texture = ExtResource("41_2hsma") +region_enabled = true +region_rect = Rect2(305, 25, 186, 153) + +[node name="grass19" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(12569, 3487.14) +scale = Vector2(5.58376, 4.48372) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(364, 32, 148, 153) + +[node name="grass20" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(10544, 3050) +scale = Vector2(7.28513, 4.2484) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(364, 32, 148, 153) + +[node name="grass21" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(12718, 3664) +scale = Vector2(7.28513, 6.16997) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(364, 32, 148, 153) + +[node name="grass42" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(13724, 3550) +scale = Vector2(7.28513, 6.16997) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(364, 32, 148, 153) + +[node name="grass43" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(15328, 1933) +scale = Vector2(7.28513, 6.16997) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(364, 32, 148, 153) + +[node name="grass22" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.78, 0.78, 0.78, 1) +z_index = -5 +position = Vector2(10844, 2200) +scale = Vector2(7.28513, 4.43792) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(364, 32, 148, 153) + +[node name="grass23" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.954868, 0.882599, 0.798501, 1) +z_index = -5 +position = Vector2(10406, 2465) +scale = Vector2(7.28513, 6.16997) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(29, 204, 219, 159) + +[node name="grass24" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(11575, 2049) +scale = Vector2(7.28513, 4.46234) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(29, 204, 219, 159) + +[node name="grass25" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(7473, 3724) +scale = Vector2(7.28513, 6.16997) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(29, 204, 219, 159) + +[node name="grass26" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(7662, 2562) +rotation = 1.57079 +scale = Vector2(7.28513, 6.16997) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(29, 204, 219, 159) + +[node name="grass27" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(8802, 3147) +rotation = 1.57079 +scale = Vector2(10.3031, 14.9604) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(29, 204, 219, 159) + +[node name="grass17" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(9872, 3341) +rotation = 2.09439 +scale = Vector2(5.58376, 4.48372) +texture = ExtResource("41_2hsma") +region_enabled = true +region_rect = Rect2(305, 25, 186, 153) + +[node name="grass2" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.78, 0.78, 0.78, 1) +z_index = -5 +position = Vector2(8846.24, 1965) +scale = Vector2(8.56132, 4.49734) +texture = ExtResource("41_2hsma") +region_enabled = true +region_rect = Rect2(332, 194, 179, 154) + +[node name="grass3" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.954868, 0.882599, 0.798501, 1) +z_index = -5 +position = Vector2(18189, 1960) +scale = Vector2(5.77602, 3.87779) +texture = ExtResource("43_8vxd2") +region_enabled = true +region_rect = Rect2(7, 4, 256, 220) + +[node name="grass53" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.954868, 0.882599, 0.798501, 1) +z_index = -5 +position = Vector2(19296, 2343) +scale = Vector2(4.5677, 5.4298) +texture = ExtResource("43_8vxd2") +region_enabled = true +region_rect = Rect2(7, 4, 256, 220) + +[node name="grass54" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.954868, 0.882599, 0.798501, 1) +z_index = -5 +position = Vector2(19369, 3302) +scale = Vector2(4.5677, 5.4298) +texture = ExtResource("43_8vxd2") +region_enabled = true +region_rect = Rect2(7, 4, 256, 220) + +[node name="grass38" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(19442, 1960) +scale = Vector2(5.77602, 3.87779) +texture = ExtResource("43_8vxd2") +region_enabled = true +region_rect = Rect2(7, 59, 257, 157) + +[node name="grass32" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(16284, 1836) +scale = Vector2(9.30275, 4.60296) +texture = ExtResource("44_dh8gs") +region_enabled = true +region_rect = Rect2(147, 255, 218, 128) + +[node name="grass33" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(14152, 2798) +scale = Vector2(6.8578, 6.10617) +texture = ExtResource("44_dh8gs") +region_enabled = true +region_rect = Rect2(147, 255, 218, 128) + +[node name="grass41" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(15980, 2942) +scale = Vector2(6.8578, 6.10617) +texture = ExtResource("44_dh8gs") +region_enabled = true +region_rect = Rect2(307, 48, 183, 193) + +[node name="grass34" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(13337, 1931) +scale = Vector2(5.22018, 6.29687) +texture = ExtResource("44_dh8gs") +region_enabled = true +region_rect = Rect2(147, 255, 218, 128) + +[node name="grass35" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.78, 0.78, 0.78, 1) +z_index = -5 +position = Vector2(14537, 3031) +scale = Vector2(5.22018, 6.29687) +texture = ExtResource("44_dh8gs") +region_enabled = true +region_rect = Rect2(147, 255, 218, 128) + +[node name="grass36" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(14537, 3570) +scale = Vector2(5.1948, 5.15362) +texture = ExtResource("44_dh8gs") +region_enabled = true +region_rect = Rect2(307, 48, 183, 193) + +[node name="grass37" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(15217, 3630) +scale = Vector2(5.1948, 5.15362) +texture = ExtResource("44_dh8gs") +region_enabled = true +region_rect = Rect2(7, 4, 267, 239) + +[node name="grass4" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(23586, 2381) +rotation = 1.57079 +scale = Vector2(5.77602, 3.87779) +texture = ExtResource("44_dh8gs") +region_enabled = true +region_rect = Rect2(7, 4, 267, 239) + +[node name="grass40" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(23915, 3644) +rotation = 3.40339 +scale = Vector2(5.52625, 5.81879) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(317, 219, 185, 159) + +[node name="grass11" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(20001, 2295) +scale = Vector2(5.77602, 3.87779) +texture = ExtResource("44_dh8gs") +region_enabled = true +region_rect = Rect2(147, 255, 218, 128) + +[node name="grass39" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.954868, 0.882599, 0.798501, 1) +z_index = -5 +position = Vector2(21659, 1975) +scale = Vector2(5.77602, 6.94382) +texture = ExtResource("45_30axv") +region_enabled = true +region_rect = Rect2(21, 222, 491, 89) + +[node name="grass12" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(23041, 2105) +scale = Vector2(5.77602, 3.87779) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(29, 204, 219, 159) + +[node name="grass47" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(17785, 3733) +scale = Vector2(2.28071, 4.49236) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(29, 204, 219, 159) + +[node name="grass48" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(20007, 3082) +scale = Vector2(2.28071, 4.49236) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(29, 204, 219, 159) + +[node name="grass49" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(17500, 2268) +scale = Vector2(2.28071, 4.49236) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(29, 204, 219, 159) + +[node name="grass50" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(16938, 2944) +scale = Vector2(2.28071, 4.49236) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(29, 204, 219, 159) + +[node name="grass51" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(21331, 2417) +scale = Vector2(2.28071, 4.49236) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(29, 204, 219, 159) + +[node name="grass52" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(23906, 3091) +scale = Vector2(2.28071, 4.49236) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(29, 204, 219, 159) + +[node name="grass5" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(15375, 3149) +scale = Vector2(5.77602, 3.87779) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(16, 17, 290, 183) + +[node name="grass6" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.78, 0.78, 0.78, 1) +z_index = -5 +position = Vector2(13784.1, 1946) +scale = Vector2(7.39612, 3.87779) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(317, 219, 185, 159) + +[node name="grass30" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(14034, 2216) +scale = Vector2(5.5153, 6.5842) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(16, 17, 290, 183) + +[node name="grass56" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = 99 +position = Vector2(12630, 3276) +scale = Vector2(3.32661, 2.09538) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(16, 17, 290, 183) + +[node name="grass31" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(15774, 3374) +scale = Vector2(4.53474, 4.07413) +texture = ExtResource("43_8vxd2") +region_enabled = true +region_rect = Rect2(22, 72, 489, 274) + +[node name="grass29" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(12637, 1962) +scale = Vector2(5.91724, 3.87779) +texture = ExtResource("42_r01kr") +region_enabled = true +region_rect = Rect2(29, 204, 219, 159) + +[node name="grass7" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(10546.9, 2035.5) +scale = Vector2(5.38464, 7.05479) +texture = ExtResource("45_30axv") +region_enabled = true +region_rect = Rect2(32, 32, 445, 73) + +[node name="grass28" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(10321, 1770) +scale = Vector2(5.38464, 7.05479) +texture = ExtResource("45_30axv") +region_enabled = true +region_rect = Rect2(21, 222, 491, 89) + +[node name="grass8" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.954868, 0.882599, 0.798501, 1) +z_index = -5 +position = Vector2(7291, 2809) +scale = Vector2(3, 3) +texture = ExtResource("46_kg80k") +region_enabled = true +region_rect = Rect2(14, 38, 295, 165) + +[node name="grass9" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +modulate = Color(0.856076, 0.855033, 0.937369, 1) +z_index = -5 +position = Vector2(7798.25, 1896.75) +scale = Vector2(3.76102, 3.55455) +texture = ExtResource("43_8vxd2") +region_enabled = true +region_rect = Rect2(14, 38, 295, 165) + +[node name="grass10" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/grass"] +z_index = -5 +position = Vector2(12419, 3510) +rotation = -1.57079 +scale = Vector2(3, 11.6269) +texture = ExtResource("45_30axv") +region_enabled = true +region_rect = Rect2(21, 222, 491, 89) + +[node name="stone floor" type="Node2D" parent="YSorted/ForestVisuals/Static/greenery"] + +[node name="trees" type="Node2D" parent="YSorted/ForestVisuals/Static/greenery"] + +[node name="FallenTree" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +z_index = 50 +position = Vector2(9932, 3184) +texture = ExtResource("37_gg38r") + +[node name="FallenTree2" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +z_index = 100 +position = Vector2(17948, 4306) +rotation = -0.535782 +scale = Vector2(1.18331, 1.10418) +texture = ExtResource("37_gg38r") + +[node name="TreeA" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(10549, -11) +scale = Vector2(2.34789, 3.23312) +texture = ExtResource("39_hfhye") +region_enabled = true +region_rect = Rect2(0, 0, 1405.76, 1244) + +[node name="TreeA3" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(15814, -1224) +scale = Vector2(3.26718, 4.50965) +texture = ExtResource("39_hfhye") +region_enabled = true +region_rect = Rect2(0, 0, 1405.76, 1244) + +[node name="TreeA4" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +z_index = 120 +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(23901, 5582) +scale = Vector2(3.26718, 4.50965) +texture = ExtResource("39_hfhye") +region_enabled = true +region_rect = Rect2(0, 0, 1405.76, 1244) + +[node name="TreeA2" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +z_index = -1 +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(17459, 1356) +scale = Vector2(2.06913, 2.06913) +texture = ExtResource("39_hfhye") +offset = Vector2(-36.7295, -309.308) +region_enabled = true +region_rect = Rect2(0, 0, 1405.76, 1244) + +[node name="TreeB" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(8927, 914) +scale = Vector2(2.7776, 2.91263) +texture = ExtResource("39_hfhye") +region_enabled = true +region_rect = Rect2(1419.55, -0.619019, 1148.74, 1222.26) + +[node name="TreeB4" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +z_index = 100 +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(24646, 2605) +scale = Vector2(2.7776, 2.91263) +texture = ExtResource("39_hfhye") +region_enabled = true +region_rect = Rect2(1419.55, -0.619019, 1148.74, 1222.26) + +[node name="TreeB2" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +z_index = -10 +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(15223, 1477) +scale = Vector2(2.06913, 2.06913) +texture = ExtResource("39_hfhye") +offset = Vector2(2.4165, -444.148) +region_enabled = true +region_rect = Rect2(1419.55, -0.619019, 1148.74, 1222.26) + +[node name="TreeB3" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +z_index = -2 +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(22079, 629) +scale = Vector2(2.06913, 2.06913) +texture = ExtResource("39_hfhye") +region_enabled = true +region_rect = Rect2(1419.55, -0.619019, 1148.74, 1222.26) + +[node name="TreeC" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +z_index = 105 +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(15156, 3649) +scale = Vector2(2.06913, 2.06913) +texture = ExtResource("39_hfhye") +region_enabled = true +region_rect = Rect2(2563.7, 8.26111, 1089.01, 1213.38) + +[node name="TreeC2" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +material = SubResource("ShaderMaterial_bcdgk") +position = Vector2(19571, -107) +scale = Vector2(3.02154, 3.02987) +texture = ExtResource("39_hfhye") +flip_h = true +region_enabled = true +region_rect = Rect2(2563.7, 8.26111, 1089.01, 1213.38) + +[node name="StompA" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +z_index = -10 +position = Vector2(13658, 1226) +texture = ExtResource("40_26tkn") +region_enabled = true +region_rect = Rect2(0, 0, 754.687, 937.323) + +[node name="StompA2" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +z_index = 100 +position = Vector2(12793, 3481) +scale = Vector2(1.39257, 1.26841) +texture = ExtResource("40_26tkn") +region_enabled = true +region_rect = Rect2(0, 0, 754.687, 937.323) + +[node name="StompB" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +z_index = 50 +position = Vector2(13946, 3121) +texture = ExtResource("40_26tkn") +region_enabled = true +region_rect = Rect2(730.084, 122.266, 1980.43, 840.88) + +[node name="StompB2" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +z_index = 100 +position = Vector2(20561, 4147) +texture = ExtResource("40_26tkn") +region_enabled = true +region_rect = Rect2(730.084, 122.266, 1980.43, 840.88) + +[node name="StompC" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/trees"] +z_index = 50 +position = Vector2(12726, 3078) +texture = ExtResource("40_26tkn") +region_enabled = true +region_rect = Rect2(1483.92, 1280.2, 1139.55, 367.598) + +[node name="BorderCollisionBody" type="StaticBody2D" parent="YSorted/ForestVisuals"] + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="YSorted/ForestVisuals/BorderCollisionBody"] +polygon = PackedVector2Array(5543, 1787, 8663, 1938, 15008, 1914, 15107, 3572, 14122, 3569, 12930, 3737, 11502, 3599, 9887, 3658, 7936, 3924, 7712, 2967, 4629, 2917, 3880, 3351, 3891, 3646, 3919, 4843, 7970, 4459, 16532, 4289, 16365, 821, 1765, 1202, 1437, 4559, 3142, 4814, 3154, 4225, 2749, 3323, 2196, 2523, 2379, 1787) + +[node name="Blocker" type="Node2D" parent="YSorted"] + +[node name="CanvasLayer" parent="." instance=ExtResource("50_r0n5l")] + +[node name="Inventory" parent="CanvasLayer" index="1"] +anchors_preset = 7 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_left = -116.0 +offset_top = -53.0 +offset_right = 231.82 +offset_bottom = 141.4 +grow_vertical = 0 +size_flags_horizontal = 6 +size_flags_vertical = 10 + +[node name="SlotsMover" parent="CanvasLayer/Inventory/SlotsContainer" index="0"] +anchors_preset = 7 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -450.0 +offset_top = -610.0 +offset_right = 450.0 +offset_bottom = 0.0 + +[node name="TextureRect2" parent="CanvasLayer/Inventory/SlotsContainer/SlotsMover/BackgroundContainer" index="1"] +offset_left = -360.339 +offset_top = 0.228533 +offset_right = -456.339 +offset_bottom = 30.2285 + +[node name="TextureRect3" parent="CanvasLayer/Inventory/SlotsContainer/SlotsMover/BackgroundContainer" index="2"] +metadata/_edit_use_anchors_ = true + +[node name="Slot" parent="CanvasLayer/Inventory/SlotsContainer/SlotsMover/Slots" index="0"] +metadata/_edit_use_anchors_ = true + +[node name="Slot2" parent="CanvasLayer/Inventory/SlotsContainer/SlotsMover/Slots" index="1"] +metadata/_edit_use_anchors_ = true + +[node name="Slot3" parent="CanvasLayer/Inventory/SlotsContainer/SlotsMover/Slots" index="2"] +metadata/_edit_use_anchors_ = true + +[node name="Slot4" parent="CanvasLayer/Inventory/SlotsContainer/SlotsMover/Slots" index="3"] +metadata/_edit_use_anchors_ = true + +[node name="Slot5" parent="CanvasLayer/Inventory/SlotsContainer/SlotsMover/Slots" index="4"] +metadata/_edit_use_anchors_ = true + +[node name="Slot6" parent="CanvasLayer/Inventory/SlotsContainer/SlotsMover/Slots" index="5"] +metadata/_edit_use_anchors_ = true + +[node name="Slot7" parent="CanvasLayer/Inventory/SlotsContainer/SlotsMover/Slots" index="6"] +metadata/_edit_use_anchors_ = true + +[node name="Slot8" parent="CanvasLayer/Inventory/SlotsContainer/SlotsMover/Slots" index="7"] +metadata/_edit_use_anchors_ = true + +[node name="Slot9" parent="CanvasLayer/Inventory/SlotsContainer/SlotsMover/Slots" index="8"] +metadata/_edit_use_anchors_ = true + +[node name="SlotSelectContainer" parent="CanvasLayer/Inventory/SlotsContainer/SlotsMover" index="2"] +metadata/_edit_use_anchors_ = true + +[node name="Selector" parent="CanvasLayer/Inventory/SlotsContainer/SlotsMover/SlotSelectContainer" index="0"] +metadata/_edit_use_anchors_ = true + +[node name="QuestLogRoot" parent="CanvasLayer" index="2"] +metadata/_edit_use_anchors_ = true + +[node name="Control" parent="CanvasLayer" index="3"] +metadata/_edit_use_anchors_ = true + +[node name="ColorRect" parent="CanvasLayer/Control" index="0"] +metadata/_edit_use_anchors_ = true + +[node name="Text" parent="CanvasLayer/Control/ColorRect" index="0"] +metadata/_edit_use_anchors_ = true + +[node name="Audio" type="Node" parent="."] + +[node name="Background Music Ramp up" type="AudioStreamPlayer2D" parent="Audio"] +position = Vector2(4002, 2030) +stream = SubResource("AudioStreamPlaylist_ceriq") +autoplay = true +max_distance = 1e+06 +bus = &"Music" +area_mask = 33 +playback_type = 1 +script = ExtResource("52_x1mmf") + +[node name="Background Music loop" type="AudioStreamPlayer2D" parent="Audio"] +position = Vector2(4002, 2030) +stream = ExtResource("53_krhcq") +max_distance = 1e+06 +bus = &"Music" +area_mask = 33 +playback_type = 1 +script = ExtResource("52_x1mmf") + +[node name="SFX" type="Node" parent="Audio"] + +[node name="Farming SFX" type="AudioStreamPlayer2D" parent="Audio/SFX"] +stream = SubResource("AudioStreamRandomizer_ceriq") +max_distance = 2e+07 +playback_type = 2 +script = ExtResource("56_bjj0f") + +[node name="Watering SFX" type="AudioStreamPlayer2D" parent="Audio/SFX"] +stream = SubResource("AudioStreamRandomizer_p4qqi") +max_distance = 2e+07 +playback_type = 2 +script = ExtResource("56_bjj0f") + +[node name="FillWater SFX2" type="AudioStreamPlayer2D" parent="Audio/SFX"] +stream = SubResource("AudioStreamRandomizer_618my") +max_distance = 2e+07 +playback_type = 2 +script = ExtResource("56_bjj0f") + +[connection signal="body_entered" from="Fight/FightStarter/TriggerArea" to="Fight/FightStarter" method="Start"] +[connection signal="FightEnded" from="Fight/FightBaseScene" to="YSorted/Vesna" method="show"] +[connection signal="FightEnded" from="Fight/FightBaseScene" to="YSorted/Vesna" method="EnableMovement"] +[connection signal="FightStarted" from="Fight/FightBaseScene" to="YSorted/Vesna" method="hide"] +[connection signal="FightStarted" from="Fight/FightBaseScene" to="YSorted/Vesna" method="DisableMovement"] +[connection signal="FilledWateringCan" from="YSorted/Vesna" to="Audio/SFX/FillWater SFX2" method="PlayOneShot"] +[connection signal="WateringField" from="YSorted/Vesna/FarmingControls" to="Audio/SFX/Watering SFX" method="PlayOneShot"] +[connection signal="finished" from="Audio/Background Music Ramp up" to="Audio/Background Music loop" method="PlayFromOffset"] + +[editable path="Fight/FightBaseScene"] +[editable path="YSorted/Vesna"] +[editable path="CanvasLayer"] diff --git a/scripts/CSharp/Common/Camera/CameraController.cs b/scripts/CSharp/Common/Camera/CameraController.cs index 6cb870d..4a590b3 100644 --- a/scripts/CSharp/Common/Camera/CameraController.cs +++ b/scripts/CSharp/Common/Camera/CameraController.cs @@ -1,13 +1,27 @@ +using Babushka.scripts.CSharp.Common.Fight; using Godot; namespace Babushka.scripts.CSharp.Common.Camera; public partial class CameraController : Camera2D { - [Export] private Node2D _followNode; - - public override void _Process(double delta) - { - this.GlobalPosition = _followNode.GlobalPosition; - } -} \ No newline at end of file + #region Singleton ( Contains _EnterTree() ) // TODO: use autoload or other solution + + public static CameraController Instance { get; private set; } = null!; + + public override void _EnterTree() + { + Instance = this; + } + + #endregion + + [Export] private Node2D _followNode; + + public FightInstance? fightToShow; + + public override void _Process(double delta) + { + this.GlobalPosition = fightToShow?.camPositionNode.GlobalPosition ?? _followNode.GlobalPosition; + } +} diff --git a/scripts/CSharp/Common/Fight/FightInstance.cs b/scripts/CSharp/Common/Fight/FightInstance.cs new file mode 100644 index 0000000..0ef6aa0 --- /dev/null +++ b/scripts/CSharp/Common/Fight/FightInstance.cs @@ -0,0 +1,280 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Babushka.scripts.CSharp.Common.Camera; +using Babushka.scripts.CSharp.Common.Util; +using Godot; +namespace Babushka.scripts.CSharp.Common.Fight; + +public partial class FightInstance : Node2D //TODO: remake +{ + [Export(PropertyHint.ArrayType)] private Node2D[] _friendlyFightSpots; + [Export(PropertyHint.ArrayType)] private Node2D[] _enemyFightSpots; + [Export] public Node2D camPositionNode; + [Export] private FightStateManager _fightStateManager; + [Export] private Label _fightEndText; + + + [Signal] + public delegate void FightStartedEventHandler(); + + [Signal] + public delegate void FightEndedEventHandler(); + + private List _friendlyFighters = new(); + private List _enemyFighters = new(); + + private FightAttack? _stagedAttack = null; + + public override void _Ready() + { + //_fightStateManager.CurrentFightState = FightStateManager.FightState.FightStartAnim; + _fightStateManager.ExitingTransition += from => + { + switch (from) + { + case FightStateManager.FightState.None: + CaptureCamera(); + Show(); + EmitSignalFightStarted(); + break; + case FightStateManager.FightState.Input: + HideAttackButtons(); + break; + case FightStateManager.FightState.InputTargetSelect: + HideTargetButtons(); + break; + case FightStateManager.FightState.FriendAttackAnim: + _stagedAttack = null; + break; + case FightStateManager.FightState.PlayerWinAnim: + case FightStateManager.FightState.EnemyWinAnim: + _fightEndText.Text = ""; + break; + } + }; + + _fightStateManager.EnteringTransition += to => + { + switch (to) + { + case FightStateManager.FightState.None: + EmitSignalFightEnded(); + CleanUp(); + Hide(); + ReleaseCamera(); + break; + case FightStateManager.FightState.Input: + if (CheckWin()) + { + break; + } + ShowAttackButtons(); + break; + case FightStateManager.FightState.InputTargetSelect: + ShowTargetButtons(); + break; + case FightStateManager.FightState.FriendAttackAnim: + ExecuteAttack(); + GetTree().CreateTimer(1).Timeout += () => _fightStateManager.CurrentFightState = FightStateManager.FightState.Enemy; + break; + case FightStateManager.FightState.Enemy: + if (CheckWin()) + { + break; + } + DecideEnemyAttack(); + _fightStateManager.CurrentFightState = FightStateManager.FightState.EnemyAttackAnim; + break; + case FightStateManager.FightState.EnemyAttackAnim: + ExecuteAttack(); + GetTree().CreateTimer(1).Timeout += () => _fightStateManager.CurrentFightState = FightStateManager.FightState.Input; + break; + case FightStateManager.FightState.PlayerWinAnim: + _fightEndText.Text = "You Win!"; + GetTree().CreateTimer(3).Timeout += () => _fightStateManager.CurrentFightState = FightStateManager.FightState.None; + break; + case FightStateManager.FightState.EnemyWinAnim: + _fightEndText.Text = "You Died :("; + GetTree().CreateTimer(3).Timeout += () => _fightStateManager.CurrentFightState = FightStateManager.FightState.None; + break; + } + }; + } + private void CleanUp() + { + _enemyFighters.ForEach(f => f.QueueFree()); + _friendlyFighters.ForEach(f => f.QueueFree()); + _enemyFighters = new(); + _friendlyFighters = new(); + } + private void DecideEnemyAttack() + { + var aliveEnemyFighters = _enemyFighters.Where(f => !f.IsDead()).ToList(); + var aliveFriendlyFighters = _friendlyFighters.Where(f => !f.IsDead()).ToList(); + + if (aliveEnemyFighters.Count <= 0) + throw new InvalidOperationException("No enemy fighters available for attack."); + + if (aliveFriendlyFighters.Count <= 0) + throw new InvalidOperationException("No friendly fighters available to target."); + + var fighter = aliveEnemyFighters.Random(); + var target = aliveFriendlyFighters.Random(); + + _stagedAttack = new FightAttack + { + attacker = fighter!, + needsSelectedTarget = true, + damage = fighter!.attackStrength, + target = target! + }; + } + + private void ExecuteAttack() + { + if (_stagedAttack == null) + throw new InvalidOperationException("No staged attack to execute."); + + if (!_stagedAttack.needsSelectedTarget) + throw new NotImplementedException("Non-targeted attacks are not implemented yet."); + + if (_stagedAttack.needsSelectedTarget && _stagedAttack.target == null) + throw new InvalidOperationException("No target selected for the staged attack."); + + _stagedAttack.target!.Health -= _stagedAttack.damage; + + _stagedAttack.attacker.AttackAnimation(_stagedAttack); + + UpdateHealthVisual(); + } + + private void UpdateHealthVisual() + { + _friendlyFighters + .Concat(_enemyFighters) + .ForEach(f => f.UpdateHealthVisual()); + } + + private void ReleaseCamera() + { + CameraController.Instance.fightToShow = null; + } + + private void CaptureCamera() + { + CameraController.Instance.fightToShow = this; + } + + public void Start(FightParty fightParty, PackedScene?[] enemies) + { + if (_fightStateManager.IsRunning()) + { + GD.PushWarning("Can not start a running fight"); + return; + } + + if (fightParty.vesna) + { + InstantiateFighter(_friendlyFightSpots[1], FightManager.Instance.fightingVesnaScene); + } + + for (var i = 0; i < Math.Min(_enemyFightSpots.Length, enemies.Length); i++) + { + var enemy = enemies[i]; + if (enemy == null) + continue; + + InstantiateFighter(_enemyFightSpots[i], enemy, true); + } + + _fightStateManager.ToStartAnim(); + } + + private void InstantiateFighter(Node2D parent, PackedScene fighterScene, bool isEnemy = false) + { + var fighter = fighterScene.Instantiate(); + fighter.fightInstance = this; + parent.AddChild(fighter); + + if (isEnemy) + { + _enemyFighters.Add(fighter); + } + else + { + _friendlyFighters.Add(fighter); + } + } + + public void SelectAttack(Fighter fighter) + { + _stagedAttack = new FightAttack + { + attacker = fighter, + damage = fighter.attackStrength, + needsSelectedTarget = true + }; + + if (_stagedAttack.needsSelectedTarget) + { + _fightStateManager.CurrentFightState = FightStateManager.FightState.InputTargetSelect; + } + else + { + _fightStateManager.CurrentFightState = FightStateManager.FightState.FriendAttackAnim; + } + } + + private void HideAttackButtons() + { + _friendlyFighters.ForEach(f => f.HideAttackButton()); + } + + private void ShowAttackButtons() + { + _friendlyFighters.ForEach(f => f.ShowAttackButton()); + } + + private void HideTargetButtons() + { + _enemyFighters.ForEach(f => f.HideTargetButtons()); + } + + private void ShowTargetButtons() + { + _enemyFighters.ForEach(f => f.ShowTargetButtons()); + } + + public void SelectTargetAndAttack(Fighter fighter) + { + if (_stagedAttack == null) + throw new InvalidOperationException("No staged attack to select target for."); + + _stagedAttack.target = fighter; + + _fightStateManager.CurrentFightState = FightStateManager.FightState.FriendAttackAnim; + } + + public bool CheckWin() + { + if (_enemyFighters.All(f => f.IsDead())) + { + _fightStateManager.CurrentFightState = FightStateManager.FightState.PlayerWinAnim; + return true; + } + if (_friendlyFighters.All(f => f.IsDead())) + { + _fightStateManager.CurrentFightState = FightStateManager.FightState.EnemyWinAnim; + return true; + } + return false; + } +} +public class FightAttack +{ + public int damage; + public bool needsSelectedTarget; + public Fighter? target; + public Fighter attacker; +} diff --git a/scripts/CSharp/Common/Fight/FightInstance.cs.uid b/scripts/CSharp/Common/Fight/FightInstance.cs.uid new file mode 100644 index 0000000..c16905c --- /dev/null +++ b/scripts/CSharp/Common/Fight/FightInstance.cs.uid @@ -0,0 +1 @@ +uid://c76mhhqyk4lgh diff --git a/scripts/CSharp/Common/Fight/FightManager.cs b/scripts/CSharp/Common/Fight/FightManager.cs new file mode 100644 index 0000000..ef0652c --- /dev/null +++ b/scripts/CSharp/Common/Fight/FightManager.cs @@ -0,0 +1,28 @@ +using Godot; +namespace Babushka.scripts.CSharp.Common.Fight; + +public partial class FightManager : Node +{ + #region AutoLoad ( Contains _EnterTree() ) + + public static FightManager Instance { get; private set; } = null!; + + public override void _EnterTree() + { + Instance = this; + } + + #endregion + + [Export] + public PackedScene fightingVesnaScene; + + public FightParty fightParty = new(); + + public void StartFight(PackedScene[] enemies, FightInstance instance) + { + GD.Print("Starting Fight"); + instance.Start(fightParty, enemies); + } + +} diff --git a/scripts/CSharp/Common/Fight/FightManager.cs.uid b/scripts/CSharp/Common/Fight/FightManager.cs.uid new file mode 100644 index 0000000..ead98f6 --- /dev/null +++ b/scripts/CSharp/Common/Fight/FightManager.cs.uid @@ -0,0 +1 @@ +uid://j5ge24rk25wm diff --git a/scripts/CSharp/Common/Fight/FightParty.cs b/scripts/CSharp/Common/Fight/FightParty.cs new file mode 100644 index 0000000..c38c8c4 --- /dev/null +++ b/scripts/CSharp/Common/Fight/FightParty.cs @@ -0,0 +1,6 @@ +namespace Babushka.scripts.CSharp.Common.Fight; + +public class FightParty +{ + public bool vesna = true; +} diff --git a/scripts/CSharp/Common/Fight/FightParty.cs.uid b/scripts/CSharp/Common/Fight/FightParty.cs.uid new file mode 100644 index 0000000..6af5aa3 --- /dev/null +++ b/scripts/CSharp/Common/Fight/FightParty.cs.uid @@ -0,0 +1 @@ +uid://cvhgnboybc4cm diff --git a/scripts/CSharp/Common/Fight/FightStarter.cs b/scripts/CSharp/Common/Fight/FightStarter.cs new file mode 100644 index 0000000..0fd6ae8 --- /dev/null +++ b/scripts/CSharp/Common/Fight/FightStarter.cs @@ -0,0 +1,19 @@ +using Godot; +namespace Babushka.scripts.CSharp.Common.Fight; + +public partial class FightStarter : Node +{ + [Export(PropertyHint.ArrayType)] private PackedScene[] enemies; + [Export] private FightInstance _fightInstance; + [Export] private bool _once = true; + private bool hasBeenStarted = false; + + public void Start(Node2D _) + { + if (_once && hasBeenStarted) + return; + + hasBeenStarted = true; + FightManager.Instance.StartFight(enemies, _fightInstance); + } +} diff --git a/scripts/CSharp/Common/Fight/FightStarter.cs.uid b/scripts/CSharp/Common/Fight/FightStarter.cs.uid new file mode 100644 index 0000000..58860f7 --- /dev/null +++ b/scripts/CSharp/Common/Fight/FightStarter.cs.uid @@ -0,0 +1 @@ +uid://di0xxwfw43m0i diff --git a/scripts/CSharp/Common/Fight/FightStateManager.cs b/scripts/CSharp/Common/Fight/FightStateManager.cs new file mode 100644 index 0000000..9d86e2c --- /dev/null +++ b/scripts/CSharp/Common/Fight/FightStateManager.cs @@ -0,0 +1,73 @@ +using Godot; +namespace Babushka.scripts.CSharp.Common.Fight; + +public partial class FightStateManager : Node +{ + [Signal] + public delegate void ExitingTransitionEventHandler(FightState exitingState); + + [Signal] + public delegate void EnteringTransitionEventHandler(FightState enteringState); + + public enum FightState + { + None, + FightStartAnim, + Input, + InputTargetSelect, + FriendAttackAnim, + Enemy, + EnemyAttackAnim, + PlayerWinAnim, + EnemyWinAnim + } + + private FightState _fightStateBacking = FightState.None; + + public FightState CurrentFightState + { + set => Transition(_fightStateBacking, value); + get => _fightStateBacking; + } + + private void Transition(FightState from, FightState to) + { + if(from == to) + return; + + GD.Print($"Transitioning from {from} to {to}"); + ExitTransition(from); + _fightStateBacking = to; + EnterTransition(to); + } + + private void ExitTransition(FightState from) + { + EmitSignalExitingTransition(from); + } + + private void EnterTransition(FightState to) + { + EmitSignalEnteringTransition(to); + switch (to) + { + case FightState.FightStartAnim: + EnterFightStartAnim(); + break; + } + } + private void EnterFightStartAnim() + { + GetTree().CreateTimer(1).Timeout += () => CurrentFightState = FightState.Input; + } + + public void ToStartAnim() + { + CurrentFightState = FightState.FightStartAnim; + } + + public bool IsRunning() + { + return CurrentFightState != FightState.None; + } +} diff --git a/scripts/CSharp/Common/Fight/FightStateManager.cs.uid b/scripts/CSharp/Common/Fight/FightStateManager.cs.uid new file mode 100644 index 0000000..1527d8c --- /dev/null +++ b/scripts/CSharp/Common/Fight/FightStateManager.cs.uid @@ -0,0 +1 @@ +uid://oe1uypehqvr7 diff --git a/scripts/CSharp/Common/Fight/Fighter.cs b/scripts/CSharp/Common/Fight/Fighter.cs new file mode 100644 index 0000000..af3a699 --- /dev/null +++ b/scripts/CSharp/Common/Fight/Fighter.cs @@ -0,0 +1,131 @@ +using Godot; +namespace Babushka.scripts.CSharp.Common.Fight; + +public partial class Fighter : Node2D +{ + [Export] public string name; + [Export] public int maxHealth; + [Export] public int attackStrength; + + [ExportCategory("References")] + [Export] private Node2D _attackButtons; + [Export] private Node2D _targetButtons; + [Export] private Node2D _targetMarker; + [Export] private Label _healthText; + [Export] private Node2D _visualSprite; + + + private int _health; + + + public FightInstance fightInstance; + public int Health + { + get => _health; + set + { + _health = value; + if (_health <= 0) + { + _health = 0; + Die(); + } + } + } + + private void Die() + { + _visualSprite.Scale = new Vector2(1, 0.3f); + } + + public override void _Ready() + { + Health = maxHealth; + UpdateHealthVisual(); + } + + public void Attack() + { + fightInstance.SelectAttack(this); + } + + public void HideAttackButton() + { + _attackButtons.Hide(); + } + + public void ShowAttackButton() + { + _attackButtons.Show(); + } + + public void HideTargetButtons() + { + _targetButtons.Hide(); + } + + public void ShowTargetButtons() + { + _targetButtons.Show(); + } + + public void TargetMouseEvent(Node viewport, InputEvent inputEvent, int shapeIdx) + { + if (inputEvent.IsPressed()) + ClickedTarget(); + } + + public void AttackMouseEvent(Node viewport, InputEvent inputEvent, int shapeIdx) + { + if (inputEvent.IsPressed()) + ClickedAttack(); + } + + private void ClickedAttack() + { + fightInstance.SelectAttack(this); + } + + private void ClickedTarget() + { + fightInstance.SelectTargetAndAttack(this); + } + + public void StartHoverTarget() + { + _targetMarker.Visible = true; + } + + public void EndHoverTarget() + { + _targetMarker.Visible = false; + } + + public void UpdateHealthVisual() + { + _healthText.Text = $"{Health}/{maxHealth}"; + } + + public void AttackAnimation(FightAttack attack) + { + var tween = GetTree().CreateTween(); + tween.TweenProperty(this, "global_position", attack.target.GlobalPosition, 0.15); + tween.TweenCallback(Callable.From(() => attack.target?.HitAnimation(attack))); + tween.TweenProperty(this, "position", new Vector2(0, 0), 0.7) + .SetTrans(Tween.TransitionType.Cubic).SetEase(Tween.EaseType.Out); + + } + + private void HitAnimation(FightAttack attack) + { + var tween = GetTree().CreateTween(); + tween.TweenProperty(this, "scale", new Vector2(1.4f, 0.6f), 0.15); + tween.TweenProperty(this, "scale", new Vector2(1,1), 0.4) + .SetTrans(Tween.TransitionType.Cubic).SetEase(Tween.EaseType.Out); + } + + public bool IsDead() + { + return Health <= 0; + } +} diff --git a/scripts/CSharp/Common/Fight/Fighter.cs.uid b/scripts/CSharp/Common/Fight/Fighter.cs.uid new file mode 100644 index 0000000..1a45840 --- /dev/null +++ b/scripts/CSharp/Common/Fight/Fighter.cs.uid @@ -0,0 +1 @@ +uid://by88f32fou7lh diff --git a/scripts/CSharp/Common/Util/LinqExtras.cs b/scripts/CSharp/Common/Util/LinqExtras.cs new file mode 100644 index 0000000..92a79c1 --- /dev/null +++ b/scripts/CSharp/Common/Util/LinqExtras.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data.SqlTypes; +using System.Linq; +using System.Xml.Schema; +namespace Babushka.scripts.CSharp.Common.Util; + +public static class LinqExtras +{ + public static void ForEach(this IEnumerable self, Action action) + { + foreach (var t in self) + { + action.Invoke(t); + } + } + + public static T? Random(this IEnumerable self) + { + var selfList = self.ToList(); + if (selfList.Count == 0) return default; + if (selfList.Count == 1) return selfList[0]; + var randomIndex = new Random().Next(0, selfList.Count); + return selfList[randomIndex]; + } +}