From a38f65c261e9d7b23d046cb76b5aeedc05c4b54d Mon Sep 17 00:00:00 2001 From: Daniel Weipert Date: Fri, 20 Sep 2024 22:12:44 +0200 Subject: next commit --- Assets/Enemies/boss-sprites.png | Bin 0 -> 23401 bytes Assets/Enemies/boss-sprites.png.import | 34 + Assets/Enemies/green-greens-boss.png | Bin 0 -> 2933 bytes Assets/Enemies/green-greens-boss.png.import | 34 + Assets/Enemies/whispy-woods-eye-01.png | Bin 0 -> 197 bytes Assets/Enemies/whispy-woods-eye-01.png.import | 34 + Assets/Enemies/whispy-woods-eye-01.png~ | Bin 0 -> 188 bytes Assets/Enemies/whispy-woods-eye-02.png | Bin 0 -> 118 bytes Assets/Enemies/whispy-woods-eye-02.png.import | 34 + Assets/Enemies/whispy-woods-mouth-01.png | Bin 0 -> 188 bytes Assets/Enemies/whispy-woods-mouth-01.png.import | 34 + Assets/Enemies/whispy-woods-mouth-02.png | Bin 0 -> 192 bytes Assets/Enemies/whispy-woods-mouth-02.png.import | 34 + Assets/Enemies/whispy-woods-mouth-02.png~ | Bin 0 -> 191 bytes Assets/Enemies/whispy-woods-tear.png | Bin 0 -> 200 bytes Assets/Enemies/whispy-woods-tear.png.import | 34 + Assets/HUD/boss-hp-empty.png | Bin 0 -> 148 bytes Assets/HUD/boss-hp-empty.png.import | 34 + Assets/HUD/boss-hp-empty.png~ | Bin 0 -> 143 bytes Assets/HUD/boss.png | Bin 0 -> 143 bytes Assets/HUD/boss.png.import | 34 + Assets/HUD/hp-empty.png | Bin 0 -> 143 bytes Assets/HUD/hp-empty.png.import | 34 + Assets/HUD/hp-empty.png~ | Bin 0 -> 140 bytes Assets/HUD/theme.tres | 8 + Assets/Kirby/air-shoot.png | Bin 270 -> 0 bytes Assets/Kirby/air-shoot.png.import | 34 - Assets/Kirby/air-shot.png | Bin 0 -> 270 bytes Assets/Kirby/air-shot.png.import | 34 + Assets/Kirby/dance-sheet.png | Bin 0 -> 948 bytes Assets/Kirby/dance-sheet.png.import | 34 + Assets/Kirby/fly-01.png | Bin 398 -> 408 bytes Assets/Kirby/fly-01.png~ | Bin 0 -> 400 bytes Assets/Kirby/fly-02.png~ | Bin 0 -> 388 bytes Assets/Kirby/fly-exhale-01.png | Bin 0 -> 387 bytes Assets/Kirby/fly-exhale-01.png.import | 34 + Assets/Kirby/fly-exhale-02.png | Bin 0 -> 330 bytes Assets/Kirby/fly-exhale-02.png.import | 34 + Assets/Kirby/fly-transition-01.png | Bin 0 -> 317 bytes Assets/Kirby/fly-transition-01.png.import | 34 + Assets/Kirby/fly-transition-02.png | Bin 0 -> 393 bytes Assets/Kirby/fly-transition-02.png.import | 34 + Assets/Kirby/inflated-exhale-01.png | Bin 0 -> 409 bytes Assets/Kirby/inflated-exhale-01.png.import | 34 + Assets/Kirby/inflated-exhale-02.png | Bin 0 -> 339 bytes Assets/Kirby/inflated-exhale-02.png.import | 34 + Assets/Kirby/inflated-exhale-02.png~ | Bin 0 -> 339 bytes Assets/Kirby/inflated-transition-01.png | Bin 0 -> 409 bytes Assets/Kirby/inflated-transition-01.png.import | 34 + Assets/Kirby/inflated-transition-02.png | Bin 0 -> 408 bytes Assets/Kirby/inflated-transition-02.png.import | 34 + Assets/Kirby/knockout-1.png | Bin 0 -> 298 bytes Assets/Kirby/knockout-1.png.import | 34 + Assets/Kirby/knockout-2.png | Bin 0 -> 302 bytes Assets/Kirby/knockout-2.png.import | 34 + Assets/Kirby/knockout-3.png | Bin 0 -> 293 bytes Assets/Kirby/knockout-3.png.import | 34 + Assets/Kirby/knockout-4.png | Bin 0 -> 297 bytes Assets/Kirby/knockout-4.png.import | 34 + Assets/Kirby/ko-1.png | Bin 298 -> 0 bytes Assets/Kirby/ko-1.png.import | 34 - Assets/Kirby/ko-2.png | Bin 302 -> 0 bytes Assets/Kirby/ko-2.png.import | 34 - Assets/Kirby/ko-3.png | Bin 293 -> 0 bytes Assets/Kirby/ko-3.png.import | 34 - Assets/Kirby/ko-4.png | Bin 297 -> 0 bytes Assets/Kirby/ko-4.png.import | 34 - Assets/Kirby/wall-bounce.png | Bin 0 -> 238 bytes Assets/Kirby/wall-bounce.png.import | 34 + Assets/Map/TileMapLayer.tscn | 31 +- Assets/Map/tile_map_layer.gd | 2 +- Assets/Map/tileset.png | Bin 38805 -> 40520 bytes Assets/Map/tileset.png~ | Bin 38849 -> 40529 bytes Assets/Music/Boss.wav | Bin 0 -> 14825070 bytes Assets/Music/Boss.wav.import | 24 + Assets/Music/Win.wav | Bin 0 -> 1234878 bytes Assets/Music/Win.wav.import | 24 + Assets/Music/knockout.wav | Bin 0 -> 495694 bytes Assets/Music/knockout.wav.import | 24 + Assets/Music/ko.wav | Bin 495694 -> 0 bytes Assets/Music/ko.wav.import | 24 - Assets/Sounds/boss-hp-fill.wav | Bin 0 -> 32558 bytes Assets/Sounds/boss-hp-fill.wav.import | 24 + BossHP.tscn | 29 + BossHPBar.tscn | 26 + Enemies/Enemy.tscn | 8 + Enemies/enemy.gd | 50 +- FloatIslands.tscn | 33 +- FloatIslandsIntro.tscn | 21 +- Game.gd | 11 + GreenGreens.tscn | 26 +- GreenGreensBoss.tscn | 88 ++ GreenGreensIntro.tscn | 22 +- HP.tscn | 20 +- HUD.tscn | 55 +- KOPlane.tscn | 19 - KnockoutPlane.tscn | 19 + Player.tscn | 1074 +++++++++++++++++++++-- SoundManager.gd | 2 + SoundManager.tscn | 20 +- boss_hp.gd | 10 + boss_hp_bar.gd | 26 + effect_star.tscn | 8 + float_islands.gd | 5 +- green_greens.gd | 6 +- green_greens_boss.gd | 37 + hud.gd | 10 + icon_monochrome_light.svg | 1 + icon_monochrome_light.svg.import | 37 + knockout_plane.gd | 5 + ko_plane.gd | 5 - navigation_shape.tres | 4 + player.gd | 464 ++++++++-- project.godot | 7 + whispy_woods.gd | 58 ++ whispy_woods_sprite_frames.tres | 41 + 116 files changed, 3022 insertions(+), 406 deletions(-) create mode 100644 Assets/Enemies/boss-sprites.png create mode 100644 Assets/Enemies/boss-sprites.png.import create mode 100644 Assets/Enemies/green-greens-boss.png create mode 100644 Assets/Enemies/green-greens-boss.png.import create mode 100644 Assets/Enemies/whispy-woods-eye-01.png create mode 100644 Assets/Enemies/whispy-woods-eye-01.png.import create mode 100644 Assets/Enemies/whispy-woods-eye-01.png~ create mode 100644 Assets/Enemies/whispy-woods-eye-02.png create mode 100644 Assets/Enemies/whispy-woods-eye-02.png.import create mode 100644 Assets/Enemies/whispy-woods-mouth-01.png create mode 100644 Assets/Enemies/whispy-woods-mouth-01.png.import create mode 100644 Assets/Enemies/whispy-woods-mouth-02.png create mode 100644 Assets/Enemies/whispy-woods-mouth-02.png.import create mode 100644 Assets/Enemies/whispy-woods-mouth-02.png~ create mode 100644 Assets/Enemies/whispy-woods-tear.png create mode 100644 Assets/Enemies/whispy-woods-tear.png.import create mode 100644 Assets/HUD/boss-hp-empty.png create mode 100644 Assets/HUD/boss-hp-empty.png.import create mode 100644 Assets/HUD/boss-hp-empty.png~ create mode 100644 Assets/HUD/boss.png create mode 100644 Assets/HUD/boss.png.import create mode 100644 Assets/HUD/hp-empty.png create mode 100644 Assets/HUD/hp-empty.png.import create mode 100644 Assets/HUD/hp-empty.png~ create mode 100644 Assets/HUD/theme.tres delete mode 100644 Assets/Kirby/air-shoot.png delete mode 100644 Assets/Kirby/air-shoot.png.import create mode 100644 Assets/Kirby/air-shot.png create mode 100644 Assets/Kirby/air-shot.png.import create mode 100644 Assets/Kirby/dance-sheet.png create mode 100644 Assets/Kirby/dance-sheet.png.import create mode 100644 Assets/Kirby/fly-01.png~ create mode 100644 Assets/Kirby/fly-02.png~ create mode 100644 Assets/Kirby/fly-exhale-01.png create mode 100644 Assets/Kirby/fly-exhale-01.png.import create mode 100644 Assets/Kirby/fly-exhale-02.png create mode 100644 Assets/Kirby/fly-exhale-02.png.import create mode 100644 Assets/Kirby/fly-transition-01.png create mode 100644 Assets/Kirby/fly-transition-01.png.import create mode 100644 Assets/Kirby/fly-transition-02.png create mode 100644 Assets/Kirby/fly-transition-02.png.import create mode 100644 Assets/Kirby/inflated-exhale-01.png create mode 100644 Assets/Kirby/inflated-exhale-01.png.import create mode 100644 Assets/Kirby/inflated-exhale-02.png create mode 100644 Assets/Kirby/inflated-exhale-02.png.import create mode 100644 Assets/Kirby/inflated-exhale-02.png~ create mode 100644 Assets/Kirby/inflated-transition-01.png create mode 100644 Assets/Kirby/inflated-transition-01.png.import create mode 100644 Assets/Kirby/inflated-transition-02.png create mode 100644 Assets/Kirby/inflated-transition-02.png.import create mode 100644 Assets/Kirby/knockout-1.png create mode 100644 Assets/Kirby/knockout-1.png.import create mode 100644 Assets/Kirby/knockout-2.png create mode 100644 Assets/Kirby/knockout-2.png.import create mode 100644 Assets/Kirby/knockout-3.png create mode 100644 Assets/Kirby/knockout-3.png.import create mode 100644 Assets/Kirby/knockout-4.png create mode 100644 Assets/Kirby/knockout-4.png.import delete mode 100644 Assets/Kirby/ko-1.png delete mode 100644 Assets/Kirby/ko-1.png.import delete mode 100644 Assets/Kirby/ko-2.png delete mode 100644 Assets/Kirby/ko-2.png.import delete mode 100644 Assets/Kirby/ko-3.png delete mode 100644 Assets/Kirby/ko-3.png.import delete mode 100644 Assets/Kirby/ko-4.png delete mode 100644 Assets/Kirby/ko-4.png.import create mode 100644 Assets/Kirby/wall-bounce.png create mode 100644 Assets/Kirby/wall-bounce.png.import create mode 100644 Assets/Music/Boss.wav create mode 100644 Assets/Music/Boss.wav.import create mode 100644 Assets/Music/Win.wav create mode 100644 Assets/Music/Win.wav.import create mode 100644 Assets/Music/knockout.wav create mode 100644 Assets/Music/knockout.wav.import delete mode 100644 Assets/Music/ko.wav delete mode 100644 Assets/Music/ko.wav.import create mode 100644 Assets/Sounds/boss-hp-fill.wav create mode 100644 Assets/Sounds/boss-hp-fill.wav.import create mode 100644 BossHP.tscn create mode 100644 BossHPBar.tscn create mode 100644 GreenGreensBoss.tscn delete mode 100644 KOPlane.tscn create mode 100644 KnockoutPlane.tscn create mode 100644 boss_hp.gd create mode 100644 boss_hp_bar.gd create mode 100644 effect_star.tscn create mode 100644 green_greens_boss.gd create mode 100644 icon_monochrome_light.svg create mode 100644 icon_monochrome_light.svg.import create mode 100644 knockout_plane.gd delete mode 100644 ko_plane.gd create mode 100644 navigation_shape.tres create mode 100644 whispy_woods.gd create mode 100644 whispy_woods_sprite_frames.tres diff --git a/Assets/Enemies/boss-sprites.png b/Assets/Enemies/boss-sprites.png new file mode 100644 index 0000000..c064d5a Binary files /dev/null and b/Assets/Enemies/boss-sprites.png differ diff --git a/Assets/Enemies/boss-sprites.png.import b/Assets/Enemies/boss-sprites.png.import new file mode 100644 index 0000000..a68b5bf --- /dev/null +++ b/Assets/Enemies/boss-sprites.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bu0hhuow58mry" +path="res://.godot/imported/boss-sprites.png-91f8720c14cab410aa1393e5cf9bcc5a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Enemies/boss-sprites.png" +dest_files=["res://.godot/imported/boss-sprites.png-91f8720c14cab410aa1393e5cf9bcc5a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Enemies/green-greens-boss.png b/Assets/Enemies/green-greens-boss.png new file mode 100644 index 0000000..dd656b1 Binary files /dev/null and b/Assets/Enemies/green-greens-boss.png differ diff --git a/Assets/Enemies/green-greens-boss.png.import b/Assets/Enemies/green-greens-boss.png.import new file mode 100644 index 0000000..c40330b --- /dev/null +++ b/Assets/Enemies/green-greens-boss.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://xdehc2ineqjf" +path="res://.godot/imported/green-greens-boss.png-b861223020f2d523e178617b807476da.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Enemies/green-greens-boss.png" +dest_files=["res://.godot/imported/green-greens-boss.png-b861223020f2d523e178617b807476da.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Enemies/whispy-woods-eye-01.png b/Assets/Enemies/whispy-woods-eye-01.png new file mode 100644 index 0000000..7b6addd Binary files /dev/null and b/Assets/Enemies/whispy-woods-eye-01.png differ diff --git a/Assets/Enemies/whispy-woods-eye-01.png.import b/Assets/Enemies/whispy-woods-eye-01.png.import new file mode 100644 index 0000000..c94bb47 --- /dev/null +++ b/Assets/Enemies/whispy-woods-eye-01.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bpr1plfnw77fh" +path="res://.godot/imported/whispy-woods-eye-01.png-42c1c7b4622d93a9af1586370062b18d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Enemies/whispy-woods-eye-01.png" +dest_files=["res://.godot/imported/whispy-woods-eye-01.png-42c1c7b4622d93a9af1586370062b18d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Enemies/whispy-woods-eye-01.png~ b/Assets/Enemies/whispy-woods-eye-01.png~ new file mode 100644 index 0000000..54f78bc Binary files /dev/null and b/Assets/Enemies/whispy-woods-eye-01.png~ differ diff --git a/Assets/Enemies/whispy-woods-eye-02.png b/Assets/Enemies/whispy-woods-eye-02.png new file mode 100644 index 0000000..72327fb Binary files /dev/null and b/Assets/Enemies/whispy-woods-eye-02.png differ diff --git a/Assets/Enemies/whispy-woods-eye-02.png.import b/Assets/Enemies/whispy-woods-eye-02.png.import new file mode 100644 index 0000000..a374882 --- /dev/null +++ b/Assets/Enemies/whispy-woods-eye-02.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://duscdq6p858dt" +path="res://.godot/imported/whispy-woods-eye-02.png-4c5b97c7f9d2dcb91e987e146ce25e44.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Enemies/whispy-woods-eye-02.png" +dest_files=["res://.godot/imported/whispy-woods-eye-02.png-4c5b97c7f9d2dcb91e987e146ce25e44.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Enemies/whispy-woods-mouth-01.png b/Assets/Enemies/whispy-woods-mouth-01.png new file mode 100644 index 0000000..eb44269 Binary files /dev/null and b/Assets/Enemies/whispy-woods-mouth-01.png differ diff --git a/Assets/Enemies/whispy-woods-mouth-01.png.import b/Assets/Enemies/whispy-woods-mouth-01.png.import new file mode 100644 index 0000000..1ea0185 --- /dev/null +++ b/Assets/Enemies/whispy-woods-mouth-01.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c547eyj1dga2p" +path="res://.godot/imported/whispy-woods-mouth-01.png-0318194c3a3707a6f19976b909d76f16.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Enemies/whispy-woods-mouth-01.png" +dest_files=["res://.godot/imported/whispy-woods-mouth-01.png-0318194c3a3707a6f19976b909d76f16.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Enemies/whispy-woods-mouth-02.png b/Assets/Enemies/whispy-woods-mouth-02.png new file mode 100644 index 0000000..ff37653 Binary files /dev/null and b/Assets/Enemies/whispy-woods-mouth-02.png differ diff --git a/Assets/Enemies/whispy-woods-mouth-02.png.import b/Assets/Enemies/whispy-woods-mouth-02.png.import new file mode 100644 index 0000000..586fe9b --- /dev/null +++ b/Assets/Enemies/whispy-woods-mouth-02.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://qxh5qqh8oso" +path="res://.godot/imported/whispy-woods-mouth-02.png-3ab315a0e9441ead1438bfc3220b7269.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Enemies/whispy-woods-mouth-02.png" +dest_files=["res://.godot/imported/whispy-woods-mouth-02.png-3ab315a0e9441ead1438bfc3220b7269.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Enemies/whispy-woods-mouth-02.png~ b/Assets/Enemies/whispy-woods-mouth-02.png~ new file mode 100644 index 0000000..88285d8 Binary files /dev/null and b/Assets/Enemies/whispy-woods-mouth-02.png~ differ diff --git a/Assets/Enemies/whispy-woods-tear.png b/Assets/Enemies/whispy-woods-tear.png new file mode 100644 index 0000000..4c34f78 Binary files /dev/null and b/Assets/Enemies/whispy-woods-tear.png differ diff --git a/Assets/Enemies/whispy-woods-tear.png.import b/Assets/Enemies/whispy-woods-tear.png.import new file mode 100644 index 0000000..3a7bba7 --- /dev/null +++ b/Assets/Enemies/whispy-woods-tear.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cr8mi3iehl3q2" +path="res://.godot/imported/whispy-woods-tear.png-06e392265974c90c220423e1c1d683a5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Enemies/whispy-woods-tear.png" +dest_files=["res://.godot/imported/whispy-woods-tear.png-06e392265974c90c220423e1c1d683a5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/HUD/boss-hp-empty.png b/Assets/HUD/boss-hp-empty.png new file mode 100644 index 0000000..8021502 Binary files /dev/null and b/Assets/HUD/boss-hp-empty.png differ diff --git a/Assets/HUD/boss-hp-empty.png.import b/Assets/HUD/boss-hp-empty.png.import new file mode 100644 index 0000000..4ad0fb0 --- /dev/null +++ b/Assets/HUD/boss-hp-empty.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b2xjcvm2xycud" +path="res://.godot/imported/boss-hp-empty.png-9360cb3cedb169f761b095ffd3707a35.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/HUD/boss-hp-empty.png" +dest_files=["res://.godot/imported/boss-hp-empty.png-9360cb3cedb169f761b095ffd3707a35.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/HUD/boss-hp-empty.png~ b/Assets/HUD/boss-hp-empty.png~ new file mode 100644 index 0000000..f587ff9 Binary files /dev/null and b/Assets/HUD/boss-hp-empty.png~ differ diff --git a/Assets/HUD/boss.png b/Assets/HUD/boss.png new file mode 100644 index 0000000..6d6fc88 Binary files /dev/null and b/Assets/HUD/boss.png differ diff --git a/Assets/HUD/boss.png.import b/Assets/HUD/boss.png.import new file mode 100644 index 0000000..6f80d0f --- /dev/null +++ b/Assets/HUD/boss.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bmvik2d2p8vqp" +path="res://.godot/imported/boss.png-f8734c4ed3bbf21bb316553c5fda6ef4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/HUD/boss.png" +dest_files=["res://.godot/imported/boss.png-f8734c4ed3bbf21bb316553c5fda6ef4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/HUD/hp-empty.png b/Assets/HUD/hp-empty.png new file mode 100644 index 0000000..28f0725 Binary files /dev/null and b/Assets/HUD/hp-empty.png differ diff --git a/Assets/HUD/hp-empty.png.import b/Assets/HUD/hp-empty.png.import new file mode 100644 index 0000000..38196b9 --- /dev/null +++ b/Assets/HUD/hp-empty.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dqy7sy62yms28" +path="res://.godot/imported/hp-empty.png-d9909810dc65b7319cfa3655afda5062.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/HUD/hp-empty.png" +dest_files=["res://.godot/imported/hp-empty.png-d9909810dc65b7319cfa3655afda5062.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/HUD/hp-empty.png~ b/Assets/HUD/hp-empty.png~ new file mode 100644 index 0000000..1a0548a Binary files /dev/null and b/Assets/HUD/hp-empty.png~ differ diff --git a/Assets/HUD/theme.tres b/Assets/HUD/theme.tres new file mode 100644 index 0000000..4975282 --- /dev/null +++ b/Assets/HUD/theme.tres @@ -0,0 +1,8 @@ +[gd_resource type="Theme" load_steps=2 format=3 uid="uid://c1jnbt5h4hwmi"] + +[ext_resource type="FontFile" uid="uid://cskj32qqejbjx" path="res://Assets/HUD/Minimal5x5Monospaced.ttf" id="1_tb5hy"] + +[resource] +Label/colors/font_color = Color(0, 0, 0, 1) +Label/font_sizes/font_size = 8 +Label/fonts/font = ExtResource("1_tb5hy") diff --git a/Assets/Kirby/air-shoot.png b/Assets/Kirby/air-shoot.png deleted file mode 100644 index e31cd27..0000000 Binary files a/Assets/Kirby/air-shoot.png and /dev/null differ diff --git a/Assets/Kirby/air-shoot.png.import b/Assets/Kirby/air-shoot.png.import deleted file mode 100644 index 3ca6aa9..0000000 --- a/Assets/Kirby/air-shoot.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://d0u6jw880abmk" -path="res://.godot/imported/air-shoot.png-970d544e65cd5a117d9cb44ce25eeb37.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://Assets/Kirby/air-shoot.png" -dest_files=["res://.godot/imported/air-shoot.png-970d544e65cd5a117d9cb44ce25eeb37.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/Assets/Kirby/air-shot.png b/Assets/Kirby/air-shot.png new file mode 100644 index 0000000..e31cd27 Binary files /dev/null and b/Assets/Kirby/air-shot.png differ diff --git a/Assets/Kirby/air-shot.png.import b/Assets/Kirby/air-shot.png.import new file mode 100644 index 0000000..37ad3dc --- /dev/null +++ b/Assets/Kirby/air-shot.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d0u6jw880abmk" +path="res://.godot/imported/air-shot.png-6b12381f57487ca253a6a5e5b996d553.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/air-shot.png" +dest_files=["res://.godot/imported/air-shot.png-6b12381f57487ca253a6a5e5b996d553.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Kirby/dance-sheet.png b/Assets/Kirby/dance-sheet.png new file mode 100644 index 0000000..83dae61 Binary files /dev/null and b/Assets/Kirby/dance-sheet.png differ diff --git a/Assets/Kirby/dance-sheet.png.import b/Assets/Kirby/dance-sheet.png.import new file mode 100644 index 0000000..3123ca4 --- /dev/null +++ b/Assets/Kirby/dance-sheet.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://budrft8xewca8" +path="res://.godot/imported/dance-sheet.png-71fc22a15cbba5547e9fc5672e07855c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/dance-sheet.png" +dest_files=["res://.godot/imported/dance-sheet.png-71fc22a15cbba5547e9fc5672e07855c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Kirby/fly-01.png b/Assets/Kirby/fly-01.png index 6f8d184..ba57b30 100644 Binary files a/Assets/Kirby/fly-01.png and b/Assets/Kirby/fly-01.png differ diff --git a/Assets/Kirby/fly-01.png~ b/Assets/Kirby/fly-01.png~ new file mode 100644 index 0000000..37e7128 Binary files /dev/null and b/Assets/Kirby/fly-01.png~ differ diff --git a/Assets/Kirby/fly-02.png~ b/Assets/Kirby/fly-02.png~ new file mode 100644 index 0000000..3fab159 Binary files /dev/null and b/Assets/Kirby/fly-02.png~ differ diff --git a/Assets/Kirby/fly-exhale-01.png b/Assets/Kirby/fly-exhale-01.png new file mode 100644 index 0000000..6b0393f Binary files /dev/null and b/Assets/Kirby/fly-exhale-01.png differ diff --git a/Assets/Kirby/fly-exhale-01.png.import b/Assets/Kirby/fly-exhale-01.png.import new file mode 100644 index 0000000..e6b82f8 --- /dev/null +++ b/Assets/Kirby/fly-exhale-01.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cvxxfk1qgqcti" +path="res://.godot/imported/fly-exhale-01.png-6efd611f427624ff2b4f323987ca9907.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/fly-exhale-01.png" +dest_files=["res://.godot/imported/fly-exhale-01.png-6efd611f427624ff2b4f323987ca9907.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Kirby/fly-exhale-02.png b/Assets/Kirby/fly-exhale-02.png new file mode 100644 index 0000000..13fd35c Binary files /dev/null and b/Assets/Kirby/fly-exhale-02.png differ diff --git a/Assets/Kirby/fly-exhale-02.png.import b/Assets/Kirby/fly-exhale-02.png.import new file mode 100644 index 0000000..978d5e6 --- /dev/null +++ b/Assets/Kirby/fly-exhale-02.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b6ilregfg6lf5" +path="res://.godot/imported/fly-exhale-02.png-1f3323576b3799feae34e3fa90ae8e69.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/fly-exhale-02.png" +dest_files=["res://.godot/imported/fly-exhale-02.png-1f3323576b3799feae34e3fa90ae8e69.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Kirby/fly-transition-01.png b/Assets/Kirby/fly-transition-01.png new file mode 100644 index 0000000..3828cf2 Binary files /dev/null and b/Assets/Kirby/fly-transition-01.png differ diff --git a/Assets/Kirby/fly-transition-01.png.import b/Assets/Kirby/fly-transition-01.png.import new file mode 100644 index 0000000..1d9652e --- /dev/null +++ b/Assets/Kirby/fly-transition-01.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dlmfgtkfe8s8k" +path="res://.godot/imported/fly-transition-01.png-285498532af2f57e69c1f8b9328f02ea.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/fly-transition-01.png" +dest_files=["res://.godot/imported/fly-transition-01.png-285498532af2f57e69c1f8b9328f02ea.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Kirby/fly-transition-02.png b/Assets/Kirby/fly-transition-02.png new file mode 100644 index 0000000..8063b4c Binary files /dev/null and b/Assets/Kirby/fly-transition-02.png differ diff --git a/Assets/Kirby/fly-transition-02.png.import b/Assets/Kirby/fly-transition-02.png.import new file mode 100644 index 0000000..b6c61a9 --- /dev/null +++ b/Assets/Kirby/fly-transition-02.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b22slkovd4hsg" +path="res://.godot/imported/fly-transition-02.png-88339afa2f110732d7737bfdf6a5e6d4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/fly-transition-02.png" +dest_files=["res://.godot/imported/fly-transition-02.png-88339afa2f110732d7737bfdf6a5e6d4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Kirby/inflated-exhale-01.png b/Assets/Kirby/inflated-exhale-01.png new file mode 100644 index 0000000..8b5cfca Binary files /dev/null and b/Assets/Kirby/inflated-exhale-01.png differ diff --git a/Assets/Kirby/inflated-exhale-01.png.import b/Assets/Kirby/inflated-exhale-01.png.import new file mode 100644 index 0000000..05b584c --- /dev/null +++ b/Assets/Kirby/inflated-exhale-01.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bdbp68mhgo5xb" +path="res://.godot/imported/inflated-exhale-01.png-285e965c65533109badc1b0c97aeda3b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/inflated-exhale-01.png" +dest_files=["res://.godot/imported/inflated-exhale-01.png-285e965c65533109badc1b0c97aeda3b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Kirby/inflated-exhale-02.png b/Assets/Kirby/inflated-exhale-02.png new file mode 100644 index 0000000..77dc3ed Binary files /dev/null and b/Assets/Kirby/inflated-exhale-02.png differ diff --git a/Assets/Kirby/inflated-exhale-02.png.import b/Assets/Kirby/inflated-exhale-02.png.import new file mode 100644 index 0000000..f7b5dd0 --- /dev/null +++ b/Assets/Kirby/inflated-exhale-02.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c6yy67c1dd07v" +path="res://.godot/imported/inflated-exhale-02.png-0bdac79f272f4cbbd14c16b04553bc41.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/inflated-exhale-02.png" +dest_files=["res://.godot/imported/inflated-exhale-02.png-0bdac79f272f4cbbd14c16b04553bc41.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Kirby/inflated-exhale-02.png~ b/Assets/Kirby/inflated-exhale-02.png~ new file mode 100644 index 0000000..77dc3ed Binary files /dev/null and b/Assets/Kirby/inflated-exhale-02.png~ differ diff --git a/Assets/Kirby/inflated-transition-01.png b/Assets/Kirby/inflated-transition-01.png new file mode 100644 index 0000000..8b5cfca Binary files /dev/null and b/Assets/Kirby/inflated-transition-01.png differ diff --git a/Assets/Kirby/inflated-transition-01.png.import b/Assets/Kirby/inflated-transition-01.png.import new file mode 100644 index 0000000..7c99a18 --- /dev/null +++ b/Assets/Kirby/inflated-transition-01.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bwqkqa0sfkq83" +path="res://.godot/imported/inflated-transition-01.png-2be116190033a1a83f1b3502c19034de.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/inflated-transition-01.png" +dest_files=["res://.godot/imported/inflated-transition-01.png-2be116190033a1a83f1b3502c19034de.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Kirby/inflated-transition-02.png b/Assets/Kirby/inflated-transition-02.png new file mode 100644 index 0000000..3c1df50 Binary files /dev/null and b/Assets/Kirby/inflated-transition-02.png differ diff --git a/Assets/Kirby/inflated-transition-02.png.import b/Assets/Kirby/inflated-transition-02.png.import new file mode 100644 index 0000000..ac9b478 --- /dev/null +++ b/Assets/Kirby/inflated-transition-02.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://du6cfirv2pq7i" +path="res://.godot/imported/inflated-transition-02.png-88c5c096e3fc1a90ff5fd5a465caf595.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/inflated-transition-02.png" +dest_files=["res://.godot/imported/inflated-transition-02.png-88c5c096e3fc1a90ff5fd5a465caf595.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Kirby/knockout-1.png b/Assets/Kirby/knockout-1.png new file mode 100644 index 0000000..a0a867a Binary files /dev/null and b/Assets/Kirby/knockout-1.png differ diff --git a/Assets/Kirby/knockout-1.png.import b/Assets/Kirby/knockout-1.png.import new file mode 100644 index 0000000..c718866 --- /dev/null +++ b/Assets/Kirby/knockout-1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://beg36twmvwket" +path="res://.godot/imported/knockout-1.png-5fe96d37903772f3af7c78cdb943fcb0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/knockout-1.png" +dest_files=["res://.godot/imported/knockout-1.png-5fe96d37903772f3af7c78cdb943fcb0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Kirby/knockout-2.png b/Assets/Kirby/knockout-2.png new file mode 100644 index 0000000..00cec39 Binary files /dev/null and b/Assets/Kirby/knockout-2.png differ diff --git a/Assets/Kirby/knockout-2.png.import b/Assets/Kirby/knockout-2.png.import new file mode 100644 index 0000000..d1b148e --- /dev/null +++ b/Assets/Kirby/knockout-2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c5qsow60trggu" +path="res://.godot/imported/knockout-2.png-eed145f5d4a83327eee36d1973f3bf43.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/knockout-2.png" +dest_files=["res://.godot/imported/knockout-2.png-eed145f5d4a83327eee36d1973f3bf43.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Kirby/knockout-3.png b/Assets/Kirby/knockout-3.png new file mode 100644 index 0000000..6ba6878 Binary files /dev/null and b/Assets/Kirby/knockout-3.png differ diff --git a/Assets/Kirby/knockout-3.png.import b/Assets/Kirby/knockout-3.png.import new file mode 100644 index 0000000..2b76330 --- /dev/null +++ b/Assets/Kirby/knockout-3.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b2smrgiobqc24" +path="res://.godot/imported/knockout-3.png-7372d5b3d1122fbec888dfc007df3c62.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/knockout-3.png" +dest_files=["res://.godot/imported/knockout-3.png-7372d5b3d1122fbec888dfc007df3c62.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Kirby/knockout-4.png b/Assets/Kirby/knockout-4.png new file mode 100644 index 0000000..fda6160 Binary files /dev/null and b/Assets/Kirby/knockout-4.png differ diff --git a/Assets/Kirby/knockout-4.png.import b/Assets/Kirby/knockout-4.png.import new file mode 100644 index 0000000..f9dfb2d --- /dev/null +++ b/Assets/Kirby/knockout-4.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dwnmiim6wpj3h" +path="res://.godot/imported/knockout-4.png-c9a732b68b5b7b781fe3a5eb9562bc9c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/knockout-4.png" +dest_files=["res://.godot/imported/knockout-4.png-c9a732b68b5b7b781fe3a5eb9562bc9c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Kirby/ko-1.png b/Assets/Kirby/ko-1.png deleted file mode 100644 index a0a867a..0000000 Binary files a/Assets/Kirby/ko-1.png and /dev/null differ diff --git a/Assets/Kirby/ko-1.png.import b/Assets/Kirby/ko-1.png.import deleted file mode 100644 index 267fcb9..0000000 --- a/Assets/Kirby/ko-1.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://beg36twmvwket" -path="res://.godot/imported/ko-1.png-257bb9f5acd9c8174aa62dfe6ac581cf.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://Assets/Kirby/ko-1.png" -dest_files=["res://.godot/imported/ko-1.png-257bb9f5acd9c8174aa62dfe6ac581cf.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/Assets/Kirby/ko-2.png b/Assets/Kirby/ko-2.png deleted file mode 100644 index 00cec39..0000000 Binary files a/Assets/Kirby/ko-2.png and /dev/null differ diff --git a/Assets/Kirby/ko-2.png.import b/Assets/Kirby/ko-2.png.import deleted file mode 100644 index b25d1f5..0000000 --- a/Assets/Kirby/ko-2.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://c5qsow60trggu" -path="res://.godot/imported/ko-2.png-472030235b439942fc453eaf63ed1309.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://Assets/Kirby/ko-2.png" -dest_files=["res://.godot/imported/ko-2.png-472030235b439942fc453eaf63ed1309.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/Assets/Kirby/ko-3.png b/Assets/Kirby/ko-3.png deleted file mode 100644 index 6ba6878..0000000 Binary files a/Assets/Kirby/ko-3.png and /dev/null differ diff --git a/Assets/Kirby/ko-3.png.import b/Assets/Kirby/ko-3.png.import deleted file mode 100644 index 3e52507..0000000 --- a/Assets/Kirby/ko-3.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://b2smrgiobqc24" -path="res://.godot/imported/ko-3.png-d343cbb2d16a1d4a91921d80c02317b7.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://Assets/Kirby/ko-3.png" -dest_files=["res://.godot/imported/ko-3.png-d343cbb2d16a1d4a91921d80c02317b7.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/Assets/Kirby/ko-4.png b/Assets/Kirby/ko-4.png deleted file mode 100644 index fda6160..0000000 Binary files a/Assets/Kirby/ko-4.png and /dev/null differ diff --git a/Assets/Kirby/ko-4.png.import b/Assets/Kirby/ko-4.png.import deleted file mode 100644 index 7c7afc4..0000000 --- a/Assets/Kirby/ko-4.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dwnmiim6wpj3h" -path="res://.godot/imported/ko-4.png-4e4251da2de6fbc3f0a2f8967faf40d7.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://Assets/Kirby/ko-4.png" -dest_files=["res://.godot/imported/ko-4.png-4e4251da2de6fbc3f0a2f8967faf40d7.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/Assets/Kirby/wall-bounce.png b/Assets/Kirby/wall-bounce.png new file mode 100644 index 0000000..8f0f7f6 Binary files /dev/null and b/Assets/Kirby/wall-bounce.png differ diff --git a/Assets/Kirby/wall-bounce.png.import b/Assets/Kirby/wall-bounce.png.import new file mode 100644 index 0000000..03c561e --- /dev/null +++ b/Assets/Kirby/wall-bounce.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://p5id24wo3axc" +path="res://.godot/imported/wall-bounce.png-2b41461099de9979c616b098f4751367.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Kirby/wall-bounce.png" +dest_files=["res://.godot/imported/wall-bounce.png-2b41461099de9979c616b098f4751367.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Map/TileMapLayer.tscn b/Assets/Map/TileMapLayer.tscn index 8057950..f304f16 100644 --- a/Assets/Map/TileMapLayer.tscn +++ b/Assets/Map/TileMapLayer.tscn @@ -1,8 +1,11 @@ -[gd_scene load_steps=5 format=3 uid="uid://b1si77qfmut5x"] +[gd_scene load_steps=6 format=3 uid="uid://b1si77qfmut5x"] [ext_resource type="Texture2D" uid="uid://mcgvpb1lh3ve" path="res://Assets/Map/tileset.png" id="1_odmhe"] [ext_resource type="Script" path="res://Assets/Map/tile_map_layer.gd" id="2_qi2a0"] +[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_3qgmv"] +friction = 0.0 + [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_iu5yc"] texture = ExtResource("1_odmhe") margins = Vector2i(1, 1) @@ -331,6 +334,7 @@ separation = Vector2i(2, 2) 13:11/0 = 0 14:11/0 = 0 15:11/0 = 0 +15:11/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) 16:11/0 = 0 17:11/0 = 0 18:11/0 = 0 @@ -475,10 +479,35 @@ separation = Vector2i(2, 2) 29:15/0 = 0 30:15/0 = 0 31:15/0 = 0 +22:7/animation_frame_0/duration = 0.5 +22:7/animation_frame_1/duration = 0.5 +22:7/0 = 0 +22:7/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, 5, 8, 5, 8, 8, -8, 8) +24:7/animation_frame_0/duration = 0.5 +24:7/animation_frame_1/duration = 0.5 +24:7/0 = 0 +24:7/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, 5, 8, 5, 8, 8, -8, 8) +18:8/0 = 0 +18:8/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +22:6/animation_frame_0/duration = 0.5 +22:6/animation_frame_1/duration = 0.5 +22:6/0 = 0 +22:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 8, 8, 8, 8, -8, -8, -8) +24:6/animation_frame_0/duration = 0.5 +24:6/animation_frame_1/duration = 0.5 +24:6/0 = 0 +24:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +26:6/animation_frame_0/duration = 0.5 +26:6/animation_frame_1/duration = 0.5 +26:6/0 = 0 +26:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) [sub_resource type="TileSet" id="TileSet_8jo18"] physics_layer_0/collision_layer = 16 physics_layer_0/collision_mask = 0 +physics_layer_1/collision_layer = 128 +physics_layer_1/collision_mask = 0 +physics_layer_1/physics_material = SubResource("PhysicsMaterial_3qgmv") sources/0 = SubResource("TileSetAtlasSource_iu5yc") [node name="TileMapLayer" type="TileMapLayer"] diff --git a/Assets/Map/tile_map_layer.gd b/Assets/Map/tile_map_layer.gd index 47e9c33..b61d954 100644 --- a/Assets/Map/tile_map_layer.gd +++ b/Assets/Map/tile_map_layer.gd @@ -6,5 +6,5 @@ func get_wall_limits(): "top": (get_used_rect().position.y + 1) * tile_set.tile_size.y, "bottom": (get_used_rect().position.y + get_used_rect().size.y + 1) * tile_set.tile_size.y, "left": (get_used_rect().position.x + 1) * tile_set.tile_size.x, - "right": (get_used_rect().position.x + get_used_rect().size.x + 1) * tile_set.tile_size.x, + "right": (get_used_rect().position.x + get_used_rect().size.x - 1) * tile_set.tile_size.x, } diff --git a/Assets/Map/tileset.png b/Assets/Map/tileset.png index cd85a12..ee740c1 100644 Binary files a/Assets/Map/tileset.png and b/Assets/Map/tileset.png differ diff --git a/Assets/Map/tileset.png~ b/Assets/Map/tileset.png~ index 7cbee38..abbf411 100644 Binary files a/Assets/Map/tileset.png~ and b/Assets/Map/tileset.png~ differ diff --git a/Assets/Music/Boss.wav b/Assets/Music/Boss.wav new file mode 100644 index 0000000..308b2b4 Binary files /dev/null and b/Assets/Music/Boss.wav differ diff --git a/Assets/Music/Boss.wav.import b/Assets/Music/Boss.wav.import new file mode 100644 index 0000000..1d12ab6 --- /dev/null +++ b/Assets/Music/Boss.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cd6c7eb8otlw7" +path="res://.godot/imported/Boss.wav-34b105f46cb25c9a883e92b457f7f57f.sample" + +[deps] + +source_file="res://Assets/Music/Boss.wav" +dest_files=["res://.godot/imported/Boss.wav-34b105f46cb25c9a883e92b457f7f57f.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=0 diff --git a/Assets/Music/Win.wav b/Assets/Music/Win.wav new file mode 100644 index 0000000..90e1ddc Binary files /dev/null and b/Assets/Music/Win.wav differ diff --git a/Assets/Music/Win.wav.import b/Assets/Music/Win.wav.import new file mode 100644 index 0000000..c83d97d --- /dev/null +++ b/Assets/Music/Win.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bdi83hcsq4yge" +path="res://.godot/imported/Win.wav-2d6f3b060bd6a15d4ccf22a695707eb9.sample" + +[deps] + +source_file="res://Assets/Music/Win.wav" +dest_files=["res://.godot/imported/Win.wav-2d6f3b060bd6a15d4ccf22a695707eb9.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=0 diff --git a/Assets/Music/knockout.wav b/Assets/Music/knockout.wav new file mode 100644 index 0000000..30233a7 Binary files /dev/null and b/Assets/Music/knockout.wav differ diff --git a/Assets/Music/knockout.wav.import b/Assets/Music/knockout.wav.import new file mode 100644 index 0000000..9d733bd --- /dev/null +++ b/Assets/Music/knockout.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://brufyhxonh3jr" +path="res://.godot/imported/knockout.wav-d144bd2c60eb1da4ea2eec61a299df4f.sample" + +[deps] + +source_file="res://Assets/Music/knockout.wav" +dest_files=["res://.godot/imported/knockout.wav-d144bd2c60eb1da4ea2eec61a299df4f.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=0 diff --git a/Assets/Music/ko.wav b/Assets/Music/ko.wav deleted file mode 100644 index 30233a7..0000000 Binary files a/Assets/Music/ko.wav and /dev/null differ diff --git a/Assets/Music/ko.wav.import b/Assets/Music/ko.wav.import deleted file mode 100644 index 7eb8452..0000000 --- a/Assets/Music/ko.wav.import +++ /dev/null @@ -1,24 +0,0 @@ -[remap] - -importer="wav" -type="AudioStreamWAV" -uid="uid://brufyhxonh3jr" -path="res://.godot/imported/ko.wav-b9119f8e5ccadad77df306bc79e7200f.sample" - -[deps] - -source_file="res://Assets/Music/ko.wav" -dest_files=["res://.godot/imported/ko.wav-b9119f8e5ccadad77df306bc79e7200f.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=0 diff --git a/Assets/Sounds/boss-hp-fill.wav b/Assets/Sounds/boss-hp-fill.wav new file mode 100644 index 0000000..2cc14bd Binary files /dev/null and b/Assets/Sounds/boss-hp-fill.wav differ diff --git a/Assets/Sounds/boss-hp-fill.wav.import b/Assets/Sounds/boss-hp-fill.wav.import new file mode 100644 index 0000000..c05e269 --- /dev/null +++ b/Assets/Sounds/boss-hp-fill.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://b8q5db1h0ubyg" +path="res://.godot/imported/boss-hp-fill.wav-8f0b1adfef95c2729e08b95bed603513.sample" + +[deps] + +source_file="res://Assets/Sounds/boss-hp-fill.wav" +dest_files=["res://.godot/imported/boss-hp-fill.wav-8f0b1adfef95c2729e08b95bed603513.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=0 diff --git a/BossHP.tscn b/BossHP.tscn new file mode 100644 index 0000000..7290a82 --- /dev/null +++ b/BossHP.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=4 format=3 uid="uid://h8m5scfjj45p"] + +[ext_resource type="Script" path="res://boss_hp.gd" id="1_athp4"] +[ext_resource type="Texture2D" uid="uid://jpk0628wuwl1" path="res://Assets/HUD/boss-hp.png" id="2_fkcmd"] +[ext_resource type="Texture2D" uid="uid://b2xjcvm2xycud" path="res://Assets/HUD/boss-hp-empty.png" id="3_2hfbj"] + +[node name="BossHP" type="Control"] +layout_mode = 3 +anchor_right = 0.05 +anchor_bottom = 0.056 +offset_bottom = -0.0640001 +script = ExtResource("1_athp4") + +[node name="Full" type="TextureRect" parent="."] +texture_filter = 1 +layout_mode = 0 +offset_right = 7.0 +offset_bottom = 8.0 +texture = ExtResource("2_fkcmd") +stretch_mode = 4 + +[node name="Empty" type="TextureRect" parent="."] +visible = false +texture_filter = 1 +layout_mode = 0 +offset_right = 7.0 +offset_bottom = 8.0 +texture = ExtResource("3_2hfbj") +stretch_mode = 4 diff --git a/BossHPBar.tscn b/BossHPBar.tscn new file mode 100644 index 0000000..1459a9d --- /dev/null +++ b/BossHPBar.tscn @@ -0,0 +1,26 @@ +[gd_scene load_steps=4 format=3 uid="uid://ci6ik574uumq5"] + +[ext_resource type="Script" path="res://boss_hp_bar.gd" id="1_m23bk"] +[ext_resource type="PackedScene" uid="uid://h8m5scfjj45p" path="res://BossHP.tscn" id="2_mlild"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wy8yp"] +bg_color = Color(1, 1, 1, 1) + +[node name="BossHPBar" type="PanelContainer"] +offset_right = 16.0 +size_flags_horizontal = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_wy8yp") +script = ExtResource("1_m23bk") + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +layout_mode = 2 +theme_override_constants/separation = 8 + +[node name="BossHP" parent="HBoxContainer" instance=ExtResource("2_mlild")] +layout_mode = 2 + +[node name="BossHP2" parent="HBoxContainer" instance=ExtResource("2_mlild")] +layout_mode = 2 + +[node name="BossHP3" parent="HBoxContainer" instance=ExtResource("2_mlild")] +layout_mode = 2 diff --git a/Enemies/Enemy.tscn b/Enemies/Enemy.tscn index 678b33a..2791e05 100644 --- a/Enemies/Enemy.tscn +++ b/Enemies/Enemy.tscn @@ -36,5 +36,13 @@ sprite_frames = SubResource("SpriteFrames_n2gm8") [node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="."] process_mode = 3 +[node name="RayLeft" type="RayCast2D" parent="."] +target_position = Vector2(-9, 0) +collision_mask = 16 + +[node name="RayRight" type="RayCast2D" parent="."] +target_position = Vector2(9, 0) +collision_mask = 16 + [connection signal="screen_entered" from="VisibleOnScreenNotifier2D" to="." method="_on_visible_on_screen_notifier_2d_screen_entered"] [connection signal="screen_exited" from="VisibleOnScreenNotifier2D" to="." method="_on_visible_on_screen_notifier_2d_screen_exited"] diff --git a/Enemies/enemy.gd b/Enemies/enemy.gd index ab1ceac..428f6ca 100644 --- a/Enemies/enemy.gd +++ b/Enemies/enemy.gd @@ -1,8 +1,14 @@ +class_name Enemy extends CharacterBody2D const SPEED = 30 +var direction = -1 : + set(value): + direction = value + $AnimatedSprite2D.flip_h = direction > 0 + func _ready() -> void: process_mode = PROCESS_MODE_DISABLED @@ -14,14 +20,54 @@ func _physics_process(delta: float) -> void: if not is_on_floor(): velocity += get_gravity() * delta - velocity.x = -SPEED + velocity.x = direction * SPEED move_and_slide() + if get_last_slide_collision(): + if $RayLeft.is_colliding(): + direction = 1 + elif $RayRight.is_colliding(): + direction = -1 + + +func on_hit(projectile_position: Vector2): + var impact_direction = global_position - projectile_position + var impact_direction_x = sign(impact_direction.x) + + var effect_star_scene := preload("res://effect_star.tscn") + + var directions = [] + if randi() % 10 > 5: + directions = [Vector2(1, 1) * 8, Vector2(1, -1) * 8, Vector2(-1, -1) * 8, Vector2(-1, 1) * 8] + else: + directions = [ + Vector2(impact_direction_x, 1) * 16, + Vector2(impact_direction_x, -1) * 16, + Vector2(impact_direction_x, 0.25) * 16, + Vector2(impact_direction_x, -0.25) * 16, + ] + + for effect_direction in directions: + var effect_star := effect_star_scene.instantiate() + effect_star.global_position = global_position + get_tree().current_scene.add_child(effect_star) + var tween := get_tree().create_tween().set_ease(Tween.EASE_OUT) + tween.tween_property( + effect_star, + "global_position", + global_position + effect_direction, + 0.1 + ) + tween.tween_callback(func(): + effect_star.queue_free() + ).set_delay(0.2) + + queue_free() func _on_visible_on_screen_notifier_2d_screen_entered() -> void: process_mode = PROCESS_MODE_INHERIT - func _on_visible_on_screen_notifier_2d_screen_exited() -> void: + return process_mode = PROCESS_MODE_DISABLED diff --git a/FloatIslands.tscn b/FloatIslands.tscn index 370b7ce..cb3b5ee 100644 --- a/FloatIslands.tscn +++ b/FloatIslands.tscn @@ -4,16 +4,37 @@ [ext_resource type="PackedScene" uid="uid://fe6exyigjb72" path="res://Player.tscn" id="2_1abrq"] [ext_resource type="PackedScene" uid="uid://bb8nnbftq04df" path="res://HUD.tscn" id="2_ejyoq"] [ext_resource type="PackedScene" uid="uid://b1si77qfmut5x" path="res://Assets/Map/TileMapLayer.tscn" id="2_hlwwt"] -[ext_resource type="PackedScene" uid="uid://cjrb8n36og5f3" path="res://KOPlane.tscn" id="4_7uhfp"] +[ext_resource type="PackedScene" uid="uid://cjrb8n36og5f3" path="res://KnockoutPlane.tscn" id="4_7uhfp"] [ext_resource type="PackedScene" uid="uid://7ndl8hvg4e38" path="res://Door.tscn" id="4_e2mrq"] [node name="FloatIslands" type="Node2D"] script = ExtResource("1_1pywd") +[node name="BackgroundClouds" type="Parallax2D" parent="."] +scroll_scale = Vector2(0.5, 1) +repeat_size = Vector2(360, 0) + +[node name="TileMapLayer" parent="BackgroundClouds" instance=ExtResource("2_hlwwt")] +tile_map_data = PackedByteArray("AAAHAAIAAAAGAAwAAAAIAAIAAAAHAAwAAAAJAAMAAAAHAAwAAAAGAAMAAAAGAAwAAAAJAAIAAAAAAAoAAAAKAAAAAAAGAA0AAAALAAEAAAAGAA0AAAAMAAEAAAAHAA0AAAANAAAAAAAHAA0AAAAGAAAAAAAGAA0AAAAHAAAAAAAHAA0AAAAEAAMAAAAAAAoAAAACAAIAAAAHAAwAAAABAAIAAAAGAAwAAAADAAMAAAAHAAwAAAAAAAMAAAAGAAwAAAACAAEAAAAAAA8AAAADAAEAAAABAA8AAAACAAAAAAAAAA4AAAADAAAAAAABAA4AAAAOAAIAAAAFAAwAAAAVAAEAAAAEAAwAAAAVAAIAAAAEAA0AAAAQAAMAAAAHAAwAAAAPAAMAAAAGAAwAAAASAAEAAAAHAA0AAAAQAAAAAAAGAA0AAAARAAEAAAAGAA0AAAATAAAAAAAHAA0AAAA=") + +[node name="BackgroundHorizon" type="Parallax2D" parent="."] +scroll_scale = Vector2(0.7, 1) +repeat_size = Vector2(360, 0) + +[node name="TileMapLayer" parent="BackgroundHorizon" instance=ExtResource("2_hlwwt")] +tile_map_data = PackedByteArray("AAAHAAQAAAAAAAsAAAAAAAQAAAAAAAsAAAABAAQAAAAAAAsAAAACAAQAAAAAAAsAAAADAAQAAAAAAAsAAAAEAAQAAAAAAAsAAAAFAAQAAAAAAAsAAAAGAAQAAAAAAAsAAAAIAAQAAAAAAAsAAAAJAAQAAAAAAAsAAAAKAAQAAAAAAAsAAAALAAQAAAAAAAsAAAAMAAQAAAAAAAsAAAANAAQAAAAAAAsAAAAOAAQAAAAAAAsAAAAPAAQAAAAAAAsAAAAQAAQAAAAAAAsAAAARAAQAAAAAAAsAAAASAAQAAAAAAAsAAAATAAQAAAAAAAsAAAAUAAQAAAAAAAsAAAAVAAQAAAAAAAsAAAAWAAQAAAAAAAsAAAA=") + +[node name="BackgroundPalms" type="Parallax2D" parent="."] +scroll_scale = Vector2(0.9, 1) +repeat_size = Vector2(360, 0) + +[node name="TileMapLayer" parent="BackgroundPalms" instance=ExtResource("2_hlwwt")] +tile_map_data = PackedByteArray("AAAIAAIAAAABAAgAAAAJAAIAAAACAAgAAAAJAAMAAAACAAkAAAAPAAMAAAAAAAgAAAAQAAQAAAABAAkAAAAQAAUAAAABAAoAAAARAAQAAAACAAkAAAAVAAMAAAABAAkAAAAVAAQAAAABAAoAAAAWAAMAAAACAAkAAAACAAEAAAAAAAgAAAACAAIAAAAAAAkAAAADAAEAAAABAAgAAAADAAIAAAABAAkAAAADAAMAAAABAAoAAAADAAQAAAABAAoAAAADAAUAAAABAAoAAAAEAAEAAAACAAgAAAAEAAIAAAACAAkAAAAHAAIAAAAAAAgAAAAHAAMAAAAAAAkAAAAIAAMAAAABAAkAAAAIAAQAAAABAAoAAAAIAAUAAAABAAoAAAAKAAQAAAAAAAgAAAAKAAUAAAAAAAkAAAALAAQAAAABAAgAAAALAAUAAAABAAkAAAAMAAQAAAACAAgAAAAMAAUAAAACAAkAAAAPAAQAAAAAAAkAAAAQAAMAAAABAAgAAAARAAMAAAACAAgAAAAUAAIAAAAAAAgAAAAUAAMAAAAAAAkAAAAVAAIAAAABAAgAAAAVAAUAAAABAAoAAAAWAAIAAAACAAgAAAADAAYAAAABAAoAAAAIAAYAAAABAAoAAAALAAYAAAABAAoAAAAQAAYAAAABAAoAAAAVAAYAAAABAAoAAAA=") + [node name="HUD" parent="." instance=ExtResource("2_ejyoq")] [node name="TileMapLayer" parent="." instance=ExtResource("2_hlwwt")] -tile_map_data = PackedByteArray("AAAAAAYAAAADAAsAAAABAAUAAAANAAoAAAABAAYAAAADAAsAAAACAAUAAAAOAAoAAAACAAYAAAAOAAsAAAACAAcAAAAPAAsAAAADAAUAAAAOAAoAAAADAAYAAAAOAAsAAAADAAcAAAAPAAsAAAAEAAUAAAAOAAoAAAAEAAYAAAAOAAsAAAAEAAcAAAAPAAsAAAAFAAUAAAAOAAoAAAAFAAYAAAAOAAsAAAAFAAcAAAAPAAsAAAAGAAUAAAAOAAoAAAAGAAYAAAAOAAsAAAAGAAcAAAAPAAsAAAAHAAUAAAAOAAoAAAAHAAYAAAAOAAsAAAAHAAcAAAAPAAsAAAAIAAUAAAAOAAoAAAAIAAYAAAAOAAsAAAAIAAcAAAAPAAsAAAAJAAUAAAAOAAoAAAAJAAYAAAAOAAsAAAAKAAYAAAADAAsAAAALAAYAAAADAAsAAAAJAAcAAAAPAAsAAAAKAAUAAAAPAAoAAAAMAAYAAAADAAsAAAANAAYAAAADAAsAAAAOAAYAAAADAAsAAAAPAAYAAAADAAsAAAAQAAYAAAADAAsAAAARAAYAAAADAAsAAAASAAYAAAADAAsAAAA=") +tile_map_data = PackedByteArray("AAAAAAYAAAAWAAcAAAALAAYAAAAWAAcAAAAMAAYAAAAWAAcAAAANAAYAAAAWAAYAAAAOAAYAAAAYAAYAAAAPAAYAAAAYAAYAAAAQAAYAAAAYAAYAAAARAAYAAAAYAAYAAAASAAYAAAAYAAYAAAACAAUAAAANAAoAAAACAAYAAAAWAAcAAAADAAUAAAAOAAoAAAADAAYAAAAYAAcAAAADAAcAAAAPAAsAAAAEAAUAAAAOAAoAAAAEAAYAAAAYAAcAAAAEAAcAAAAPAAsAAAAFAAUAAAAOAAoAAAAFAAYAAAAYAAcAAAAFAAcAAAAPAAsAAAAGAAUAAAAOAAoAAAAGAAYAAAAYAAcAAAAGAAcAAAAPAAsAAAAHAAUAAAAOAAoAAAAHAAYAAAAYAAcAAAAHAAcAAAAPAAsAAAAIAAUAAAAOAAoAAAAIAAYAAAAYAAcAAAAIAAcAAAAPAAsAAAAJAAUAAAAOAAoAAAAJAAYAAAAYAAcAAAAJAAcAAAAPAAsAAAAKAAUAAAAOAAoAAAAKAAYAAAAYAAcAAAAKAAcAAAAPAAsAAAALAAUAAAAPAAoAAAABAAYAAAAWAAcAAAATAAYAAAAYAAYAAAAUAAYAAAAYAAYAAAAVAAYAAAAYAAYAAAAWAAYAAAAYAAYAAAAXAAYAAAAYAAYAAAAYAAYAAAAYAAYAAAAZAAYAAAAYAAYAAAAaAAYAAAAYAAYAAAAbAAYAAAAYAAYAAAAcAAYAAAAYAAYAAAAdAAYAAAAYAAYAAAAeAAYAAAAYAAYAAAAfAAYAAAAYAAYAAAAgAAYAAAAYAAYAAAAhAAYAAAAYAAYAAAAiAAYAAAAYAAYAAAAjAAYAAAAYAAYAAAAkAAYAAAAYAAYAAAAlAAYAAAAYAAYAAAAmAAYAAAAYAAYAAAAOAAcAAAAPAAsAAAAPAAcAAAAPAAsAAAAQAAcAAAAPAAsAAAARAAcAAAAPAAsAAAASAAcAAAAPAAsAAAATAAcAAAAPAAsAAAAUAAcAAAAPAAsAAAAVAAcAAAAPAAsAAAAWAAcAAAAPAAsAAAAXAAcAAAAPAAsAAAAYAAcAAAAPAAsAAAAZAAcAAAAPAAsAAAAaAAcAAAAPAAsAAAAbAAcAAAAPAAsAAAAcAAcAAAAPAAsAAAAdAAcAAAAPAAsAAAAeAAcAAAAPAAsAAAAfAAcAAAAPAAsAAAAgAAcAAAAPAAsAAAAhAAcAAAAPAAsAAAAiAAcAAAAPAAsAAAAjAAcAAAAPAAsAAAAkAAcAAAAPAAsAAAAlAAcAAAAPAAsAAAAmAAcAAAAPAAsAAAAnAAYAAAAaAAYAAAAoAAYAAAAWAAcAAAApAAYAAAAWAAcAAAAqAAYAAAAWAAcAAAArAAYAAAAWAAcAAAA=") [node name="Door" parent="TileMapLayer" instance=ExtResource("4_e2mrq")] position = Vector2(152, 64) @@ -22,10 +43,10 @@ target_position = Vector2(0, 112) [node name="Wall" parent="." instance=ExtResource("2_hlwwt")] modulate = Color(1, 1, 1, 0.392157) -tile_map_data = PackedByteArray("AAD//wUAAAARAAEAAAD//wQAAAARAAEAAAD//wMAAAARAAEAAAD//wIAAAARAAEAAAD//wEAAAARAAEAAAD//wAAAAARAAEAAAD/////AAARAAEAAAAAAP//AAARAAEAAAABAP//AAARAAEAAAACAP//AAARAAEAAAADAP//AAARAAEAAAAEAP//AAARAAEAAAAFAP//AAARAAEAAAAGAP//AAARAAEAAAAHAP//AAARAAEAAAAIAP//AAARAAEAAAAJAP//AAARAAEAAAAKAP//AAARAAEAAAD//wYAAAARAAEAAAD//wcAAAARAAEAAAA=") +tile_map_data = PackedByteArray("AAD//wUAAAARAAEAAAD//wQAAAARAAEAAAD//wMAAAARAAEAAAD//wIAAAARAAEAAAD//wEAAAARAAEAAAD//wAAAAARAAEAAAD/////AAARAAEAAAAAAP//AAARAAEAAAABAP//AAARAAEAAAACAP//AAARAAEAAAADAP//AAARAAEAAAAEAP//AAARAAEAAAAFAP//AAARAAEAAAAGAP//AAARAAEAAAAHAP//AAARAAEAAAAIAP//AAARAAEAAAAJAP//AAARAAEAAAAKAP//AAARAAEAAAD//wYAAAARAAEAAAD//wcAAAARAAEAAAALAP//AAARAAEAAAAMAP//AAARAAEAAAANAP//AAARAAEAAAAOAP//AAARAAEAAAAPAP//AAARAAEAAAAQAP//AAARAAEAAAARAP//AAARAAEAAAASAP//AAARAAEAAAATAP//AAARAAEAAAAAAAcAAAASAAgAAAABAAcAAAASAAgAAAACAAcAAAASAAgAAAALAAcAAAASAAgAAAAMAAcAAAASAAgAAAANAAcAAAASAAgAAAAUAP//AAARAAEAAAAVAP//AAARAAEAAAAWAP//AAARAAEAAAAXAP//AAARAAEAAAAYAP//AAARAAEAAAAZAP//AAARAAEAAAAaAP//AAARAAEAAAAbAP//AAARAAEAAAAcAP//AAARAAEAAAAdAP//AAARAAEAAAAeAP//AAARAAEAAAAfAP//AAARAAEAAAAgAP//AAARAAEAAAAhAP//AAARAAEAAAAiAP//AAARAAEAAAAjAP//AAARAAEAAAAkAP//AAARAAEAAAAlAP//AAARAAEAAAAmAP//AAARAAEAAAAnAP//AAARAAEAAAAoAP//AAARAAEAAAApAP//AAARAAEAAAAqAP//AAARAAEAAAAnAAcAAAASAAgAAAAoAAcAAAASAAgAAAApAAcAAAASAAgAAAAqAAcAAAASAAgAAAArAAcAAAASAAgAAAA=") -[node name="KOPlane" parent="." instance=ExtResource("4_7uhfp")] -tile_map_data = PackedByteArray("AAAAAAgAAQAAAAAAAAABAAgAAQAAAAAAAAACAAgAAQAAAAAAAAADAAgAAQAAAAAAAAAEAAgAAQAAAAAAAAAFAAgAAQAAAAAAAAAGAAgAAQAAAAAAAAAHAAgAAQAAAAAAAAAIAAgAAQAAAAAAAAAJAAgAAQAAAAAAAAAKAAgAAQAAAAAAAAALAAgAAQAAAAAAAAAMAAgAAQAAAAAAAAANAAgAAQAAAAAAAAAOAAgAAQAAAAAAAAAPAAgAAQAAAAAAAAAQAAgAAQAAAAAAAAARAAgAAQAAAAAAAAASAAgAAQAAAAAAAAA=") +[node name="KnockoutPlane" parent="." instance=ExtResource("4_7uhfp")] +tile_map_data = PackedByteArray("AAAAAAgAAQAAAAAAAAABAAgAAQAAAAAAAAACAAgAAQAAAAAAAAADAAgAAQAAAAAAAAAEAAgAAQAAAAAAAAAFAAgAAQAAAAAAAAAGAAgAAQAAAAAAAAAHAAgAAQAAAAAAAAAIAAgAAQAAAAAAAAAJAAgAAQAAAAAAAAAKAAgAAQAAAAAAAAALAAgAAQAAAAAAAAAMAAgAAQAAAAAAAAANAAgAAQAAAAAAAAAOAAgAAQAAAAAAAAAPAAgAAQAAAAAAAAAQAAgAAQAAAAAAAAARAAgAAQAAAAAAAAASAAgAAQAAAAAAAAATAAgAAQAAAAAAAAAUAAgAAQAAAAAAAAAVAAgAAQAAAAAAAAAWAAgAAQAAAAAAAAAXAAgAAQAAAAAAAAAYAAgAAQAAAAAAAAAZAAgAAQAAAAAAAAAaAAgAAQAAAAAAAAAbAAgAAQAAAAAAAAAcAAgAAQAAAAAAAAAdAAgAAQAAAAAAAAAeAAgAAQAAAAAAAAAfAAgAAQAAAAAAAAAgAAgAAQAAAAAAAAAhAAgAAQAAAAAAAAAiAAgAAQAAAAAAAAAjAAgAAQAAAAAAAAAkAAgAAQAAAAAAAAAlAAgAAQAAAAAAAAAmAAgAAQAAAAAAAAArAAgAAQAAAAAAAAAqAAgAAQAAAAAAAAApAAgAAQAAAAAAAAAoAAgAAQAAAAAAAAAnAAgAAQAAAAAAAAA=") [node name="Player" parent="." instance=ExtResource("2_1abrq")] -position = Vector2(32, 40) +position = Vector2(48, 40) diff --git a/FloatIslandsIntro.tscn b/FloatIslandsIntro.tscn index 6677def..ded1472 100644 --- a/FloatIslandsIntro.tscn +++ b/FloatIslandsIntro.tscn @@ -1,7 +1,9 @@ -[gd_scene load_steps=3 format=3 uid="uid://bbhruy6emo48l"] +[gd_scene load_steps=5 format=3 uid="uid://bbhruy6emo48l"] [ext_resource type="Script" path="res://float_islands_intro.gd" id="1_nl4ls"] [ext_resource type="Texture2D" uid="uid://dkequklv0hq3u" path="res://Assets/Map/intro.png" id="2_q4wx6"] +[ext_resource type="FontFile" uid="uid://bhrdnknbdr40o" path="res://Assets/HUD/Minimal5x7.ttf" id="3_c130n"] +[ext_resource type="Texture2D" uid="uid://dw38mfygfkecc" path="res://icon_monochrome_light.svg" id="4_enqlp"] [node name="FloatIslandsIntro" type="Node2D"] script = ExtResource("1_nl4ls") @@ -12,3 +14,20 @@ position = Vector2(80, 72) texture = ExtResource("2_q4wx6") region_enabled = true region_rect = Rect2(344, 8, 160, 144) + +[node name="Label" type="Label" parent="."] +texture_filter = 1 +offset_left = 104.0 +offset_top = 16.0 +offset_right = 112.0 +offset_bottom = 26.0 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("3_c130n") +theme_override_font_sizes/font_size = 16 +text = " ?" + +[node name="IconMonochromeLight" type="Sprite2D" parent="."] +texture_filter = 1 +position = Vector2(152, 136) +scale = Vector2(0.0156982, 0.0156982) +texture = ExtResource("4_enqlp") diff --git a/Game.gd b/Game.gd index 1a9fe39..37391b2 100644 --- a/Game.gd +++ b/Game.gd @@ -1,6 +1,13 @@ extends Node +@warning_ignore("unused_signal") +signal boss_initialized(hp: int) +@warning_ignore("unused_signal") +signal boss_hp_changed +@warning_ignore("unused_signal") +signal boss_defeated + signal score_changed var score = 0 : @@ -85,3 +92,7 @@ func transition_scene_with_door(door: Door): Game.fade_in_screen() ).call_deferred() + + +func hit_enemy(enemy: Enemy, projectile_position: Vector2): + enemy.on_hit(projectile_position) diff --git a/GreenGreens.tscn b/GreenGreens.tscn index 8c42a9a..a4bb2d5 100644 --- a/GreenGreens.tscn +++ b/GreenGreens.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=14 format=4 uid="uid://b7lbvuc5roqaq"] +[gd_scene load_steps=15 format=4 uid="uid://b7lbvuc5roqaq"] [ext_resource type="Script" path="res://green_greens.gd" id="1_8lfgl"] [ext_resource type="PackedScene" uid="uid://bb8nnbftq04df" path="res://HUD.tscn" id="2_xugoh"] @@ -23,6 +23,8 @@ sources/0 = SubResource("TileSetAtlasSource_hnnog") [sub_resource type="RectangleShape2D" id="RectangleShape2D_gog7l"] +[sub_resource type="RectangleShape2D" id="RectangleShape2D_208d0"] + [node name="GreenGreens" type="Node2D"] script = ExtResource("1_8lfgl") @@ -47,7 +49,7 @@ position = Vector2(175, 74) texture = ExtResource("3_cwh0s") [node name="TileMapLayer" parent="." instance=ExtResource("13_cw8ip")] -tile_map_data = PackedByteArray("AAAAAAgAAAARAAAAAAABAAgAAAARAAAAAAACAAgAAAARAAAAAAADAAgAAAARAAAAAAAEAAgAAAARAAAAAAAFAAgAAAARAAAAAAAGAAgAAAARAAAAAAAHAAgAAAARAAAAAAAIAAgAAAARAAAAAAAJAAgAAAARAAAAAAAKAAgAAAARAAAAAAALAAgAAAARAAAAAAAMAAgAAAARAAAAAAANAAgAAAARAAAAAAAOAAgAAAARAAAAAAAPAAgAAAARAAAAAAAQAAgAAAARAAAAAAARAAgAAAARAAAAAAASAAgAAAARAAAAAAATAAgAAAARAAAAAAAUAAgAAAARAAAAAAAVAAgAAAARAAAAAAAWAAgAAAARAAAAAAAXAAgAAAARAAAAAAAYAAgAAAARAAAAAAAaAAcAAAARAAAAAAAbAAcAAAARAAAAAAAcAAcAAAARAAAAAAAdAAcAAAARAAAAAAAeAAcAAAARAAAAAAAfAAcAAAARAAAAAAAgAAcAAAARAAAAAAAhAAcAAAARAAAAAAAjAAgAAAARAAAAAAAkAAgAAAARAAAAAAAlAAgAAAARAAAAAAAmAAgAAAARAAAAAAAnAAgAAAARAAAAAAAoAAgAAAARAAAAAAApAAgAAAARAAAAAAAqAAgAAAARAAAAAAArAAgAAAARAAAAAAAsAAgAAAARAAAAAAAtAAgAAAARAAAAAAAuAAgAAAARAAAAAAAvAAgAAAARAAAAAAAwAAgAAAARAAAAAAAxAAgAAAARAAAAAAAyAAgAAAARAAAAAAAzAAgAAAARAAAAAAA2AAgAAAARAAAAAAA3AAgAAAARAAAAAAA4AAgAAAARAAAAAAA5AAgAAAARAAAAAAA6AAgAAAARAAAAAAA7AAgAAAARAAAAAAA8AAgAAAARAAAAAAA9AAgAAAARAAAAAAA+AAgAAAARAAAAAAA/AAgAAAARAAAAAABAAAgAAAARAAAAAABBAAgAAAARAAAAAABCAAgAAAARAAAAAABDAAgAAAARAAAAAABEAAgAAAARAAAAAABFAAgAAAARAAAAAABGAAgAAAARAAAAAABHAAgAAAARAAAAAABIAAgAAAARAAAAAABJAAgAAAARAAAAAABKAAgAAAARAAAAAABLAAgAAAARAAAAAABMAAgAAAARAAAAAABNAAgAAAARAAAAAABOAAgAAAARAAAAAABPAAgAAAARAAAAAABQAAgAAAARAAAAAABRAAgAAAARAAAAAABSAAgAAAARAAAAAABTAAgAAAARAAAAAABUAAgAAAARAAAAAABVAAgAAAARAAAAAABWAAgAAAARAAAAAABXAAgAAAARAAAAAABYAAgAAAARAAAAAABZAAgAAAARAAAAAABaAAgAAAARAAAAAABbAAgAAAARAAAAAABcAAgAAAARAAAAAABdAAgAAAARAAAAAABeAAgAAAARAAAAAABfAAgAAAARAAAAAABgAAgAAAARAAAAAABhAAgAAAARAAAAAABiAAgAAAARAAAAAABjAAgAAAARAAAAAABkAAgAAAARAAAAAABlAAgAAAARAAAAAABmAAgAAAARAAAAAABnAAgAAAARAAAAAABoAAgAAAARAAAAAABpAAgAAAARAAAAAABqAAgAAAARAAAAAABrAAgAAAARAAAAAABsAAgAAAARAAAAAABtAAgAAAARAAAAAABuAAgAAAARAAAAAABvAAgAAAARAAAAAABwAAgAAAARAAAAAABxAAgAAAARAAAAAAByAAgAAAASAAAAAAA1AAQAAAASAAAAAAAiAAcAAAASAAAAAAAAAAkAAAARAAEAAAABAAkAAAARAAEAAAACAAkAAAARAAEAAAADAAkAAAARAAEAAAAEAAkAAAARAAEAAAAFAAkAAAARAAEAAAAGAAkAAAARAAEAAAAHAAkAAAARAAEAAAAIAAkAAAARAAEAAAAJAAkAAAARAAEAAAAKAAkAAAARAAEAAAALAAkAAAARAAEAAAAMAAkAAAARAAEAAAANAAkAAAARAAEAAAAOAAkAAAARAAEAAAAPAAkAAAARAAEAAAAQAAkAAAARAAEAAAARAAkAAAARAAEAAAASAAkAAAARAAEAAAATAAkAAAARAAEAAAAUAAkAAAARAAEAAAAVAAkAAAARAAEAAAAWAAkAAAARAAEAAAAXAAkAAAARAAEAAAAYAAkAAAARAAEAAAAZAAkAAAARAAEAAAAaAAkAAAARAAEAAAAbAAkAAAARAAEAAAAcAAkAAAARAAEAAAAdAAkAAAARAAEAAAAeAAkAAAARAAEAAAAfAAkAAAARAAEAAAAgAAkAAAARAAEAAAAhAAkAAAARAAEAAAAiAAkAAAARAAEAAAAaAAgAAAARAAEAAAAbAAgAAAARAAEAAAAcAAgAAAARAAEAAAAdAAgAAAARAAEAAAAeAAgAAAARAAEAAAAfAAgAAAARAAEAAAAgAAgAAAARAAEAAAAhAAgAAAARAAEAAAAiAAgAAAARAAEAAAAZAAgAAAARAAEAAAAZAAcAAAAQAAAAAAA0AAQAAAAQAAAAAAA0AAUAAAAQAAEAAAA0AAYAAAAQAAEAAAA0AAcAAAAQAAEAAAA1AAUAAAASAAEAAAA1AAYAAAASAAEAAAA1AAcAAAASAAEAAAA0AAgAAAARAAEAAAA1AAgAAAARAAEAAAAjAAkAAAARAAEAAAAkAAkAAAARAAEAAAAlAAkAAAARAAEAAAAmAAkAAAARAAEAAAAnAAkAAAARAAEAAAAoAAkAAAARAAEAAAApAAkAAAARAAEAAAAqAAkAAAARAAEAAAArAAkAAAARAAEAAAAsAAkAAAARAAEAAAAtAAkAAAARAAEAAAAuAAkAAAARAAEAAAAvAAkAAAARAAEAAAAwAAkAAAARAAEAAAAxAAkAAAARAAEAAAAyAAkAAAARAAEAAAAzAAkAAAARAAEAAAA0AAkAAAARAAEAAAA1AAkAAAARAAEAAAA2AAkAAAARAAEAAAA3AAkAAAARAAEAAAA4AAkAAAARAAEAAAA5AAkAAAARAAEAAAA6AAkAAAARAAEAAAA7AAkAAAARAAEAAAA8AAkAAAARAAEAAAA9AAkAAAARAAEAAAA+AAkAAAARAAEAAAA/AAkAAAARAAEAAABAAAkAAAARAAEAAABBAAkAAAARAAEAAABCAAkAAAARAAEAAABDAAkAAAARAAEAAABEAAkAAAARAAEAAABFAAkAAAARAAEAAABGAAkAAAARAAEAAABHAAkAAAARAAEAAABIAAkAAAARAAEAAABJAAkAAAARAAEAAABKAAkAAAARAAEAAABLAAkAAAARAAEAAABMAAkAAAARAAEAAABNAAkAAAARAAEAAABOAAkAAAARAAEAAABPAAkAAAARAAEAAABQAAkAAAARAAEAAABRAAkAAAARAAEAAABSAAkAAAARAAEAAABTAAkAAAARAAEAAABUAAkAAAARAAEAAABVAAkAAAARAAEAAABWAAkAAAARAAEAAABXAAkAAAARAAEAAABYAAkAAAARAAEAAABZAAkAAAARAAEAAABaAAkAAAARAAEAAABbAAkAAAARAAEAAABcAAkAAAARAAEAAABdAAkAAAARAAEAAABeAAkAAAARAAEAAABfAAkAAAARAAEAAABgAAkAAAARAAEAAABhAAkAAAARAAEAAABiAAkAAAARAAEAAABjAAkAAAARAAEAAABkAAkAAAARAAEAAABlAAkAAAARAAEAAABmAAkAAAARAAEAAABnAAkAAAARAAEAAABoAAkAAAARAAEAAABpAAkAAAARAAEAAABqAAkAAAARAAEAAABrAAkAAAARAAEAAABsAAkAAAARAAEAAABtAAkAAAARAAEAAABuAAkAAAARAAEAAABvAAkAAAARAAEAAABwAAkAAAARAAEAAABxAAkAAAARAAEAAAByAAkAAAASAAEAAAByAAoAAAASAAEAAABxAAoAAAARAAEAAABwAAoAAAARAAEAAABvAAoAAAARAAEAAABuAAoAAAARAAEAAABtAAoAAAARAAEAAABsAAoAAAARAAEAAABrAAoAAAARAAEAAABqAAoAAAARAAEAAABpAAoAAAARAAEAAABoAAoAAAARAAEAAABnAAoAAAARAAEAAABmAAoAAAARAAEAAABlAAoAAAARAAEAAABkAAoAAAARAAEAAABjAAoAAAARAAEAAABiAAoAAAARAAEAAABhAAoAAAARAAEAAABgAAoAAAARAAEAAABfAAoAAAARAAEAAABeAAoAAAARAAEAAABdAAoAAAARAAEAAABcAAoAAAARAAEAAABbAAoAAAARAAEAAABaAAoAAAARAAEAAABZAAoAAAARAAEAAABYAAoAAAARAAEAAABXAAoAAAARAAEAAABWAAoAAAARAAEAAABVAAoAAAARAAEAAABUAAoAAAARAAEAAABTAAoAAAARAAEAAABSAAoAAAARAAEAAABRAAoAAAARAAEAAABQAAoAAAARAAEAAABPAAoAAAARAAEAAABOAAoAAAARAAEAAABNAAoAAAARAAEAAABMAAoAAAARAAEAAABLAAoAAAARAAEAAABKAAoAAAARAAEAAABJAAoAAAARAAEAAABIAAoAAAARAAEAAABHAAoAAAARAAEAAABGAAoAAAARAAEAAABFAAoAAAARAAEAAABEAAoAAAARAAEAAABDAAoAAAARAAEAAABCAAoAAAARAAEAAABBAAoAAAARAAEAAABAAAoAAAARAAEAAAA/AAoAAAARAAEAAAA+AAoAAAARAAEAAAA9AAoAAAARAAEAAAA8AAoAAAARAAEAAAA7AAoAAAARAAEAAAA6AAoAAAARAAEAAAA5AAoAAAARAAEAAAA4AAoAAAARAAEAAAA3AAoAAAARAAEAAAA2AAoAAAARAAEAAAA1AAoAAAARAAEAAAA0AAoAAAARAAEAAAAzAAoAAAARAAEAAAAyAAoAAAARAAEAAAAxAAoAAAARAAEAAAAwAAoAAAARAAEAAAAvAAoAAAARAAEAAAAuAAoAAAARAAEAAAAtAAoAAAARAAEAAAAsAAoAAAARAAEAAAArAAoAAAARAAEAAAAqAAoAAAARAAEAAAApAAoAAAARAAEAAAAoAAoAAAARAAEAAAAnAAoAAAARAAEAAAAmAAoAAAARAAEAAAAlAAoAAAARAAEAAAAkAAoAAAARAAEAAAAjAAoAAAARAAEAAAAiAAoAAAARAAEAAAAhAAoAAAARAAEAAAAgAAoAAAARAAEAAAAfAAoAAAARAAEAAAAeAAoAAAARAAEAAAAdAAoAAAARAAEAAAAcAAoAAAARAAEAAAAbAAoAAAARAAEAAAAaAAoAAAARAAEAAAAZAAoAAAARAAEAAAAYAAoAAAARAAEAAAAXAAoAAAARAAEAAAAWAAoAAAARAAEAAAAVAAoAAAARAAEAAAAUAAoAAAARAAEAAAATAAoAAAARAAEAAAASAAoAAAARAAEAAAARAAoAAAARAAEAAAAQAAoAAAARAAEAAAAPAAoAAAARAAEAAAAOAAoAAAARAAEAAAANAAoAAAARAAEAAAAMAAoAAAARAAEAAAALAAoAAAARAAEAAAAKAAoAAAARAAEAAAAJAAoAAAARAAEAAAAIAAoAAAARAAEAAAAHAAoAAAARAAEAAAAGAAoAAAARAAEAAAAFAAoAAAARAAEAAAAEAAoAAAARAAEAAAADAAoAAAARAAEAAAACAAoAAAARAAEAAAABAAoAAAARAAEAAAAAAAoAAAARAAEAAAB7AAMAAAAQAAAAAAB8AAMAAAASAAAAAAB7AAQAAAAQAAEAAAB7AAUAAAAQAAEAAAB7AAYAAAAQAAEAAAB7AAcAAAAQAAEAAAB7AAgAAAAQAAEAAAB7AAkAAAAQAAEAAAB7AAoAAAAQAAEAAAB7AAsAAAAQAAEAAAB7AAwAAAASAAAAADB8AAwAAAARAAAAADB9AAwAAAARAAAAADB+AAwAAAARAAAAADB/AAwAAAARAAAAADCAAAwAAAARAAAAADCBAAwAAAARAAAAADCCAAwAAAARAAAAADCDAAwAAAARAAAAADCEAAwAAAARAAAAADCFAAwAAAARAAAAADCGAAwAAAARAAAAADCHAAwAAAARAAAAADCIAAwAAAARAAAAADCJAAwAAAARAAAAADCKAAwAAAARAAAAADCLAAwAAAARAAAAADCMAAwAAAARAAAAADCNAAwAAAARAAAAADCOAAwAAAARAAAAADCPAAwAAAARAAAAADCQAAwAAAARAAAAADCRAAwAAAARAAAAADCSAAwAAAARAAAAADCTAAwAAAARAAAAADCUAAwAAAAQAAAAADCUAAsAAAASAAEAAACUAAoAAAASAAEAAACSAAsAAAARAAAAAACRAAsAAAARAAAAAACQAAsAAAARAAAAAACPAAsAAAARAAAAAACOAAsAAAARAAAAAACNAAsAAAARAAAAAACMAAsAAAARAAAAAACLAAsAAAARAAAAAACKAAsAAAARAAAAAACJAAsAAAARAAAAAACIAAsAAAARAAAAAACHAAsAAAARAAAAAACGAAsAAAARAAAAAACFAAsAAAARAAAAAACEAAsAAAARAAAAAACDAAsAAAARAAAAAACCAAsAAAARAAAAAACBAAsAAAARAAAAAACAAAsAAAARAAAAAAB/AAoAAAASAAAAAAB+AAkAAAASAAAAAAB9AAgAAAASAAAAAAB8AAQAAAASAAEAAAB8AAUAAAASAAEAAAB8AAYAAAASAAEAAAB8AAcAAAASAAEAAAB8AAgAAAARAAEAAAB8AAkAAAARAAEAAAB8AAoAAAARAAEAAAB8AAsAAAARAAEAAAB9AAsAAAARAAEAAAB+AAsAAAARAAEAAAB/AAsAAAARAAEAAAB+AAoAAAARAAEAAAB9AAoAAAARAAEAAAB9AAkAAAARAAEAAACBAAgAAAAQAAAAAACCAAgAAAARAAAAAACDAAgAAAARAAAAAACEAAgAAAARAAAAAACFAAgAAAARAAAAAACGAAgAAAARAAAAAACHAAgAAAARAAAAAACIAAgAAAARAAAAAACJAAgAAAARAAAAAACKAAgAAAARAAAAAACLAAgAAAARAAAAAACMAAgAAAARAAAAAACNAAgAAAARAAAAAACOAAgAAAARAAAAAACPAAcAAAAQAAAAAACQAAYAAAAQAAAAAACRAAUAAAAQAAAAAACSAAQAAAAQAAAAAACTAAMAAAAQAAAAAACUAAIAAAAQAAAAAACVAAEAAAAQAAAAAACWAAAAAAAQAAAAAACXAP//AAAQAAAAAACYAP7/AAAQAAAAAACZAP3/AAAQAAAAAACaAPz/AAAQAAAAAACbAPv/AAAQAAAAAACcAPv/AAASAAAAAACcAPz/AAASAAEAAACcAP3/AAASAAEAAACcAP7/AAASAAEAAACcAP//AAASAAEAAACcAAAAAAASAAEAAACcAAEAAAASAAEAAACcAAIAAAASAAEAAACcAAMAAAASAAEAAACcAAQAAAASAAEAAACcAAUAAAAQAAAAADCbAAUAAAARAAAAADCaAAUAAAARAAAAADCZAAUAAAARAAAAADCYAAUAAAARAAAAADCXAAUAAAARAAAAADCWAAUAAAARAAAAADCVAAUAAAARAAAAADCUAAUAAAARAAAAADCSAAYAAAARAAAAADCQAAkAAAARAAAAADCPAAkAAAARAAAAADCOAAkAAAARAAAAADCNAAkAAAARAAAAADCMAAkAAAARAAAAADCLAAkAAAARAAAAADCKAAkAAAARAAAAADCJAAkAAAARAAAAADCIAAkAAAARAAAAADCHAAkAAAARAAAAADCGAAkAAAARAAAAADCFAAkAAAARAAAAADCEAAkAAAARAAAAADCDAAkAAAARAAAAADCCAAkAAAARAAAAADCBAAkAAAASAAAAADCGAP7/AAASAAAAADCRAAkAAAAQAAAAADCTAAYAAAAQAAAAADCVAP7/AAAQAAAAADCqAAkAAAAQAAAAADCVAAkAAAARAAAAADCWAAkAAAARAAAAADCXAAkAAAARAAAAADCYAAkAAAARAAAAADCZAAkAAAARAAAAADCaAAkAAAARAAAAADCbAAkAAAARAAAAADCcAAkAAAARAAAAADCdAAkAAAARAAAAADCeAAkAAAARAAAAADCfAAkAAAARAAAAADCgAAkAAAARAAAAADChAAkAAAARAAAAADCiAAkAAAARAAAAADCjAAkAAAARAAAAADCkAAkAAAARAAAAADClAAkAAAARAAAAADCmAAkAAAARAAAAADCnAAkAAAARAAAAADCoAAkAAAARAAAAADCpAAkAAAARAAAAADCHAP7/AAARAAAAADCIAP7/AAARAAAAADCJAP7/AAARAAAAADCKAP7/AAARAAAAADCLAP7/AAARAAAAADCMAP7/AAARAAAAADCNAP7/AAARAAAAADCOAP7/AAARAAAAADCPAP7/AAARAAAAADCQAP7/AAARAAAAADCRAP7/AAARAAAAADCSAP7/AAARAAAAADCTAP7/AAARAAAAADCUAP7/AAARAAAAADCRAPv/AAARAAAAAACQAPv/AAARAAAAAACPAPv/AAARAAAAAACOAPv/AAARAAAAAACNAPv/AAARAAAAAACMAPv/AAARAAAAAACLAPv/AAARAAAAAACKAPv/AAARAAAAAACJAPv/AAARAAAAAACIAPv/AAARAAAAAACHAPv/AAARAAAAAACoAAgAAAARAAAAAACnAAgAAAARAAAAAACmAAgAAAARAAAAAAClAAgAAAARAAAAAACkAAgAAAARAAAAAACjAAgAAAARAAAAAACiAAgAAAARAAAAAAChAAgAAAARAAAAAACgAAgAAAARAAAAAACfAAgAAAARAAAAAACeAAgAAAARAAAAAACcAAcAAAARAAAAAACbAAcAAAARAAAAAACaAAcAAAARAAAAAACZAAcAAAARAAAAAACYAAcAAAARAAAAAACXAAcAAAARAAAAAACWAAcAAAARAAAAAACUAAgAAAARAAAAAACTAAgAAAAQAAAAAACVAAcAAAAQAAAAAACpAAIAAAAQAAAAAACGAPv/AAAQAAAAAACSAPv/AAASAAAAAACTAPz/AAASAAAAAACVAP3/AAASAAAAAACUAP3/AAARAAAAAACqAAIAAAASAAAAAACdAAcAAAASAAAAAACdAAgAAAARAAEAAACcAAgAAAARAAEAAACbAAgAAAARAAEAAACaAAgAAAARAAEAAACZAAgAAAARAAEAAACYAAgAAAARAAEAAACXAAgAAAARAAEAAACWAAgAAAARAAEAAACVAAgAAAARAAEAAACUAAkAAAARAAEAAACTAAkAAAAQAAEAAACTAAoAAAAQAAEAAACTAAsAAAARAAEAAACPAAgAAAARAAEAAACQAAgAAAARAAEAAACQAAcAAAARAAEAAACRAAYAAAARAAEAAACSAAUAAAARAAEAAACTAAUAAAARAAEAAACTAAQAAAARAAEAAACbAPz/AAARAAEAAACbAP3/AAARAAEAAACbAP7/AAARAAEAAACbAP//AAARAAEAAACbAAAAAAARAAEAAACbAAEAAAARAAEAAACbAAIAAAARAAEAAACbAAMAAAARAAEAAACbAAQAAAARAAEAAACaAAQAAAARAAEAAACZAAQAAAARAAEAAACYAAQAAAARAAEAAACXAAQAAAARAAEAAACWAAQAAAARAAEAAACVAAQAAAARAAEAAACUAAQAAAARAAEAAACUAAMAAAARAAEAAACVAAMAAAARAAEAAACWAAMAAAARAAEAAACXAAMAAAARAAEAAACYAAMAAAARAAEAAACZAAMAAAARAAEAAACaAAMAAAARAAEAAACaAAIAAAARAAEAAACaAAEAAAARAAEAAACaAAAAAAARAAEAAACaAP//AAARAAEAAACaAP7/AAARAAEAAACaAP3/AAARAAEAAACZAP7/AAARAAEAAACZAP//AAARAAEAAACZAAAAAAARAAEAAACZAAEAAAARAAEAAACZAAIAAAARAAEAAACYAAEAAAARAAEAAACYAAAAAAARAAEAAACYAP//AAARAAEAAACYAAIAAAARAAEAAACXAAIAAAARAAEAAACXAAEAAAARAAEAAACXAAAAAAARAAEAAACWAAIAAAARAAEAAACWAAEAAAARAAEAAACVAAIAAAARAAEAAACTAP3/AAARAAEAAACSAP3/AAARAAEAAACRAP3/AAARAAEAAACQAP3/AAARAAEAAACPAP3/AAARAAEAAACOAP3/AAARAAEAAACNAP3/AAARAAEAAACMAP3/AAARAAEAAACLAP3/AAARAAEAAACKAP3/AAARAAEAAACJAP3/AAARAAEAAACIAP3/AAARAAEAAACHAP3/AAARAAEAAACHAPz/AAARAAEAAACIAPz/AAARAAEAAACJAPz/AAARAAEAAACKAPz/AAARAAEAAACLAPz/AAARAAEAAACMAPz/AAARAAEAAACNAPz/AAARAAEAAACOAPz/AAARAAEAAACPAPz/AAARAAEAAACQAPz/AAARAAEAAACRAPz/AAARAAEAAACSAPz/AAARAAEAAACGAPz/AAAQAAEAAACGAP3/AAAQAAEAAACRAAcAAAASAAEAAACRAAgAAAASAAEAAACqAAMAAAASAAEAAACqAAQAAAASAAEAAACqAAUAAAASAAEAAACqAAYAAAASAAEAAACqAAcAAAASAAEAAACqAAgAAAASAAEAAACpAAMAAAAQAAEAAACpAAQAAAAQAAEAAACpAAUAAAAQAAEAAACpAAYAAAAQAAEAAACpAAcAAAAQAAEAAACpAAgAAAARAAEAAAAAAAAAAAAcAA8AAAA=") +tile_map_data = PackedByteArray("AAAAAAgAAAARAAAAAAABAAgAAAARAAAAAAACAAgAAAARAAAAAAADAAgAAAARAAAAAAAEAAgAAAARAAAAAAAFAAgAAAARAAAAAAAGAAgAAAARAAAAAAAHAAgAAAARAAAAAAAIAAgAAAARAAAAAAAJAAgAAAARAAAAAAAKAAgAAAARAAEAAAALAAgAAAARAAEAAAAMAAgAAAARAAAAAAANAAgAAAARAAAAAAAOAAgAAAARAAAAAAAPAAgAAAARAAAAAAAQAAgAAAARAAAAAAARAAgAAAARAAAAAAASAAgAAAARAAAAAAATAAgAAAARAAAAAAAUAAgAAAARAAAAAAAVAAgAAAARAAAAAAAWAAgAAAARAAAAAAAXAAgAAAARAAAAAAAYAAgAAAARAAAAAAAaAAcAAAARAAAAAAAbAAcAAAARAAAAAAAcAAcAAAARAAAAAAAdAAcAAAARAAAAAAAeAAcAAAARAAAAAAAfAAcAAAARAAAAAAAgAAcAAAARAAAAAAAhAAcAAAARAAAAAAAjAAgAAAARAAAAAAAkAAgAAAARAAAAAAAlAAgAAAARAAAAAAAmAAgAAAARAAAAAAAnAAgAAAARAAAAAAAoAAgAAAARAAAAAAApAAgAAAARAAAAAAAqAAgAAAARAAAAAAArAAgAAAARAAAAAAAsAAgAAAARAAAAAAAtAAgAAAARAAAAAAAuAAgAAAARAAAAAAAvAAgAAAARAAAAAAAwAAgAAAARAAAAAAAxAAgAAAARAAAAAAAyAAgAAAARAAAAAAAzAAgAAAARAAAAAAA2AAgAAAARAAAAAAA3AAgAAAARAAAAAAA4AAgAAAASAAAAAAA1AAQAAAASAAAAAAAiAAcAAAASAAAAAAAAAAkAAAARAAEAAAABAAkAAAARAAEAAAACAAkAAAARAAEAAAADAAkAAAARAAEAAAAEAAkAAAARAAEAAAAFAAkAAAARAAEAAAAGAAkAAAARAAEAAAAHAAkAAAARAAEAAAAIAAkAAAARAAEAAAAJAAkAAAARAAEAAAAKAAkAAAARAAEAAAALAAkAAAARAAEAAAAMAAkAAAARAAEAAAANAAkAAAARAAEAAAAOAAkAAAARAAEAAAAPAAkAAAARAAEAAAAQAAkAAAARAAEAAAARAAkAAAARAAEAAAASAAkAAAARAAEAAAATAAkAAAARAAEAAAAUAAkAAAARAAEAAAAVAAkAAAARAAEAAAAWAAkAAAARAAEAAAAXAAkAAAARAAEAAAAYAAkAAAARAAEAAAAZAAkAAAARAAEAAAAaAAkAAAARAAEAAAAbAAkAAAARAAEAAAAcAAkAAAARAAEAAAAdAAkAAAARAAEAAAAeAAkAAAARAAEAAAAfAAkAAAARAAEAAAAgAAkAAAARAAEAAAAhAAkAAAARAAEAAAAiAAkAAAARAAEAAAAaAAgAAAARAAEAAAAbAAgAAAARAAEAAAAcAAgAAAARAAEAAAAdAAgAAAARAAEAAAAeAAgAAAARAAEAAAAfAAgAAAARAAEAAAAgAAgAAAARAAEAAAAhAAgAAAARAAEAAAAiAAgAAAARAAEAAAAZAAgAAAARAAEAAAAZAAcAAAAQAAAAAAA0AAQAAAAQAAAAAAA0AAUAAAAQAAEAAAA0AAYAAAAQAAEAAAA0AAcAAAAQAAEAAAA1AAUAAAASAAEAAAA1AAYAAAASAAEAAAA1AAcAAAASAAEAAAA0AAgAAAARAAEAAAA1AAgAAAARAAEAAAAjAAkAAAARAAEAAAAkAAkAAAARAAEAAAAlAAkAAAARAAEAAAAmAAkAAAARAAEAAAAnAAkAAAARAAEAAAAoAAkAAAARAAEAAAApAAkAAAARAAEAAAAqAAkAAAARAAEAAAArAAkAAAARAAEAAAAsAAkAAAARAAEAAAAtAAkAAAARAAEAAAAuAAkAAAARAAEAAAAvAAkAAAARAAEAAAAwAAkAAAARAAEAAAAxAAkAAAARAAEAAAAyAAkAAAARAAEAAAAzAAkAAAARAAEAAAA0AAkAAAARAAEAAAA1AAkAAAARAAEAAAA2AAkAAAARAAEAAAA3AAkAAAARAAEAAAA4AAkAAAASAAEAAAA4AAoAAAASAAEAAAA3AAoAAAARAAEAAAA2AAoAAAARAAEAAAA1AAoAAAARAAEAAAA0AAoAAAARAAEAAAAzAAoAAAARAAEAAAAyAAoAAAARAAEAAAAxAAoAAAARAAEAAAAwAAoAAAARAAEAAAAvAAoAAAARAAEAAAAuAAoAAAARAAEAAAAtAAoAAAARAAEAAAAsAAoAAAARAAEAAAArAAoAAAARAAEAAAAqAAoAAAARAAEAAAApAAoAAAARAAEAAAAoAAoAAAARAAEAAAAnAAoAAAARAAEAAAAmAAoAAAARAAEAAAAlAAoAAAARAAEAAAAkAAoAAAARAAEAAAAjAAoAAAARAAEAAAAiAAoAAAARAAEAAAAhAAoAAAARAAEAAAAgAAoAAAARAAEAAAAfAAoAAAARAAEAAAAeAAoAAAARAAEAAAAdAAoAAAARAAEAAAAcAAoAAAARAAEAAAAbAAoAAAARAAEAAAAaAAoAAAARAAEAAAAZAAoAAAARAAEAAAAYAAoAAAARAAEAAAAXAAoAAAARAAEAAAAWAAoAAAARAAEAAAAVAAoAAAARAAEAAAAUAAoAAAARAAEAAAATAAoAAAARAAEAAAASAAoAAAARAAEAAAARAAoAAAARAAEAAAAQAAoAAAARAAEAAAAPAAoAAAARAAEAAAAOAAoAAAARAAEAAAANAAoAAAARAAEAAAAMAAoAAAARAAEAAAALAAoAAAARAAEAAAAKAAoAAAARAAEAAAAJAAoAAAARAAEAAAAIAAoAAAARAAEAAAAHAAoAAAARAAEAAAAGAAoAAAARAAEAAAAFAAoAAAARAAEAAAAEAAoAAAARAAEAAAADAAoAAAARAAEAAAACAAoAAAARAAEAAAABAAoAAAARAAEAAAAAAAoAAAARAAEAAAB7AAMAAAAQAAAAAAB8AAMAAAASAAAAAAB7AAQAAAAQAAEAAAB7AAUAAAAQAAEAAAB7AAYAAAAQAAEAAAB7AAcAAAAQAAEAAAB7AAgAAAAQAAEAAAB7AAkAAAAQAAEAAAB7AAoAAAAQAAEAAAB7AAsAAAAQAAEAAAB7AAwAAAASAAAAADB8AAwAAAARAAAAADB9AAwAAAARAAAAADB+AAwAAAARAAAAADB/AAwAAAARAAAAADCAAAwAAAARAAAAADCBAAwAAAARAAAAADCCAAwAAAARAAAAADCDAAwAAAARAAAAADCEAAwAAAARAAAAADCFAAwAAAARAAAAADCGAAwAAAARAAAAADCHAAwAAAARAAAAADCIAAwAAAARAAAAADCJAAwAAAARAAAAADCKAAwAAAARAAAAADCLAAwAAAARAAAAADCMAAwAAAARAAAAADCNAAwAAAARAAAAADCOAAwAAAARAAAAADCPAAwAAAARAAAAADCQAAwAAAARAAAAADCRAAwAAAARAAAAADCSAAwAAAARAAAAADCTAAwAAAARAAAAADCUAAwAAAAQAAAAADCUAAsAAAASAAEAAACUAAoAAAASAAEAAACSAAsAAAARAAAAAACRAAsAAAARAAAAAACQAAsAAAARAAAAAACPAAsAAAARAAAAAACOAAsAAAARAAAAAACNAAsAAAARAAAAAACMAAsAAAARAAAAAACLAAsAAAARAAAAAACKAAsAAAARAAAAAACJAAsAAAARAAAAAACIAAsAAAARAAAAAACHAAsAAAARAAAAAACGAAsAAAARAAAAAACFAAsAAAARAAAAAACEAAsAAAARAAAAAACDAAsAAAARAAAAAACCAAsAAAARAAAAAACBAAsAAAARAAAAAACAAAsAAAARAAAAAAB/AAoAAAASAAAAAAB+AAkAAAASAAAAAAB9AAgAAAASAAAAAAB8AAQAAAASAAEAAAB8AAUAAAASAAEAAAB8AAYAAAASAAEAAAB8AAcAAAASAAEAAAB8AAgAAAARAAEAAAB8AAkAAAARAAEAAAB8AAoAAAARAAEAAAB8AAsAAAARAAEAAAB9AAsAAAARAAEAAAB+AAsAAAARAAEAAAB/AAsAAAARAAEAAAB+AAoAAAARAAEAAAB9AAoAAAARAAEAAAB9AAkAAAARAAEAAACBAAgAAAAQAAAAAACCAAgAAAARAAAAAACDAAgAAAARAAAAAACEAAgAAAARAAAAAACFAAgAAAARAAAAAACGAAgAAAARAAAAAACHAAgAAAARAAAAAACIAAgAAAARAAAAAACJAAgAAAARAAAAAACKAAgAAAARAAAAAACLAAgAAAARAAAAAACMAAgAAAARAAAAAACNAAgAAAARAAAAAACOAAgAAAARAAAAAACPAAcAAAAQAAAAAACQAAYAAAAQAAAAAACRAAUAAAAQAAAAAACSAAQAAAAQAAAAAACTAAMAAAAQAAAAAACUAAIAAAAQAAAAAACVAAEAAAAQAAAAAACWAAAAAAAQAAAAAACXAP//AAAQAAAAAACYAP7/AAAQAAAAAACZAP3/AAAQAAAAAACaAPz/AAAQAAAAAACbAPv/AAAQAAAAAACcAPv/AAASAAAAAACcAPz/AAASAAEAAACcAP3/AAASAAEAAACcAP7/AAASAAEAAACcAP//AAASAAEAAACcAAAAAAASAAEAAACcAAEAAAASAAEAAACcAAIAAAASAAEAAACcAAMAAAASAAEAAACcAAQAAAASAAEAAACcAAUAAAAQAAAAADCbAAUAAAARAAAAADCaAAUAAAARAAAAADCZAAUAAAARAAAAADCYAAUAAAARAAAAADCXAAUAAAARAAAAADCWAAUAAAARAAAAADCVAAUAAAARAAAAADCUAAUAAAARAAAAADCSAAYAAAARAAAAADCQAAkAAAARAAAAADCPAAkAAAARAAAAADCOAAkAAAARAAAAADCNAAkAAAARAAAAADCMAAkAAAARAAAAADCLAAkAAAARAAAAADCKAAkAAAARAAAAADCJAAkAAAARAAAAADCIAAkAAAARAAAAADCHAAkAAAARAAAAADCGAAkAAAARAAAAADCFAAkAAAARAAAAADCEAAkAAAARAAAAADCDAAkAAAARAAAAADCCAAkAAAARAAAAADCBAAkAAAASAAAAADCGAP7/AAASAAAAADCRAAkAAAAQAAAAADCTAAYAAAAQAAAAADCVAP7/AAAQAAAAADCqAAkAAAAQAAAAADCVAAkAAAARAAAAADCWAAkAAAARAAAAADCXAAkAAAARAAAAADCYAAkAAAARAAAAADCZAAkAAAARAAAAADCaAAkAAAARAAAAADCbAAkAAAARAAAAADCcAAkAAAARAAAAADCdAAkAAAARAAAAADCeAAkAAAARAAAAADCfAAkAAAARAAAAADCgAAkAAAARAAAAADChAAkAAAARAAAAADCiAAkAAAARAAAAADCjAAkAAAARAAAAADCkAAkAAAARAAAAADClAAkAAAARAAAAADCmAAkAAAARAAAAADCnAAkAAAARAAAAADCoAAkAAAARAAAAADCpAAkAAAARAAAAADCHAP7/AAARAAAAADCIAP7/AAARAAAAADCJAP7/AAARAAAAADCKAP7/AAARAAAAADCLAP7/AAARAAAAADCMAP7/AAARAAAAADCNAP7/AAARAAAAADCOAP7/AAARAAAAADCPAP7/AAARAAAAADCQAP7/AAARAAAAADCRAP7/AAARAAAAADCSAP7/AAARAAAAADCTAP7/AAARAAAAADCUAP7/AAARAAAAADCRAPv/AAARAAAAAACQAPv/AAARAAAAAACPAPv/AAARAAAAAACOAPv/AAARAAAAAACNAPv/AAARAAAAAACMAPv/AAARAAAAAACLAPv/AAARAAAAAACKAPv/AAARAAAAAACJAPv/AAARAAAAAACIAPv/AAARAAAAAACHAPv/AAARAAAAAACoAAgAAAARAAAAAACnAAgAAAARAAAAAACmAAgAAAARAAAAAAClAAgAAAARAAAAAACkAAgAAAARAAAAAACjAAgAAAARAAAAAACiAAgAAAARAAAAAAChAAgAAAARAAAAAACgAAgAAAARAAAAAACfAAgAAAARAAAAAACeAAgAAAARAAAAAACcAAcAAAARAAAAAACbAAcAAAARAAAAAACaAAcAAAARAAAAAACZAAcAAAARAAAAAACYAAcAAAARAAAAAACXAAcAAAARAAAAAACWAAcAAAARAAAAAACUAAgAAAARAAAAAACTAAgAAAAQAAAAAACVAAcAAAAQAAAAAACpAAIAAAAQAAAAAACGAPv/AAAQAAAAAACSAPv/AAASAAAAAACTAPz/AAASAAAAAACVAP3/AAASAAAAAACUAP3/AAARAAAAAACqAAIAAAASAAAAAACdAAcAAAASAAAAAACdAAgAAAARAAEAAACcAAgAAAARAAEAAACbAAgAAAARAAEAAACaAAgAAAARAAEAAACZAAgAAAARAAEAAACYAAgAAAARAAEAAACXAAgAAAARAAEAAACWAAgAAAARAAEAAACVAAgAAAARAAEAAACUAAkAAAARAAEAAACTAAkAAAAQAAEAAACTAAoAAAAQAAEAAACTAAsAAAARAAEAAACPAAgAAAARAAEAAACQAAgAAAARAAEAAACQAAcAAAARAAEAAACRAAYAAAARAAEAAACSAAUAAAARAAEAAACTAAUAAAARAAEAAACTAAQAAAARAAEAAACbAPz/AAARAAEAAACbAP3/AAARAAEAAACbAP7/AAARAAEAAACbAP//AAARAAEAAACbAAAAAAARAAEAAACbAAEAAAARAAEAAACbAAIAAAARAAEAAACbAAMAAAARAAEAAACbAAQAAAARAAEAAACaAAQAAAARAAEAAACZAAQAAAARAAEAAACYAAQAAAARAAEAAACXAAQAAAARAAEAAACWAAQAAAARAAEAAACVAAQAAAARAAEAAACUAAQAAAARAAEAAACUAAMAAAARAAEAAACVAAMAAAARAAEAAACWAAMAAAARAAEAAACXAAMAAAARAAEAAACYAAMAAAARAAEAAACZAAMAAAARAAEAAACaAAMAAAARAAEAAACaAAIAAAARAAEAAACaAAEAAAARAAEAAACaAAAAAAARAAEAAACaAP//AAARAAEAAACaAP7/AAARAAEAAACaAP3/AAARAAEAAACZAP7/AAARAAEAAACZAP//AAARAAEAAACZAAAAAAARAAEAAACZAAEAAAARAAEAAACZAAIAAAARAAEAAACYAAEAAAARAAEAAACYAAAAAAARAAEAAACYAP//AAARAAEAAACYAAIAAAARAAEAAACXAAIAAAARAAEAAACXAAEAAAARAAEAAACXAAAAAAARAAEAAACWAAIAAAARAAEAAACWAAEAAAARAAEAAACVAAIAAAARAAEAAACTAP3/AAARAAEAAACSAP3/AAARAAEAAACRAP3/AAARAAEAAACQAP3/AAARAAEAAACPAP3/AAARAAEAAACOAP3/AAARAAEAAACNAP3/AAARAAEAAACMAP3/AAARAAEAAACLAP3/AAARAAEAAACKAP3/AAARAAEAAACJAP3/AAARAAEAAACIAP3/AAARAAEAAACHAP3/AAARAAEAAACHAPz/AAARAAEAAACIAPz/AAARAAEAAACJAPz/AAARAAEAAACKAPz/AAARAAEAAACLAPz/AAARAAEAAACMAPz/AAARAAEAAACNAPz/AAARAAEAAACOAPz/AAARAAEAAACPAPz/AAARAAEAAACQAPz/AAARAAEAAACRAPz/AAARAAEAAACSAPz/AAARAAEAAACGAPz/AAAQAAEAAACGAP3/AAAQAAEAAACRAAcAAAASAAEAAACRAAgAAAASAAEAAACqAAMAAAASAAEAAACqAAQAAAASAAEAAACqAAUAAAASAAEAAACqAAYAAAASAAEAAACqAAcAAAASAAEAAACqAAgAAAASAAEAAACpAAMAAAAQAAEAAACpAAQAAAAQAAEAAACpAAUAAAAQAAEAAACpAAYAAAAQAAEAAACpAAcAAAAQAAEAAACpAAgAAAARAAEAAAAAAAAAAAAcAA8AAAAKAAcAAAAQAAAAAAALAAcAAAASAAAAAAA=") [node name="Door" parent="TileMapLayer" instance=ExtResource("11_jpc1n")] position = Vector2(0, 112) @@ -59,6 +61,11 @@ position = Vector2(2064, 112) target_scene = "res://GreenGreens.tscn" target_position = Vector2(0, 112) +[node name="DoorBoss" parent="TileMapLayer" instance=ExtResource("11_jpc1n")] +position = Vector2(104, 112) +target_scene = "res://GreenGreensBoss.tscn" +target_position = Vector2(0, 112) + [node name="Wall" type="TileMapLayer" parent="."] modulate = Color(1, 1, 1, 0.392157) tile_map_data = PackedByteArray("AAAAAP//AAAAAAAAAAABAP//AAAAAAAAAAACAP//AAAAAAAAAAADAP//AAAAAAAAAAAEAP//AAAAAAAAAAAFAP//AAAAAAAAAAAGAP//AAAAAAAAAAAHAP//AAAAAAAAAAAIAP//AAAAAAAAAAAJAP//AAAAAAAAAAAKAP//AAAAAAAAAAALAP//AAAAAAAAAAAMAP//AAAAAAAAAAANAP//AAAAAAAAAAAOAP//AAAAAAAAAAAPAP//AAAAAAAAAAAQAP//AAAAAAAAAAARAP//AAAAAAAAAAASAP//AAAAAAAAAAATAP//AAAAAAAAAAAUAP//AAAAAAAAAAAVAP//AAAAAAAAAAAWAP//AAAAAAAAAAAXAP//AAAAAAAAAAAYAP//AAAAAAAAAAAZAP//AAAAAAAAAAAaAP//AAAAAAAAAAAbAP//AAAAAAAAAAAcAP//AAAAAAAAAAAdAP//AAAAAAAAAAAeAP//AAAAAAAAAAAfAP//AAAAAAAAAAAgAP//AAAAAAAAAAAhAP//AAAAAAAAAAAiAP//AAAAAAAAAAAjAP//AAAAAAAAAAAkAP//AAAAAAAAAAAlAP//AAAAAAAAAAAmAP//AAAAAAAAAAAnAP//AAAAAAAAAAAoAP//AAAAAAAAAAApAP//AAAAAAAAAAAqAP//AAAAAAAAAAArAP//AAAAAAAAAAAsAP//AAAAAAAAAAD/////AAAAAAAAAAAtAP//AAAAAAAAAAAuAP//AAAAAAAAAAAvAP//AAAAAAAAAAAwAP//AAAAAAAAAAAxAP//AAAAAAAAAAAyAP//AAAAAAAAAAAzAP//AAAAAAAAAAA0AP//AAAAAAAAAAA1AP//AAAAAAAAAAA2AP//AAAAAAAAAAA3AP//AAAAAAAAAAA4AP//AAAAAAAAAAA5AP//AAAAAAAAAAA6AP//AAAAAAAAAAA7AP//AAAAAAAAAAA8AP//AAAAAAAAAAA9AP//AAAAAAAAAAA+AP//AAAAAAAAAAA/AP//AAAAAAAAAABAAP//AAAAAAAAAABBAP//AAAAAAAAAABCAP//AAAAAAAAAABDAP//AAAAAAAAAAD//wAAAAAAAAAAAAD//wEAAAAAAAAAAAD//wIAAAAAAAAAAAD//wMAAAAAAAAAAAD//wQAAAAAAAAAAAD//wUAAAAAAAAAAAD//wYAAAAAAAAAAABEAP//AAAAAAAAAABFAP//AAAAAAAAAABGAP//AAAAAAAAAABHAP//AAAAAAAAAABIAP//AAAAAAAAAABJAP//AAAAAAAAAABKAP//AAAAAAAAAABLAP//AAAAAAAAAABMAP//AAAAAAAAAABNAP//AAAAAAAAAABOAP//AAAAAAAAAABPAP//AAAAAAAAAABQAP//AAAAAAAAAABRAP//AAAAAAAAAABSAP//AAAAAAAAAABTAP//AAAAAAAAAABUAP//AAAAAAAAAABVAP//AAAAAAAAAABWAP//AAAAAAAAAABXAP//AAAAAAAAAABYAP//AAAAAAAAAABZAP//AAAAAAAAAABaAP//AAAAAAAAAABbAP//AAAAAAAAAABcAP//AAAAAAAAAABdAP//AAAAAAAAAABeAP//AAAAAAAAAABfAP//AAAAAAAAAABgAP//AAAAAAAAAABhAP//AAAAAAAAAABiAP//AAAAAAAAAABjAP//AAAAAAAAAABkAP//AAAAAAAAAABlAP//AAAAAAAAAABmAP//AAAAAAAAAABnAP//AAAAAAAAAABoAP//AAAAAAAAAABpAP//AAAAAAAAAABqAP//AAAAAAAAAABrAP//AAAAAAAAAABsAP//AAAAAAAAAABtAP//AAAAAAAAAABuAP//AAAAAAAAAABvAP//AAAAAAAAAABwAP//AAAAAAAAAABxAP//AAAAAAAAAAByAP//AAAAAAAAAAD//wcAAAAAAAAAAAD//wgAAAAAAAAAAAD//wkAAAAAAAAAAAA=") @@ -85,9 +92,24 @@ position = Vector2(816, 120) [node name="Enemy5" parent="Enemies" instance=ExtResource("13_bft13")] position = Vector2(229, 104) +[node name="Enemy6" parent="Enemies" instance=ExtResource("13_bft13")] +position = Vector2(648, 120) + +[node name="Enemy7" parent="Enemies" instance=ExtResource("13_bft13")] +position = Vector2(848, 56) + [node name="Area2D" type="Area2D" parent="."] +collision_layer = 0 [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] shape = SubResource("RectangleShape2D_gog7l") +[node name="Area2D2" type="Area2D" parent="."] +position = Vector2(2112, 120) +collision_layer = 0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D2"] +shape = SubResource("RectangleShape2D_208d0") + [connection signal="body_entered" from="Area2D" to="." method="_on_area_2d_body_entered"] +[connection signal="body_entered" from="Area2D2" to="." method="_on_area_2d_2_body_entered"] diff --git a/GreenGreensBoss.tscn b/GreenGreensBoss.tscn new file mode 100644 index 0000000..432542b --- /dev/null +++ b/GreenGreensBoss.tscn @@ -0,0 +1,88 @@ +[gd_scene load_steps=15 format=4 uid="uid://dcmds316bydvu"] + +[ext_resource type="Script" path="res://green_greens_boss.gd" id="1_4ry16"] +[ext_resource type="PackedScene" uid="uid://bb8nnbftq04df" path="res://HUD.tscn" id="2_ne1kh"] +[ext_resource type="Texture2D" uid="uid://xdehc2ineqjf" path="res://Assets/Enemies/green-greens-boss.png" id="3_rtuo7"] +[ext_resource type="PackedScene" uid="uid://b1si77qfmut5x" path="res://Assets/Map/TileMapLayer.tscn" id="5_hkgd5"] +[ext_resource type="PackedScene" uid="uid://7ndl8hvg4e38" path="res://Door.tscn" id="6_ga2l4"] +[ext_resource type="Script" path="res://whispy_woods.gd" id="7_ho0w7"] +[ext_resource type="Texture2D" uid="uid://blq6u731g8p1d" path="res://Assets/Map/green_greens/inner-01.png" id="7_yif17"] +[ext_resource type="Script" path="res://Assets/Map/tile_map_layer.gd" id="8_au054"] +[ext_resource type="SpriteFrames" uid="uid://bi6050716beom" path="res://whispy_woods_sprite_frames.tres" id="8_rne3o"] +[ext_resource type="PackedScene" uid="uid://fe6exyigjb72" path="res://Player.tscn" id="9_b0r1m"] +[ext_resource type="Texture2D" uid="uid://cr8mi3iehl3q2" path="res://Assets/Enemies/whispy-woods-tear.png" id="9_iwq4r"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_hnnog"] +texture = ExtResource("7_yif17") +0:0/0 = 0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) + +[sub_resource type="TileSet" id="TileSet_dimm0"] +physics_layer_0/collision_layer = 16 +physics_layer_0/collision_mask = 0 +sources/0 = SubResource("TileSetAtlasSource_hnnog") + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_na0iy"] +size = Vector2(40, 96) + +[node name="GreenGreensBoss" type="Node2D"] +script = ExtResource("1_4ry16") + +[node name="HUD" parent="." instance=ExtResource("2_ne1kh")] + +[node name="TileMapLayer" parent="." instance=ExtResource("5_hkgd5")] +tile_map_data = PackedByteArray("AAAAAAgAAAARAAAAAAABAAgAAAARAAAAAAACAAgAAAARAAAAAAADAAgAAAARAAAAAAAEAAgAAAARAAAAAAAFAAgAAAARAAAAAAAGAAgAAAARAAAAAAAHAAgAAAARAAAAAAAIAAgAAAARAAAAAAAJAAgAAAARAAAAAAA=") + +[node name="Wall" type="TileMapLayer" parent="."] +modulate = Color(1, 1, 1, 0.392157) +position = Vector2(0, -16) +tile_map_data = PackedByteArray("AAD//wIAAAAAAAAAAAD//wMAAAAAAAAAAAD//wQAAAAAAAAAAAD//wUAAAAAAAAAAAD//wYAAAAAAAAAAAD//wcAAAAAAAAAAAAKAAIAAAAAAAAAAAAKAAMAAAAAAAAAAAAKAAQAAAAAAAAAAAAKAAUAAAAAAAAAAAAKAAYAAAAAAAAAAAAKAAcAAAAAAAAAAAD//wgAAAAAAAAAAAAKAAgAAAAAAAAAAAD//wEAAAAAAAAAAAAKAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAEAAAAAAAAAAAACAAEAAAAAAAAAAAADAAEAAAAAAAAAAAAEAAEAAAAAAAAAAAAFAAEAAAAAAAAAAAAGAAEAAAAAAAAAAAAHAAEAAAAAAAAAAAAIAAEAAAAAAAAAAAAJAAEAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAACAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAA=") +tile_set = SubResource("TileSet_dimm0") +script = ExtResource("8_au054") + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture_filter = 1 +position = Vector2(80, 80) +scale = Vector2(1, 1.00787) +texture = ExtResource("3_rtuo7") + +[node name="WhispyWoods" type="Area2D" parent="."] +collision_layer = 512 +collision_mask = 8 +script = ExtResource("7_ho0w7") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="WhispyWoods"] +position = Vector2(132, 80) +shape = SubResource("RectangleShape2D_na0iy") + +[node name="EyeLeft" type="AnimatedSprite2D" parent="WhispyWoods"] +texture_filter = 1 +position = Vector2(122, 72) +sprite_frames = ExtResource("8_rne3o") +animation = &"eye_open" + +[node name="Tear" type="Sprite2D" parent="WhispyWoods"] +visible = false +texture_filter = 1 +position = Vector2(132, 81) +texture = ExtResource("9_iwq4r") + +[node name="EyeRight" type="AnimatedSprite2D" parent="WhispyWoods"] +texture_filter = 1 +position = Vector2(130, 72) +sprite_frames = ExtResource("8_rne3o") +animation = &"eye_open" + +[node name="Mouth" type="AnimatedSprite2D" parent="WhispyWoods"] +texture_filter = 1 +position = Vector2(124, 98) +sprite_frames = ExtResource("8_rne3o") +animation = &"mouth_idle" + +[node name="Door" parent="." instance=ExtResource("6_ga2l4")] +position = Vector2(0, 112) +target_scene = "res://GreenGreens.tscn" +target_position = Vector2(104, 112) + +[node name="Player" parent="." instance=ExtResource("9_b0r1m")] +position = Vector2(32, 72) diff --git a/GreenGreensIntro.tscn b/GreenGreensIntro.tscn index 360cbbc..65e787d 100644 --- a/GreenGreensIntro.tscn +++ b/GreenGreensIntro.tscn @@ -1,7 +1,9 @@ -[gd_scene load_steps=3 format=3 uid="uid://b5hgmpqqdrrmd"] +[gd_scene load_steps=5 format=3 uid="uid://b5hgmpqqdrrmd"] [ext_resource type="Script" path="res://green_greens_intro.gd" id="1_ivro2"] [ext_resource type="Texture2D" uid="uid://dkequklv0hq3u" path="res://Assets/Map/intro.png" id="2_ckkki"] +[ext_resource type="FontFile" uid="uid://bhrdnknbdr40o" path="res://Assets/HUD/Minimal5x7.ttf" id="3_8d7gj"] +[ext_resource type="Texture2D" uid="uid://dw38mfygfkecc" path="res://icon_monochrome_light.svg" id="4_r67wl"] [node name="GreenGreensIntro" type="Node2D"] script = ExtResource("1_ivro2") @@ -12,3 +14,21 @@ position = Vector2(80, 72) texture = ExtResource("2_ckkki") region_enabled = true region_rect = Rect2(8, 8, 160, 144) + +[node name="Label" type="Label" parent="."] +texture_filter = 1 +offset_left = 71.0 +offset_top = 65.0 +offset_right = 81.0 +offset_bottom = 88.0 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("3_8d7gj") +theme_override_font_sizes/font_size = 16 +text = ". . +U" + +[node name="IconMonochromeLight" type="Sprite2D" parent="."] +texture_filter = 1 +position = Vector2(152, 136) +scale = Vector2(0.015625, 0.015625) +texture = ExtResource("4_r67wl") diff --git a/HP.tscn b/HP.tscn index 6f76361..b4eceba 100644 --- a/HP.tscn +++ b/HP.tscn @@ -1,11 +1,8 @@ -[gd_scene load_steps=5 format=3 uid="uid://c5d10tebryjlc"] +[gd_scene load_steps=4 format=3 uid="uid://c5d10tebryjlc"] [ext_resource type="Script" path="res://hp.gd" id="1_gx3f3"] [ext_resource type="Texture2D" uid="uid://blq0txbn7sqdk" path="res://Assets/HUD/hp.png" id="1_y6ic7"] -[ext_resource type="FontFile" uid="uid://ceinhnmc5wuas" path="res://Assets/HUD/Minimal3x5.ttf" id="2_gtstn"] - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8fkvy"] -content_margin_top = 1.0 +[ext_resource type="Texture2D" uid="uid://dqy7sy62yms28" path="res://Assets/HUD/hp-empty.png" id="3_wjwha"] [node name="HP" type="Control"] layout_mode = 3 @@ -22,16 +19,11 @@ offset_bottom = 8.0 texture = ExtResource("1_y6ic7") stretch_mode = 4 -[node name="Empty" type="Label" parent="."] +[node name="Empty" type="TextureRect" parent="."] visible = false +texture_filter = 1 layout_mode = 0 offset_right = 7.0 offset_bottom = 8.0 -theme_override_colors/font_color = Color(0, 0, 0, 1) -theme_override_constants/line_spacing = 0 -theme_override_fonts/font = ExtResource("2_gtstn") -theme_override_font_sizes/font_size = 8 -theme_override_styles/normal = SubResource("StyleBoxEmpty_8fkvy") -text = "-" -horizontal_alignment = 1 -vertical_alignment = 1 +texture = ExtResource("3_wjwha") +stretch_mode = 4 diff --git a/HUD.tscn b/HUD.tscn index 6e4665d..f462167 100644 --- a/HUD.tscn +++ b/HUD.tscn @@ -1,12 +1,14 @@ -[gd_scene load_steps=11 format=3 uid="uid://bb8nnbftq04df"] +[gd_scene load_steps=13 format=3 uid="uid://bb8nnbftq04df"] [ext_resource type="Texture2D" uid="uid://03ywpiydxqtr" path="res://Assets/HUD/score.png" id="1_1dnfp"] [ext_resource type="Script" path="res://hud.gd" id="1_yklat"] [ext_resource type="Texture2D" uid="uid://co0ut2jg74b7d" path="res://Assets/HUD/kirby.png" id="2_1sor8"] +[ext_resource type="Theme" uid="uid://c1jnbt5h4hwmi" path="res://Assets/HUD/theme.tres" id="2_q561o"] [ext_resource type="Texture2D" uid="uid://csacog6lnjxb8" path="res://Assets/HUD/life.png" id="3_hj6sq"] -[ext_resource type="FontFile" uid="uid://cskj32qqejbjx" path="res://Assets/HUD/Minimal5x5Monospaced.ttf" id="3_w433g"] [ext_resource type="Texture2D" uid="uid://tbmqbp685k2e" path="res://Assets/HUD/times.png" id="4_2nmud"] +[ext_resource type="PackedScene" uid="uid://ci6ik574uumq5" path="res://BossHPBar.tscn" id="4_81bor"] [ext_resource type="PackedScene" uid="uid://gu20rupju5t7" path="res://HPBar.tscn" id="4_aw45f"] +[ext_resource type="Texture2D" uid="uid://bmvik2d2p8vqp" path="res://Assets/HUD/boss.png" id="4_pbira"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3iriw"] bg_color = Color(1, 1, 1, 1) @@ -26,9 +28,10 @@ anchors_preset = 12 anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 -offset_top = -16.0 +offset_top = -18.0 grow_horizontal = 2 grow_vertical = 0 +theme = ExtResource("2_q561o") theme_override_styles/panel = SubResource("StyleBoxFlat_3iriw") [node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"] @@ -36,27 +39,55 @@ layout_mode = 2 theme_override_constants/separation = 0 [node name="Top" type="HBoxContainer" parent="PanelContainer/VBoxContainer"] +custom_minimum_size = Vector2(0, 9) layout_mode = 2 -[node name="TextureRect" type="TextureRect" parent="PanelContainer/VBoxContainer/Top"] +[node name="Left" type="CenterContainer" parent="PanelContainer/VBoxContainer/Top"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="Score" type="TextureRect" parent="PanelContainer/VBoxContainer/Top/Left"] texture_filter = 1 layout_mode = 2 size_flags_horizontal = 3 texture = ExtResource("1_1dnfp") -stretch_mode = 3 +stretch_mode = 2 -[node name="Score" type="Label" parent="PanelContainer/VBoxContainer/Top"] -unique_name_in_owner = true +[node name="Boss" type="TextureRect" parent="PanelContainer/VBoxContainer/Top/Left"] +visible = false +texture_filter = 1 layout_mode = 2 size_flags_horizontal = 3 +texture = ExtResource("4_pbira") +stretch_mode = 2 + +[node name="Container" type="Control" parent="PanelContainer/VBoxContainer/Top"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="Score" type="Label" parent="PanelContainer/VBoxContainer/Top/Container"] +unique_name_in_owner = true +texture_filter = 1 +layout_mode = 1 +offset_right = 51.0 +offset_bottom = 8.0 +size_flags_horizontal = 3 size_flags_vertical = 0 -theme_override_colors/font_color = Color(0, 0, 0, 1) -theme_override_fonts/font = ExtResource("3_w433g") -theme_override_font_sizes/font_size = 8 theme_override_styles/normal = SubResource("StyleBoxEmpty_8r301") text = "1337" horizontal_alignment = 2 +[node name="BossHPBar" parent="PanelContainer/VBoxContainer/Top/Container" instance=ExtResource("4_81bor")] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = 0.0 +grow_horizontal = 2 +grow_vertical = 2 + [node name="empty" type="Control" parent="PanelContainer/VBoxContainer/Top"] layout_mode = 2 size_flags_horizontal = 3 @@ -94,9 +125,7 @@ stretch_mode = 4 [node name="Life" type="Label" parent="PanelContainer/VBoxContainer/Bottom/Life"] unique_name_in_owner = true +texture_filter = 1 layout_mode = 2 -theme_override_colors/font_color = Color(0, 0, 0, 1) -theme_override_fonts/font = ExtResource("3_w433g") -theme_override_font_sizes/font_size = 8 theme_override_styles/normal = SubResource("StyleBoxEmpty_8k6bx") text = "99" diff --git a/KOPlane.tscn b/KOPlane.tscn deleted file mode 100644 index dd48356..0000000 --- a/KOPlane.tscn +++ /dev/null @@ -1,19 +0,0 @@ -[gd_scene load_steps=5 format=3 uid="uid://cjrb8n36og5f3"] - -[ext_resource type="Texture2D" uid="uid://dmpy27vxinj8f" path="res://Assets/Map/times.png" id="1_vrxw0"] -[ext_resource type="Script" path="res://ko_plane.gd" id="2_vjc1u"] - -[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_kns0k"] -texture = ExtResource("1_vrxw0") -0:0/0 = 0 -0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-6, 7, -6, 8, 6, 8, 6, 7) - -[sub_resource type="TileSet" id="TileSet_hjkjq"] -physics_layer_0/collision_layer = 32 -physics_layer_0/collision_mask = 0 -sources/1 = SubResource("TileSetAtlasSource_kns0k") - -[node name="DeathPlane" type="TileMapLayer"] -texture_filter = 1 -tile_set = SubResource("TileSet_hjkjq") -script = ExtResource("2_vjc1u") diff --git a/KnockoutPlane.tscn b/KnockoutPlane.tscn new file mode 100644 index 0000000..7e719f8 --- /dev/null +++ b/KnockoutPlane.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=5 format=3 uid="uid://cjrb8n36og5f3"] + +[ext_resource type="Texture2D" uid="uid://dmpy27vxinj8f" path="res://Assets/Map/times.png" id="1_vrxw0"] +[ext_resource type="Script" path="res://knockout_plane.gd" id="2_vjc1u"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_kns0k"] +texture = ExtResource("1_vrxw0") +0:0/0 = 0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-6, 7, -6, 8, 6, 8, 6, 7) + +[sub_resource type="TileSet" id="TileSet_hjkjq"] +physics_layer_0/collision_layer = 32 +physics_layer_0/collision_mask = 0 +sources/1 = SubResource("TileSetAtlasSource_kns0k") + +[node name="KnockoutPlane" type="TileMapLayer"] +texture_filter = 1 +tile_set = SubResource("TileSet_hjkjq") +script = ExtResource("2_vjc1u") diff --git a/Player.tscn b/Player.tscn index ec10378..19d5567 100644 --- a/Player.tscn +++ b/Player.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=53 format=3 uid="uid://fe6exyigjb72"] +[gd_scene load_steps=73 format=3 uid="uid://fe6exyigjb72"] [ext_resource type="Script" path="res://player.gd" id="1_d2vao"] [ext_resource type="Texture2D" uid="uid://tvalc858lt0n" path="res://Assets/Kirby/duck.png" id="1_wgfub"] [ext_resource type="Texture2D" uid="uid://gq77eigxyvci" path="res://Assets/Kirby/fall.png" id="2_udm1i"] [ext_resource type="Texture2D" uid="uid://c4gyxj3yaqiel" path="res://Assets/Kirby/idle.png" id="3_cldu0"] +[ext_resource type="Texture2D" uid="uid://du6cfirv2pq7i" path="res://Assets/Kirby/inflated-transition-02.png" id="3_xbxev"] [ext_resource type="Texture2D" uid="uid://kjgx1vhvtkuf" path="res://Assets/Kirby/jump.png" id="4_c4qo5"] [ext_resource type="Texture2D" uid="uid://ba2ivfvgaoak" path="res://Assets/Kirby/fly-01.png" id="4_ueynj"] [ext_resource type="Texture2D" uid="uid://bubv8f16w2cva" path="res://Assets/Kirby/enter-door.png" id="4_xbfs5"] @@ -16,32 +17,38 @@ [ext_resource type="Texture2D" uid="uid://b7rnngemyujar" path="res://Assets/Kirby/inflated-idle.png" id="8_vsb1l"] [ext_resource type="Texture2D" uid="uid://bplxl8ggrpoea" path="res://Assets/Kirby/inhale-01.png" id="8_xxs7c"] [ext_resource type="Texture2D" uid="uid://dm3xyxhejdyl8" path="res://Assets/Kirby/inflated-walk-01.png" id="9_4qud5"] +[ext_resource type="Texture2D" uid="uid://cvxxfk1qgqcti" path="res://Assets/Kirby/fly-exhale-01.png" id="9_6xjk3"] [ext_resource type="Texture2D" uid="uid://c60ctgi67fblt" path="res://Assets/Kirby/inflated-jump.png" id="9_rgn34"] [ext_resource type="AudioStream" uid="uid://cib0bm11wfubt" path="res://Assets/Sounds/fall.wav" id="9_t30y2"] [ext_resource type="Texture2D" uid="uid://drjw1f0xi078w" path="res://Assets/Kirby/inflated-walk-02.png" id="10_46wv3"] +[ext_resource type="Texture2D" uid="uid://b6ilregfg6lf5" path="res://Assets/Kirby/fly-exhale-02.png" id="10_fgigi"] [ext_resource type="AudioStream" uid="uid://2y0km5fcbw1t" path="res://Assets/Sounds/jump.wav" id="10_gmv3e"] +[ext_resource type="Texture2D" uid="uid://bdbp68mhgo5xb" path="res://Assets/Kirby/inflated-exhale-01.png" id="12_qswnu"] +[ext_resource type="Texture2D" uid="uid://dlmfgtkfe8s8k" path="res://Assets/Kirby/fly-transition-01.png" id="13_2mmwp"] +[ext_resource type="Texture2D" uid="uid://c6yy67c1dd07v" path="res://Assets/Kirby/inflated-exhale-02.png" id="13_28jiy"] [ext_resource type="AudioStream" uid="uid://cg118tdsr3oww" path="res://Assets/Sounds/fall-2.wav" id="14_o43qk"] [ext_resource type="AudioStream" uid="uid://do315gfb7gp6e" path="res://Assets/Sounds/fly.wav" id="15_wt8kq"] -[ext_resource type="Texture2D" uid="uid://beg36twmvwket" path="res://Assets/Kirby/ko-1.png" id="17_mk1fn"] +[ext_resource type="Texture2D" uid="uid://beg36twmvwket" path="res://Assets/Kirby/knockout-1.png" id="17_mk1fn"] [ext_resource type="AudioStream" uid="uid://du08pwh5pbxlk" path="res://Assets/Sounds/inhale.wav" id="17_tcnsa"] [ext_resource type="AudioStream" uid="uid://dch55m1hjpa7n" path="res://Assets/Sounds/star-shot.wav" id="18_8tquw"] [ext_resource type="AudioStream" uid="uid://fc5lm052l0ci" path="res://Assets/Sounds/air-shot.wav" id="18_b0jy8"] -[ext_resource type="Texture2D" uid="uid://c5qsow60trggu" path="res://Assets/Kirby/ko-2.png" id="18_enx47"] -[ext_resource type="Texture2D" uid="uid://bqj81fpych85a" path="res://Assets/Kirby/star-small.png" id="18_jg7ph"] -[ext_resource type="Texture2D" uid="uid://d0u6jw880abmk" path="res://Assets/Kirby/air-shoot.png" id="19_8bfby"] -[ext_resource type="Texture2D" uid="uid://b2smrgiobqc24" path="res://Assets/Kirby/ko-3.png" id="19_b07rj"] -[ext_resource type="Texture2D" uid="uid://dwnmiim6wpj3h" path="res://Assets/Kirby/ko-4.png" id="20_dcmki"] +[ext_resource type="Texture2D" uid="uid://c5qsow60trggu" path="res://Assets/Kirby/knockout-2.png" id="18_enx47"] +[ext_resource type="Texture2D" uid="uid://d0u6jw880abmk" path="res://Assets/Kirby/air-shot.png" id="19_8bfby"] +[ext_resource type="Texture2D" uid="uid://b2smrgiobqc24" path="res://Assets/Kirby/knockout-3.png" id="19_b07rj"] +[ext_resource type="Texture2D" uid="uid://dwnmiim6wpj3h" path="res://Assets/Kirby/knockout-4.png" id="20_dcmki"] [ext_resource type="Texture2D" uid="uid://v3mqtnbs3e8g" path="res://Assets/Kirby/star-shot-01.png" id="20_ptn6m"] [ext_resource type="AudioStream" uid="uid://5jbqiiboovpy" path="res://Assets/Sounds/hurt.wav" id="20_sg1wm"] [ext_resource type="Texture2D" uid="uid://dtmf5p0rijuvw" path="res://Assets/Kirby/star-shot-02.png" id="21_v2p03"] [ext_resource type="AudioStream" uid="uid://d2ag7ckd0pdc5" path="res://Assets/Sounds/no-hp.wav" id="21_y2drg"] [ext_resource type="Texture2D" uid="uid://cmmuuidovdcar" path="res://Assets/Kirby/star-shot-03.png" id="22_rqvv1"] [ext_resource type="Texture2D" uid="uid://cmf1wypv1ss5v" path="res://Assets/Kirby/star-shot-04.png" id="23_ro3gu"] +[ext_resource type="Shape2D" uid="uid://dh71ux7ec8ydk" path="res://navigation_shape.tres" id="26_pm11k"] [ext_resource type="AudioStream" uid="uid://bj2jgv8dxshqs" path="res://Assets/Sounds/digest.wav" id="27_7h7h2"] [ext_resource type="Texture2D" uid="uid://cdhe6x01onj2o" path="res://Assets/Kirby/inhale-particles.png" id="28_6706u"] [ext_resource type="AudioStream" uid="uid://ddiik30kw4ua" path="res://Assets/Sounds/shot-obstacle-hit.wav" id="28_nwt8e"] [ext_resource type="AudioStream" uid="uid://denc1y7sjgm3o" path="res://Assets/Sounds/enter-door.wav" id="30_bqihm"] -[ext_resource type="AudioStream" uid="uid://brufyhxonh3jr" path="res://Assets/Music/ko.wav" id="32_cphxk"] +[ext_resource type="Texture2D" uid="uid://p5id24wo3axc" path="res://Assets/Kirby/wall-bounce.png" id="30_jvald"] +[ext_resource type="AudioStream" uid="uid://brufyhxonh3jr" path="res://Assets/Music/knockout.wav" id="32_cphxk"] [sub_resource type="Gradient" id="Gradient_1p6gt"] offsets = PackedFloat32Array(0, 0.188525) @@ -52,7 +59,7 @@ gradient = SubResource("Gradient_1p6gt") [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_aoct8"] particle_flag_disable_z = true emission_shape = 3 -emission_box_extents = Vector3(8, 8, 1) +emission_box_extents = Vector3(16, 5, 1) angle_min = -243.4 angle_max = 1.07288e-05 direction = Vector3(-1, 0, 0) @@ -68,6 +75,20 @@ resource_local_to_scene = true animations = [{ "frames": [{ "duration": 1.0, +"texture": ExtResource("3_xbxev") +}, { +"duration": 1.0, +"texture": ExtResource("13_28jiy") +}, { +"duration": 1.0, +"texture": ExtResource("1_wgfub") +}], +"loop": true, +"name": &"digest", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, "texture": ExtResource("1_wgfub") }], "loop": true, @@ -111,6 +132,17 @@ animations = [{ }, { "frames": [{ "duration": 1.0, +"texture": ExtResource("9_6xjk3") +}, { +"duration": 1.0, +"texture": ExtResource("10_fgigi") +}], +"loop": true, +"name": &"fly_exhale", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, "texture": ExtResource("3_cldu0") }], "loop": true, @@ -119,6 +151,17 @@ animations = [{ }, { "frames": [{ "duration": 1.0, +"texture": ExtResource("12_qswnu") +}, { +"duration": 1.0, +"texture": ExtResource("13_2mmwp") +}], +"loop": true, +"name": &"inflated_exhale", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, "texture": ExtResource("8_vsb1l") }], "loop": true, @@ -157,7 +200,7 @@ animations = [{ "texture": ExtResource("8_xxs7c") }], "loop": true, -"name": &"inhale_exhale_transition", +"name": &"inhale_transition", "speed": 5.0 }, { "frames": [{ @@ -182,7 +225,7 @@ animations = [{ "texture": ExtResource("20_dcmki") }], "loop": true, -"name": &"ko", +"name": &"knockout", "speed": 8.0 }, { "frames": [{ @@ -201,10 +244,18 @@ animations = [{ "loop": true, "name": &"walk", "speed": 6.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": ExtResource("30_jvald") +}], +"loop": false, +"name": &"wall_bounce", +"speed": 1.0 }] -[sub_resource type="CircleShape2D" id="CircleShape2D_csxti"] -radius = 7.0 +[sub_resource type="CircleShape2D" id="CircleShape2D_ncpg1"] +radius = 8.0 [sub_resource type="CircleShape2D" id="CircleShape2D_vtlrr"] radius = 8.0 @@ -232,12 +283,906 @@ animations = [{ "speed": 1.0 }] -[sub_resource type="CircleShape2D" id="CircleShape2D_ncpg1"] -radius = 8.0 - [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_wya0c"] height = 24.0 +[sub_resource type="Animation" id="Animation_hqb8a"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"idle"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("AnimatedSprite2D:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("AnimatedSprite2D:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("NavigationShape:shape:radius") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [7.5] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("NavigationShape:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("HurtArea/HurtShape:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("HurtArea/HurtShape:shape:radius") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [8.0] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("CollisionArea/CollisionShape:position") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} + +[sub_resource type="Animation" id="Animation_hekxe"] +resource_name = "digest" +length = 0.15 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"digest"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("AnimatedSprite2D:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [0, 1, 2] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("AnimatedSprite2D:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [Vector2(-4, -9), Vector2(-4, -9), Vector2(0, 0)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("NavigationShape:shape:radius") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.05), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [12.0, 7.0] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("NavigationShape:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.0492397), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0, -4), Vector2(0, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("HurtArea/HurtShape:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.0492397), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0, -4), Vector2(0, 0)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("HurtArea/HurtShape:shape:radius") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.0484795), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [13.0, 8.0] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("CollisionArea/CollisionShape:position") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.0484795), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0, -4), Vector2(0, 0)] +} + +[sub_resource type="Animation" id="Animation_qpvoi"] +resource_name = "fly" +loop_mode = 1 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"fly"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("AnimatedSprite2D:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [0, 1] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("AnimatedSprite2D:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [Vector2(-4, -9), Vector2(-4, -8)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("NavigationShape:shape:radius") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [11.5] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("NavigationShape:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -3)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("HurtArea/HurtShape:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -4)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("HurtArea/HurtShape:shape:radius") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [12.0] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("CollisionArea/CollisionShape:position") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -4)] +} + +[sub_resource type="Animation" id="Animation_soeb7"] +resource_name = "fly_exhale" +length = 0.2 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"fly_exhale"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("AnimatedSprite2D:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [0, 1] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("AnimatedSprite2D:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [Vector2(-4, -9), Vector2(-4, -8)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("NavigationShape:shape:radius") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [11.5, 7.0] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("NavigationShape:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0, -3), Vector2(0, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("HurtArea/HurtShape:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0, -4), Vector2(0, 0)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("HurtArea/HurtShape:shape:radius") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [12.0, 8.0] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("CollisionArea/CollisionShape:position") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0, -4), Vector2(0, 0)] +} + +[sub_resource type="Animation" id="Animation_6ns5d"] +resource_name = "idle" +length = 0.1 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"idle"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("AnimatedSprite2D:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_0m5e1"] +resource_name = "inflated_exhale" +length = 0.2 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"inflated_exhale"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("AnimatedSprite2D:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [0, 1] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("AnimatedSprite2D:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [Vector2(-4, -9), Vector2(0, -8)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("NavigationShape:shape:radius") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [11.5, 7.0] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("NavigationShape:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0, -4), Vector2(0, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("HurtArea/HurtShape:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0, -4), Vector2(0, 0)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("HurtArea/HurtShape:shape:radius") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [12.0, 8.0] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("CollisionArea/CollisionShape:position") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0, -4), Vector2(0, 0)] +} + +[sub_resource type="Animation" id="Animation_yio3y"] +resource_name = "inflated_idle" +length = 0.1 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"inflated_idle"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("AnimatedSprite2D:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("AnimatedSprite2D:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [Vector2(-4, -8)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("NavigationShape:shape:radius") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [11.5] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("NavigationShape:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -4)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("HurtArea/HurtShape:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -4)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("HurtArea/HurtShape:shape:radius") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [12.0] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("CollisionArea/CollisionShape:position") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -4)] +} + +[sub_resource type="Animation" id="Animation_73rqc"] +resource_name = "inhale" +length = 0.1 +loop_mode = 1 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"inhale"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("AnimatedSprite2D:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -8)] +} + +[sub_resource type="Animation" id="Animation_hh52h"] +resource_name = "inhale_transition" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"inhale_transition"] +} + +[sub_resource type="Animation" id="Animation_12scu"] +resource_name = "jump" +length = 0.1 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"jump"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("AnimatedSprite2D:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("AnimatedSprite2D:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} + +[sub_resource type="Animation" id="Animation_tb4uf"] +resource_name = "walk" +length = 0.8 +loop_mode = 1 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"walk"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("AnimatedSprite2D:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [0, 1, 2, 3] +} + +[sub_resource type="Animation" id="Animation_c5bfn"] +resource_name = "inflated_walk" +length = 0.4 +loop_mode = 1 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"inflated_walk"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("AnimatedSprite2D:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [0, 1] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("AnimatedSprite2D:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [Vector2(-4, -8)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("NavigationShape:shape:radius") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [11.5] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("NavigationShape:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -4)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("HurtArea/HurtShape:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -4)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("HurtArea/HurtShape:shape:radius") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [12.0] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("CollisionArea/CollisionShape:position") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -4)] +} + +[sub_resource type="Animation" id="Animation_kgxu5"] +resource_name = "wall_bounce" +length = 0.1 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"wall_bounce"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("AnimatedSprite2D:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_gaqtm"] +_data = { +"RESET": SubResource("Animation_hqb8a"), +"digest": SubResource("Animation_hekxe"), +"fly": SubResource("Animation_qpvoi"), +"fly_exhale": SubResource("Animation_soeb7"), +"idle": SubResource("Animation_6ns5d"), +"inflated_exhale": SubResource("Animation_0m5e1"), +"inflated_idle": SubResource("Animation_yio3y"), +"inflated_walk": SubResource("Animation_c5bfn"), +"inhale": SubResource("Animation_73rqc"), +"inhale_transition": SubResource("Animation_hh52h"), +"jump": SubResource("Animation_12scu"), +"walk": SubResource("Animation_tb4uf"), +"wall_bounce": SubResource("Animation_kgxu5") +} + [node name="Player" type="CharacterBody2D" groups=["player"]] collision_mask = 18 script = ExtResource("1_d2vao") @@ -245,7 +1190,7 @@ script = ExtResource("1_d2vao") [node name="InhaleParticles" type="GPUParticles2D" parent="."] unique_name_in_owner = true texture_filter = 1 -position = Vector2(16, 0) +position = Vector2(18, -2) emitting = false amount = 4 process_material = SubResource("ParticleProcessMaterial_aoct8") @@ -256,62 +1201,77 @@ lifetime = 0.1 texture_filter = 1 sprite_frames = SubResource("SpriteFrames_nb512") animation = &"idle" +centered = false +offset = Vector2(-8, -8) + +[node name="NavigationShape" type="CollisionShape2D" parent="."] +shape = ExtResource("26_pm11k") +debug_color = Color(0.145291, 0.463217, 5.77569e-07, 0.42) + +[node name="HurtArea" type="Area2D" parent="."] +collision_mask = 34 -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -shape = SubResource("CircleShape2D_csxti") +[node name="HurtShape" type="CollisionShape2D" parent="HurtArea"] +shape = SubResource("CircleShape2D_ncpg1") +debug_color = Color(1, 0.560108, 0.528855, 0.42) [node name="CollisionArea" type="Area2D" parent="."] -collision_mask = 70 +collision_mask = 198 + +[node name="CollisionShape" type="CollisionShape2D" parent="CollisionArea"] +shape = ExtResource("26_pm11k") [node name="Camera2D" type="Camera2D" parent="."] limit_left = 0 drag_horizontal_enabled = true drag_vertical_enabled = true +drag_top_margin = 0.3 +drag_bottom_margin = 0.3 -[node name="Sounds" type="Node2D" parent="."] +[node name="Sounds" type="Node" parent="."] -[node name="SoundFall" type="AudioStreamPlayer2D" parent="Sounds"] +[node name="SoundFall" type="AudioStreamPlayer" parent="Sounds"] unique_name_in_owner = true stream = ExtResource("9_t30y2") volume_db = -2.0 -[node name="SoundFall2" type="AudioStreamPlayer2D" parent="Sounds"] +[node name="SoundFall2" type="AudioStreamPlayer" parent="Sounds"] unique_name_in_owner = true stream = ExtResource("14_o43qk") -[node name="SoundJump" type="AudioStreamPlayer2D" parent="Sounds"] +[node name="SoundJump" type="AudioStreamPlayer" parent="Sounds"] unique_name_in_owner = true stream = ExtResource("10_gmv3e") -[node name="SoundFly" type="AudioStreamPlayer2D" parent="Sounds"] +[node name="SoundFly" type="AudioStreamPlayer" parent="Sounds"] unique_name_in_owner = true stream = ExtResource("15_wt8kq") -[node name="SoundInhale" type="AudioStreamPlayer2D" parent="Sounds"] +[node name="SoundInhale" type="AudioStreamPlayer" parent="Sounds"] unique_name_in_owner = true stream = ExtResource("17_tcnsa") -[node name="SoundAirShot" type="AudioStreamPlayer2D" parent="Sounds"] +[node name="SoundAirShot" type="AudioStreamPlayer" parent="Sounds"] unique_name_in_owner = true stream = ExtResource("18_b0jy8") -[node name="SoundStarShot" type="AudioStreamPlayer2D" parent="Sounds"] +[node name="SoundStarShot" type="AudioStreamPlayer" parent="Sounds"] unique_name_in_owner = true stream = ExtResource("18_8tquw") -[node name="SoundHurt" type="AudioStreamPlayer2D" parent="Sounds"] +[node name="SoundHurt" type="AudioStreamPlayer" parent="Sounds"] unique_name_in_owner = true stream = ExtResource("20_sg1wm") -[node name="SoundNoHp" type="AudioStreamPlayer2D" parent="Sounds"] +[node name="SoundNoHp" type="AudioStreamPlayer" parent="Sounds"] unique_name_in_owner = true stream = ExtResource("21_y2drg") -[node name="SoundDigest" type="AudioStreamPlayer2D" parent="Sounds"] +[node name="SoundDigest" type="AudioStreamPlayer" parent="Sounds"] unique_name_in_owner = true stream = ExtResource("27_7h7h2") -[node name="ShotObstacleHit" type="AudioStreamPlayer2D" parent="Sounds"] +[node name="ShotObstacleHit" type="AudioStreamPlayer" parent="Sounds"] unique_name_in_owner = true stream = ExtResource("28_nwt8e") @@ -319,18 +1279,14 @@ stream = ExtResource("28_nwt8e") unique_name_in_owner = true stream = ExtResource("30_bqihm") -[node name="SoundKO" type="AudioStreamPlayer" parent="Sounds"] +[node name="SoundKnockout" type="AudioStreamPlayer" parent="Sounds"] unique_name_in_owner = true stream = ExtResource("32_cphxk") -[node name="SpriteSmallStar" type="Sprite2D" parent="."] -texture_filter = 1 -position = Vector2(0, 14) -texture = ExtResource("18_jg7ph") - [node name="AirShot" type="Area2D" parent="."] -position = Vector2(25, 0) -collision_mask = 6 +position = Vector2(40, 0) +collision_layer = 8 +collision_mask = 518 metadata/_edit_group_ = true [node name="CollisionShape2D" type="CollisionShape2D" parent="AirShot"] @@ -341,8 +1297,9 @@ texture_filter = 1 texture = ExtResource("19_8bfby") [node name="StarShot" type="Area2D" parent="."] -position = Vector2(44, 0) -collision_mask = 6 +position = Vector2(64, 0) +collision_layer = 8 +collision_mask = 518 metadata/_edit_group_ = true [node name="CollisionShape2D" type="CollisionShape2D" parent="StarShot"] @@ -356,23 +1313,32 @@ sprite_frames = SubResource("SpriteFrames_wtu0n") position = Vector2(-1.19209e-07, 5.96046e-07) scale = Vector2(0.7, 0.7) -[node name="HurtArea" type="Area2D" parent="."] -collision_mask = 34 - -[node name="CollisionShape2D" type="CollisionShape2D" parent="HurtArea"] -shape = SubResource("CircleShape2D_ncpg1") -debug_color = Color(0.558997, 0.400513, 0.991197, 0.42) - [node name="InhaleArea" type="Area2D" parent="."] unique_name_in_owner = true -position = Vector2(16, 0) +position = Vector2(18, 0) collision_layer = 0 collision_mask = 6 metadata/_edit_group_ = true -[node name="CollisionShape2D" type="CollisionShape2D" parent="InhaleArea"] +[node name="InhaleShape" type="CollisionShape2D" parent="InhaleArea"] shape = SubResource("CapsuleShape2D_wya0c") +[node name="WallDetection" type="Node2D" parent="."] + +[node name="Left" type="RayCast2D" parent="WallDetection"] +target_position = Vector2(-9, 0) +collision_mask = 16 + +[node name="Right" type="RayCast2D" parent="WallDetection"] +target_position = Vector2(9, 0) +collision_mask = 16 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +deterministic = true +libraries = { +"": SubResource("AnimationLibrary_gaqtm") +} + [node name="CoyoteTimer" type="Timer" parent="."] wait_time = 0.1 one_shot = true @@ -380,4 +1346,10 @@ one_shot = true [node name="InhaleMinDurationTimer" type="Timer" parent="."] one_shot = true +[node name="InvincibilityTimer" type="Timer" parent="."] +one_shot = true + [connection signal="body_entered" from="HurtArea" to="." method="_on_hurt_area_body_entered"] +[connection signal="body_entered" from="CollisionArea" to="." method="_on_collision_area_body_entered"] +[connection signal="body_exited" from="CollisionArea" to="." method="_on_collision_area_body_exited"] +[connection signal="timeout" from="InvincibilityTimer" to="." method="_on_invincibility_timer_timeout"] diff --git a/SoundManager.gd b/SoundManager.gd index b86c28d..7cb4abd 100644 --- a/SoundManager.gd +++ b/SoundManager.gd @@ -22,6 +22,8 @@ func play_background(sound_name: String): # sound == current_background elif not current_background.playing: current_background.play() + + #current_background.stop() func fade_out(sound: AudioStreamPlayer): diff --git a/SoundManager.tscn b/SoundManager.tscn index 68257b4..810d8c9 100644 --- a/SoundManager.tscn +++ b/SoundManager.tscn @@ -1,11 +1,15 @@ -[gd_scene load_steps=9 format=3 uid="uid://ce0b23isfjn70"] +[gd_scene load_steps=13 format=3 uid="uid://ce0b23isfjn70"] [ext_resource type="Script" path="res://SoundManager.gd" id="1_640nc"] [ext_resource type="AudioStream" uid="uid://denc1y7sjgm3o" path="res://Assets/Sounds/enter-door.wav" id="2_ca2ya"] [ext_resource type="AudioStream" uid="uid://clqm7xm8mbhbs" path="res://Assets/Music/Green Greens-intro.wav" id="3_ahlnh"] +[ext_resource type="AudioStream" uid="uid://b8q5db1h0ubyg" path="res://Assets/Sounds/boss-hp-fill.wav" id="3_at307"] +[ext_resource type="AudioStream" uid="uid://5jbqiiboovpy" path="res://Assets/Sounds/hurt.wav" id="4_4b0ai"] [ext_resource type="AudioStream" uid="uid://dpho4fr6kejhe" path="res://Assets/Music/Green Greens-loop.wav" id="4_snfo8"] [ext_resource type="AudioStream" uid="uid://bit1m7y8bjcfg" path="res://Assets/Music/Float Islands-intro.wav" id="5_sogsx"] [ext_resource type="AudioStream" uid="uid://c057hisnc5uru" path="res://Assets/Music/Float Islands-loop.wav" id="6_w1jca"] +[ext_resource type="AudioStream" uid="uid://cd6c7eb8otlw7" path="res://Assets/Music/Boss.wav" id="9_q0rxb"] +[ext_resource type="AudioStream" uid="uid://bdi83hcsq4yge" path="res://Assets/Music/Win.wav" id="10_8ig5v"] [sub_resource type="AudioStreamInteractive" id="AudioStreamInteractive_2fhny"] clip_count = 2 @@ -63,6 +67,12 @@ script = ExtResource("1_640nc") [node name="EnterDoor" type="AudioStreamPlayer" parent="."] stream = ExtResource("2_ca2ya") +[node name="BossHpFill" type="AudioStreamPlayer" parent="."] +stream = ExtResource("3_at307") + +[node name="Hurt" type="AudioStreamPlayer" parent="."] +stream = ExtResource("4_4b0ai") + [node name="GreenGreens" type="AudioStreamPlayer" parent="."] stream = SubResource("AudioStreamInteractive_2fhny") volume_db = -5.0 @@ -70,3 +80,11 @@ volume_db = -5.0 [node name="FloatIslands" type="AudioStreamPlayer" parent="."] stream = SubResource("AudioStreamInteractive_xhism") volume_db = -5.0 + +[node name="Boss" type="AudioStreamPlayer" parent="."] +stream = ExtResource("9_q0rxb") +volume_db = -5.0 + +[node name="Win" type="AudioStreamPlayer" parent="."] +stream = ExtResource("10_8ig5v") +volume_db = -3.0 diff --git a/boss_hp.gd b/boss_hp.gd new file mode 100644 index 0000000..12f094f --- /dev/null +++ b/boss_hp.gd @@ -0,0 +1,10 @@ +extends Control + + +func set_full(): + $Full.visible = true + $Empty.visible = false + +func set_empty(): + $Full.visible = false + $Empty.visible = true diff --git a/boss_hp_bar.gd b/boss_hp_bar.gd new file mode 100644 index 0000000..4cc4ec5 --- /dev/null +++ b/boss_hp_bar.gd @@ -0,0 +1,26 @@ +extends Control + + +var max_hp: int + +@onready var hp_scene = preload("res://BossHP.tscn") + + +func initialize(hp: int): + max_hp = hp + + for child in $HBoxContainer.get_children(): + $HBoxContainer.remove_child(child) + + for n in range(hp): + SoundManager.play_sound("BossHpFill") + $HBoxContainer.add_child(hp_scene.instantiate()) + await get_tree().create_timer(0.1).timeout + + Game.boss_hp_changed.connect(func(new_hp): + for n in range(max_hp): + if n < new_hp: + $HBoxContainer.get_child(n).set_full() + else: + $HBoxContainer.get_child(n).set_empty() + ) diff --git a/effect_star.tscn b/effect_star.tscn new file mode 100644 index 0000000..dc79e5c --- /dev/null +++ b/effect_star.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=2 format=3 uid="uid://csfnd62smasht"] + +[ext_resource type="Texture2D" uid="uid://bqj81fpych85a" path="res://Assets/Kirby/star-small.png" id="1_sstme"] + +[node name="SpriteSmallStar" type="Sprite2D"] +texture_filter = 1 +position = Vector2(0, 24) +texture = ExtResource("1_sstme") diff --git a/float_islands.gd b/float_islands.gd index d038570..532ab8d 100644 --- a/float_islands.gd +++ b/float_islands.gd @@ -12,8 +12,9 @@ func _ready() -> void: SoundManager.play_background("FloatIslands") if starting_position: - player.position = starting_position - + player.visual_position = starting_position + + $Wall.visible = false player.get_node("Camera2D").limit_top = $Wall.get_wall_limits().top player.get_node("Camera2D").limit_bottom = $Wall.get_wall_limits().bottom player.get_node("Camera2D").limit_left = $Wall.get_wall_limits().left diff --git a/green_greens.gd b/green_greens.gd index af9ea37..2f35176 100644 --- a/green_greens.gd +++ b/green_greens.gd @@ -11,7 +11,7 @@ func _ready() -> void: SoundManager.play_background("GreenGreens") if starting_position: - player.position = starting_position + player.visual_position = starting_position player.get_node("Camera2D").limit_top = $Wall.get_wall_limits().top player.get_node("Camera2D").limit_bottom = $Wall.get_wall_limits().bottom @@ -35,3 +35,7 @@ func _on_area_2d_body_entered(body: Node2D) -> void: if body is Player: SoundManager.fade_out(SoundManager.current_background) Game.transition_to_scene("res://FloatIslandsIntro.tscn") +func _on_area_2d_2_body_entered(_body: Node2D) -> void: + Game.boss_initialized.emit(3) + await get_tree().create_timer(1.0).timeout + get_tree().current_scene.get_node("HUD").get_node("%BossHPBar").get_child(0).get_child(3-1).set_empty() diff --git a/green_greens_boss.gd b/green_greens_boss.gd new file mode 100644 index 0000000..533c28f --- /dev/null +++ b/green_greens_boss.gd @@ -0,0 +1,37 @@ +extends Node2D + + +@export var starting_position: Vector2 +@export var fade_in_from_door: bool = false + +@onready var player = get_tree().get_first_node_in_group("player") + + +func _ready() -> void: + SoundManager.play_background("Boss") + + if starting_position: + player.visual_position = starting_position + + player.get_node("Camera2D").limit_top = $Wall.get_wall_limits().top + player.get_node("Camera2D").limit_bottom = $Wall.get_wall_limits().bottom + player.get_node("Camera2D").limit_left = $Wall.get_wall_limits().left + player.get_node("Camera2D").limit_right = $Wall.get_wall_limits().right + + if fade_in_from_door: + player.current_state = player.state_exit_door() + player.get_node("AnimatedSprite2D").self_modulate = Color(0,0,0,1) + + var tween = get_tree().create_tween() + tween.tween_property( + player.get_node("AnimatedSprite2D"), + "self_modulate", + Color(1,1,1,1), + 0.3 + ) + + Game.boss_defeated.connect(func(): + SoundManager.play_background("Win") + await SoundManager.current_background.finished + Game.transition_to_scene("res://FloatIslandsIntro.tscn") + ) diff --git a/hud.gd b/hud.gd index d5f7cc3..72d5b96 100644 --- a/hud.gd +++ b/hud.gd @@ -2,6 +2,16 @@ extends CanvasLayer func _ready() -> void: + %Score.text = str(Game.score) + Game.score_changed.connect(func(): %Score.text = str(Game.score) ) + + Game.boss_initialized.connect(func(hp): + %BossHPBar.visible = true + %BossHPBar.initialize(hp) + + $PanelContainer/VBoxContainer/Top/Left/Score.visible = false + $PanelContainer/VBoxContainer/Top/Left/Boss.visible = true + ) diff --git a/icon_monochrome_light.svg b/icon_monochrome_light.svg new file mode 100644 index 0000000..4089fe4 --- /dev/null +++ b/icon_monochrome_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icon_monochrome_light.svg.import b/icon_monochrome_light.svg.import new file mode 100644 index 0000000..6a52f26 --- /dev/null +++ b/icon_monochrome_light.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dw38mfygfkecc" +path="res://.godot/imported/icon_monochrome_light.svg-1bc1186db6bdec4d416aaeba554b075f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon_monochrome_light.svg" +dest_files=["res://.godot/imported/icon_monochrome_light.svg-1bc1186db6bdec4d416aaeba554b075f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/knockout_plane.gd b/knockout_plane.gd new file mode 100644 index 0000000..30ec748 --- /dev/null +++ b/knockout_plane.gd @@ -0,0 +1,5 @@ +extends TileMapLayer + + +func _ready() -> void: + visible = false diff --git a/ko_plane.gd b/ko_plane.gd deleted file mode 100644 index 30ec748..0000000 --- a/ko_plane.gd +++ /dev/null @@ -1,5 +0,0 @@ -extends TileMapLayer - - -func _ready() -> void: - visible = false diff --git a/navigation_shape.tres b/navigation_shape.tres new file mode 100644 index 0000000..860042b --- /dev/null +++ b/navigation_shape.tres @@ -0,0 +1,4 @@ +[gd_resource type="CircleShape2D" format=3 uid="uid://dh71ux7ec8ydk"] + +[resource] +radius = 7.5 diff --git a/player.gd b/player.gd index 9ca3553..9a06615 100644 --- a/player.gd +++ b/player.gd @@ -3,51 +3,81 @@ extends CharacterBody2D signal hp_changed +signal inhale_finished -const MAX_SPEED = 80.0 +const MAX_SPEED = 70.0 const ACCELERATION = MAX_SPEED * 0.1 const DECELERATION = ACCELERATION const JUMP_VELOCITY = -200.0 const MAX_AIR_SPEED = MAX_SPEED * 0.75 const FLY_VELOCITY = -80 const HURT_VELOCITY = MAX_SPEED * 5 +const MAX_WATER_SPEED = MAX_SPEED * 0.5 const MAX_GRAVITY = 300.0 const MAX_GRAVITY_AIR = 100.0 +const MAX_GRAVITY_WATER = 50.0 var previous_velocity: Vector2 = Vector2.ZERO var jump_height_modifier: float var last_direction: float = 1.0 var max_gravity: float = MAX_GRAVITY +var max_up_velocity: float = MAX_GRAVITY * 2 +var previous_state: Dictionary = state_idle() var current_state: Dictionary = state_idle(): set(new_state): - if current_state.id != new_state.id: - current_state.exit.call() - new_state.enter.call() - current_state = new_state + if current_state.id != "knockout": # final state + if current_state.id != new_state.id: + previous_state = current_state + current_state.exit.call() + new_state.enter.call() + current_state = new_state var max_hp = 6 var hp = max_hp : set(value): hp = clamp(value, 0, max_hp) hp_changed.emit() -var sprite_small_star_base: Sprite2D +var sprite_small_star_base: PackedScene var air_shot_base: Area2D var star_shot_base: Area2D +var is_inhaling = false +var is_flying = false : + set(value): + is_flying = value + set_collision_mask_value(8, value) var is_inflated = false var inhale_min_duration = 0.5 var does_inhale_transition = false +var invincibility_duration = 0.6 +var is_invincible = false +var did_wall_bounce = false var entered_door: Node2D +var blink_tween: Tween + +var visual_position: Vector2 : + get(): + return Vector2(0, 0) + set(value): + position = value + Vector2(0, 0) + +var visual_global_position: Vector2 : + get(): + return global_position + Vector2(0, 0) + set(value): + global_position = value - Vector2(0, 0) + +@onready var navigation_shape: CollisionShape2D = $NavigationShape + func _ready(): current_state = state_idle() - sprite_small_star_base = $SpriteSmallStar.duplicate() - $SpriteSmallStar.queue_free() + sprite_small_star_base = preload("res://effect_star.tscn") air_shot_base = $AirShot.duplicate() $AirShot.queue_free() @@ -55,16 +85,16 @@ func _ready(): star_shot_base = $StarShot.duplicate() $StarShot.queue_free() - hp = max_hp # to set UI labels - - $CollisionArea.add_child($CollisionShape2D.duplicate()) + $InvincibilityTimer.wait_time = invincibility_duration func _physics_process(delta: float) -> void: # Add the gravity. if not is_on_floor(): velocity += get_gravity() * delta - velocity.y = min(velocity.y, max_gravity) + if is_flying: + velocity -= (get_gravity() * delta) / 1.5 + velocity.y = clamp(velocity.y, -max_up_velocity, max_gravity) previous_velocity = velocity current_state.process.call(delta) @@ -78,7 +108,7 @@ func apply_directional_movement(max_speed = MAX_SPEED): else: $AnimatedSprite2D.flip_h = false - if sign(direction) != sign(last_direction): + if sign(direction) != sign(last_direction): # no slidey-ness velocity.x = 0 velocity.x = move_toward(velocity.x, direction * max_speed, ACCELERATION) @@ -98,8 +128,8 @@ func apply_jump_height_modification(): func spawn_small_star(): - var star := sprite_small_star_base.duplicate() - star.global_position = global_position + var star := sprite_small_star_base.instantiate() + star.global_position = visual_global_position get_tree().current_scene.add_child(star) var tween = get_tree().create_tween() var target_x = randi_range(-1, 1) * 16 @@ -117,13 +147,28 @@ func spawn_small_star(): func air_shot(direction: float): var shot = air_shot_base.duplicate() as Area2D - shot.global_position = global_position + shot.global_position = visual_global_position get_tree().current_scene.add_child(shot) %SoundAirShot.play() shot.get_node("Sprite2D").flip_h = direction < 0 var tween = get_tree().create_tween() + + var shot_hit = func(node): + Game.score += 400 + %ShotObstacleHit.play() + tween.stop() + + if node.has_method("hit_by_projectile"): + node.hit_by_projectile(shot.global_position) + else: + Game.hit_enemy(node, shot.global_position) + + shot.queue_free() + shot.body_entered.connect(shot_hit) + shot.area_entered.connect(shot_hit) + tween.tween_property( shot, "global_position", @@ -132,12 +177,13 @@ func air_shot(direction: float): ).set_ease(Tween.EASE_OUT) tween.tween_callback(func(): await get_tree().create_timer(0.2).timeout - shot.queue_free() + if is_instance_valid(shot): + shot.queue_free() ) func star_shot(direction: float): var shot = star_shot_base.duplicate() as Area2D - shot.global_position = global_position + shot.global_position = visual_global_position get_tree().current_scene.add_child(shot) %SoundStarShot.play() @@ -145,13 +191,19 @@ func star_shot(direction: float): var tween = get_tree().create_tween() - shot.body_entered.connect(func(body): - Game.score += randi_range(100, 1000) + var shot_hit = func(node): + Game.score += 400 %ShotObstacleHit.play() tween.stop() + + if node.has_method("hit_by_projectile"): + node.hit_by_projectile(shot.global_position) + else: + Game.hit_enemy(node, shot.global_position) + shot.queue_free() - body.queue_free() - ) + shot.body_entered.connect(shot_hit) + shot.area_entered.connect(shot_hit) shot.get_node("StarShotVisibleNotifier").screen_exited.connect(func(): if is_instance_valid(shot): @@ -182,12 +234,73 @@ func check_door_enter(): return null +func start_blink(): + blink_tween = get_tree().create_tween() + blink_tween.tween_property($AnimatedSprite2D, "self_modulate", Color(1, 1, 1, 0.2), 0.1) + blink_tween.tween_property($AnimatedSprite2D, "self_modulate", Color(1, 1, 1, 0.8), 0.1) + + await blink_tween.finished + start_blink() + +func stop_blink(): + blink_tween.stop() + $AnimatedSprite2D.self_modulate = Color(1, 1, 1, 1) + + +func inhale(node: CollisionObject2D): + node.collision_layer = 0 + + var position_difference = node.global_position - global_position + if position_difference.length() > 25: + var tween = get_tree().create_tween() + tween.tween_property( + node, + "global_position", + global_position + (Vector2(1, 0) * 16 * sign(last_direction)), + (node.global_position - global_position).normalized().length() * 0.25 + ) + await tween.finished + else: + await get_tree().create_timer(0.1).timeout + + node.queue_free() + + Game.score += 200 + + inhale_finished.emit() + + +func wall_bounce_check(): + return abs(previous_velocity.x) > 0 and is_on_wall() + #if not did_wall_bounce and abs(previous_velocity.x) > 0 and is_on_wall(): + #%SoundFall.play() + #spawn_small_star() + #$AnimationPlayer.play("wall_bounce") + #did_wall_bounce = true + #get_tree().create_timer(0.1).timeout.connect(func(): + #did_wall_bounce = false + #) + # + #return true + # + #return false + + func _on_hurt_area_body_entered(body: Node2D) -> void: if body.is_in_group("enemy"): - current_state.id = "" # to force trigger state change into hurt - current_state = state_hurt({"collider": body}) + if is_invincible: + %ShotObstacleHit.play() + body.queue_free() + else: + current_state.id = "" # to force trigger state change into hurt + current_state = state_hurt({"collider": body}) elif body is TileMapLayer: - current_state = state_ko() + current_state = state_knockout() + + +func _on_invincibility_timer_timeout() -> void: + stop_blink() + is_invincible = false func state_idle(): @@ -195,14 +308,16 @@ func state_idle(): "id": "idle", "enter": func(): is_inflated = false - $AnimatedSprite2D.play("idle") + $AnimationPlayer.play("idle") , "process": func(_delta): velocity.x = move_toward(velocity.x, 0, DECELERATION) move_and_slide() var direction = Input.get_axis("ui_left", "ui_right") - if direction: + if (direction and + ((direction == -1 and not $WallDetection/Left.is_colliding()) or + (direction == 1 and not $WallDetection/Right.is_colliding()))): current_state = state_walk() if check_door_enter(): @@ -229,7 +344,7 @@ func state_walk(): return { "id": "walk", "enter": func(): - $AnimatedSprite2D.play("walk") + $AnimationPlayer.play("walk") , "process": func(_delta): var direction = apply_directional_movement() @@ -241,6 +356,9 @@ func state_walk(): if velocity.x == 0: current_state = state_idle() + if wall_bounce_check(): + current_state = state_wall_bounce(state_idle()) + if check_door_enter(): current_state = state_enter_door() elif Input.is_action_just_pressed("jump"): @@ -267,7 +385,7 @@ func state_jump(): "id": "jump", "enter": func(): %SoundJump.play() - $AnimatedSprite2D.play("jump") + $AnimationPlayer.play("jump") velocity.y = JUMP_VELOCITY jump_height_modifier = JUMP_VELOCITY , @@ -276,6 +394,9 @@ func state_jump(): apply_directional_movement() move_and_slide() + if wall_bounce_check(): + current_state = state_wall_bounce(state_fall()) + if Input.is_action_just_pressed("jump"): velocity.y = FLY_VELOCITY %SoundFly.play() @@ -297,7 +418,7 @@ func state_fall(): return { "id": "fall", "enter": func(): - $AnimatedSprite2D.play("jump") + $AnimationPlayer.play("jump") , "process": func(_delta): if not $CoyoteTimer.is_stopped() and Input.is_action_just_pressed("jump"): @@ -311,22 +432,50 @@ func state_fall(): if Input.is_action_just_pressed("inhale_exhale"): current_state = state_inhale() - if velocity.y >= MAX_GRAVITY: + if velocity.y >= MAX_GRAVITY * 0.9: $AnimatedSprite2D.play("fall") + is_invincible = true apply_directional_movement(MAX_AIR_SPEED) move_and_slide() + if wall_bounce_check(): + current_state = state_wall_bounce(state_fall()) + if is_on_floor(): + spawn_small_star() if $AnimatedSprite2D.animation == "fall": %SoundFall2.play() + current_state = state_bump() else: %SoundFall.play() + current_state = state_idle() + , + "exit": func(): + pass + , + } + + +func state_bump(): + return { + "id": "bump", + "enter": func(): + $AnimatedSprite2D.play("fall") + velocity = Vector2(sign(last_direction), -1) * clamp(velocity.x * 1.5, MAX_SPEED * 0.75, MAX_SPEED) + , + "process": func(_delta): + move_and_slide() + + if is_on_floor(): + #velocity.x = 0 + %SoundFall.play() spawn_small_star() current_state = state_idle() , "exit": func(): - pass + if $InvincibilityTimer.is_stopped(): + is_invincible = false , } @@ -338,7 +487,7 @@ func state_duck(): $AnimatedSprite2D.play("duck") , "process": func(_delta): - if Input.is_action_just_released("duck"): + if not Input.is_action_pressed("duck"): current_state = state_idle() , "exit": func(): @@ -351,17 +500,16 @@ func state_fly_idle(): return { "id": "fly_idle", "enter": func(): + is_flying = true max_gravity = MAX_GRAVITY_AIR - $AnimatedSprite2D.play("fly") + $AnimationPlayer.play("fly") , - "process": func(delta): - velocity -= (get_gravity() * delta) / 1.5 - + "process": func(_delta): if check_door_enter(): current_state = state_enter_door() elif Input.is_action_just_pressed("jump"): velocity.y = FLY_VELOCITY - $AnimatedSprite2D.play("fly") + $AnimationPlayer.play("fly") %SoundFly.play() velocity.x = move_toward(velocity.x, 0, DECELERATION) @@ -373,9 +521,11 @@ func state_fly_idle(): if Input.is_action_just_pressed("inhale_exhale"): air_shot(last_direction) - current_state = state_idle() + current_state = state_fly_exhale() , "exit": func(): + $AnimationPlayer.play("RESET") + is_flying = false max_gravity = MAX_GRAVITY , } @@ -385,11 +535,12 @@ func state_fly_walk(): return { "id": "fly_walk", "enter": func(): + is_flying = true max_gravity = MAX_GRAVITY_AIR - $AnimatedSprite2D.play("fly") + $AnimationPlayer.play("fly") , - "process": func(delta): - velocity -= (get_gravity() * delta) / 1.5 + "process": func(_delta): + #velocity -= (get_gravity() * delta) / 1.5 velocity.y = min(velocity.y, 100) if check_door_enter(): @@ -400,48 +551,60 @@ func state_fly_walk(): var direction = apply_directional_movement(MAX_AIR_SPEED) if direction: - $AnimatedSprite2D.play("fly") + $AnimationPlayer.play("fly") move_and_slide() else: current_state = state_fly_idle() if Input.is_action_just_pressed("inhale_exhale"): air_shot(last_direction) - current_state = state_walk() + current_state = state_fly_exhale() , "exit": func(): + is_flying = false max_gravity = MAX_GRAVITY , } func state_fly_exhale(): - # todo: play animation, can't move during that, fly gravity applies? - # goto idle state? fall state? - return {} + return { + "id": "fly_exhale", + "enter": func(): + $AnimationPlayer.play("fly_exhale") + await $AnimationPlayer.animation_finished + current_state = state_idle() + , + "process": func(_delta): + move_and_slide() + , + "exit": func(): + pass + , + } func state_inhale(): return { "id": "inhale", "enter": func(): + is_inhaling = true + $InhaleMinDurationTimer.wait_time = inhale_min_duration $InhaleMinDurationTimer.start() - #$AnimationPlayer.play("inhale") - $AnimatedSprite2D.play("inhale") + $AnimationPlayer.play("inhale") %SoundInhale.play() %SoundInhale.finished.connect(func(): - #$SoundInhaleContinue.play() %SoundInhale.play() ) - %InhaleArea.position.x = abs(%InhaleArea.position.x) * sign(last_direction) + %InhaleArea.position.x = visual_position.x + (abs(visual_position.x - %InhaleArea.position.x) * sign(last_direction)) %InhaleParticles.process_material.gravity.x = - ( abs(%InhaleParticles.process_material.gravity.x) * sign(last_direction) ) - %InhaleParticles.position.x = abs(%InhaleParticles.position.x) * sign(last_direction) + %InhaleParticles.position.x = visual_position.x + (abs(visual_position.x - %InhaleParticles.position.x) * sign(last_direction)) %InhaleParticles.restart() %InhaleParticles.emitting = true , @@ -453,10 +616,9 @@ func state_inhale(): if bodies.size() > 0: does_inhale_transition = true for body in bodies: - body.queue_free() - Game.score += randi_range(10, 100) - # todo: stop process? -> remove collision -> inhale aka move towards center player -> queue_free - await get_tree().create_timer(inhale_min_duration).timeout + inhale(body) + await inhale_finished + await get_tree().create_timer(inhale_min_duration / 2).timeout current_state = state_inflated_idle() return @@ -467,6 +629,9 @@ func state_inhale(): current_state = state_idle() , "exit": func(): + #$AnimationTree.get("parameters/playback").travel("idle") + $AnimationPlayer.play("RESET") + is_inhaling = false %SoundInhale.stop() %InhaleParticles.emitting = false does_inhale_transition = false @@ -479,7 +644,7 @@ func state_inflated_idle(): "id": "inflated_idle", "enter": func(): is_inflated = true - $AnimatedSprite2D.play("inflated_idle") + $AnimationPlayer.play("inflated_idle") , "process": func(_delta): velocity.x = move_toward(velocity.x, 0, DECELERATION) @@ -495,15 +660,14 @@ func state_inflated_idle(): current_state = state_inflated_jump() if not is_on_floor(): - #current_state = state_inflated_fall() - current_state = state_inflated_jump() + current_state = state_inflated_fall() if Input.is_action_pressed("duck"): current_state = state_digest() if Input.is_action_just_pressed("inhale_exhale"): star_shot(last_direction) - current_state = state_idle() + current_state = state_inflated_exhale() , "exit": func(): is_inflated = false @@ -516,7 +680,7 @@ func state_inflated_walk(): "id": "inflated_walk", "enter": func(): is_inflated = true - $AnimatedSprite2D.play("inflated_walk") + $AnimationPlayer.play("inflated_walk") , "process": func(_delta): var direction = apply_directional_movement() @@ -539,7 +703,7 @@ func state_inflated_walk(): if Input.is_action_just_pressed("inhale_exhale"): star_shot(last_direction) - current_state = state_idle() + current_state = state_inflated_exhale() , "exit": func(): is_inflated = false @@ -564,7 +728,7 @@ func state_inflated_jump(): if Input.is_action_just_pressed("inhale_exhale"): star_shot(last_direction) - current_state = state_fall() + current_state = state_inflated_exhale() elif velocity.y >= 0: current_state = state_inflated_fall() @@ -588,7 +752,7 @@ func state_inflated_fall(): if Input.is_action_just_pressed("inhale_exhale"): star_shot(last_direction) - current_state = state_fall() + current_state = state_inflated_exhale() apply_directional_movement(MAX_AIR_SPEED) move_and_slide() @@ -604,6 +768,23 @@ func state_inflated_fall(): } +func state_inflated_exhale(): + return { + "id": "inflated_exhale", + "enter": func(): + $AnimationPlayer.play("inflated_exhale") + await $AnimationPlayer.animation_finished + current_state = state_idle() + , + "process": func(_delta): + move_and_slide() + , + "exit": func(): + pass + , + } + + func state_digest(): return { "id": "digest", @@ -611,10 +792,13 @@ func state_digest(): %SoundDigest.play() is_inflated = false hp += 1 - Game.score += randi_range(10, 100) + Game.score += 100 + $AnimationPlayer.play("digest") + await $AnimationPlayer.animation_finished + current_state = state_duck() , "process": func(_delta): - current_state = state_duck() + move_and_slide() # animation position adjustment , "exit": func(): pass @@ -626,12 +810,15 @@ func state_hurt(data): return { "id": "hurt", "enter": func(): + is_invincible = true + $InvincibilityTimer.start() + if data.collider.is_in_group("enemy"): data.collider.queue_free() hp -= 1 if hp == 0: - current_state = state_ko() + current_state = state_knockout() return else: %SoundHurt.play() @@ -641,25 +828,39 @@ func state_hurt(data): else: $AnimatedSprite2D.play("jump") - var impulse = sign(global_position - data.collider.global_position) * HURT_VELOCITY + var impulse = sign(visual_global_position - data.collider.global_position) * HURT_VELOCITY velocity.x = impulse.x velocity.y = -100 move_and_slide() velocity.x = 0 - var tween = get_tree().create_tween() - tween.tween_property($AnimatedSprite2D, "self_modulate", Color(1, 1, 1, 0.2), 0.1) - tween.tween_property($AnimatedSprite2D, "self_modulate", Color(1, 1, 1, 0.8), 0.1) - tween.tween_property($AnimatedSprite2D, "self_modulate", Color(1, 1, 1, 0.2), 0.1) - tween.tween_property($AnimatedSprite2D, "self_modulate", Color(1, 1, 1, 0.8), 0.1) - tween.tween_callback(func(): - $AnimatedSprite2D.self_modulate = Color(1, 1, 1, 1) - if is_inflated: - current_state = state_inflated_idle() - else: - current_state = state_idle() - ) + start_blink() + await get_tree().create_timer(0.4).timeout + if is_inflated: + current_state = state_inflated_idle() + else: + current_state = state_idle() + , + "process": func(_delta): + move_and_slide() + , + "exit": func(): + pass + , + } + + +func state_wall_bounce(return_state): + return { + "id": "wall_bounce", + "enter": func(): + %SoundFall.play() + spawn_small_star() + $AnimationPlayer.play("wall_bounce") + await $AnimationPlayer.animation_finished + + current_state = return_state , "process": func(_delta): move_and_slide() @@ -669,6 +870,68 @@ func state_hurt(data): , } + +func state_water_idle(): + return { + "id": "water_idle", + "enter": func(): + max_gravity = MAX_GRAVITY_WATER + $AnimationPlayer.play("walk") + , + "process": func(_delta): + if check_door_enter(): + current_state = state_enter_door() + elif Input.is_action_just_pressed("jump"): + %SoundJump.play() + velocity.y -= MAX_GRAVITY_WATER * 2 + + velocity.x = move_toward(velocity.x, 0, DECELERATION) + move_and_slide() + + if velocity.length() > 0: + $AnimationPlayer.play("walk") + else: + $AnimationPlayer.play("idle") + + var direction = Input.get_axis("ui_left", "ui_right") + if direction: + current_state = state_water_swim() + , + "exit": func(): + max_gravity = MAX_GRAVITY + , + } + + +func state_water_swim(): + return { + "id": "water_swim", + "enter": func(): + max_gravity = MAX_GRAVITY_WATER + $AnimationPlayer.play("walk") + , + "process": func(_delta): + if check_door_enter(): + current_state = state_enter_door() + elif Input.is_action_just_pressed("jump"): + %SoundJump.play() + velocity.y -= MAX_GRAVITY_WATER * 2 + + var direction = apply_directional_movement() + if direction: + move_and_slide() + else: + velocity.x = move_toward(velocity.x, 0, DECELERATION) + move_and_slide() + if velocity.x == 0: + current_state = state_water_idle() + , + "exit": func(): + max_gravity = MAX_GRAVITY + , + } + + func state_enter_door(): return { "id": "enter_door", @@ -705,45 +968,46 @@ func state_exit_door(): , } -func state_ko(): + +func state_knockout(): return { - "id": "ko", + "id": "knockout", "enter": func(): SoundManager.current_background.stop() - $AnimatedSprite2D.play("ko") + $AnimatedSprite2D.play("knockout") $AnimatedSprite2D.stop() $AnimatedSprite2D.set_frame_and_progress(0, 0) %SoundNoHp.play() await %SoundNoHp.finished - $AnimatedSprite2D.play("ko") + $AnimatedSprite2D.play("knockout") $Camera2D.drag_top_margin = 1.0 var tween = get_tree().create_tween() - var to_up_difference = global_position.y - 16 - var to_down_difference = global_position.y + get_viewport_rect().size.y + var to_up_difference = visual_global_position.y - 16 + var to_down_difference = visual_global_position.y + get_viewport_rect().size.y tween.tween_property( self, - "global_position", + "visual_global_position", Vector2( - global_position.x, + visual_global_position.x, to_up_difference ), (to_up_difference / to_down_difference) * 1.0 ) tween.tween_property( self, - "global_position", + "visual_global_position", Vector2( - global_position.x, + visual_global_position.x, to_down_difference ), 1.0 ) - %SoundKO.play() - await %SoundKO.finished + %SoundKnockout.play() + await %SoundKnockout.finished Game.transition_to_scene( get_tree().current_scene.scene_file_path.replace(".tscn", "Intro.tscn") @@ -756,3 +1020,19 @@ func state_ko(): pass , } + + +func _on_collision_area_body_entered(body: Node2D) -> void: + if body is TileMapLayer: + current_state = state_water_idle() + +func _on_collision_area_body_exited(body: Node2D) -> void: + if body is TileMapLayer: + (func(): + var bodies: Array = $CollisionArea.get_overlapping_bodies() + bodies = bodies.filter(func(value): + return value is TileMapLayer + ) + if bodies.is_empty(): + current_state = state_jump() + ).call_deferred() diff --git a/project.godot b/project.godot index 4597f73..11d8326 100644 --- a/project.godot +++ b/project.godot @@ -8,6 +8,10 @@ config_version=5 +[animation] + +warnings/check_invalid_track_paths=false + [application] config/name="Kirby" @@ -64,9 +68,12 @@ up={ 2d_physics/layer_1="Player" 2d_physics/layer_2="Enemy" 2d_physics/layer_3="Object" +2d_physics/layer_4="PlayerProjectile" 2d_physics/layer_5="Ground" 2d_physics/layer_6="KOPlane" 2d_physics/layer_7="Door" +2d_physics/layer_8="Water" +2d_physics/layer_10="Boss" [physics] diff --git a/whispy_woods.gd b/whispy_woods.gd new file mode 100644 index 0000000..b5f4058 --- /dev/null +++ b/whispy_woods.gd @@ -0,0 +1,58 @@ +extends Area2D + + +var hp: int = 6 : + set(value): + hp = value + Game.boss_hp_changed.emit(hp) + + +func _ready() -> void: + Game.boss_initialized.emit(hp) + + +func _process(_delta: float) -> void: + # TODO: spawn apples + # TODO: blow wind + pass + + +func hit_by_projectile(hit_position: Vector2): + var effect_star_scene := preload("res://effect_star.tscn") + for direction in [Vector2(1, 1), Vector2(1, -1), Vector2(-1, -1), Vector2(-1, 1)]: + var effect_star := effect_star_scene.instantiate() + effect_star.global_position = hit_position + get_tree().current_scene.add_child(effect_star) + var tween := get_tree().create_tween() + tween.tween_property( + effect_star, + "global_position", + effect_star.global_position + direction * 16, + 0.1 + ) + tween.tween_callback(func(): + effect_star.queue_free() + ) + + SoundManager.play_sound("Hurt") + + hp -= 1 + + $EyeRight.play("eye_closed") + $Mouth.play("eye_closed") + $Tear.visible = true + var tween = get_tree().create_tween() + tween.tween_property(self, "modulate", Color(1, 1, 1, 0.2), 0.1) + tween.tween_property(self, "modulate", Color(1, 1, 1, 0.8), 0.1) + tween.tween_property(self, "modulate", Color(1, 1, 1, 0.2), 0.1) + tween.tween_property(self, "modulate", Color(1, 1, 1, 0.8), 0.1) + + if hp > 0: + tween.tween_callback(func(): + modulate = Color(1, 1, 1, 1.0) + $EyeRight.play("eye_open") + $Mouth.play("mouth_idle") + $Tear.visible = false + ) + elif hp <= 0: + Game.boss_defeated.emit() diff --git a/whispy_woods_sprite_frames.tres b/whispy_woods_sprite_frames.tres new file mode 100644 index 0000000..4886a71 --- /dev/null +++ b/whispy_woods_sprite_frames.tres @@ -0,0 +1,41 @@ +[gd_resource type="SpriteFrames" load_steps=5 format=3 uid="uid://bi6050716beom"] + +[ext_resource type="Texture2D" uid="uid://duscdq6p858dt" path="res://Assets/Enemies/whispy-woods-eye-02.png" id="1_yjx1b"] +[ext_resource type="Texture2D" uid="uid://bpr1plfnw77fh" path="res://Assets/Enemies/whispy-woods-eye-01.png" id="2_g2etd"] +[ext_resource type="Texture2D" uid="uid://c547eyj1dga2p" path="res://Assets/Enemies/whispy-woods-mouth-01.png" id="3_xrihg"] +[ext_resource type="Texture2D" uid="uid://qxh5qqh8oso" path="res://Assets/Enemies/whispy-woods-mouth-02.png" id="4_53nbh"] + +[resource] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("1_yjx1b") +}], +"loop": false, +"name": &"eye_closed", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": ExtResource("2_g2etd") +}], +"loop": false, +"name": &"eye_open", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": ExtResource("3_xrihg") +}], +"loop": false, +"name": &"mouth_idle", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": ExtResource("4_53nbh") +}], +"loop": true, +"name": &"mouth_shoot", +"speed": 5.0 +}] -- cgit v1.2.3