diff --git a/assets/audio/music/boss_theme.ogg b/assets/audio/music/boss_theme.ogg new file mode 100644 index 0000000..e05497a Binary files /dev/null and b/assets/audio/music/boss_theme.ogg differ diff --git a/assets/audio/music/boss_theme.ogg.import b/assets/audio/music/boss_theme.ogg.import new file mode 100644 index 0000000..e7c38e3 --- /dev/null +++ b/assets/audio/music/boss_theme.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://c7558jjqywld1" +path="res://.godot/imported/boss_theme.ogg-21f82e37c31edcb14c9d4989298d979c.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/music/boss_theme.ogg" +dest_files=["res://.godot/imported/boss_theme.ogg-21f82e37c31edcb14c9d4989298d979c.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/music/halloween_creepy.mp3 b/assets/audio/music/halloween_creepy.mp3 new file mode 100644 index 0000000..a01d428 Binary files /dev/null and b/assets/audio/music/halloween_creepy.mp3 differ diff --git a/assets/audio/music/halloween_creepy.mp3.import b/assets/audio/music/halloween_creepy.mp3.import new file mode 100644 index 0000000..dd8a1ab --- /dev/null +++ b/assets/audio/music/halloween_creepy.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://dca4ojv05k3di" +path="res://.godot/imported/halloween_creepy.mp3-d7670ccf72b9536d5da440dbf5576e5a.mp3str" + +[deps] + +source_file="res://assets/audio/music/halloween_creepy.mp3" +dest_files=["res://.godot/imported/halloween_creepy.mp3-d7670ccf72b9536d5da440dbf5576e5a.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/sounds/explosion.wav b/assets/audio/sounds/explosion.wav new file mode 100644 index 0000000..e4567d4 Binary files /dev/null and b/assets/audio/sounds/explosion.wav differ diff --git a/assets/audio/sounds/explosion.wav.import b/assets/audio/sounds/explosion.wav.import new file mode 100644 index 0000000..73819b2 --- /dev/null +++ b/assets/audio/sounds/explosion.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://d8qefwc57uvj" +path="res://.godot/imported/explosion.wav-86bdf57e061d88558bde2b5f068d2843.sample" + +[deps] + +source_file="res://assets/audio/sounds/explosion.wav" +dest_files=["res://.godot/imported/explosion.wav-86bdf57e061d88558bde2b5f068d2843.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/audio/sounds/hit.wav b/assets/audio/sounds/hit.wav new file mode 100644 index 0000000..b11a012 Binary files /dev/null and b/assets/audio/sounds/hit.wav differ diff --git a/assets/audio/sounds/hit.wav.import b/assets/audio/sounds/hit.wav.import new file mode 100644 index 0000000..d453f10 --- /dev/null +++ b/assets/audio/sounds/hit.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://byy52fo287btu" +path="res://.godot/imported/hit.wav-02af4ab152ad451e5e43395285cc83ec.sample" + +[deps] + +source_file="res://assets/audio/sounds/hit.wav" +dest_files=["res://.godot/imported/hit.wav-02af4ab152ad451e5e43395285cc83ec.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/textures/tilemaps/grass_tilemap.png b/assets/textures/tilemaps/grass_tilemap.png index 319ee1b..6651ce3 100644 Binary files a/assets/textures/tilemaps/grass_tilemap.png and b/assets/textures/tilemaps/grass_tilemap.png differ diff --git a/addons/dialogue_manager/example_balloon/ExampleBalloon.cs b/example_balloon/ExampleBalloon.cs similarity index 100% rename from addons/dialogue_manager/example_balloon/ExampleBalloon.cs rename to example_balloon/ExampleBalloon.cs diff --git a/addons/dialogue_manager/example_balloon/ExampleBalloon.cs.uid b/example_balloon/ExampleBalloon.cs.uid similarity index 100% rename from addons/dialogue_manager/example_balloon/ExampleBalloon.cs.uid rename to example_balloon/ExampleBalloon.cs.uid diff --git a/addons/dialogue_manager/example_balloon/example_balloon.gd b/example_balloon/example_balloon.gd similarity index 100% rename from addons/dialogue_manager/example_balloon/example_balloon.gd rename to example_balloon/example_balloon.gd diff --git a/addons/dialogue_manager/example_balloon/example_balloon.gd.uid b/example_balloon/example_balloon.gd.uid similarity index 100% rename from addons/dialogue_manager/example_balloon/example_balloon.gd.uid rename to example_balloon/example_balloon.gd.uid diff --git a/addons/dialogue_manager/example_balloon/example_balloon.tscn b/example_balloon/example_balloon.tscn similarity index 88% rename from addons/dialogue_manager/example_balloon/example_balloon.tscn rename to example_balloon/example_balloon.tscn index d990dd9..0c31ee0 100644 --- a/addons/dialogue_manager/example_balloon/example_balloon.tscn +++ b/example_balloon/example_balloon.tscn @@ -1,10 +1,10 @@ [gd_scene load_steps=9 format=3 uid="uid://73jm5qjy52vq"] -[ext_resource type="Script" uid="uid://d1wt4ma6055l8" path="res://addons/dialogue_manager/example_balloon/example_balloon.gd" id="1_36de5"] +[ext_resource type="Script" uid="uid://d1wt4ma6055l8" path="res://example_balloon/example_balloon.gd" id="1_36de5"] [ext_resource type="PackedScene" uid="uid://ckvgyvclnwggo" path="res://addons/dialogue_manager/dialogue_label.tscn" id="2_a8ve6"] [ext_resource type="Script" uid="uid://bb52rsfwhkxbn" path="res://addons/dialogue_manager/dialogue_responses_menu.gd" id="3_72ixx"] -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_spyqn"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qkmqt"] bg_color = Color(0, 0, 0, 1) border_width_left = 3 border_width_top = 3 @@ -16,7 +16,7 @@ corner_radius_top_right = 5 corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ri4m3"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nlsx6"] bg_color = Color(0.121569, 0.121569, 0.121569, 1) border_width_left = 3 border_width_top = 3 @@ -28,7 +28,7 @@ corner_radius_top_right = 5 corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_e0njw"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1337t"] bg_color = Color(0, 0, 0, 1) border_width_left = 3 border_width_top = 3 @@ -40,7 +40,7 @@ corner_radius_top_right = 5 corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qkmqt"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_kmygl"] bg_color = Color(0, 0, 0, 1) border_width_left = 3 border_width_top = 3 @@ -53,15 +53,15 @@ corner_radius_bottom_left = 5 [sub_resource type="Theme" id="Theme_qq3yp"] default_font_size = 20 -Button/styles/disabled = SubResource("StyleBoxFlat_spyqn") -Button/styles/focus = SubResource("StyleBoxFlat_ri4m3") -Button/styles/hover = SubResource("StyleBoxFlat_e0njw") -Button/styles/normal = SubResource("StyleBoxFlat_e0njw") +Button/styles/disabled = SubResource("StyleBoxFlat_qkmqt") +Button/styles/focus = SubResource("StyleBoxFlat_nlsx6") +Button/styles/hover = SubResource("StyleBoxFlat_1337t") +Button/styles/normal = SubResource("StyleBoxFlat_1337t") MarginContainer/constants/margin_bottom = 15 MarginContainer/constants/margin_left = 30 MarginContainer/constants/margin_right = 30 MarginContainer/constants/margin_top = 15 -PanelContainer/styles/panel = SubResource("StyleBoxFlat_qkmqt") +PanelContainer/styles/panel = SubResource("StyleBoxFlat_kmygl") [node name="ExampleBalloon" type="CanvasLayer"] layer = 100 diff --git a/addons/dialogue_manager/example_balloon/small_example_balloon.tscn b/example_balloon/small_example_balloon.tscn similarity index 98% rename from addons/dialogue_manager/example_balloon/small_example_balloon.tscn rename to example_balloon/small_example_balloon.tscn index 03b4773..ecd46ee 100644 --- a/addons/dialogue_manager/example_balloon/small_example_balloon.tscn +++ b/example_balloon/small_example_balloon.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=10 format=3 uid="uid://13s5spsk34qu"] -[ext_resource type="Script" uid="uid://d1wt4ma6055l8" path="res://addons/dialogue_manager/example_balloon/example_balloon.gd" id="1_s2gbs"] +[ext_resource type="Script" uid="uid://d1wt4ma6055l8" path="res://example_balloon/example_balloon.gd" id="1_s2gbs"] [ext_resource type="PackedScene" uid="uid://ckvgyvclnwggo" path="res://addons/dialogue_manager/dialogue_label.tscn" id="2_hfvdi"] [ext_resource type="Script" uid="uid://bb52rsfwhkxbn" path="res://addons/dialogue_manager/dialogue_responses_menu.gd" id="3_1j1j0"] diff --git a/export_presets.cfg b/export_presets.cfg new file mode 100644 index 0000000..0e4880e --- /dev/null +++ b/export_presets.cfg @@ -0,0 +1,110 @@ +[preset.0] + +name="Linux" +platform="Linux" +runnable=true +advanced_options=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="../../../stolen souls/hood.x86_64" +patches=PackedStringArray() +encryption_include_filters="" +encryption_exclude_filters="" +seed=0 +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.0.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=true +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false +shader_baker/enabled=true +binary_format/architecture="x86_64" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +export DISPLAY=:0 +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +\"{temp_dir}/{exe_name}\" {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" + +[preset.1] + +name="Windows Desktop" +platform="Windows Desktop" +runnable=true +advanced_options=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="../../../stolen souls/hood.exe" +patches=PackedStringArray() +encryption_include_filters="" +encryption_exclude_filters="" +seed=0 +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.1.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=true +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false +shader_baker/enabled=true +binary_format/architecture="x86_64" +codesign/enable=false +codesign/timestamp=true +codesign/timestamp_server_url="" +codesign/digest_algorithm=1 +codesign/description="" +codesign/custom_options=PackedStringArray() +application/modify_resources=true +application/icon="" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="" +application/product_version="" +application/company_name="" +application/product_name="" +application/file_description="" +application/copyright="" +application/trademarks="" +application/export_angle=0 +application/export_d3d12=0 +application/d3d12_agility_sdk_multiarch=true +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' +$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' +$trigger = New-ScheduledTaskTrigger -Once -At 00:00 +$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries +$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings +Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true +Start-ScheduledTask -TaskName godot_remote_debug +while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" +ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue +Remove-Item -Recurse -Force '{temp_dir}'" diff --git a/project.godot b/project.godot index c26eb16..93c4984 100644 --- a/project.godot +++ b/project.godot @@ -10,7 +10,7 @@ config_version=5 [application] -config/name="hood" +config/name="The House of Stolen Souls" run/main_scene="uid://dgq21ggr3br2g" run/print_header=false config/features=PackedStringArray("4.5", "Forward Plus") @@ -18,7 +18,7 @@ boot_splash/bg_color=Color(0, 0, 0, 1) boot_splash/show_image=false boot_splash/fullsize=false boot_splash/use_filter=false -config/icon="res://icon.svg" +config/icon="uid://bdd7wo7tepih2" [autoload] @@ -126,6 +126,7 @@ common/physics_interpolation=true [rendering] textures/canvas_textures/default_texture_filter=0 +textures/vram_compression/import_etc2_astc=true textures/default_filters/use_nearest_mipmap_filter=true 2d/snap/snap_2d_transforms_to_pixel=true 2d/snap/snap_2d_vertices_to_pixel=true diff --git a/resources/explosion_animation.tres b/resources/explosion_animation.tres index edd1d31..8f1e462 100644 --- a/resources/explosion_animation.tres +++ b/resources/explosion_animation.tres @@ -124,7 +124,7 @@ animations = [{ "duration": 1.0, "texture": SubResource("AtlasTexture_et1j0") }], -"loop": true, +"loop": false, "name": &"default", "speed": 10.0 }] diff --git a/scenes/autoloads/event_manager.tscn b/scenes/autoloads/event_manager.tscn index ecd3517..0a01f76 100644 --- a/scenes/autoloads/event_manager.tscn +++ b/scenes/autoloads/event_manager.tscn @@ -1,6 +1,9 @@ -[gd_scene load_steps=5 format=3 uid="uid://cjbbslcx6vjjy"] +[gd_scene load_steps=9 format=3 uid="uid://cjbbslcx6vjjy"] [ext_resource type="Script" uid="uid://b08q3lqbuoolb" path="res://scripts/autoloads/nodes/event_manager.gd" id="1_xplee"] +[ext_resource type="PackedScene" uid="uid://c5wjwnlubyich" path="res://scenes/menus/util/dialog.tscn" id="2_swnhv"] +[ext_resource type="SpriteFrames" uid="uid://bl36fbm1g0x3" path="res://resources/explosion_animation.tres" id="3_gml0k"] +[ext_resource type="AudioStream" uid="uid://d8qefwc57uvj" path="res://assets/audio/sounds/explosion.wav" id="4_ib5t8"] [sub_resource type="Animation" id="Animation_swnhv"] length = 0.001 @@ -39,6 +42,20 @@ _data = { &"transition": SubResource("Animation_xplee") } +[sub_resource type="GDScript" id="GDScript_gml0k"] +script/source = "extends Control + +func _ready() -> void: + hide() + +func explode(): + show() + $AnimatedSprite2D.play(\"default\") + $AudioStreamPlayer.play() + await $AnimatedSprite2D.animation_finished + hide() +" + [node name="EventManager" type="CanvasLayer"] script = ExtResource("1_xplee") @@ -56,3 +73,23 @@ color = Color(0, 0, 0, 1) libraries = { &"": SubResource("AnimationLibrary_gml0k") } + +[node name="Dialogue" parent="." instance=ExtResource("2_swnhv")] +visible = false + +[node name="Explosion" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = SubResource("GDScript_gml0k") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Explosion"] +position = Vector2(183.00002, 80.99999) +scale = Vector2(0.54950494, 0.5088008) +sprite_frames = ExtResource("3_gml0k") + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="Explosion"] +stream = ExtResource("4_ib5t8") diff --git a/scenes/enemies/skull.tscn b/scenes/enemies/skull.tscn index 2e51cb6..37a4a9d 100644 --- a/scenes/enemies/skull.tscn +++ b/scenes/enemies/skull.tscn @@ -67,10 +67,8 @@ 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="."] @@ -80,7 +78,7 @@ 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) +debug_color = Color(0.49019608, 0.5137255, 0.75686276, 0) [node name="FollowUpdateTimer" type="Timer" parent="."] diff --git a/scenes/levels/hood.tscn b/scenes/levels/hood.tscn index a70b9f4..8c24b88 100644 --- a/scenes/levels/hood.tscn +++ b/scenes/levels/hood.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=22 format=4 uid="uid://clnb1eshis30m"] +[gd_scene load_steps=23 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"] @@ -11,6 +11,7 @@ [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"] +[ext_resource type="AudioStream" uid="uid://dca4ojv05k3di" path="res://assets/audio/music/halloween_creepy.mp3" id="12_mv4yg"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_eywaq"] texture = ExtResource("1_74em3") @@ -204,36 +205,180 @@ texture_region_size = Vector2i(32, 32) 4:4/0/terrains_peering_bit/top_right_corner = 0 4:3/0 = 0 4:3/0/terrain_set = 0 +4:3/0/terrain = 0 +4:3/0/terrains_peering_bit/right_side = 0 +4:3/0/terrains_peering_bit/bottom_right_corner = 0 +4:3/0/terrains_peering_bit/bottom_side = 0 +4:3/0/terrains_peering_bit/bottom_left_corner = 0 +4:3/0/terrains_peering_bit/left_side = 0 +4:3/0/terrains_peering_bit/top_left_corner = 0 +4:3/0/terrains_peering_bit/top_side = 0 +4:3/0/terrains_peering_bit/top_right_corner = 0 4:2/0 = 0 4:2/0/terrain_set = 0 +4:2/0/terrain = 0 +4:2/0/terrains_peering_bit/right_side = 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:2/0/terrains_peering_bit/left_side = 0 +4:2/0/terrains_peering_bit/top_left_corner = 0 +4:2/0/terrains_peering_bit/top_side = 0 +4:2/0/terrains_peering_bit/top_right_corner = 0 4:1/0 = 0 4:1/0/terrain_set = 0 +4:1/0/terrain = 0 +4:1/0/terrains_peering_bit/right_side = 0 +4:1/0/terrains_peering_bit/bottom_right_corner = 0 +4:1/0/terrains_peering_bit/bottom_side = 0 +4:1/0/terrains_peering_bit/bottom_left_corner = 0 +4:1/0/terrains_peering_bit/left_side = 0 +4:1/0/terrains_peering_bit/top_left_corner = 0 +4:1/0/terrains_peering_bit/top_side = 0 +4:1/0/terrains_peering_bit/top_right_corner = 0 4:0/0 = 0 4:0/0/terrain_set = 0 +4:0/0/terrain = 0 +4:0/0/terrains_peering_bit/right_side = 0 +4:0/0/terrains_peering_bit/bottom_right_corner = 0 +4:0/0/terrains_peering_bit/bottom_side = 0 +4:0/0/terrains_peering_bit/bottom_left_corner = 0 +4:0/0/terrains_peering_bit/left_side = 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/terrain = 0 +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/bottom_side = 0 +5:0/0/terrains_peering_bit/bottom_left_corner = 0 +5:0/0/terrains_peering_bit/left_side = 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 6:0/0 = 0 6:0/0/terrain_set = 0 +6:0/0/terrain = 0 +6:0/0/terrains_peering_bit/right_side = 0 +6:0/0/terrains_peering_bit/bottom_right_corner = 0 +6:0/0/terrains_peering_bit/bottom_side = 0 +6:0/0/terrains_peering_bit/bottom_left_corner = 0 +6:0/0/terrains_peering_bit/left_side = 0 +6:0/0/terrains_peering_bit/top_left_corner = 0 +6:0/0/terrains_peering_bit/top_side = 0 +6:0/0/terrains_peering_bit/top_right_corner = 0 7:0/0 = 0 7:0/0/terrain_set = 0 +7:0/0/terrain = 0 +7:0/0/terrains_peering_bit/right_side = 0 +7:0/0/terrains_peering_bit/bottom_right_corner = 0 +7:0/0/terrains_peering_bit/bottom_side = 0 +7:0/0/terrains_peering_bit/bottom_left_corner = 0 +7:0/0/terrains_peering_bit/left_side = 0 +7:0/0/terrains_peering_bit/top_left_corner = 0 +7:0/0/terrains_peering_bit/top_side = 0 +7:0/0/terrains_peering_bit/top_right_corner = 0 7:1/0 = 0 7:1/0/terrain_set = 0 +7:1/0/terrain = 0 +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 +7:1/0/terrains_peering_bit/top_left_corner = 0 +7:1/0/terrains_peering_bit/top_side = 0 +7:1/0/terrains_peering_bit/top_right_corner = 0 6:1/0 = 0 6:1/0/terrain_set = 0 +6:1/0/terrain = 0 +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 +6:1/0/terrains_peering_bit/bottom_left_corner = 0 +6:1/0/terrains_peering_bit/left_side = 0 +6:1/0/terrains_peering_bit/top_left_corner = 0 +6:1/0/terrains_peering_bit/top_side = 0 +6:1/0/terrains_peering_bit/top_right_corner = 0 5:1/0 = 0 5:1/0/terrain_set = 0 +5:1/0/terrain = 0 +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/bottom_side = 0 +5:1/0/terrains_peering_bit/bottom_left_corner = 0 +5:1/0/terrains_peering_bit/left_side = 0 +5:1/0/terrains_peering_bit/top_left_corner = 0 +5:1/0/terrains_peering_bit/top_side = 0 +5:1/0/terrains_peering_bit/top_right_corner = 0 5:2/0 = 0 5:2/0/terrain_set = 0 +5:2/0/terrain = 0 +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/left_side = 0 +5:2/0/terrains_peering_bit/top_left_corner = 0 +5:2/0/terrains_peering_bit/top_side = 0 +5:2/0/terrains_peering_bit/top_right_corner = 0 6:2/0 = 0 6:2/0/terrain_set = 0 +6:2/0/terrain = 0 +6:2/0/terrains_peering_bit/right_side = 0 +6:2/0/terrains_peering_bit/bottom_right_corner = 0 +6:2/0/terrains_peering_bit/bottom_side = 0 +6:2/0/terrains_peering_bit/bottom_left_corner = 0 +6:2/0/terrains_peering_bit/left_side = 0 +6:2/0/terrains_peering_bit/top_left_corner = 0 +6:2/0/terrains_peering_bit/top_side = 0 +6:2/0/terrains_peering_bit/top_right_corner = 0 7:2/0 = 0 7:2/0/terrain_set = 0 +7:2/0/terrain = 0 +7:2/0/terrains_peering_bit/right_side = 0 +7:2/0/terrains_peering_bit/bottom_right_corner = 0 +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 +7:2/0/terrains_peering_bit/top_left_corner = 0 +7:2/0/terrains_peering_bit/top_side = 0 +7:2/0/terrains_peering_bit/top_right_corner = 0 7:3/0 = 0 7:3/0/terrain_set = 0 +7:3/0/terrain = 0 +7:3/0/terrains_peering_bit/right_side = 0 +7:3/0/terrains_peering_bit/bottom_right_corner = 0 +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_left_corner = 0 +7:3/0/terrains_peering_bit/top_side = 0 +7:3/0/terrains_peering_bit/top_right_corner = 0 6:3/0 = 0 6:3/0/terrain_set = 0 +6:3/0/terrain = 0 +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/bottom_left_corner = 0 +6:3/0/terrains_peering_bit/left_side = 0 +6:3/0/terrains_peering_bit/top_left_corner = 0 +6:3/0/terrains_peering_bit/top_side = 0 +6:3/0/terrains_peering_bit/top_right_corner = 0 5:3/0 = 0 5:3/0/terrain_set = 0 +5:3/0/terrain = 0 +5:3/0/terrains_peering_bit/right_side = 0 +5:3/0/terrains_peering_bit/bottom_right_corner = 0 +5:3/0/terrains_peering_bit/bottom_side = 0 +5:3/0/terrains_peering_bit/bottom_left_corner = 0 +5:3/0/terrains_peering_bit/left_side = 0 +5:3/0/terrains_peering_bit/top_left_corner = 0 +5:3/0/terrains_peering_bit/top_side = 0 +5:3/0/terrains_peering_bit/top_right_corner = 0 5:4/0 = 0 5:4/0/terrain_set = 0 5:4/0/terrain = 1 @@ -690,8 +835,25 @@ func _on_body_entered(body: Node2D) -> void: if !night && body is Player: night = true animation_player.play(\"night\") + $\"../AudioStreamPlayer\".play() + " +[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="Animation" id="Animation_qnhkw"] resource_name = "night" length = 3.0 @@ -708,21 +870,6 @@ tracks/0/keys = { "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"), @@ -730,8 +877,8 @@ _data = { } [sub_resource type="SegmentShape2D" id="SegmentShape2D_mv4yg"] -a = Vector2(570, 496) -b = Vector2(570, -80) +a = Vector2(571, 520) +b = Vector2(570, -118) [node name="Hood" type="Node2D"] z_as_relative = false @@ -740,7 +887,7 @@ y_sort_enabled = true [node name="Ground" type="TileMapLayer" parent="."] z_index = -1 material = ExtResource("1_eywaq") -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_map_data = PackedByteArray("AAAQAAkAAQAAAAMAAAAQAAgAAQAAAAMAAAAQAAcAAQAEAAcAAAAQAAYAAQABAAIAAAAQAAUAAQADAAAAAAAQAAQAAQAEAAcAAAAQAAMAAQAEAAcAAAAQAAIAAQAAAAcAAAAQAAEAAQAEAAcAAAAQAAAAAQAEAAcAAAAQAP//AQAAAAMAAAAQAP7/AQAAAAcAAAAPAAkAAQAAAAcAAAAPAAgAAQAAAAMAAAAPAAcAAQAAAAMAAAAPAAYAAQABAAYAAAAPAAUAAQAGAAQAAAAPAAQAAQACAAAAAAAPAAMAAQAAAAAAAAAPAAIAAQAAAAcAAAAPAAEAAQAEAAcAAAAPAAAAAQAAAAcAAAAPAP//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 @@ -771,6 +918,10 @@ libraries = { } [node name="CollisionShape2D" type="CollisionShape2D" parent="NightTrigger"] +position = Vector2(-363, -25) shape = SubResource("SegmentShape2D_mv4yg") +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource("12_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 index 77605d1..4e42f8a 100644 --- a/scenes/levels/lvl_1.tscn +++ b/scenes/levels/lvl_1.tscn @@ -1,8 +1,18 @@ -[gd_scene load_steps=15 format=4 uid="uid://bdpobbbi6apq5"] +[gd_scene load_steps=20 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"] +[ext_resource type="AudioStream" uid="uid://c7558jjqywld1" path="res://assets/audio/music/boss_theme.ogg" id="4_ij6uy"] +[ext_resource type="Texture2D" uid="uid://dsapnb753puib" path="res://assets/textures/spritesheets/dark_house_assets.png" id="5_piajy"] + +[sub_resource type="GDScript" id="GDScript_piajy"] +script/source = "extends Node2D + +func _on_child_exiting_tree(_node: Node) -> void: + if get_tree().get_node_count_in_group(\"Enemy\") == 0: + get_tree().call_deferred(\"change_scene_to_file\", \"res://scenes/menus/win.tscn\") +" [sub_resource type="NavigationPolygon" id="NavigationPolygon_0t8x2"] vertices = PackedVector2Array(16, 16, 2, 16, 2, 10, 16, 10) @@ -131,8 +141,53 @@ terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) navigation_layer_0/layers = 1 sources/1 = SubResource("TileSetAtlasSource_u5kpk") +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_v45sh"] +texture = ExtResource("5_piajy") +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 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:1/0 = 0 +1:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +2:1/0 = 0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +3:1/0 = 0 +4:1/0 = 0 +6:1/0 = 0 +7:1/0 = 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 +7:2/0 = 0 +0:3/0 = 0 +0:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:3/0 = 0 +1:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +2:3/0 = 0 +2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +3:3/0 = 0 +3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:3/0 = 0 +5:3/0 = 0 +6:3/0 = 0 +7:3/0 = 0 + +[sub_resource type="TileSet" id="TileSet_l6efi"] +tile_size = Vector2i(32, 32) +physics_layer_0/collision_layer = 1 +sources/1 = SubResource("TileSetAtlasSource_v45sh") + [node name="Lvl1" type="Node2D"] y_sort_enabled = true +script = SubResource("GDScript_piajy") [node name="TileMapLayer" type="TileMapLayer" parent="."] z_index = -1 @@ -153,3 +208,14 @@ position = Vector2(8, -106) [node name="Skull3" parent="." instance=ExtResource("3_u5kpk")] position = Vector2(140, -102) + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource("4_ij6uy") +autoplay = true + +[node name="TileMapLayer2" type="TileMapLayer" parent="."] +y_sort_enabled = true +tile_map_data = PackedByteArray("AAD7//3/AQAAAAMAAAD7//z/AQAAAAIAAAD8//3/AQABAAMAAAD8//z/AQABAAIAAAABAP3/AQACAAMAAAACAP3/AQADAAMAAAABAPz/AQACAAIAAAACAPz/AQADAAIAAAAEAP7/AQACAAEAAAAEAP3/AQACAAAAAAAEAAEAAQAAAAAAAAAEAAIAAQAAAAEAAAD7/wEAAQABAAAAAAD7/wIAAQABAAEAAAA=") +tile_set = SubResource("TileSet_l6efi") + +[connection signal="child_exiting_tree" from="." to="." method="_on_child_exiting_tree"] diff --git a/scenes/menus/main_menu.tscn b/scenes/menus/main_menu.tscn index 766cc8e..9e1b651 100644 --- a/scenes/menus/main_menu.tscn +++ b/scenes/menus/main_menu.tscn @@ -1,8 +1,15 @@ -[gd_scene load_steps=3 format=3 uid="uid://dgq21ggr3br2g"] +[gd_scene load_steps=5 format=3 uid="uid://dgq21ggr3br2g"] [ext_resource type="Script" uid="uid://bfgqkpn60hhwj" path="res://scripts/menus/main_menu.gd" id="1_xqga4"] +[ext_resource type="Texture2D" uid="uid://dcnjviy00bral" path="res://assets/textures/ui.png" id="2_2o76q"] [ext_resource type="PackedScene" uid="uid://cd657k2lc3gyc" path="res://scenes/menus/profile_creator.tscn" id="2_ovrgc"] +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_6bivr"] +texture = ExtResource("2_2o76q") +texture_margin_left = 30.0 +texture_margin_right = 30.0 +region_rect = Rect2(0, 0, 96, 15) + [node name="MainMenu" type="Control"] layout_mode = 3 anchors_preset = 15 @@ -43,6 +50,7 @@ grow_vertical = 2 [node name="Button" type="Button" parent="TabContainer/Main/VBoxContainer"] layout_mode = 2 +theme_override_styles/normal = SubResource("StyleBoxTexture_6bivr") text = "Start" [node name="ProfileCreator" parent="TabContainer" instance=ExtResource("2_ovrgc")] diff --git a/scenes/menus/pumpkin_carve.tscn b/scenes/menus/pumpkin_carve.tscn index abf2fca..27258aa 100644 --- a/scenes/menus/pumpkin_carve.tscn +++ b/scenes/menus/pumpkin_carve.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=9 format=3 uid="uid://dh8wt018qxj2y"] +[gd_scene load_steps=12 format=3 uid="uid://dh8wt018qxj2y"] [ext_resource type="Script" uid="uid://b5c8ov4lhocb8" path="res://scripts/menus/pumpkin_carve.gd" id="1_vvdcc"] [ext_resource type="Texture2D" uid="uid://cb8q0hsocixew" path="res://assets/textures/pumpkin_inner.png" id="2_fcp78"] @@ -17,6 +17,16 @@ events = [SubResource("InputEventAction_0qx04")] atlas = ExtResource("4_0qx04") region = Rect2(346, 130, 12, 11) +[sub_resource type="InputEventAction" id="InputEventAction_wfn45"] +action = &"ui_text_submit" + +[sub_resource type="Shortcut" id="Shortcut_sr4y0"] +events = [SubResource("InputEventAction_wfn45")] + +[sub_resource type="AtlasTexture" id="AtlasTexture_6yd03"] +atlas = ExtResource("4_0qx04") +region = Rect2(128, 272, 16, 15) + [node name="PumpkinCarve" type="Control"] layout_mode = 3 anchors_preset = 15 @@ -80,21 +90,26 @@ grow_horizontal = 2 grow_vertical = 2 texture = ExtResource("3_0qx04") -[node name="UndoButton" type="Button" parent="."] -layout_mode = 1 -anchors_preset = 3 -anchor_left = 1.0 -anchor_top = 1.0 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_left = -44.0 -offset_top = -44.0 -offset_right = -24.0 -offset_bottom = -25.0 -grow_horizontal = 0 -grow_vertical = 0 +[node name="HBoxContainer" type="HBoxContainer" parent="."] +layout_mode = 0 +offset_left = 15.0 +offset_top = 15.0 +offset_right = 63.0 +offset_bottom = 38.0 + +[node name="UndoButton" type="Button" parent="HBoxContainer"] +layout_mode = 2 +size_flags_vertical = 0 tooltip_text = "Undo" shortcut = SubResource("Shortcut_wfn45") icon = SubResource("AtlasTexture_wfn45") -[connection signal="pressed" from="UndoButton" to="." method="_on_undo_button_pressed"] +[node name="Finish" type="Button" parent="HBoxContainer"] +layout_mode = 2 +size_flags_vertical = 0 +tooltip_text = "Finish" +shortcut = SubResource("Shortcut_sr4y0") +icon = SubResource("AtlasTexture_6yd03") + +[connection signal="pressed" from="HBoxContainer/UndoButton" to="." method="_on_undo_button_pressed"] +[connection signal="pressed" from="HBoxContainer/Finish" to="." method="_on_finish_pressed"] diff --git a/scenes/menus/util/dialog.tscn b/scenes/menus/util/dialog.tscn new file mode 100644 index 0000000..37b21ee --- /dev/null +++ b/scenes/menus/util/dialog.tscn @@ -0,0 +1,201 @@ +[gd_scene load_steps=11 format=3 uid="uid://c5wjwnlubyich"] + +[ext_resource type="PackedScene" uid="uid://ckvgyvclnwggo" path="res://addons/dialogue_manager/dialogue_label.tscn" id="1_ms3k6"] +[ext_resource type="Script" uid="uid://cky2m61jgkbsi" path="res://scripts/menus/util/dialog.gd" id="1_o34ae"] +[ext_resource type="Texture2D" uid="uid://dcnjviy00bral" path="res://assets/textures/ui.png" id="2_8mfvc"] +[ext_resource type="Script" uid="uid://bb52rsfwhkxbn" path="res://addons/dialogue_manager/dialogue_responses_menu.gd" id="2_o34ae"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_spyqn"] +bg_color = Color(0, 0, 0, 1) +border_width_left = 3 +border_width_top = 3 +border_width_right = 3 +border_width_bottom = 3 +border_color = Color(0.329412, 0.329412, 0.329412, 1) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ri4m3"] +bg_color = Color(0.121569, 0.121569, 0.121569, 1) +border_width_left = 3 +border_width_top = 3 +border_width_right = 3 +border_width_bottom = 3 +border_color = Color(1, 1, 1, 1) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_e0njw"] +bg_color = Color(0, 0, 0, 1) +border_width_left = 3 +border_width_top = 3 +border_width_right = 3 +border_width_bottom = 3 +border_color = Color(0.6, 0.6, 0.6, 1) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qkmqt"] +bg_color = Color(0, 0, 0, 1) +border_width_left = 3 +border_width_top = 3 +border_width_right = 3 +border_width_bottom = 3 +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 + +[sub_resource type="Theme" id="Theme_8mfvc"] +default_font_size = 20 +Button/styles/disabled = SubResource("StyleBoxFlat_spyqn") +Button/styles/focus = SubResource("StyleBoxFlat_ri4m3") +Button/styles/hover = SubResource("StyleBoxFlat_e0njw") +Button/styles/normal = SubResource("StyleBoxFlat_e0njw") +MarginContainer/constants/margin_bottom = 15 +MarginContainer/constants/margin_left = 30 +MarginContainer/constants/margin_right = 30 +MarginContainer/constants/margin_top = 15 +PanelContainer/styles/panel = SubResource("StyleBoxFlat_qkmqt") + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_8mfvc"] +texture = ExtResource("2_8mfvc") +region_rect = Rect2(17, 17, 78, 30) + +[node name="Dialogue" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_o34ae") + +[node name="Balloon" type="Control" parent="."] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -2.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = SubResource("Theme_8mfvc") + +[node name="MarginContainer" type="MarginContainer" parent="Balloon"] +layout_mode = 1 +anchors_preset = 12 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -104.0 +grow_horizontal = 2 +grow_vertical = 0 + +[node name="PanelContainer" type="PanelContainer" parent="Balloon/MarginContainer"] +clip_children = 2 +layout_mode = 2 +mouse_filter = 1 +theme_override_styles/panel = SubResource("StyleBoxTexture_8mfvc") + +[node name="MarginContainer" type="MarginContainer" parent="Balloon/MarginContainer/PanelContainer"] +layout_mode = 2 +size_flags_vertical = 8 + +[node name="VBoxContainer" type="VBoxContainer" parent="Balloon/MarginContainer/PanelContainer/MarginContainer"] +layout_mode = 2 + +[node name="CharacterLabel" type="RichTextLabel" parent="Balloon/MarginContainer/PanelContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true +modulate = Color(1, 1, 1, 0.501961) +layout_mode = 2 +mouse_filter = 1 +bbcode_enabled = true +fit_content = true +scroll_active = false + +[node name="DialogueLabel" parent="Balloon/MarginContainer/PanelContainer/MarginContainer/VBoxContainer" instance=ExtResource("1_ms3k6")] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 + +[node name="PanelContainer2" type="PanelContainer" parent="Balloon/MarginContainer"] +clip_children = 2 +layout_mode = 2 +mouse_filter = 1 +theme_override_styles/panel = SubResource("StyleBoxTexture_8mfvc") + +[node name="MarginContainer" type="MarginContainer" parent="Balloon/MarginContainer/PanelContainer2"] +layout_mode = 2 +size_flags_vertical = 8 + +[node name="VBoxContainer" type="VBoxContainer" parent="Balloon/MarginContainer/PanelContainer2/MarginContainer"] +layout_mode = 2 + +[node name="CharacterLabel" type="RichTextLabel" parent="Balloon/MarginContainer/PanelContainer2/MarginContainer/VBoxContainer"] +modulate = Color(1, 1, 1, 0.501961) +layout_mode = 2 +mouse_filter = 1 +bbcode_enabled = true +fit_content = true +scroll_active = false + +[node name="DialogueLabel" parent="Balloon/MarginContainer/PanelContainer2/MarginContainer/VBoxContainer" instance=ExtResource("1_ms3k6")] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="PanelContainer3" type="PanelContainer" parent="Balloon/MarginContainer"] +clip_children = 2 +layout_mode = 2 +mouse_filter = 1 +theme_override_styles/panel = SubResource("StyleBoxTexture_8mfvc") + +[node name="MarginContainer" type="MarginContainer" parent="Balloon/MarginContainer/PanelContainer3"] +layout_mode = 2 +size_flags_vertical = 8 + +[node name="VBoxContainer" type="VBoxContainer" parent="Balloon/MarginContainer/PanelContainer3/MarginContainer"] +layout_mode = 2 + +[node name="CharacterLabel" type="RichTextLabel" parent="Balloon/MarginContainer/PanelContainer3/MarginContainer/VBoxContainer"] +modulate = Color(1, 1, 1, 0.501961) +layout_mode = 2 +mouse_filter = 1 +bbcode_enabled = true +fit_content = true +scroll_active = false + +[node name="DialogueLabel" parent="Balloon/MarginContainer/PanelContainer3/MarginContainer/VBoxContainer" instance=ExtResource("1_ms3k6")] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="ResponsesMenu" type="VBoxContainer" parent="Balloon" node_paths=PackedStringArray("response_template")] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -290.5 +offset_top = -35.0 +offset_right = 290.5 +offset_bottom = 35.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_vertical = 8 +theme_override_constants/separation = 2 +alignment = 1 +script = ExtResource("2_o34ae") +response_template = NodePath("ResponseExample") + +[node name="ResponseExample" type="Button" parent="Balloon/ResponsesMenu"] +layout_mode = 2 +text = "Response example" diff --git a/scenes/menus/win.tscn b/scenes/menus/win.tscn new file mode 100644 index 0000000..e47ba40 --- /dev/null +++ b/scenes/menus/win.tscn @@ -0,0 +1,64 @@ +[gd_scene load_steps=2 format=3 uid="uid://dgkxrqfvnffwn"] + +[sub_resource type="GDScript" id="GDScript_16ftr"] +script/source = "extends Control + + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + EventManager.explosion.explode() + +func _on_button_pressed() -> void: + get_tree().quit() +" + +[node name="Win" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = SubResource("GDScript_16ftr") + +[node name="ColorRect" type="ColorRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 1) + +[node name="RichTextLabel" type="RichTextLabel" parent="."] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -53.5 +offset_top = -21.0 +offset_right = 53.5 +offset_bottom = 21.0 +grow_horizontal = 2 +grow_vertical = 2 +bbcode_enabled = true +text = "[rainbow][center][wave]YAY YOU WON MY UNFINISHED GAME" + +[node name="Button" type="Button" parent="."] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -19.0 +offset_top = 40.5 +offset_right = 19.0 +offset_bottom = 61.5 +grow_horizontal = 2 +grow_vertical = 2 +text = "Close" + +[connection signal="pressed" from="Button" to="." method="_on_button_pressed"] diff --git a/scenes/player.tscn b/scenes/player.tscn index 7ed3cc3..dcdcd0e 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=31 format=3 uid="uid://dfbomt0l6b1o4"] +[gd_scene load_steps=32 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"] +[ext_resource type="AudioStream" uid="uid://byy52fo287btu" path="res://assets/audio/sounds/hit.wav" id="5_qlg0r"] [sub_resource type="AtlasTexture" id="AtlasTexture_dqkch"] atlas = ExtResource("2_qhqgy") @@ -268,3 +269,6 @@ frame = 5 frame_progress = 1.0 offset = Vector2(0, 24) flip_v = true + +[node name="Hit" type="AudioStreamPlayer" parent="."] +stream = ExtResource("5_qlg0r") diff --git a/scripts/autoloads/nodes/event_manager.gd b/scripts/autoloads/nodes/event_manager.gd index ee082c8..8f078c4 100644 --- a/scripts/autoloads/nodes/event_manager.gd +++ b/scripts/autoloads/nodes/event_manager.gd @@ -4,6 +4,7 @@ var player_free: bool = true var player: Player @onready var animation_player: AnimationPlayer = $AnimationPlayer +@onready var explosion: Control = $Explosion enum Events { NONE, PUMPKIN_CARVE, OUTSIDE_NORMAL } var current_event: Events = Events.NONE @@ -23,10 +24,13 @@ func run_event(event: Events, player_postion: Vector2 = Vector2.ZERO): player_free = false transition_scene_file("uid://ccfdsdgaon63m") # scenes/levels/home.tscn await get_tree().scene_changed + explosion.explode() await get_tree().create_timer(2).timeout var pumpkin_carve: Control = preload("res://scenes/menus/pumpkin_carve.tscn").instantiate() add_child(pumpkin_carve) - + Events.NONE: + player_free = true + func transition_scene_file(scene: String) -> void: if !animation_player.is_playing(): transition_start() diff --git a/scripts/enemies/skull.gd b/scripts/enemies/skull.gd index ba39472..481c697 100644 --- a/scripts/enemies/skull.gd +++ b/scripts/enemies/skull.gd @@ -20,6 +20,9 @@ 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) + + follow_update_timer.one_shot = false + follow_update_timer.autostart = false func _process(delta: float) -> void: if flicker_timer > 0.0: @@ -28,10 +31,24 @@ func _process(delta: float) -> void: if flicker_timer <= 0.0: animated_sprite.modulate = Color(1, 1, 1) +func _physics_process(delta: float) -> void: + if !idle and target: + if navigation_agent_2d.is_navigation_finished(): + velocity = Vector2.ZERO + else: + var next_pos: Vector2 = navigation_agent_2d.get_next_path_position() + var direction: Vector2 = (next_pos - global_position).normalized() + velocity = direction * speed * delta + else: + velocity = Vector2.ZERO + + move_and_slide() + func _on_area_body_entered(body: Node2D) -> void: if body is Player: idle = false target = body + navigation_agent_2d.target_position = target.global_position follow_update_timer.start() animated_sprite.play() @@ -53,30 +70,12 @@ func _on_attack_area_body_exited(body: Node2D) -> void: 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: + if target and !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: + if target and in_attack_range: target.health -= DAMAGE func _on_fightable_fought(player: Player) -> void: diff --git a/scripts/menus/pumpkin_carve.gd b/scripts/menus/pumpkin_carve.gd index c3eccb0..f36bb52 100644 --- a/scripts/menus/pumpkin_carve.gd +++ b/scripts/menus/pumpkin_carve.gd @@ -89,3 +89,7 @@ func save_image() -> void: func _on_undo_button_pressed() -> void: undo() + +func _on_finish_pressed() -> void: + EventManager.run_event(EventManager.Events.NONE) + queue_free() diff --git a/scripts/menus/util/dialog.gd b/scripts/menus/util/dialog.gd new file mode 100644 index 0000000..7ca7da6 --- /dev/null +++ b/scripts/menus/util/dialog.gd @@ -0,0 +1,176 @@ +extends Control +## A basic dialogue balloon for use with Dialogue Manager. + +## The action to use for advancing the dialogue +@export var next_action: StringName = &"ui_accept" + +## The action to use to skip typing the dialogue +@export var skip_action: StringName = &"ui_cancel" + +## The dialogue resource +var resource: DialogueResource + +## Temporary game states +var temporary_game_states: Array = [] + +## See if we are waiting for the player +var is_waiting_for_input: bool = false + +## See if we are running a long mutation and should hide the balloon +var will_hide_balloon: bool = false + +## A dictionary to store any ephemeral variables +var locals: Dictionary = {} + +var _locale: String = TranslationServer.get_locale() + +## The current line +var dialogue_line: DialogueLine: + set(value): + if value: + dialogue_line = value + apply_dialogue_line() + else: + await get_tree().create_timer(.2).timeout # prevent dialogue trigger loop + balloon.hide() + get: + return dialogue_line + +## A cooldown timer for delaying the balloon hide when encountering a mutation. +var mutation_cooldown: Timer = Timer.new() + +## The base balloon anchor +@onready var balloon: Control = %Balloon + +## The label showing the name of the currently speaking character +@onready var character_label: RichTextLabel = %CharacterLabel + +## The label showing the currently spoken dialogue +@onready var dialogue_label: DialogueLabel = %DialogueLabel + +## The menu of responses +@onready var responses_menu: DialogueResponsesMenu = %ResponsesMenu + + +func _ready() -> void: + balloon.hide() + Engine.get_singleton("DialogueManager").mutated.connect(_on_mutated) + + # If the responses menu doesn't have a next action set, use this one + if responses_menu.next_action.is_empty(): + responses_menu.next_action = next_action + + mutation_cooldown.timeout.connect(_on_mutation_cooldown_timeout) + add_child(mutation_cooldown) + + +func _unhandled_input(_event: InputEvent) -> void: + # Only the balloon is allowed to handle input while it's showing + get_viewport().set_input_as_handled() + + +func _notification(what: int) -> void: + ## Detect a change of locale and update the current dialogue line to show the new language + if what == NOTIFICATION_TRANSLATION_CHANGED and _locale != TranslationServer.get_locale() and is_instance_valid(dialogue_label): + _locale = TranslationServer.get_locale() + var visible_ratio = dialogue_label.visible_ratio + self.dialogue_line = await resource.get_next_dialogue_line(dialogue_line.id) + if visible_ratio < 1: + dialogue_label.skip_typing() + + +## Start some dialogue +func start(dialogue_resource: DialogueResource, title: String, extra_game_states: Array = []) -> void: + temporary_game_states = [self] + extra_game_states + is_waiting_for_input = false + resource = dialogue_resource + self.dialogue_line = await resource.get_next_dialogue_line(title, temporary_game_states) + + +## Apply any changes to the balloon given a new [DialogueLine]. +func apply_dialogue_line() -> void: + mutation_cooldown.stop() + + is_waiting_for_input = false + balloon.focus_mode = Control.FOCUS_ALL + balloon.grab_focus() + + character_label.visible = not dialogue_line.character.is_empty() + character_label.text = tr(dialogue_line.character, "dialogue") + + dialogue_label.hide() + dialogue_label.dialogue_line = dialogue_line + + responses_menu.hide() + responses_menu.responses = dialogue_line.responses + + # Show our balloon + balloon.show() + will_hide_balloon = false + + dialogue_label.show() + if not dialogue_line.text.is_empty(): + dialogue_label.type_out() + await dialogue_label.finished_typing + + # Wait for input + if dialogue_line.responses.size() > 0: + balloon.focus_mode = Control.FOCUS_NONE + responses_menu.show() + elif dialogue_line.time != "": + var time = dialogue_line.text.length() * 0.02 if dialogue_line.time == "auto" else dialogue_line.time.to_float() + await get_tree().create_timer(time).timeout + next(dialogue_line.next_id) + else: + is_waiting_for_input = true + balloon.focus_mode = Control.FOCUS_ALL + balloon.grab_focus() + + +## Go to the next line +func next(next_id: String) -> void: + self.dialogue_line = await resource.get_next_dialogue_line(next_id, temporary_game_states) + + +#region Signals + + +func _on_mutation_cooldown_timeout() -> void: + if will_hide_balloon: + will_hide_balloon = false + balloon.hide() + + +func _on_mutated(_mutation: Dictionary) -> void: + is_waiting_for_input = false + will_hide_balloon = true + mutation_cooldown.start(0.1) + + +func _on_balloon_gui_input(event: InputEvent) -> void: + # See if we need to skip typing of the dialogue + if dialogue_label.is_typing: + var mouse_was_clicked: bool = event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.is_pressed() + var skip_button_was_pressed: bool = event.is_action_pressed(skip_action) + if mouse_was_clicked or skip_button_was_pressed: + get_viewport().set_input_as_handled() + dialogue_label.skip_typing() + return + + if not is_waiting_for_input: return + if dialogue_line.responses.size() > 0: return + + # When there are no response options the balloon itself is the clickable thing + get_viewport().set_input_as_handled() + + if event is InputEventMouseButton and event.is_pressed() and event.button_index == MOUSE_BUTTON_LEFT: + next(dialogue_line.next_id) + elif event.is_action_pressed(next_action) and get_viewport().gui_get_focus_owner() == balloon: + next(dialogue_line.next_id) + + +func _on_responses_menu_response_selected(response: DialogueResponse) -> void: + next(response.next_id) + + +#endregion diff --git a/scripts/menus/util/dialog.gd.uid b/scripts/menus/util/dialog.gd.uid new file mode 100644 index 0000000..7ccf6f3 --- /dev/null +++ b/scripts/menus/util/dialog.gd.uid @@ -0,0 +1 @@ +uid://cky2m61jgkbsi diff --git a/scripts/player.gd b/scripts/player.gd index c636301..64a050b 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -60,6 +60,7 @@ func interact() -> void: if interactable == null: fight_animation.rotation_degrees = 0 fight_animation.play() + $Hit.play() if !fight_animation.is_playing(): fight_animation.play() await animated_sprite.animation_finished @@ -69,6 +70,7 @@ func interact() -> void: if interactable == null: fight_animation.rotation_degrees = 180 fight_animation.play() + $Hit.play() if !fight_animation.is_playing(): fight_animation.play() await animated_sprite.animation_finished @@ -76,6 +78,7 @@ func interact() -> void: "side": animated_sprite.play("hand_side") if interactable == null: + $Hit.play() if animated_sprite.flip_h: fight_animation.rotation_degrees = 90 else: