commit a92959cbabb0236507d8b2f5ad6576d61df9a6ab Author: 3002102 <3002102@stud.hs-mannheim.de> Date: Mon Mar 30 23:59:18 2026 +0200 Initial commit diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f28239b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..61a51d0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +# Godot 4+ specific ignores +.godot/ +/android/ +/web/* + +# Web export artifacts in root +*.html +*.js +*.wasm +*.pck \ No newline at end of file diff --git a/assets/fonts/PixelOperator8-Bold.ttf b/assets/fonts/PixelOperator8-Bold.ttf new file mode 100644 index 0000000..10225eb Binary files /dev/null and b/assets/fonts/PixelOperator8-Bold.ttf differ diff --git a/assets/fonts/PixelOperator8-Bold.ttf.import b/assets/fonts/PixelOperator8-Bold.ttf.import new file mode 100644 index 0000000..37b6035 --- /dev/null +++ b/assets/fonts/PixelOperator8-Bold.ttf.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://ctpbh2u36ff41" +path="res://.godot/imported/PixelOperator8-Bold.ttf-74faf550739674ad3170f08e646e0614.fontdata" + +[deps] + +source_file="res://assets/fonts/PixelOperator8-Bold.ttf" +dest_files=["res://.godot/imported/PixelOperator8-Bold.ttf-74faf550739674ad3170f08e646e0614.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +modulate_color_glyphs=false +hinting=1 +subpixel_positioning=4 +keep_rounding_remainders=true +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/fonts/PixelOperator8.ttf b/assets/fonts/PixelOperator8.ttf new file mode 100644 index 0000000..f9146ac Binary files /dev/null and b/assets/fonts/PixelOperator8.ttf differ diff --git a/assets/fonts/PixelOperator8.ttf.import b/assets/fonts/PixelOperator8.ttf.import new file mode 100644 index 0000000..0228172 --- /dev/null +++ b/assets/fonts/PixelOperator8.ttf.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://bskiya6hf2nuc" +path="res://.godot/imported/PixelOperator8.ttf-6f9f01766aff16f52046b880ffb8d367.fontdata" + +[deps] + +source_file="res://assets/fonts/PixelOperator8.ttf" +dest_files=["res://.godot/imported/PixelOperator8.ttf-6f9f01766aff16f52046b880ffb8d367.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +modulate_color_glyphs=false +hinting=1 +subpixel_positioning=4 +keep_rounding_remainders=true +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/music/time_for_adventure.mp3 b/assets/music/time_for_adventure.mp3 new file mode 100644 index 0000000..2ba9940 Binary files /dev/null and b/assets/music/time_for_adventure.mp3 differ diff --git a/assets/music/time_for_adventure.mp3.import b/assets/music/time_for_adventure.mp3.import new file mode 100644 index 0000000..58419cc --- /dev/null +++ b/assets/music/time_for_adventure.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://c73cwy4ooekmy" +path="res://.godot/imported/time_for_adventure.mp3-b8a49ae1cfc83b211be9d82e6e985655.mp3str" + +[deps] + +source_file="res://assets/music/time_for_adventure.mp3" +dest_files=["res://.godot/imported/time_for_adventure.mp3-b8a49ae1cfc83b211be9d82e6e985655.mp3str"] + +[params] + +loop=true +loop_offset=0.0 +bpm=0.0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/apple_powerup.wav b/assets/sounds/apple_powerup.wav new file mode 100644 index 0000000..2e6a458 Binary files /dev/null and b/assets/sounds/apple_powerup.wav differ diff --git a/assets/sounds/apple_powerup.wav.import b/assets/sounds/apple_powerup.wav.import new file mode 100644 index 0000000..78a326b --- /dev/null +++ b/assets/sounds/apple_powerup.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://gtthuaxi63gy" +path="res://.godot/imported/apple_powerup.wav-cf3bcece6d5f48e082227a95a7a0d7ff.sample" + +[deps] + +source_file="res://assets/sounds/apple_powerup.wav" +dest_files=["res://.godot/imported/apple_powerup.wav-cf3bcece6d5f48e082227a95a7a0d7ff.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/sounds/coin.wav b/assets/sounds/coin.wav new file mode 100644 index 0000000..0509182 Binary files /dev/null and b/assets/sounds/coin.wav differ diff --git a/assets/sounds/coin.wav.import b/assets/sounds/coin.wav.import new file mode 100644 index 0000000..2e442cb --- /dev/null +++ b/assets/sounds/coin.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dn80opsbq6oen" +path="res://.godot/imported/coin.wav-9081ee1c6d81d9c34d08bc916297b892.sample" + +[deps] + +source_file="res://assets/sounds/coin.wav" +dest_files=["res://.godot/imported/coin.wav-9081ee1c6d81d9c34d08bc916297b892.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/sounds/explosion.wav b/assets/sounds/explosion.wav new file mode 100644 index 0000000..8a67b16 Binary files /dev/null and b/assets/sounds/explosion.wav differ diff --git a/assets/sounds/explosion.wav.import b/assets/sounds/explosion.wav.import new file mode 100644 index 0000000..997c773 --- /dev/null +++ b/assets/sounds/explosion.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://c23qalcvknjod" +path="res://.godot/imported/explosion.wav-52e05e8d4b6600106c8dde082c90f915.sample" + +[deps] + +source_file="res://assets/sounds/explosion.wav" +dest_files=["res://.godot/imported/explosion.wav-52e05e8d4b6600106c8dde082c90f915.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/sounds/hurt.wav b/assets/sounds/hurt.wav new file mode 100644 index 0000000..b46ecd7 Binary files /dev/null and b/assets/sounds/hurt.wav differ diff --git a/assets/sounds/hurt.wav.import b/assets/sounds/hurt.wav.import new file mode 100644 index 0000000..c9dd284 --- /dev/null +++ b/assets/sounds/hurt.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://coolcllh2qxvq" +path="res://.godot/imported/hurt.wav-792baeb99505afd6a1496d4e4330b023.sample" + +[deps] + +source_file="res://assets/sounds/hurt.wav" +dest_files=["res://.godot/imported/hurt.wav-792baeb99505afd6a1496d4e4330b023.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/sounds/jump.wav b/assets/sounds/jump.wav new file mode 100644 index 0000000..611bddf Binary files /dev/null and b/assets/sounds/jump.wav differ diff --git a/assets/sounds/jump.wav.import b/assets/sounds/jump.wav.import new file mode 100644 index 0000000..177f19f --- /dev/null +++ b/assets/sounds/jump.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://b0w6ok7nj785a" +path="res://.godot/imported/jump.wav-395b727cde98999423d5c020c9c3492f.sample" + +[deps] + +source_file="res://assets/sounds/jump.wav" +dest_files=["res://.godot/imported/jump.wav-395b727cde98999423d5c020c9c3492f.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/sounds/power_up.wav b/assets/sounds/power_up.wav new file mode 100644 index 0000000..d807e3f Binary files /dev/null and b/assets/sounds/power_up.wav differ diff --git a/assets/sounds/power_up.wav.import b/assets/sounds/power_up.wav.import new file mode 100644 index 0000000..68778d4 --- /dev/null +++ b/assets/sounds/power_up.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://clgwsna82md7v" +path="res://.godot/imported/power_up.wav-8349ffe570559470036ebff4b80f7fc0.sample" + +[deps] + +source_file="res://assets/sounds/power_up.wav" +dest_files=["res://.godot/imported/power_up.wav-8349ffe570559470036ebff4b80f7fc0.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/sounds/random.wav b/assets/sounds/random.wav new file mode 100644 index 0000000..249464b Binary files /dev/null and b/assets/sounds/random.wav differ diff --git a/assets/sounds/random.wav.import b/assets/sounds/random.wav.import new file mode 100644 index 0000000..6eebc9f --- /dev/null +++ b/assets/sounds/random.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dwdekuy7yyiwk" +path="res://.godot/imported/random.wav-fb0e57b0311b19b45445f92efb386a67.sample" + +[deps] + +source_file="res://assets/sounds/random.wav" +dest_files=["res://.godot/imported/random.wav-fb0e57b0311b19b45445f92efb386a67.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/sounds/reward.wav b/assets/sounds/reward.wav new file mode 100644 index 0000000..68999ee Binary files /dev/null and b/assets/sounds/reward.wav differ diff --git a/assets/sounds/reward.wav.import b/assets/sounds/reward.wav.import new file mode 100644 index 0000000..488ba54 --- /dev/null +++ b/assets/sounds/reward.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://by32fpioptn4q" +path="res://.godot/imported/reward.wav-dfe7757627e4a89354e3ce6c8bb812ba.sample" + +[deps] + +source_file="res://assets/sounds/reward.wav" +dest_files=["res://.godot/imported/reward.wav-dfe7757627e4a89354e3ce6c8bb812ba.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/sounds/slime_death.wav b/assets/sounds/slime_death.wav new file mode 100644 index 0000000..2f6f30c Binary files /dev/null and b/assets/sounds/slime_death.wav differ diff --git a/assets/sounds/slime_death.wav.import b/assets/sounds/slime_death.wav.import new file mode 100644 index 0000000..fa0a97d --- /dev/null +++ b/assets/sounds/slime_death.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bury105ank0yr" +path="res://.godot/imported/slime_death.wav-4469baa363bff7ba832b65818f85dabc.sample" + +[deps] + +source_file="res://assets/sounds/slime_death.wav" +dest_files=["res://.godot/imported/slime_death.wav-4469baa363bff7ba832b65818f85dabc.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/sounds/tap.wav b/assets/sounds/tap.wav new file mode 100644 index 0000000..e9dc6ab Binary files /dev/null and b/assets/sounds/tap.wav differ diff --git a/assets/sounds/tap.wav.import b/assets/sounds/tap.wav.import new file mode 100644 index 0000000..b024b02 --- /dev/null +++ b/assets/sounds/tap.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cccv3rsb2tl2o" +path="res://.godot/imported/tap.wav-78d4c5a48b21a853d89bec74f20510e7.sample" + +[deps] + +source_file="res://assets/sounds/tap.wav" +dest_files=["res://.godot/imported/tap.wav-78d4c5a48b21a853d89bec74f20510e7.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/sprites/coin.png b/assets/sprites/coin.png new file mode 100644 index 0000000..01ae33d Binary files /dev/null and b/assets/sprites/coin.png differ diff --git a/assets/sprites/coin.png.import b/assets/sprites/coin.png.import new file mode 100644 index 0000000..c074e57 --- /dev/null +++ b/assets/sprites/coin.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d4fwq6yk3reuv" +path="res://.godot/imported/coin.png-c8309bf0f8fb5f3a7d1e96a4eb3f02ce.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/coin.png" +dest_files=["res://.godot/imported/coin.png-c8309bf0f8fb5f3a7d1e96a4eb3f02ce.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/sprites/fruit.png b/assets/sprites/fruit.png new file mode 100644 index 0000000..b9cc7d6 Binary files /dev/null and b/assets/sprites/fruit.png differ diff --git a/assets/sprites/fruit.png.import b/assets/sprites/fruit.png.import new file mode 100644 index 0000000..272b8d8 --- /dev/null +++ b/assets/sprites/fruit.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dbxb602buq7wu" +path="res://.godot/imported/fruit.png-3735163b668af10c2b35b52cba81b68a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/fruit.png" +dest_files=["res://.godot/imported/fruit.png-3735163b668af10c2b35b52cba81b68a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/sprites/heart pixel art 254x254.png b/assets/sprites/heart pixel art 254x254.png new file mode 100644 index 0000000..890f86d Binary files /dev/null and b/assets/sprites/heart pixel art 254x254.png differ diff --git a/assets/sprites/heart pixel art 254x254.png.import b/assets/sprites/heart pixel art 254x254.png.import new file mode 100644 index 0000000..843999a --- /dev/null +++ b/assets/sprites/heart pixel art 254x254.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dabprs454c7ju" +path="res://.godot/imported/heart pixel art 254x254.png-bf5d7bd2013a0ba8739c22b702a6de57.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/heart pixel art 254x254.png" +dest_files=["res://.godot/imported/heart pixel art 254x254.png-bf5d7bd2013a0ba8739c22b702a6de57.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/sprites/heart.png b/assets/sprites/heart.png new file mode 100644 index 0000000..6bea22c Binary files /dev/null and b/assets/sprites/heart.png differ diff --git a/assets/sprites/heart.png.import b/assets/sprites/heart.png.import new file mode 100644 index 0000000..4b19e8e --- /dev/null +++ b/assets/sprites/heart.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://djpog0c5jr3sf" +path="res://.godot/imported/heart.png-c56d6fd64b59465fefa3cddd61b854ed.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/heart.png" +dest_files=["res://.godot/imported/heart.png-c56d6fd64b59465fefa3cddd61b854ed.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/sprites/knight.png b/assets/sprites/knight.png new file mode 100644 index 0000000..5b0eb4f Binary files /dev/null and b/assets/sprites/knight.png differ diff --git a/assets/sprites/knight.png.import b/assets/sprites/knight.png.import new file mode 100644 index 0000000..213f08c --- /dev/null +++ b/assets/sprites/knight.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bd4fgamr0s365" +path="res://.godot/imported/knight.png-7c67c83d34932624952797d9e971a644.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/knight.png" +dest_files=["res://.godot/imported/knight.png-7c67c83d34932624952797d9e971a644.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/sprites/pixel_art_flag.png b/assets/sprites/pixel_art_flag.png new file mode 100644 index 0000000..7b1889d Binary files /dev/null and b/assets/sprites/pixel_art_flag.png differ diff --git a/assets/sprites/pixel_art_flag.png.import b/assets/sprites/pixel_art_flag.png.import new file mode 100644 index 0000000..cd6e5ce --- /dev/null +++ b/assets/sprites/pixel_art_flag.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bmh530kr2bj5" +path="res://.godot/imported/pixel_art_flag.png-e3d54503fc90e178513c474c63e80b55.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/pixel_art_flag.png" +dest_files=["res://.godot/imported/pixel_art_flag.png-e3d54503fc90e178513c474c63e80b55.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/sprites/platforms.png b/assets/sprites/platforms.png new file mode 100644 index 0000000..9be41db Binary files /dev/null and b/assets/sprites/platforms.png differ diff --git a/assets/sprites/platforms.png.import b/assets/sprites/platforms.png.import new file mode 100644 index 0000000..32155b6 --- /dev/null +++ b/assets/sprites/platforms.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://nuwsrb1cifv4" +path="res://.godot/imported/platforms.png-3869606db457611ed4193d705dc364e4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/platforms.png" +dest_files=["res://.godot/imported/platforms.png-3869606db457611ed4193d705dc364e4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/sprites/slime_green.png b/assets/sprites/slime_green.png new file mode 100644 index 0000000..a21cb6f Binary files /dev/null and b/assets/sprites/slime_green.png differ diff --git a/assets/sprites/slime_green.png.import b/assets/sprites/slime_green.png.import new file mode 100644 index 0000000..fa2c20d --- /dev/null +++ b/assets/sprites/slime_green.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bmn317iwnsb6x" +path="res://.godot/imported/slime_green.png-f6349164bf3a0f5189bb927b97af9c58.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/slime_green.png" +dest_files=["res://.godot/imported/slime_green.png-f6349164bf3a0f5189bb927b97af9c58.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/sprites/slime_purple.png b/assets/sprites/slime_purple.png new file mode 100644 index 0000000..76f564e Binary files /dev/null and b/assets/sprites/slime_purple.png differ diff --git a/assets/sprites/slime_purple.png.import b/assets/sprites/slime_purple.png.import new file mode 100644 index 0000000..9d1794d --- /dev/null +++ b/assets/sprites/slime_purple.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dn1t5jme0mu1u" +path="res://.godot/imported/slime_purple.png-26dc5ddef235ce6a400e78e0d532b050.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/slime_purple.png" +dest_files=["res://.godot/imported/slime_purple.png-26dc5ddef235ce6a400e78e0d532b050.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/sprites/world_tileset.png b/assets/sprites/world_tileset.png new file mode 100644 index 0000000..36bbf07 Binary files /dev/null and b/assets/sprites/world_tileset.png differ diff --git a/assets/sprites/world_tileset.png.import b/assets/sprites/world_tileset.png.import new file mode 100644 index 0000000..fb2baa9 --- /dev/null +++ b/assets/sprites/world_tileset.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://qqsyx1e7v2fu" +path="res://.godot/imported/world_tileset.png-61a32465f33c3d9d3bfecb75b6485009.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/world_tileset.png" +dest_files=["res://.godot/imported/world_tileset.png-61a32465f33c3d9d3bfecb75b6485009.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/default_bus_layout.tres b/default_bus_layout.tres new file mode 100644 index 0000000..c9b3745 --- /dev/null +++ b/default_bus_layout.tres @@ -0,0 +1,15 @@ +[gd_resource type="AudioBusLayout" format=3 uid="uid://bbxij0qlpsswv"] + +[resource] +bus/1/name = &"Music" +bus/1/solo = false +bus/1/mute = false +bus/1/bypass_fx = false +bus/1/volume_db = -17.028168 +bus/1/send = &"Master" +bus/2/name = &"SFX" +bus/2/solo = false +bus/2/mute = false +bus/2/bypass_fx = false +bus/2/volume_db = -17.021105 +bus/2/send = &"Master" diff --git a/export_presets.cfg b/export_presets.cfg new file mode 100644 index 0000000..94b229a --- /dev/null +++ b/export_presets.cfg @@ -0,0 +1,121 @@ +[preset.0] + +name="Windows Desktop" +platform="Windows Desktop" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="./platformer.exe" +patches=PackedStringArray() +patch_delta_encoding=false +patch_delta_compression_level_zstd=19 +patch_delta_min_reduction=0.1 +patch_delta_include_filters="*" +patch_delta_exclude_filters="" +encryption_include_filters="" +encryption_exclude_filters="" +seed=0 +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.0.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=true +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false +shader_baker/enabled=false +binary_format/architecture="x86_64" +codesign/enable=false +codesign/timestamp=true +codesign/timestamp_server_url="" +codesign/digest_algorithm=1 +codesign/description="" +codesign/custom_options=PackedStringArray() +application/modify_resources=true +application/icon="" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="" +application/product_version="" +application/company_name="" +application/product_name="jaros platformer" +application/file_description="" +application/copyright="" +application/trademarks="" +application/export_angle=0 +application/export_d3d12=0 +application/d3d12_agility_sdk_multiarch=true +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' +$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' +$trigger = New-ScheduledTaskTrigger -Once -At 00:00 +$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries +$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings +Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true +Start-ScheduledTask -TaskName godot_remote_debug +while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" +ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue +Remove-Item -Recurse -Force '{temp_dir}'" + +[preset.1] + +name="Web" +platform="Web" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="web/index.html" +patches=PackedStringArray() +patch_delta_encoding=false +patch_delta_compression_level_zstd=19 +patch_delta_min_reduction=0.1 +patch_delta_include_filters="*" +patch_delta_exclude_filters="" +encryption_include_filters="" +encryption_exclude_filters="" +seed=0 +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.1.options] + +custom_template/debug="" +custom_template/release="" +variant/extensions_support=false +variant/thread_support=false +vram_texture_compression/for_desktop=true +vram_texture_compression/for_mobile=false +html/export_icon=true +html/custom_html_shell="" +html/head_include="" +html/canvas_resize_policy=2 +html/focus_canvas_on_start=true +html/experimental_virtual_keyboard=false +progressive_web_app/enabled=false +progressive_web_app/ensure_cross_origin_isolation_headers=true +progressive_web_app/offline_page="" +progressive_web_app/display=1 +progressive_web_app/orientation=0 +progressive_web_app/icon_144x144="" +progressive_web_app/icon_180x180="" +progressive_web_app/icon_512x512="" +progressive_web_app/background_color=Color(0, 0, 0, 1) +threads/emscripten_pool_size=8 +threads/godot_pool_size=4 diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..47d25c9 --- /dev/null +++ b/project.godot @@ -0,0 +1,56 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="platformer" +run/main_scene="uid://qrhju8j4q7de" +config/features=PackedStringArray("4.6", "Forward Plus") +config/icon="res://icon.svg" + +[audio] + +buses/default_bus_layout="uid://bbxij0qlpsswv" + +[autoload] + +Music="*uid://bgm4w3aauu7e7" + +[input] + +jump={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +move_left={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +move_right={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} + +[physics] + +3d/physics_engine="Jolt Physics" + +[rendering] + +textures/canvas_textures/default_texture_filter=0 +rendering_device/driver.windows="d3d12" +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" diff --git a/scenes/apple.tscn b/scenes/apple.tscn new file mode 100644 index 0000000..31a61cf --- /dev/null +++ b/scenes/apple.tscn @@ -0,0 +1,128 @@ +[gd_scene format=3 uid="uid://mhhmhiv68pl4"] + +[ext_resource type="Script" uid="uid://ccc81ck60gyxg" path="res://scripts/apple.gd" id="1_7vr8k"] +[ext_resource type="Texture2D" uid="uid://dbxb602buq7wu" path="res://assets/sprites/fruit.png" id="1_h071m"] +[ext_resource type="AudioStream" uid="uid://gtthuaxi63gy" path="res://assets/sounds/apple_powerup.wav" id="3_3dmh2"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_7vr8k"] +radius = 7.0 + +[sub_resource type="Animation" id="Animation_pg1xk"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("PickupZone:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("PickupSound:playing") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_a7wfc"] +resource_name = "pickup" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("PickupZone:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("PickupSound:playing") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(1), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"queue_free" +}] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_kxxqw"] +_data = { +&"RESET": SubResource("Animation_pg1xk"), +&"pickup": SubResource("Animation_a7wfc") +} + +[node name="Apple" type="Area2D" unique_id=898321301] +collision_mask = 2 +script = ExtResource("1_7vr8k") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1249274264] +texture = ExtResource("1_h071m") +region_enabled = true +region_rect = Rect2(2, 50, 11, 13) + +[node name="PickupZone" type="CollisionShape2D" parent="." unique_id=1492815631] +shape = SubResource("CircleShape2D_7vr8k") + +[node name="PickupSound" type="AudioStreamPlayer2D" parent="." unique_id=1451366560] +position = Vector2(1, 0) +stream = ExtResource("3_3dmh2") +bus = &"SFX" + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=2077470024] +libraries/ = SubResource("AnimationLibrary_kxxqw") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/scenes/coin.tscn b/scenes/coin.tscn new file mode 100644 index 0000000..b10ad41 --- /dev/null +++ b/scenes/coin.tscn @@ -0,0 +1,222 @@ +[gd_scene format=3 uid="uid://br2i1akcrs6oy"] + +[ext_resource type="Script" uid="uid://bl6qtyu60o6ug" path="res://scripts/coin.gd" id="1_i64fm"] +[ext_resource type="Texture2D" uid="uid://d4fwq6yk3reuv" path="res://assets/sprites/coin.png" id="1_rwqht"] +[ext_resource type="AudioStream" uid="uid://dn80opsbq6oen" path="res://assets/sounds/coin.wav" id="3_11l1o"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_i64fm"] +atlas = ExtResource("1_rwqht") +region = Rect2(0, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_11l1o"] +atlas = ExtResource("1_rwqht") +region = Rect2(16, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_d14el"] +atlas = ExtResource("1_rwqht") +region = Rect2(32, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1ikuy"] +atlas = ExtResource("1_rwqht") +region = Rect2(48, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wnlwo"] +atlas = ExtResource("1_rwqht") +region = Rect2(64, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jig8b"] +atlas = ExtResource("1_rwqht") +region = Rect2(80, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xmuha"] +atlas = ExtResource("1_rwqht") +region = Rect2(96, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_kfxoj"] +atlas = ExtResource("1_rwqht") +region = Rect2(112, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jsmju"] +atlas = ExtResource("1_rwqht") +region = Rect2(128, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_s0mny"] +atlas = ExtResource("1_rwqht") +region = Rect2(144, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_7cc30"] +atlas = ExtResource("1_rwqht") +region = Rect2(160, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rojmm"] +atlas = ExtResource("1_rwqht") +region = Rect2(176, 0, 16, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_ls27i"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_i64fm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_11l1o") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_d14el") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1ikuy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_wnlwo") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jig8b") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xmuha") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_kfxoj") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jsmju") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_s0mny") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7cc30") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rojmm") +}], +"loop": true, +"name": &"default", +"speed": 10.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_ssuvv"] +radius = 5.0 + +[sub_resource type="Animation" id="Animation_d14el"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CollisionShape2D:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("PickUpSound:playing") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_1ikuy"] +resource_name = "pickup" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("AnimatedSprite2D:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CollisionShape2D:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("PickUpSound:playing") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(1), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"queue_free" +}] +} + +[sub_resource type="Animation" id="Animation_11l1o"] +resource_name = "popup" + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_wnlwo"] +_data = { +&"RESET": SubResource("Animation_d14el"), +&"pickup": SubResource("Animation_1ikuy"), +&"popup": SubResource("Animation_11l1o") +} + +[node name="Coin" type="Area2D" unique_id=2141300314] +collision_mask = 2 +script = ExtResource("1_i64fm") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=572855694] +sprite_frames = SubResource("SpriteFrames_ls27i") +autoplay = "default" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1697627578] +shape = SubResource("CircleShape2D_ssuvv") + +[node name="PickUpSound" type="AudioStreamPlayer2D" parent="." unique_id=551046864] +stream = ExtResource("3_11l1o") +bus = &"SFX" + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=990067559] +libraries/ = SubResource("AnimationLibrary_wnlwo") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/scenes/end_screen.tscn b/scenes/end_screen.tscn new file mode 100644 index 0000000..3a302ee --- /dev/null +++ b/scenes/end_screen.tscn @@ -0,0 +1,32 @@ +[gd_scene format=3 uid="uid://cbjojcjcqiar8"] + +[ext_resource type="Script" uid="uid://coasi1e17k3wq" path="res://scripts/end_screen.gd" id="1_endscreen"] + +[node name="EndScreen" type="CanvasLayer" unique_id=1535256465] +script = ExtResource("1_endscreen") + +[node name="TimeTaken" type="Label" parent="." unique_id=819347105] +offset_left = 457.0 +offset_top = 268.0 +offset_right = 621.0 +offset_bottom = 291.0 +text = "Your attempt took 0s" + +[node name="CoinsCollected" type="Label" parent="." unique_id=124204138] +offset_left = 444.0 +offset_top = 312.0 +offset_right = 629.0 +offset_bottom = 335.0 +text = "you collected 0/10 coins" + +[node name="Restart" type="Button" parent="." unique_id=635161693] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 483.0 +offset_top = 360.0 +offset_right = -560.0 +offset_bottom = -248.0 +grow_horizontal = 2 +grow_vertical = 2 +text = "Start Over" diff --git a/scenes/end_zone.tscn b/scenes/end_zone.tscn new file mode 100644 index 0000000..2bce686 --- /dev/null +++ b/scenes/end_zone.tscn @@ -0,0 +1,13 @@ +[gd_scene format=3 uid="uid://dvopkdk03dyx6"] + +[ext_resource type="Script" path="res://scripts/end_zone.gd" id="1_endzone"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ji0tw"] +size = Vector2(20, 252) + +[node name="EndZone" type="Area2D" unique_id=1254881841] +collision_mask = 2 +script = ExtResource("1_endzone") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=387434415] +shape = SubResource("RectangleShape2D_ji0tw") diff --git a/scenes/game.tscn b/scenes/game.tscn new file mode 100644 index 0000000..36c48d2 --- /dev/null +++ b/scenes/game.tscn @@ -0,0 +1,653 @@ +[gd_scene format=4 uid="uid://qrhju8j4q7de"] + +[ext_resource type="Script" uid="uid://cf2xjcjast04e" path="res://scripts/game_manager.gd" id="1_gee14"] +[ext_resource type="PackedScene" uid="uid://cdg82mh4ljjty" path="res://scenes/player.tscn" id="1_uwrxv"] +[ext_resource type="Texture2D" uid="uid://qqsyx1e7v2fu" path="res://assets/sprites/world_tileset.png" id="2_yqjtg"] +[ext_resource type="PackedScene" uid="uid://b41gwy6bpg7qv" path="res://scenes/platform.tscn" id="3_lnu2h"] +[ext_resource type="PackedScene" uid="uid://br2i1akcrs6oy" path="res://scenes/coin.tscn" id="4_lbhrr"] +[ext_resource type="PackedScene" uid="uid://c88udyeyn4dcf" path="res://scenes/killzone_player.tscn" id="5_iywne"] +[ext_resource type="PackedScene" uid="uid://bcwi265pjhitd" path="res://scenes/slime.tscn" id="6_p57ef"] +[ext_resource type="PackedScene" uid="uid://27b27wmftbt8" path="res://scenes/overlay.tscn" id="8_gee14"] +[ext_resource type="PackedScene" uid="uid://dotxkxflj0c4h" path="res://scenes/lucky_block.tscn" id="9_0tnpc"] +[ext_resource type="PackedScene" uid="uid://mhhmhiv68pl4" path="res://scenes/apple.tscn" id="10_kvpfn"] +[ext_resource type="PackedScene" uid="uid://dvopkdk03dyx6" path="res://scenes/end_zone.tscn" id="11_dinhu"] +[ext_resource type="Texture2D" uid="uid://bmh530kr2bj5" path="res://assets/sprites/pixel_art_flag.png" id="12_dinhu"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_lnu2h"] +texture = ExtResource("2_yqjtg") +0:0/0 = 0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:0/0 = 0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:0/0 = 0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +3:0/0 = 0 +3:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +4:0/0 = 0 +4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +5:0/0 = 0 +5:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +6:0/0 = 0 +6:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0 = 0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0 = 0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0 = 0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -5.3957615, 8, 0.8992939, -8, 1.0791531) +10:0/0 = 0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -5.755479, 8, -5.935337, 8, 0.8992939, -8, 1.0791531) +11:0/0 = 0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -5.935337, 8, -8, 8, -0.17985725, -8, 0) +0:1/0 = 0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:1/0 = 0 +1:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:1/0 = 0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +3:1/0 = 0 +3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +4:1/0 = 0 +4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +5:1/0 = 0 +5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +6:1/0 = 0 +6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0 = 0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0 = 0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0 = 0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -5.3957615, 8, 0.8992939, -8, 1.0791531) +10:1/0 = 0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -5.755479, 8, -5.935337, 8, 0.8992939, -8, 1.0791531) +11:1/0 = 0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -5.935337, 8, -8, 8, -0.17985725, -8, 0) +0:2/0 = 0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:2/0 = 0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +2:2/0 = 0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +3:2/0 = 0 +3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +4:2/0 = 0 +4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +5:2/0 = 0 +5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +6:2/0 = 0 +6:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0 = 0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0 = 0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0 = 0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -5.3957615, 8, 0.8992939, -8, 1.0791531) +10:2/0 = 0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -5.755479, 8, -5.935337, 8, 0.8992939, -8, 1.0791531) +11:2/0 = 0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -5.935337, 8, -8, 8, -0.17985725, -8, 0) +0:3/0 = 0 +1:3/0 = 0 +2:3/0 = 0 +5:3/0 = 0 +6:3/0 = 0 +7:3/0 = 0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0 = 0 +9:3/0 = 0 +0:4/0 = 0 +1:4/0 = 0 +5:4/0 = 0 +6:4/0 = 0 +7:4/0 = 0 +7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:4/0 = 0 +9:4/0 = 0 +0:5/0 = 0 +1:5/0 = 0 +5:5/0 = 0 +6:5/0 = 0 +7:5/0 = 0 +8:5/0 = 0 +1:6/0 = 0 +5:6/0 = 0 +6:6/0 = 0 +7:6/0 = 0 +8:6/0 = 0 +0:7/0 = 0 +1:7/0 = 0 +3:7/0 = 0 +5:7/0 = 0 +6:7/0 = 0 +7:7/0 = 0 +8:7/0 = 0 +0:8/0 = 0 +1:8/0 = 0 +2:8/0 = 0 +3:8/0 = 0 +4:8/0 = 0 +5:8/0 = 0 +6:8/0 = 0 +7:8/0 = 0 +8:8/0 = 0 +0:9/0 = 0 +1:9/0 = 0 +2:9/0 = 0 +3:9/0 = 0 +4:9/0 = 0 +5:9/0 = 0 +6:9/0 = 0 +7:9/0 = 0 +0:10/0 = 0 +1:10/0 = 0 +2:10/0 = 0 +3:10/0 = 0 +4:10/0 = 0 +6:10/0 = 0 +0:11/0 = 0 +1:11/0 = 0 +2:11/0 = 0 +3:11/0 = 0 +4:11/0 = 0 +5:11/0 = 0 +0:12/0 = 0 +1:12/0 = 0 +2:12/0 = 0 +3:12/0 = 0 +4:12/0 = 0 +0:13/0 = 0 +1:13/0 = 0 +2:13/0 = 0 +3:13/0 = 0 +4:13/0 = 0 +5:13/0 = 0 +0:14/0 = 0 +1:14/0 = 0 +2:14/0 = 0 +3:14/0 = 0 +4:14/0 = 0 +0:15/0 = 0 +1:15/0 = 0 +2:15/0 = 0 +3:15/0 = 0 +2:4/size_in_atlas = Vector2i(3, 3) +2:4/0 = 0 + +[sub_resource type="TileSet" id="TileSet_lbhrr"] +physics_layer_0/collision_layer = 1 +sources/0 = SubResource("TileSetAtlasSource_lnu2h") + +[sub_resource type="Animation" id="Animation_lnu2h"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0.06666667), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(947, 6)] +} + +[sub_resource type="Animation" id="Animation_lbhrr"] +resource_name = "move" +length = 1.5 +loop_mode = 2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(401, 85), Vector2(496, 85)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_iywne"] +_data = { +&"RESET": SubResource("Animation_lnu2h"), +&"move": SubResource("Animation_lbhrr") +} + +[sub_resource type="Animation" id="Animation_vtaks"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(944, 5)] +} + +[sub_resource type="Animation" id="Animation_0tnpc"] +resource_name = "move" +length = 3.0 +loop_mode = 2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(944, 5), Vector2(1121, 5)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_vtaks"] +_data = { +&"RESET": SubResource("Animation_vtaks"), +&"move": SubResource("Animation_0tnpc") +} + +[sub_resource type="Animation" id="Animation_kvuet"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(2624, 21)] +} + +[sub_resource type="Animation" id="Animation_trtic"] +resource_name = "move" +length = 2.0 +loop_mode = 2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(2624, 21), Vector2(2725, 21)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_ir15t"] +_data = { +&"RESET": SubResource("Animation_kvuet"), +&"move": SubResource("Animation_trtic") +} + +[sub_resource type="Animation" id="Animation_ca42v"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(2756, 29)] +} + +[sub_resource type="Animation" id="Animation_rysoc"] +resource_name = "move" +length = 2.0 +loop_mode = 2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(2756, 29), Vector2(2795, 29)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_ssvqc"] +_data = { +&"RESET": SubResource("Animation_ca42v"), +&"move": SubResource("Animation_rysoc") +} + +[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_p57ef"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_iywne"] +texture = ExtResource("2_yqjtg") +0:0/0 = 0 +1:0/0 = 0 +2:0/0 = 0 +3:0/0 = 0 +4:0/0 = 0 +5:0/0 = 0 +6:0/0 = 0 +7:0/0 = 0 +8:0/0 = 0 +9:0/0 = 0 +10:0/0 = 0 +11:0/0 = 0 +0:1/0 = 0 +1:1/0 = 0 +2:1/0 = 0 +3:1/0 = 0 +4:1/0 = 0 +5:1/0 = 0 +6:1/0 = 0 +7:1/0 = 0 +8:1/0 = 0 +9:1/0 = 0 +10:1/0 = 0 +11:1/0 = 0 +0:2/0 = 0 +1:2/0 = 0 +2:2/0 = 0 +3:2/0 = 0 +4:2/0 = 0 +5:2/0 = 0 +6:2/0 = 0 +7:2/0 = 0 +8:2/0 = 0 +9:2/0 = 0 +10:2/0 = 0 +11:2/0 = 0 +0:3/0 = 0 +1:3/0 = 0 +2:3/0 = 0 +5:3/0 = 0 +6:3/0 = 0 +7:3/0 = 0 +8:3/0 = 0 +9:3/0 = 0 +0:4/0 = 0 +1:4/0 = 0 +2:4/0 = 0 +3:4/0 = 0 +4:4/0 = 0 +5:4/0 = 0 +6:4/0 = 0 +7:4/0 = 0 +8:4/0 = 0 +9:4/0 = 0 +0:5/0 = 0 +1:5/0 = 0 +2:5/0 = 0 +3:5/0 = 0 +4:5/0 = 0 +5:5/0 = 0 +6:5/0 = 0 +7:5/0 = 0 +8:5/0 = 0 +1:6/0 = 0 +2:6/0 = 0 +3:6/0 = 0 +4:6/0 = 0 +5:6/0 = 0 +6:6/0 = 0 +7:6/0 = 0 +8:6/0 = 0 +0:7/0 = 0 +1:7/0 = 0 +3:7/0 = 0 +5:7/0 = 0 +6:7/0 = 0 +7:7/0 = 0 +8:7/0 = 0 +0:8/0 = 0 +1:8/0 = 0 +2:8/0 = 0 +3:8/0 = 0 +4:8/0 = 0 +5:8/0 = 0 +6:8/0 = 0 +7:8/0 = 0 +8:8/0 = 0 +0:9/0 = 0 +1:9/0 = 0 +2:9/0 = 0 +3:9/0 = 0 +4:9/0 = 0 +5:9/0 = 0 +6:9/0 = 0 +7:9/0 = 0 +0:10/0 = 0 +1:10/0 = 0 +2:10/0 = 0 +3:10/0 = 0 +4:10/0 = 0 +6:10/0 = 0 +0:11/0 = 0 +1:11/0 = 0 +2:11/0 = 0 +3:11/0 = 0 +4:11/0 = 0 +5:11/0 = 0 +0:12/0 = 0 +1:12/0 = 0 +2:12/0 = 0 +3:12/0 = 0 +4:12/0 = 0 +0:13/0 = 0 +1:13/0 = 0 +2:13/0 = 0 +3:13/0 = 0 +4:13/0 = 0 +5:13/0 = 0 +0:14/0 = 0 +1:14/0 = 0 +2:14/0 = 0 +3:14/0 = 0 +4:14/0 = 0 +0:15/0 = 0 +1:15/0 = 0 +2:15/0 = 0 +3:15/0 = 0 + +[sub_resource type="TileSet" id="TileSet_p57ef"] +sources/0 = SubResource("TileSetAtlasSource_iywne") + +[node name="Game" type="Node2D" unique_id=1899985243] + +[node name="GameManager" type="Node" parent="." unique_id=1893431786] +unique_name_in_owner = true +script = ExtResource("1_gee14") + +[node name="Overlay" parent="." unique_id=963473093 instance=ExtResource("8_gee14")] +unique_name_in_owner = true + +[node name="TileMapLayer" type="TileMapLayer" parent="." unique_id=2046242788] +tile_map_data = PackedByteArray("AAADAAUAAAAAAAAAAAAEAAUAAAAAAAAAAAABAAcAAAAAAAAAAAACAAcAAAAAAAAAAAAFAAcAAAAGAAAAAAAGAAcAAAAGAAAAAAAHAAcAAAAGAAAAAAALAAcAAAAGAAAAAAAMAAcAAAAGAAAAAAAOAAcAAAAHAAEAAAAPAAcAAAAGAAAAAAAGAAEAAAAAAAAAAAAHAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAJAAIAAAAAAAAAAAABAAgAAAAAAAEAAAABAAkAAAAAAAEAAAACAAkAAAABAAAAAAACAAgAAAAAAAEAAAADAAkAAAAAAAEAAAAEAAkAAAAAAAEAAAAEAAgAAAABAAAAAAAEAAcAAAAAAAEAAAAEAAYAAAAAAAEAAAADAAYAAAAAAAEAAAADAAcAAAAAAAEAAAADAAgAAAAAAAEAAAAGAAIAAAAAAAEAAAAHAAIAAAABAAAAAAAIAAIAAAAAAAEAAAAIAAEAAAAAAAEAAAAHAAEAAAAAAAEAAAAFAAgAAAAGAAEAAAAFAAkAAAAGAAEAAAAGAAkAAAAGAAEAAAAHAAkAAAAGAAEAAAAHAAgAAAAGAAEAAAAGAAgAAAAIAAAAAAALAAgAAAAGAAEAAAALAAkAAAAGAAEAAAAMAAkAAAAGAAEAAAAMAAgAAAAGAAEAAAAOAAgAAAAGAAEAAAAOAAkAAAAGAAEAAAAPAAkAAAAGAAEAAAAPAAgAAAAIAAAAAAAKAAIAAAAAAAAAAAAJAAMAAAAAAAEAAAAKAAMAAAAAAAEAAAAIAAcAAAAJAAAAAAAJAAcAAAAKAAAAAAAKAAcAAAALAAAAAAANAAIAAAAAAAAAAAANAAMAAAAAAAEAAAAOAAEAAAAAAAAAAAAOAAIAAAAAAAEAAAAOAAMAAAAAAAEAAAAPAAEAAAAAAAAAAAAPAAIAAAABAAAAAAAPAAMAAAAAAAEAAAAQAAIAAAAAAAAAAAAQAAMAAAAAAAEAAAAMAAIAAAALAAAAAAALAAIAAAAJAAAAAAARAAMAAAAEAAAAAAASAAMAAAAEAAAAAAATAAMAAAAEAAAAAAAWAAUAAAAEAAAAAAAXAAUAAAAEAAAAAAAUAAQAAAAFAAAAAAAVAAUAAAAFAAAAAAARAAQAAAAEAAEAAAASAAQAAAAEAAEAAAATAAQAAAAEAAEAAAATAAUAAAAEAAEAAAAUAAUAAAAEAAEAAAAUAAYAAAAEAAEAAAAVAAYAAAAEAAEAAAAWAAYAAAAEAAEAAAAXAAYAAAAEAAEAAAAWAAcAAAAEAAEAAAAWAAgAAAAEAAEAAAAWAAkAAAAEAAEAAAAXAAcAAAAEAAEAAAAXAAkAAAAEAAEAAAAXAAgAAAAFAAEAAAACAAYAAAABAAAAAAAKAAEAAAAAAAUAAAAKAAAAAAAAAAQAAAAKAP//AAAAAAQAAAAKAP7/AAAAAAMAAAALAAYAAAAAAAgAAAAgAAcAAAACAAEAAAAgAAgAAAADAAAAAAAgAAkAAAACAAEAAAAhAAcAAAACAAEAAAAhAAgAAAACAAEAAAAhAAkAAAACAAEAAAAgAAUAAAACAAIAAAAgAAYAAAACAAEAAAAhAAUAAAACAAIAAAAhAAYAAAADAAAAAAAiAAcAAAADAAAAAAAiAAgAAAACAAEAAAAiAAkAAAACAAEAAAAjAAcAAAACAAEAAAAjAAgAAAACAAEAAAAjAAkAAAADAAEAAAASAAIAAAAIAAYAAAATAAIAAAAFAAUAAAATAAEAAAAFAAQAAAATAAAAAAAFAAMAAAAVAAQAAAAFAAgAAAAkAAcAAAACAAEAAAAlAAcAAAACAAEAAAAmAAcAAAACAAEAAAAnAAcAAAACAAEAAAAoAAcAAAACAAEAAAApAAcAAAACAAEAAAApAAYAAAACAAEAAAAqAAYAAAACAAEAAAAqAAUAAAACAAIAAAAkAAkAAAACAAEAAAAlAAkAAAACAAEAAAAmAAkAAAACAAEAAAAnAAkAAAACAAEAAAAoAAgAAAACAAEAAAApAAgAAAADAAAAAAAqAAgAAAACAAEAAAArAAgAAAACAAEAAAAsAAgAAAACAAEAAAArAAkAAAACAAEAAAAqAAkAAAADAAAAAAApAAkAAAACAAEAAAAoAAkAAAACAAEAAAAqAAcAAAACAAEAAAAnAAgAAAACAAEAAAAmAAgAAAADAAEAAAAlAAgAAAACAAEAAAAkAAgAAAADAAAAAAAkAAMAAAACAAQAAAAkAAUAAAADAAgAAAAkAAYAAAACAAgAAAArAAUAAAACAAIAAAAsAAYAAAACAAIAAAAsAAcAAAADAAEAAAAtAAcAAAACAAIAAAArAAYAAAADAAEAAAArAAcAAAACAAEAAAAsAAkAAAACAAEAAAAtAAkAAAADAAAAAAAtAAgAAAACAAEAAAAsAAMAAAAAAAAAAAAtAAMAAAAAAAAAAAAuAAQAAAAAAAEAAAAvAAIAAAAAAAAAAAAvAAQAAAAAAAEAAAAvAAMAAAABAAEAAAAuAAUAAAABAAEAAAAvAAUAAAAAAAEAAAAvAAYAAAAAAAEAAAAuAAkAAAACAAEAAAAvAAkAAAACAAEAAAAwAAkAAAACAAEAAAAwAAgAAAACAAEAAAAxAAgAAAACAAEAAAAxAAkAAAADAAEAAAAyAAkAAAACAAEAAAAyAAgAAAADAAAAAAAtAAQAAAABAAAAAAAuAAMAAAAAAAEAAAAuAAIAAAAAAAAAAAAnAAEAAAACAAQAAAAnAAMAAAADAAcAAAAnAAQAAAADAAgAAAAnAAUAAAACAAgAAAAnAAYAAAACAAgAAAA0AAIAAAAAAAEAAAA1AAEAAAAAAAAAAAA2AAIAAAAAAAAAAAA3AAIAAAAAAAAAAAA4AAEAAAAAAAAAAAA5AAAAAAAAAAAAAAA1AAIAAAAAAAEAAAA1AAMAAAAAAAEAAAA0AAMAAAAAAAEAAAA2AAMAAAAAAAEAAAA3AAMAAAAAAAEAAAA4AAMAAAAAAAEAAAA4AAIAAAAAAAEAAAA5AAEAAAAAAAEAAAA5AAIAAAAAAAEAAAA5AAMAAAAAAAEAAAAtAAIAAAABAAYAAAAvAAEAAAAAAAcAAAAwAAIAAAAJAAAAAAAxAAIAAAAKAAAAAAAyAAIAAAAKAAAAAAAzAAIAAAALAAAAAAA1AAcAAAAGAAAAAAA1AAgAAAAGAAEAAAA2AAgAAAAIAAAAAAA2AAkAAAAIAAEAAAA3AAkAAAAIAAAAAAA4AAkAAAAGAAEAAAA5AAkAAAAIAAEAAAA6AAkAAAAGAAEAAAA6AAgAAAAIAAEAAAA7AAgAAAAIAAEAAAA7AAcAAAAIAAEAAAA3AAgAAAAHAAAAAAA4AAgAAAAHAAAAAAA5AAgAAAAHAAAAAAA1AAkAAAAGAAEAAAA7AAkAAAAGAAEAAAA6AAcAAAAGAAAAAAA7AAYAAAAGAAAAAAA8AAcAAAAHAAEAAAA+AAgAAAAHAAEAAAA9AAgAAAAHAAEAAAA8AAgAAAAGAAEAAAA8AAkAAAAIAAAAAAA9AAkAAAAGAAEAAAA+AAkAAAAIAAAAAAA4AP7/AAAGAAMAAAA4AP//AAAGAAQAAAA4AAAAAAAGAAUAAAAwAPz/AAAEAAAAAAAwAP3/AAAEAAEAAAAxAPz/AAAEAAAAAAAxAP3/AAAFAAEAAAAyAPz/AAAFAAMAAAAyAP3/AAAFAAUAAAAzAP7/AAAEAAAAAAAtAPz/AAAEAAAAAAAtAP3/AAAFAAAAAAAuAPv/AAABAAcAAAAuAPz/AAAEAAAAAAAuAP3/AAAEAAEAAAAvAPv/AAAEAAgAAAAvAPz/AAAEAAAAAAAvAP3/AAAEAAEAAAAwAP7/AAAEAAEAAAAxAP7/AAAEAAEAAAAxAP//AAAEAAEAAAAyAP7/AAAEAAAAAAAyAP//AAAFAAEAAAAzAP//AAAEAAEAAAAlAAYAAAAHAAMAAAApAP3/AAAIAAEAAAAoAPz/AAAIAAEAAAAnAP3/AAAIAAEAAAAlAPz/AAAIAAEAAAAlAP3/AAAGAAEAAAAmAP3/AAAGAAEAAAAmAPz/AAAGAAEAAAAnAPz/AAAGAAEAAAAoAP3/AAAGAAEAAAApAPz/AAAGAAAAAAAoAPv/AAAGAAAAAAAnAPv/AAAGAAAAAAAmAPv/AAAGAAAAAAAlAPv/AAAGAAAAAAAMAAYAAAAGAAAAAAAkAPr/AAAGAAAAAAAjAPr/AAAGAAAAAAAiAPr/AAAGAAAAAAAjAPv/AAAIAAAAAAAiAPz/AAAIAAAAAAAiAPv/AAAGAAEAAAAjAPz/AAAGAAEAAAAkAPz/AAAGAAEAAAAkAPv/AAAGAAEAAAAlAPr/AAAAAAgAAABHAAAAAAAAAAAAAABAAP//AAAGAAIAAABBAP//AAAGAAIAAABBAP7/AAAHAAAAAABEAAIAAAAHAAAAAABEAAMAAAAGAAIAAABEAAQAAAAGAAIAAABEAAUAAAAIAAEAAABFAAQAAAAGAAIAAABFAAUAAAAGAAEAAABGAAUAAAAGAAEAAABDAAUAAAAGAAEAAABDAAYAAAAIAAEAAABGAAYAAAAIAAEAAABEAAYAAAAGAAEAAABFAAYAAAAGAAEAAABHAAYAAAAGAAEAAABHAAEAAAABAAEAAABIAAEAAAAAAAEAAABIAAIAAAAAAAEAAABJAAEAAAAAAAEAAABKAAEAAAAAAAEAAABKAAIAAAAAAAEAAABLAAIAAAAAAAEAAABJAAIAAAABAAEAAABIAAAAAAAAAAAAAABIAP//AAAAAAAAAABJAP//AAAAAAAAAABKAP//AAAAAAAAAABKAP7/AAABAAUAAABKAAAAAAAAAAEAAABJAAAAAAAAAAEAAABMAPr/AAAAAAAAAABMAPv/AAAAAAEAAABMAPz/AAAAAAEAAABMAP3/AAAAAAEAAABJAPn/AAAAAAEAAABJAPr/AAAAAAEAAABJAPj/AAAAAAAAAABPAPj/AAAAAAAAAABQAPj/AAAAAAAAAABRAPn/AAAAAAAAAABPAPn/AAABAAEAAABRAPv/AAABAAEAAABQAPn/AAAAAAEAAABQAPr/AAAAAAEAAABRAPr/AAAAAAEAAABPAPf/AAAAAAcAAABUAP3/AAAEAAAAAABVAP7/AAAEAAAAAABWAP7/AAAEAAAAAABXAP7/AAAEAAAAAABYAP3/AAAEAAAAAABZAP7/AAAEAAAAAABaAP7/AAAEAAAAAABbAP7/AAAEAAAAAABdAP3/AAAEAAAAAABcAP7/AAAEAAAAAABUAP7/AAAEAAEAAABVAP//AAAFAAAAAABWAP//AAAEAAEAAABXAP//AAAEAAEAAABYAP//AAAEAAEAAABZAP//AAAFAAEAAABaAP//AAAEAAEAAABbAP//AAAFAAAAAABcAP//AAAEAAEAAABdAP//AAAFAAAAAABdAP7/AAAEAAEAAABUAP//AAAEAAEAAABYAP7/AAAFAAAAAABVAAAAAAAEAAEAAABXAAAAAAAEAAEAAABXAAEAAAAEAAEAAABWAAAAAAAEAAEAAABbAAAAAAAEAAEAAABaAAAAAAAEAAEAAABeAP3/AAAJAAIAAABfAP3/AAAKAAIAAABgAP3/AAAKAAIAAABhAP3/AAAKAAIAAABiAP3/AAAKAAIAAABjAP3/AAALAAIAAABUAPz/AAAIAAQAAABcAP3/AAAFAAUAAABcAPz/AAAFAAQAAABcAPv/AAAFAAQAAABcAPr/AAAFAAQAAABcAPn/AAAFAAMAAABbAP3/AAAEAAgAAABkAP3/AAACAAAAAABlAPz/AAACAAAAAABmAPv/AAACAAAAAABlAPv/AAACAAAAAABmAPz/AAACAAEAAABnAPv/AAACAAAAAABnAPz/AAACAAEAAABnAP3/AAACAAEAAABmAP3/AAACAAEAAABlAP3/AAACAAEAAABlAP7/AAACAAEAAABmAP7/AAACAAEAAABmAP//AAACAAEAAABpAP3/AAACAAAAAABrAP//AAACAAAAAABtAAIAAAACAAAAAABpAP7/AAACAAEAAABpAP//AAADAAEAAABrAAAAAAACAAEAAABtAAMAAAACAAEAAABrAAEAAAADAAAAAABtAAQAAAADAAEAAABuAAQAAAACAAAAAABvAAQAAAACAAAAAABuAAUAAAACAAEAAABvAAUAAAADAAEAAABtAAUAAAADAAAAAABwAAQAAAACAAAAAABxAAQAAAACAAAAAAByAAQAAAACAAAAAABzAAMAAAADAAAAAAB0AAMAAAACAAIAAAB1AAMAAAACAAIAAABzAAIAAAACAAAAAAB4AAIAAAACAAIAAAB2AAMAAAACAAIAAAB3AAMAAAACAAIAAABzAAUAAAADAAEAAAB4AAQAAAADAAEAAAB1AAQAAAADAAEAAABwAAUAAAACAAEAAABxAAUAAAACAAEAAAByAAUAAAACAAEAAABzAAQAAAACAAEAAAB0AAQAAAACAAEAAAB0AAUAAAACAAEAAAB1AAUAAAACAAEAAAB2AAQAAAACAAEAAAB3AAQAAAACAAEAAAB4AAMAAAACAAEAAABwAAYAAAADAAEAAABxAAcAAAADAAAAAABxAAYAAAACAAEAAABzAAEAAAADAAcAAABzAAAAAAADAAgAAABzAP//AAACAAgAAABzAP3/AAACAAQAAAB4AAEAAAADAAgAAAB4AAAAAAACAAgAAAB4AP7/AAACAAQAAABtAAEAAAAIAAMAAAB5AAMAAAACAAIAAAB5AAQAAAACAAEAAAB5AAUAAAACAAEAAAB7AAYAAAAAAAAAAAB8AAYAAAAAAAAAAAB8AAcAAAABAAEAAAB9AAcAAAAAAAAAAAB+AAcAAAAAAAAAAAB+AAgAAAAAAAEAAAB/AAgAAAAAAAAAAACAAAgAAAAAAAAAAACAAAkAAAAAAAEAAACBAAkAAAAAAAAAAACCAAkAAAAAAAAAAACDAAkAAAAAAAEAAACDAAgAAAAAAAAAAACEAAgAAAAAAAAAAACFAAgAAAAAAAAAAACGAAgAAAAAAAAAAACHAAgAAAAAAAAAAACIAAgAAAAAAAAAAACIAAkAAAAAAAEAAACJAAkAAAAAAAEAAACJAAgAAAAAAAEAAACJAAcAAAAAAAAAAACKAAcAAAAAAAAAAACLAAcAAAAAAAAAAACMAAcAAAAAAAAAAACMAAYAAAAAAAAAAACNAAYAAAAAAAAAAACKAAgAAAAAAAEAAACEAAkAAAAAAAEAAACFAAkAAAAAAAEAAACGAAkAAAABAAEAAACHAAkAAAAAAAEAAAB7AAcAAAAAAAEAAAB8AAgAAAAAAAEAAAB9AAgAAAAAAAEAAAB+AAkAAAABAAEAAAB/AAkAAAAAAAEAAAB/AAoAAAAAAAEAAACAAAoAAAAAAAEAAACBAAoAAAABAAAAAACCAAoAAAAAAAEAAACDAAoAAAAAAAEAAACEAAoAAAABAAEAAACFAAoAAAAAAAEAAACGAAoAAAAAAAEAAACHAAoAAAAAAAEAAACIAAoAAAABAAAAAACJAAoAAAAAAAEAAACKAAkAAAAAAAEAAACLAAkAAAAAAAEAAACLAAgAAAABAAEAAACMAAgAAAAAAAEAAACNAAgAAAAAAAEAAACNAAcAAAAAAAEAAACAAAcAAAAGAAUAAACAAAYAAAAGAAQAAACAAAUAAAAGAAQAAACAAAQAAAAGAAMAAAB/AAcAAAAGAAgAAACCAAgAAAAIAAgAAACHAAcAAAAIAAgAAACJAAYAAAABAAYAAACKAAYAAAAAAAcAAABKAAgAAAAGAAIAAABLAAgAAAAGAAIAAABLAAkAAAAGAAIAAABMAAkAAAAHAAAAAABQAAkAAAAHAAEAAABRAAgAAAAGAAAAAABSAAgAAAAGAAAAAABTAAgAAAAGAAAAAABUAAgAAAAGAAAAAABVAAgAAAAGAAEAAABVAAcAAAAGAAIAAABWAAcAAAAGAAIAAABWAAYAAAAGAAIAAABXAAYAAAAGAAIAAABUAAkAAAAIAAAAAABTAAkAAAAGAAEAAABSAAkAAAAIAAAAAABRAAkAAAAGAAEAAABRAAoAAAAGAAEAAABQAAoAAAAGAAEAAABLAAoAAAAGAAEAAABKAAkAAAAIAAEAAABrAAIAAAADAAEAAABhAAcAAAAHAAAAAABiAAcAAAAGAAEAAABiAAYAAAAHAAAAAABjAAYAAAAIAAEAAABjAAUAAAAHAAEAAABkAAUAAAAHAAEAAABlAAUAAAAHAAEAAABmAAUAAAAHAAEAAABmAAYAAAAGAAEAAABnAAYAAAAHAAEAAABoAAcAAAAHAAEAAABpAAcAAAAGAAEAAABpAAYAAAAHAAEAAABqAAYAAAAHAAEAAABqAAcAAAAGAAEAAABrAAcAAAAHAAEAAABsAAcAAAAHAAEAAABiAAgAAAAGAAEAAABjAAcAAAAGAAEAAABkAAYAAAAGAAEAAABlAAYAAAAGAAEAAABlAAcAAAAIAAAAAABmAAcAAAAGAAEAAABnAAcAAAAGAAEAAABnAAgAAAAGAAEAAABoAAgAAAAGAAEAAABpAAgAAAAIAAAAAABqAAgAAAAGAAEAAABrAAgAAAAGAAEAAABkAAcAAAAGAAEAAABkAAgAAAAGAAEAAABkAAkAAAAGAAEAAABoAAkAAAAGAAEAAABoAAoAAAAGAAEAAABYAAYAAAAJAAEAAABZAAYAAAAKAAEAAABaAAYAAAAKAAEAAABbAAYAAAALAAEAAABcAAYAAAAHAAAAAABcAAcAAAAGAAIAAABcAAgAAAAGAAIAAABcAAkAAAAGAAIAAABcAAoAAAAGAAIAAABcAAsAAAAGAAIAAABcAAwAAAAGAAIAAABcAA0AAAAGAAIAAABbAAgAAAAHAAAAAABbAAkAAAAGAAIAAABbAAoAAAAGAAIAAABbAAsAAAAGAAIAAABaAAwAAAAGAAIAAABaAA0AAAAGAAIAAABbAA0AAAAGAAIAAABbAAwAAAAGAAIAAABaAAsAAAAHAAAAAABMAAoAAAAGAAEAAACQAAUAAAAAAAEAAACQAAQAAAAAAAEAAACQAAMAAAAAAAEAAACQAAIAAAABAAEAAACQAAEAAAAAAAAAAACRAAEAAAAAAAAAAACSAAIAAAAAAAAAAACTAAIAAAAAAAAAAACTAAMAAAAAAAAAAACUAAMAAAAAAAAAAACUAAQAAAABAAAAAACVAAQAAAAAAAEAAACRAAIAAAAAAAEAAACRAAMAAAAAAAEAAACSAAMAAAABAAEAAACSAAQAAAAAAAEAAACTAAQAAAAAAAEAAACUAAUAAAAAAAEAAACVAAMAAAAAAAAAAACRAAQAAAABAAAAAACSAP3/AAAGAAEAAACSAPz/AAAGAAAAAACSAPv/AAAIAAMAAACSAAEAAAABAAYAAACQAAAAAAABAAQAAACYAAIAAAAHAAMAAACZAAIAAAAJAAAAAACaAAIAAAAKAAAAAACbAAIAAAAKAAAAAACcAAIAAAAKAAAAAACdAAIAAAALAAAAAACYAAMAAAAHAAMAAACYAAQAAAAHAAMAAACYAAUAAAAHAAMAAACYAAYAAAAHAAMAAACYAAcAAAAHAAMAAACeAAIAAAAAAAAAAACfAAEAAAAAAAAAAACgAAEAAAAAAAAAAAChAAEAAAAAAAAAAACiAAEAAAAAAAAAAACfAAIAAAAAAAEAAACgAAIAAAAAAAEAAAChAAIAAAABAAAAAACiAAIAAAAAAAEAAACfAAMAAAABAAEAAACiAAQAAAAAAAEAAACiAAMAAAAAAAEAAACgAAMAAAAAAAEAAAChAAMAAAAAAAEAAACgAAQAAAAAAAEAAAChAAQAAAAAAAEAAACiAAUAAAAAAAEAAAC3AAIAAAAGAAEAAACzAAIAAAAHAAEAAAC0AAIAAAAHAAEAAAC1AAIAAAAGAAEAAAC2AAIAAAAGAAEAAAC1AAEAAAAHAAEAAAC2AAEAAAAHAAEAAAC3AAEAAAAHAAEAAAC5APz/AAAHAAEAAAC5AP3/AAAGAAEAAAC5AP7/AAAGAAEAAAC7APr/AAAHAAEAAAC9APb/AAAHAAEAAAC9APf/AAAGAAEAAAC9APj/AAAGAAEAAAC+APj/AAAGAAEAAAC/APj/AAAJAAEAAADAAPj/AAAKAAEAAADBAPj/AAAKAAEAAADCAPj/AAAKAAEAAADDAPj/AAAKAAEAAADEAPj/AAALAAEAAADFAPj/AAAHAAEAAADGAPf/AAAHAAEAAADHAPf/AAAHAAEAAADHAPb/AAAHAAEAAADIAPb/AAAHAAEAAADJAPX/AAAGAAIAAADKAPX/AAAGAAIAAADKAPT/AAAHAAAAAADLAPT/AAAHAAAAAADMAPT/AAAGAAIAAADMAPP/AAAGAAIAAADNAPP/AAAHAAEAAADOAPL/AAAHAAEAAADFAPn/AAAGAAEAAADGAPn/AAAIAAEAAADGAPj/AAAGAAEAAADHAPj/AAAGAAEAAADIAPj/AAAGAAEAAADIAPn/AAAIAAEAAADJAPn/AAAGAAEAAADJAPj/AAAGAAEAAADKAPj/AAAGAAEAAADKAPf/AAAGAAEAAADLAPf/AAAIAAAAAADMAPf/AAAGAAEAAADMAPb/AAAGAAEAAADMAPX/AAAGAAEAAADNAPX/AAAIAAAAAADOAPX/AAAGAAEAAADOAPb/AAAGAAEAAADOAPP/AAAGAAEAAADOAPT/AAAGAAEAAADOAPf/AAAIAAEAAADOAPj/AAAIAAEAAADIAPf/AAAGAAEAAADJAPf/AAAIAAAAAADKAPb/AAAGAAEAAADJAPb/AAAGAAEAAADLAPb/AAAGAAEAAADLAPX/AAAGAAEAAADNAPT/AAAGAAEAAADIAPr/AAAIAAEAAADSAPP/AAAHAAAAAADWAPT/AAAHAAAAAADaAPX/AAAHAAAAAADSAPT/AAAGAAIAAADWAPX/AAAGAAIAAADaAPb/AAAGAAIAAADOAPH/AAAIAAMAAACXAAcAAAAIAAMAAADIAPX/AAAGAAUAAADIAPT/AAAGAAQAAADIAPP/AAAGAAMAAADHAPX/AAAIAAgAAACgAAAAAAAIAAYAAAChAAAAAAABAAcAAAByAAMAAAABAAcAAABoAAYAAAAAAAgAAADWAPb/AAAGAAIAAADWAPf/AAAGAAIAAADWAPj/AAAGAAIAAADdAPn/AAAHAAAAAADdAPr/AAAGAAIAAADdAPv/AAAGAAIAAADhAP7/AAAAAAAAAADiAP7/AAAAAAAAAADjAP7/AAAAAAAAAADkAP7/AAAAAAAAAADlAP7/AAAAAAAAAADmAP7/AAAAAAAAAADnAP7/AAAAAAAAAADoAP7/AAAAAAAAAADpAP7/AAAAAAAAAADqAP7/AAAAAAAAAADrAP7/AAAAAAAAAADsAP7/AAAAAAAAAADtAP7/AAAAAAAAAADuAP7/AAAAAAEAAADuAP3/AAAAAAAAAADvAP3/AAAAAAAAAADvAP7/AAAAAAEAAADwAP7/AAAAAAEAAADwAP3/AAAAAAAAAADxAP3/AAAAAAAAAADxAP7/AAAAAAEAAADyAP7/AAAAAAEAAADzAP7/AAAAAAEAAAD0AP7/AAAAAAEAAAD0AP3/AAAAAAAAAADzAP3/AAAAAAAAAADyAP3/AAAAAAAAAADhAP//AAAAAAEAAADiAP//AAAAAAEAAADiAAAAAAAAAAEAAADjAAAAAAAAAAEAAADkAAAAAAABAAAAAADlAAAAAAAAAAEAAADlAP//AAAAAAEAAADmAP//AAAAAAEAAADmAAAAAAAAAAEAAADnAAAAAAAAAAEAAADoAAAAAAABAAAAAADpAAAAAAABAAEAAADqAAAAAAAAAAEAAADrAP//AAAAAAEAAADsAP//AAAAAAEAAADtAP//AAABAAEAAADuAP//AAAAAAEAAADvAP//AAAAAAEAAADvAAAAAAAAAAEAAADwAAAAAAAAAAEAAADxAAEAAAAAAAEAAADxAAAAAAABAAEAAADyAAAAAAAAAAEAAADzAP//AAAAAAEAAADyAP//AAAAAAEAAADxAP//AAAAAAEAAADwAP//AAAAAAEAAADuAAEAAAAAAAEAAADtAAEAAAABAAEAAADsAAEAAAAAAAEAAADrAAEAAAAAAAEAAADrAAIAAAAAAAEAAADqAAIAAAAAAAEAAADpAAIAAAAAAAEAAADpAAMAAAABAAAAAADoAAIAAAAAAAEAAADoAAEAAAAAAAEAAADnAAEAAAAAAAEAAADnAP//AAAAAAEAAADkAP//AAAAAAEAAADjAP//AAAAAAEAAADoAP//AAAAAAEAAADpAP//AAAAAAEAAADpAAEAAAAAAAEAAADqAAEAAAAAAAEAAADqAP//AAAAAAEAAADrAAAAAAAAAAEAAADsAAAAAAAAAAEAAADtAAAAAAAAAAEAAADuAAAAAAAAAAEAAADuAPz/AAABAAUAAADqAP3/AAAAAAUAAADqAPz/AAAAAAQAAADqAPv/AAAAAAQAAADqAPr/AAAAAAQAAADsAP3/AAAAAAUAAADsAPz/AAAAAAQAAADsAPv/AAAAAAQAAADsAPr/AAAAAAMAAADrAP3/AAABAAYAAADqAPn/AAAAAAMAAADkAP3/AAABAAMAAADlAP3/AAABAAYAAACOAAkAAAAHAAMAAACOAAoAAAAHAAMAAACPAAoAAAAHAAMAAACQAAoAAAAHAAMAAACRAAoAAAAHAAMAAACSAAoAAAAHAAMAAACTAAoAAAAHAAMAAACUAAoAAAAHAAMAAACVAAkAAAAHAAMAAACVAAoAAAAHAAMAAACWAAgAAAAHAAMAAACWAAkAAAAHAAMAAACWAAoAAAAHAAMAAACXAAgAAAAHAAMAAACXAAkAAAAHAAMAAACXAAoAAAAHAAMAAACYAAgAAAAHAAMAAACYAAkAAAAHAAMAAACYAAoAAAAHAAMAAAA=") +tile_set = SubResource("TileSet_lbhrr") + +[node name="Player" parent="." unique_id=195434465 instance=ExtResource("1_uwrxv")] +position = Vector2(64, 75) + +[node name="Camera2D" type="Camera2D" parent="Player" unique_id=707695283] +position = Vector2(0, -8) +zoom = Vector2(4, 4) +limit_bottom = 155 +limit_smoothed = true +position_smoothing_enabled = true + +[node name="Coins" type="Node" parent="." unique_id=389905677] + +[node name="Coin" parent="Coins" unique_id=2141300314 instance=ExtResource("4_lbhrr")] +position = Vector2(105, 102) + +[node name="Coin5" parent="Coins" unique_id=346374570 instance=ExtResource("4_lbhrr")] +position = Vector2(984, 120) + +[node name="Coin6" parent="Coins" unique_id=542457168 instance=ExtResource("4_lbhrr")] +position = Vector2(1000, 120) + +[node name="Coin4" parent="Coins" unique_id=918479466 instance=ExtResource("4_lbhrr")] +position = Vector2(216, 24) + +[node name="Coin2" parent="Coins" unique_id=1695159870 instance=ExtResource("4_lbhrr")] +position = Vector2(232, 103) + +[node name="Coin3" parent="Coins" unique_id=1443474922 instance=ExtResource("4_lbhrr")] +position = Vector2(248, 103) + +[node name="Coin7" parent="Coins" unique_id=472853369 instance=ExtResource("4_lbhrr")] +position = Vector2(728, -71) + +[node name="Coin8" parent="Coins" unique_id=1335410327 instance=ExtResource("4_lbhrr")] +position = Vector2(552, -104) + +[node name="Coin9" parent="Coins" unique_id=1036515426 instance=ExtResource("4_lbhrr")] +position = Vector2(568, -104) + +[node name="Coin10" parent="Coins" unique_id=358265882 instance=ExtResource("4_lbhrr")] +position = Vector2(1608, -56) + +[node name="Coin11" parent="Coins" unique_id=1625969986 instance=ExtResource("4_lbhrr")] +position = Vector2(1816, 56) + +[node name="Coin12" parent="Coins" unique_id=1398057727 instance=ExtResource("4_lbhrr")] +position = Vector2(1208, 24) + +[node name="Coin13" parent="Coins" unique_id=722888141 instance=ExtResource("4_lbhrr")] +position = Vector2(1144, 87) + +[node name="Coin14" parent="Coins" unique_id=805705493 instance=ExtResource("4_lbhrr")] +position = Vector2(2313, 153) + +[node name="Coin15" parent="Coins" unique_id=1528495782 instance=ExtResource("4_lbhrr")] +position = Vector2(2329, 153) + +[node name="Coin16" parent="Coins" unique_id=1721806105 instance=ExtResource("4_lbhrr")] +position = Vector2(2345, 153) + +[node name="Platforms" type="Node" parent="." unique_id=548638787] + +[node name="Platform" parent="Platforms" unique_id=962203689 instance=ExtResource("3_lnu2h")] +position = Vector2(48, 36) + +[node name="Platform2" parent="Platforms" unique_id=565334764 instance=ExtResource("3_lnu2h")] +position = Vector2(947, 6) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Platforms/Platform2" unique_id=1853569047] +libraries/ = SubResource("AnimationLibrary_iywne") +autoplay = &"move" + +[node name="Platform3" parent="Platforms" unique_id=1658476835 instance=ExtResource("3_lnu2h")] +position = Vector2(944, 5) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Platforms/Platform3" unique_id=309209520] +libraries/ = SubResource("AnimationLibrary_vtaks") +autoplay = &"move" + +[node name="Platform4" parent="Platforms" unique_id=808112183 instance=ExtResource("3_lnu2h")] +position = Vector2(2624, 21) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Platforms/Platform4" unique_id=565139049] +libraries/ = SubResource("AnimationLibrary_ir15t") +autoplay = &"move" + +[node name="Platform5" parent="Platforms" unique_id=1552047802 instance=ExtResource("3_lnu2h")] +position = Vector2(2756, 29) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Platforms/Platform5" unique_id=2059161510] +libraries/ = SubResource("AnimationLibrary_ssvqc") +autoplay = &"move" + +[node name="LuckyBlocks" type="Node" parent="." unique_id=1597890989] + +[node name="LuckyBlock" parent="LuckyBlocks" unique_id=457637056 instance=ExtResource("9_0tnpc")] +position = Vector2(248, -16) + +[node name="LuckyBlock2" parent="LuckyBlocks" unique_id=42871704 instance=ExtResource("9_0tnpc")] +position = Vector2(360, 50) +reward = 1 + +[node name="LuckyBlock3" parent="LuckyBlocks" unique_id=1422677490 instance=ExtResource("9_0tnpc")] +position = Vector2(1640, -109) +reward = 2 + +[node name="LuckyBlock4" parent="LuckyBlocks" unique_id=75715976 instance=ExtResource("9_0tnpc")] +position = Vector2(2121, 95) +reward = 3 + +[node name="LuckyBlock5" parent="LuckyBlocks" unique_id=98105274 instance=ExtResource("9_0tnpc")] +position = Vector2(1177, -160) + +[node name="LuckyBlock6" parent="LuckyBlocks" unique_id=1820381808 instance=ExtResource("9_0tnpc")] +position = Vector2(1608, 47) +reward = 3 + +[node name="Enemies" type="Node" parent="." unique_id=236229594] + +[node name="Slime" parent="Enemies" unique_id=229458597 instance=ExtResource("6_p57ef")] +position = Vector2(88, 113) + +[node name="Slime2" parent="Enemies" unique_id=1392891935 instance=ExtResource("6_p57ef")] +position = Vector2(1368, -32) + +[node name="Slime3" parent="Enemies" unique_id=802039690 instance=ExtResource("6_p57ef")] +position = Vector2(1432, -32) + +[node name="Slime4" parent="Enemies" unique_id=711195756 instance=ExtResource("6_p57ef")] +position = Vector2(1768, 64) + +[node name="Slime5" parent="Enemies" unique_id=49307221 instance=ExtResource("6_p57ef")] +position = Vector2(1864, 48) + +[node name="Slime6" parent="Enemies" unique_id=877237483 instance=ExtResource("6_p57ef")] +position = Vector2(553, 112) + +[node name="Slime7" parent="Enemies" unique_id=2135721984 instance=ExtResource("6_p57ef")] +position = Vector2(2297, 161) + +[node name="Slime8" parent="Enemies" unique_id=18841695 instance=ExtResource("6_p57ef")] +position = Vector2(2378, 161) + +[node name="Slime9" parent="Enemies" unique_id=1737181599 instance=ExtResource("6_p57ef")] +position = Vector2(3049, -128) + +[node name="Killzone" parent="." unique_id=991054400 instance=ExtResource("5_iywne")] +position = Vector2(95, 179) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Killzone" unique_id=1341054733] +shape = SubResource("WorldBoundaryShape2D_p57ef") + +[node name="Parallax2D" type="Parallax2D" parent="." unique_id=466299910] +scroll_offset = Vector2(0.5, 0) +repeat_size = Vector2(16, 0) +autoscroll = Vector2(4, 0) +repeat_times = 1000 + +[node name="Background" type="TileMapLayer" parent="Parallax2D" unique_id=596828414] +z_index = -1 +tile_map_data = PackedByteArray("AAAAAAoAAAAAAA8AAAAAAAwAAAAAAA8AAAAAAAsAAAAAAA8AAAAAAAQAAAAAAA0AAAAAAAUAAAAAAA4AAAAAAAYAAAAAAA8AAAAAAAcAAAAAAA8AAAAAAAgAAAAAAA8AAAAAAAkAAAAAAA8AAAAAAP7/AAAAAAsAAAAAAP//AAAAAAwAAAAAAAAAAAAAAA0AAAAAAAEAAAAAAA0AAAAAAAIAAAAAAA0AAAAAAPb/AAAAAAkAAAAAAPf/AAAAAAkAAAAAAPj/AAAAAAkAAAAAAPn/AAAAAAoAAAAAAPr/AAAAAAsAAAAAAPv/AAAAAAsAAAAAAPz/AAAAAAsAAAAAAPX/AAAAAAkAAAAAAAMAAAAAAA0AAAAAAP3/AAAAAAsAAAAAAPT/AAAAAAkAAAAAAPP/AAAAAAkAAAAAAPL/AAABAA4AAAAAAPH/AAABAA0AAAD///H/AAABAA0AAAAAAPD/AAABAA4AAAD///L/AAABAA4AAAD///D/AAABAA0AAAAAAO//AAABAA0AAAAAAO7/AAABAA0AAAAAAO3/AAABAA0AAAAAAOz/AAABAAwAAAAAAOv/AAABAAsAAAAAAOr/AAABAAsAAAAAAOn/AAABAAsAAAAAAOj/AAABAAsAAAAAAOf/AAABAAsAAAAAAOb/AAABAAoAAAAAAOX/AAABAAkAAAAAAOT/AAABAAkAAAAAAOP/AAABAAkAAAAAAOL/AAABAAkAAAAAAOH/AAABAAkAAAAAAOD/AAACAA4AAAAAAN//AAACAA0AAAAAAN7/AAACAA0AAAAAAN3/AAACAA0AAAAAANz/AAACAA0AAAAAANv/AAACAA0AAAAAANr/AAACAAwAAAAAANn/AAACAAsAAAAAANj/AAACAAsAAAAAANf/AAACAAsAAAAAANb/AAACAAsAAAAAANX/AAACAAsAAAAAANT/AAACAAoAAAAAANP/AAACAAkAAAAAANL/AAACAAkAAAAAANH/AAACAAkAAAAAAND/AAACAAkAAAAAAM//AAACAAkAAAA=") +tile_set = SubResource("TileSet_p57ef") + +[node name="Apple" parent="." unique_id=898321301 instance=ExtResource("10_kvpfn")] +position = Vector2(3032, -166) + +[node name="EndZone" parent="." unique_id=1254881841 instance=ExtResource("11_dinhu")] +position = Vector2(3864, -67) + +[node name="PixelArtFlag" type="Sprite2D" parent="." unique_id=1453030496] +position = Vector2(3870.0002, -67) +scale = Vector2(0.067708336, 0.067708336) +texture = ExtResource("12_dinhu") diff --git a/scenes/grapes.tscn b/scenes/grapes.tscn new file mode 100644 index 0000000..36e1fd5 --- /dev/null +++ b/scenes/grapes.tscn @@ -0,0 +1,113 @@ +[gd_scene format=3 uid="uid://b33i2gehodipd"] + +[ext_resource type="Script" uid="uid://byoow85ssm52p" path="res://scripts/grapes.gd" id="1_e47g1"] +[ext_resource type="Texture2D" uid="uid://dbxb602buq7wu" path="res://assets/sprites/fruit.png" id="1_elxb2"] +[ext_resource type="AudioStream" uid="uid://gtthuaxi63gy" path="res://assets/sounds/apple_powerup.wav" id="3_e47g1"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_nkn8g"] +radius = 6.0 + +[sub_resource type="Animation" id="Animation_jsuis"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("PickupZone:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("PickupSound:playing") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_uw7nk"] +resource_name = "pickup" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("PickupZone:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("PickupSound:playing") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_2iald"] +_data = { +&"RESET": SubResource("Animation_jsuis"), +&"pickup": SubResource("Animation_uw7nk") +} + +[node name="Grapes" type="Area2D" unique_id=154914778] +collision_mask = 2 +script = ExtResource("1_e47g1") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1323039150] +texture = ExtResource("1_elxb2") +region_enabled = true +region_rect = Rect2(34, 17, 11, 15) + +[node name="PickupZone" type="CollisionShape2D" parent="." unique_id=1431084362] +shape = SubResource("CircleShape2D_nkn8g") + +[node name="PickupSound" type="AudioStreamPlayer2D" parent="." unique_id=53132812] +stream = ExtResource("3_e47g1") +bus = &"SFX" + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1176105268] +libraries/ = SubResource("AnimationLibrary_2iald") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/scenes/killzone_enemy.tscn b/scenes/killzone_enemy.tscn new file mode 100644 index 0000000..ffeeb8b --- /dev/null +++ b/scenes/killzone_enemy.tscn @@ -0,0 +1,5 @@ +[gd_scene format=3 uid="uid://cw6fst5irc6ve"] + +[node name="Killzone_enemy" type="Area2D" unique_id=1883201057] + +[node name="Timer" type="Timer" parent="." unique_id=1352495893] diff --git a/scenes/killzone_player.tscn b/scenes/killzone_player.tscn new file mode 100644 index 0000000..f900f2a --- /dev/null +++ b/scenes/killzone_player.tscn @@ -0,0 +1,9 @@ +[gd_scene format=3 uid="uid://c88udyeyn4dcf"] + +[ext_resource type="Script" uid="uid://bxagvcko4i2l0" path="res://scripts/killzone_player.gd" id="1_xlapc"] + +[node name="Killzone_player" type="Area2D" unique_id=991054400] +collision_mask = 2 +script = ExtResource("1_xlapc") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/scenes/lucky_block.tscn b/scenes/lucky_block.tscn new file mode 100644 index 0000000..e4820eb --- /dev/null +++ b/scenes/lucky_block.tscn @@ -0,0 +1,75 @@ +[gd_scene format=3 uid="uid://dotxkxflj0c4h"] + +[ext_resource type="Texture2D" uid="uid://qqsyx1e7v2fu" path="res://assets/sprites/world_tileset.png" id="1_1oxb2"] +[ext_resource type="Script" uid="uid://cbecw2ujni8nq" path="res://scripts/lucky_block.gd" id="1_ews3o"] +[ext_resource type="AudioStream" uid="uid://by32fpioptn4q" path="res://assets/sounds/reward.wav" id="3_v2mvj"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_7jsp6"] +size = Vector2(16, 15) + +[sub_resource type="Animation" id="Animation_jrfi8"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("RewardSound:playing") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_by7b2"] +resource_name = "reward" +length = 0.36666667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("RewardSound:playing") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_rogr3"] +_data = { +&"RESET": SubResource("Animation_jrfi8"), +&"reward": SubResource("Animation_by7b2") +} + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_8ng8b"] +size = Vector2(12, 1) + +[node name="LuckyBlock" type="AnimatableBody2D" unique_id=1422677490] +z_index = 5 +script = ExtResource("1_ews3o") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=2130533913] +texture = ExtResource("1_1oxb2") +region_enabled = true +region_rect = Rect2(0, 32, 16, 16) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=2069315062] +position = Vector2(0, -0.5) +shape = SubResource("RectangleShape2D_7jsp6") + +[node name="RewardSound" type="AudioStreamPlayer2D" parent="." unique_id=1600797100] +stream = ExtResource("3_v2mvj") +bus = &"SFX" + +[node name="SoundPlayer" type="AnimationPlayer" parent="." unique_id=2126464224] +libraries/ = SubResource("AnimationLibrary_rogr3") + +[node name="RewardZone" type="Area2D" parent="." unique_id=1912884678] +collision_mask = 2 + +[node name="RewardCollision" type="CollisionShape2D" parent="RewardZone" unique_id=1383100768] +position = Vector2(0, 8) +shape = SubResource("RectangleShape2D_8ng8b") diff --git a/scenes/music.tscn b/scenes/music.tscn new file mode 100644 index 0000000..54255a1 --- /dev/null +++ b/scenes/music.tscn @@ -0,0 +1,8 @@ +[gd_scene format=3 uid="uid://bgm4w3aauu7e7"] + +[ext_resource type="AudioStream" uid="uid://c73cwy4ooekmy" path="res://assets/music/time_for_adventure.mp3" id="1_05ggv"] + +[node name="Music" type="AudioStreamPlayer" unique_id=115961153] +stream = ExtResource("1_05ggv") +autoplay = true +bus = &"Music" diff --git a/scenes/overlay.tscn b/scenes/overlay.tscn new file mode 100644 index 0000000..c3e9468 --- /dev/null +++ b/scenes/overlay.tscn @@ -0,0 +1,45 @@ +[gd_scene format=3 uid="uid://27b27wmftbt8"] + +[ext_resource type="FontFile" uid="uid://ctpbh2u36ff41" path="res://assets/fonts/PixelOperator8-Bold.ttf" id="1_d607a"] +[ext_resource type="Texture2D" uid="uid://djpog0c5jr3sf" path="res://assets/sprites/heart.png" id="2_r2eog"] + +[node name="Overlay" type="CanvasLayer" unique_id=963473093] + +[node name="ScoreLabel" type="Label" parent="." unique_id=765023322] +unique_name_in_owner = true +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 897.0 +offset_top = 22.0 +offset_right = -23.0 +offset_bottom = -594.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("1_d607a") +theme_override_font_sizes/font_size = 32 +text = "Score: 0" + +[node name="Heart1" type="TextureRect" parent="." unique_id=2137467956] +offset_left = 24.0 +offset_top = 21.0 +offset_right = 64.0 +offset_bottom = 61.0 +texture = ExtResource("2_r2eog") + +[node name="Heart2" type="TextureRect" parent="." unique_id=2137467957] +visible = false +offset_left = 72.0 +offset_top = 21.0 +offset_right = 112.0 +offset_bottom = 61.0 +texture = ExtResource("2_r2eog") + +[node name="Heart3" type="TextureRect" parent="." unique_id=2137467958] +visible = false +offset_left = 120.0 +offset_top = 21.0 +offset_right = 160.0 +offset_bottom = 61.0 +texture = ExtResource("2_r2eog") diff --git a/scenes/pear.tscn b/scenes/pear.tscn new file mode 100644 index 0000000..0c89d3c --- /dev/null +++ b/scenes/pear.tscn @@ -0,0 +1,114 @@ +[gd_scene format=3 uid="uid://51uhxqncpo71"] + +[ext_resource type="Script" uid="uid://ci50630gt06ch" path="res://scripts/pear.gd" id="1_2bcob"] +[ext_resource type="Texture2D" uid="uid://dbxb602buq7wu" path="res://assets/sprites/fruit.png" id="1_eeymf"] +[ext_resource type="AudioStream" uid="uid://gtthuaxi63gy" path="res://assets/sounds/apple_powerup.wav" id="3_2bcob"] + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_pqbvb"] +radius = 4.0 +height = 16.0 + +[sub_resource type="Animation" id="Animation_ql0tf"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("PickupSound:playing") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite2D:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("PickupZone:disabled") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_t2kfl"] +resource_name = "pickup" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("PickupSound:playing") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite2D:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.06666667), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("PickupZone:disabled") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_hujyb"] +_data = { +&"RESET": SubResource("Animation_ql0tf"), +&"pickup": SubResource("Animation_t2kfl") +} + +[node name="Pear" type="Area2D" unique_id=1175144071] +collision_mask = 2 +script = ExtResource("1_2bcob") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=193181080] +texture = ExtResource("1_eeymf") +region_enabled = true +region_rect = Rect2(20, 32, 9, 16) + +[node name="PickupZone" type="CollisionShape2D" parent="." unique_id=233027016] +shape = SubResource("CapsuleShape2D_pqbvb") + +[node name="PickupSound" type="AudioStreamPlayer2D" parent="." unique_id=166116439] +stream = ExtResource("3_2bcob") +bus = &"SFX" + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1054773840] +libraries/ = SubResource("AnimationLibrary_hujyb") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/scenes/platform.tscn b/scenes/platform.tscn new file mode 100644 index 0000000..2c2e225 --- /dev/null +++ b/scenes/platform.tscn @@ -0,0 +1,17 @@ +[gd_scene format=3 uid="uid://b41gwy6bpg7qv"] + +[ext_resource type="Texture2D" uid="uid://nuwsrb1cifv4" path="res://assets/sprites/platforms.png" id="1_ba0x2"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_nlgqw"] +size = Vector2(31, 8) + +[node name="Platform" type="AnimatableBody2D" unique_id=962203689] + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1406721546] +texture = ExtResource("1_ba0x2") +region_enabled = true +region_rect = Rect2(17, 1, 31, 8) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1805733968] +shape = SubResource("RectangleShape2D_nlgqw") +one_way_collision = true diff --git a/scenes/player.tscn b/scenes/player.tscn new file mode 100644 index 0000000..520861e --- /dev/null +++ b/scenes/player.tscn @@ -0,0 +1,322 @@ +[gd_scene format=3 uid="uid://cdg82mh4ljjty"] + +[ext_resource type="Texture2D" uid="uid://bd4fgamr0s365" path="res://assets/sprites/knight.png" id="1_3vyb7"] +[ext_resource type="Script" uid="uid://q646ipq51kns" path="res://scripts/player.gd" id="1_g2els"] +[ext_resource type="AudioStream" uid="uid://b0w6ok7nj785a" path="res://assets/sounds/jump.wav" id="3_qhqgy"] +[ext_resource type="AudioStream" uid="uid://coolcllh2qxvq" path="res://assets/sounds/hurt.wav" id="4_dqkch"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_31cv2"] +atlas = ExtResource("1_3vyb7") +region = Rect2(64, 192, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_tuyoq"] +atlas = ExtResource("1_3vyb7") +region = Rect2(0, 192, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l71n6"] +atlas = ExtResource("1_3vyb7") +region = Rect2(64, 192, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ke2ow"] +atlas = ExtResource("1_3vyb7") +region = Rect2(64, 224, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ujl30"] +atlas = ExtResource("1_3vyb7") +region = Rect2(96, 224, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_g2els"] +atlas = ExtResource("1_3vyb7") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qhqgy"] +atlas = ExtResource("1_3vyb7") +region = Rect2(32, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_dqkch"] +atlas = ExtResource("1_3vyb7") +region = Rect2(64, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qlg0r"] +atlas = ExtResource("1_3vyb7") +region = Rect2(96, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4ni07"] +atlas = ExtResource("1_3vyb7") +region = Rect2(128, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fjrip"] +atlas = ExtResource("1_3vyb7") +region = Rect2(0, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_smehm"] +atlas = ExtResource("1_3vyb7") +region = Rect2(32, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ur7pv"] +atlas = ExtResource("1_3vyb7") +region = Rect2(64, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y4r1p"] +atlas = ExtResource("1_3vyb7") +region = Rect2(96, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_d2wvv"] +atlas = ExtResource("1_3vyb7") +region = Rect2(128, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3v2ag"] +atlas = ExtResource("1_3vyb7") +region = Rect2(160, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jej6c"] +atlas = ExtResource("1_3vyb7") +region = Rect2(192, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_f1ej7"] +atlas = ExtResource("1_3vyb7") +region = Rect2(224, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_oprun"] +atlas = ExtResource("1_3vyb7") +region = Rect2(0, 96, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a8ls1"] +atlas = ExtResource("1_3vyb7") +region = Rect2(32, 96, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qfm1y"] +atlas = ExtResource("1_3vyb7") +region = Rect2(64, 96, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fulsm"] +atlas = ExtResource("1_3vyb7") +region = Rect2(96, 96, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4r5pv"] +atlas = ExtResource("1_3vyb7") +region = Rect2(128, 96, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_60mlk"] +atlas = ExtResource("1_3vyb7") +region = Rect2(160, 96, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_i4ail"] +atlas = ExtResource("1_3vyb7") +region = Rect2(192, 96, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a38lo"] +atlas = ExtResource("1_3vyb7") +region = Rect2(224, 96, 32, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_tuyoq"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_31cv2") +}], +"loop": true, +"name": &"damage", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_tuyoq") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_l71n6") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ke2ow") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ujl30") +}], +"loop": true, +"name": &"death", +"speed": 4.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_g2els") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qhqgy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_dqkch") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qlg0r") +}], +"loop": true, +"name": &"idle", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_4ni07") +}], +"loop": true, +"name": &"jump", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_fjrip") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_smehm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ur7pv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_y4r1p") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_d2wvv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3v2ag") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jej6c") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_f1ej7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_oprun") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_a8ls1") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qfm1y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fulsm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4r5pv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_60mlk") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_i4ail") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_a38lo") +}], +"loop": true, +"name": &"run", +"speed": 10.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_fjrip"] +radius = 5.0 + +[sub_resource type="Animation" id="Animation_dqkch"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sounds/JumpSound:playing") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sounds/DeathSound:playing") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_tuyoq"] +resource_name = "death" +length = 0.16666667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sounds/DeathSound:playing") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_qlg0r"] +resource_name = "jump" +length = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sounds/JumpSound:playing") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_tuyoq"] +_data = { +&"RESET": SubResource("Animation_dqkch"), +&"death": SubResource("Animation_tuyoq"), +&"jump": SubResource("Animation_qlg0r") +} + +[node name="Player" type="CharacterBody2D" unique_id=195434465] +z_index = 5 +collision_layer = 2 +script = ExtResource("1_g2els") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=595098333] +position = Vector2(0, -12) +sprite_frames = SubResource("SpriteFrames_tuyoq") +animation = &"death" +autoplay = "idle" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1612869252] +position = Vector2(0, -5) +shape = SubResource("CircleShape2D_fjrip") + +[node name="RayCastRight" type="RayCast2D" parent="." unique_id=1546816083] +position = Vector2(0, -5) +target_position = Vector2(7, 0) + +[node name="RayCastLeft" type="RayCast2D" parent="." unique_id=1026866969] +position = Vector2(0, -5) +target_position = Vector2(-7, 0) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1622064189] +libraries/ = SubResource("AnimationLibrary_tuyoq") +playback_auto_capture = false + +[node name="Sounds" type="Node" parent="." unique_id=1753040532] + +[node name="DeathSound" type="AudioStreamPlayer" parent="Sounds" unique_id=1043463499] +stream = ExtResource("4_dqkch") +bus = &"SFX" + +[node name="JumpSound" type="AudioStreamPlayer" parent="Sounds" unique_id=300532321] +stream = ExtResource("3_qhqgy") +bus = &"SFX" diff --git a/scenes/slime.tscn b/scenes/slime.tscn new file mode 100644 index 0000000..5416a53 --- /dev/null +++ b/scenes/slime.tscn @@ -0,0 +1,230 @@ +[gd_scene format=3 uid="uid://bcwi265pjhitd"] + +[ext_resource type="Script" uid="uid://b70jd71jqvkx6" path="res://scripts/slime.gd" id="1_n6pvg"] +[ext_resource type="Texture2D" uid="uid://bmn317iwnsb6x" path="res://assets/sprites/slime_green.png" id="1_p2gj0"] +[ext_resource type="PackedScene" uid="uid://c88udyeyn4dcf" path="res://scenes/killzone_player.tscn" id="2_n6pvg"] +[ext_resource type="PackedScene" uid="uid://cw6fst5irc6ve" path="res://scenes/killzone_enemy.tscn" id="4_pjw23"] +[ext_resource type="AudioStream" uid="uid://dwdekuy7yyiwk" path="res://assets/sounds/random.wav" id="5_2npkn"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_n6pvg"] +atlas = ExtResource("1_p2gj0") +region = Rect2(48, 48, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_v5wyi"] +atlas = ExtResource("1_p2gj0") +region = Rect2(48, 0, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0l8pv"] +atlas = ExtResource("1_p2gj0") +region = Rect2(24, 0, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vnioy"] +atlas = ExtResource("1_p2gj0") +region = Rect2(0, 0, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_pjw23"] +atlas = ExtResource("1_p2gj0") +region = Rect2(0, 24, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2npkn"] +atlas = ExtResource("1_p2gj0") +region = Rect2(24, 24, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fd6lc"] +atlas = ExtResource("1_p2gj0") +region = Rect2(48, 24, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gstla"] +atlas = ExtResource("1_p2gj0") +region = Rect2(72, 24, 24, 24) + +[sub_resource type="SpriteFrames" id="SpriteFrames_v5wyi"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_n6pvg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_v5wyi") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0l8pv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vnioy") +}], +"loop": true, +"name": &"death", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_pjw23") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2npkn") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fd6lc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_gstla") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_0l8pv"] +size = Vector2(12, 10) + +[sub_resource type="Animation" id="Animation_2xjuo"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("KillzonePlayer/CollisionShape2D:disabled") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("AnimatedSprite2D:animation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"death"] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("DeathSound:playing") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_a02ik"] +resource_name = "death" +tracks/0/type = "method" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0.53333336), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"queue_free" +}] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("KillzonePlayer/CollisionShape2D:disabled") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(-0.06666668, -0.03333336), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} +tracks/2/type = "method" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("KillzonePlayer") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(), +"transitions": PackedFloat32Array(), +"values": [] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("AnimatedSprite2D:animation") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"death"] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("DeathSound:playing") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_pu8ps"] +_data = { +&"RESET": SubResource("Animation_2xjuo"), +&"death": SubResource("Animation_a02ik") +} + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_2npkn"] +size = Vector2(9, 4) + +[node name="Slime" type="Node2D" unique_id=229458597] +script = ExtResource("1_n6pvg") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=364297644] +position = Vector2(0, -12) +sprite_frames = SubResource("SpriteFrames_v5wyi") +animation = &"death" +autoplay = "default" + +[node name="KillzonePlayer" parent="." unique_id=991054400 instance=ExtResource("2_n6pvg")] +position = Vector2(0, -12) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="KillzonePlayer" unique_id=1522102352] +position = Vector2(0, 6) +shape = SubResource("RectangleShape2D_0l8pv") + +[node name="RayCastRight" type="RayCast2D" parent="." unique_id=2123653773] +position = Vector2(0, -7) +target_position = Vector2(8, 0) + +[node name="RayCastLeft" type="RayCast2D" parent="." unique_id=108366997] +position = Vector2(0, -7) +target_position = Vector2(-8, 0) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1764060817] +libraries/ = SubResource("AnimationLibrary_pu8ps") + +[node name="Killzone_enemy" parent="." unique_id=1883201057 instance=ExtResource("4_pjw23")] +collision_mask = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Killzone_enemy" unique_id=1604337896] +position = Vector2(-0.5, -13) +shape = SubResource("RectangleShape2D_2npkn") +one_way_collision = true +one_way_collision_margin = 0.0 + +[node name="DeathSound" type="AudioStreamPlayer2D" parent="." unique_id=644121770] +stream = ExtResource("5_2npkn") diff --git a/scripts/apple.gd b/scripts/apple.gd new file mode 100644 index 0000000..b2884ce --- /dev/null +++ b/scripts/apple.gd @@ -0,0 +1,15 @@ +extends Area2D + +@onready var animation_player: AnimationPlayer = $AnimationPlayer + +var game_manager: Node + +func _ready() -> void: + if not game_manager: + game_manager = get_tree().get_first_node_in_group("game_manager") + +func _on_body_entered(body: Node2D) -> void: + if body.is_in_group("player"): + if game_manager: + game_manager.add_health() + animation_player.play("pickup") diff --git a/scripts/apple.gd.uid b/scripts/apple.gd.uid new file mode 100644 index 0000000..a93c491 --- /dev/null +++ b/scripts/apple.gd.uid @@ -0,0 +1 @@ +uid://ccc81ck60gyxg diff --git a/scripts/coin.gd b/scripts/coin.gd new file mode 100644 index 0000000..16ed459 --- /dev/null +++ b/scripts/coin.gd @@ -0,0 +1,18 @@ +extends Area2D + +@onready var animation_player: AnimationPlayer = $AnimationPlayer + +var game_manager: Node + +func _ready() -> void: + add_to_group("coin") + if not game_manager: + game_manager = get_tree().get_first_node_in_group("game_manager") + +func popup() -> void: + animation_player.play("popup") + +func _on_body_entered(body: Node2D) -> void: + if game_manager: + game_manager.add_point() + animation_player.play("pickup") diff --git a/scripts/coin.gd.uid b/scripts/coin.gd.uid new file mode 100644 index 0000000..3679efd --- /dev/null +++ b/scripts/coin.gd.uid @@ -0,0 +1 @@ +uid://bl6qtyu60o6ug diff --git a/scripts/end_screen.gd b/scripts/end_screen.gd new file mode 100644 index 0000000..45a6902 --- /dev/null +++ b/scripts/end_screen.gd @@ -0,0 +1,16 @@ +extends CanvasLayer + +func _ready() -> void: + process_mode = Node.PROCESS_MODE_ALWAYS + $Restart.pressed.connect(_on_restart_pressed) + +func setup(time: float, coins: int, total: int) -> void: + $TimeTaken.text = "Your attempt took %.1fs" % time + $CoinsCollected.text = "You collected %d/%d coins" % [coins, total] + +func _on_restart_pressed() -> void: + GameManager.health = 1 + GameManager.score = 0 + get_tree().paused = false + queue_free() + get_tree().reload_current_scene() diff --git a/scripts/end_screen.gd.uid b/scripts/end_screen.gd.uid new file mode 100644 index 0000000..be65fc9 --- /dev/null +++ b/scripts/end_screen.gd.uid @@ -0,0 +1 @@ +uid://coasi1e17k3wq diff --git a/scripts/end_zone.gd b/scripts/end_zone.gd new file mode 100644 index 0000000..2bf03c2 --- /dev/null +++ b/scripts/end_zone.gd @@ -0,0 +1,8 @@ +extends Area2D + +func _ready() -> void: + body_entered.connect(_on_body_entered) + +func _on_body_entered(body: Node) -> void: + if body.is_in_group("player"): + get_tree().get_first_node_in_group("game_manager").show_end_screen() diff --git a/scripts/end_zone.gd.uid b/scripts/end_zone.gd.uid new file mode 100644 index 0000000..95f79b6 --- /dev/null +++ b/scripts/end_zone.gd.uid @@ -0,0 +1 @@ +uid://ct23irq4h4kje diff --git a/scripts/game_manager.gd b/scripts/game_manager.gd new file mode 100644 index 0000000..58021a4 --- /dev/null +++ b/scripts/game_manager.gd @@ -0,0 +1,63 @@ +extends Node +class_name GameManager + +@onready var overlay: CanvasLayer = %Overlay + +static var health = 1 +static var score = 0 +var start_time: int = 0 +var total_coins: int = 0 + +func _ready() -> void: + get_tree().paused = false + add_to_group("game_manager") + start_time = Time.get_ticks_msec() + _update_hearts() + overlay.get_node("ScoreLabel").text = "Score: " + str(score) + call_deferred("_count_coins") + +func _update_hearts() -> void: + overlay.get_node("Heart1").visible = health >= 1 + overlay.get_node("Heart2").visible = health >= 2 + overlay.get_node("Heart3").visible = health >= 3 + +func _count_coins() -> void: + total_coins = get_tree().get_nodes_in_group("coin").size() + 2 + +func add_point(): + score += 1 + overlay.get_node("ScoreLabel").text = "Score: " + str(score) + +func add_health(): + if health < 3: + health += 1 + _update_hearts() + +func take_damage(force_reload: bool = false): + health -= 1 + if health <= 0: + health = 1 + score = 0 + var player = get_tree().get_first_node_in_group("player") + if player: + player.die() + await get_tree().create_timer(1.0).timeout + get_tree().reload_current_scene() + elif force_reload: + score = 0 + _update_hearts() + var player = get_tree().get_first_node_in_group("player") + if player: + player.die() + await get_tree().create_timer(1.0).timeout + get_tree().reload_current_scene() + else: + _update_hearts() + get_tree().get_first_node_in_group("player").take_hit() + +func show_end_screen() -> void: + var elapsed = (Time.get_ticks_msec() - start_time) / 1000.0 + var end_screen = load("res://scenes/end_screen.tscn").instantiate() + get_tree().root.add_child(end_screen) + end_screen.setup(elapsed, score, total_coins) + get_tree().paused = true diff --git a/scripts/game_manager.gd.uid b/scripts/game_manager.gd.uid new file mode 100644 index 0000000..13cad2c --- /dev/null +++ b/scripts/game_manager.gd.uid @@ -0,0 +1 @@ +uid://cf2xjcjast04e diff --git a/scripts/grapes.gd b/scripts/grapes.gd new file mode 100644 index 0000000..8e5ab6e --- /dev/null +++ b/scripts/grapes.gd @@ -0,0 +1,18 @@ +extends Area2D + +@export var duration: float = 5.0 +@export var jump_multiplier: float = 1.5 + +@onready var animation_player: AnimationPlayer = $AnimationPlayer + +func _on_body_entered(body: Node2D) -> void: + if body.is_in_group("player"): + animation_player.play("pickup") + _apply_boost(body) + +func _apply_boost(player: Node) -> void: + var base_jump = player.jump_velocity + player.jump_velocity = base_jump * jump_multiplier + await get_tree().create_timer(duration).timeout + if is_instance_valid(player): + player.jump_velocity = base_jump diff --git a/scripts/grapes.gd.uid b/scripts/grapes.gd.uid new file mode 100644 index 0000000..3911890 --- /dev/null +++ b/scripts/grapes.gd.uid @@ -0,0 +1 @@ +uid://byoow85ssm52p diff --git a/scripts/killzone_player.gd b/scripts/killzone_player.gd new file mode 100644 index 0000000..108185d --- /dev/null +++ b/scripts/killzone_player.gd @@ -0,0 +1,18 @@ +extends Area2D + +func _on_body_entered(body: Node2D) -> void: + + if not body.is_in_group("player"): + return + + var parent = get_parent() + if parent.get("is_dying") != null: + if parent.get("is_dying"): + return + + body.set_physics_process(false) + body.set_process(false) + body.get_node("CollisionShape2D").set_deferred("disabled", true) + + var force_reload = parent.get("is_dying") == null + get_tree().get_first_node_in_group("game_manager").take_damage(force_reload) diff --git a/scripts/killzone_player.gd.uid b/scripts/killzone_player.gd.uid new file mode 100644 index 0000000..f7fb55c --- /dev/null +++ b/scripts/killzone_player.gd.uid @@ -0,0 +1 @@ +uid://bxagvcko4i2l0 diff --git a/scripts/lucky_block.gd b/scripts/lucky_block.gd new file mode 100644 index 0000000..31c39a2 --- /dev/null +++ b/scripts/lucky_block.gd @@ -0,0 +1,34 @@ +extends AnimatableBody2D + +enum Reward { COIN, APPLE, PEAR, GRAPES } +@export var reward: Reward = Reward.COIN + +const REWARD_SCENES = { + Reward.COIN: "res://scenes/coin.tscn", + Reward.APPLE: "res://scenes/apple.tscn", + Reward.PEAR: "res://scenes/pear.tscn", + Reward.GRAPES: "res://scenes/grapes.tscn", +} + +@onready var sound_player: AnimationPlayer = $SoundPlayer +@onready var reward_collision: CollisionShape2D = $RewardZone/RewardCollision +@onready var reward_zone: Area2D = $RewardZone + +func _ready() -> void: + reward_zone.body_entered.connect(_on_rewardzone_body_entered) + +func _on_rewardzone_body_entered(body: Node) -> void: + if body.is_in_group("player"): + sound_player.play("reward") + reward_collision.set_deferred("disabled", true) + call_deferred("_spawn_reward") + +func _spawn_reward() -> void: + var reward_scene = load(REWARD_SCENES[reward]) + var reward_node = reward_scene.instantiate() + get_parent().add_child(reward_node) + reward_node.global_position = global_position + Vector2(0, -16) + if "game_manager" in reward_node: + reward_node.game_manager = get_tree().get_first_node_in_group("game_manager") + if reward_node.has_method("popup"): + reward_node.popup() diff --git a/scripts/lucky_block.gd.uid b/scripts/lucky_block.gd.uid new file mode 100644 index 0000000..86b6872 --- /dev/null +++ b/scripts/lucky_block.gd.uid @@ -0,0 +1 @@ +uid://cbecw2ujni8nq diff --git a/scripts/pear.gd b/scripts/pear.gd new file mode 100644 index 0000000..73febc7 --- /dev/null +++ b/scripts/pear.gd @@ -0,0 +1,18 @@ +extends Area2D + +@export var duration: float = 5.0 +@export var speed_multiplier: float = 1.8 + +@onready var animation_player: AnimationPlayer = $AnimationPlayer + +func _on_body_entered(body: Node2D) -> void: + if body.is_in_group("player"): + animation_player.play("pickup") + _apply_boost(body) + +func _apply_boost(player: Node) -> void: + var base_speed = player.speed + player.speed = base_speed * speed_multiplier + await get_tree().create_timer(duration).timeout + if is_instance_valid(player): + player.speed = base_speed diff --git a/scripts/pear.gd.uid b/scripts/pear.gd.uid new file mode 100644 index 0000000..2e040b3 --- /dev/null +++ b/scripts/pear.gd.uid @@ -0,0 +1 @@ +uid://ci50630gt06ch diff --git a/scripts/player.gd b/scripts/player.gd new file mode 100644 index 0000000..fa12eab --- /dev/null +++ b/scripts/player.gd @@ -0,0 +1,72 @@ +extends CharacterBody2D + +@onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D +@onready var ray_cast_right: RayCast2D = $RayCastRight +@onready var ray_cast_left: RayCast2D = $RayCastLeft +@onready var animation_player: AnimationPlayer = $AnimationPlayer + +var speed = 130.0 +var jump_velocity = -300.0 + +var is_hurt: bool = false + +func _ready() -> void: + add_to_group("player") + + +func take_hit() -> void: + set_physics_process(true) + set_process(true) + $CollisionShape2D.set_deferred("disabled", false) + $Sounds/DeathSound.play() + is_hurt = true + animated_sprite_2d.play("damage") + var fps = animated_sprite_2d.sprite_frames.get_animation_speed("damage") + var frame_count = animated_sprite_2d.sprite_frames.get_frame_count("damage") + await get_tree().create_timer(frame_count / fps).timeout + is_hurt = false + +func die() -> void: + animated_sprite_2d.play("death") + animation_player.play("death") + + +func _physics_process(delta: float) -> void: + if not is_on_floor(): + velocity += get_gravity() * delta + + if Input.is_action_just_pressed("jump") and is_on_floor(): + velocity.y = jump_velocity + animation_player.play("jump") + elif Input.is_action_just_pressed("jump") and is_on_wall(): + if ray_cast_right.is_colliding(): + velocity.y = jump_velocity + velocity.x = -300 + elif ray_cast_left.is_colliding(): + velocity.y = jump_velocity + velocity.x = 300 + animation_player.play("jump") + + var direction := Input.get_axis("move_left", "move_right") + + if direction > 0: + animated_sprite_2d.flip_h = false + elif direction < 0: + animated_sprite_2d.flip_h = true + + if not is_hurt: + if is_on_floor(): + if direction == 0: + animated_sprite_2d.play("idle") + else: + animated_sprite_2d.play("run") + else: + animated_sprite_2d.play("jump") + + + if direction: + velocity.x = direction * speed + else: + velocity.x = move_toward(velocity.x, 0, speed) + + move_and_slide() diff --git a/scripts/player.gd.uid b/scripts/player.gd.uid new file mode 100644 index 0000000..1e6967f --- /dev/null +++ b/scripts/player.gd.uid @@ -0,0 +1 @@ +uid://q646ipq51kns diff --git a/scripts/slime.gd b/scripts/slime.gd new file mode 100644 index 0000000..f590669 --- /dev/null +++ b/scripts/slime.gd @@ -0,0 +1,39 @@ +extends Node2D + +const SPEED = 30 + +var direction = 1 +var is_dying = false + +@onready var ray_cast_right: RayCast2D = $RayCastRight +@onready var ray_cast_left: RayCast2D = $RayCastLeft +@onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D +@onready var animation_player: AnimationPlayer = $AnimationPlayer +@onready var killzone_enemy: Area2D = $Killzone_enemy +@onready var collision_kill_player: CollisionShape2D = $KillzonePlayer/CollisionShape2D +@onready var collision_kill_enemy: CollisionShape2D = $Killzone_enemy/CollisionShape2D + +func _ready() -> void: + killzone_enemy.body_entered.connect(_on_killzone_body_entered) + +func _process(delta: float) -> void: + if ray_cast_right.is_colliding(): + direction = -1 + animated_sprite_2d.flip_h = true + elif ray_cast_left.is_colliding(): + direction = 1 + animated_sprite_2d.flip_h = false + + position.x += direction * SPEED * delta + + +func _on_killzone_body_entered(body: Node) -> void: + if body.is_in_group("player") and not is_dying: + is_dying = true + collision_kill_player.set_deferred("disabled",true) + animation_player.play("death") + body.velocity.y = -300 + direction = 0 + collision_kill_enemy.set_deferred("disabled", true) + await animation_player.animation_finished + queue_free() diff --git a/scripts/slime.gd.uid b/scripts/slime.gd.uid new file mode 100644 index 0000000..e4699fc --- /dev/null +++ b/scripts/slime.gd.uid @@ -0,0 +1 @@ +uid://b70jd71jqvkx6