Initial commit

main
Jaro Winkelhausen 2026-03-30 23:59:18 +02:00
commit a92959cbab
89 changed files with 3255 additions and 0 deletions

4
.editorconfig 100644
View File

@ -0,0 +1,4 @@
root = true
[*]
charset = utf-8

2
.gitattributes vendored 100644
View File

@ -0,0 +1,2 @@
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf

10
.gitignore vendored 100644
View File

@ -0,0 +1,10 @@
# Godot 4+ specific ignores
.godot/
/android/
/web/*
# Web export artifacts in root
*.html
*.js
*.wasm
*.pck

Binary file not shown.

View File

@ -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={}

Binary file not shown.

View File

@ -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={}

Binary file not shown.

View File

@ -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

Binary file not shown.

View File

@ -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

Binary file not shown.

View File

@ -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

Binary file not shown.

View File

@ -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

Binary file not shown.

View File

@ -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

Binary file not shown.

View File

@ -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

Binary file not shown.

View File

@ -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

Binary file not shown.

View File

@ -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

Binary file not shown.

View File

@ -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

Binary file not shown.

View File

@ -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

Binary file not shown.

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 B

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 908 B

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -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

View File

@ -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"

121
export_presets.cfg 100644
View File

@ -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

56
project.godot 100644
View File

@ -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"

128
scenes/apple.tscn 100644
View File

@ -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"]

222
scenes/coin.tscn 100644
View File

@ -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"]

View File

@ -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"

View File

@ -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")

653
scenes/game.tscn 100644

File diff suppressed because one or more lines are too long

113
scenes/grapes.tscn 100644
View File

@ -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"]

View File

@ -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]

View File

@ -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"]

View File

@ -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")

View File

@ -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"

View File

@ -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")

114
scenes/pear.tscn 100644
View File

@ -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"]

View File

@ -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

322
scenes/player.tscn 100644
View File

@ -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"

230
scenes/slime.tscn 100644
View File

@ -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")

15
scripts/apple.gd 100644
View File

@ -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")

View File

@ -0,0 +1 @@
uid://ccc81ck60gyxg

18
scripts/coin.gd 100644
View File

@ -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")

View File

@ -0,0 +1 @@
uid://bl6qtyu60o6ug

View File

@ -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()

View File

@ -0,0 +1 @@
uid://coasi1e17k3wq

View File

@ -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()

View File

@ -0,0 +1 @@
uid://ct23irq4h4kje

View File

@ -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

View File

@ -0,0 +1 @@
uid://cf2xjcjast04e

18
scripts/grapes.gd 100644
View File

@ -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

View File

@ -0,0 +1 @@
uid://byoow85ssm52p

View File

@ -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)

View File

@ -0,0 +1 @@
uid://bxagvcko4i2l0

View File

@ -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()

View File

@ -0,0 +1 @@
uid://cbecw2ujni8nq

18
scripts/pear.gd 100644
View File

@ -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

View File

@ -0,0 +1 @@
uid://ci50630gt06ch

72
scripts/player.gd 100644
View File

@ -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()

View File

@ -0,0 +1 @@
uid://q646ipq51kns

39
scripts/slime.gd 100644
View File

@ -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()

View File

@ -0,0 +1 @@
uid://b70jd71jqvkx6