diff --git a/Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png b/Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png new file mode 100644 index 0000000..09f2d1f Binary files /dev/null and b/Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png differ diff --git a/Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png.import b/Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png.import new file mode 100644 index 0000000..1559886 --- /dev/null +++ b/Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cpyntpwy5riy8" +path="res://.godot/imported/stone_walk-Sheet.png-b37d03ae35e4fa21cd0b8f9fd3701b26.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png" +dest_files=["res://.godot/imported/stone_walk-Sheet.png-b37d03ae35e4fa21cd0b8f9fd3701b26.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Sprites/Characters/Enemies/stump-Sheet.png b/Assets/Sprites/Characters/Enemies/stump-Sheet.png new file mode 100644 index 0000000..f1fb5b3 Binary files /dev/null and b/Assets/Sprites/Characters/Enemies/stump-Sheet.png differ diff --git a/Assets/Sprites/Characters/Enemies/stump-Sheet.png.import b/Assets/Sprites/Characters/Enemies/stump-Sheet.png.import new file mode 100644 index 0000000..91c18fd --- /dev/null +++ b/Assets/Sprites/Characters/Enemies/stump-Sheet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://blkxqlgahm4al" +path="res://.godot/imported/stump-Sheet.png-b806e33459c8ff66f9ee9ffc6bbbbf56.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Characters/Enemies/stump-Sheet.png" +dest_files=["res://.godot/imported/stump-Sheet.png-b806e33459c8ff66f9ee9ffc6bbbbf56.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png b/Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png new file mode 100644 index 0000000..1c8ac18 Binary files /dev/null and b/Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png differ diff --git a/Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png.import b/Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png.import new file mode 100644 index 0000000..1bd9dba --- /dev/null +++ b/Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://1kkgb0j1bnm7" +path="res://.godot/imported/stump_attack-Sheet.png-960eb7e1324b8df9df9cb38a637f24d4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png" +dest_files=["res://.godot/imported/stump_attack-Sheet.png-960eb7e1324b8df9df9cb38a637f24d4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Sprites/Characters/Enemies/water-Sheet.png b/Assets/Sprites/Characters/Enemies/water-Sheet.png new file mode 100644 index 0000000..d95ac87 Binary files /dev/null and b/Assets/Sprites/Characters/Enemies/water-Sheet.png differ diff --git a/Assets/Sprites/Characters/Enemies/water-Sheet.png.import b/Assets/Sprites/Characters/Enemies/water-Sheet.png.import new file mode 100644 index 0000000..8daa807 --- /dev/null +++ b/Assets/Sprites/Characters/Enemies/water-Sheet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dab3cq4y0d2pm" +path="res://.godot/imported/water-Sheet.png-91c518e053a88010c4c4cf2bec7d93c8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Characters/Enemies/water-Sheet.png" +dest_files=["res://.godot/imported/water-Sheet.png-91c518e053a88010c4c4cf2bec7d93c8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Sprites/Characters/Player/oniSheet.png b/Assets/Sprites/Characters/Player/oniSheet.png new file mode 100644 index 0000000..a3f49d1 Binary files /dev/null and b/Assets/Sprites/Characters/Player/oniSheet.png differ diff --git a/Assets/Sprites/Characters/Player/oniSheet.png.import b/Assets/Sprites/Characters/Player/oniSheet.png.import new file mode 100644 index 0000000..9345837 --- /dev/null +++ b/Assets/Sprites/Characters/Player/oniSheet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c6dl0tlkdtis1" +path="res://.godot/imported/oniSheet.png-b8378366bf6353d355389916f84c4a21.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Characters/Player/oniSheet.png" +dest_files=["res://.godot/imported/oniSheet.png-b8378366bf6353d355389916f84c4a21.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Sprites/Characters/Player/tengu-Sheet.png b/Assets/Sprites/Characters/Player/tengu-Sheet.png new file mode 100644 index 0000000..0b87bd1 Binary files /dev/null and b/Assets/Sprites/Characters/Player/tengu-Sheet.png differ diff --git a/Assets/Sprites/Characters/Player/tengu-Sheet.png.import b/Assets/Sprites/Characters/Player/tengu-Sheet.png.import new file mode 100644 index 0000000..4f9ff31 --- /dev/null +++ b/Assets/Sprites/Characters/Player/tengu-Sheet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://codbtra5i6ara" +path="res://.godot/imported/tengu-Sheet.png-bd1922231358608f458a7e383bdb6938.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Characters/Player/tengu-Sheet.png" +dest_files=["res://.godot/imported/tengu-Sheet.png-bd1922231358608f458a7e383bdb6938.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Sprites/Environments/environment.png b/Assets/Sprites/Environments/environment.png index 47b0eaa..3651d23 100644 Binary files a/Assets/Sprites/Environments/environment.png and b/Assets/Sprites/Environments/environment.png differ diff --git a/Assets/Sprites/Environments/sakura.png b/Assets/Sprites/Environments/sakura.png new file mode 100644 index 0000000..bb9a678 Binary files /dev/null and b/Assets/Sprites/Environments/sakura.png differ diff --git a/Assets/Sprites/Environments/sakura.png.import b/Assets/Sprites/Environments/sakura.png.import new file mode 100644 index 0000000..9b8b17c --- /dev/null +++ b/Assets/Sprites/Environments/sakura.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bnq8qxou2sgvw" +path="res://.godot/imported/sakura.png-b12ae8679555da89906a9bb60ba56118.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Environments/sakura.png" +dest_files=["res://.godot/imported/sakura.png-b12ae8679555da89906a9bb60ba56118.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Sprites/Projectiles/blueflame.png b/Assets/Sprites/Projectiles/blueflame.png new file mode 100644 index 0000000..01dd6a6 Binary files /dev/null and b/Assets/Sprites/Projectiles/blueflame.png differ diff --git a/Assets/Sprites/Projectiles/blueflame.png.import b/Assets/Sprites/Projectiles/blueflame.png.import new file mode 100644 index 0000000..0d77967 --- /dev/null +++ b/Assets/Sprites/Projectiles/blueflame.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dxon2g2sn48jq" +path="res://.godot/imported/blueflame.png-9ecbfb949461f9cb1fab611fc06999c6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Projectiles/blueflame.png" +dest_files=["res://.godot/imported/blueflame.png-9ecbfb949461f9cb1fab611fc06999c6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Sprites/Projectiles/flame_attack.png b/Assets/Sprites/Projectiles/flame_attack.png new file mode 100644 index 0000000..8ac72e2 Binary files /dev/null and b/Assets/Sprites/Projectiles/flame_attack.png differ diff --git a/Assets/Sprites/Projectiles/flame_attack.png.import b/Assets/Sprites/Projectiles/flame_attack.png.import new file mode 100644 index 0000000..e995ada --- /dev/null +++ b/Assets/Sprites/Projectiles/flame_attack.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://m77l7ej5ojn0" +path="res://.godot/imported/flame_attack.png-5976c405e743e9ca07cffcd6eb29b216.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Projectiles/flame_attack.png" +dest_files=["res://.godot/imported/flame_attack.png-5976c405e743e9ca07cffcd6eb29b216.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Prefabs/Enemies/liquid.tscn b/Prefabs/Enemies/liquid.tscn new file mode 100644 index 0000000..58f919f --- /dev/null +++ b/Prefabs/Enemies/liquid.tscn @@ -0,0 +1,75 @@ +[gd_scene load_steps=11 format=3 uid="uid://c37hbbbx8wje"] + +[ext_resource type="Script" uid="uid://bj52mq7uip7di" path="res://Scripts/Enemies/Enemy.cs" id="1_rmkli"] +[ext_resource type="Texture2D" uid="uid://dab3cq4y0d2pm" path="res://Assets/Sprites/Characters/Enemies/water-Sheet.png" id="2_rmkli"] +[ext_resource type="Script" uid="uid://cu37tswrk107q" path="res://Scripts/Enemies/EnemyMovement.cs" id="3_t8by4"] +[ext_resource type="Script" uid="uid://dvkd1keu854so" path="res://Scripts/Components/Health.cs" id="4_cyy2q"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_frtie"] +atlas = ExtResource("2_rmkli") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_t8by4"] +atlas = ExtResource("2_rmkli") +region = Rect2(32, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_cyy2q"] +atlas = ExtResource("2_rmkli") +region = Rect2(64, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1jpca"] +atlas = ExtResource("2_rmkli") +region = Rect2(96, 0, 32, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_ewbju"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_frtie") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_t8by4") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_cyy2q") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1jpca") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_7puah"] +radius = 12.0 + +[node name="enemy" type="PathFollow2D" node_paths=PackedStringArray("Health")] +rotates = false +loop = false +script = ExtResource("1_rmkli") +Health = NodePath("Scripts/Health") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +texture_filter = 1 +sprite_frames = SubResource("SpriteFrames_ewbju") +offset = Vector2(0, -16) + +[node name="Scripts" type="Node" parent="."] + +[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_pathFollow2D")] +script = ExtResource("3_t8by4") +_pathFollow2D = NodePath("../..") +_speed = 25.0 + +[node name="Health" type="Node" parent="Scripts"] +script = ExtResource("4_cyy2q") +_baseMaxHp = 50.0 + +[node name="HitBox" type="Area2D" parent="."] +collision_layer = 4 +collision_mask = 0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="HitBox"] +position = Vector2(-1, -9) +shape = SubResource("CircleShape2D_7puah") diff --git a/Prefabs/Enemies/rock_boi.tscn b/Prefabs/Enemies/stone.tscn similarity index 51% rename from Prefabs/Enemies/rock_boi.tscn rename to Prefabs/Enemies/stone.tscn index 7765d79..f83dde9 100644 --- a/Prefabs/Enemies/rock_boi.tscn +++ b/Prefabs/Enemies/stone.tscn @@ -1,34 +1,37 @@ -[gd_scene load_steps=12 format=3 uid="uid://y54cvugsx75b"] +[gd_scene load_steps=15 format=3 uid="uid://y54cvugsx75b"] -[ext_resource type="Texture2D" uid="uid://cm8gnfvfysyyl" path="res://Assets/Sprites/Characters/Enemies/stone-Sheet.png" id="1_7puah"] -[ext_resource type="Script" uid="uid://cu37tswrk107q" path="res://Scripts/Enemies/EnemyMovement.cs" id="2_wtb2n"] +[ext_resource type="Script" uid="uid://bj52mq7uip7di" path="res://Scripts/Enemies/Enemy.cs" id="1_qqq3s"] +[ext_resource type="Texture2D" uid="uid://cm8gnfvfysyyl" path="res://Assets/Sprites/Characters/Enemies/stone-Sheet.png" id="2_ymaxx"] +[ext_resource type="Script" uid="uid://cu37tswrk107q" path="res://Scripts/Enemies/EnemyMovement.cs" id="3_pbvk1"] +[ext_resource type="Script" uid="uid://dvkd1keu854so" path="res://Scripts/Components/Health.cs" id="4_njiku"] +[ext_resource type="Script" uid="uid://c247m8m3qmlk0" path="res://Scripts/Enemies/EnemyArea.cs" id="5_ymaxx"] [sub_resource type="AtlasTexture" id="AtlasTexture_ldgsr"] -atlas = ExtResource("1_7puah") +atlas = ExtResource("2_ymaxx") region = Rect2(0, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_o5yvi"] -atlas = ExtResource("1_7puah") +atlas = ExtResource("2_ymaxx") region = Rect2(32, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_rku1e"] -atlas = ExtResource("1_7puah") +atlas = ExtResource("2_ymaxx") region = Rect2(64, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_rfjv2"] -atlas = ExtResource("1_7puah") +atlas = ExtResource("2_ymaxx") region = Rect2(96, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_1phco"] -atlas = ExtResource("1_7puah") +atlas = ExtResource("2_ymaxx") region = Rect2(128, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_nb51f"] -atlas = ExtResource("1_7puah") +atlas = ExtResource("2_ymaxx") region = Rect2(160, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_nnt18"] -atlas = ExtResource("1_7puah") +atlas = ExtResource("2_ymaxx") region = Rect2(192, 0, 32, 32) [sub_resource type="SpriteFrames" id="SpriteFrames_ewbju"] @@ -60,30 +63,38 @@ animations = [{ "speed": 5.0 }] -[sub_resource type="CircleShape2D" id="CircleShape2D_i6g32"] -radius = 7.0 +[sub_resource type="CircleShape2D" id="CircleShape2D_7puah"] +radius = 12.0 -[node name="RockBoi" type="CharacterBody2D"] -motion_mode = 1 - -[node name="NavigationAgent2D" type="NavigationAgent2D" parent="."] -path_desired_distance = 1.0 -simplify_path = true -simplify_epsilon = 0.25 +[node name="enemy" type="PathFollow2D" node_paths=PackedStringArray("Health")] +rotates = false +loop = false +script = ExtResource("1_qqq3s") +Health = NodePath("Scripts/Health") [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +self_modulate = Color(1.8247963, 1.8247963, 1.8247963, 1) texture_filter = 1 sprite_frames = SubResource("SpriteFrames_ewbju") offset = Vector2(0, -16) [node name="Scripts" type="Node" parent="."] -[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_agent2D", "_body2D")] -script = ExtResource("2_wtb2n") -_agent2D = NodePath("../../NavigationAgent2D") -_body2D = NodePath("../..") -_speed = 44.59 +[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_pathFollow2D")] +script = ExtResource("3_pbvk1") +_pathFollow2D = NodePath("../..") +_speed = 25.0 -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -position = Vector2(0, -7) -shape = SubResource("CircleShape2D_i6g32") +[node name="Health" type="Node" parent="Scripts"] +script = ExtResource("4_njiku") +_baseMaxHp = 50.0 + +[node name="HitBox" type="Area2D" parent="." node_paths=PackedStringArray("Enemy")] +collision_layer = 4 +collision_mask = 0 +script = ExtResource("5_ymaxx") +Enemy = NodePath("..") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="HitBox"] +position = Vector2(0, -14) +shape = SubResource("CircleShape2D_7puah") diff --git a/Prefabs/Enemies/stump.tscn b/Prefabs/Enemies/stump.tscn new file mode 100644 index 0000000..229fd1a --- /dev/null +++ b/Prefabs/Enemies/stump.tscn @@ -0,0 +1,106 @@ +[gd_scene load_steps=15 format=3 uid="uid://bawoevqlooah0"] + +[ext_resource type="Script" uid="uid://bj52mq7uip7di" path="res://Scripts/Enemies/Enemy.cs" id="1_0paat"] +[ext_resource type="Texture2D" uid="uid://blkxqlgahm4al" path="res://Assets/Sprites/Characters/Enemies/stump-Sheet.png" id="2_0paat"] +[ext_resource type="Script" uid="uid://cu37tswrk107q" path="res://Scripts/Enemies/EnemyMovement.cs" id="3_8v58s"] +[ext_resource type="Script" uid="uid://dvkd1keu854so" path="res://Scripts/Components/Health.cs" id="4_04dlg"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_pitds"] +atlas = ExtResource("2_0paat") +region = Rect2(0, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8v58s"] +atlas = ExtResource("2_0paat") +region = Rect2(64, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_04dlg"] +atlas = ExtResource("2_0paat") +region = Rect2(128, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_m1mv1"] +atlas = ExtResource("2_0paat") +region = Rect2(192, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_6jaqh"] +atlas = ExtResource("2_0paat") +region = Rect2(256, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_pgfmy"] +atlas = ExtResource("2_0paat") +region = Rect2(320, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_mu3a6"] +atlas = ExtResource("2_0paat") +region = Rect2(384, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_byqr4"] +atlas = ExtResource("2_0paat") +region = Rect2(448, 0, 64, 64) + +[sub_resource type="SpriteFrames" id="SpriteFrames_ewbju"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_pitds") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_8v58s") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_04dlg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_m1mv1") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_6jaqh") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_pgfmy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_mu3a6") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_byqr4") +}], +"loop": true, +"name": &"default", +"speed": 8.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_7puah"] +radius = 12.0 + +[node name="enemy" type="PathFollow2D" node_paths=PackedStringArray("Health")] +rotates = false +loop = false +script = ExtResource("1_0paat") +Type = 1 +Health = NodePath("Scripts/Health") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +texture_filter = 1 +sprite_frames = SubResource("SpriteFrames_ewbju") +frame = 1 +frame_progress = 0.31093782 +offset = Vector2(0, -16) + +[node name="Scripts" type="Node" parent="."] + +[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_pathFollow2D")] +script = ExtResource("3_8v58s") +_pathFollow2D = NodePath("../..") +_speed = 25.0 + +[node name="Health" type="Node" parent="Scripts"] +script = ExtResource("4_04dlg") +_baseMaxHp = 50.0 + +[node name="HitBox" type="Area2D" parent="."] +collision_layer = 4 +collision_mask = 0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="HitBox"] +position = Vector2(0, -14) +shape = SubResource("CircleShape2D_7puah") diff --git a/Prefabs/Projectiles/Fireball.tscn b/Prefabs/Projectiles/Fireball.tscn new file mode 100644 index 0000000..e640034 --- /dev/null +++ b/Prefabs/Projectiles/Fireball.tscn @@ -0,0 +1,64 @@ +[gd_scene load_steps=9 format=3 uid="uid://cr6shokga0dy6"] + +[ext_resource type="Script" uid="uid://ln2lt16fi47q" path="res://Scripts/Projectiles/Projectile.cs" id="1_llqe1"] +[ext_resource type="Texture2D" uid="uid://m77l7ej5ojn0" path="res://Assets/Sprites/Projectiles/flame_attack.png" id="2_xuxqo"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_llqe1"] +radius = 8.062258 + +[sub_resource type="AtlasTexture" id="AtlasTexture_r2qu7"] +atlas = ExtResource("2_xuxqo") +region = Rect2(0, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fgux0"] +atlas = ExtResource("2_xuxqo") +region = Rect2(16, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fb7vg"] +atlas = ExtResource("2_xuxqo") +region = Rect2(32, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y5q4i"] +atlas = ExtResource("2_xuxqo") +region = Rect2(48, 0, 16, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_0qapt"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_r2qu7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fgux0") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fb7vg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_y5q4i") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[node name="Fireball" type="Node2D" node_paths=PackedStringArray("_hurtBox")] +texture_filter = 1 +script = ExtResource("1_llqe1") +_superEffective = Array[int]([1]) +_baseDamage = 25.0 +_speed = 250.0 +_hurtBox = NodePath("Hurtbox") + +[node name="Hurtbox" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 4 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hurtbox"] +shape = SubResource("CircleShape2D_llqe1") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +self_modulate = Color(1.8247963, 1.8247963, 1.8247963, 1) +rotation = -1.5707964 +sprite_frames = SubResource("SpriteFrames_0qapt") +offset = Vector2(0, -8) diff --git a/Prefabs/Turrets/kitsune.tscn b/Prefabs/Turrets/kitsune.tscn new file mode 100644 index 0000000..cef8629 --- /dev/null +++ b/Prefabs/Turrets/kitsune.tscn @@ -0,0 +1,110 @@ +[gd_scene load_steps=15 format=3 uid="uid://cx7gr555b1gov"] + +[ext_resource type="Texture2D" uid="uid://be7hl01iuo5af" path="res://Assets/Sprites/Characters/Player/kitsune-Sheet.png" id="1_0bpay"] +[ext_resource type="Script" uid="uid://cxrhl65cjw4yr" path="res://Scripts/Turrets/Turret.cs" id="2_jjtgc"] +[ext_resource type="Script" uid="uid://cy00plvsi6vkn" path="res://Scripts/Projectiles/ProjectilePool.cs" id="3_d0rgn"] +[ext_resource type="PackedScene" uid="uid://cr6shokga0dy6" path="res://Prefabs/Projectiles/Fireball.tscn" id="4_jjtgc"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_3dryh"] +atlas = ExtResource("1_0bpay") +region = Rect2(0, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wowpa"] +atlas = ExtResource("1_0bpay") +region = Rect2(16, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_i6g32"] +atlas = ExtResource("1_0bpay") +region = Rect2(32, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1l0tm"] +atlas = ExtResource("1_0bpay") +region = Rect2(48, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_v158k"] +atlas = ExtResource("1_0bpay") +region = Rect2(64, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_h4fw4"] +atlas = ExtResource("1_0bpay") +region = Rect2(80, 0, 16, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_ebmjs"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_3dryh") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_wowpa") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_i6g32") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1l0tm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_v158k") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_h4fw4") +}], +"loop": true, +"name": &"idle", +"speed": 8.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_5wxv7"] +radius = 50.0 + +[sub_resource type="CircleShape2D" id="CircleShape2D_y5hcb"] +radius = 7.0 + +[sub_resource type="QuadMesh" id="QuadMesh_5wxv7"] +size = Vector2(100, 100) + +[node name="Turret" type="Node2D"] +y_sort_enabled = true +texture_filter = 1 + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +self_modulate = Color(1.8247963, 1.8247963, 1.8247963, 1) +sprite_frames = SubResource("SpriteFrames_ebmjs") +animation = &"idle" +autoplay = "idle" +frame_progress = 0.8244228 +offset = Vector2(0, -16) + +[node name="Scripts" type="Node" parent="."] + +[node name="Turret" type="Node" parent="Scripts" node_paths=PackedStringArray("_Attackrange", "_parent", "_projectilePool")] +script = ExtResource("2_jjtgc") +_Attackrange = NodePath("../../ShootArea") +_fireRate = 1.0 +_parent = NodePath("../..") +_projectilePool = NodePath("../ProjectilePool") + +[node name="ProjectilePool" type="Node" parent="Scripts"] +script = ExtResource("3_d0rgn") +_scene = ExtResource("4_jjtgc") +_poolSize = 10 + +[node name="ShootArea" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 4 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="ShootArea"] +rotation = 1.5707964 +shape = SubResource("CircleShape2D_5wxv7") + +[node name="PlacementCollider" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="PlacementCollider"] +position = Vector2(0, -5) +rotation = 1.5707964 +shape = SubResource("CircleShape2D_y5hcb") + +[node name="MeshInstance2D" type="MeshInstance2D" parent="."] +visible = false +mesh = SubResource("QuadMesh_5wxv7") diff --git a/Prefabs/player.tscn b/Prefabs/player.tscn deleted file mode 100644 index 33d0123..0000000 --- a/Prefabs/player.tscn +++ /dev/null @@ -1,83 +0,0 @@ -[gd_scene load_steps=11 format=3 uid="uid://cx7gr555b1gov"] - -[ext_resource type="Texture2D" uid="uid://be7hl01iuo5af" path="res://Assets/Sprites/Characters/Player/kitsune-Sheet.png" id="1_5wxv7"] -[ext_resource type="Script" uid="uid://8drbh4rcl410" path="res://Scripts/PlayerMovement.cs" id="2_y5hcb"] - -[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_wrm1d"] -radius = 2.0 -height = 10.0 - -[sub_resource type="AtlasTexture" id="AtlasTexture_3dryh"] -atlas = ExtResource("1_5wxv7") -region = Rect2(0, 0, 16, 32) - -[sub_resource type="AtlasTexture" id="AtlasTexture_wowpa"] -atlas = ExtResource("1_5wxv7") -region = Rect2(16, 0, 16, 32) - -[sub_resource type="AtlasTexture" id="AtlasTexture_i6g32"] -atlas = ExtResource("1_5wxv7") -region = Rect2(32, 0, 16, 32) - -[sub_resource type="AtlasTexture" id="AtlasTexture_1l0tm"] -atlas = ExtResource("1_5wxv7") -region = Rect2(48, 0, 16, 32) - -[sub_resource type="AtlasTexture" id="AtlasTexture_v158k"] -atlas = ExtResource("1_5wxv7") -region = Rect2(64, 0, 16, 32) - -[sub_resource type="AtlasTexture" id="AtlasTexture_h4fw4"] -atlas = ExtResource("1_5wxv7") -region = Rect2(80, 0, 16, 32) - -[sub_resource type="SpriteFrames" id="SpriteFrames_ebmjs"] -animations = [{ -"frames": [{ -"duration": 1.0, -"texture": SubResource("AtlasTexture_3dryh") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_wowpa") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_i6g32") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_1l0tm") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_v158k") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_h4fw4") -}], -"loop": true, -"name": &"idle", -"speed": 8.0 -}] - -[node name="Player" type="CharacterBody2D"] -y_sort_enabled = true -texture_filter = 1 -collision_layer = 2 -collision_mask = 5 -motion_mode = 1 - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -position = Vector2(0, -2) -rotation = 1.5707964 -shape = SubResource("CapsuleShape2D_wrm1d") - -[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] -sprite_frames = SubResource("SpriteFrames_ebmjs") -animation = &"idle" -frame_progress = 0.8244228 -offset = Vector2(0, -16) - -[node name="Scripts" type="Node" parent="."] - -[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_body2D")] -script = ExtResource("2_y5hcb") -_body2D = NodePath("../..") -_speed = 4000.0 diff --git a/Resources/environment.tres b/Resources/environment.tres deleted file mode 100644 index 2e19eec..0000000 --- a/Resources/environment.tres +++ /dev/null @@ -1,86 +0,0 @@ -[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://b15j7vhkfu415"] - -[ext_resource type="Texture2D" uid="uid://cs7vjtoap8v26" path="res://Assets/Sprites/Environments/environment.png" id="1_weel8"] - -[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_12wsl"] -texture = ExtResource("1_weel8") -0:0/0 = 0 -0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, 8, 0, 0, 8, 0, 8, -8, -8, -8, -8, 8) -2:2/0 = 0 -2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0, 0, 0, -8, 8, -8, 8, 8, -8, 8) -1:2/0 = 0 -1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) -0:2/0 = 0 -0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -8, 0, 0, 8, 0, 8, 8, -8, 8) -0:1/0 = 0 -0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -8, 0, 8, -8, 8) -1:0/0 = 0 -1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0, -8, 0) -1:1/0 = 0 -2:1/0 = 0 -2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, 0, 8, 8, 8, 8, -8) -2:0/0 = 0 -2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0, 0, 0, 8, 8, 8, 8, -8, -8, -8) -3:0/0 = 0 -3:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, 8, 0, 0, 8, 0, 8, -8, -8, -8, -8, 8) -3:1/0 = 0 -3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, 0, 8, -8, 8, -8, -8) -3:2/0 = 0 -3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, 0, 0, 8, 0, 8, 8, -8, 8, -8, -8) -4:2/0 = 0 -4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) -4:1/0 = 0 -4:0/0 = 0 -4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, -8, -8, -8) -5:0/0 = 0 -5:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0, 0, 0, 8, 8, 8, 8, -8, -8, -8) -5:1/0 = 0 -5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, 0, 8, 8, 8, 8, -8) -5:2/0 = 0 -5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0, 0, 0, -8, 8, -8, 8, 8, -8, 8) -7:1/0 = 0 -8:1/0 = 0 -9:1/0 = 0 -7:2/0 = 0 -8:2/0 = 0 -9:2/0 = 0 -8:4/size_in_atlas = Vector2i(1, 2) -8:4/0 = 0 -8:4/0/texture_origin = Vector2i(0, 8) -8:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) -9:4/size_in_atlas = Vector2i(1, 2) -9:4/0 = 0 -9:4/0/texture_origin = Vector2i(0, 8) -9:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 6, 0, 6, 8, -8, 8) -0:4/size_in_atlas = Vector2i(4, 5) -0:4/0 = 0 -0:4/0/texture_origin = Vector2i(0, 32) -0:4/0/y_sort_origin = -4 -0:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -4, 8, -4, 12, 4, -12, 4) -7:4/size_in_atlas = Vector2i(1, 2) -7:4/0 = 0 -7:4/0/texture_origin = Vector2i(0, 8) -7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-6, 0, 8, 0, 8, 8, -6, 8) -4:7/size_in_atlas = Vector2i(2, 2) -4:7/0 = 0 -4:7/0/texture_origin = Vector2i(0, 8) -4:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 0, 16, 0, 12, 8, -12, 8) -5:6/0 = 0 -5:6/0/y_sort_origin = 4 -5:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 6, -6, 8, 6, 8, 8, 6, 8, 4, -8, 4) -7:7/size_in_atlas = Vector2i(1, 2) -7:7/0 = 0 -7:7/0/texture_origin = Vector2i(0, 8) -7:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0.9892235, 0, 8, 0, 8, 8, -8, 8) -8:7/size_in_atlas = Vector2i(1, 2) -8:7/0 = 0 -8:7/0/texture_origin = Vector2i(0, 8) -8:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) -9:7/size_in_atlas = Vector2i(1, 2) -9:7/0 = 0 -9:7/0/texture_origin = Vector2i(0, 8) -9:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) - -[resource] -physics_layer_0/collision_layer = 1 -sources/0 = SubResource("TileSetAtlasSource_12wsl") diff --git a/Resources/environmentSettings.tres b/Resources/environmentSettings.tres new file mode 100644 index 0000000..40ce194 --- /dev/null +++ b/Resources/environmentSettings.tres @@ -0,0 +1,8 @@ +[gd_resource type="Environment" format=3 uid="uid://cg7bginhcdl5w"] + +[resource] +background_mode = 3 +background_color = Color(0.1254902, 0.1254902, 0.1254902, 1) +ambient_light_color = Color(0.1254902, 0.1254902, 0.1254902, 1) +glow_enabled = true +glow_blend_mode = 1 diff --git a/Resources/environmentTileMap.tres b/Resources/environmentTileMap.tres new file mode 100644 index 0000000..674387a --- /dev/null +++ b/Resources/environmentTileMap.tres @@ -0,0 +1,383 @@ +[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://b15j7vhkfu415"] + +[ext_resource type="Texture2D" uid="uid://cs7vjtoap8v26" path="res://Assets/Sprites/Environments/environment.png" id="1_7wjyg"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_12wsl"] +texture = ExtResource("1_7wjyg") +0:0/0 = 0 +0:0/0/terrain_set = 0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, 8, 4, 4, 8, 0, 8, -4, 4, -4, 0, 0, -4, 4, -4, 8) +0:0/0/terrains_peering_bit/bottom_right_corner = 0 +2:2/0 = 0 +2:2/0/terrain_set = 0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0, -8, 4, -8, 4, -4, 0, 0, -4, 4, -8, 4) +2:2/0/terrains_peering_bit/top_left_corner = 0 +1:2/0 = 0 +1:2/0/terrain_set = 0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 4, -8, 4) +1:2/0/terrains_peering_bit/top_left_corner = 0 +1:2/0/terrains_peering_bit/top_side = 0 +1:2/0/terrains_peering_bit/top_right_corner = 0 +0:2/0 = 0 +0:2/0/terrain_set = 0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -8, 0, -8, 4, -4, 8, 0, 8, 4, 4, 4, 0, 0, -4, -4) +0:2/0/terrains_peering_bit/top_right_corner = 0 +0:1/0 = 0 +0:1/0/terrain_set = 0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -8, 0, -8, 0, 8, -4, 8) +0:1/0/terrains_peering_bit/right_side = 0 +0:1/0/terrains_peering_bit/bottom_right_corner = 0 +0:1/0/terrains_peering_bit/top_right_corner = 0 +1:0/0 = 0 +1:0/0/terrain_set = 0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -4, 8, -4, 8, 0, -8, 0) +1:0/0/terrains_peering_bit/bottom_right_corner = 0 +1:0/0/terrains_peering_bit/bottom_side = 0 +1:0/0/terrains_peering_bit/bottom_left_corner = 0 +1:1/0 = 0 +1:1/0/terrain_set = 0 +1:1/0/terrain = 0 +1:1/0/terrains_peering_bit/right_side = 0 +1:1/0/terrains_peering_bit/bottom_right_corner = 0 +1:1/0/terrains_peering_bit/bottom_side = 0 +1:1/0/terrains_peering_bit/bottom_left_corner = 0 +1:1/0/terrains_peering_bit/left_side = 0 +1:1/0/terrains_peering_bit/top_left_corner = 0 +1:1/0/terrains_peering_bit/top_side = 0 +1:1/0/terrains_peering_bit/top_right_corner = 0 +2:1/0 = 0 +2:1/0/terrain_set = 0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, 0, 8, 4, 8, 4, -8) +2:1/0/terrains_peering_bit/bottom_left_corner = 0 +2:1/0/terrains_peering_bit/left_side = 0 +2:1/0/terrains_peering_bit/top_left_corner = 0 +2:0/0 = 0 +2:0/0/terrain_set = 0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, -4, 4, 0, 8, 4, 8, 4, 4, 0, 0, -4, -4, -8, -4) +2:0/0/terrains_peering_bit/bottom_left_corner = 0 +3:0/0 = 0 +3:0/0/terrain_set = 0 +3:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, 8, 4, 8, 6, 6, 8, 4, 8, 0, 4, 4) +3:0/0/terrains_peering_bit/bottom_left_corner = 0 +3:0/0/terrains_peering_bit/left_side = 0 +3:0/0/terrains_peering_bit/top_left_corner = 0 +3:0/0/terrains_peering_bit/top_side = 0 +3:0/0/terrains_peering_bit/top_right_corner = 0 +3:1/0 = 0 +3:1/0/terrain_set = 0 +3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, 4, -8, 4, 8, 0, 8) +3:1/0/terrains_peering_bit/bottom_left_corner = 0 +3:1/0/terrains_peering_bit/left_side = 0 +3:1/0/terrains_peering_bit/top_left_corner = 0 +3:2/0 = 0 +3:2/0/terrain_set = 0 +3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 0, 8, -4, 6, -6, 4, -8, 0, -8, 4, -4) +3:2/0/terrains_peering_bit/bottom_right_corner = 0 +3:2/0/terrains_peering_bit/bottom_side = 0 +3:2/0/terrains_peering_bit/bottom_left_corner = 0 +3:2/0/terrains_peering_bit/left_side = 0 +3:2/0/terrains_peering_bit/top_left_corner = 0 +4:2/0 = 0 +4:2/0/terrain_set = 0 +4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 0, 8, -4, -8, -4, -8, 0) +4:2/0/terrains_peering_bit/bottom_right_corner = 0 +4:2/0/terrains_peering_bit/bottom_side = 0 +4:2/0/terrains_peering_bit/bottom_left_corner = 0 +4:1/0 = 0 +4:0/0 = 0 +4:0/0/terrain_set = 0 +4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, -8, 4, 8, 4, 8, 0) +4:0/0/terrains_peering_bit/top_left_corner = 0 +4:0/0/terrains_peering_bit/top_side = 0 +4:0/0/terrains_peering_bit/top_right_corner = 0 +5:0/0 = 0 +5:0/0/terrain_set = 0 +5:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, -8, 4, -6, 6, -4, 8, 0, 8, -4, 4) +5:0/0/terrains_peering_bit/right_side = 0 +5:0/0/terrains_peering_bit/bottom_right_corner = 0 +5:0/0/terrains_peering_bit/top_left_corner = 0 +5:0/0/terrains_peering_bit/top_side = 0 +5:0/0/terrains_peering_bit/top_right_corner = 0 +5:1/0 = 0 +5:1/0/terrain_set = 0 +5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, -4, -8, -4, 8, 0, 8) +5:1/0/terrains_peering_bit/right_side = 0 +5:1/0/terrains_peering_bit/bottom_right_corner = 0 +5:1/0/terrains_peering_bit/top_right_corner = 0 +5:2/0 = 0 +5:2/0/terrain_set = 0 +5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, -4, -8, -6, -6, -8, -4, -8, 0, -4, -4) +5:2/0/terrains_peering_bit/right_side = 0 +5:2/0/terrains_peering_bit/bottom_right_corner = 0 +5:2/0/terrains_peering_bit/bottom_side = 0 +5:2/0/terrains_peering_bit/bottom_left_corner = 0 +5:2/0/terrains_peering_bit/top_right_corner = 0 +8:4/size_in_atlas = Vector2i(1, 2) +8:4/next_alternative_id = 4 +8:4/0 = 0 +8:4/0/texture_origin = Vector2i(0, 8) +8:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) +9:4/size_in_atlas = Vector2i(1, 2) +9:4/0 = 0 +9:4/0/texture_origin = Vector2i(0, 8) +9:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 6, 0, 6, 8, -8, 8) +0:4/size_in_atlas = Vector2i(4, 5) +0:4/0 = 0 +0:4/0/texture_origin = Vector2i(0, 32) +0:4/0/y_sort_origin = -4 +0:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -4, 8, -4, 12, 4, -12, 4) +7:4/size_in_atlas = Vector2i(1, 2) +7:4/0 = 0 +7:4/0/texture_origin = Vector2i(0, 8) +7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-6, 0, 8, 0, 8, 8, -6, 8) +4:7/size_in_atlas = Vector2i(2, 2) +4:7/0 = 0 +4:7/0/texture_origin = Vector2i(0, 8) +4:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 0, 16, 0, 12, 8, -12, 8) +5:6/0 = 0 +5:6/0/y_sort_origin = 4 +5:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 6, -6, 8, 6, 8, 8, 6, 8, 4, -8, 4) +7:7/size_in_atlas = Vector2i(1, 2) +7:7/0 = 0 +7:7/0/texture_origin = Vector2i(0, 8) +7:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0.9892235, 0, 8, 0, 8, 8, -8, 8) +8:7/size_in_atlas = Vector2i(1, 2) +8:7/0 = 0 +8:7/0/texture_origin = Vector2i(0, 8) +8:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) +9:7/size_in_atlas = Vector2i(1, 2) +9:7/0 = 0 +9:7/0/texture_origin = Vector2i(0, 8) +9:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) +13:0/0 = 0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 0, 8, 0, 8, 8, -7, 8) +14:0/0 = 0 +14:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 0, -8, 0, -8, 8, 8, 8) +15:0/0 = 0 +15:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(7, 0, -8, 0, -8, 8, 7, 8) +13:1/0 = 0 +13:1/0/y_sort_origin = -8 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -8, -7, -8, -7, 8, -6, 8, -6, 16, -4, 16) +15:1/0 = 0 +15:1/0/y_sort_origin = -8 +15:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, -8, 7, -8, 7, 8, 6, 8, 6, 16, 4, 16) +13:2/0 = 0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-6, 0, 8, 0, 8, 8, -6, 8) +15:2/0 = 0 +15:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(6, 0, -8, 0, -8, 8, 6, 8) +16:0/0 = 0 +16:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, 0, 8, 0, 8, 8, 4, 8) +16:1/next_alternative_id = 2 +16:1/0 = 0 +16:1/0/y_sort_origin = -8 +16:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, -8, 7, -8, 7, 8, 4, 8) +16:2/0 = 0 +16:2/0/y_sort_origin = 7 +16:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, -8, 7, -8, 7, 8, 4, 8) +17:0/0 = 0 +17:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) +18:0/0 = 0 +18:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) +19:0/0 = 0 +19:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, 0, -8, 0, -8, 8, -4, 8) +19:1/next_alternative_id = 2 +19:1/0 = 0 +19:1/0/y_sort_origin = -8 +19:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -8, -7, -8, -7, 8, -4, 8) +19:2/0 = 0 +19:2/0/y_sort_origin = 7 +19:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -8, -7, -8, -7, 8, -4, 8) +14:6/size_in_atlas = Vector2i(1, 2) +14:6/0 = 0 +14:6/0/texture_origin = Vector2i(0, 8) +14:6/0/y_sort_origin = 7 +14:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -24, -7, -24, -7, 8, -4, 8) +14:4/size_in_atlas = Vector2i(1, 2) +14:4/0 = 0 +14:4/0/texture_origin = Vector2i(0, 8) +14:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 0, -7, 0, -7, 8, 8, 8) +15:4/size_in_atlas = Vector2i(1, 2) +15:4/0 = 0 +15:4/0/texture_origin = Vector2i(0, 8) +15:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 0, -8, 0, -8, 8, 8, 8) +16:4/size_in_atlas = Vector2i(1, 2) +16:4/0 = 0 +16:4/0/texture_origin = Vector2i(0, 8) +16:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, 0, -8, 0, -8, 8, -6, 8, -6, 32, -4, 32) +16:6/size_in_atlas = Vector2i(1, 2) +16:6/0 = 0 +16:6/0/texture_origin = Vector2i(0, 8) +16:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 0, -6, 0, -6, 8, 8, 8) +17:6/size_in_atlas = Vector2i(1, 2) +17:6/0 = 0 +17:6/0/texture_origin = Vector2i(0, 8) +17:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 6, 0, 6, 8, -8, 8) +17:4/size_in_atlas = Vector2i(1, 2) +17:4/0 = 0 +17:4/0/texture_origin = Vector2i(0, 8) +17:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, 0, 8, 0, 8, 8, 6, 8, 6, 32, 4, 32) +18:4/size_in_atlas = Vector2i(1, 2) +18:4/0 = 0 +18:4/0/texture_origin = Vector2i(0, 8) +18:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) +19:4/size_in_atlas = Vector2i(1, 2) +19:4/0 = 0 +19:4/0/texture_origin = Vector2i(0, 8) +19:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 7, 0, 7, 8, -8, 8) +19:6/size_in_atlas = Vector2i(1, 2) +19:6/0 = 0 +19:6/0/texture_origin = Vector2i(0, 8) +19:6/0/y_sort_origin = 7 +19:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, -24, 7, -24, 7, 8, 4, 8) +9:2/0 = 0 +8:2/0 = 0 +7:2/0 = 0 +9:1/0 = 0 +8:1/0 = 0 +7:1/0 = 0 +11:6/size_in_atlas = Vector2i(2, 3) +11:6/0 = 0 +11:6/0/texture_origin = Vector2i(0, 16) +11:6/0/y_sort_origin = 5 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, -16, 5, 16, 5, 16, 8) +20:1/0 = 0 +20:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(6, 0, 8, 0, 8, 8, 6, 8) +23:1/0 = 0 +23:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-6, 8, -8, 8, -8, 0, -6, 0) +20:3/size_in_atlas = Vector2i(1, 2) +20:3/next_alternative_id = 2 +20:3/0 = 0 +20:3/0/texture_origin = Vector2i(0, 8) +20:3/0/y_sort_origin = 7 +20:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 0, 6, 0, 6, 8, 8, 8) +20:3/1 = 1 +20:3/1/texture_origin = Vector2i(0, 8) +20:3/1/y_sort_origin = -24 +20:3/1/physics_layer_0/polygon_0/points = PackedVector2Array(6, 8, 8, 8, 8, -24, 4, -24, 4, -20, 6, -20) +23:3/size_in_atlas = Vector2i(1, 2) +23:3/next_alternative_id = 2 +23:3/0 = 0 +23:3/0/texture_origin = Vector2i(0, 8) +23:3/0/y_sort_origin = 7 +23:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 8, -6, 8, -6, 0, -8, 0) +23:3/1 = 1 +23:3/1/texture_origin = Vector2i(0, 8) +23:3/1/y_sort_origin = -24 +23:3/1/physics_layer_0/polygon_0/points = PackedVector2Array(-6, 8, -8, 8, -8, -24, -4, -24, -4, -20, -6, -20) +7:0/0 = 0 +8:0/0 = 0 +9:0/0 = 0 +21:6/0 = 0 +21:6/0/terrain_set = 1 +21:6/0/terrain = 0 +21:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +21:6/0/terrains_peering_bit/right_side = 0 +21:6/0/terrains_peering_bit/bottom_side = 0 +21:7/0 = 0 +21:7/0/terrain_set = 1 +21:7/0/terrain = 0 +21:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +21:7/0/terrains_peering_bit/bottom_side = 0 +21:7/0/terrains_peering_bit/top_side = 0 +21:8/0 = 0 +21:8/0/terrain_set = 1 +21:8/0/terrain = 0 +21:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +21:8/0/terrains_peering_bit/right_side = 0 +21:8/0/terrains_peering_bit/top_side = 0 +22:8/0 = 0 +22:8/0/terrain_set = 1 +22:8/0/terrain = 0 +22:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +22:8/0/terrains_peering_bit/right_side = 0 +22:8/0/terrains_peering_bit/left_side = 0 +23:8/0 = 0 +23:8/0/terrain_set = 1 +23:8/0/terrain = 0 +23:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +23:8/0/terrains_peering_bit/left_side = 0 +23:8/0/terrains_peering_bit/top_side = 0 +23:7/0 = 0 +23:7/0/terrain_set = 1 +23:7/0/terrain = 0 +23:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +23:7/0/terrains_peering_bit/bottom_side = 0 +23:7/0/terrains_peering_bit/top_side = 0 +23:6/0 = 0 +23:6/0/terrain_set = 1 +23:6/0/terrain = 0 +23:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +23:6/0/terrains_peering_bit/bottom_side = 0 +23:6/0/terrains_peering_bit/left_side = 0 +22:6/0 = 0 +22:6/0/terrain_set = 1 +22:6/0/terrain = 0 +22:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +22:6/0/terrains_peering_bit/right_side = 0 +22:6/0/terrains_peering_bit/left_side = 0 +24:8/0 = 0 +24:8/0/terrain_set = 1 +24:8/0/terrain = 0 +24:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +24:8/0/terrains_peering_bit/top_side = 0 +24:7/0 = 0 +24:7/0/terrain_set = 1 +24:7/0/terrain = 0 +24:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +24:7/0/terrains_peering_bit/bottom_side = 0 +24:6/0 = 0 +24:6/0/terrain_set = 1 +24:6/0/terrain = 0 +24:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +24:6/0/terrains_peering_bit/right_side = 0 +24:6/0/terrains_peering_bit/bottom_side = 0 +24:6/0/terrains_peering_bit/left_side = 0 +24:6/0/terrains_peering_bit/top_side = 0 +25:6/0 = 0 +25:6/0/terrain_set = 1 +25:6/0/terrain = 0 +25:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +25:6/0/terrains_peering_bit/right_side = 0 +25:6/0/terrains_peering_bit/bottom_side = 0 +25:6/0/terrains_peering_bit/left_side = 0 +25:7/0 = 0 +25:7/0/terrain_set = 1 +25:7/0/terrain = 0 +25:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +25:7/0/terrains_peering_bit/right_side = 0 +25:7/0/terrains_peering_bit/bottom_side = 0 +25:7/0/terrains_peering_bit/top_side = 0 +26:7/0 = 0 +26:7/0/terrain_set = 1 +26:7/0/terrain = 0 +26:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +26:7/0/terrains_peering_bit/right_side = 0 +26:7/0/terrains_peering_bit/left_side = 0 +26:7/0/terrains_peering_bit/top_side = 0 +26:6/0 = 0 +26:6/0/terrain_set = 1 +26:6/0/terrain = 0 +26:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +26:6/0/terrains_peering_bit/bottom_side = 0 +26:6/0/terrains_peering_bit/left_side = 0 +26:6/0/terrains_peering_bit/top_side = 0 +25:8/0 = 0 +25:8/0/terrain_set = 1 +25:8/0/terrain = 0 +25:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +25:8/0/terrains_peering_bit/right_side = 0 +26:8/0 = 0 +26:8/0/terrain_set = 1 +26:8/0/terrain = 0 +26:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +26:8/0/terrains_peering_bit/left_side = 0 + +[resource] +physics_layer_0/collision_layer = 1 +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "Terrain 0" +terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +terrain_set_1/mode = 0 +terrain_set_1/terrain_0/name = "Terrain 0" +terrain_set_1/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +sources/0 = SubResource("TileSetAtlasSource_12wsl") diff --git a/Scenes/game.tscn b/Scenes/game.tscn index b6cad98..31c4884 100644 --- a/Scenes/game.tscn +++ b/Scenes/game.tscn @@ -1,46 +1,273 @@ -[gd_scene load_steps=6 format=4 uid="uid://csyk43kt3xbyx"] +[gd_scene load_steps=23 format=4 uid="uid://csyk43kt3xbyx"] -[ext_resource type="TileSet" uid="uid://b15j7vhkfu415" path="res://Resources/environment.tres" id="1_ebmjs"] +[ext_resource type="TileSet" uid="uid://b15j7vhkfu415" path="res://Resources/environmentTileMap.tres" id="1_ebmjs"] [ext_resource type="Script" uid="uid://djp8dmixf6sq2" path="res://Scripts/Common/GameController.cs" id="1_i6g32"] -[ext_resource type="PackedScene" uid="uid://cx7gr555b1gov" path="res://Prefabs/player.tscn" id="3_3dryh"] -[ext_resource type="PackedScene" uid="uid://y54cvugsx75b" path="res://Prefabs/Enemies/rock_boi.tscn" id="5_wowpa"] +[ext_resource type="Script" uid="uid://bhxyvnirfeipr" path="res://Scripts/Enemies/EnemyPool.cs" id="2_i6g32"] +[ext_resource type="Script" uid="uid://cds2rrl4yjexf" path="res://Scripts/Enemies/EnemySpawner.cs" id="3_1l0tm"] +[ext_resource type="Texture2D" uid="uid://bnq8qxou2sgvw" path="res://Assets/Sprites/Environments/sakura.png" id="5_i6g32"] +[ext_resource type="PackedScene" uid="uid://y54cvugsx75b" path="res://Prefabs/Enemies/stone.tscn" id="5_wowpa"] +[ext_resource type="Texture2D" uid="uid://cs7vjtoap8v26" path="res://Assets/Sprites/Environments/environment.png" id="6_i6g32"] +[ext_resource type="Texture2D" uid="uid://dxon2g2sn48jq" path="res://Assets/Sprites/Projectiles/blueflame.png" id="8_ldgsr"] +[ext_resource type="Script" uid="uid://dxx6nyrs12mr6" path="res://Scripts/Common/ProjectileParent.cs" id="8_v158k"] +[ext_resource type="Script" uid="uid://df0osorq00h7v" path="res://Scripts/CameraController.cs" id="10_ldgsr"] -[sub_resource type="NavigationPolygon" id="NavigationPolygon_wrm1d"] -vertices = PackedVector2Array(-114.07031, 51, -115, 51, -115, 50.070313, -43, -27, -43, -34.820313, -39.09375, -27, -85, 51, -93.92969, 51, -91, 48.070313, -85, 43, 80.07031, -11, 85, -15.9296875, 92.90625, -17, 83.90625, 1, 51, 19, 194.35156, -122.36719, 204, -61.59375, 204, 8.03125, 149, -27, 149, -53, 170.78125, -142.3125, -91, 39, -75, 21, 51, 37, 75, 27, 75, 53, 59, 75, 16.070313, -59, 21, -63.929688, 43, -75, 43, -61.179688, 35.90625, -47, 11, -25, 149, 21, 149, -21, 204.99219, 82.72656, 85, -25, 91, -27, 27, -75, 21, -73, 123, -53, 123, -45, 117, -45, 117, -69, 91, -69, 91, -61, 85, -61, 85, -85, 69, -85, 69, -101, 105.5, -154.00781, 53, -101, 53, -117, 11, -117, 11, -99, 5, -99, 5, -117, 7.96875, -156.99219, -37, -91, -29, -91, -29, -85, -69, -85, -69, -59, -61, -59, -61, -53, -101, -53, -101, -11, -93, -11, -93, -5, -133, -5, -115, 21, -115, 13, -101, 13, -101, 21, -75, 5, -63.929688, 5, -59, 43, -59, -9, -75, -9, -75, -21, -69, -27, -83, -21, -83, -35, -69, -35, -43, -45, -43, -67, -37, -67, -37, -59, 0.09375, -45, -11, -59, -11, -99, -5, -73, 27, -99, -5, -63.929688, 59, -47, 59, -43, 37, -25, 91, -43, 59, -25, 131, -21, 131, -5, 121.09375, -5, 115.09375, -17, 59, -15.9296875, 37, -15.9296875, -0.0703125, -59, 107, 1, 107, 11, 91, 11, 91, 27, 83, 53, 83, 75, 59, 95, 44.90625, 95, -3, 37, 35.90625, 113, 67, 113, 67, 131, 27, 131, 21, 112.07031, 21, 103, 16.070313, 117, 21, 131, 27, 149, 21, 149, -19, 131, -0.0703125, 117, -19, 101, -5, 112.07031, -11, 101, -5, 103, -60.09375, 81, -37, 81, -37, 83, -67, 83, -67, 69, -59, 69, -51.09375, 63, -115, 39, -115, 27, -133, 69, -85, 69, -85, 101, -148.60156, 175.10156, -173.40625, 162.70313, -183.03125, 94.39844, -37, 101, -37, 149, -76.6875, 182, 168.10938, 173.17188, 90.77344, 181, 85, 149, 85, 101, 101, 101, 196.29688, 152.25, 101, 53, 117, 53, 117, 37, 133, 37, 133, 21, -8.90625, -27, 11, -15.9296875, -3, 19, -72.63281, -155, -37, -117, -157.07813, -144.32031, -178.24219, -112.11719, -188, -52.5625, -189.99219, 9.921875, -133, 21, 63.929688, -11, -11, 75, -22.90625, 75, -28.90625, 63, 7.9296875, 182.99219, -59, 0.0703125, 32.070313, -11, 15.9296875, -11, -133, 27) -polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2), PackedInt32Array(3, 4, 5), PackedInt32Array(6, 7, 8, 9), PackedInt32Array(10, 11, 12, 13, 14), PackedInt32Array(15, 16, 17, 18, 19, 20), PackedInt32Array(9, 8, 21, 22), PackedInt32Array(23, 14, 24, 25, 26), PackedInt32Array(27, 28, 29, 30, 31, 32), PackedInt32Array(33, 34, 17, 35), PackedInt32Array(18, 17, 34), PackedInt32Array(12, 11, 36, 37), PackedInt32Array(38, 29, 28, 39), PackedInt32Array(40, 41, 42, 43), PackedInt32Array(44, 45, 46, 47), PackedInt32Array(47, 48, 49, 50), PackedInt32Array(49, 51, 52, 50), PackedInt32Array(53, 54, 55, 56, 57), PackedInt32Array(58, 59, 60, 61), PackedInt32Array(62, 63, 64, 65), PackedInt32Array(66, 67, 68, 69), PackedInt32Array(70, 71, 72, 73), PackedInt32Array(22, 74, 75, 76), PackedInt32Array(77, 78, 79, 80, 3), PackedInt32Array(79, 81, 82, 83, 80), PackedInt32Array(84, 85, 86, 87), PackedInt32Array(88, 84, 87, 89), PackedInt32Array(89, 90, 55, 91), PackedInt32Array(54, 92, 38, 39, 91), PackedInt32Array(55, 54, 91), PackedInt32Array(89, 91, 93), PackedInt32Array(31, 94, 95, 96, 32), PackedInt32Array(95, 97, 37, 36, 98), PackedInt32Array(37, 18, 34, 99), PackedInt32Array(99, 100, 101, 102), PackedInt32Array(37, 99, 102, 12), PackedInt32Array(98, 103, 14, 104, 96), PackedInt32Array(95, 98, 96), PackedInt32Array(105, 27, 32, 88), PackedInt32Array(13, 106, 107, 108), PackedInt32Array(13, 108, 109, 24, 14), PackedInt32Array(25, 110, 111, 26), PackedInt32Array(26, 112, 113, 114, 23), PackedInt32Array(115, 116, 117, 118), PackedInt32Array(115, 118, 119, 120), PackedInt32Array(121, 119, 118, 122), PackedInt32Array(118, 123, 124, 122), PackedInt32Array(121, 122, 125, 126), PackedInt32Array(126, 125, 127, 128), PackedInt32Array(128, 127, 129, 130), PackedInt32Array(131, 132, 133, 134), PackedInt32Array(131, 134, 135, 136), PackedInt32Array(137, 131, 136), PackedInt32Array(137, 136, 76), PackedInt32Array(21, 138, 139, 73, 22), PackedInt32Array(140, 141, 142, 143, 144, 145), PackedInt32Array(142, 146, 147, 148, 143), PackedInt32Array(149, 150, 151, 152, 153, 154), PackedInt32Array(153, 155, 156, 35, 154), PackedInt32Array(156, 157, 158, 35), PackedInt32Array(158, 159, 33, 35), PackedInt32Array(88, 89, 93, 105), PackedInt32Array(160, 88, 32, 161, 162), PackedInt32Array(113, 115, 120, 114), PackedInt32Array(50, 20, 19, 40, 43), PackedInt32Array(50, 43, 44, 47), PackedInt32Array(57, 50, 52, 53), PackedInt32Array(163, 57, 56, 164), PackedInt32Array(165, 163, 164, 58, 61, 166), PackedInt32Array(167, 166, 61, 62, 65), PackedInt32Array(167, 65, 66, 69), PackedInt32Array(168, 167, 69, 169, 145), PackedInt32Array(170, 10, 14), PackedInt32Array(114, 120, 130, 129, 171), PackedInt32Array(114, 171, 172, 173), PackedInt32Array(151, 150, 174, 123), PackedInt32Array(124, 123, 174), PackedInt32Array(147, 124, 174, 148), PackedInt32Array(3, 5, 162, 114, 173, 137, 76, 175), PackedInt32Array(103, 170, 14), PackedInt32Array(176, 104, 14), PackedInt32Array(176, 14, 162, 177), PackedInt32Array(161, 177, 162), PackedInt32Array(5, 160, 162), PackedInt32Array(178, 140, 145), PackedInt32Array(178, 145, 169), PackedInt32Array(178, 169, 70, 139), PackedInt32Array(139, 70, 73), PackedInt32Array(76, 9, 22), PackedInt32Array(76, 75, 175), PackedInt32Array(3, 175, 77)]) -outlines = Array[PackedVector2Array]([PackedVector2Array(-160, -149, -73, -160, 8, -162, 106, -159, 173, -147, 199, -125, 209, -62, 209, 8, 210, 83, 201, 155, 170, 178, 91, 186, 8, 188, -77, 187, -150, 180, -178, 166, -188, 95, -195, 10, -193, -53, -183, -114)]) -parsed_geometry_type = 1 -agent_radius = 5.0 +[sub_resource type="RectangleShape2D" id="RectangleShape2D_1l0tm"] +size = Vector2(19, 11) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1l0tm"] +atlas = ExtResource("6_i6g32") +region = Rect2(176, 107, 32, 37) + +[sub_resource type="AtlasTexture" id="AtlasTexture_o5yvi"] +atlas = ExtResource("8_ldgsr") +region = Rect2(0, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rku1e"] +atlas = ExtResource("8_ldgsr") +region = Rect2(16, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rfjv2"] +atlas = ExtResource("8_ldgsr") +region = Rect2(32, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1phco"] +atlas = ExtResource("8_ldgsr") +region = Rect2(48, 0, 16, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_nb51f"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_o5yvi") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rku1e") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rfjv2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1phco") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[sub_resource type="Curve2D" id="Curve2D_wowpa"] +_data = { +"points": PackedVector2Array(0, 0, 0, 0, -376, 8, 0, 0, 0, 0, -232, 8, 0, 0, 0, 0, -232, 24, 0, 0, 0, 0, -216, 24, 0, 0, 0, 0, -216, 40, 0, 0, 0, 0, -184, 40, 0, 0, 0, 0, -184, 136, 0, 0, 0, 0, -200, 136, 0, 0, 0, 0, -200, 168, 0, 0, 0, 0, -184, 168, 0, 0, 0, 0, -184, 200, 0, 0, 0, 0, -136, 200, 0, 0, 0, 0, -136, 216, 0, 0, 0, 0, -24, 216, 0, 0, 0, 0, -24, 232, 0, 0, 0, 0, 24, 232, 0, 0, 0, 0, 24, 136, 0, 0, 0, 0, 40, 136, 0, 0, 0, 0, 40, 120, 0, 0, 0, 0, 72, 120, 0, 0, 0, 0, 72, 88, 0, 0, 0, 0, 104, 88, 0, 0, 0, 0, 104, 8, 0, 0, 0, 0, 8, 8) +} +point_count = 24 + +[sub_resource type="Curve2D" id="Curve2D_i6g32"] +_data = { +"points": PackedVector2Array(0, 0, 0, 0, 24, -344, 0, 0, 0, 0, 24, -264, 0, 0, 0, 0, 8, -264, 0, 0, 0, 0, 8, -232, 0, 0, 0, 0, -8, -232, 0, 0, 0, 0, -8, -216, 0, 0, 0, 0, -24, -216, 0, 0, 0, 0, -24, -184, 0, 0, 0, 0, -40, -184, 0, 0, 0, 0, -40, -168, 0, 0, 0, 0, -136, -168, 0, 0, 0, 0, -136, -152, 0, 0, 0, 0, -168, -152, 0, 0, 0, 0, -168, -120, 0, 0, 0, 0, -184, -120, 0, 0, 0, 0, -184, 8, 0, 0, 0, 0, -168, 8, 0, 0, 0, 0, -168, 24, 0, 0, 0, 0, -120, 24, 0, 0, 0, 0, -120, 40, 0, 0, 0, 0, -104, 40, 0, 0, 0, 0, -104, 72, 0, 0, 0, 0, -88, 72, 0, 0, 0, 0, -88, 88, 0, 0, 0, 0, -56, 88, 0, 0, 0, 0, -56, 104, 0, 0, 0, 0, 8, 104, 0, 0, 0, 0, 8, 8) +} +point_count = 28 + +[sub_resource type="Curve2D" id="Curve2D_1l0tm"] +_data = { +"points": PackedVector2Array(0, 0, 0, 0, 408, 8, 0, 0, 0, 0, 232, 8, 0, 0, 0, 0, 232, -24, 0, 0, 0, 0, 200, -24, 0, 0, 0, 0, 200, -56, 0, 0, 0, 0, 216, -56, 0, 0, 0, 0, 216, -136, 0, 0, 0, 0, 184, -136, 0, 0, 0, 0, 184, -152, 0, 0, 0, 0, 168, -152, 0, 0, 0, 0, 168, -168, 0, 0, 0, 0, 152, -168, 0, 0, 0, 0, 152, -184, 0, 0, 0, 0, 104, -184, 0, 0, 0, 0, 104, -168, 0, 0, 0, 0, 40, -168, 0, 0, 0, 0, 40, -152, 0, 0, 0, 0, -8, -152, 0, 0, 0, 0, -8, -120, 0, 0, 0, 0, -24, -120, 0, 0, 0, 0, -24, -104, 0, 0, 0, 0, -56, -104, 0, 0, 0, 0, -56, -72, 0, 0, 0, 0, -88, -72, 0, 0, 0, 0, -88, -56, 0, 0, 0, 0, -104, -56, 0, 0, 0, 0, -104, -8, 0, 0, 0, 0, -56, -8, 0, 0, 0, 0, -56, 8, 0, 0, 0, 0, 8, 8) +} +point_count = 30 + +[sub_resource type="Curve2D" id="Curve2D_v158k"] +_data = { +"points": PackedVector2Array(0, 0, 0, 0, 8, 400, 0, 0, 0, 0, 8, 280, 0, 0, 0, 0, 56, 280, 0, 0, 0, 0, 56, 264, 0, 0, 0, 0, 72, 264, 0, 0, 0, 0, 72, 200, 0, 0, 0, 0, 152, 200, 0, 0, 0, 0, 152, 216, 0, 0, 0, 0, 184, 216, 0, 0, 0, 0, 184, 168, 0, 0, 0, 0, 216, 168, 0, 0, 0, 0, 216, 72, 0, 0, 0, 0, 200, 72, 0, 0, 0, 0, 200, 24, 0, 0, 0, 0, 152, 24, 0, 0, 0, 0, 152, 8, 0, 0, 0, 0, 136, 8, 0, 0, 0, 0, 136, -40, 0, 0, 0, 0, 120, -40, 0, 0, 0, 0, 120, -72, 0, 0, 0, 0, 88, -72, 0, 0, 0, 0, 88, -88, 0, 0, 0, 0, 56, -88, 0, 0, 0, 0, 56, -104, 0, 0, 0, 0, 24, -104, 0, 0, 0, 0, 24, -88, 0, 0, 0, 0, 8, -88, 0, 0, 0, 0, 8, 8) +} +point_count = 28 + +[sub_resource type="Environment" id="Environment_h4fw4"] +background_mode = 3 +ssr_fade_in = 0.03498875 +glow_enabled = true +glow_intensity = 1.0 +glow_strength = 0.7 +glow_blend_mode = 0 +glow_hdr_scale = 0.0 +fog_light_energy = 4.7 +fog_sun_scatter = 5.5 +fog_sky_affect = 0.0 +fog_height = -898.42 +fog_height_density = 0.07 +adjustment_enabled = true +adjustment_brightness = 0.75 +adjustment_contrast = 1.1 [node name="Root" type="Node2D"] texture_filter = 1 -[node name="GameController" type="Node" parent="." node_paths=PackedStringArray("Player")] +[node name="TurretController" type="Node" parent="."] + +[node name="GameController" type="Node" parent="."] script = ExtResource("1_i6g32") -Player = NodePath("../NavigationRegion2D/YSorted/Player") -[node name="Camera2D" type="Camera2D" parent="."] -zoom = Vector2(2, 2) +[node name="EnemyController" type="Node" parent="."] -[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."] +[node name="EnemyPool" type="Node" parent="EnemyController"] +script = ExtResource("2_i6g32") +_scenes = Dictionary[int, PackedScene]({ +0: ExtResource("5_wowpa") +}) + +[node name="EnemySpawner" type="Node" parent="EnemyController" node_paths=PackedStringArray("_pathParent", "_pool")] +script = ExtResource("3_1l0tm") +_pathParent = NodePath("../../Level/YSorted/EnemyPaths") +_pool = NodePath("../EnemyPool") + +[node name="Level" type="Node2D" parent="."] position = Vector2(-8, -8) -navigation_polygon = SubResource("NavigationPolygon_wrm1d") -[node name="BaseLayer" type="TileMapLayer" parent="NavigationRegion2D"] -tile_map_data = PackedByteArray("AAAAAP//AAABAAEAAAD/////AAABAAEAAAD//wAAAAABAAEAAAAAAAAAAAABAAEAAAABAP7/AAABAAEAAAAAAP7/AAABAAEAAAD///7/AAABAAEAAAD+////AAABAAEAAAD+/wAAAAABAAEAAAD+//7/AAABAAEAAAD9////AAABAAEAAAD9/wAAAAABAAEAAAD9/wEAAAABAAEAAAD9/wIAAAABAAEAAAD+/wIAAAABAAEAAAD//wIAAAABAAEAAAAAAAIAAAABAAEAAAABAAEAAAABAAEAAAABAAAAAAABAAEAAAABAP//AAABAAEAAAD//wEAAAABAAEAAAAAAAEAAAABAAEAAAABAAIAAAABAAEAAAABAAMAAAABAAEAAAACAAMAAAABAAEAAAACAAIAAAABAAEAAAADAAIAAAABAAEAAAADAAEAAAABAAEAAAACAAEAAAABAAEAAAACAAAAAAABAAEAAAACAP//AAABAAEAAAACAP7/AAABAAEAAAD+/wEAAAABAAEAAAAAAAMAAAABAAEAAAD//wMAAAABAAEAAAD+/wMAAAABAAEAAAD9/wMAAAABAAEAAAD8/wMAAAABAAEAAAD8/wIAAAABAAEAAAD8/wEAAAABAAEAAAD8/wAAAAABAAEAAAD8////AAABAAEAAAD8//7/AAABAAEAAAD9//7/AAABAAEAAAD9//3/AAABAAEAAAD+//3/AAABAAEAAAD///3/AAABAAEAAAAAAP3/AAABAAEAAAABAP3/AAABAAEAAAACAP3/AAABAAEAAAADAP7/AAABAAEAAAADAP//AAABAAEAAAADAAAAAAABAAEAAAADAAMAAAABAAEAAAADAP3/AAABAAEAAAD8//3/AAAFAAIAAAD8/wQAAAABAAEAAAD9/wQAAAABAAEAAAD+/wQAAAABAAEAAAD//wQAAAABAAEAAAAAAAQAAAABAAEAAAABAAQAAAABAAEAAAACAAQAAAABAAEAAAADAAQAAAABAAEAAAADAAUAAAABAAEAAAACAAUAAAABAAEAAAABAAUAAAABAAEAAAAAAAUAAAABAAEAAAD//wUAAAABAAEAAAD+/wUAAAAFAAAAAAD9/wUAAAABAAIAAAD8/wUAAAABAAIAAAD8//z/AAAFAAEAAAD9//z/AAABAAEAAAD+//z/AAABAAEAAAD///z/AAABAAEAAAAAAPz/AAABAAEAAAABAPz/AAABAAEAAAACAPz/AAABAAEAAAADAPz/AAABAAEAAAAEAPz/AAADAAIAAAAEAP3/AAABAAEAAAAEAP7/AAABAAEAAAAEAP//AAABAAEAAAAEAAAAAAABAAEAAAAEAAEAAAABAAEAAAAEAAIAAAABAAEAAAAEAAMAAAABAAEAAAAEAAQAAAABAAEAAAAEAAUAAAADAAAAAAD7/wQAAAAAAAEAAAD7/wUAAAAAAAIAAAD7/wMAAAAFAAAAAAD7/wIAAAABAAEAAAD7/wEAAAABAAEAAAD7/wAAAAABAAEAAAD7////AAABAAEAAAD7//7/AAABAAEAAAD7//3/AAABAAAAAAAFAPz/AAAEAAIAAAAFAP3/AAABAAEAAAAFAP7/AAABAAEAAAAFAP//AAABAAEAAAAFAAAAAAABAAEAAAAFAAEAAAABAAEAAAAFAAIAAAADAAAAAAAFAAMAAAACAAEAAAAFAAQAAAACAAEAAAAFAAUAAAACAAIAAAD6/wUAAAAEAAEAAAD6/wQAAAAEAAEAAAD6/wMAAAABAAIAAAD6/wIAAAABAAEAAAD6/wEAAAABAAEAAAD6/wAAAAAFAAIAAAD6////AAAFAAEAAAD6//7/AAAAAAEAAAD6//3/AAAAAAAAAAD6//z/AAAEAAEAAAD6//v/AAAEAAEAAAD7//v/AAAEAAEAAAD8//v/AAAAAAAAAAD9//v/AAABAAAAAAD+//v/AAAFAAIAAAD///v/AAABAAEAAAAAAPv/AAABAAEAAAABAPv/AAABAAEAAAACAPv/AAABAAEAAAADAPv/AAADAAIAAAAEAPv/AAACAAAAAAAFAPv/AAAEAAEAAAAGAPv/AAAEAAEAAAAGAPz/AAACAAAAAAAGAP3/AAADAAIAAAAGAP7/AAABAAEAAAAGAP//AAABAAEAAAAGAAAAAAABAAEAAAAGAAEAAAADAAAAAAAGAAIAAAACAAIAAAAGAAMAAAAEAAEAAAAHAAMAAAAEAAEAAAAHAAQAAAAEAAEAAAAGAAQAAAAEAAEAAAAGAAUAAAAEAAEAAAAHAAUAAAAEAAEAAAAHAAIAAAAEAAEAAAAHAAEAAAACAAIAAAAHAAAAAAADAAAAAAAHAP//AAABAAEAAAAHAP7/AAABAAEAAAAHAP3/AAAEAAIAAAAHAPv/AAAEAAEAAAAHAPr/AAAEAAEAAAAGAPr/AAAEAAEAAAAHAPz/AAAEAAEAAAAFAPr/AAAEAAEAAAAEAPr/AAAEAAEAAAADAPr/AAACAAAAAAACAPr/AAADAAIAAAABAPr/AAABAAEAAAAAAPr/AAABAAEAAAD///r/AAABAAEAAAD+//r/AAAFAAEAAAD9//r/AAAEAAEAAAD8//r/AAAEAAEAAAD7//r/AAAEAAEAAAD6//r/AAAEAAEAAAD5//r/AAAEAAEAAAD4//r/AAAEAAEAAAD4//v/AAAEAAEAAAD5//v/AAAEAAEAAAD5//z/AAAEAAEAAAD5//3/AAAEAAEAAAD5//7/AAAEAAEAAAD5////AAAEAAEAAAD4////AAAEAAEAAAD4/wAAAAAAAAAAAAD4/wEAAAAEAAEAAAD4/wIAAAAAAAEAAAD4/wMAAAAAAAIAAAD4/wQAAAAEAAEAAAD4/wUAAAAEAAEAAAD5/wUAAAAEAAEAAAD5/wQAAAAEAAEAAAD5/wMAAAABAAIAAAD5/wIAAAABAAEAAAD5/wEAAAABAAEAAAD4//z/AAAEAAEAAAD4//3/AAAEAAEAAAD4//7/AAAEAAEAAAD5/wAAAAABAAAAAAD4/wYAAAAEAAEAAAD5/wcAAAAEAAEAAAD5/wgAAAAEAAEAAAD6/wkAAAAEAAEAAAD4/wcAAAAEAAEAAAD4/wgAAAAEAAEAAAD4/wkAAAAEAAEAAAD5/wkAAAAEAAEAAAD6/wgAAAAEAAEAAAD5/wYAAAAEAAEAAAD6/wYAAAAEAAEAAAD6/wcAAAAEAAEAAAD7/wYAAAAEAAEAAAD7/wcAAAAEAAEAAAD7/wgAAAAEAAEAAAD7/wkAAAAEAAEAAAD8/wYAAAAEAAEAAAD8/wcAAAAEAAEAAAD8/wgAAAAEAAEAAAD8/wkAAAAEAAEAAAD9/wYAAAAEAAEAAAD9/wcAAAAEAAEAAAD9/wgAAAAEAAEAAAD9/wkAAAAEAAEAAAD+/wYAAAAAAAEAAAD+/wcAAAAAAAEAAAD+/wgAAAAAAAIAAAD+/wkAAAAEAAEAAAD//wYAAAABAAEAAAD//wcAAAABAAEAAAD//wgAAAABAAIAAAD//wkAAAAEAAEAAAAAAAYAAAABAAEAAAAAAAcAAAABAAEAAAAAAAgAAAABAAIAAAAAAAkAAAAEAAEAAAABAAYAAAABAAEAAAABAAcAAAABAAEAAAABAAgAAAAEAAEAAAABAAkAAAAEAAEAAAACAAYAAAABAAEAAAACAAcAAAABAAEAAAACAAgAAAABAAIAAAACAAkAAAAEAAEAAAADAAYAAAABAAEAAAADAAcAAAABAAEAAAADAAgAAAABAAIAAAADAAkAAAAEAAEAAAAEAAYAAAACAAEAAAAEAAcAAAACAAEAAAAEAAgAAAACAAIAAAAEAAkAAAAEAAEAAAAFAAYAAAAEAAEAAAAFAAcAAAAEAAEAAAAFAAgAAAAEAAEAAAAFAAkAAAAEAAEAAAAGAAYAAAAEAAEAAAAGAAcAAAAEAAEAAAAGAAgAAAAEAAEAAAAGAAkAAAAEAAEAAAAHAAYAAAAEAAEAAAAHAAcAAAAEAAEAAAAHAAgAAAAEAAEAAAAHAAkAAAAEAAEAAAAIAPr/AAAEAAEAAAAIAPv/AAAEAAEAAAAIAPz/AAAEAAEAAAAIAP3/AAACAAAAAAAIAP7/AAAEAAEAAAAIAP//AAACAAEAAAAIAAAAAAACAAIAAAAIAAEAAAAEAAEAAAAIAAIAAAAEAAEAAAAIAAMAAAAEAAEAAAAIAAQAAAAEAAEAAAAIAAUAAAAEAAEAAAAIAAYAAAAEAAEAAAAIAAcAAAAEAAEAAAAIAAgAAAAEAAEAAAAIAAkAAAAEAAEAAAAJAPr/AAAEAAEAAAAJAPv/AAAEAAEAAAAJAPz/AAAEAAEAAAAJAP3/AAAEAAEAAAAJAP7/AAAEAAEAAAAJAP//AAAEAAEAAAAJAAAAAAAEAAEAAAAJAAEAAAAEAAEAAAAJAAIAAAAEAAEAAAAJAAMAAAAEAAEAAAAJAAQAAAAEAAEAAAAJAAUAAAAEAAEAAAAJAAYAAAAEAAEAAAAJAAcAAAAEAAEAAAAJAAgAAAAEAAEAAAAJAAkAAAAEAAEAAAAKAPr/AAAEAAEAAAAKAPv/AAAEAAEAAAAKAPz/AAAEAAEAAAAKAP3/AAAEAAEAAAAKAP7/AAAEAAEAAAAKAP//AAAEAAEAAAAKAAAAAAAEAAEAAAAKAAEAAAAEAAEAAAAKAAIAAAAEAAEAAAAKAAMAAAAEAAEAAAAKAAQAAAAEAAEAAAAKAAUAAAAEAAEAAAAKAAYAAAAEAAEAAAAKAAcAAAAEAAEAAAAKAAgAAAAEAAEAAAAKAAkAAAAEAAEAAAALAPr/AAAEAAEAAAALAPv/AAAEAAEAAAALAPz/AAAEAAEAAAALAP3/AAAEAAEAAAALAP7/AAAEAAEAAAALAP//AAAEAAEAAAALAAAAAAAEAAEAAAALAAEAAAAEAAEAAAALAAIAAAAEAAEAAAALAAMAAAAEAAEAAAALAAQAAAAEAAEAAAALAAUAAAAEAAEAAAALAAYAAAAEAAEAAAALAAcAAAAEAAEAAAALAAgAAAAEAAEAAAALAAkAAAAEAAEAAAAMAPr/AAAEAAEAAAAMAPv/AAAEAAEAAAAMAPz/AAAEAAEAAAAMAP3/AAAEAAEAAAAMAP7/AAAEAAEAAAAMAP//AAAEAAEAAAAMAAAAAAAEAAEAAAAMAAEAAAAEAAEAAAAMAAIAAAAEAAEAAAAMAAMAAAAEAAEAAAAMAAQAAAAEAAEAAAAMAAUAAAAEAAEAAAAMAAYAAAAEAAEAAAAMAAcAAAAEAAEAAAAMAAgAAAAEAAEAAAAMAAkAAAAEAAEAAAD4//b/AAAEAAEAAAD4//f/AAAEAAEAAAD4//j/AAAEAAEAAAD4//n/AAAEAAEAAAD5//b/AAAEAAEAAAD5//f/AAAEAAEAAAD5//j/AAAEAAEAAAD5//n/AAAEAAEAAAD6//b/AAAEAAEAAAD6//f/AAAEAAEAAAD6//j/AAAEAAEAAAD6//n/AAAEAAEAAAD7//b/AAAEAAEAAAD7//f/AAAEAAEAAAD7//j/AAAEAAEAAAD7//n/AAAEAAEAAAD8//b/AAAEAAEAAAD8//f/AAAEAAEAAAD8//j/AAAEAAEAAAD8//n/AAAEAAEAAAD9//b/AAAEAAEAAAD9//f/AAAEAAEAAAD9//j/AAAEAAEAAAD9//n/AAAEAAEAAAD+//b/AAAEAAEAAAD+//f/AAAEAAEAAAD+//j/AAAEAAEAAAD+//n/AAAAAAAAAAD///b/AAAEAAEAAAD///f/AAAEAAEAAAD///j/AAAEAAEAAAD///n/AAABAAAAAAAAAPb/AAAEAAEAAAAAAPf/AAAEAAEAAAAAAPj/AAAEAAEAAAAAAPn/AAAEAAEAAAABAPb/AAAEAAEAAAABAPf/AAAEAAEAAAABAPj/AAAEAAEAAAABAPn/AAABAAAAAAACAPb/AAAEAAEAAAACAPf/AAAEAAEAAAACAPj/AAAEAAEAAAACAPn/AAACAAAAAAADAPb/AAAEAAEAAAADAPf/AAAEAAEAAAADAPj/AAAEAAEAAAADAPn/AAAEAAEAAAAEAPb/AAAEAAEAAAAEAPf/AAAEAAEAAAAEAPj/AAAEAAEAAAAEAPn/AAAEAAEAAAAFAPb/AAAEAAEAAAAFAPf/AAAEAAEAAAAFAPj/AAAEAAEAAAAFAPn/AAAEAAEAAAAGAPb/AAAEAAEAAAAGAPf/AAAEAAEAAAAGAPj/AAAEAAEAAAAGAPn/AAAEAAEAAAAHAPb/AAAEAAEAAAAHAPf/AAAEAAEAAAAHAPj/AAAEAAEAAAAHAPn/AAAEAAEAAAAIAPb/AAAEAAEAAAAIAPf/AAAEAAEAAAAIAPj/AAAEAAEAAAAIAPn/AAAEAAEAAAAJAPb/AAAEAAEAAAAJAPf/AAAEAAEAAAAJAPj/AAAEAAEAAAAJAPn/AAAEAAEAAAAKAPb/AAAEAAEAAAAKAPf/AAAEAAEAAAAKAPj/AAAEAAEAAAAKAPn/AAAEAAEAAAALAPb/AAAEAAEAAAALAPf/AAAEAAEAAAALAPj/AAAEAAEAAAALAPn/AAAEAAEAAAAMAPb/AAAEAAEAAAAMAPf/AAAEAAEAAAAMAPj/AAAEAAEAAAAMAPn/AAAEAAEAAAD0//b/AAAEAAEAAAD0//f/AAAEAAEAAAD0//j/AAAEAAEAAAD0//n/AAAEAAEAAAD0//r/AAAEAAEAAAD0//v/AAAEAAEAAAD0//z/AAAEAAEAAAD0//3/AAAEAAEAAAD0//7/AAAEAAEAAAD0////AAAEAAEAAAD0/wAAAAAEAAEAAAD0/wEAAAAEAAEAAAD0/wIAAAAEAAEAAAD0/wMAAAAEAAEAAAD0/wQAAAAEAAEAAAD0/wUAAAAEAAEAAAD0/wYAAAAEAAEAAAD0/wcAAAAEAAEAAAD0/wgAAAAEAAEAAAD0/wkAAAAEAAEAAAD1//b/AAAEAAEAAAD1//f/AAAEAAEAAAD1//j/AAAEAAEAAAD1//n/AAAEAAEAAAD1//r/AAAEAAEAAAD1//v/AAAEAAEAAAD1//z/AAAEAAEAAAD1//3/AAAEAAEAAAD1//7/AAAEAAEAAAD1////AAAEAAEAAAD1/wAAAAAEAAEAAAD1/wEAAAAEAAEAAAD1/wIAAAAEAAEAAAD1/wMAAAAEAAEAAAD1/wQAAAAEAAEAAAD1/wUAAAAEAAEAAAD1/wYAAAAEAAEAAAD1/wcAAAAEAAEAAAD1/wgAAAAEAAEAAAD1/wkAAAAEAAEAAAD2//b/AAAEAAEAAAD2//f/AAAEAAEAAAD2//j/AAAEAAEAAAD2//n/AAAEAAEAAAD2//r/AAAEAAEAAAD2//v/AAAEAAEAAAD2//z/AAAEAAEAAAD2//3/AAAEAAEAAAD2//7/AAAEAAEAAAD2////AAAEAAEAAAD2/wAAAAAEAAEAAAD2/wEAAAAEAAEAAAD2/wIAAAAEAAEAAAD2/wMAAAAEAAEAAAD2/wQAAAAEAAEAAAD2/wUAAAAEAAEAAAD2/wYAAAAEAAEAAAD2/wcAAAAEAAEAAAD2/wgAAAAEAAEAAAD2/wkAAAAEAAEAAAD3//b/AAAEAAEAAAD3//f/AAAEAAEAAAD3//j/AAAEAAEAAAD3//n/AAAEAAEAAAD3//r/AAAEAAEAAAD3//v/AAAEAAEAAAD3//z/AAAEAAEAAAD3//3/AAAEAAEAAAD3//7/AAAEAAEAAAD3////AAAEAAEAAAD3/wAAAAAEAAEAAAD3/wEAAAAEAAEAAAD3/wIAAAAEAAEAAAD3/wMAAAAEAAEAAAD3/wQAAAAEAAEAAAD3/wUAAAAEAAEAAAD3/wYAAAAEAAEAAAD3/wcAAAAEAAEAAAD3/wgAAAAEAAEAAAD3/wkAAAAEAAEAAAD0/woAAAAEAAEAAAD0/wsAAAAEAAEAAAD0/wwAAAAEAAEAAAD0/w0AAAAEAAEAAAD0/w4AAAAEAAEAAAD1/woAAAAEAAEAAAD1/wsAAAAEAAEAAAD1/wwAAAAEAAEAAAD1/w0AAAAEAAEAAAD1/w4AAAAEAAEAAAD2/woAAAAEAAEAAAD2/wsAAAAEAAEAAAD2/wwAAAAEAAEAAAD2/w0AAAAEAAEAAAD2/w4AAAAEAAEAAAD3/woAAAAEAAEAAAD3/wsAAAAEAAEAAAD3/wwAAAAEAAEAAAD3/w0AAAAEAAEAAAD3/w4AAAAEAAEAAAD4/woAAAAEAAEAAAD4/wsAAAAEAAEAAAD4/wwAAAAEAAEAAAD4/w0AAAAEAAEAAAD4/w4AAAAEAAEAAAD5/woAAAAEAAEAAAD5/wsAAAAEAAEAAAD5/wwAAAAEAAEAAAD5/w0AAAAEAAEAAAD5/w4AAAAEAAEAAAD6/woAAAAEAAEAAAD6/wsAAAAEAAEAAAD6/wwAAAAEAAEAAAD6/w0AAAAEAAEAAAD6/w4AAAAEAAEAAAD7/woAAAAEAAEAAAD7/wsAAAAEAAEAAAD7/wwAAAAEAAEAAAD7/w0AAAAEAAEAAAD7/w4AAAAEAAEAAAD8/woAAAAEAAEAAAD8/wsAAAAEAAEAAAD8/wwAAAAEAAEAAAD8/w0AAAAEAAEAAAD8/w4AAAAEAAEAAAD9/woAAAAEAAEAAAD9/wsAAAAEAAEAAAD9/wwAAAAEAAEAAAD9/w0AAAAEAAEAAAD9/w4AAAAEAAEAAAD+/woAAAAEAAEAAAD+/wsAAAAEAAEAAAD+/wwAAAAEAAEAAAD+/w0AAAAEAAEAAAD+/w4AAAAEAAEAAAD//woAAAAEAAEAAAD//wsAAAAEAAEAAAD//wwAAAAEAAEAAAD//w0AAAAEAAEAAAD//w4AAAAEAAEAAAAAAAoAAAAEAAEAAAAAAAsAAAAEAAEAAAAAAAwAAAAEAAEAAAAAAA0AAAAEAAEAAAAAAA4AAAAEAAEAAAABAAoAAAAEAAEAAAABAAsAAAAEAAEAAAABAAwAAAAEAAEAAAABAA0AAAAEAAEAAAABAA4AAAAEAAEAAAACAAoAAAAEAAEAAAACAAsAAAAEAAEAAAACAAwAAAAEAAEAAAACAA0AAAAEAAEAAAACAA4AAAAEAAEAAAADAAoAAAAEAAEAAAADAAsAAAAEAAEAAAADAAwAAAAEAAEAAAADAA0AAAAEAAEAAAADAA4AAAAEAAEAAAAEAAoAAAAEAAEAAAAEAAsAAAAEAAEAAAAEAAwAAAAEAAEAAAAEAA0AAAAEAAEAAAAEAA4AAAAEAAEAAAAFAAoAAAAEAAEAAAAFAAsAAAAEAAEAAAAFAAwAAAAEAAEAAAAFAA0AAAAEAAEAAAAFAA4AAAAEAAEAAAAGAAoAAAAEAAEAAAAGAAsAAAAEAAEAAAAGAAwAAAAEAAEAAAAGAA0AAAAEAAEAAAAGAA4AAAAEAAEAAAAHAAoAAAAEAAEAAAAHAAsAAAAEAAEAAAAHAAwAAAAEAAEAAAAHAA0AAAAEAAEAAAAHAA4AAAAEAAEAAAAIAAoAAAAEAAEAAAAIAAsAAAAEAAEAAAAIAAwAAAAEAAEAAAAIAA0AAAAEAAEAAAAIAA4AAAAEAAEAAAAJAAoAAAAEAAEAAAAJAAsAAAAEAAEAAAAJAAwAAAAEAAEAAAAJAA0AAAAEAAEAAAAJAA4AAAAEAAEAAAAKAAoAAAAEAAEAAAAKAAsAAAAEAAEAAAAKAAwAAAAEAAEAAAAKAA0AAAAEAAEAAAAKAA4AAAAEAAEAAAALAAoAAAAEAAEAAAALAAsAAAAEAAEAAAALAAwAAAAEAAEAAAALAA0AAAAEAAEAAAALAA4AAAAEAAEAAAAMAAoAAAAEAAEAAAAMAAsAAAAEAAEAAAAMAAwAAAAEAAEAAAAMAA0AAAAEAAEAAAAMAA4AAAAEAAEAAAD7//z/AAAEAAEAAAA=") +[node name="Upper" type="TileMapLayer" parent="Level"] +tile_map_data = PackedByteArray("AAAAAP//AAABAAEAAAD/////AAABAAEAAAD//wAAAAAIAAAAAAAAAAAAAAABAAEAAAABAP7/AAABAAEAAAAAAP7/AAABAAEAAAD///7/AAAIAAAAABD+/wAAAAABAAEAAAD+//7/AAABAAEAAAD9////AAABAAEAAAD9/wAAAAABAAEAAAD9/wEAAAABAAEAAAD9/wIAAAABAAEAAAD+/wIAAAABAAEAAAD//wIAAAABAAEAAAAAAAIAAAABAAEAAAABAAEAAAAJAAAAAAABAAAAAAABAAEAAAABAP//AAABAAEAAAD//wEAAAABAAEAAAAAAAEAAAABAAEAAAABAAIAAAABAAEAAAABAAMAAAABAAEAAAACAAMAAAABAAEAAAACAAIAAAABAAEAAAADAAIAAAABAAEAAAADAAEAAAABAAEAAAACAAEAAAABAAEAAAACAAAAAAABAAEAAAACAP//AAAJAAAAABACAP7/AAABAAEAAAD+/wEAAAABAAEAAAAAAAMAAAABAAEAAAD//wMAAAABAAEAAAD+/wMAAAABAAEAAAD9/wMAAAABAAEAAAD8/wMAAAABAAEAAAD8/wIAAAABAAEAAAD8/wEAAAABAAEAAAD8/wAAAAABAAEAAAD8////AAABAAEAAAD8//7/AAABAAEAAAD9//7/AAABAAEAAAD9//3/AAABAAEAAAD+//3/AAABAAEAAAD///3/AAABAAEAAAAAAP3/AAABAAEAAAABAP3/AAABAAEAAAACAP3/AAABAAEAAAADAP7/AAAJAAAAAAADAAAAAAAHAAAAABADAAMAAAABAAEAAAADAP3/AAABAAEAAAD8//3/AAABAAEAAAD8/wQAAAABAAEAAAD9/wQAAAABAAEAAAD+/wQAAAABAAEAAAD//wQAAAABAAEAAAAAAAQAAAABAAEAAAABAAQAAAABAAEAAAACAAQAAAABAAEAAAADAAQAAAABAAEAAAADAAUAAAABAAEAAAACAAUAAAABAAEAAAABAAUAAAABAAEAAAAAAAUAAAABAAEAAAD//wUAAAABAAEAAAD+/wUAAAABAAEAAAD9/wUAAAABAAEAAAD8/wUAAAABAAEAAAD8//z/AAABAAEAAAD9//z/AAABAAEAAAD+//z/AAABAAEAAAD///z/AAABAAEAAAAAAPz/AAABAAEAAAABAPz/AAABAAEAAAACAPz/AAABAAEAAAADAPz/AAABAAEAAAAEAPz/AAABAAEAAAAEAP3/AAABAAEAAAAEAP7/AAABAAEAAAAEAP//AAABAAEAAAAEAAAAAAABAAEAAAAEAAEAAAABAAEAAAAEAAIAAAABAAEAAAAEAAMAAAABAAEAAAAEAAQAAAABAAEAAAAEAAUAAAABAAEAAAD7/wQAAAABAAEAAAD7/wUAAAABAAEAAAD7/wMAAAABAAEAAAD7/wIAAAABAAEAAAD7/wEAAAABAAEAAAD7/wAAAAABAAEAAAD7////AAABAAEAAAD7//7/AAABAAEAAAD7//3/AAABAAEAAAAFAP3/AAABAAEAAAAFAP7/AAABAAEAAAAFAP//AAABAAEAAAAFAAAAAAABAAEAAAAFAAEAAAABAAEAAAAFAAIAAAABAAEAAAAFAAMAAAABAAEAAAAFAAQAAAABAAEAAAAFAAUAAAABAAEAAAD6/wUAAAABAAEAAAD6/wQAAAABAAEAAAD6/wMAAAABAAEAAAD6/wIAAAABAAEAAAD6/wEAAAABAAEAAAD6/wAAAAABAAEAAAD6////AAABAAEAAAD6//7/AAABAAEAAAD6//3/AAABAAEAAAD6//z/AAABAAEAAAD6//v/AAABAAEAAAD7//v/AAABAAEAAAD8//v/AAABAAEAAAD9//v/AAABAAEAAAD+//v/AAABAAEAAAD///v/AAABAAEAAAAAAPv/AAABAAEAAAABAPv/AAABAAEAAAACAPv/AAABAAEAAAADAPv/AAABAAEAAAAGAPv/AAABAAEAAAAGAP3/AAABAAEAAAAGAP7/AAABAAEAAAAGAP//AAABAAEAAAAGAAAAAAABAAEAAAAGAAEAAAABAAEAAAAGAAIAAAABAAEAAAAGAAMAAAABAAEAAAAHAAMAAAABAAEAAAAHAAQAAAABAAEAAAAGAAQAAAABAAEAAAAGAAUAAAABAAEAAAAHAAUAAAABAAEAAAAHAAIAAAABAAEAAAAHAAEAAAABAAEAAAAHAAAAAAABAAEAAAAHAP//AAABAAEAAAAHAP7/AAABAAEAAAAHAPv/AAABAAEAAAAHAPr/AAABAAEAAAAGAPr/AAABAAEAAAACAPr/AAABAAEAAAABAPr/AAABAAEAAAAAAPr/AAABAAEAAAD///r/AAABAAEAAAD+//r/AAABAAEAAAD9//r/AAABAAEAAAD8//r/AAABAAEAAAD7//r/AAABAAEAAAD6//r/AAABAAEAAAD5//r/AAABAAEAAAD4//r/AAABAAEAAAD4//v/AAABAAEAAAD5//v/AAABAAEAAAD5//z/AAABAAEAAAD5//3/AAABAAEAAAD5//7/AAABAAEAAAD5////AAABAAEAAAD4////AAABAAEAAAD4/wAAAAABAAEAAAD4/wEAAAABAAEAAAD4/wIAAAABAAEAAAD4/wMAAAABAAEAAAD4/wQAAAABAAEAAAD4/wUAAAABAAEAAAD5/wUAAAABAAEAAAD5/wQAAAABAAEAAAD5/wMAAAABAAEAAAD5/wIAAAABAAEAAAD5/wEAAAABAAEAAAD4//z/AAABAAEAAAD4//3/AAABAAEAAAD4//7/AAABAAEAAAD5/wAAAAABAAEAAAD4/wYAAAABAAEAAAD5/wcAAAABAAEAAAD5/wgAAAABAAEAAAD6/wkAAAABAAEAAAD4/wcAAAABAAEAAAD4/wgAAAABAAEAAAD4/wkAAAAFAAAAAAD5/wkAAAABAAEAAAD6/wgAAAABAAEAAAD5/wYAAAABAAEAAAD6/wYAAAABAAEAAAD6/wcAAAABAAEAAAD7/wYAAAABAAEAAAD7/wcAAAABAAEAAAD7/wgAAAABAAEAAAD7/wkAAAABAAEAAAD8/wYAAAABAAEAAAD8/wcAAAABAAEAAAD8/wgAAAABAAEAAAD8/wkAAAABAAEAAAD9/wYAAAABAAEAAAD9/wcAAAABAAEAAAD9/wgAAAABAAEAAAD9/wkAAAABAAEAAAD+/wYAAAABAAEAAAD+/wcAAAABAAEAAAD+/wgAAAABAAEAAAD+/wkAAAABAAEAAAD//wYAAAABAAEAAAD//wcAAAABAAEAAAD//wgAAAABAAEAAAD//wkAAAABAAEAAAAAAAYAAAABAAEAAAAAAAcAAAABAAEAAAAAAAgAAAABAAEAAAAAAAkAAAABAAEAAAABAAYAAAABAAEAAAABAAcAAAABAAEAAAABAAgAAAABAAEAAAABAAkAAAABAAEAAAACAAYAAAABAAEAAAACAAcAAAABAAEAAAACAAgAAAABAAEAAAACAAkAAAABAAEAAAADAAYAAAABAAEAAAADAAcAAAABAAEAAAADAAgAAAABAAEAAAADAAkAAAABAAEAAAAEAAYAAAABAAEAAAAEAAcAAAABAAEAAAAEAAgAAAABAAEAAAAEAAkAAAABAAEAAAAFAAYAAAABAAEAAAAFAAcAAAABAAEAAAAGAAYAAAABAAEAAAAGAAcAAAABAAEAAAAHAAYAAAABAAEAAAAIAPr/AAABAAEAAAAIAPv/AAABAAEAAAAIAP7/AAABAAEAAAAIAP//AAABAAEAAAAIAAAAAAABAAEAAAAIAAEAAAABAAEAAAAIAAIAAAABAAEAAAAIAAMAAAABAAEAAAAIAAQAAAABAAEAAAAIAAUAAAABAAEAAAAIAAYAAAABAAEAAAAIAAkAAAABAAIAAAAJAPr/AAABAAEAAAAJAPv/AAABAAEAAAAJAP7/AAACAAEAAAAJAP//AAADAAIAAAAJAAAAAAABAAEAAAAJAAEAAAABAAEAAAAJAAIAAAABAAEAAAAJAAMAAAADAAAAAAAJAAQAAAADAAEAAAAJAAUAAAADAAEAAAAJAAYAAAACAAEAAAAJAAgAAAADAAEAAAAJAAkAAAACAAIAAAAKAPr/AAADAAEAAAAKAPv/AAADAAEAAAD4//b/AAAAAAAAAAD4//f/AAAAAAEAAAD4//j/AAAFAAIAAAD4//n/AAABAAEAAAD5//b/AAABAAAAAAD5//f/AAABAAEAAAD5//j/AAABAAEAAAD5//n/AAABAAEAAAD6//b/AAABAAAAAAD6//f/AAABAAEAAAD6//j/AAABAAEAAAD6//n/AAABAAEAAAD7//b/AAAEAAIAAAD7//f/AAABAAEAAAD7//j/AAABAAEAAAD7//n/AAABAAEAAAD8//b/AAABAAAAAAD8//f/AAABAAEAAAD8//j/AAABAAEAAAD8//n/AAABAAEAAAD9//b/AAABAAAAAAD9//f/AAABAAEAAAD9//j/AAABAAEAAAD9//n/AAABAAEAAAD+//b/AAACAAAAAAD+//f/AAADAAIAAAD+//j/AAABAAEAAAD+//n/AAABAAEAAAD///j/AAABAAEAAAD///n/AAABAAEAAAAAAPj/AAABAAEAAAAAAPn/AAABAAEAAAABAPf/AAACAAAAAAABAPj/AAADAAIAAAABAPn/AAABAAEAAAACAPj/AAABAAAAAAACAPn/AAABAAEAAAADAPf/AAAAAAAAAAAEAPb/AAAAAAAAAAAEAPf/AAAFAAIAAAAEAPj/AAABAAEAAAAFAPb/AAAEAAIAAAAFAPf/AAABAAEAAAAFAPj/AAABAAEAAAAGAPb/AAABAAAAAAAGAPf/AAABAAEAAAAGAPj/AAABAAEAAAAGAPn/AAABAAEAAAAHAPb/AAABAAAAAAAHAPf/AAABAAEAAAAHAPj/AAABAAEAAAAHAPn/AAABAAEAAAAIAPb/AAACAAAAAAAIAPf/AAADAAIAAAAIAPj/AAABAAEAAAAIAPn/AAABAAEAAAAJAPf/AAACAAAAAAAJAPj/AAADAAEAAAAJAPn/AAADAAIAAAAKAPn/AAACAAAAAAD1//z/AAAAAAAAAAD1//3/AAAAAAEAAAD1//7/AAAFAAEAAAD1////AAAAAAIAAAD2//v/AAAAAAAAAAD2//z/AAAFAAIAAAD2//3/AAABAAEAAAD2//7/AAABAAEAAAD2////AAAFAAAAAAD2/wAAAAAFAAEAAAD2/wMAAAAAAAEAAAD2/wQAAAAAAAEAAAD2/wUAAAAFAAEAAAD2/wYAAAAFAAEAAAD2/wcAAAAFAAEAAAD2/wgAAAAAAAIAAAD3//j/AAAAAAAAAAD3//n/AAAAAAEAAAD3//r/AAAAAAEAAAD3//v/AAAFAAIAAAD3//z/AAABAAEAAAD3//3/AAABAAEAAAD3//7/AAABAAEAAAD3////AAABAAEAAAD3/wAAAAABAAEAAAD3/wEAAAABAAEAAAD3/wIAAAABAAEAAAD3/wMAAAABAAEAAAD3/wQAAAABAAEAAAD3/wUAAAABAAEAAAD3/wYAAAABAAEAAAD3/wcAAAABAAEAAAD3/wgAAAAFAAAAAAD3/wkAAAAAAAIAAAD4/woAAAAAAAIAAAD5/woAAAAEAAAAAAD6/woAAAAFAAAAAAD6/wsAAAAAAAIAAAD7/woAAAABAAEAAAD7/wsAAAAEAAAAAAD8/woAAAABAAEAAAD8/wsAAAAEAAAAAAD9/woAAAABAAEAAAD9/wsAAAABAAIAAAD+/woAAAABAAEAAAD+/wsAAAABAAIAAAD//woAAAADAAAAAAD//wsAAAACAAIAAAACAAoAAAAEAAAAAAADAAoAAAABAAIAAAAEAAoAAAABAAIAAAAGAAoAAAAEAAAAAAAHAAoAAAACAAIAAAD7//z/AAABAAEAAAAFAAoAAAABAAIAAAAFAAkAAAABAAEAAAAFAAgAAAABAAEAAAAGAAgAAAABAAEAAAAHAAgAAAABAAEAAAAHAAkAAAADAAAAAAAGAAkAAAABAAEAAAAIAAgAAAABAAEAAAAHAAcAAAABAAEAAAAIAAcAAAABAAEAAAAJAAcAAAADAAEAAAAKAP//AAACAAAAAAAKAAIAAAACAAEAAAAKAAMAAAACAAIAAAAHAP3/AAABAAEAAAAIAP3/AAABAAEAAAAJAP3/AAADAAAAAAAGAPz/AAABAAEAAAADAPj/AAAFAAIAAAADAPn/AAABAAEAAAAEAPn/AAABAAEAAAAFAPn/AAABAAEAAAAEAPr/AAABAAEAAAAFAPr/AAABAAEAAAAFAPv/AAABAAEAAAAHAPz/AAABAAEAAAAIAPz/AAABAAEAAAAKAP3/AAACAAIAAAAKAPz/AAACAAEAAAAJAPz/AAABAAEAAAAFAPz/AAABAAEAAAAEAPv/AAABAAEAAAADAPr/AAABAAEAAAD+////AAAJAAAAABA=") tile_set = ExtResource("1_ebmjs") -[node name="YSorted" type="Node2D" parent="NavigationRegion2D"] +[node name="Lower" type="TileMapLayer" parent="Level"] +z_index = -1 +tile_map_data = PackedByteArray("AAD1/wcAAAABAAEAAAD2/wcAAAABAAEAAAD2/wgAAAABAAEAAAD1/wgAAAABAAEAAAD0/wgAAAABAAEAAAD0/wcAAAABAAEAAAD0/wYAAAABAAEAAAD1/wYAAAABAAEAAAD2/wkAAAABAAEAAAD1/wkAAAABAAEAAAD0/wkAAAABAAEAAAD3/wgAAAABAAEAAAD3/wkAAAABAAEAAAD3/wcAAAABAAEAAAD3/woAAAABAAEAAAD2/woAAAABAAEAAAD1/woAAAABAAEAAAD4/woAAAABAAEAAAD4/wsAAAABAAEAAAD3/wsAAAABAAEAAAD2/wsAAAABAAEAAAD4/wkAAAABAAEAAAD5/woAAAABAAEAAAD5/wsAAAABAAEAAAD5/wkAAAABAAEAAAD5/wwAAAABAAEAAAD4/wwAAAABAAEAAAD3/wwAAAABAAEAAAD6/wsAAAABAAEAAAD6/wwAAAABAAEAAAD6/woAAAABAAEAAAD7/wsAAAABAAEAAAD7/wwAAAABAAEAAAD7/woAAAABAAEAAAD8/wwAAAABAAEAAAD8/w0AAAABAAEAAAD7/w0AAAABAAEAAAD6/w0AAAABAAEAAAD8/wsAAAABAAEAAAD9/wwAAAABAAEAAAD9/w0AAAABAAEAAAD9/wsAAAABAAEAAAD+/wwAAAABAAEAAAD+/w0AAAABAAEAAAD+/wsAAAABAAEAAAD//wwAAAABAAEAAAD//w0AAAABAAEAAAD//wsAAAABAAEAAAD9/woAAAABAAEAAAD+/woAAAABAAEAAAD//woAAAABAAEAAAAAAAsAAAABAAEAAAAAAAwAAAABAAEAAAAAAAoAAAABAAEAAAABAAsAAAABAAEAAAABAAwAAAABAAEAAAABAAoAAAABAAEAAAD//wkAAAABAAEAAAAAAAkAAAABAAEAAAABAAkAAAABAAEAAAACAAoAAAABAAEAAAACAAsAAAABAAEAAAACAAkAAAABAAEAAAADAAoAAAABAAEAAAADAAsAAAABAAEAAAADAAkAAAABAAEAAAAEAAoAAAABAAEAAAAEAAsAAAABAAEAAAAEAAkAAAABAAEAAAAEAAwAAAABAAEAAAADAAwAAAABAAEAAAACAAwAAAABAAEAAAAFAAsAAAABAAEAAAAFAAwAAAABAAEAAAAFAAoAAAABAAEAAAAGAAsAAAABAAEAAAAGAAwAAAABAAEAAAAGAAoAAAABAAEAAAAHAAsAAAABAAEAAAAHAAwAAAABAAEAAAAHAAoAAAABAAEAAAAIAAsAAAABAAEAAAAIAAwAAAABAAEAAAAIAAoAAAABAAEAAAAGAAkAAAABAAEAAAAHAAkAAAABAAEAAAAIAAkAAAABAAEAAAAJAAoAAAABAAEAAAAJAAsAAAABAAEAAAAJAAkAAAABAAEAAAAKAAoAAAABAAEAAAAKAAsAAAABAAEAAAAKAAkAAAABAAEAAAAIAAgAAAABAAEAAAAJAAgAAAABAAEAAAAKAAgAAAABAAEAAAAIAAcAAAABAAEAAAAJAAcAAAABAAEAAAAKAAcAAAABAAEAAAALAAcAAAABAAEAAAALAAgAAAABAAEAAAAJAAYAAAABAAEAAAAKAAYAAAABAAEAAAALAAYAAAABAAEAAAAJAAUAAAABAAEAAAAKAAUAAAABAAEAAAALAAUAAAABAAEAAAAJAAQAAAABAAEAAAAKAAQAAAABAAEAAAALAAQAAAABAAEAAAAJAAMAAAABAAEAAAAKAAMAAAABAAEAAAALAAMAAAABAAEAAAAJAAIAAAABAAEAAAAKAAIAAAABAAEAAAALAAIAAAABAAEAAAAMAAMAAAABAAEAAAAMAAQAAAABAAEAAAAMAAIAAAABAAEAAAAKAAEAAAABAAEAAAALAAEAAAABAAEAAAAMAAEAAAABAAEAAAAJAAEAAAABAAEAAAAJAAAAAAABAAEAAAAKAAAAAAABAAEAAAALAAAAAAABAAEAAAAMAAAAAAABAAEAAAAKAP//AAABAAEAAAALAP//AAABAAEAAAAMAP//AAABAAEAAAAKAP7/AAABAAEAAAALAP7/AAABAAEAAAAMAP7/AAABAAEAAAAKAP3/AAABAAEAAAALAP3/AAABAAEAAAAMAP3/AAABAAEAAAAJAP//AAABAAEAAAAJAP7/AAABAAEAAAAJAP3/AAABAAEAAAAJAPz/AAABAAEAAAAKAPz/AAABAAEAAAALAPz/AAABAAEAAAANAP7/AAABAAEAAAANAP//AAABAAEAAAANAP3/AAABAAEAAAAMAPz/AAABAAEAAAANAPz/AAABAAEAAAALAPv/AAABAAEAAAAMAPv/AAABAAEAAAANAPv/AAABAAEAAAAKAPv/AAABAAEAAAAKAPr/AAABAAEAAAALAPr/AAABAAEAAAAMAPr/AAABAAEAAAAJAPv/AAABAAEAAAAJAPr/AAABAAEAAAAJAPn/AAABAAEAAAAKAPn/AAABAAEAAAALAPn/AAABAAEAAAAJAPj/AAABAAEAAAAKAPj/AAABAAEAAAALAPj/AAABAAEAAAAMAPn/AAABAAEAAAAMAPj/AAABAAEAAAAKAPf/AAABAAEAAAALAPf/AAABAAEAAAAMAPf/AAABAAEAAAAJAPf/AAABAAEAAAAJAPb/AAABAAEAAAAKAPb/AAABAAEAAAALAPb/AAABAAEAAAAIAPj/AAABAAEAAAAIAPf/AAABAAEAAAAIAPb/AAABAAEAAAAIAPX/AAABAAEAAAAJAPX/AAABAAEAAAAKAPX/AAABAAEAAAAHAPf/AAABAAEAAAAHAPb/AAABAAEAAAAHAPX/AAABAAEAAAAGAPf/AAABAAEAAAAGAPb/AAABAAEAAAAGAPX/AAABAAEAAAAFAPf/AAABAAEAAAAFAPb/AAABAAEAAAAFAPX/AAABAAEAAAAHAPj/AAABAAEAAAAGAPj/AAABAAEAAAAGAPT/AAABAAEAAAAHAPT/AAABAAEAAAAIAPT/AAABAAEAAAAFAPT/AAABAAEAAAAEAPb/AAABAAEAAAAEAPX/AAABAAEAAAAEAPT/AAABAAEAAAAEAPf/AAABAAEAAAADAPf/AAABAAEAAAADAPb/AAABAAEAAAADAPX/AAABAAEAAAAFAPj/AAABAAEAAAAEAPj/AAABAAEAAAADAPj/AAABAAEAAAACAPj/AAABAAEAAAACAPf/AAABAAEAAAACAPb/AAABAAEAAAABAPj/AAABAAEAAAABAPf/AAABAAEAAAABAPb/AAABAAEAAAAAAPj/AAABAAEAAAAAAPf/AAABAAEAAAAAAPb/AAABAAEAAAD///j/AAABAAEAAAD///f/AAABAAEAAAD///b/AAABAAEAAAD+//j/AAABAAEAAAD+//f/AAABAAEAAAD+//b/AAABAAEAAAD9//j/AAABAAEAAAD9//f/AAABAAEAAAD9//b/AAABAAEAAAD9//X/AAABAAEAAAD+//X/AAABAAEAAAD///X/AAABAAEAAAD8//f/AAABAAEAAAD8//b/AAABAAEAAAD8//X/AAABAAEAAAAAAPX/AAABAAEAAAABAPX/AAABAAEAAAACAPX/AAABAAEAAAD7//f/AAABAAEAAAD7//b/AAABAAEAAAD7//X/AAABAAEAAAD7//T/AAABAAEAAAD8//T/AAABAAEAAAD9//T/AAABAAEAAAD6//f/AAABAAEAAAD6//b/AAABAAEAAAD6//X/AAABAAEAAAD5//f/AAABAAEAAAD5//b/AAABAAEAAAD5//X/AAABAAEAAAD4//f/AAABAAEAAAD4//b/AAABAAEAAAD4//X/AAABAAEAAAD3//f/AAABAAEAAAD3//b/AAABAAEAAAD3//X/AAABAAEAAAD2//f/AAABAAEAAAD2//b/AAABAAEAAAD2//X/AAABAAEAAAD3//j/AAABAAEAAAD2//j/AAABAAEAAAD3//T/AAABAAEAAAD4//T/AAABAAEAAAD5//T/AAABAAEAAAD6//T/AAABAAEAAAD5//j/AAABAAEAAAD3//n/AAABAAEAAAD2//n/AAABAAEAAAD3//r/AAABAAEAAAD2//r/AAABAAEAAAD1//r/AAABAAEAAAD1//n/AAABAAEAAAD1//j/AAABAAEAAAD3//v/AAABAAEAAAD2//v/AAABAAEAAAD1//v/AAABAAEAAAD0//v/AAABAAEAAAD0//r/AAABAAEAAAD0//n/AAABAAEAAAD2//z/AAABAAEAAAD1//z/AAABAAEAAAD0//z/AAABAAEAAAD0//3/AAABAAEAAADz//3/AAABAAEAAADz//z/AAABAAEAAADz//v/AAABAAEAAAD1//7/AAABAAEAAAD0//7/AAABAAEAAADz//7/AAABAAEAAAD1////AAABAAEAAAD0////AAABAAEAAADz////AAABAAEAAAD2/wAAAAABAAEAAAD1/wAAAAABAAEAAAD0/wAAAAABAAEAAAD2/wEAAAABAAEAAAD1/wEAAAABAAEAAAD0/wEAAAABAAEAAAD2/wIAAAABAAEAAAD1/wIAAAABAAEAAAD2/wMAAAABAAEAAAD1/wMAAAABAAEAAAD1/wQAAAABAAEAAAD0/wQAAAABAAEAAAD0/wMAAAABAAEAAAD0/wIAAAABAAEAAAD1/wUAAAABAAEAAAD0/wUAAAABAAEAAADz/wYAAAABAAEAAADz/wUAAAABAAEAAADz/wQAAAABAAEAAADz/wMAAAABAAEAAADz/wIAAAABAAEAAADz/wEAAAABAAEAAADz/wAAAAABAAEAAAD3/wYAAAABAAEAAADz/wkAAAABAAEAAADz/wgAAAABAAEAAADz/wcAAAABAAEAAADy/wQAAAABAAEAAADy/wMAAAABAAEAAADy/wIAAAABAAEAAADy/wUAAAABAAEAAADy/wYAAAABAAEAAADy/wcAAAABAAEAAADy/wgAAAABAAEAAAD0/woAAAABAAEAAADz/woAAAABAAEAAAD1/wsAAAABAAEAAAD0/wsAAAABAAEAAAD6/wkAAAABAAEAAAD8/woAAAABAAEAAAD//w4AAAABAAEAAAD+/w4AAAABAAEAAAD9/w4AAAABAAEAAAAAAA0AAAABAAEAAAAAAA4AAAABAAEAAAABAA0AAAABAAEAAAABAA4AAAABAAEAAAACAA0AAAABAAEAAAACAA4AAAABAAEAAAADAA0AAAABAAEAAAAEAA0AAAABAAEAAAAEAA4AAAABAAEAAAADAA4AAAABAAEAAAAFAA0AAAABAAEAAAAGAA0AAAABAAEAAAAHAA0AAAABAAEAAAAIAA0AAAABAAEAAAAJAAwAAAABAAEAAAAJAA0AAAABAAEAAAAKAAwAAAABAAEAAAAKAA0AAAABAAEAAAALAAsAAAABAAEAAAALAAwAAAABAAEAAAALAAoAAAABAAEAAAALAAkAAAABAAEAAAAMAAkAAAABAAEAAAAMAAoAAAABAAEAAAAMAAgAAAABAAEAAAAMAAcAAAABAAEAAAAMAAYAAAABAAEAAAANAAcAAAABAAEAAAANAAgAAAABAAEAAAANAAYAAAABAAEAAAAMAAUAAAABAAEAAAANAAUAAAABAAEAAAAHAAgAAAABAAEAAAANAAQAAAABAAEAAAAOAAUAAAABAAEAAAAOAAYAAAABAAEAAAAOAAQAAAABAAEAAAANAAMAAAABAAEAAAAOAAMAAAABAAEAAAANAAIAAAABAAEAAAAOAAIAAAABAAEAAAANAAEAAAABAAEAAAAOAAEAAAABAAEAAAANAAAAAAABAAEAAAAOAP//AAABAAEAAAAOAAAAAAABAAEAAAAOAP7/AAABAAEAAAAOAP3/AAABAAEAAAAOAPz/AAABAAEAAAAOAPv/AAABAAEAAAAPAPz/AAABAAEAAAAPAP3/AAABAAEAAAAPAPv/AAABAAEAAAANAPr/AAABAAEAAAAOAPr/AAABAAEAAAAPAPr/AAABAAEAAAANAPn/AAABAAEAAAAOAPn/AAABAAEAAAANAPj/AAABAAEAAAAOAPj/AAABAAEAAAANAPf/AAABAAEAAAAOAPf/AAADAAIAAAAMAPb/AAABAAEAAAANAPb/AAABAAEAAAALAPX/AAABAAEAAAAMAPX/AAABAAEAAAANAPX/AAADAAIAAAAKAPT/AAABAAEAAAALAPT/AAABAAEAAAAMAPT/AAABAAEAAAAJAPT/AAABAAEAAAAJAPP/AAABAAEAAAAKAPP/AAABAAEAAAALAPP/AAADAAIAAAAIAPP/AAABAAEAAAAHAPP/AAABAAEAAAAHAPL/AAABAAEAAAAIAPL/AAABAAEAAAAJAPL/AAABAAEAAAAGAPP/AAABAAEAAAAGAPL/AAABAAEAAAAFAPP/AAABAAEAAAAFAPL/AAABAAEAAAAEAPP/AAABAAEAAAADAPT/AAABAAEAAAADAPP/AAABAAEAAAACAPT/AAABAAEAAAACAPP/AAABAAEAAAABAPT/AAABAAEAAAABAPP/AAABAAEAAAAAAPT/AAABAAEAAAAAAPP/AAABAAEAAAD///T/AAABAAEAAAD///P/AAABAAEAAAD+//T/AAABAAEAAAD+//P/AAABAAEAAAD9//P/AAABAAEAAAD8//P/AAABAAEAAAAAAPL/AAABAAEAAAABAPL/AAABAAEAAAACAPL/AAABAAEAAAD///L/AAABAAEAAAD+//L/AAABAAEAAAD9//L/AAABAAEAAAD8//L/AAABAAEAAAD7//P/AAABAAEAAAD7//L/AAABAAEAAAADAPL/AAABAAEAAAAEAPL/AAABAAEAAAD6//P/AAABAAEAAAD5//P/AAABAAEAAAD4//P/AAABAAEAAAD3//P/AAABAAEAAAD5//L/AAABAAEAAAD6//L/AAABAAEAAAD4//L/AAABAAEAAAD2//T/AAABAAEAAAD2//P/AAABAAEAAAD1//X/AAABAAEAAAD1//T/AAABAAEAAAD1//P/AAABAAEAAAD1//b/AAABAAEAAAD0//b/AAABAAEAAAD0//X/AAABAAEAAAD0//T/AAAFAAIAAAD1//f/AAABAAEAAAD0//f/AAABAAEAAADz//f/AAABAAEAAADz//b/AAABAAEAAADz//X/AAAFAAIAAAD0//j/AAABAAEAAADz//j/AAABAAEAAADy//j/AAABAAEAAADy//f/AAAFAAIAAADy//b/AAAFAAEAAADz//n/AAABAAEAAADy//n/AAABAAEAAADz//r/AAABAAEAAADy//r/AAABAAEAAADy//v/AAABAAEAAADy//z/AAABAAEAAADy//3/AAABAAEAAADx//3/AAABAAEAAADx//z/AAABAAEAAADx//v/AAABAAEAAADy//7/AAABAAEAAADx//7/AAABAAEAAADy////AAABAAEAAADx////AAABAAEAAADy/wAAAAABAAEAAADx/wAAAAABAAEAAADy/wEAAAABAAEAAADx/wEAAAABAAEAAADx/wIAAAABAAEAAADx/wMAAAABAAEAAADw/wMAAAABAAEAAADw/wIAAAABAAEAAADw/wEAAAABAAEAAADx/wQAAAABAAEAAADw/wQAAAABAAEAAADx/wUAAAABAAEAAADx/wYAAAABAAEAAADw/wYAAAABAAEAAADw/wUAAAABAAEAAADx/wcAAAABAAEAAADw/wcAAAABAAEAAADw/wAAAAABAAEAAADw////AAABAAEAAADw//7/AAABAAEAAADw//3/AAABAAEAAADw//z/AAABAAEAAADv/wQAAAABAAEAAADv/wMAAAABAAEAAADv/wIAAAABAAEAAADv/wEAAAABAAEAAADv/wAAAAABAAEAAADv////AAABAAEAAADv//7/AAABAAEAAADx/wgAAAABAAEAAADy/wkAAAABAAEAAADx/wkAAAABAAEAAADw/wgAAAABAAEAAADw/wkAAAABAAEAAADy/woAAAABAAEAAADz/wsAAAABAAEAAAD1/wwAAAABAAEAAAD0/wwAAAABAAEAAADz/wwAAAABAAEAAAD1/w0AAAABAAEAAAD0/w0AAAABAAEAAADz/w0AAAABAAEAAAD2/wwAAAABAAEAAAD2/w0AAAABAAEAAADy/wwAAAABAAEAAADy/wsAAAABAAEAAADx/wsAAAABAAEAAADx/woAAAABAAEAAAD3/w0AAAABAAEAAAD4/w0AAAABAAEAAAD5/w0AAAABAAEAAAD5/w4AAAABAAEAAAD4/w4AAAABAAEAAAD3/w4AAAABAAEAAAD7/w4AAAABAAEAAAD6/w4AAAABAAEAAAD8/w4AAAABAAEAAAD+/w8AAAABAAEAAAD9/w8AAAABAAEAAAD8/w8AAAABAAEAAAD//w8AAAABAAEAAAD//xAAAAABAAEAAAD+/xAAAAABAAEAAAD9/xAAAAABAAEAAAD7/w8AAAABAAEAAAD6/w8AAAABAAEAAAAAAA8AAAABAAEAAAAAABAAAAABAAEAAAABAA8AAAABAAEAAAACAA8AAAABAAEAAAACABAAAAABAAEAAAABABAAAAABAAEAAAADAA8AAAABAAEAAAADABAAAAABAAEAAAAEAA8AAAABAAEAAAAFAA4AAAABAAEAAAAFAA8AAAABAAEAAAAGAA4AAAABAAEAAAAGAA8AAAABAAEAAAAHAA4AAAABAAEAAAAHAA8AAAABAAEAAAAIAA4AAAABAAEAAAAIAA8AAAABAAEAAAAJAA4AAAABAAEAAAAKAA4AAAABAAEAAAALAA0AAAABAAEAAAAMAAsAAAABAAEAAAAMAAwAAAABAAEAAAANAAkAAAABAAEAAAAOAAcAAAABAAEAAAAOAAgAAAABAAEAAAAPAAYAAAABAAEAAAAPAAcAAAABAAEAAAAPAAUAAAABAAEAAAAOAAkAAAABAAEAAAAOAAoAAAABAAEAAAANAAoAAAABAAEAAAANAAsAAAABAAEAAAANAAwAAAABAAEAAAAOAAsAAAADAAAAAAAPAAQAAAABAAEAAAAPAAMAAAABAAEAAAAPAAIAAAABAAEAAAAPAAEAAAABAAEAAAAPAAAAAAABAAEAAAAPAP//AAABAAEAAAAPAP7/AAABAAEAAAAQAP7/AAABAAEAAAAQAP//AAABAAEAAAAQAAAAAAABAAEAAAARAP//AAABAAEAAAARAAAAAAABAAEAAAARAP7/AAABAAEAAAARAAEAAAABAAEAAAAQAAEAAAABAAEAAAAQAAIAAAABAAEAAAAQAP3/AAABAAEAAAAQAPz/AAABAAEAAAAQAAMAAAABAAEAAAAQAAQAAAABAAEAAAARAAUAAAABAAEAAAAQAAUAAAABAAEAAAAQAAYAAAABAAEAAAASAAAAAAABAAEAAAASAP//AAABAAEAAAASAP7/AAADAAIAAAARAP3/AAADAAIAAAASAP3/AAACAAAAAAARAPz/AAADAAEAAAAQAPv/AAADAAIAAAARAPv/AAACAAAAAAAQAPr/AAADAAEAAAAPAPn/AAADAAIAAAAQAPn/AAACAAAAAAAPAPj/AAADAAEAAAAPAPf/AAACAAAAAAAOAPb/AAADAAEAAAAOAPX/AAACAAAAAAANAPT/AAACAAEAAAAMAPP/AAAEAAIAAAANAPP/AAACAAAAAAAKAPL/AAADAAIAAAALAPL/AAACAAAAAAAHAPH/AAADAAIAAAAIAPH/AAABAAAAAAAJAPH/AAABAAAAAAAGAPH/AAABAAEAAAAFAPH/AAABAAEAAAAEAPH/AAABAAEAAAADAPH/AAABAAEAAAACAPH/AAABAAEAAAABAPH/AAABAAEAAAAAAPH/AAABAAEAAAD///H/AAABAAEAAAD5//H/AAABAAEAAAD6//H/AAABAAEAAAD7//H/AAABAAEAAAD8//H/AAABAAEAAAD9//H/AAABAAEAAAD+//H/AAABAAEAAAD4//H/AAABAAEAAAD3//L/AAABAAEAAAD3//H/AAAFAAIAAAD2//L/AAAFAAIAAAD2//H/AAAAAAAAAAD1//L/AAAEAAIAAAD0//P/AAAFAAEAAAD0//L/AAAAAAAAAADz//T/AAAAAAAAAADy//X/AAAAAAAAAADx//n/AAABAAEAAADx//j/AAAFAAIAAADx//f/AAAAAAAAAADx//r/AAABAAEAAADw//r/AAAFAAIAAADw//n/AAAFAAEAAADw//j/AAAAAAAAAADw//v/AAABAAEAAADv//z/AAABAAEAAADv//v/AAAFAAIAAADv//r/AAAAAAAAAADv//3/AAABAAEAAADu/wAAAAABAAEAAADu////AAABAAEAAADu//7/AAABAAEAAADu/wEAAAABAAEAAADv/wUAAAABAAEAAADv/wYAAAABAAEAAADv/wcAAAABAAEAAADv/wgAAAABAAEAAADw/woAAAABAAEAAAABABEAAAABAAEAAAAAABEAAAABAAEAAAD//xEAAAABAAEAAAACABEAAAABAAEAAAD2/w4AAAABAAEAAAD1/w4AAAABAAEAAAD5/w8AAAABAAEAAAD4/w8AAAABAAEAAAD3/w8AAAABAAEAAAD5/xAAAAABAAEAAAD4/xAAAAABAAEAAAD6/xAAAAABAAEAAAD7/xAAAAABAAEAAAD8/xAAAAABAAEAAAD8/xEAAAABAAEAAAD7/xEAAAABAAEAAAD6/xEAAAABAAEAAAD9/xEAAAABAAEAAAD+/xEAAAABAAEAAAADABEAAAABAAEAAAAEABAAAAABAAEAAAAEABEAAAABAAEAAAAFABAAAAABAAEAAAAFABEAAAABAAEAAAAGABAAAAABAAEAAAAGABEAAAADAAAAAAAHABAAAAABAAEAAAAIABAAAAABAAEAAAAJAA8AAAABAAEAAAAJABAAAAABAAEAAAAKAA8AAAABAAEAAAALAA4AAAABAAEAAAALAA8AAAADAAAAAAAMAA0AAAABAAEAAAAMAA4AAAADAAAAAAAMAA8AAAACAAIAAAANAA0AAAABAAEAAAANAA4AAAABAAIAAAAOAA0AAAADAAEAAAAOAA4AAAACAAIAAAAOAAwAAAADAAEAAAAPAAkAAAABAAEAAAAPAAoAAAABAAEAAAAPAAgAAAABAAEAAAAQAAcAAAABAAEAAAARAAYAAAABAAEAAAARAAcAAAABAAEAAAARAAgAAAABAAEAAAAQAAgAAAABAAEAAAAQAAkAAAABAAEAAAAQAAoAAAADAAAAAAAPAAsAAAABAAIAAAACAPD/AAABAAEAAAADAPD/AAABAAEAAAAEAPD/AAADAAIAAAABAPD/AAABAAEAAAAAAPD/AAABAAEAAAD///D/AAABAAEAAAD+//D/AAABAAEAAAD9//D/AAABAAEAAAD8//D/AAABAAEAAAD7//D/AAABAAEAAAD6//D/AAABAAEAAAD6/+//AAABAAEAAAD7/+//AAABAAEAAAD8/+//AAABAAEAAAD6/+7/AAABAAAAAAD7/+7/AAAEAAIAAAD8/+7/AAAEAAIAAAD5//D/AAAFAAIAAAD5/+//AAAFAAEAAAD5/+7/AAAAAAAAAAD9/+//AAABAAEAAAD9/+7/AAAEAAIAAAD+/+//AAABAAEAAAD+/+7/AAABAAAAAAD//+//AAABAAEAAAD//+7/AAABAAAAAAAAAO//AAABAAEAAAAAAO7/AAAEAAIAAAABAO//AAABAAEAAAABAO7/AAAEAAIAAAACAO//AAADAAIAAAACAO7/AAACAAAAAAADAO//AAAEAAIAAAAFAPD/AAAEAAIAAAAGAPD/AAABAAAAAAAEAO//AAACAAAAAAD4//D/AAAEAAIAAAD3//D/AAAAAAAAAAAHAPD/AAACAAAAAAAKAPH/AAACAAAAAADw/wsAAAAFAAAAAADv/wsAAAAAAAIAAADv/woAAAAFAAAAAADv/wkAAAABAAEAAADx/wwAAAAFAAAAAADw/wwAAAAAAAIAAADy/w0AAAABAAEAAADx/w0AAAAFAAEAAADy/w4AAAAFAAAAAADx/w4AAAAAAAIAAADz/w4AAAABAAEAAAD0/w4AAAABAAEAAAD0/w8AAAAFAAAAAADz/w8AAAAEAAAAAADy/w8AAAAAAAIAAAD1/w8AAAABAAEAAAD2/w8AAAABAAEAAAD2/xAAAAAFAAAAAAD1/xAAAAAEAAAAAAD0/xAAAAAAAAIAAAD3/xAAAAABAAEAAAD3/xEAAAAEAAAAAAD2/xEAAAAAAAIAAAD4/xEAAAAFAAAAAAD5/xEAAAABAAEAAAD5/xIAAAAFAAAAAAD4/xIAAAAAAAIAAAD6/xIAAAABAAEAAAD7/xIAAAABAAEAAAD8/xIAAAABAAEAAAD9/xIAAAABAAEAAAD+/xIAAAABAAEAAAD//xIAAAABAAEAAAAAABIAAAABAAEAAAABABIAAAABAAEAAAACABIAAAABAAEAAAADABIAAAABAAEAAAAEABIAAAADAAAAAADu/wkAAAABAAEAAADu/wgAAAABAAEAAADu/wcAAAAFAAIAAADu/woAAAAEAAAAAADt/woAAAAAAAIAAADt/wkAAAAAAAEAAADt/wgAAAAFAAEAAADt/wcAAAAAAAAAAADu/wYAAAAAAAEAAADu/wUAAAAFAAEAAADu/wQAAAAFAAEAAADu/wMAAAAFAAEAAADu/wIAAAAFAAAAAADt/wEAAAAFAAEAAADt/wAAAAAFAAAAAADt////AAABAAEAAADt//7/AAAFAAIAAADs/wAAAAAAAAIAAADs////AAAAAAEAAADs//7/AAAAAAAAAADt/wIAAAAAAAIAAADu//3/AAABAAEAAADu//z/AAAFAAIAAADu//v/AAAAAAAAAADt//3/AAAAAAEAAADt//z/AAAAAAAAAAD7/xMAAAABAAEAAAD6/xMAAAAFAAAAAAD5/xMAAAAAAAIAAAD8/xMAAAABAAEAAAD8/xQAAAABAAIAAAD7/xQAAAAEAAAAAAD6/xQAAAAAAAIAAAD9/xMAAAABAAEAAAD9/xQAAAAFAAAAAAD+/xMAAAABAAEAAAD+/xQAAAABAAEAAAD//xMAAAABAAEAAAD//xQAAAABAAEAAAD//xUAAAAEAAAAAAD+/xUAAAABAAIAAAD9/xUAAAAAAAIAAAAAABQAAAABAAEAAAAAABUAAAAEAAAAAAAAABMAAAABAAEAAAABABQAAAABAAEAAAABABUAAAAEAAAAAAABABMAAAABAAEAAAACABQAAAADAAAAAAACABUAAAACAAIAAAACABMAAAABAAEAAAADABMAAAABAAEAAAADABQAAAAEAAAAAAAEABMAAAACAAEAAAAEABQAAAACAAIAAAAFABIAAAABAAIAAAAGABIAAAACAAIAAAAHABEAAAAEAAAAAAAIABEAAAAEAAAAAAAJABEAAAABAAIAAAAKABAAAAADAAAAAAAKABEAAAACAAIAAAALABAAAAACAAIAAAAQAAsAAAACAAIAAAARAAkAAAADAAAAAAARAAoAAAACAAIAAAASAAgAAAADAAAAAAASAAkAAAACAAIAAAASAAcAAAABAAEAAAATAAcAAAACAAEAAAATAAgAAAACAAIAAAASAAYAAAABAAEAAAATAAYAAAADAAEAAAASAAUAAAABAAEAAAATAAUAAAADAAEAAAATAP//AAADAAEAAAATAAAAAAADAAEAAAATAP7/AAACAAAAAAARAAIAAAABAAEAAAASAAIAAAADAAAAAAASAAMAAAACAAEAAAARAAMAAAABAAEAAAASAAEAAAABAAEAAAASAAQAAAADAAIAAAARAAQAAAABAAEAAAATAAQAAAACAAAAAAATAAEAAAACAAEAAAATAAIAAAACAAIAAAD4//j/AAABAAEAAAAIAPn/AAABAAEAAAD3//3/AAABAAEAAAD3//7/AAABAAEAAAD2//7/AAABAAEAAAD2////AAABAAEAAAD2//3/AAABAAEAAAD1//3/AAABAAEAAAD3////AAABAAEAAAD3//z/AAABAAEAAAD4//z/AAABAAEAAAD4//v/AAABAAEAAAD3/wAAAAABAAEAAAD3/wEAAAABAAEAAAD3/wIAAAABAAEAAAD3/wMAAAABAAEAAAD3/wQAAAABAAEAAAD3/wUAAAABAAEAAAD4//n/AAABAAEAAAD4//r/AAABAAEAAAD4//3/AAABAAEAAAD4//7/AAABAAEAAAD4////AAABAAEAAAD4/wAAAAABAAEAAAD4/wEAAAABAAEAAAD4/wIAAAABAAEAAAD4/wMAAAABAAEAAAD4/wQAAAABAAEAAAD4/wUAAAABAAEAAAD4/wYAAAABAAEAAAD4/wcAAAABAAEAAAD4/wgAAAABAAEAAAD5//n/AAABAAEAAAD5//r/AAABAAEAAAD5//v/AAABAAEAAAD5//z/AAABAAEAAAD5//3/AAABAAEAAAD5//7/AAABAAEAAAD5////AAABAAEAAAD5/wAAAAABAAEAAAD5/wEAAAABAAEAAAD5/wIAAAABAAEAAAD5/wMAAAABAAEAAAD5/wQAAAABAAEAAAD5/wUAAAABAAEAAAD5/wYAAAABAAEAAAD5/wcAAAABAAEAAAD5/wgAAAABAAEAAAD6//j/AAABAAEAAAD6//n/AAABAAEAAAD6//r/AAABAAEAAAD6//v/AAABAAEAAAD6//z/AAABAAEAAAD6//3/AAABAAEAAAD6//7/AAABAAEAAAD6////AAABAAEAAAD6/wAAAAABAAEAAAD6/wEAAAABAAEAAAD6/wIAAAABAAEAAAD6/wMAAAABAAEAAAD6/wQAAAABAAEAAAD6/wUAAAABAAEAAAD6/wYAAAABAAEAAAD6/wcAAAABAAEAAAD6/wgAAAABAAEAAAD7//j/AAABAAEAAAD7//n/AAABAAEAAAD7//r/AAABAAEAAAD7//v/AAABAAEAAAD7//z/AAABAAEAAAD7//3/AAABAAEAAAD7//7/AAABAAEAAAD7////AAABAAEAAAD7/wAAAAABAAEAAAD7/wEAAAABAAEAAAD7/wIAAAABAAEAAAD7/wMAAAABAAEAAAD7/wQAAAABAAEAAAD7/wUAAAABAAEAAAD7/wYAAAABAAEAAAD7/wcAAAABAAEAAAD7/wgAAAABAAEAAAD7/wkAAAABAAEAAAD8//j/AAABAAEAAAD8//n/AAABAAEAAAD8//r/AAABAAEAAAD8//v/AAABAAEAAAD8//z/AAABAAEAAAD8//3/AAABAAEAAAD8//7/AAABAAEAAAD8////AAABAAEAAAD8/wAAAAABAAEAAAD8/wEAAAABAAEAAAD8/wIAAAABAAEAAAD8/wMAAAABAAEAAAD8/wQAAAABAAEAAAD8/wUAAAABAAEAAAD8/wYAAAABAAEAAAD8/wcAAAABAAEAAAD8/wgAAAABAAEAAAD8/wkAAAABAAEAAAD9//n/AAABAAEAAAD9//r/AAABAAEAAAD9//v/AAABAAEAAAD9//z/AAABAAEAAAD9//3/AAABAAEAAAD9//7/AAABAAEAAAD9////AAABAAEAAAD9/wAAAAABAAEAAAD9/wEAAAABAAEAAAD9/wIAAAABAAEAAAD9/wMAAAABAAEAAAD9/wQAAAABAAEAAAD9/wUAAAABAAEAAAD9/wYAAAABAAEAAAD9/wcAAAABAAEAAAD9/wgAAAABAAEAAAD9/wkAAAABAAEAAAD+//n/AAABAAEAAAD+//r/AAABAAEAAAD+//v/AAABAAEAAAD+//z/AAABAAEAAAD+//3/AAABAAEAAAD+//7/AAABAAEAAAD+////AAABAAEAAAD+/wAAAAABAAEAAAD+/wEAAAABAAEAAAD+/wIAAAABAAEAAAD+/wMAAAABAAEAAAD+/wQAAAABAAEAAAD+/wUAAAABAAEAAAD+/wYAAAABAAEAAAD+/wcAAAABAAEAAAD+/wgAAAABAAEAAAD+/wkAAAABAAEAAAD///n/AAABAAEAAAD///r/AAABAAEAAAD///v/AAABAAEAAAD///z/AAABAAEAAAD///3/AAABAAEAAAD///7/AAABAAEAAAD/////AAABAAEAAAD//wAAAAABAAEAAAD//wEAAAABAAEAAAD//wIAAAABAAEAAAD//wMAAAABAAEAAAD//wQAAAABAAEAAAD//wUAAAABAAEAAAD//wYAAAABAAEAAAD//wcAAAABAAEAAAD//wgAAAABAAEAAAAAAPn/AAABAAEAAAAAAPr/AAABAAEAAAAAAPv/AAABAAEAAAAAAPz/AAABAAEAAAAAAP3/AAABAAEAAAAAAP7/AAABAAEAAAAAAP//AAABAAEAAAAAAAAAAAABAAEAAAAAAAEAAAABAAEAAAAAAAIAAAABAAEAAAAAAAMAAAABAAEAAAAAAAQAAAABAAEAAAAAAAUAAAABAAEAAAAAAAYAAAABAAEAAAAAAAcAAAABAAEAAAAAAAgAAAABAAEAAAABAPn/AAABAAEAAAABAPr/AAABAAEAAAABAPv/AAABAAEAAAABAPz/AAABAAEAAAABAP3/AAABAAEAAAABAP7/AAABAAEAAAABAP//AAABAAEAAAABAAAAAAABAAEAAAABAAEAAAABAAEAAAABAAIAAAABAAEAAAABAAMAAAABAAEAAAABAAQAAAABAAEAAAABAAUAAAABAAEAAAABAAYAAAABAAEAAAABAAcAAAABAAEAAAABAAgAAAABAAEAAAACAPn/AAABAAEAAAACAPr/AAABAAEAAAACAPv/AAABAAEAAAACAPz/AAABAAEAAAACAP3/AAABAAEAAAACAP7/AAABAAEAAAACAP//AAABAAEAAAACAAAAAAABAAEAAAACAAEAAAABAAEAAAACAAIAAAABAAEAAAACAAMAAAABAAEAAAACAAQAAAABAAEAAAACAAUAAAABAAEAAAACAAYAAAABAAEAAAACAAcAAAABAAEAAAACAAgAAAABAAEAAAADAPn/AAABAAEAAAADAPr/AAABAAEAAAADAPv/AAABAAEAAAADAPz/AAABAAEAAAADAP3/AAABAAEAAAADAP7/AAABAAEAAAADAP//AAABAAEAAAADAAAAAAABAAEAAAADAAEAAAABAAEAAAADAAIAAAABAAEAAAADAAMAAAABAAEAAAADAAQAAAABAAEAAAADAAUAAAABAAEAAAADAAYAAAABAAEAAAADAAcAAAABAAEAAAADAAgAAAABAAEAAAAEAPn/AAABAAEAAAAEAPr/AAABAAEAAAAEAPv/AAABAAEAAAAEAPz/AAABAAEAAAAEAP3/AAABAAEAAAAEAP7/AAABAAEAAAAEAP//AAABAAEAAAAEAAAAAAABAAEAAAAEAAEAAAABAAEAAAAEAAIAAAABAAEAAAAEAAMAAAABAAEAAAAEAAQAAAABAAEAAAAEAAUAAAABAAEAAAAEAAYAAAABAAEAAAAEAAcAAAABAAEAAAAEAAgAAAABAAEAAAAFAPn/AAABAAEAAAAFAPr/AAABAAEAAAAFAPv/AAABAAEAAAAFAPz/AAABAAEAAAAFAP3/AAABAAEAAAAFAP7/AAABAAEAAAAFAP//AAABAAEAAAAFAAAAAAABAAEAAAAFAAEAAAABAAEAAAAFAAIAAAABAAEAAAAFAAMAAAABAAEAAAAFAAQAAAABAAEAAAAFAAUAAAABAAEAAAAFAAYAAAABAAEAAAAFAAcAAAABAAEAAAAFAAgAAAABAAEAAAAFAAkAAAABAAEAAAAGAPn/AAABAAEAAAAGAPr/AAABAAEAAAAGAPv/AAABAAEAAAAGAPz/AAABAAEAAAAGAP3/AAABAAEAAAAGAP7/AAABAAEAAAAGAP//AAABAAEAAAAGAAAAAAABAAEAAAAGAAEAAAABAAEAAAAGAAIAAAABAAEAAAAGAAMAAAABAAEAAAAGAAQAAAABAAEAAAAGAAUAAAABAAEAAAAGAAYAAAABAAEAAAAGAAcAAAABAAEAAAAGAAgAAAABAAEAAAAHAPn/AAABAAEAAAAHAPr/AAABAAEAAAAHAPv/AAABAAEAAAAHAPz/AAABAAEAAAAHAP3/AAABAAEAAAAHAP7/AAABAAEAAAAHAP//AAABAAEAAAAHAAAAAAABAAEAAAAHAAEAAAABAAEAAAAHAAIAAAABAAEAAAAHAAMAAAABAAEAAAAHAAQAAAABAAEAAAAHAAUAAAABAAEAAAAHAAYAAAABAAEAAAAHAAcAAAABAAEAAAAIAPr/AAABAAEAAAAIAPv/AAABAAEAAAAIAPz/AAABAAEAAAAIAP3/AAABAAEAAAAIAP7/AAABAAEAAAAIAP//AAABAAEAAAAIAAAAAAABAAEAAAAIAAEAAAABAAEAAAAIAAIAAAABAAEAAAAIAAMAAAABAAEAAAAIAAQAAAABAAEAAAAIAAUAAAABAAEAAAAIAAYAAAABAAEAAAD2/wQAAAABAAEAAAD2/wUAAAABAAEAAAD2/wYAAAABAAEAAAA=") +tile_set = ExtResource("1_ebmjs") + +[node name="Roads" type="TileMapLayer" parent="Level"] +tile_map_data = PackedByteArray("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") +tile_set = ExtResource("1_ebmjs") + +[node name="YSorted" type="Node2D" parent="Level"] y_sort_enabled = true texture_filter = 1 -[node name="Player" parent="NavigationRegion2D/YSorted" instance=ExtResource("3_3dryh")] -position = Vector2(8, 64) - -[node name="TileMapLayer" type="TileMapLayer" parent="NavigationRegion2D/YSorted"] +[node name="TileMapLayer" type="TileMapLayer" parent="Level/YSorted"] y_sort_enabled = true -tile_map_data = PackedByteArray("AAAGAP//AAAAAAQAAAD9/wQAAAAAAAQAAAADAPz/AAAAAAQAABABAAEAAAAIAAQAAAAAAAEAAAAHAAQAAAACAAEAAAAJAAQAAAADAAYAAAAAAAQAABAAAAYAAAAFAAYAAAAEAP7/AAAFAAYAABD7////AAAFAAYAABAAAPv/AAAFAAYAAAABAP7/AAAFAAYAAAD5/wIAAAAFAAYAABD+//3/AAAEAAcAAAA=") +tile_map_data = PackedByteArray("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") tile_set = ExtResource("1_ebmjs") +navigation_enabled = false -[node name="RockBoi" parent="NavigationRegion2D/YSorted" instance=ExtResource("5_wowpa")] -position = Vector2(-161, 33) +[node name="StaticBody2D" type="StaticBody2D" parent="Level/YSorted"] + +[node name="Sakura" type="Sprite2D" parent="Level/YSorted/StaticBody2D"] +self_modulate = Color(1.7670674, 1.7670674, 1.7670674, 1) +position = Vector2(17, -5) +texture = ExtResource("5_i6g32") +offset = Vector2(8, -54) +flip_h = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Level/YSorted/StaticBody2D"] +position = Vector2(33.5, -8.5) +shape = SubResource("RectangleShape2D_1l0tm") + +[node name="Shrine" type="Sprite2D" parent="Level/YSorted"] +position = Vector2(0, 44) +texture = SubResource("AtlasTexture_1l0tm") +offset = Vector2(8, -54) +flip_h = true + +[node name="FairyLights" type="Node2D" parent="Level/YSorted"] +modulate = Color(1.8247963, 1.8247963, 1.8247963, 1) + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(-118, 79) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.41686898 + +[node name="AnimatedSprite2D2" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(-129, -28) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.7475089 + +[node name="AnimatedSprite2D3" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(104, 139) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.7475089 + +[node name="AnimatedSprite2D5" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(278, 54) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.7475089 + +[node name="AnimatedSprite2D6" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(-91, 247) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.7475089 + +[node name="AnimatedSprite2D7" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(-250, 92) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.7475089 + +[node name="AnimatedSprite2D8" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(40, -200) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.7475089 + +[node name="AnimatedSprite2D4" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(140, -98) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.7475089 + +[node name="Enemies" type="Node2D" parent="Level/YSorted"] +y_sort_enabled = true + +[node name="Turrets" type="Node2D" parent="Level/YSorted"] + +[node name="Projectiles" type="Node2D" parent="Level/YSorted"] +y_sort_enabled = true +script = ExtResource("8_v158k") + +[node name="EnemyPaths" type="Node2D" parent="Level/YSorted"] +y_sort_enabled = true +position = Vector2(8, 8) + +[node name="Path_0" type="Path2D" parent="Level/YSorted/EnemyPaths"] +y_sort_enabled = true +position = Vector2(-8, -8) +curve = SubResource("Curve2D_wowpa") +metadata/_edit_group_ = true + +[node name="Path_1" type="Path2D" parent="Level/YSorted/EnemyPaths"] +y_sort_enabled = true +position = Vector2(-8, -8) +curve = SubResource("Curve2D_i6g32") + +[node name="Path_2" type="Path2D" parent="Level/YSorted/EnemyPaths"] +y_sort_enabled = true +position = Vector2(-8, -8) +curve = SubResource("Curve2D_1l0tm") + +[node name="Path_3" type="Path2D" parent="Level/YSorted/EnemyPaths"] +y_sort_enabled = true +position = Vector2(-8, -8) +curve = SubResource("Curve2D_v158k") + +[node name="Camera2D" type="Camera2D" parent="."] +zoom = Vector2(2, 2) +limit_left = -300 +limit_top = -280 +limit_right = 300 +limit_bottom = 320 +script = ExtResource("10_ldgsr") +ZoomStep = -0.25 +MinZoom = 2.0 +MaxZoom = 4.0 +minX = -300.0 +maxX = 300.0 +minY = -300.0 +maxY = 300.0 + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_h4fw4") diff --git a/Scripts/CameraController.cs b/Scripts/CameraController.cs new file mode 100644 index 0000000..5975ba4 --- /dev/null +++ b/Scripts/CameraController.cs @@ -0,0 +1,69 @@ +using System; +using Godot; + +public partial class CameraController : Camera2D +{ + [Export] public float ZoomStep = 0.1f; + [Export] public float MinZoom = 0.5f; + [Export] public float MaxZoom = 3.0f; + + [Export] private float minX = 0f; + [Export] private float maxX = 0f; + [Export] private float minY = 0f; + [Export] private float maxY = 0f; + + private bool _dragging; + private Vector2 _grabWorldPos; + + public override void _Input(InputEvent @event) + { + // Middle mouse drag + if (@event is InputEventMouseButton mb) + { + if (mb.ButtonIndex == MouseButton.Middle) + { + _dragging = mb.Pressed; + + if (_dragging) + _grabWorldPos = GetGlobalMousePosition(); + } + + // Scroll zoom + if (mb.Pressed && + (mb.ButtonIndex == MouseButton.WheelUp || + mb.ButtonIndex == MouseButton.WheelDown)) + { + Vector2 mouseBeforeZoom = GetGlobalMousePosition(); + + float zoomFactor = mb.ButtonIndex == MouseButton.WheelUp + ? -ZoomStep + : ZoomStep; + + float newZoom = Mathf.Clamp(Zoom.X + zoomFactor, MinZoom, MaxZoom); + Zoom = new Vector2(newZoom, newZoom); + + // keep cursor locked to same world point + Vector2 mouseAfterZoom = GetGlobalMousePosition(); + GlobalPosition += mouseBeforeZoom - mouseAfterZoom; + ClampPos(); + } + } + + if (_dragging && @event is InputEventMouseMotion) + { + Vector2 currentWorld = GetGlobalMousePosition(); + GlobalPosition += _grabWorldPos - currentWorld; + ClampPos(); + } + } + + private void ClampPos() + { + var t = GetCanvasTransform(); + var camrect = t.AffineInverse().BasisXform(GetViewportRect().Size); + GlobalPosition = new Vector2( + Mathf.Clamp(GlobalPosition.X, LimitLeft + camrect.X / 2, LimitRight - camrect.X / 2), + Mathf.Clamp(GlobalPosition.Y, LimitTop + camrect.Y / 2, LimitBottom - camrect.Y / 2) + ); + } +} \ No newline at end of file diff --git a/Scripts/CameraController.cs.uid b/Scripts/CameraController.cs.uid new file mode 100644 index 0000000..0de16a8 --- /dev/null +++ b/Scripts/CameraController.cs.uid @@ -0,0 +1 @@ +uid://df0osorq00h7v diff --git a/Scripts/Common/GameController.cs b/Scripts/Common/GameController.cs index dd9cd23..ba6fb4e 100644 --- a/Scripts/Common/GameController.cs +++ b/Scripts/Common/GameController.cs @@ -5,7 +5,11 @@ public partial class GameController : Node { public static GameController Instance; - [Export] public Node2D Player; + [Export] private float _ShrineStartHP; + + public int Wave { get; private set; } + public int Currency { get; private set; } + public float ShrineHealth { get; private set; } public override void _Ready() { diff --git a/Scripts/Common/ProjectileParent.cs b/Scripts/Common/ProjectileParent.cs new file mode 100644 index 0000000..9d54cc6 --- /dev/null +++ b/Scripts/Common/ProjectileParent.cs @@ -0,0 +1,13 @@ +using Godot; + +namespace fgj26.Scripts.Common; + +public partial class ProjectileParent : Node2D +{ + public static ProjectileParent Instance; + + public override void _Ready() + { + Instance = this; + } +} \ No newline at end of file diff --git a/Scripts/Common/ProjectileParent.cs.uid b/Scripts/Common/ProjectileParent.cs.uid new file mode 100644 index 0000000..7802b2c --- /dev/null +++ b/Scripts/Common/ProjectileParent.cs.uid @@ -0,0 +1 @@ +uid://dxx6nyrs12mr6 diff --git a/Scripts/Components/Health.cs b/Scripts/Components/Health.cs new file mode 100644 index 0000000..90a7c4e --- /dev/null +++ b/Scripts/Components/Health.cs @@ -0,0 +1,39 @@ +using Godot; +using System; + +public partial class Health : Node +{ + [Export] private Node2D _parent; + [Export] private float _baseMaxHp; + public float MaxHP { get; private set; } + public float CurHP { get; private set; } + + [Signal] + public delegate void DeathEventHandler(Node2D node); + + public override void _EnterTree() + { + CurHP = MaxHP = _baseMaxHp * Mathf.Pow(GameController.Instance.Wave, 1.067f); + } + + public void Substract(float v) + { + v = Mathf.Abs(v); + CurHP -= v; + if (CurHP <= 0) + { + EmitSignalDeath(_parent); + } + } + + public void Add(float v) + { + v = Mathf.Abs(v); + CurHP = Math.Clamp(CurHP + v, 0f, MaxHP); + } + + public void Reset() + { + CurHP = MaxHP = _baseMaxHp * Mathf.Pow(GameController.Instance.Wave, 1.067f); + } +} diff --git a/Scripts/Components/Health.cs.uid b/Scripts/Components/Health.cs.uid new file mode 100644 index 0000000..2c29fee --- /dev/null +++ b/Scripts/Components/Health.cs.uid @@ -0,0 +1 @@ +uid://dvkd1keu854so diff --git a/Scripts/Enemies/Enemy.cs b/Scripts/Enemies/Enemy.cs new file mode 100644 index 0000000..4e9839f --- /dev/null +++ b/Scripts/Enemies/Enemy.cs @@ -0,0 +1,26 @@ +using System; +using Godot; + +public partial class Enemy : PathFollow2D +{ + [Export] public EnemyType Type; + [Export] public Health Health; + + public event Action Died; + + public override void _Ready() + { + Health.Death += _ => Died?.Invoke(this); + } + + public void ResetEnemy() + { + GlobalPosition = Vector2.Zero; + Rotation = 0f; + Visible = true; + ProcessMode = ProcessModeEnum.Inherit; + + Health.Reset(); + // reset velocity, animation, AI, etc here + } +} \ No newline at end of file diff --git a/Scripts/Enemies/Enemy.cs.uid b/Scripts/Enemies/Enemy.cs.uid new file mode 100644 index 0000000..dcf5ac7 --- /dev/null +++ b/Scripts/Enemies/Enemy.cs.uid @@ -0,0 +1 @@ +uid://bj52mq7uip7di diff --git a/Scripts/Enemies/EnemyArea.cs b/Scripts/Enemies/EnemyArea.cs new file mode 100644 index 0000000..f4dc3e8 --- /dev/null +++ b/Scripts/Enemies/EnemyArea.cs @@ -0,0 +1,6 @@ +using Godot; + +public partial class EnemyArea : Area2D +{ + [Export] public Enemy Enemy { get; set; } +} \ No newline at end of file diff --git a/Scripts/Enemies/EnemyArea.cs.uid b/Scripts/Enemies/EnemyArea.cs.uid new file mode 100644 index 0000000..f12c8f8 --- /dev/null +++ b/Scripts/Enemies/EnemyArea.cs.uid @@ -0,0 +1 @@ +uid://c247m8m3qmlk0 diff --git a/Scripts/Enemies/EnemyMovement.cs b/Scripts/Enemies/EnemyMovement.cs index b7f636f..1a5d610 100644 --- a/Scripts/Enemies/EnemyMovement.cs +++ b/Scripts/Enemies/EnemyMovement.cs @@ -3,24 +3,18 @@ using System; public partial class EnemyMovement : Node { - [Export] private NavigationAgent2D _agent2D; - [Export] private CharacterBody2D _body2D; + [Export] private PathFollow2D _pathFollow2D; [Export] private float _speed; private double _time = 0; - - public override void _PhysicsProcess(double delta) + + public override void _EnterTree() { - _time += delta; - if (_time > 0.2) - { - _time = 0; - _agent2D.SetTargetPosition(GameController.Instance.Player.GlobalPosition); - } - // _parent.Position = _agent2D.GetNextPathPosition(); - var gpos = _agent2D.GetNextPathPosition(); - var dir = (gpos - _body2D.GlobalPosition).Normalized(); - // _body2D.SetVelocity(dir * _speed * (float)delta); - _body2D.GlobalPosition += dir * _speed * (float)delta; + _pathFollow2D.ProgressRatio = 0; + } + + public override void _Process(double delta) + { + _pathFollow2D.ProgressRatio += (float)delta * (_speed / 1000f); } } diff --git a/Scripts/Enemies/EnemyPool.cs b/Scripts/Enemies/EnemyPool.cs new file mode 100644 index 0000000..bba4338 --- /dev/null +++ b/Scripts/Enemies/EnemyPool.cs @@ -0,0 +1,59 @@ +using Godot; +using System.Collections.Generic; + +public enum EnemyType +{ + Stone, + Stump, + Liquid +} + +public partial class EnemyPool : Node +{ + [Export] private Godot.Collections.Dictionary _scenes; + [Export] private int _poolSize = 10; + + private readonly Dictionary> _pool = new(); + + public override void _Ready() + { + foreach (var kvp in _scenes) + { + var q = new Queue(); + _pool[kvp.Key] = q; + + for (int i = 0; i < _poolSize; i++) + q.Enqueue(CreateEnemy(kvp.Key)); + } + } + + private Enemy CreateEnemy(EnemyType type) + { + var e = _scenes[type].Instantiate(); + e.Died += ReturnToPool; + return e; + } + + public Enemy Get(EnemyType type) + { + if (!_pool.TryGetValue(type, out var q)) + return null; + + var e = q.Count > 0 ? q.Dequeue() : CreateEnemy(type); + e.ResetEnemy(); + return e; + } + + private void ReturnToPool(Enemy e) + { + e.GetParent()?.RemoveChild(e); + e.ProcessMode = ProcessModeEnum.Disabled; + _pool[e.Type].Enqueue(e); + } + + public EnemyType GetRandomType() + { + var keys = new List(_pool.Keys); + return keys[GD.RandRange(0, keys.Count - 1)]; + } +} \ No newline at end of file diff --git a/Scripts/Enemies/EnemyPool.cs.uid b/Scripts/Enemies/EnemyPool.cs.uid new file mode 100644 index 0000000..289996e --- /dev/null +++ b/Scripts/Enemies/EnemyPool.cs.uid @@ -0,0 +1 @@ +uid://bhxyvnirfeipr diff --git a/Scripts/Enemies/EnemySpawner.cs b/Scripts/Enemies/EnemySpawner.cs new file mode 100644 index 0000000..1cffaf6 --- /dev/null +++ b/Scripts/Enemies/EnemySpawner.cs @@ -0,0 +1,39 @@ +using Godot; +using System.Collections.Generic; + +public partial class EnemySpawner : Node +{ + [Export] private Node _pathParent; + [Export] private EnemyPool _pool; + + private readonly List _paths = new(); + + public override void _Ready() + { + foreach (var c in _pathParent.GetChildren()) + if (c is Path2D p) + _paths.Add(p); + + for (int i = 0; i < 10; i++) + SpawnWithDelay(i * 0.33f); + } + + private async void SpawnWithDelay(float t) + { + await ToSignal(GetTree().CreateTimer(t), SceneTreeTimer.SignalName.Timeout); + Spawn(); + } + + private void Spawn() + { + if (_paths.Count == 0) return; + + var path = _paths[GD.RandRange(0, _paths.Count - 1)]; + var type = _pool.GetRandomType(); + var enemy = _pool.Get(type); + + if (enemy == null) return; + + path.AddChild(enemy); + } +} \ No newline at end of file diff --git a/Scripts/Enemies/EnemySpawner.cs.uid b/Scripts/Enemies/EnemySpawner.cs.uid new file mode 100644 index 0000000..03e3fde --- /dev/null +++ b/Scripts/Enemies/EnemySpawner.cs.uid @@ -0,0 +1 @@ +uid://cds2rrl4yjexf diff --git a/Scripts/Helpers/Helpers.cs b/Scripts/Helpers/Helpers.cs new file mode 100644 index 0000000..9d10429 --- /dev/null +++ b/Scripts/Helpers/Helpers.cs @@ -0,0 +1,26 @@ +using System; +using Godot; + +namespace fgj26.Scripts.Helpers; + +public static class Helpers +{ + public static Node2D GetClosest(Node2D from, Node2D[] targets) + { + ArgumentNullException.ThrowIfNull(from); + ArgumentNullException.ThrowIfNull(targets); + if (targets.Length == 0) throw new ArgumentNullException(nameof(targets)); + float dist = float.PositiveInfinity; + Node2D closest = null; + foreach (var t in targets) + { + var td = t.GlobalPosition.DistanceTo(from.GlobalPosition); + if (td < dist) + { + dist = td; + closest = t; + } + } + return closest; + } +} \ No newline at end of file diff --git a/Scripts/Helpers/Helpers.cs.uid b/Scripts/Helpers/Helpers.cs.uid new file mode 100644 index 0000000..40bc543 --- /dev/null +++ b/Scripts/Helpers/Helpers.cs.uid @@ -0,0 +1 @@ +uid://ef7d25f50nut diff --git a/Scripts/Helpers/RNG.cs b/Scripts/Helpers/RNG.cs new file mode 100644 index 0000000..fcf3021 --- /dev/null +++ b/Scripts/Helpers/RNG.cs @@ -0,0 +1,40 @@ +using System; + +public static class RandomHelper +{ + // Single Random instance for the whole app + private static readonly Random _rand = new Random(); + + // Random integer [min, max] inclusive + public static int Int(int min, int max) + { + return _rand.Next(min, max + 1); // max is inclusive + } + + // Random float [min, max) + public static float Float(float min, float max) + { + return (float)(_rand.NextDouble() * (max - min) + min); + } + + // Random double [min, max) + public static double Double(double min, double max) + { + return _rand.NextDouble() * (max - min) + min; + } + + // Random element from an array + public static T Choice(T[] array) + { + if (array == null || array.Length == 0) + throw new ArgumentException("Array cannot be null or empty."); + return array[_rand.Next(array.Length)]; + } + + // Random enum value + public static T ChoiceEnum() where T : Enum + { + Array values = Enum.GetValues(typeof(T)); // returns System.Array + return (T)values.GetValue(_rand.Next(values.Length)); // use GetValue + } +} \ No newline at end of file diff --git a/Scripts/Helpers/RNG.cs.uid b/Scripts/Helpers/RNG.cs.uid new file mode 100644 index 0000000..4719961 --- /dev/null +++ b/Scripts/Helpers/RNG.cs.uid @@ -0,0 +1 @@ +uid://dy2yccrqc1ho3 diff --git a/Scripts/Projectiles/Projectile.cs b/Scripts/Projectiles/Projectile.cs new file mode 100644 index 0000000..334f857 --- /dev/null +++ b/Scripts/Projectiles/Projectile.cs @@ -0,0 +1,52 @@ +using System; +using Godot; +using Godot.Collections; + +public partial class Projectile : Node2D +{ + [Export] private Array _superEffective; + [Export] private float _baseDamage; + [Export] private float _speed; + [Export] private Area2D _hurtBox; + + private float _ttl = 10f; + + public event Action OnDespawn; + public Vector2 Direction; + + public override void _Ready() + { + _hurtBox.AreaEntered += AreaEntered; + _hurtBox.BodyEntered += BodyEntered; + } + + public override void _PhysicsProcess(double delta) + { + GlobalPosition += Direction * _speed * (float)delta; + + _ttl -= (float)delta; + if (_ttl > 0f) return; + CallDeferred(nameof(Despawn)); + } + + private void AreaEntered(Area2D area) + { + if (area is EnemyArea earea) + { + float isSe = _superEffective.Contains(earea.Enemy.Type) ? 2f : 1f; + earea.Enemy.Health.Substract(_baseDamage * isSe); + } + + CallDeferred(nameof(Despawn)); + } + + private void BodyEntered(Node2D node) + { + CallDeferred(nameof(Despawn)); + } + + private void Despawn() + { + OnDespawn?.Invoke(this); + } +} \ No newline at end of file diff --git a/Scripts/Projectiles/Projectile.cs.uid b/Scripts/Projectiles/Projectile.cs.uid new file mode 100644 index 0000000..40abadb --- /dev/null +++ b/Scripts/Projectiles/Projectile.cs.uid @@ -0,0 +1 @@ +uid://ln2lt16fi47q diff --git a/Scripts/Projectiles/ProjectilePool.cs b/Scripts/Projectiles/ProjectilePool.cs new file mode 100644 index 0000000..fa4f1f4 --- /dev/null +++ b/Scripts/Projectiles/ProjectilePool.cs @@ -0,0 +1,39 @@ +using System.Collections.Generic; +using Godot; + + +public partial class ProjectilePool : Node +{ + [Export] private PackedScene _scene; + [Export] private int _poolSize; + + private readonly Queue _pool = new(); + + public override void _Ready() + { + for (int i = 0; i < _poolSize; i++) + { + _pool.Enqueue(CreateProjectile()); + } + } + + private Projectile CreateProjectile() + { + var p = _scene.Instantiate(); + p.OnDespawn += ReturnToPool; + return p; + } + + public Projectile Get() + { + var p = _pool.Count > 0 ? _pool.Dequeue() : CreateProjectile(); + return p; + } + + private void ReturnToPool(Projectile p) + { + p.GetParent()?.RemoveChild(p); + p.ProcessMode = ProcessModeEnum.Disabled; + _pool.Enqueue(p); + } +} \ No newline at end of file diff --git a/Scripts/Projectiles/ProjectilePool.cs.uid b/Scripts/Projectiles/ProjectilePool.cs.uid new file mode 100644 index 0000000..cf05626 --- /dev/null +++ b/Scripts/Projectiles/ProjectilePool.cs.uid @@ -0,0 +1 @@ +uid://cy00plvsi6vkn diff --git a/Scripts/Turrets/Turret.cs b/Scripts/Turrets/Turret.cs new file mode 100644 index 0000000..14ad467 --- /dev/null +++ b/Scripts/Turrets/Turret.cs @@ -0,0 +1,56 @@ +using Godot; +using System; +using System.Collections.Generic; +using System.Linq; +using fgj26.Scripts.Common; +using fgj26.Scripts.Helpers; + +public partial class Turret : Node +{ + [Export] private Area2D _Attackrange; + [Export] private float _fireRate; + [Export] private Node2D _parent; + [Export] private ProjectilePool _projectilePool; + private float _fireTimer = 0f; + + private HashSet _enemiesInRange = new HashSet(); + + public override void _EnterTree() + { + _Attackrange.AreaEntered += EnemyEntered; + _Attackrange.AreaExited += EnemyExited; + } + + private void EnemyEntered(Area2D enemyHitBox) + { + if (enemyHitBox is EnemyArea earea) + { + _enemiesInRange.Add(earea.Enemy); + GD.Print(earea.Name); + } + } + + private void EnemyExited(Area2D enemyHitBox) + { + if (enemyHitBox is EnemyArea earea) + { + _enemiesInRange.Remove(earea.Enemy); + GD.Print(earea.Name); + } + } + + public override void _Process(double delta) + { + if (_enemiesInRange.Count == 0) return; + _fireTimer += (float)delta; + if (!(_fireTimer >= 1f / _fireRate)) return; + _fireTimer = 0; + var t = Helpers.GetClosest(_parent,_enemiesInRange.ToArray()); + var dir = (t.GlobalPosition - _parent.GlobalPosition).Normalized(); + var proj = _projectilePool.Get(); + proj.Direction = dir; + proj.GlobalPosition = _parent.GlobalPosition; + proj.Rotation = dir.Angle(); + ProjectileParent.Instance.AddChild(proj); + } +} diff --git a/Scripts/Turrets/Turret.cs.uid b/Scripts/Turrets/Turret.cs.uid new file mode 100644 index 0000000..2de9041 --- /dev/null +++ b/Scripts/Turrets/Turret.cs.uid @@ -0,0 +1 @@ +uid://cxrhl65cjw4yr diff --git a/Scripts/Turrets/TurretController.cs b/Scripts/Turrets/TurretController.cs new file mode 100644 index 0000000..7ea1cf9 --- /dev/null +++ b/Scripts/Turrets/TurretController.cs @@ -0,0 +1,8 @@ +using Godot; + +namespace fgj26.Scripts.Turrets; + +public partial class TurretController : Node2D +{ + +} \ No newline at end of file diff --git a/Scripts/Turrets/TurretController.cs.uid b/Scripts/Turrets/TurretController.cs.uid new file mode 100644 index 0000000..42e7d3a --- /dev/null +++ b/Scripts/Turrets/TurretController.cs.uid @@ -0,0 +1 @@ +uid://b0uosq6r5dbqa diff --git a/project.godot b/project.godot index d03a47f..dac1776 100644 --- a/project.godot +++ b/project.godot @@ -61,3 +61,9 @@ attack={ [physics] 2d/default_gravity_vector=Vector2(0, 0) + +[rendering] + +viewport/hdr_2d=true +environment/defaults/default_clear_color=Color(0.1254902, 0.1254902, 0.1254902, 1) +environment/defaults/default_environment="uid://cg7bginhcdl5w"