diff --git a/aseprite/attack.aseprite b/aseprite/attack.aseprite new file mode 100644 index 0000000..83f44e0 Binary files /dev/null and b/aseprite/attack.aseprite differ diff --git a/aseprite/heart.aseprite b/aseprite/heart.aseprite index b2aa280..79d4138 100644 Binary files a/aseprite/heart.aseprite and b/aseprite/heart.aseprite differ diff --git a/aseprite/level_interior_tileset.aseprite b/aseprite/level_interior_tileset.aseprite new file mode 100644 index 0000000..7131da7 Binary files /dev/null and b/aseprite/level_interior_tileset.aseprite differ diff --git a/aseprite/skull.aseprite b/aseprite/skull.aseprite new file mode 100644 index 0000000..35a47b8 Binary files /dev/null and b/aseprite/skull.aseprite differ diff --git a/assets/textures/heart.png b/assets/textures/heart.png deleted file mode 100644 index 5729843..0000000 Binary files a/assets/textures/heart.png and /dev/null differ diff --git a/assets/textures/spritesheets/attack.png b/assets/textures/spritesheets/attack.png new file mode 100644 index 0000000..66031c0 Binary files /dev/null and b/assets/textures/spritesheets/attack.png differ diff --git a/assets/textures/spritesheets/attack.png.import b/assets/textures/spritesheets/attack.png.import new file mode 100644 index 0000000..6494e74 --- /dev/null +++ b/assets/textures/spritesheets/attack.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c1yunf5rn1ncd" +path="res://.godot/imported/attack.png-2cfcc8cfa42d648f76fae46c4823b97e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/spritesheets/attack.png" +dest_files=["res://.godot/imported/attack.png-2cfcc8cfa42d648f76fae46c4823b97e.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/textures/spritesheets/dark_house_assets.png b/assets/textures/spritesheets/dark_house_assets.png new file mode 100644 index 0000000..2032e47 Binary files /dev/null and b/assets/textures/spritesheets/dark_house_assets.png differ diff --git a/assets/textures/spritesheets/dark_house_assets.png.import b/assets/textures/spritesheets/dark_house_assets.png.import new file mode 100644 index 0000000..4563e36 --- /dev/null +++ b/assets/textures/spritesheets/dark_house_assets.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dsapnb753puib" +path="res://.godot/imported/dark_house_assets.png-5b4f16c3b2bac7ea51c517c5ed69aad2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/spritesheets/dark_house_assets.png" +dest_files=["res://.godot/imported/dark_house_assets.png-5b4f16c3b2bac7ea51c517c5ed69aad2.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/textures/spritesheets/explosion.png b/assets/textures/spritesheets/explosion.png new file mode 100644 index 0000000..60b74a6 Binary files /dev/null and b/assets/textures/spritesheets/explosion.png differ diff --git a/assets/textures/spritesheets/explosion.png.import b/assets/textures/spritesheets/explosion.png.import new file mode 100644 index 0000000..549522c --- /dev/null +++ b/assets/textures/spritesheets/explosion.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cj28uue3ibju4" +path="res://.godot/imported/explosion.png-a255340e5a22a052cb2de3e325a49006.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/spritesheets/explosion.png" +dest_files=["res://.godot/imported/explosion.png-a255340e5a22a052cb2de3e325a49006.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/textures/spritesheets/heart.png b/assets/textures/spritesheets/heart.png new file mode 100644 index 0000000..67dc010 Binary files /dev/null and b/assets/textures/spritesheets/heart.png differ diff --git a/assets/textures/heart.png.import b/assets/textures/spritesheets/heart.png.import similarity index 76% rename from assets/textures/heart.png.import rename to assets/textures/spritesheets/heart.png.import index dc4d591..631a421 100644 --- a/assets/textures/heart.png.import +++ b/assets/textures/spritesheets/heart.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://5pbgeg3yx6cd" -path="res://.godot/imported/heart.png-0efefdd245172a860e354a0c110700fc.ctex" +path="res://.godot/imported/heart.png-b859c8314af5d01e464245f568d254ab.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/textures/heart.png" -dest_files=["res://.godot/imported/heart.png-0efefdd245172a860e354a0c110700fc.ctex"] +source_file="res://assets/textures/spritesheets/heart.png" +dest_files=["res://.godot/imported/heart.png-b859c8314af5d01e464245f568d254ab.ctex"] [params] diff --git a/assets/textures/spritesheets/skull.png b/assets/textures/spritesheets/skull.png new file mode 100644 index 0000000..572e031 Binary files /dev/null and b/assets/textures/spritesheets/skull.png differ diff --git a/assets/textures/spritesheets/skull.png.import b/assets/textures/spritesheets/skull.png.import new file mode 100644 index 0000000..6981191 --- /dev/null +++ b/assets/textures/spritesheets/skull.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c886j66l82ncy" +path="res://.godot/imported/skull.png-98b27d26afd4c757dfebc837a7efd43f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/spritesheets/skull.png" +dest_files=["res://.godot/imported/skull.png-98b27d26afd4c757dfebc837a7efd43f.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/textures/tilemaps/level_interior_tileset.png b/assets/textures/tilemaps/level_interior_tileset.png new file mode 100644 index 0000000..fc3cae7 Binary files /dev/null and b/assets/textures/tilemaps/level_interior_tileset.png differ diff --git a/assets/textures/tilemaps/level_interior_tileset.png.import b/assets/textures/tilemaps/level_interior_tileset.png.import new file mode 100644 index 0000000..631ce88 --- /dev/null +++ b/assets/textures/tilemaps/level_interior_tileset.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://2aopgpvv473r" +path="res://.godot/imported/level_interior_tileset.png-75528c6b73d7db3296f599b394b4bd4f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/tilemaps/level_interior_tileset.png" +dest_files=["res://.godot/imported/level_interior_tileset.png-75528c6b73d7db3296f599b394b4bd4f.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/project.godot b/project.godot index 8cadbae..c26eb16 100644 --- a/project.godot +++ b/project.godot @@ -43,6 +43,10 @@ window/size/mode.release=4 enabled=PackedStringArray("res://addons/TileMapDual/plugin.cfg", "res://addons/dialogue_manager/plugin.cfg") +[global_group] + +Enemy="All enemies with pathfinding" + [gui] theme/default_font_antialiasing=0 diff --git a/resources/explosion_animation.tres b/resources/explosion_animation.tres new file mode 100644 index 0000000..edd1d31 --- /dev/null +++ b/resources/explosion_animation.tres @@ -0,0 +1,130 @@ +[gd_resource type="SpriteFrames" load_steps=19 format=3 uid="uid://bl36fbm1g0x3"] + +[ext_resource type="Texture2D" uid="uid://cj28uue3ibju4" path="res://assets/textures/spritesheets/explosion.png" id="1_gjs8n"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_16r5y"] +atlas = ExtResource("1_gjs8n") +region = Rect2(0, 0, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_x7j8h"] +atlas = ExtResource("1_gjs8n") +region = Rect2(202, 0, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_j2yjp"] +atlas = ExtResource("1_gjs8n") +region = Rect2(404, 0, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fn6pb"] +atlas = ExtResource("1_gjs8n") +region = Rect2(606, 0, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gnwjt"] +atlas = ExtResource("1_gjs8n") +region = Rect2(808, 0, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_lhham"] +atlas = ExtResource("1_gjs8n") +region = Rect2(0, 202, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_utqf1"] +atlas = ExtResource("1_gjs8n") +region = Rect2(202, 202, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2rpcc"] +atlas = ExtResource("1_gjs8n") +region = Rect2(404, 202, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gtt86"] +atlas = ExtResource("1_gjs8n") +region = Rect2(606, 202, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_w6lqy"] +atlas = ExtResource("1_gjs8n") +region = Rect2(808, 202, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_aarit"] +atlas = ExtResource("1_gjs8n") +region = Rect2(0, 404, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_kug7w"] +atlas = ExtResource("1_gjs8n") +region = Rect2(202, 404, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vbd1p"] +atlas = ExtResource("1_gjs8n") +region = Rect2(404, 404, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l16b2"] +atlas = ExtResource("1_gjs8n") +region = Rect2(606, 404, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_k2ltt"] +atlas = ExtResource("1_gjs8n") +region = Rect2(808, 404, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_yd17a"] +atlas = ExtResource("1_gjs8n") +region = Rect2(0, 606, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_et1j0"] +atlas = ExtResource("1_gjs8n") +region = Rect2(202, 606, 202, 202) + +[resource] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_16r5y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_x7j8h") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_j2yjp") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fn6pb") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_gnwjt") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_lhham") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_utqf1") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2rpcc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_gtt86") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_w6lqy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_aarit") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_kug7w") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vbd1p") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_l16b2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_k2ltt") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_yd17a") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_et1j0") +}], +"loop": true, +"name": &"default", +"speed": 10.0 +}] diff --git a/scenes/enemies/skull.tscn b/scenes/enemies/skull.tscn new file mode 100644 index 0000000..2e51cb6 --- /dev/null +++ b/scenes/enemies/skull.tscn @@ -0,0 +1,111 @@ +[gd_scene load_steps=12 format=3 uid="uid://sr8t2lu6apr4"] + +[ext_resource type="Texture2D" uid="uid://c886j66l82ncy" path="res://assets/textures/spritesheets/skull.png" id="1_04wrl"] +[ext_resource type="Script" uid="uid://cuc28u7op02gq" path="res://scripts/enemies/skull.gd" id="1_xx1px"] +[ext_resource type="PackedScene" uid="uid://de71apm4hg6i" path="res://scenes/fightable.tscn" id="3_3gsvf"] + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_04wrl"] +radius = 9.0 + +[sub_resource type="CircleShape2D" id="CircleShape2D_04wrl"] +radius = 250.79872 + +[sub_resource type="CircleShape2D" id="CircleShape2D_xx1px"] +radius = 35.014282 + +[sub_resource type="AtlasTexture" id="AtlasTexture_3gsvf"] +atlas = ExtResource("1_04wrl") +region = Rect2(0, 0, 32, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_17hur"] +atlas = ExtResource("1_04wrl") +region = Rect2(32, 0, 32, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_lgdni"] +atlas = ExtResource("1_04wrl") +region = Rect2(64, 0, 32, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_7f2rg"] +atlas = ExtResource("1_04wrl") +region = Rect2(96, 0, 32, 64) + +[sub_resource type="SpriteFrames" id="SpriteFrames_bidx4"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_3gsvf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_17hur") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_lgdni") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7f2rg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_lgdni") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3gsvf") +}], +"loop": true, +"name": &"default", +"speed": 10.0 +}] + +[node name="Skull" type="CharacterBody2D"] +y_sort_enabled = true +collision_layer = 0 +collision_mask = 2 +script = ExtResource("1_xx1px") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(1, 11) +rotation = 1.5707964 +shape = SubResource("CapsuleShape2D_04wrl") + +[node name="NavigationAgent2D" type="NavigationAgent2D" parent="."] +target_desired_distance = 20.0 +avoidance_enabled = true +radius = 16.0 +neighbor_distance = 48.0 + +[node name="VisibleOnScreenEnabler2D" type="VisibleOnScreenEnabler2D" parent="."] + +[node name="Area2D" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D" groups=["Enemy"]] +shape = SubResource("CircleShape2D_04wrl") +debug_color = Color(0.4897036, 0.51211786, 0.7549306, 0.41960785) + +[node name="FollowUpdateTimer" type="Timer" parent="."] + +[node name="AttackTimer" type="Timer" parent="."] + +[node name="AttackArea" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="AttackArea"] +position = Vector2(1, -8) +shape = SubResource("CircleShape2D_xx1px") +debug_color = Color(0.7831714, 0.38409948, 0.54320604, 0.41960785) + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +position = Vector2(0, -15) +sprite_frames = SubResource("SpriteFrames_bidx4") + +[node name="Fightable" parent="." instance=ExtResource("3_3gsvf")] + +[connection signal="velocity_computed" from="NavigationAgent2D" to="." method="_on_navigation_agent_2d_velocity_computed"] +[connection signal="body_entered" from="Area2D" to="." method="_on_area_body_entered"] +[connection signal="body_exited" from="Area2D" to="." method="_on_area_body_exited"] +[connection signal="timeout" from="FollowUpdateTimer" to="." method="_on_follow_update_timer_timeout"] +[connection signal="timeout" from="AttackTimer" to="." method="_on_attack_timer_timeout"] +[connection signal="body_entered" from="AttackArea" to="." method="_on_attack_area_body_entered"] +[connection signal="body_exited" from="AttackArea" to="." method="_on_attack_area_body_exited"] +[connection signal="fought" from="Fightable" to="." method="_on_fightable_fought"] diff --git a/scenes/fightable.tscn b/scenes/fightable.tscn new file mode 100644 index 0000000..d5274cf --- /dev/null +++ b/scenes/fightable.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=3 format=3 uid="uid://de71apm4hg6i"] + +[ext_resource type="Script" uid="uid://cvd86i6imfk24" path="res://scripts/fightable.gd" id="1_k4gqj"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ij5l6"] +size = Vector2(32, 32) + +[node name="Fightable" type="Area2D"] +collision_layer = 2 +script = ExtResource("1_k4gqj") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_ij5l6") diff --git a/scenes/houses/dark_house.tscn b/scenes/houses/dark_house.tscn new file mode 100644 index 0000000..11d18e1 --- /dev/null +++ b/scenes/houses/dark_house.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=5 format=3 uid="uid://56kyfhgeh23"] + +[ext_resource type="Texture2D" uid="uid://db4dctk13rgbm" path="res://assets/textures/spritesheets/houses.png" id="1_bgi5t"] +[ext_resource type="PackedScene" uid="uid://h77hilgbces" path="res://scenes/interactables/interact_sceneswitch.tscn" id="2_8jyyi"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_fltv6"] +atlas = ExtResource("1_bgi5t") +region = Rect2(1, 2, 158, 151) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_0afuu"] +size = Vector2(143.51248, 50.587547) + +[node name="Home" type="StaticBody2D"] + +[node name="Sprite2D" type="Sprite2D" parent="."] +position = Vector2(-2, -28) +texture = SubResource("AtlasTexture_fltv6") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +y_sort_enabled = true +position = Vector2(-2.2344398, 23.292198) +rotation = -0.0021335608 +shape = SubResource("RectangleShape2D_0afuu") +debug_color = Color(0.8768643, 0.34231007, 0.046793222, 0.41960785) + +[node name="InteractSceneswitch" parent="." instance=ExtResource("2_8jyyi")] +position = Vector2(49, 32) +scene = "res://scenes/levels/lvl_1.tscn" diff --git a/scenes/houses/house_2.tscn b/scenes/houses/house_2.tscn new file mode 100644 index 0000000..5d53713 --- /dev/null +++ b/scenes/houses/house_2.tscn @@ -0,0 +1,27 @@ +[gd_scene load_steps=5 format=3 uid="uid://bf1tj6ldl520h"] + +[ext_resource type="Texture2D" uid="uid://db4dctk13rgbm" path="res://assets/textures/spritesheets/houses.png" id="1_wi6m7"] +[ext_resource type="PackedScene" uid="uid://h77hilgbces" path="res://scenes/interactables/interact_sceneswitch.tscn" id="2_ey5b0"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_fltv6"] +atlas = ExtResource("1_wi6m7") +region = Rect2(482, 11, 158, 133) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_0afuu"] +size = Vector2(152.00409, 48.003414) + +[node name="Home" type="StaticBody2D"] + +[node name="Sprite2D" type="Sprite2D" parent="."] +position = Vector2(-2, -28) +texture = SubResource("AtlasTexture_fltv6") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +y_sort_enabled = true +position = Vector2(-2.0000806, 15.002504) +rotation = -0.0021335608 +shape = SubResource("RectangleShape2D_0afuu") +debug_color = Color(0.8768643, 0.34231007, 0.046793222, 0.41960785) + +[node name="InteractSceneswitch" parent="." instance=ExtResource("2_ey5b0")] +position = Vector2(52, 23) diff --git a/scenes/houses/house_3.tscn b/scenes/houses/house_3.tscn new file mode 100644 index 0000000..debb796 --- /dev/null +++ b/scenes/houses/house_3.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=6 format=3 uid="uid://cj4j8j3fbpkek"] + +[ext_resource type="Texture2D" uid="uid://db4dctk13rgbm" path="res://assets/textures/spritesheets/houses.png" id="1_ucxgm"] +[ext_resource type="PackedScene" uid="uid://h77hilgbces" path="res://scenes/interactables/interact_sceneswitch.tscn" id="2_k43hx"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_fltv6"] +atlas = ExtResource("1_ucxgm") +region = Rect2(2, 169, 158, 147) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_0afuu"] +size = Vector2(146.99966, 50.839867) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ucxgm"] +size = Vector2(78.98275, 7.0426574) + +[node name="Home" type="StaticBody2D"] + +[node name="Sprite2D" type="Sprite2D" parent="."] +position = Vector2(-2, -28) +texture = SubResource("AtlasTexture_fltv6") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +y_sort_enabled = true +position = Vector2(-2.554564, 13.423307) +rotation = -0.0021335608 +shape = SubResource("RectangleShape2D_0afuu") +debug_color = Color(0.8768643, 0.34231007, 0.046793222, 0.41960785) + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="."] +y_sort_enabled = true +position = Vector2(-36.507423, 42.520287) +rotation = -0.0021335608 +shape = SubResource("RectangleShape2D_ucxgm") +debug_color = Color(0.8768643, 0.34231007, 0.046793222, 0.41960785) + +[node name="InteractSceneswitch" parent="." instance=ExtResource("2_k43hx")] +position = Vector2(-36, 30) diff --git a/scenes/houses/house_4.tscn b/scenes/houses/house_4.tscn new file mode 100644 index 0000000..6edee2b --- /dev/null +++ b/scenes/houses/house_4.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=6 format=3 uid="uid://cevq6x1qnwwwo"] + +[ext_resource type="Texture2D" uid="uid://db4dctk13rgbm" path="res://assets/textures/spritesheets/houses.png" id="1_cm1ot"] +[ext_resource type="PackedScene" uid="uid://h77hilgbces" path="res://scenes/interactables/interact_sceneswitch.tscn" id="2_1wvia"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_fltv6"] +atlas = ExtResource("1_cm1ot") +region = Rect2(322, 16, 157, 128) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_0afuu"] +size = Vector2(149.02954, 46.397488) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ucxgm"] +size = Vector2(64.457184, 19.574635) + +[node name="Home" type="StaticBody2D"] + +[node name="Sprite2D" type="Sprite2D" parent="."] +position = Vector2(-2, -28) +texture = SubResource("AtlasTexture_fltv6") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +y_sort_enabled = true +position = Vector2(1.5026193, -6.772405) +rotation = -0.0021335608 +shape = SubResource("RectangleShape2D_0afuu") +debug_color = Color(0.8768643, 0.34231007, 0.046793222, 0.41960785) + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="."] +y_sort_enabled = true +position = Vector2(-40.2494, 26.281471) +rotation = -0.0021335608 +shape = SubResource("RectangleShape2D_ucxgm") +debug_color = Color(0.8768643, 0.34231007, 0.046793222, 0.41960785) + +[node name="InteractSceneswitch" parent="." instance=ExtResource("2_1wvia")] +position = Vector2(-55, 20) diff --git a/scenes/interactables/chair.tscn b/scenes/interactables/chair.tscn index f91f707..71c9276 100644 --- a/scenes/interactables/chair.tscn +++ b/scenes/interactables/chair.tscn @@ -9,7 +9,7 @@ load_path = "res://.godot/imported/table_chair.png-e74f8b9bc13823f10c8b29c28e9a3 [sub_resource type="AtlasTexture" id="AtlasTexture_asrj3"] resource_local_to_scene = true atlas = SubResource("CompressedTexture2D_o804i") -region = Rect2(-3, 0, 32, 32) +region = Rect2(0, 0, 32, 32) [sub_resource type="RectangleShape2D" id="RectangleShape2D_w04lg"] size = Vector2(14, 18) diff --git a/scenes/interactables/dark_house_door.tscn b/scenes/interactables/dark_house_door.tscn new file mode 100644 index 0000000..82c19f6 --- /dev/null +++ b/scenes/interactables/dark_house_door.tscn @@ -0,0 +1,129 @@ +[gd_scene load_steps=9 format=3 uid="uid://cac5cla8jdogn"] + +[ext_resource type="Texture2D" uid="uid://dsapnb753puib" path="res://assets/textures/spritesheets/dark_house_assets.png" id="1_s5xo4"] +[ext_resource type="PackedScene" uid="uid://n24dhbpflcec" path="res://scenes/interactable.tscn" id="2_ljyl3"] + +[sub_resource type="GDScript" id="GDScript_enrye"] +script/source = "extends StaticBody2D + +@onready var animation_player: AnimationPlayer = $AnimationPlayer +@onready var anti_softlock_marker: Marker2D = $AntiSoftlockMarker + +var open: bool = false +var open1: bool = true + +func _on_interactable_interacted(_player: Player) -> void: + if !open: + animation_player.play(\"open\") + open = true + +func _on_interactable_body_exited(body: Node2D) -> void: + if open1 && body is Player: + animation_player.speed_scale = 4 + animation_player.play_backwards(\"open\") + open1 = false + await animation_player.animation_finished + body.global_position = anti_softlock_marker.global_position +" + +[sub_resource type="AtlasTexture" id="AtlasTexture_nmjqc"] +atlas = ExtResource("1_s5xo4") +region = Rect2(160, 64, 32, 64) + +[sub_resource type="Animation" id="Animation_ra1dx"] +resource_name = "open" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:texture:region") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Rect2(160, 64, 32, 64), Rect2(144, 64, 32, 64)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CollisionShape2D2:shape:size") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(48, 5), Vector2(16, 5)] +} + +[sub_resource type="Animation" id="Animation_xbx8n"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:texture:region") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Rect2(160, 64, 32, 64)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CollisionShape2D2:shape:size") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(48, 5)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_clxe4"] +_data = { +&"RESET": SubResource("Animation_xbx8n"), +&"open": SubResource("Animation_ra1dx") +} + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_xpwqa"] +size = Vector2(48, 5) + +[node name="DarkHouseDoor" type="StaticBody2D"] +script = SubResource("GDScript_enrye") + +[node name="Sprite2D" type="Sprite2D" parent="."] +position = Vector2(32, -16) +texture = SubResource("AtlasTexture_nmjqc") + +[node name="Sprite2D2" type="Sprite2D" parent="."] +position = Vector2(0, -16) +texture = SubResource("AtlasTexture_nmjqc") +flip_h = true + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_clxe4") +} + +[node name="Interactable" parent="." instance=ExtResource("2_ljyl3")] +position = Vector2(16, 20) +auto_interact = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(-8, 13.5) +shape = SubResource("RectangleShape2D_xpwqa") + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="."] +position = Vector2(40, 14) +shape = SubResource("RectangleShape2D_xpwqa") + +[node name="AntiSoftlockMarker" type="Marker2D" parent="."] +position = Vector2(16, -26) + +[connection signal="body_exited" from="Interactable" to="." method="_on_interactable_body_exited"] +[connection signal="interacted" from="Interactable" to="." method="_on_interactable_interacted"] diff --git a/scenes/levels/home.tscn b/scenes/levels/home.tscn index 19a53c7..1625592 100644 --- a/scenes/levels/home.tscn +++ b/scenes/levels/home.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=4 uid="uid://ccfdsdgaon63m"] +[gd_scene load_steps=11 format=4 uid="uid://ccfdsdgaon63m"] [ext_resource type="Texture2D" uid="uid://ctr2whxnff2vn" path="res://assets/textures/tilemaps/main_house_interior_tileset.png" id="1_2vl8h"] [ext_resource type="PackedScene" uid="uid://dfbomt0l6b1o4" path="res://scenes/player.tscn" id="1_ikf4c"] @@ -17,20 +17,6 @@ func _ready() -> void: RenderingServer.set_default_clear_color(\"#0d0805\") " -[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_yskkl"] -texture = ExtResource("1_snitx") -texture_region_size = Vector2i(32, 32) -0:0/0 = 0 -1:0/0 = 0 -0:1/0 = 0 -0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-12, -4, 16, -4, 16, 16, -12, 16) -1:1/0 = 0 -1:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -4, 12, -4, 12, 16, -16, 16) -0:2/0 = 0 -0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-11.5, -16, 16, -16, 16, -7, -2, -7, -2, 7, -8, 7) -1:2/0 = 0 -1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 12, -16, 12, -7.5, 9, 7, 2, 7, 2, -7, -16, -7) - [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_5uvba"] texture = ExtResource("1_2vl8h") texture_region_size = Vector2i(32, 32) @@ -96,7 +82,6 @@ terrain_set_0/mode = 0 terrain_set_0/terrain_0/name = "Ground 0" terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) sources/1 = SubResource("TileSetAtlasSource_5uvba") -sources/0 = SubResource("TileSetAtlasSource_yskkl") [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_d1b6h"] texture = ExtResource("1_snitx") @@ -108,9 +93,9 @@ texture_region_size = Vector2i(32, 32) 1:1/0 = 0 1:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 5.5, 12, 5.5, 12, 16, -16, 16) 0:2/0 = 0 -0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-11.5, -16, 16, -16, 16, -7, -2, -7, -2, 7, -8, 7) +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-12, -16, 16, -16, 16, 11, -11.5, 11.5) 1:2/0 = 0 -1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 12, -16, 12, -7.5, 9, 7, 2, 7, 2, -7, -16, -7) +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 12, -16, 12, 11, -16, 11) [sub_resource type="TileSet" id="TileSet_cchwu"] tile_size = Vector2i(32, 32) @@ -157,6 +142,9 @@ y_sort_enabled = true position = Vector2(176, 235) tilemap = NodePath("../TileMapLayer") +[node name="AnimatedSprite2D" parent="Player" index="0"] +animation = &"up" + [node name="InteractSceneswitch" parent="." instance=ExtResource("4_snitx")] position = Vector2(176, 268) scene = "res://scenes/levels/hood.tscn" diff --git a/scenes/levels/hood.tscn b/scenes/levels/hood.tscn index 914edd5..a70b9f4 100644 --- a/scenes/levels/hood.tscn +++ b/scenes/levels/hood.tscn @@ -1,10 +1,16 @@ -[gd_scene load_steps=10 format=4 uid="uid://clnb1eshis30m"] +[gd_scene load_steps=22 format=4 uid="uid://clnb1eshis30m"] [ext_resource type="Texture2D" uid="uid://dve2b2glwitsw" path="res://assets/textures/tilemaps/grass_tilemap.png" id="1_74em3"] [ext_resource type="Material" uid="uid://cmbcfxlkxxnwq" path="res://addons/TileMapDual/ghost_material.tres" id="1_eywaq"] [ext_resource type="PackedScene" uid="uid://dfbomt0l6b1o4" path="res://scenes/player.tscn" id="1_ge1l5"] [ext_resource type="PackedScene" uid="uid://cokphmh2g8wvs" path="res://scenes/houses/home.tscn" id="3_5rqdi"] [ext_resource type="Script" uid="uid://cjk8nronimk5r" path="res://addons/TileMapDual/TileMapDual.gd" id="3_hrrfd"] +[ext_resource type="PackedScene" uid="uid://bf1tj6ldl520h" path="res://scenes/houses/house_2.tscn" id="5_hrrfd"] +[ext_resource type="PackedScene" uid="uid://cj4j8j3fbpkek" path="res://scenes/houses/house_3.tscn" id="6_m0fav"] +[ext_resource type="PackedScene" uid="uid://cevq6x1qnwwwo" path="res://scenes/houses/house_4.tscn" id="7_jkyiu"] +[ext_resource type="PackedScene" uid="uid://56kyfhgeh23" path="res://scenes/houses/dark_house.tscn" id="8_qnhkw"] +[ext_resource type="PackedScene" uid="uid://cac5cla8jdogn" path="res://scenes/interactables/dark_house_door.tscn" id="9_cfsyk"] +[ext_resource type="Texture2D" uid="uid://dsapnb753puib" path="res://assets/textures/spritesheets/dark_house_assets.png" id="9_oxy87"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_eywaq"] texture = ExtResource("1_74em3") @@ -586,10 +592,146 @@ sources/1 = SubResource("TileSetAtlasSource_eywaq") [sub_resource type="TileSetScenesCollectionSource" id="TileSetScenesCollectionSource_1r5ec"] resource_name = "Houses" scenes/1/scene = ExtResource("3_5rqdi") +scenes/2/scene = ExtResource("5_hrrfd") +scenes/3/scene = ExtResource("6_m0fav") +scenes/4/scene = ExtResource("7_jkyiu") +scenes/5/scene = ExtResource("8_qnhkw") +scenes/6/scene = ExtResource("9_cfsyk") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_cfsyk"] +texture = ExtResource("9_oxy87") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +1:0/0 = 0 +2:0/0 = 0 +3:0/0 = 0 +4:0/0 = 0 +0:1/0 = 0 +1:1/0 = 0 +2:1/0 = 0 +3:1/0 = 0 +4:1/0 = 0 +6:1/0 = 0 +6:1/0/terrain_set = 0 +6:1/0/terrain = 0 +6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-2, 10.5, 16, 10.5, 16, 16, -2, 16) +6:1/0/terrains_peering_bit/right_side = 0 +6:1/0/terrains_peering_bit/bottom_right_corner = 0 +6:1/0/terrains_peering_bit/bottom_side = 0 +7:1/0 = 0 +7:1/0/terrain_set = 0 +7:1/0/terrain = 0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 10.5, 16, 10.5, 16, 16, -16, 16) +7:1/0/terrains_peering_bit/right_side = 0 +7:1/0/terrains_peering_bit/bottom_right_corner = 0 +7:1/0/terrains_peering_bit/bottom_side = 0 +7:1/0/terrains_peering_bit/bottom_left_corner = 0 +7:1/0/terrains_peering_bit/left_side = 0 +0:2/0 = 0 +1:2/0 = 0 +2:2/0 = 0 +3:2/0 = 0 +4:2/0 = 0 +5:2/0 = 0 +6:2/0 = 0 +6:2/0/terrain_set = 0 +6:2/0/terrain = 0 +6:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-2, -16, 0, -16, 0, 16, -2, 16) +6:2/0/terrains_peering_bit/bottom_side = 0 +6:2/0/terrains_peering_bit/top_side = 0 +7:2/0 = 0 +7:2/0/terrain_set = 0 +7:2/0/terrain = 0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 13.5, 0, 13.5, 0.049461365, 16, -16, 16) +7:2/0/terrains_peering_bit/bottom_side = 0 +7:2/0/terrains_peering_bit/bottom_left_corner = 0 +7:2/0/terrains_peering_bit/left_side = 0 +0:3/0 = 0 +1:3/0 = 0 +2:3/0 = 0 +3:3/0 = 0 +4:3/0 = 0 +5:3/0 = 0 +5:3/0/terrain_set = 0 +5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 10.5, 16, 10.5, 16, 16, -16, 16) +6:3/0 = 0 +6:3/0/terrain_set = 0 +6:3/0/terrain = 0 +6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-2, -16, 0, -16, 0, 14, 16, 14, 16, 16, -2, 16) +6:3/0/terrains_peering_bit/right_side = 0 +6:3/0/terrains_peering_bit/bottom_right_corner = 0 +6:3/0/terrains_peering_bit/bottom_side = 0 +6:3/0/terrains_peering_bit/top_side = 0 +7:3/0 = 0 +7:3/0/terrain_set = 0 +7:3/0/terrain = 0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 13.5, -2, 13.5, -2, -16, 0, -16, 0.049461365, 16, -16, 16) +7:3/0/terrains_peering_bit/bottom_side = 0 +7:3/0/terrains_peering_bit/bottom_left_corner = 0 +7:3/0/terrains_peering_bit/left_side = 0 +7:3/0/terrains_peering_bit/top_side = 0 [sub_resource type="TileSet" id="TileSet_5rqdi"] tile_size = Vector2i(32, 32) +physics_layer_0/collision_layer = 1 +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "fence" +terrain_set_0/terrain_0/color = Color(0.36084375, 0.38989827, 0.42006177, 1) sources/0 = SubResource("TileSetScenesCollectionSource_1r5ec") +sources/1 = SubResource("TileSetAtlasSource_cfsyk") + +[sub_resource type="GDScript" id="GDScript_jkyiu"] +script/source = "extends Area2D + +@onready var animation_player: AnimationPlayer = $CanvasModulate/AnimationPlayer +var night: bool = false + +func _on_body_entered(body: Node2D) -> void: + if !night && body is Player: + night = true + animation_player.play(\"night\") +" + +[sub_resource type="Animation" id="Animation_qnhkw"] +resource_name = "night" +length = 3.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(0.10980392, 0.14901961, 0.21960784, 1)] +} + +[sub_resource type="Animation" id="Animation_oxy87"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_cfsyk"] +_data = { +&"RESET": SubResource("Animation_oxy87"), +&"night": SubResource("Animation_qnhkw") +} + +[sub_resource type="SegmentShape2D" id="SegmentShape2D_mv4yg"] +a = Vector2(570, 496) +b = Vector2(570, -80) [node name="Hood" type="Node2D"] z_as_relative = false @@ -598,7 +740,7 @@ y_sort_enabled = true [node name="Ground" type="TileMapLayer" parent="."] z_index = -1 material = ExtResource("1_eywaq") -tile_map_data = PackedByteArray("AAAQAAkAAQAAAAMAAAAQAAgAAQAAAAMAAAAQAAcAAQAEAAcAAAAQAAYAAQABAAIAAAAQAAUAAQADAAAAAAAQAAQAAQAEAAcAAAAQAAMAAQAEAAcAAAAQAAIAAQAAAAcAAAAQAAEAAQAEAAcAAAAQAAAAAQAEAAcAAAAQAP//AQAAAAMAAAAQAP7/AQAAAAcAAAAPAAkAAQAAAAcAAAAPAAgAAQAAAAMAAAAPAAcAAQAAAAMAAAAPAAYAAQABAAYAAAAPAAUAAQAHAAQAAAAPAAQAAQAAAAcAAAAPAAMAAQAEAAcAAAAPAAIAAQAAAAcAAAAPAAEAAQAEAAcAAAAPAAAAAQAAAAcAAAAPAP//AQAAAAMAAAAPAP7/AQAAAAcAAAAOAAkAAQAAAAMAAAAOAAgAAQAEAAcAAAAOAAcAAQAAAAMAAAAOAAYAAQAFAAYAAAAOAAUAAQAGAAQAAAAOAAQAAQAHAAYAAAAOAAMAAQAHAAYAAAAOAAIAAQAAAAMAAAAOAAEAAQAAAAcAAAAOAAAAAQAAAAcAAAAOAP//AQAAAAMAAAAOAP7/AQAEAAcAAAANAAkAAQAAAAMAAAANAAgAAQAEAAcAAAANAAcAAQAAAAcAAAANAAYAAQABAAIAAAANAAUAAQACAAEAAAANAAQAAQACAAUAAAANAAIAAQAAAAcAAAANAAEAAQAAAAcAAAANAAAAAQAAAAcAAAANAP//AQAAAAcAAAANAP7/AQAEAAcAAAAMAAkAAQAEAAcAAAAMAAgAAQAAAAcAAAAMAAcAAQAEAAcAAAAMAAYAAQAFAAYAAAAMAAUAAQABAAUAAAAMAAQAAQABAAQAAAAMAAMAAQABAAMAAAAMAAIAAQAAAAcAAAAMAAEAAQAAAAMAAAAMAAAAAQAAAAMAAAAMAP//AQAAAAMAAAAMAP7/AQAAAAMAAAALAAkAAQAAAAcAAAALAAgAAQAAAAMAAAALAAcAAQAAAAMAAAALAAYAAQAFAAYAAAALAAUAAQAHAAQAAAALAAQAAQAAAAMAAAALAAMAAQAAAAMAAAALAAIAAQAAAAMAAAALAAEAAQAEAAcAAAALAAAAAQAAAAMAAAALAP//AQAAAAMAAAALAP7/AQAAAAcAAAAKAAkAAQAAAAcAAAAKAAgAAQAAAAcAAAAKAAcAAQAAAAMAAAAKAAYAAQAFAAYAAAAKAAUAAQADAAQAAAAKAAQAAQAEAAcAAAAKAAMAAQAAAAcAAAAKAAIAAQAAAAcAAAAKAAEAAQAAAAMAAAAKAAAAAQAAAAMAAAAKAP//AQAAAAcAAAAKAP7/AQAEAAcAAAAJAAkAAQAEAAcAAAAJAAgAAQAEAAcAAAAJAAcAAQAHAAcAAAAJAAYAAQAHAAUAAAAJAAUAAQAHAAQAAAAJAAQAAQAEAAcAAAAJAAMAAQAAAAMAAAAJAAIAAQAEAAcAAAAJAAEAAQAAAAMAAAAJAAAAAQAAAAMAAAAJAP//AQAAAAMAAAAJAP7/AQAAAAMAAAAIAAkAAQADAAMAAAAIAAgAAQADAAYAAAAIAAcAAQADAAUAAAAIAAYAAQACAAUAAAAIAAUAAQADAAAAAAAIAAQAAQAAAAMAAAAIAAMAAQAAAAcAAAAIAAIAAQAEAAcAAAAIAAEAAQAAAAMAAAAIAAAAAQAEAAcAAAAIAP//AQAAAAcAAAAIAP7/AQAEAAcAAAAHAAkAAQABAAIAAAAHAAgAAQABAAAAAAAHAAcAAQAFAAQAAAAHAAYAAQACAAYAAAAHAAUAAQAHAAQAAAAHAAQAAQAAAAMAAAAHAAMAAQAAAAMAAAAHAAIAAQAAAAcAAAAHAAEAAQAAAAMAAAAHAAAAAQAAAAcAAAAHAP//AQAAAAcAAAAHAP7/AQAEAAcAAAAGAAkAAQAAAAMAAAAGAAgAAQAAAAcAAAAGAAcAAQAAAAMAAAAGAAYAAQABAAIAAAAGAAUAAQADAAQAAAAGAAQAAQAAAAMAAAAGAAMAAQAAAAcAAAAGAAIAAQAEAAcAAAAGAAEAAQAEAAcAAAAGAAAAAQAAAAcAAAAGAP//AQAEAAcAAAAGAP7/AQAEAAcAAAAFAAkAAQAAAAcAAAAFAAgAAQAEAAcAAAAFAAcAAQAAAAcAAAAFAAYAAQABAAIAAAAFAAUAAQADAAQAAAAFAAQAAQAAAAMAAAAFAAMAAQAAAAMAAAAFAAIAAQAAAAcAAAAFAAEAAQAAAAMAAAAFAAAAAQAEAAcAAAAFAP//AQAAAAMAAAAFAP7/AQAAAAMAAAAEAAkAAQAAAAcAAAAEAAgAAQAEAAcAAAAEAAcAAQAEAAcAAAAEAAYAAQABAAIAAAAEAAUAAQACAAAAAAAEAAQAAQADAAYAAAAEAAMAAQAHAAYAAAAEAAIAAQADAAIAAAAEAAEAAQADAAAAAAAEAAAAAQAAAAcAAAAEAP//AQAAAAcAAAAEAP7/AQAEAAcAAAADAAkAAQAAAAcAAAADAAgAAQAAAAcAAAADAAcAAQAAAAMAAAADAAYAAQAFAAYAAAADAAUAAQACAAUAAAADAAQAAQACAAUAAAADAAMAAQACAAEAAAADAAIAAQACAAUAAAADAAEAAQADAAAAAAADAAAAAQAAAAcAAAADAP//AQAAAAcAAAADAP7/AQAAAAcAAAACAAkAAQAEAAcAAAACAAgAAQAAAAcAAAACAAcAAQAEAAcAAAACAAYAAQAFAAYAAAACAAUAAQAFAAQAAAACAAQAAQAGAAYAAAACAAMAAQACAAUAAAACAAIAAQAFAAUAAAACAAEAAQABAAMAAAACAAAAAQAAAAMAAAACAP//AQAEAAcAAAACAP7/AQAEAAcAAAABAAkAAQAEAAcAAAABAAgAAQAAAAMAAAABAAcAAQAEAAcAAAABAAYAAQAAAAcAAAABAAUAAQAEAAcAAAABAAQAAQABAAIAAAABAAMAAQABAAUAAAABAAIAAQABAAcAAAABAAEAAQAAAAcAAAABAAAAAQAEAAcAAAABAP//AQAAAAcAAAABAP7/AQAAAAcAAAAAAAkAAQAEAAcAAAAAAAgAAQAEAAcAAAAAAAcAAQAEAAcAAAAAAAYAAQAEAAcAAAAAAAUAAQAAAAcAAAAAAAQAAQABAAYAAAAAAAMAAQAHAAQAAAAAAAIAAQAAAAMAAAAAAAEAAQAAAAMAAAAAAAAAAQAAAAMAAAAAAP//AQAEAAcAAAAAAP7/AQAEAAcAAAD//wkAAQAAAAcAAAD//wgAAQAEAAcAAAD//wcAAQAEAAcAAAD//wYAAQAAAAMAAAD//wUAAQAEAAcAAAD//wQAAQABAAIAAAD//wMAAQAHAAQAAAD//wIAAQAAAAcAAAD//wEAAQAAAAMAAAD//wAAAQAAAAMAAAD/////AQAEAAcAAAD///7/AQAAAAcAAAD+/wkAAQAEAAcAAAD+/wgAAQAAAAcAAAD+/wcAAQAEAAcAAAD+/wUAAQAEAAcAAAD+/wQAAQABAAYAAAD+/wMAAQAGAAQAAAD+/wIAAQADAAIAAAD+/wEAAQAHAAQAAAD+/wAAAQAAAAcAAAD+////AQAAAAcAAAD+//7/AQAEAAcAAAD9/wMAAQACAAEAAAD9/wQAAQABAAYAAAD8/wMAAQABAAEAAAD8/wQAAQABAAIAAAD8/wIAAQABAAAAAAD9/wIAAQACAAUAAAD8/wEAAQABAAMAAAD9/wEAAQADAAAAAAD8//7/AQAAAAcAAAD8////AQAAAAMAAAD8/wYAAQAAAAcAAAD8/wgAAQAAAAcAAAD8/wkAAQAAAAMAAAD8/wsAAQAAAAMAAAD9/wsAAQAAAAMAAAD+/wsAAQAEAAcAAAD//wsAAQAAAAcAAAD//woAAQAAAAcAAAAAAAoAAQAAAAcAAAABAAoAAQAAAAMAAAACAAoAAQAAAAcAAAACAAsAAQAAAAcAAAADAAsAAQAAAAcAAAAEAAsAAQAAAAMAAAAFAAsAAQAAAAMAAAAGAAsAAQAEAAcAAAAHAAsAAQAAAAcAAAAIAAsAAQAEAAcAAAAEAAwAAQAAAAcAAAADAAwAAQAAAAcAAAACAAwAAQAAAAcAAAABAAwAAQAAAAMAAAAAAAwAAQAAAAMAAAAAAAsAAQAAAAcAAAD//wwAAQAAAAMAAAD+/wwAAQAAAAcAAAD9/wwAAQAEAAcAAAD8/wwAAQAEAAcAAAAFAAwAAQAEAAcAAAAGAAwAAQAEAAcAAAAHAAwAAQAAAAcAAAAIAAwAAQAAAAMAAAAJAAwAAQAEAAcAAAAKAAwAAQAAAAcAAAALAAwAAQAAAAcAAAAMAAwAAQAEAAcAAAANAAwAAQAEAAcAAAAOAAsAAQAAAAMAAAAPAAsAAQAEAAcAAAAQAAsAAQAEAAcAAAAPAAwAAQAAAAcAAAAOAAwAAQAAAAMAAAALAAsAAQAAAAMAAAAKAAsAAQAEAAcAAAAMAAsAAQAAAAMAAAANAAsAAQAEAAcAAAAQAAwAAQAAAAcAAAARAAUAAQADAAQAAAARAAYAAQAFAAYAAAASAAYAAQABAAIAAAASAAUAAQADAAAAAAATAAUAAQADAAAAAAATAAYAAQAFAAYAAAARAAMAAQAAAAcAAAASAAMAAQAAAAMAAAATAAMAAQAAAAMAAAARAAQAAQAAAAMAAAASAAQAAQAAAAcAAAATAAQAAQAEAAcAAAAUAAMAAQAAAAMAAAAUAAQAAQAAAAcAAAAUAAUAAQAHAAQAAAAUAAYAAQABAAYAAAAVAAUAAQADAAAAAAAVAAYAAQABAAIAAAAWAAYAAQABAAYAAAAWAAUAAQAHAAQAAAAXAAYAAQAFAAYAAAAXAAUAAQAFAAUAAAAYAAYAAQABAAYAAAAYAAUAAQAGAAUAAAASAAgAAQAAAAMAAAASAAkAAQAAAAMAAAASAAoAAQAEAAcAAAASAAsAAQAAAAcAAAASAAwAAQAAAAMAAAASAA0AAQAAAAMAAAATAA0AAQAEAAcAAAATAAwAAQAAAAcAAAAUAAwAAQAAAAMAAAAVAAwAAQAEAAcAAAAWAAwAAQAAAAMAAAAXAAwAAQAAAAMAAAAXAAsAAQAEAAcAAAAYAAsAAQAAAAMAAAAYAAoAAQAAAAMAAAAYAAkAAQAEAAcAAAAYAAgAAQAAAAcAAAAXAAgAAQAEAAcAAAAWAAgAAQAAAAcAAAAVAAgAAQAAAAcAAAAUAAgAAQAAAAMAAAAUAAkAAQAAAAcAAAAVAAkAAQAAAAcAAAAWAAoAAQAAAAcAAAAXAAoAAQAEAAcAAAAUAAoAAQAEAAcAAAAYAA0AAQAAAAMAAAAXAA0AAQAAAAcAAAAWAA0AAQAEAAcAAAAVAA0AAQAEAAcAAAAUAA0AAQAEAAcAAAARAA0AAQAEAAcAAAAQAA0AAQAEAAcAAAAPAA0AAQAAAAcAAAANAA0AAQAAAAMAAAAMAA0AAQAAAAcAAAALAA0AAQAAAAMAAAAKAA0AAQAAAAMAAAAJAA0AAQAEAAcAAAAIAA0AAQAAAAcAAAAHAA0AAQAAAAMAAAAGAA0AAQAAAAMAAAAFAA0AAQAAAAMAAAAEAA0AAQAAAAcAAAADAA0AAQAAAAcAAAACAA0AAQAEAAcAAAABAA0AAQAAAAcAAAAAAA0AAQAEAAcAAAD//w0AAQAEAAcAAAD+/w0AAQAAAAcAAAD9/w0AAQAEAAcAAAD8/w0AAQAAAAcAAAD8/w4AAQAEAAcAAAD9/w4AAQAEAAcAAAD+/w4AAQAEAAcAAAD//w4AAQAAAAMAAAAAAA4AAQAAAAcAAAABAA4AAQAAAAMAAAACAA4AAQAEAAcAAAADAA4AAQAAAAcAAAAEAA4AAQAAAAcAAAAFAA4AAQAAAAMAAAAGAA4AAQAAAAcAAAAHAA4AAQAAAAMAAAAIAA4AAQAAAAcAAAAJAA4AAQAEAAcAAAAKAA4AAQAEAAcAAAALAA4AAQAAAAcAAAAMAA4AAQAEAAcAAAANAA4AAQAEAAcAAAAOAA4AAQAAAAMAAAAPAA4AAQAAAAMAAAAQAA4AAQAAAAMAAAARAA4AAQAAAAMAAAASAA4AAQAAAAMAAAATAA4AAQAAAAcAAAAUAA4AAQAAAAcAAAAVAA4AAQAAAAcAAAAWAA4AAQAAAAcAAAAXAA4AAQAAAAcAAAAYAA4AAQAAAAMAAAAYAAMAAQACAAEAAAAXAAMAAQAGAAUAAAAWAAMAAQABAAAAAAAXAAIAAQACAAUAAAAYAAIAAQACAAEAAAAWAAIAAQABAAQAAAAVAAIAAQAAAAcAAAAUAAIAAQAEAAcAAAATAAIAAQAAAAcAAAASAAEAAQAAAAcAAAATAAAAAQAAAAcAAAAUAAAAAQAAAAcAAAAVAAAAAQAEAAcAAAAWAAAAAQABAAMAAAAXAAAAAQAHAAQAAAAYAAAAAQADAAAAAAAYAP//AQAAAAMAAAAYAP7/AQAAAAcAAAAXAP7/AQAAAAcAAAAWAP7/AQAEAAcAAAAVAP7/AQAAAAMAAAAUAP7/AQAAAAMAAAATAP7/AQAAAAcAAAASAP7/AQAAAAcAAAARAP7/AQAAAAcAAAARAP//AQAEAAcAAAASAP//AQAAAAcAAAASAAAAAQAEAAcAAAANAAMAAQADAAQAAAAWAAQAAQAAAAIAAAAXAAQAAQAGAAYAAAAYAAQAAQACAAUAAAAZAAIAAQACAAUAAAAZAAMAAQACAAEAAAAZAAQAAQACAAUAAAAaAAIAAQACAAEAAAAaAAMAAQAGAAUAAAAaAAQAAQADAAUAAAAaAP7/AQAEAAcAAAAaAP//AQAAAAcAAAAaAAAAAQADAAQAAAAbAAAAAQADAAQAAAAbAP//AQAEAAcAAAAcAP//AQAEAAcAAAAcAP7/AQAAAAcAAAAcAAAAAQADAAIAAAAcAAEAAQAHAAYAAAAcAAIAAQADAAIAAAAbAAIAAQAGAAUAAAAbAAMAAQACAAUAAAAbAAQAAQABAAIAAAAbAAUAAQAAAAcAAAAbAAYAAQAAAAMAAAAaAAYAAQADAAYAAAAaAAUAAQAHAAYAAAAcAAQAAQADAAMAAAAcAAMAAQAHAAYAAAAcAAUAAQAEAAcAAAAcAAYAAQAAAAcAAAAeAP7/AQAAAAMAAAAeAP//AQAAAAcAAAAeAAAAAQAAAAcAAAAeAAEAAQAEAAcAAAAdAAEAAQAAAAMAAAAdAAIAAQAEAAcAAAAdAAMAAQAEAAcAAAAdAAQAAQAAAAMAAAAdAAUAAQAAAAcAAAAdAAYAAQAAAAMAAAAeAAUAAQAEAAcAAAAeAAQAAQAAAAcAAAAeAAMAAQAAAAcAAAAeAAIAAQAEAAcAAAAfAAIAAQAEAAcAAAAfAAEAAQAAAAMAAAAfAAAAAQAAAAcAAAAgAAAAAQAEAAcAAAAgAP//AQAEAAcAAAAgAP7/AQAAAAMAAAAfAP//AQAEAAcAAAAfAAMAAQAAAAcAAAAfAAQAAQAEAAcAAAAgAAQAAQAAAAcAAAAgAAMAAQAAAAcAAAAgAAIAAQAAAAcAAAAgAAUAAQAEAAcAAAAfAAUAAQAAAAcAAAAfAAYAAQAEAAcAAAAgAAcAAQADAAAAAAAgAAgAAQABAAYAAAAgAAkAAQAEAAcAAAAgAAoAAQAAAAcAAAAgAAsAAQAAAAMAAAAgAAwAAQAAAAMAAAAfAAwAAQAAAAcAAAAfAA0AAQAEAAcAAAAgAA0AAQAEAAcAAAAgAA4AAQAAAAMAAAAfAA4AAQAEAAcAAAAeAA4AAQAAAAcAAAAdAA4AAQAEAAcAAAAcAA4AAQAAAAMAAAAbAA4AAQAAAAMAAAAaAA4AAQAEAAcAAAAaAA0AAQAAAAMAAAAaAAwAAQAEAAcAAAAbAAwAAQAAAAcAAAAbAAsAAQAAAAMAAAAcAAsAAQAAAAcAAAAdAAsAAQAAAAMAAAAdAAwAAQAAAAMAAAAcAAwAAQAAAAMAAAAcAAoAAQAAAAMAAAAdAAoAAQAAAAcAAAAdAAkAAQAEAAcAAAAeAAkAAQAAAAcAAAAfAAkAAQAEAAcAAAAfAAgAAQAFAAYAAAAfAAoAAQAAAAcAAAAfAAsAAQAEAAcAAAAeAAsAAQAEAAcAAAAeAAgAAQAFAAYAAAAeAAcAAQAHAAQAAAAeAAYAAQAAAAcAAAAdAAcAAQADAAQAAAAcAAcAAQAHAAQAAAAcAAgAAQAFAAYAAAAbAAgAAQAFAAYAAAAaAAgAAQAFAAYAAAAZAAgAAQABAAYAAAAZAAkAAQAEAAcAAAAaAAkAAQAAAAcAAAAaAAoAAQAAAAcAAAAbAAoAAQAAAAcAAAAZAAUAAQACAAUAAAAZAAYAAQACAAYAAAAWAAEAAQABAAQAAAAXAAEAAQAGAAUAAAAYAAEAAQACAAEAAAAZAAEAAQAGAAUAAAAaAAEAAQACAAEAAAAbAAEAAQACAAEAAAAZAAAAAQAHAAQAAAAZAAcAAQABAAAAAAAaAAcAAQAGAAQAAAAbAAcAAQADAAQAAAAfAAcAAQADAAAAAAAhAAcAAQAHAAYAAAAdAAgAAQAFAAYAAAAhAAgAAQAAAAEAAAD7/wMAAQABAAMAAAD7/wQAAQACAAMAAAD7//7/AQAEAAcAAAD7////AQAEAAcAAAD7/wAAAQAAAAMAAAD7/wEAAQAAAAcAAAD7/wUAAQADAAcAAAD7/wYAAQAEAAcAAAD7/wcAAQAEAAcAAAD7/wgAAQAAAAcAAAD7/wkAAQAEAAcAAAD7/woAAQAAAAcAAAD7/wsAAQAEAAcAAAD7/wwAAQAEAAcAAAD7/w0AAQAAAAMAAAD7/w4AAQAAAAcAAAAhAP7/AQAAAAMAAAAhAP//AQAEAAcAAAAhAAAAAQAAAAcAAAAhAAEAAQAAAAMAAAAhAAIAAQAEAAcAAAAhAAMAAQAEAAcAAAAhAAQAAQAAAAMAAAAhAAUAAQAEAAcAAAAhAAkAAQAEAAYAAAAhAAoAAQAAAAMAAAAhAAsAAQAAAAcAAAAhAAwAAQAEAAcAAAAhAA0AAQAAAAcAAAAhAA4AAQAEAAcAAAABAAsAAQAAAAcAAAD+/woAAQAAAAcAAAD+/wYAAQAAAAcAAAD9/woAAQAAAAcAAAD9/wkAAQAEAAcAAAD9/wgAAQAAAAMAAAD9/wcAAQAEAAcAAAD9/wYAAQAAAAMAAAD9/wUAAQAAAAcAAAD8/woAAQAEAAcAAAD8/wcAAQAEAAcAAAD8/wUAAQAAAAMAAAAGAAoAAQAAAAMAAAAFAAoAAQAAAAcAAAAEAAoAAQAEAAcAAAADAAoAAQAEAAcAAAAeAA0AAQAAAAMAAAAeAAwAAQAEAAcAAAAeAAoAAQAAAAMAAAAdAA0AAQAAAAMAAAAcAA0AAQAAAAcAAAAbAA0AAQAAAAcAAAAaAAsAAQAAAAMAAAAZAA4AAQAAAAcAAAAZAA0AAQAAAAMAAAAZAAwAAQAAAAcAAAAZAAsAAQAEAAcAAAAZAAoAAQAAAAMAAAAYAAwAAQAEAAcAAAAWAAsAAQAAAAMAAAAVAAsAAQAAAAMAAAAVAAoAAQAEAAcAAAAUAAsAAQAAAAcAAAATAAsAAQAEAAcAAAATAAoAAQAAAAMAAAARAAwAAQAAAAcAAAARAAsAAQAEAAcAAAARAAoAAQAAAAcAAAAQAAoAAQAAAAMAAAAPAAoAAQAAAAMAAAAOAA0AAQAEAAcAAAAOAAoAAQAEAAcAAAANAAoAAQAEAAcAAAAMAAoAAQAAAAMAAAALAAoAAQAEAAcAAAAKAAoAAQAAAAMAAAAJAAsAAQAAAAMAAAAJAAoAAQAEAAcAAAAIAAoAAQAEAAcAAAAHAAoAAQAAAAcAAAAcAAkAAQAEAAcAAAAbAAkAAQAAAAMAAAAXAAkAAQAAAAMAAAAWAAkAAQAAAAcAAAATAAkAAQAAAAcAAAARAAkAAQAEAAcAAAAYAAcAAQAAAAcAAAAXAAcAAQAAAAcAAAAWAAcAAQAAAAMAAAAVAAcAAQAAAAcAAAAUAAcAAQAEAAcAAAATAAgAAQAAAAMAAAATAAcAAQAEAAcAAAASAAcAAQAEAAcAAAARAAgAAQAAAAcAAAARAAcAAQAAAAMAAAAhAAYAAQAAAAcAAAAgAAYAAQAEAAcAAAAgAAEAAQAEAAcAAAAfAP7/AQAAAAcAAAAdAAAAAQAAAAMAAAAdAP//AQAEAAcAAAAdAP7/AQAAAAMAAAAbAP7/AQAEAAcAAAAZAP//AQAEAAcAAAAZAP7/AQAEAAcAAAAXAP//AQAAAAMAAAAWAP//AQAEAAcAAAAVAP//AQAAAAcAAAAUAP//AQAEAAcAAAATAP//AQAAAAMAAAD9/wAAAQAEAAcAAAD9////AQAEAAcAAAD9//7/AQAEAAcAAAD8/wAAAQAEAAcAAAARAAAAAQAAAAcAAAAVAAEAAQAAAAcAAAAUAAEAAQAAAAMAAAATAAEAAQAEAAcAAAASAAIAAQAAAAMAAAARAAIAAQAAAAMAAAARAAEAAQAEAAcAAAAVAAQAAQAEAAcAAAAVAAMAAQAEAAcAAAA=") +tile_map_data = PackedByteArray("AAAQAAkAAQAAAAMAAAAQAAgAAQAAAAMAAAAQAAcAAQAEAAcAAAAQAAYAAQABAAIAAAAQAAUAAQADAAAAAAAQAAQAAQAEAAcAAAAQAAMAAQAEAAcAAAAQAAIAAQAAAAcAAAAQAAEAAQAEAAcAAAAQAAAAAQAEAAcAAAAQAP//AQAAAAMAAAAQAP7/AQAAAAcAAAAPAAkAAQAAAAcAAAAPAAgAAQAAAAMAAAAPAAcAAQAAAAMAAAAPAAYAAQABAAYAAAAPAAUAAQAGAAQAAAAPAAQAAQADAAIAAAAPAAMAAQAAAAAAAAAPAAIAAQAAAAcAAAAPAAEAAQAEAAcAAAAPAAAAAQAAAAcAAAAPAP//AQAAAAMAAAAPAP7/AQAAAAcAAAAOAAkAAQAAAAMAAAAOAAgAAQAEAAcAAAAOAAcAAQAAAAMAAAAOAAYAAQAFAAYAAAAOAAUAAQACAAUAAAAOAAQAAQACAAUAAAAOAAMAAQACAAQAAAAOAAIAAQAAAAMAAAAOAAEAAQAAAAcAAAAOAAAAAQAAAAcAAAAOAP//AQAAAAMAAAAOAP7/AQAEAAcAAAANAAkAAQAAAAMAAAANAAgAAQAEAAcAAAANAAcAAQAAAAcAAAANAAYAAQABAAIAAAANAAUAAQACAAEAAAANAAQAAQACAAUAAAANAAIAAQAAAAcAAAANAAEAAQAAAAcAAAANAAAAAQAAAAcAAAANAP//AQAAAAcAAAANAP7/AQAEAAcAAAAMAAkAAQAEAAcAAAAMAAgAAQAAAAcAAAAMAAcAAQAEAAcAAAAMAAYAAQAFAAYAAAAMAAUAAQABAAUAAAAMAAQAAQABAAQAAAAMAAMAAQABAAMAAAAMAAIAAQAAAAcAAAAMAAEAAQAAAAMAAAAMAAAAAQAAAAMAAAAMAP//AQAAAAMAAAAMAP7/AQAAAAMAAAALAAkAAQAAAAcAAAALAAgAAQAAAAMAAAALAAcAAQAAAAMAAAALAAYAAQAFAAYAAAALAAUAAQAHAAQAAAALAAQAAQAAAAMAAAALAAMAAQAAAAMAAAALAAIAAQAAAAMAAAALAAEAAQAEAAcAAAALAAAAAQAAAAMAAAALAP//AQAAAAMAAAALAP7/AQAAAAcAAAAKAAkAAQAAAAcAAAAKAAgAAQAAAAcAAAAKAAcAAQAAAAMAAAAKAAYAAQAFAAYAAAAKAAUAAQADAAQAAAAKAAQAAQAEAAcAAAAKAAMAAQAAAAcAAAAKAAIAAQAAAAcAAAAKAAEAAQAAAAMAAAAKAAAAAQAAAAMAAAAKAP//AQAAAAcAAAAKAP7/AQAEAAcAAAAJAAkAAQAEAAcAAAAJAAgAAQAEAAcAAAAJAAcAAQAHAAcAAAAJAAYAAQAHAAUAAAAJAAUAAQAHAAQAAAAJAAQAAQAEAAcAAAAJAAMAAQAAAAMAAAAJAAIAAQAEAAcAAAAJAAEAAQAAAAMAAAAJAAAAAQAAAAMAAAAJAP//AQAAAAMAAAAJAP7/AQAAAAMAAAAIAAkAAQADAAYAAAAIAAgAAQADAAYAAAAIAAcAAQADAAUAAAAIAAYAAQACAAUAAAAIAAUAAQADAAAAAAAIAAQAAQAAAAMAAAAIAAMAAQAAAAcAAAAIAAIAAQAEAAcAAAAIAAEAAQAAAAMAAAAIAAAAAQAEAAcAAAAIAP//AQAAAAcAAAAIAP7/AQAEAAcAAAAHAAkAAQABAAAAAAAHAAgAAQABAAAAAAAHAAcAAQAFAAQAAAAHAAYAAQACAAYAAAAHAAUAAQAHAAQAAAAHAAQAAQAAAAMAAAAHAAMAAQAAAAMAAAAHAAIAAQAAAAcAAAAHAAEAAQAAAAMAAAAHAAAAAQAAAAcAAAAHAP//AQAAAAcAAAAHAP7/AQAEAAcAAAAGAAkAAQAAAAMAAAAGAAgAAQAAAAcAAAAGAAcAAQAAAAMAAAAGAAYAAQABAAIAAAAGAAUAAQADAAQAAAAGAAQAAQAAAAMAAAAGAAMAAQAAAAcAAAAGAAIAAQAEAAcAAAAGAAEAAQAEAAcAAAAGAAAAAQAAAAcAAAAGAP//AQAEAAcAAAAGAP7/AQAEAAcAAAAFAAkAAQAAAAcAAAAFAAgAAQAEAAcAAAAFAAcAAQAAAAcAAAAFAAYAAQABAAIAAAAFAAUAAQADAAQAAAAFAAQAAQAAAAMAAAAFAAMAAQAAAAMAAAAFAAIAAQAAAAcAAAAFAAEAAQAAAAMAAAAFAAAAAQAEAAcAAAAFAP//AQAAAAMAAAAFAP7/AQAAAAMAAAAEAAkAAQAAAAcAAAAEAAgAAQAEAAcAAAAEAAcAAQAEAAcAAAAEAAYAAQABAAIAAAAEAAUAAQACAAAAAAAEAAQAAQADAAYAAAAEAAMAAQAHAAYAAAAEAAIAAQADAAIAAAAEAAEAAQADAAAAAAAEAAAAAQAAAAcAAAAEAP//AQAAAAcAAAAEAP7/AQAEAAcAAAADAAkAAQAAAAcAAAADAAgAAQAAAAcAAAADAAcAAQAAAAMAAAADAAYAAQAFAAYAAAADAAUAAQACAAUAAAADAAQAAQACAAUAAAADAAMAAQACAAEAAAADAAIAAQACAAUAAAADAAEAAQADAAAAAAADAAAAAQAAAAcAAAADAP//AQAAAAcAAAADAP7/AQAAAAcAAAACAAkAAQAEAAcAAAACAAgAAQAAAAcAAAACAAcAAQAEAAcAAAACAAYAAQAFAAYAAAACAAUAAQAFAAQAAAACAAQAAQAGAAYAAAACAAMAAQACAAUAAAACAAIAAQAFAAUAAAACAAEAAQABAAMAAAACAAAAAQAAAAMAAAACAP//AQAEAAcAAAACAP7/AQAEAAcAAAABAAkAAQAEAAcAAAABAAgAAQAAAAMAAAABAAcAAQAEAAcAAAABAAYAAQAAAAcAAAABAAUAAQAEAAcAAAABAAQAAQABAAIAAAABAAMAAQABAAUAAAABAAIAAQABAAcAAAABAAEAAQAAAAcAAAABAAAAAQAEAAcAAAABAP//AQAAAAcAAAABAP7/AQAAAAcAAAAAAAkAAQAEAAcAAAAAAAgAAQAEAAcAAAAAAAcAAQAEAAcAAAAAAAYAAQAEAAcAAAAAAAUAAQAAAAcAAAAAAAQAAQABAAYAAAAAAAMAAQAHAAQAAAAAAAIAAQAAAAMAAAAAAAEAAQAAAAMAAAAAAAAAAQAAAAMAAAAAAP//AQAEAAcAAAAAAP7/AQAEAAcAAAD//wkAAQAAAAcAAAD//wgAAQAEAAcAAAD//wcAAQAEAAcAAAD//wYAAQAAAAMAAAD//wUAAQAEAAcAAAD//wQAAQABAAIAAAD//wMAAQAHAAQAAAD//wIAAQAAAAcAAAD//wEAAQAAAAMAAAD//wAAAQAAAAMAAAD/////AQAEAAcAAAD///7/AQAAAAcAAAD+/wkAAQAEAAcAAAD+/wgAAQAAAAcAAAD+/wcAAQAEAAcAAAD+/wUAAQAEAAcAAAD+/wQAAQABAAYAAAD+/wMAAQAGAAQAAAD+/wIAAQADAAIAAAD+/wEAAQAHAAQAAAD+/wAAAQAAAAcAAAD+////AQAAAAcAAAD+//7/AQAEAAcAAAD9/wMAAQACAAEAAAD9/wQAAQABAAYAAAD8/wMAAQABAAEAAAD8/wQAAQABAAIAAAD8/wIAAQABAAAAAAD9/wIAAQACAAUAAAD8/wEAAQABAAMAAAD9/wEAAQADAAAAAAD8//7/AQAAAAcAAAD8////AQAAAAMAAAD8/wYAAQAAAAcAAAD8/wgAAQAAAAcAAAD8/wkAAQAAAAMAAAD8/wsAAQAAAAMAAAD9/wsAAQAAAAMAAAD+/wsAAQAEAAcAAAD//wsAAQAAAAcAAAD//woAAQAAAAcAAAAAAAoAAQAAAAcAAAABAAoAAQAAAAMAAAACAAoAAQAAAAcAAAACAAsAAQAEAAQAAAADAAsAAQAAAAcAAAAEAAsAAQAAAAMAAAAFAAsAAQAAAAMAAAAGAAsAAQAEAAcAAAAHAAsAAQABAAIAAAAIAAsAAQADAAMAAAAEAAwAAQADAAQAAAADAAwAAQADAAAAAAACAAwAAQAGAAQAAAABAAwAAQACAAYAAAAAAAwAAQAAAAMAAAAAAAsAAQAAAAcAAAD//wwAAQAAAAMAAAD+/wwAAQAAAAcAAAD9/wwAAQAEAAcAAAD8/wwAAQAEAAcAAAAFAAwAAQADAAAAAAAGAAwAAQADAAAAAAAHAAwAAQAEAAQAAAAIAAwAAQADAAMAAAAJAAwAAQAEAAcAAAAKAAwAAQAAAAcAAAALAAwAAQAAAAcAAAAMAAwAAQAEAAcAAAANAAwAAQAEAAcAAAAOAAsAAQAAAAMAAAAPAAsAAQAEAAcAAAAQAAsAAQAEAAcAAAAPAAwAAQAAAAcAAAAOAAwAAQAAAAMAAAALAAsAAQAAAAMAAAAKAAsAAQAEAAcAAAAMAAsAAQAAAAMAAAANAAsAAQAEAAcAAAAQAAwAAQAAAAcAAAARAAUAAQADAAQAAAARAAYAAQAFAAYAAAASAAYAAQABAAIAAAASAAUAAQADAAAAAAATAAUAAQADAAAAAAATAAYAAQAFAAYAAAARAAMAAQAAAAcAAAASAAMAAQAAAAMAAAATAAMAAQAAAAMAAAARAAQAAQAAAAMAAAASAAQAAQAAAAcAAAATAAQAAQAEAAcAAAAUAAMAAQAAAAMAAAAUAAQAAQAAAAcAAAAUAAUAAQAHAAQAAAAUAAYAAQABAAYAAAAVAAUAAQADAAAAAAAVAAYAAQABAAIAAAAWAAYAAQABAAYAAAAWAAUAAQAHAAQAAAAXAAYAAQAFAAYAAAAXAAUAAQAFAAUAAAAYAAYAAQABAAYAAAAYAAUAAQAGAAUAAAASAAgAAQAAAAMAAAASAAkAAQAAAAMAAAASAAoAAQAEAAcAAAASAAsAAQAAAAcAAAASAAwAAQAAAAMAAAASAA0AAQAAAAMAAAATAA0AAQAEAAcAAAATAAwAAQAAAAcAAAAUAAwAAQAAAAMAAAAVAAwAAQAEAAcAAAAWAAwAAQAAAAMAAAAXAAwAAQAAAAMAAAAXAAsAAQAEAAcAAAAYAAsAAQAAAAMAAAAYAAoAAQAAAAMAAAAYAAkAAQAEAAcAAAAYAAgAAQAAAAcAAAAXAAgAAQAEAAcAAAAWAAgAAQAAAAcAAAAVAAgAAQAAAAcAAAAUAAgAAQAAAAMAAAAUAAkAAQAAAAcAAAAVAAkAAQAAAAcAAAAWAAoAAQAAAAcAAAAXAAoAAQAEAAcAAAAUAAoAAQAEAAcAAAAYAA0AAQAAAAMAAAAXAA0AAQAAAAcAAAAWAA0AAQAEAAcAAAAVAA0AAQAEAAcAAAAUAA0AAQAEAAcAAAARAA0AAQAEAAcAAAAQAA0AAQAEAAcAAAAPAA0AAQAAAAcAAAANAA0AAQAAAAMAAAAMAA0AAQAAAAcAAAALAA0AAQAAAAMAAAAKAA0AAQAAAAMAAAAJAA0AAQAEAAcAAAAIAA0AAQAAAAcAAAAHAA0AAQAAAAMAAAAGAA0AAQAAAAMAAAAFAA0AAQAAAAMAAAAEAA0AAQAAAAcAAAADAA0AAQAAAAcAAAACAA0AAQAEAAcAAAABAA0AAQAAAAcAAAAAAA0AAQAEAAcAAAD//w0AAQAEAAcAAAD+/w0AAQAAAAcAAAD9/w0AAQAEAAcAAAD8/w0AAQAAAAcAAAD8/w4AAQAEAAcAAAD9/w4AAQAEAAcAAAD+/w4AAQAEAAcAAAD//w4AAQAAAAMAAAAAAA4AAQAAAAcAAAABAA4AAQAAAAMAAAACAA4AAQAEAAcAAAADAA4AAQAAAAcAAAAEAA4AAQAAAAcAAAAFAA4AAQAAAAMAAAAGAA4AAQAAAAcAAAAHAA4AAQAAAAMAAAAIAA4AAQAAAAcAAAAJAA4AAQAEAAcAAAAKAA4AAQAEAAcAAAALAA4AAQAAAAcAAAAMAA4AAQAEAAcAAAANAA4AAQAEAAcAAAAOAA4AAQAAAAMAAAAPAA4AAQAAAAMAAAAQAA4AAQAAAAMAAAARAA4AAQAAAAMAAAASAA4AAQAAAAMAAAATAA4AAQAAAAcAAAAUAA4AAQAAAAcAAAAVAA4AAQAAAAcAAAAWAA4AAQAAAAcAAAAXAA4AAQAAAAcAAAAYAA4AAQAAAAMAAAAYAAMAAQACAAEAAAAXAAMAAQAGAAUAAAAWAAMAAQABAAAAAAAXAAIAAQACAAUAAAAYAAIAAQACAAEAAAAWAAIAAQABAAQAAAAVAAIAAQAAAAcAAAAUAAIAAQAEAAcAAAATAAIAAQAAAAcAAAASAAEAAQAAAAcAAAATAAAAAQAAAAcAAAAUAAAAAQAAAAcAAAAVAAAAAQAEAAcAAAAWAAAAAQABAAMAAAAXAAAAAQAHAAQAAAAYAAAAAQADAAAAAAAYAP//AQAAAAMAAAAYAP7/AQAAAAcAAAAXAP7/AQAAAAcAAAAWAP7/AQAEAAcAAAAVAP7/AQAAAAMAAAAUAP7/AQAAAAMAAAATAP7/AQAAAAcAAAASAP7/AQAAAAcAAAARAP7/AQAAAAcAAAARAP//AQAEAAcAAAASAP//AQAAAAcAAAASAAAAAQAEAAcAAAANAAMAAQADAAQAAAAWAAQAAQAAAAIAAAAXAAQAAQAGAAYAAAAYAAQAAQACAAUAAAAZAAIAAQACAAUAAAAZAAMAAQACAAEAAAAZAAQAAQACAAUAAAAaAAIAAQACAAEAAAAaAAMAAQAGAAUAAAAaAAQAAQADAAUAAAAaAP7/AQAEAAcAAAAaAP//AQAAAAcAAAAaAAAAAQADAAQAAAAbAAAAAQADAAQAAAAbAP//AQAEAAcAAAAcAP//AQAEAAcAAAAcAP7/AQAAAAcAAAAcAAAAAQADAAIAAAAcAAEAAQAHAAYAAAAcAAIAAQADAAIAAAAbAAIAAQAGAAUAAAAbAAMAAQACAAUAAAAbAAQAAQABAAIAAAAbAAUAAQAAAAcAAAAbAAYAAQAAAAMAAAAaAAYAAQADAAYAAAAaAAUAAQAHAAYAAAAcAAQAAQADAAMAAAAcAAMAAQAHAAYAAAAcAAUAAQAEAAcAAAAcAAYAAQAAAAcAAAAeAP7/AQAAAAMAAAAeAP//AQAAAAcAAAAeAAAAAQAAAAcAAAAeAAEAAQAEAAcAAAAdAAEAAQAAAAMAAAAdAAIAAQAEAAcAAAAdAAMAAQAEAAcAAAAdAAQAAQAAAAMAAAAdAAUAAQAAAAcAAAAdAAYAAQAAAAMAAAAeAAUAAQAEAAcAAAAeAAQAAQAAAAcAAAAeAAMAAQAAAAcAAAAeAAIAAQAEAAcAAAAfAAIAAQAEAAcAAAAfAAEAAQAAAAMAAAAfAAAAAQAAAAcAAAAgAAAAAQAEAAcAAAAgAP//AQAEAAcAAAAgAP7/AQAAAAMAAAAfAP//AQAEAAcAAAAfAAMAAQAAAAcAAAAfAAQAAQAEAAcAAAAgAAQAAQAAAAcAAAAgAAMAAQAAAAcAAAAgAAIAAQAAAAcAAAAgAAUAAQAEAAcAAAAfAAUAAQAAAAcAAAAfAAYAAQAEAAcAAAAgAAcAAQADAAAAAAAgAAgAAQABAAYAAAAgAAkAAQAEAAcAAAAgAAoAAQAAAAcAAAAgAAsAAQAAAAMAAAAgAAwAAQAAAAMAAAAfAAwAAQAAAAcAAAAfAA0AAQAEAAcAAAAgAA0AAQAEAAcAAAAgAA4AAQAAAAMAAAAfAA4AAQAEAAcAAAAeAA4AAQAAAAcAAAAdAA4AAQAEAAcAAAAcAA4AAQAAAAMAAAAbAA4AAQAAAAMAAAAaAA4AAQAEAAcAAAAaAA0AAQAAAAMAAAAaAAwAAQAEAAcAAAAbAAwAAQAAAAcAAAAbAAsAAQAAAAMAAAAcAAsAAQAAAAcAAAAdAAsAAQAAAAMAAAAdAAwAAQAAAAMAAAAcAAwAAQAAAAMAAAAcAAoAAQAAAAMAAAAdAAoAAQAAAAcAAAAdAAkAAQAEAAcAAAAeAAkAAQAAAAcAAAAfAAkAAQAEAAcAAAAfAAgAAQAFAAYAAAAfAAoAAQAAAAcAAAAfAAsAAQAEAAcAAAAeAAsAAQAEAAcAAAAeAAgAAQAFAAYAAAAeAAcAAQAHAAQAAAAeAAYAAQAAAAcAAAAdAAcAAQADAAQAAAAcAAcAAQAHAAQAAAAcAAgAAQAFAAYAAAAbAAgAAQAFAAYAAAAaAAgAAQAFAAYAAAAZAAgAAQABAAYAAAAZAAkAAQAEAAcAAAAaAAkAAQAAAAcAAAAaAAoAAQAAAAcAAAAbAAoAAQAAAAcAAAAZAAUAAQACAAUAAAAZAAYAAQACAAYAAAAWAAEAAQABAAQAAAAXAAEAAQAGAAUAAAAYAAEAAQACAAEAAAAZAAEAAQAGAAUAAAAaAAEAAQACAAEAAAAbAAEAAQACAAEAAAAZAAAAAQAHAAQAAAAZAAcAAQABAAAAAAAaAAcAAQAGAAQAAAAbAAcAAQADAAQAAAAfAAcAAQADAAAAAAAhAAcAAQAHAAYAAAAdAAgAAQAFAAYAAAAhAAgAAQAAAAEAAAD7/wMAAQABAAMAAAD7/wQAAQABAAQAAAD7//7/AQAEAAcAAAD7////AQAEAAcAAAD7/wAAAQAAAAMAAAD7/wEAAQAAAAcAAAD7/wUAAQADAAcAAAD7/wYAAQAEAAcAAAD7/wcAAQAEAAcAAAD7/wgAAQAAAAcAAAD7/wkAAQAEAAcAAAD7/woAAQAAAAcAAAD7/wsAAQAEAAcAAAD7/wwAAQAEAAcAAAD7/w0AAQAAAAMAAAD7/w4AAQAAAAcAAAAhAP7/AQAAAAMAAAAhAP//AQAEAAcAAAAhAAAAAQAAAAcAAAAhAAEAAQAAAAMAAAAhAAIAAQAEAAcAAAAhAAMAAQAEAAcAAAAhAAQAAQAAAAMAAAAhAAUAAQAEAAcAAAAhAAkAAQAEAAYAAAAhAAoAAQAAAAMAAAAhAAsAAQAAAAcAAAAhAAwAAQAEAAcAAAAhAA0AAQAAAAcAAAAhAA4AAQAEAAcAAAABAAsAAQADAAQAAAD+/woAAQAAAAcAAAD+/wYAAQAAAAcAAAD9/woAAQAAAAcAAAD9/wkAAQAEAAcAAAD9/wgAAQAAAAMAAAD9/wcAAQAEAAcAAAD9/wYAAQAAAAMAAAD9/wUAAQAAAAcAAAD8/woAAQAEAAcAAAD8/wcAAQAEAAcAAAD8/wUAAQAAAAMAAAAGAAoAAQAAAAMAAAAFAAoAAQAAAAcAAAAEAAoAAQAEAAcAAAADAAoAAQAEAAcAAAAeAA0AAQAAAAMAAAAeAAwAAQAEAAcAAAAeAAoAAQAAAAMAAAAdAA0AAQAAAAMAAAAcAA0AAQAAAAcAAAAbAA0AAQAAAAcAAAAaAAsAAQAAAAMAAAAZAA4AAQAAAAcAAAAZAA0AAQAAAAMAAAAZAAwAAQAAAAcAAAAZAAsAAQAEAAcAAAAZAAoAAQAAAAMAAAAYAAwAAQAEAAcAAAAWAAsAAQAAAAMAAAAVAAsAAQAAAAMAAAAVAAoAAQAEAAcAAAAUAAsAAQAAAAcAAAATAAsAAQAEAAcAAAATAAoAAQAAAAMAAAARAAwAAQAAAAcAAAARAAsAAQAEAAcAAAARAAoAAQAAAAcAAAAQAAoAAQAAAAMAAAAPAAoAAQAAAAMAAAAOAA0AAQAEAAcAAAAOAAoAAQAEAAcAAAANAAoAAQAEAAcAAAAMAAoAAQAAAAMAAAALAAoAAQAEAAcAAAAKAAoAAQAAAAMAAAAJAAsAAQAAAAMAAAAJAAoAAQAEAAcAAAAIAAoAAQADAAYAAAAHAAoAAQACAAEAAAAcAAkAAQAEAAcAAAAbAAkAAQAAAAMAAAAXAAkAAQAAAAMAAAAWAAkAAQAAAAcAAAATAAkAAQAAAAcAAAARAAkAAQAEAAcAAAAYAAcAAQAAAAcAAAAXAAcAAQAAAAcAAAAWAAcAAQAAAAMAAAAVAAcAAQAAAAcAAAAUAAcAAQAEAAcAAAATAAgAAQAAAAMAAAATAAcAAQAEAAcAAAASAAcAAQAEAAcAAAARAAgAAQAAAAcAAAARAAcAAQAAAAMAAAAhAAYAAQAAAAcAAAAgAAYAAQAEAAcAAAAgAAEAAQAEAAcAAAAfAP7/AQAAAAcAAAAdAAAAAQAAAAMAAAAdAP//AQAEAAcAAAAdAP7/AQAAAAMAAAAbAP7/AQAEAAcAAAAZAP//AQAEAAcAAAAZAP7/AQAEAAcAAAAXAP//AQAAAAMAAAAWAP//AQAEAAcAAAAVAP//AQAAAAcAAAAUAP//AQAEAAcAAAATAP//AQAAAAMAAAD9/wAAAQAEAAcAAAD9////AQAEAAcAAAD9//7/AQAEAAcAAAD8/wAAAQAEAAcAAAARAAAAAQAAAAcAAAAVAAEAAQAAAAcAAAAUAAEAAQAAAAMAAAATAAEAAQAEAAcAAAASAAIAAQAAAAMAAAARAAIAAQAAAAMAAAARAAEAAQAEAAcAAAAVAAQAAQAEAAcAAAAVAAMAAQAEAAcAAAD6//z/AQAAAAcAAAD7//z/AQAAAAMAAAD8//z/AQAAAAcAAAD9//z/AQAAAAMAAAD+//z/AQAAAAMAAAD///z/AQAAAAcAAAAAAPz/AQAAAAMAAAABAPz/AQAAAAcAAAACAPz/AQAEAAcAAAADAPz/AQAEAAcAAAAEAPz/AQAAAAcAAAAFAPz/AQAAAAcAAAAGAPz/AQAAAAcAAAAHAPz/AQAAAAcAAAAIAPz/AQAAAAMAAAAJAPz/AQAEAAcAAAAKAPz/AQAAAAMAAAALAPz/AQAEAAcAAAAMAPz/AQAAAAMAAAANAPz/AQAAAAMAAAAOAPz/AQAEAAcAAAAPAPz/AQAAAAMAAAAQAPz/AQAAAAcAAAARAPz/AQAEAAcAAAASAPz/AQAEAAcAAAATAPz/AQAAAAcAAAAUAPz/AQAEAAcAAAAVAPz/AQAAAAMAAAAWAPz/AQAAAAcAAAAhAPz/AQAAAAMAAAAhAP3/AQAAAAMAAAAgAP3/AQAAAAMAAAAgAPz/AQAAAAcAAAAfAPz/AQAAAAcAAAAeAPz/AQAEAAcAAAAdAPz/AQAEAAcAAAAcAPz/AQAAAAcAAAAbAPz/AQAEAAcAAAAaAPz/AQAAAAMAAAAZAPz/AQAAAAcAAAAYAPz/AQAAAAcAAAAXAPz/AQAAAAMAAAD6//3/AQAAAAcAAAD6//7/AQAEAAcAAAD6////AQAEAAcAAAD6/wAAAQAEAAcAAAD6/wEAAQAAAAMAAAD6/wIAAQAEAAcAAAD6/wMAAQAEAAcAAAD6/wQAAQAEAAcAAAD6/wUAAQAAAAcAAAD6/wYAAQAEAAcAAAD6/wcAAQAAAAMAAAD6/wgAAQAAAAcAAAD6/wkAAQAAAAMAAAD6/woAAQAEAAcAAAD6/wsAAQAAAAMAAAD6/wwAAQAEAAcAAAD6/w0AAQAAAAcAAAD6/w4AAQAAAAcAAAA=") tile_set = SubResource("TileSet_ge1l5") rendering_quadrant_size = 32 physics_quadrant_size = 32 @@ -609,11 +751,26 @@ metadata/_edit_lock_ = true [node name="Objects" type="TileMapLayer" parent="."] y_sort_enabled = true -tile_map_data = PackedByteArray("AAADAAAAAAAAAAAAAQA=") +tile_map_data = PackedByteArray("AAADAAAAAAAAAAAAAQANAAMAAAAAAAAAAgD9/wAAAAAAAAAAAwADAAoAAAAAAAAABAAZAP//AAAAAAAABQAbAAMAAQAHAAEAAAAcAAMAAQAHAAMAAAAcAAIAAQAGAAIAAAAcAAEAAQAGAAIAAAAcAAAAAQAGAAIAAAAcAP//AQAHAAIAAAAbAP//AQAGAAEAAAAYAP//AQAHAAIAAAAXAP//AQAHAAEAAAAWAP//AQAGAAEAAAAWAAAAAQAGAAIAAAAWAAEAAQAGAAIAAAAWAAIAAQAGAAIAAAAWAAMAAQAGAAMAAAAXAAMAAQAHAAEAAAAYAAMAAQAHAAEAAAAZAAMAAAAAAAAABgA=") tile_set = SubResource("TileSet_5rqdi") rendering_quadrant_size = 32 physics_quadrant_size = 32 [node name="Player" parent="." node_paths=PackedStringArray("tilemap") instance=ExtResource("1_ge1l5")] -position = Vector2(112, 51) +position = Vector2(112, 53) tilemap = NodePath("../Ground") + +[node name="NightTrigger" type="Area2D" parent="."] +script = SubResource("GDScript_jkyiu") + +[node name="CanvasModulate" type="CanvasModulate" parent="NightTrigger"] + +[node name="AnimationPlayer" type="AnimationPlayer" parent="NightTrigger/CanvasModulate"] +libraries = { +&"": SubResource("AnimationLibrary_cfsyk") +} + +[node name="CollisionShape2D" type="CollisionShape2D" parent="NightTrigger"] +shape = SubResource("SegmentShape2D_mv4yg") + +[connection signal="body_entered" from="NightTrigger" to="NightTrigger" method="_on_body_entered"] diff --git a/scenes/levels/lvl_1.tscn b/scenes/levels/lvl_1.tscn new file mode 100644 index 0000000..77605d1 --- /dev/null +++ b/scenes/levels/lvl_1.tscn @@ -0,0 +1,155 @@ +[gd_scene load_steps=15 format=4 uid="uid://bdpobbbi6apq5"] + +[ext_resource type="Texture2D" uid="uid://2aopgpvv473r" path="res://assets/textures/tilemaps/level_interior_tileset.png" id="1_satx0"] +[ext_resource type="PackedScene" uid="uid://dfbomt0l6b1o4" path="res://scenes/player.tscn" id="2_0t8x2"] +[ext_resource type="PackedScene" uid="uid://sr8t2lu6apr4" path="res://scenes/enemies/skull.tscn" id="3_u5kpk"] + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_0t8x2"] +vertices = PackedVector2Array(16, 16, 2, 16, 2, 10, 16, 10) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(2, 10, 16, 10, 16, 16, 2, 16)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_u5kpk"] +vertices = PackedVector2Array(16, 16, 2, 16, 2, -16, 16, -16) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(2, -16, 16, -16, 16, 16, 2, 16)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_ij6uy"] +vertices = PackedVector2Array(16, -8, 2, -8, 2, -16, 16, -16) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(2, -16, 16, -16, 16, -8, 2, -8)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_piajy"] +vertices = PackedVector2Array(16, 16, -16, 16, -16, 10, 16, 10) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-16, 10, 16, 10, 16, 16, -16, 16)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_v45sh"] +vertices = PackedVector2Array(16, 16, -16, 16, -16, -16, 16, -16) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_l6efi"] +vertices = PackedVector2Array(16, -8, -16, -8, -16, -16, 16, -16) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-16, -16, 16, -16, 16, -8, -16, -8)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_3u0n1"] +vertices = PackedVector2Array(-1, 16, -16, 16, -16, 10, -1, 10) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-16, 10, -1, 10, -1, 16, -16, 16)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_2lf8p"] +vertices = PackedVector2Array(-1.5, 16, -16, 16, -16, -16, -1.5, -16) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-16, -16, -1.5, -16, -1.5, 16, -16, 16)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_vpggf"] +vertices = PackedVector2Array(-1, -8, -16, -8, -16, -16, -1, -16) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-16, -16, -1, -16, -1, -8, -16, -8)]) +agent_radius = 0.0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_u5kpk"] +texture = ExtResource("1_satx0") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +0:0/0/terrain_set = 0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 10, 2, 10, 2, 16, -16, 16) +0:0/0/terrains_peering_bit/bottom_right_corner = 0 +0:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_0t8x2") +1:0/0 = 0 +1:0/0/terrain_set = 0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 10, -16, 10) +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:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_piajy") +2:0/0 = 0 +2:0/0/terrain_set = 0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -1, 16, -0.9796982, 10, -16, 10) +2:0/0/terrains_peering_bit/bottom_left_corner = 0 +2:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_3u0n1") +0:1/0 = 0 +0:1/0/terrain_set = 0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 2, -16, 2, 16, -16, 16) +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 +0:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_u5kpk") +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 +1:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_v45sh") +2:1/0 = 0 +2:1/0/terrain_set = 0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-1, -16, 16, -16, 16, 16, -1, 16) +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:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_2lf8p") +0:2/0 = 0 +0:2/0/terrain_set = 0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 2, -16, 2, -8, 16, -8, 16, 16, -16, 16) +0:2/0/terrains_peering_bit/top_right_corner = 0 +0:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_ij6uy") +1:2/0 = 0 +1:2/0/terrain_set = 0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, -16, 16, -16, -8, 16, -8) +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 +1:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_l6efi") +2:2/0 = 0 +2:2/0/terrain_set = 0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-1, -16, 16, -16, 16, 16, -16, 16, -16, -8, -1, -8) +2:2/0/terrains_peering_bit/top_left_corner = 0 +2:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_vpggf") + +[sub_resource type="TileSet" id="TileSet_u5kpk"] +tile_size = Vector2i(32, 32) +physics_layer_0/collision_layer = 1 +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "Ground 0" +terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +navigation_layer_0/layers = 1 +sources/1 = SubResource("TileSetAtlasSource_u5kpk") + +[node name="Lvl1" type="Node2D"] +y_sort_enabled = true + +[node name="TileMapLayer" type="TileMapLayer" parent="."] +z_index = -1 +y_sort_enabled = true +tile_map_data = PackedByteArray("AAD//wAAAQABAAEAAAAAAAAAAQABAAEAAAAAAAEAAQABAAEAAAD//wEAAQABAAEAAAD+/wEAAQABAAEAAAD+/wAAAQABAAEAAAD+////AQABAAEAAAD/////AQABAAEAAAAAAP//AQABAAEAAAABAAAAAQABAAEAAAABAAEAAQABAAEAAAABAP//AQABAAEAAAAAAP7/AQABAAEAAAABAP7/AQABAAEAAAD///7/AQABAAEAAAD+//7/AQABAAEAAAACAP//AQABAAEAAAACAAAAAQABAAEAAAACAP7/AQABAAEAAAADAP//AQABAAEAAAADAAAAAQABAAEAAAADAP7/AQABAAEAAAAEAP//AQABAAEAAAAEAAAAAQABAAEAAAAEAP7/AQABAAEAAAAEAP3/AQABAAEAAAAFAP3/AQACAAEAAAAFAP7/AQACAAEAAAADAP3/AQABAAEAAAADAPz/AQABAAEAAAAEAPz/AQABAAEAAAAFAPz/AQACAAEAAAAFAP//AQACAAEAAAACAP3/AQABAAEAAAACAPz/AQABAAEAAAABAP3/AQABAAEAAAABAPz/AQABAAEAAAAAAP3/AQABAAEAAAAAAPz/AQABAAEAAAD///3/AQABAAEAAAD///z/AQABAAEAAAD+//3/AQABAAEAAAD+//z/AQABAAEAAAD9////AQABAAEAAAD9//7/AQABAAEAAAD9//3/AQABAAEAAAD9//z/AQABAAEAAAD9/wAAAQABAAEAAAD9/wEAAQABAAEAAAACAAEAAQABAAEAAAACAAIAAQABAAEAAAABAAIAAQABAAEAAAAAAAIAAQABAAEAAAD//wIAAQABAAEAAAD+/wIAAQABAAEAAAD9/wIAAQABAAEAAAADAAEAAQABAAEAAAADAAIAAQABAAEAAAAEAAEAAQABAAEAAAAEAAIAAQABAAEAAAAFAAAAAQACAAEAAAAFAAEAAQACAAEAAAAFAAIAAQACAAEAAAD8/wIAAQABAAEAAAD8/wMAAQABAAIAAAD7/wMAAQABAAIAAAD7/wIAAQABAAEAAAD7/wEAAQABAAEAAAD8/wEAAQABAAEAAAD7/wAAAQABAAEAAAD8/wAAAQABAAEAAAD7////AQABAAEAAAD8////AQABAAEAAAD7//7/AQABAAEAAAD8//7/AQABAAEAAAD7//3/AQABAAEAAAD8//3/AQABAAEAAAD7//z/AQABAAEAAAD8//z/AQABAAEAAAD9/wMAAQABAAIAAAD+/wMAAQABAAIAAAD//wMAAQABAAIAAAAAAAMAAQABAAIAAAABAAMAAQABAAIAAAACAAMAAQABAAIAAAADAAMAAQABAAIAAAAEAAMAAQABAAIAAAAFAAMAAQACAAIAAAD6/wMAAQAAAAIAAAD6/wIAAQAAAAEAAAD6/wEAAQAAAAEAAAD6/wAAAQAAAAEAAAD6////AQAAAAEAAAD6//7/AQAAAAEAAAD6//3/AQAAAAEAAAD6//z/AQAAAAEAAAD6//v/AQAAAAAAAAD7//v/AQABAAAAAAD8//v/AQABAAAAAAD9//v/AQABAAAAAAD+//v/AQABAAAAAAD///v/AQABAAAAAAAAAPv/AQABAAAAAAABAPv/AQABAAAAAAACAPv/AQABAAAAAAADAPv/AQABAAAAAAAEAPv/AQABAAAAAAAFAPv/AQACAAAAAAA=") +tile_set = SubResource("TileSet_u5kpk") +rendering_quadrant_size = 32 +physics_quadrant_size = 32 + +[node name="Player" parent="." node_paths=PackedStringArray("tilemap") instance=ExtResource("2_0t8x2")] +tilemap = NodePath("../TileMapLayer") + +[node name="Skull" parent="." instance=ExtResource("3_u5kpk")] +position = Vector2(-111, -50) + +[node name="Skull2" parent="." instance=ExtResource("3_u5kpk")] +position = Vector2(8, -106) + +[node name="Skull3" parent="." instance=ExtResource("3_u5kpk")] +position = Vector2(140, -102) diff --git a/scenes/menus/hud.tscn b/scenes/menus/hud.tscn new file mode 100644 index 0000000..678ac70 --- /dev/null +++ b/scenes/menus/hud.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=3 format=3 uid="uid://c48stuhi2qml3"] + +[ext_resource type="PackedScene" uid="uid://b7bd4lqwlheti" path="res://scenes/menus/util/hearts.tscn" id="1_xmy64"] + +[sub_resource type="GDScript" id="GDScript_xmy64"] +script/source = "class_name HUD +extends CanvasLayer + +@onready var hearts: Hearts = $Hearts +" + +[node name="HUD" type="CanvasLayer"] +script = SubResource("GDScript_xmy64") + +[node name="Hearts" parent="." instance=ExtResource("1_xmy64")] +health = 7 diff --git a/scenes/menus/util/hearts.tscn b/scenes/menus/util/hearts.tscn new file mode 100644 index 0000000..786e586 --- /dev/null +++ b/scenes/menus/util/hearts.tscn @@ -0,0 +1,95 @@ +[gd_scene load_steps=10 format=3 uid="uid://b7bd4lqwlheti"] + +[ext_resource type="Texture2D" uid="uid://5pbgeg3yx6cd" path="res://assets/textures/spritesheets/heart.png" id="1_fn71o"] +[ext_resource type="Script" uid="uid://cfplt163iotph" path="res://scripts/menus/util/hearts.gd" id="1_nty8h"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_xmy64"] +atlas = ExtResource("1_fn71o") +region = Rect2(33, 1, 14, 13) + +[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_tfgnj"] +load_path = "res://.godot/imported/heart.png-0efefdd245172a860e354a0c110700fc.ctex" + +[sub_resource type="AtlasTexture" id="AtlasTexture_nty8h"] +atlas = SubResource("CompressedTexture2D_tfgnj") +region = Rect2(1, 1, 14, 13) + +[sub_resource type="AtlasTexture" id="AtlasTexture_6ej26"] +atlas = SubResource("CompressedTexture2D_tfgnj") +region = Rect2(1, 1, 14, 13) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gx0d8"] +atlas = SubResource("CompressedTexture2D_tfgnj") +region = Rect2(1, 1, 14, 13) + +[sub_resource type="AtlasTexture" id="AtlasTexture_prrtw"] +atlas = SubResource("CompressedTexture2D_tfgnj") +region = Rect2(1, 1, 14, 13) + +[sub_resource type="AtlasTexture" id="AtlasTexture_yvsuk"] +atlas = SubResource("CompressedTexture2D_tfgnj") +region = Rect2(1, 1, 14, 13) + +[node name="Hearts" type="Control"] +layout_mode = 3 +anchors_preset = 0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 8.0 +offset_bottom = 8.0 +script = ExtResource("1_nty8h") + +[node name="BackgroundContainer" type="HBoxContainer" parent="."] +layout_mode = 0 +offset_right = 86.0 +offset_bottom = 13.0 + +[node name="TextureRect" type="TextureRect" parent="BackgroundContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_xmy64") +stretch_mode = 2 + +[node name="TextureRect2" type="TextureRect" parent="BackgroundContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_xmy64") +stretch_mode = 2 + +[node name="TextureRect3" type="TextureRect" parent="BackgroundContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_xmy64") +stretch_mode = 2 + +[node name="TextureRect4" type="TextureRect" parent="BackgroundContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_xmy64") +stretch_mode = 2 + +[node name="TextureRect5" type="TextureRect" parent="BackgroundContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_xmy64") +stretch_mode = 2 + +[node name="HeartContainer" type="HBoxContainer" parent="."] +layout_mode = 0 +offset_right = 14.0 +offset_bottom = 13.0 + +[node name="TextureRect" type="TextureRect" parent="HeartContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_nty8h") + +[node name="TextureRect2" type="TextureRect" parent="HeartContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_6ej26") + +[node name="TextureRect3" type="TextureRect" parent="HeartContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_gx0d8") + +[node name="TextureRect4" type="TextureRect" parent="HeartContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_prrtw") + +[node name="TextureRect5" type="TextureRect" parent="HeartContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_yvsuk") diff --git a/scenes/player.tscn b/scenes/player.tscn index 048a819..7ed3cc3 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -1,7 +1,9 @@ -[gd_scene load_steps=22 format=3 uid="uid://dfbomt0l6b1o4"] +[gd_scene load_steps=31 format=3 uid="uid://dfbomt0l6b1o4"] [ext_resource type="Script" uid="uid://dxvslwwnnlosy" path="res://scripts/player.gd" id="1_3vyb7"] [ext_resource type="Texture2D" uid="uid://d06cv484ev2n3" path="res://assets/textures/spritesheets/normal_player.png" id="2_qhqgy"] +[ext_resource type="PackedScene" uid="uid://c48stuhi2qml3" path="res://scenes/menus/hud.tscn" id="3_qhqgy"] +[ext_resource type="Texture2D" uid="uid://c1yunf5rn1ncd" path="res://assets/textures/spritesheets/attack.png" id="4_dqkch"] [sub_resource type="AtlasTexture" id="AtlasTexture_dqkch"] atlas = ExtResource("2_qhqgy") @@ -15,30 +17,30 @@ region = Rect2(32, 0, 32, 32) atlas = ExtResource("2_qhqgy") region = Rect2(64, 0, 32, 32) -[sub_resource type="AtlasTexture" id="AtlasTexture_fjrip"] -atlas = ExtResource("2_qhqgy") -region = Rect2(0, 0, 32, 32) - [sub_resource type="AtlasTexture" id="AtlasTexture_3v2ag"] atlas = ExtResource("2_qhqgy") region = Rect2(96, 64, 32, 32) -[sub_resource type="AtlasTexture" id="AtlasTexture_jej6c"] +[sub_resource type="AtlasTexture" id="AtlasTexture_fjrip"] atlas = ExtResource("2_qhqgy") -region = Rect2(96, 0, 32, 32) +region = Rect2(0, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_f1ej7"] atlas = ExtResource("2_qhqgy") region = Rect2(0, 96, 32, 32) -[sub_resource type="AtlasTexture" id="AtlasTexture_oprun"] +[sub_resource type="AtlasTexture" id="AtlasTexture_jej6c"] atlas = ExtResource("2_qhqgy") -region = Rect2(64, 32, 32, 32) +region = Rect2(96, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_a8ls1"] atlas = ExtResource("2_qhqgy") region = Rect2(32, 96, 32, 32) +[sub_resource type="AtlasTexture" id="AtlasTexture_oprun"] +atlas = ExtResource("2_qhqgy") +region = Rect2(64, 32, 32, 32) + [sub_resource type="AtlasTexture" id="AtlasTexture_qfm1y"] atlas = ExtResource("2_qhqgy") region = Rect2(96, 0, 32, 32) @@ -92,36 +94,36 @@ animations = [{ }, { "frames": [{ "duration": 1.0, -"texture": SubResource("AtlasTexture_fjrip") +"texture": SubResource("AtlasTexture_3v2ag") }, { "duration": 1.0, -"texture": SubResource("AtlasTexture_3v2ag") +"texture": SubResource("AtlasTexture_fjrip") }], -"loop": true, +"loop": false, "name": &"hand_down", -"speed": 3.0 +"speed": 4.0 }, { "frames": [{ "duration": 1.0, -"texture": SubResource("AtlasTexture_jej6c") -}, { -"duration": 1.0, "texture": SubResource("AtlasTexture_f1ej7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jej6c") }], -"loop": true, +"loop": false, "name": &"hand_side", -"speed": 3.0 +"speed": 4.0 }, { "frames": [{ "duration": 1.0, -"texture": SubResource("AtlasTexture_oprun") +"texture": SubResource("AtlasTexture_a8ls1") }, { "duration": 1.0, -"texture": SubResource("AtlasTexture_a8ls1") +"texture": SubResource("AtlasTexture_oprun") }], -"loop": true, +"loop": false, "name": &"hand_up", -"speed": 3.0 +"speed": 4.0 }, { "frames": [{ "duration": 1.0, @@ -178,7 +180,58 @@ animations = [{ radius = 6.0 height = 14.0 +[sub_resource type="AtlasTexture" id="AtlasTexture_d2wvv"] +atlas = ExtResource("4_dqkch") +region = Rect2(0, 0, 32, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_i4ail"] +atlas = ExtResource("4_dqkch") +region = Rect2(0, 16, 32, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a38lo"] +atlas = ExtResource("4_dqkch") +region = Rect2(0, 32, 32, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4ni07"] +atlas = ExtResource("4_dqkch") +region = Rect2(0, 48, 32, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l71n6"] +atlas = ExtResource("4_dqkch") +region = Rect2(0, 64, 32, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y4r1p"] +atlas = ExtResource("4_dqkch") +region = Rect2(0, 80, 32, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_ke2ow"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_d2wvv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_i4ail") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_a38lo") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4ni07") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_l71n6") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_y4r1p") +}], +"loop": false, +"name": &"default", +"speed": 12.0 +}] + [node name="Player" type="CharacterBody2D"] +collision_layer = 3 motion_mode = 1 script = ExtResource("1_3vyb7") @@ -198,8 +251,20 @@ drag_horizontal_enabled = true drag_vertical_enabled = true [node name="RayCast2D" type="RayCast2D" parent="."] -target_position = Vector2(0, 32) +position = Vector2(0, 10) +target_position = Vector2(0, 22) collision_mask = 2 hit_from_inside = true collide_with_areas = true collide_with_bodies = false + +[node name="HUD" parent="." instance=ExtResource("3_qhqgy")] + +[node name="CursorHideTimer" type="Timer" parent="."] + +[node name="FightAnimation" type="AnimatedSprite2D" parent="."] +sprite_frames = SubResource("SpriteFrames_ke2ow") +frame = 5 +frame_progress = 1.0 +offset = Vector2(0, 24) +flip_v = true diff --git a/scripts/enemies/skull.gd b/scripts/enemies/skull.gd new file mode 100644 index 0000000..ba39472 --- /dev/null +++ b/scripts/enemies/skull.gd @@ -0,0 +1,86 @@ +extends CharacterBody2D + +@export var speed: int = 900 +@onready var navigation_agent_2d: NavigationAgent2D = $NavigationAgent2D +@onready var follow_update_timer: Timer = $FollowUpdateTimer +@onready var attack_timer: Timer = $AttackTimer +@onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D + +var idle: bool = true +const DAMAGE: int = 1 +var health: int = 8 +var target: Player = null +var in_attack_range: bool = false +var stop_distance: int = 20 +var attack_cooldown_offset: float = 0.0 +var flicker_time: float = 0.2 +var flicker_timer: float = 0.0 + +func _ready() -> void: + navigation_agent_2d.avoidance_priority = randf_range(0.5, 1.0) + attack_cooldown_offset = randf_range(0.0, 0.5) + animated_sprite.speed_scale = randf_range(0.4, 1.2) + +func _process(delta: float) -> void: + if flicker_timer > 0.0: + flicker_timer -= delta + animated_sprite.modulate = Color(1, 0, 0) + if flicker_timer <= 0.0: + animated_sprite.modulate = Color(1, 1, 1) + +func _on_area_body_entered(body: Node2D) -> void: + if body is Player: + idle = false + target = body + follow_update_timer.start() + animated_sprite.play() + +func _on_area_body_exited(body: Node2D) -> void: + if body is Player: + idle = true + target = null + follow_update_timer.stop() + animated_sprite.frame = 0 + animated_sprite.stop() + +func _on_attack_area_body_entered(body: Node2D) -> void: + if body is Player: + in_attack_range = true + attack_timer.start(attack_timer.wait_time + attack_cooldown_offset) + +func _on_attack_area_body_exited(body: Node2D) -> void: + if body is Player: + in_attack_range = false + attack_timer.stop() + +func _physics_process(delta: float) -> void: + if !idle && target: + if !navigation_agent_2d.is_navigation_finished(): + var next_path_pos: Vector2 = navigation_agent_2d.get_next_path_position() + var direction: Vector2 = (next_path_pos - global_position).normalized() + var desired_velocity: Vector2 = direction * speed * delta + navigation_agent_2d.set_velocity(desired_velocity) + else: + velocity = Vector2.ZERO + move_and_slide() + else: + velocity = Vector2.ZERO + move_and_slide() + +func _on_follow_update_timer_timeout() -> void: + if target && !idle: + navigation_agent_2d.target_position = target.global_position + +func _on_navigation_agent2d_velocity_computed(safe_velocity: Vector2) -> void: + velocity = safe_velocity + move_and_slide() + +func _on_attack_timer_timeout() -> void: + if target && in_attack_range: + target.health -= DAMAGE + +func _on_fightable_fought(player: Player) -> void: + health -= player.damage + flicker_timer = flicker_time + if health <= 0: + queue_free() diff --git a/scripts/enemies/skull.gd.uid b/scripts/enemies/skull.gd.uid new file mode 100644 index 0000000..15c0a89 --- /dev/null +++ b/scripts/enemies/skull.gd.uid @@ -0,0 +1 @@ +uid://cuc28u7op02gq diff --git a/scripts/fightable.gd b/scripts/fightable.gd new file mode 100644 index 0000000..4348859 --- /dev/null +++ b/scripts/fightable.gd @@ -0,0 +1,6 @@ +class_name Fightable +extends Area2D + +signal fought(player: Player) + +func fight(player: Player) -> void: fought.emit(player) diff --git a/scripts/fightable.gd.uid b/scripts/fightable.gd.uid new file mode 100644 index 0000000..22d66e9 --- /dev/null +++ b/scripts/fightable.gd.uid @@ -0,0 +1 @@ +uid://cvd86i6imfk24 diff --git a/scripts/interactables/interact_sceneswitch.gd b/scripts/interactables/interact_sceneswitch.gd index 85e70c5..afcdb7e 100644 --- a/scripts/interactables/interact_sceneswitch.gd +++ b/scripts/interactables/interact_sceneswitch.gd @@ -6,4 +6,5 @@ extends Node2D func _ready() -> void: $Interactable.auto_interact = auto_interact func _on_interacted(_player: Player) -> void: - EventManager.transition_scene_file(scene) + if !scene.is_empty(): + EventManager.transition_scene_file(scene) diff --git a/scripts/menus/util/hearts.gd b/scripts/menus/util/hearts.gd new file mode 100644 index 0000000..51fd7fd --- /dev/null +++ b/scripts/menus/util/hearts.gd @@ -0,0 +1,34 @@ +@tool +class_name Hearts +extends Control + +@export_range(0, 10, 1) var health: int = 10: + set(value): + health = clamp(value, 0, max_health) + update_health_textures() + +var max_health: int = 10 +var heart_textures: Array[Node] + +func _ready() -> void: + heart_textures = $HeartContainer.get_children() + for heart_texture in heart_textures: + heart_texture.texture = heart_texture.texture.duplicate() + update_health_textures() + +func update_health_textures() -> void: + @warning_ignore("integer_division") + var full_hearts: int = health / 2 + var half_heart: bool = health % 2 == 1 + + for i in range(heart_textures.size()): + var heart_texture: TextureRect = heart_textures[i] + var atlas: AtlasTexture = heart_texture.texture as AtlasTexture + if i < full_hearts: + atlas.region.position.x = 1 + heart_texture.visible = true + elif i == full_hearts and half_heart: + atlas.region.position.x = 17 + heart_texture.visible = true + else: + heart_texture.visible = false diff --git a/scripts/menus/util/hearts.gd.uid b/scripts/menus/util/hearts.gd.uid new file mode 100644 index 0000000..bfe93ac --- /dev/null +++ b/scripts/menus/util/hearts.gd.uid @@ -0,0 +1 @@ +uid://cfplt163iotph diff --git a/scripts/player.gd b/scripts/player.gd index ed14298..c636301 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -1,18 +1,22 @@ class_name Player extends CharacterBody2D -const SPEED: int = 800 +const SPEED: int = 1000 @onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D +@onready var fight_animation: AnimatedSprite2D = $FightAnimation @onready var cam: Camera2D = $Camera2D @onready var raycast: RayCast2D = $RayCast2D -const RAYCAST_RAGE: int = 32 - +@onready var cursor_hide_timer: Timer = $CursorHideTimer +const RAYCAST_RANGE: int = 22 @export var tilemap: TileMapLayer var tilesize: int = 32 var position_limit_rect: Rect2 -const STILL_POSITIONS: Array[String] = ["sit", "hand_down", "hand_side", "hand_up"] +const STILL_POSITIONS: Array[String] = ["sit_down", "sit_side", "hand_down", "hand_side", "hand_up"] + +var health: int = 10 +var damage: int = 2 func _ready() -> void: EventManager.player = self @@ -35,9 +39,55 @@ func _ready() -> void: ) func _process(_delta: float) -> void: - if EventManager.player_free && !EventManager.animation_player.is_playing() && Input.is_action_just_pressed("interact") && raycast.is_colliding() && raycast.get_collider() is Interactable: - var interactable: Interactable = raycast.get_collider() + if EventManager.player_free && !EventManager.animation_player.is_playing() && Input.is_action_just_pressed("interact"): + interact() + +func interact() -> void: + var interactable: Interactable + if raycast.is_colliding() && raycast.get_collider() is Interactable: + interactable = raycast.get_collider() + else: + interactable = null + var fightable: Fightable + if raycast.is_colliding() && raycast.get_collider() is Fightable: + fightable = raycast.get_collider() + else: + fightable = null + + match animated_sprite.animation: + "down": + animated_sprite.play("hand_down") + if interactable == null: + fight_animation.rotation_degrees = 0 + fight_animation.play() + if !fight_animation.is_playing(): + fight_animation.play() + await animated_sprite.animation_finished + animated_sprite.animation = "down" + "up": + animated_sprite.play("hand_up") + if interactable == null: + fight_animation.rotation_degrees = 180 + fight_animation.play() + if !fight_animation.is_playing(): + fight_animation.play() + await animated_sprite.animation_finished + animated_sprite.animation = "up" + "side": + animated_sprite.play("hand_side") + if interactable == null: + if animated_sprite.flip_h: + fight_animation.rotation_degrees = 90 + else: + fight_animation.rotation_degrees = -90 + if !fight_animation.is_playing(): + fight_animation.play() + await animated_sprite.animation_finished + animated_sprite.animation = "side" + if interactable != null: interactable.interact(self) + elif fightable != null: + fightable.fight(self) func _physics_process(delta: float) -> void: if !STILL_POSITIONS.has(animated_sprite.animation) && EventManager.player_free && !EventManager.animation_player.is_playing(): @@ -49,7 +99,7 @@ func _physics_process(delta: float) -> void: elif abs(input.y) > 0: raycast_input.y = sign(input.y) if raycast_input != Vector2.ZERO: - raycast.target_position = raycast_input * RAYCAST_RAGE + raycast.target_position = raycast_input * RAYCAST_RANGE velocity = input * delta * SPEED * 3 @@ -71,6 +121,10 @@ func _physics_process(delta: float) -> void: func _unhandled_input(event: InputEvent) -> void: if event is InputEventMouse: + cursor_hide_timer.stop() Input.mouse_mode = Input.MOUSE_MODE_VISIBLE elif EventManager.player_free && !EventManager.animation_player.is_playing() && !event.is_action("escape"): + if cursor_hide_timer.is_stopped(): + cursor_hide_timer.start() + await cursor_hide_timer.timeout Input.mouse_mode = Input.MOUSE_MODE_HIDDEN