Compare commits

..

No commits in common. "main" and "menuing_and_audio" have entirely different histories.

120 changed files with 187 additions and 4083 deletions

BIN
.DS_Store vendored 100644

Binary file not shown.

3
.gitignore vendored
View File

@ -2,8 +2,5 @@
.godot/ .godot/
/android/ /android/
# macOS metadata
.DS_Store
# Claude Code # Claude Code
.claude/worktrees/ .claude/worktrees/

View File

@ -1,46 +0,0 @@
# Hexwarden
> **Brew. Cast. Survive.**
A top-down survival roguelike where you play as a witch holding her ground against endless waves of slimes. Collect magical fruits, brew powerful potions, and unleash devastating spells — for as long as you can.
Built with **Godot 4.6** as part of a university game engineering course at Hochschule Mannheim.
🎮 **[Play on itch.io](https://mik141.itch.io/hexwarden)**
---
## Gameplay
Enemies swarm in from all sides. Your only weapons are the spells you brew.
- Move with **WASD**
- Slimes drop **fruits** when killed — run over them to collect
- Fill all **3 cauldron slots** to trigger a brew and unleash a spell
- The fruit combination determines the spell
- Earn XP from kills → **level up** → choose one of multiple Perks
- Survive as long as possible
---
## Team
**Jaro Winkelhausen** — Game Development
**Arthur David** — Game Development
**Meik Schürmann** — Game Design, UI & Menu System
---
## About the Project
Hexwarden was built for the *Game Engineering* course (Prof. Dr. Kai Eckert, Hochschule Mannheim, SS 2026). None of us had significant game development experience when we started — this is a learning project made with a lot of trial, error, and genuine enthusiasm for the genre.
Inspired by [Vampire Survivors](https://store.steampowered.com/app/1794680/Vampire_Survivors/).
We're still actively developing it — expect bugs, rough edges, and future updates.
---
## License
This project was created for educational purposes. Assets from third-party packs are used under their respective licenses — see individual asset folders for details.

BIN
assets/.DS_Store vendored 100644

Binary file not shown.

BIN
assets/Swordsman_lvl1/.DS_Store vendored 100644

Binary file not shown.

BIN
assets/Swordsman_lvl2/.DS_Store vendored 100644

Binary file not shown.

View File

@ -1,14 +0,0 @@
Pixel Art License
Copyright © OceansCurse 2026 — All rights reserved.
You are free to:
- Use these assets in any personal or commercial project (including games, apps, merchandise, etc.).
- Modify, adapt, and create derivative works from these assets.
You are not permitted to:
- Redistribute, resell, or re-upload these assets (or substantial portions/modified versions) as standalone files, asset packs, or listings on itch.io, other marketplaces, or elsewhere.
- Present or claim these assets (original or modified) as your own original creation in a way that removes my authorship.
Attribution is not required, but always appreciated (e.g., "Assets by OceansCurse on itch.io").
These terms do not affect your rights under fair use or other applicable law.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 551 B

View File

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://blotgjvb5lg5n"
path="res://.godot/imported/books_blue_gem.png-6b9e1efe847341054172f4dc841820d4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/books_set_2/books_blue_gem.png"
dest_files=["res://.godot/imported/books_blue_gem.png-6b9e1efe847341054172f4dc841820d4.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.

Before

Width:  |  Height:  |  Size: 537 B

View File

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b1dpo1suawep6"
path="res://.godot/imported/books_crimson_gem.png-e8e082c355c0dfd58d6abd9b647c9d64.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/books_set_2/books_crimson_gem.png"
dest_files=["res://.godot/imported/books_crimson_gem.png-e8e082c355c0dfd58d6abd9b647c9d64.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.

Before

Width:  |  Height:  |  Size: 472 B

View File

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b0p1bbqie3r44"
path="res://.godot/imported/books_cross.png-35551b7d8d063fdb0725cd59a672b335.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/books_set_2/books_cross.png"
dest_files=["res://.godot/imported/books_cross.png-35551b7d8d063fdb0725cd59a672b335.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.

Before

Width:  |  Height:  |  Size: 621 B

View File

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://jghgdp2kyjo7"
path="res://.godot/imported/books_eye.png-0b5ed65a09665cddbdbac80092f229ee.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/books_set_2/books_eye.png"
dest_files=["res://.godot/imported/books_eye.png-0b5ed65a09665cddbdbac80092f229ee.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.

Before

Width:  |  Height:  |  Size: 542 B

View File

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://colq7wi3ti117"
path="res://.godot/imported/books_green_gem.png-1a6532ce505dc88ac93cf48f05352ebe.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/books_set_2/books_green_gem.png"
dest_files=["res://.godot/imported/books_green_gem.png-1a6532ce505dc88ac93cf48f05352ebe.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.

Before

Width:  |  Height:  |  Size: 583 B

View File

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cq4qf7to1wg0m"
path="res://.godot/imported/books_health_potion.png-f8c3182e75c659e8cd07cbcee2ba8296.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/books_set_2/books_health_potion.png"
dest_files=["res://.godot/imported/books_health_potion.png-f8c3182e75c659e8cd07cbcee2ba8296.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.

Before

Width:  |  Height:  |  Size: 578 B

View File

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://lo5ocyv4wo3e"
path="res://.godot/imported/books_jewel.png-81cbdb01e058151fa333b7a570f883b8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/books_set_2/books_jewel.png"
dest_files=["res://.godot/imported/books_jewel.png-81cbdb01e058151fa333b7a570f883b8.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.

Before

Width:  |  Height:  |  Size: 545 B

View File

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://1pr5rqdnpnw5"
path="res://.godot/imported/books_mana_potion.png-e9b0c98b6782a5538a4f682f9d61384f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/books_set_2/books_mana_potion.png"
dest_files=["res://.godot/imported/books_mana_potion.png-e9b0c98b6782a5538a4f682f9d61384f.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.

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dlygc6jakfapg"
path="res://.godot/imported/books_pentagram.png-3e29e3d9c342d860aa7f6d22635f65db.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/books_set_2/books_pentagram.png"
dest_files=["res://.godot/imported/books_pentagram.png-3e29e3d9c342d860aa7f6d22635f65db.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.

Before

Width:  |  Height:  |  Size: 566 B

View File

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cogqoxfqsnvv1"
path="res://.godot/imported/books_poison.png-3e8beaf0e04a26a46016fddeb0daf0f8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/books_set_2/books_poison.png"
dest_files=["res://.godot/imported/books_poison.png-3e8beaf0e04a26a46016fddeb0daf0f8.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.

Before

Width:  |  Height:  |  Size: 548 B

View File

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ryhfe1a3haxf"
path="res://.godot/imported/books_purple_gem.png-a017fe601493fdc75182a2e7b6cf68cb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/books_set_2/books_purple_gem.png"
dest_files=["res://.godot/imported/books_purple_gem.png-a017fe601493fdc75182a2e7b6cf68cb.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.

Before

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bnlacakjmdnp1"
path="res://.godot/imported/books_set_2_preview.png-e47aaf46da7c1d64191f8dfb0958de3a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/books_set_2/books_set_2_preview.png"
dest_files=["res://.godot/imported/books_set_2_preview.png-e47aaf46da7c1d64191f8dfb0958de3a.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.

Before

Width:  |  Height:  |  Size: 458 B

View File

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dm3wtcchfipcf"
path="res://.godot/imported/books_upside_down_cross.png-f374141fa42ba8d66998f6c556ae5908.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/books_set_2/books_upside_down_cross.png"
dest_files=["res://.godot/imported/books_upside_down_cross.png-f374141fa42ba8d66998f6c556ae5908.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

@ -1,19 +0,0 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://b27862pnesv4a"
path="res://.godot/imported/47313572-experimental-8-bit-sound-270302.mp3-c4341312242ec2d6d5bacb1c4c433fda.mp3str"
[deps]
source_file="res://assets/music&sfx/sfx/47313572-experimental-8-bit-sound-270302.mp3"
dest_files=["res://.godot/imported/47313572-experimental-8-bit-sound-270302.mp3-c4341312242ec2d6d5bacb1c4c433fda.mp3str"]
[params]
loop=false
loop_offset=0.0
bpm=0.0
beat_count=0
bar_beats=4

View File

@ -1,24 +0,0 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://3ubacx6k21aq"
path="res://.godot/imported/card_shuffle.wav-2df5de9a976f5727aeeddc7f5f41163e.sample"
[deps]
source_file="res://assets/music&sfx/sfx/card_shuffle.wav"
dest_files=["res://.godot/imported/card_shuffle.wav-2df5de9a976f5727aeeddc7f5f41163e.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

View File

@ -1,19 +0,0 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://o81j4w2j1p16"
path="res://.godot/imported/data_pion-sfx9-fwoosh-324525.mp3-aae109eab17a5ca7e7981c978d3c52e3.mp3str"
[deps]
source_file="res://assets/music&sfx/sfx/data_pion-sfx9-fwoosh-324525.mp3"
dest_files=["res://.godot/imported/data_pion-sfx9-fwoosh-324525.mp3-aae109eab17a5ca7e7981c978d3c52e3.mp3str"]
[params]
loop=false
loop_offset=0.0
bpm=0.0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@ -1,24 +0,0 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://buxdyhc4ih63f"
path="res://.godot/imported/fire.wav-a8c495294a82be1272b8f8a56ccb40f5.sample"
[deps]
source_file="res://assets/music&sfx/sfx/fire.wav"
dest_files=["res://.godot/imported/fire.wav-a8c495294a82be1272b8f8a56ccb40f5.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

@ -1,24 +0,0 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://cn7yee27ivj7b"
path="res://.godot/imported/laser.wav-ff32fed33cb3ccbcd074381583780fec.sample"
[deps]
source_file="res://assets/music&sfx/sfx/laser.wav"
dest_files=["res://.godot/imported/laser.wav-ff32fed33cb3ccbcd074381583780fec.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

View File

@ -1,19 +0,0 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://bh8o5pk2cco1a"
path="res://.godot/imported/lesiakower-coin-collect-retro-8-bit-sound-effect-145251.mp3-0a5ea69aced7938e6b9174c8f11f81d9.mp3str"
[deps]
source_file="res://assets/music&sfx/sfx/lesiakower-coin-collect-retro-8-bit-sound-effect-145251.mp3"
dest_files=["res://.godot/imported/lesiakower-coin-collect-retro-8-bit-sound-effect-145251.mp3-0a5ea69aced7938e6b9174c8f11f81d9.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@ -1,19 +0,0 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://bjyttcuhiidrq"
path="res://.godot/imported/lesiakower-level-up-enhancement-8-bit-retro-sound-effect-153002.mp3-a2556229ce18ac544b49cfbc2bd40be8.mp3str"
[deps]
source_file="res://assets/music&sfx/sfx/lesiakower-level-up-enhancement-8-bit-retro-sound-effect-153002.mp3"
dest_files=["res://.godot/imported/lesiakower-level-up-enhancement-8-bit-retro-sound-effect-153002.mp3-a2556229ce18ac544b49cfbc2bd40be8.mp3str"]
[params]
loop=false
loop_offset=0.0
bpm=0.0
beat_count=0
bar_beats=4

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 B

View File

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://pot4k8a6lxd0"
path="res://.godot/imported/knvie.png-6e2c57d6850f97653fad709f2c5186b5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/weapons/knvie.png"
dest_files=["res://.godot/imported/knvie.png-6e2c57d6850f97653fad709f2c5186b5.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

@ -1,28 +0,0 @@
[
{
"time_start": 0,
"time_end": 60,
"elite_enemy": "res://scenes/slime.tscn",
"entries": [
{ "enemy": "res://scenes/slime.tscn", "count_at_start": 0, "count_at_end": 15, "min_interval": 0.5 }
]
},
{
"time_start": 60,
"time_end": 180,
"elite_enemy": "res://scenes/blue_slime.tscn",
"entries": [
{ "enemy": "res://scenes/slime.tscn", "count_at_start": 15, "count_at_end": 40, "min_interval": 0.3 },
{ "enemy": "res://scenes/blue_slime.tscn", "count_at_start": 0, "count_at_end": 10, "min_interval": 0.8 }
]
},
{
"time_start": 180,
"time_end": -1,
"entries": [
{ "enemy": "res://scenes/slime.tscn", "count_at_start": 40, "count_at_end": 100, "min_interval": 0.2 },
{ "enemy": "res://scenes/blue_slime.tscn", "count_at_start": 10, "count_at_end": 60, "min_interval": 0.5 },
{ "enemy": "res://scenes/fire_slime.tscn", "count_at_start": 0, "count_at_end": 40, "min_interval": 0.6 }
]
}
]

View File

@ -69,53 +69,3 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -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 Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'" 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="../Hexwarden/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

View File

@ -22,7 +22,6 @@ buses/default_bus_layout="uid://5oswo22yvmtg"
[autoload] [autoload]
MusicManager="*uid://dmu7041wi1upt" MusicManager="*uid://dmu7041wi1upt"
SpellLibrary="*res://scripts/SpellLibrary.gd"
[display] [display]
@ -34,33 +33,6 @@ window/stretch/mode="viewport"
3d/physics_engine="Jolt Physics" 3d/physics_engine="Jolt Physics"
[input]
move_left={
"deadzone": 0.5,
"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":4194319,"key_label":0,"unicode":0,"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":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
]
}
move_right={
"deadzone": 0.5,
"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":4194321,"key_label":0,"unicode":0,"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":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
]
}
move_up={
"deadzone": 0.5,
"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":4194320,"key_label":0,"unicode":0,"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":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
]
}
move_down={
"deadzone": 0.5,
"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":4194322,"key_label":0,"unicode":0,"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":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
]
}
[rendering] [rendering]
rendering_device/driver.windows="d3d12" rendering_device/driver.windows="d3d12"

View File

@ -1,105 +0,0 @@
[gd_scene format=3 uid="uid://bbhpa50ef6702"]
[ext_resource type="Script" uid="uid://dw5y2tp34fxys" path="res://scripts/perk_card.gd" id="1_t8gqh"]
[ext_resource type="Texture2D" uid="uid://duo145bmwho8d" path="res://assets/UI assets pack 2/UI books & more.png" id="2_nlhlf"]
[ext_resource type="FontFile" uid="uid://cq0jx2aapggkg" path="res://assets/fonts/slkscrb.ttf" id="3_n4umd"]
[ext_resource type="FontFile" uid="uid://brooj0hba7650" path="res://assets/fonts/slkscr.ttf" id="4_40ty6"]
[ext_resource type="Texture2D" uid="uid://cdktimg5axaxj" path="res://assets/Fire Pixel Bullet 16x16/All_Fire_Bullet_Pixel_16x16_01.png" id="4_nlhlf"]
[sub_resource type="AtlasTexture" id="AtlasTexture_fgk3h"]
atlas = ExtResource("2_nlhlf")
region = Rect2(561, 17, 46, 62)
[sub_resource type="LabelSettings" id="LabelSettings_qag4p"]
line_spacing = 5.0
font = ExtResource("3_n4umd")
font_size = 16
outline_size = 2
outline_color = Color(0, 0, 0, 1)
[sub_resource type="AtlasTexture" id="AtlasTexture_n4umd"]
atlas = ExtResource("4_nlhlf")
region = Rect2(258, 241, 25, 14)
[sub_resource type="LabelSettings" id="LabelSettings_ni87r"]
line_spacing = 6.0
font = ExtResource("3_n4umd")
font_size = 17
outline_size = 2
outline_color = Color(0, 0, 0, 1)
[node name="PerkCard" type="Control" unique_id=1471811151]
custom_minimum_size = Vector2(240, 360)
layout_mode = 3
anchors_preset = 0
script = ExtResource("1_t8gqh")
[node name="Card" type="TextureRect" parent="." unique_id=1832247473]
texture_filter = 1
custom_minimum_size = Vector2(240, 360)
layout_mode = 0
offset_right = 40.0
offset_bottom = 40.0
texture = SubResource("AtlasTexture_fgk3h")
[node name="Name" type="Label" parent="Card" unique_id=2006873472]
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -65.0
offset_top = 43.0
offset_right = 65.0
offset_bottom = 100.0
grow_horizontal = 2
text = "Zweizeilige
Überschrift
"
label_settings = SubResource("LabelSettings_qag4p")
horizontal_alignment = 1
[node name="TextureRect" type="TextureRect" parent="Card/Name" unique_id=2128840891]
texture_filter = 1
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -24.5
offset_top = -10.0
offset_right = 24.5
offset_bottom = 19.0
grow_horizontal = 2
grow_vertical = 0
texture = SubResource("AtlasTexture_n4umd")
stretch_mode = 5
[node name="Description" type="RichTextLabel" parent="Card" unique_id=859816848]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -100.0
offset_top = -215.0
offset_right = 100.0
offset_bottom = -36.0
grow_horizontal = 2
grow_vertical = 0
theme_override_fonts/normal_font = ExtResource("3_n4umd")
theme_override_font_sizes/normal_font_size = 17
theme_override_constants/outline_size = 2
theme_override_colors/default_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
bbcode_enabled = true
scroll_active = false
text = ""
[node name="Button" type="Button" parent="." unique_id=1274377333]
layout_mode = 0
offset_right = 240.0
offset_bottom = 360.0
[connection signal="pressed" from="Button" to="." method="_on_button_pressed"]

View File

@ -1,122 +0,0 @@
[gd_scene format=3 uid="uid://d2mpjsuueg0bn"]
[ext_resource type="Script" uid="uid://bdhx27edemfce" path="res://scripts/beam.gd" id="1_beam00"]
[ext_resource type="Texture2D" uid="uid://dxox0vjihmukh" path="res://assets/Fire Pixel Bullet 16x16/All_Fire_Bullet_Pixel_16x16_05.png" id="2_hl8vi"]
[sub_resource type="AtlasTexture" id="AtlasTexture_daiji"]
atlas = ExtResource("2_hl8vi")
region = Rect2(96, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_bawts"]
atlas = ExtResource("2_hl8vi")
region = Rect2(112, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_8wlve"]
atlas = ExtResource("2_hl8vi")
region = Rect2(128, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_bt3ye"]
atlas = ExtResource("2_hl8vi")
region = Rect2(144, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_a06w7"]
atlas = ExtResource("2_hl8vi")
region = Rect2(96, 16, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_5fvdj"]
atlas = ExtResource("2_hl8vi")
region = Rect2(112, 16, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_djxf5"]
atlas = ExtResource("2_hl8vi")
region = Rect2(128, 16, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_eeead"]
atlas = ExtResource("2_hl8vi")
region = Rect2(144, 16, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_qfoqh"]
atlas = ExtResource("2_hl8vi")
region = Rect2(96, 32, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_tuykp"]
atlas = ExtResource("2_hl8vi")
region = Rect2(112, 32, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_2dcgn"]
atlas = ExtResource("2_hl8vi")
region = Rect2(128, 32, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_7703o"]
atlas = ExtResource("2_hl8vi")
region = Rect2(144, 32, 16, 16)
[sub_resource type="SpriteFrames" id="SpriteFrames_beam0"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_daiji")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_bawts")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_8wlve")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_bt3ye")
}],
"loop": true,
"name": &"end",
"speed": 10.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_a06w7")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_5fvdj")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_djxf5")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_eeead")
}],
"loop": true,
"name": &"middle",
"speed": 10.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_qfoqh")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_tuykp")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_2dcgn")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_7703o")
}],
"loop": true,
"name": &"start",
"speed": 10.0
}]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_beam0"]
size = Vector2(16, 8)
[node name="Beam" type="Area2D" unique_id=968931754]
script = ExtResource("1_beam00")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=100000001]
texture_filter = 1
sprite_frames = SubResource("SpriteFrames_beam0")
animation = &"start"
frame_progress = 0.6340464
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=100000002]
shape = SubResource("RectangleShape2D_beam0")
disabled = true

View File

@ -11,7 +11,7 @@
[sub_resource type="Resource" id="Resource_i8e30"] [sub_resource type="Resource" id="Resource_i8e30"]
script = ExtResource("2_ullxd") script = ExtResource("2_ullxd")
drop = ExtResource("3_ullxd") drop = ExtResource("3_ullxd")
chance = 0.6 chance = 0.3
metadata/_custom_type_script = "uid://cjkaw7wqw4e30" metadata/_custom_type_script = "uid://cjkaw7wqw4e30"
[sub_resource type="AtlasTexture" id="AtlasTexture_vx4o0"] [sub_resource type="AtlasTexture" id="AtlasTexture_vx4o0"]
@ -589,7 +589,7 @@ animations = [{
}], }],
"loop": false, "loop": false,
"name": &"hurt_down", "name": &"hurt_down",
"speed": 20.0 "speed": 10.0
}, { }, {
"frames": [{ "frames": [{
"duration": 1.0, "duration": 1.0,
@ -609,7 +609,7 @@ animations = [{
}], }],
"loop": false, "loop": false,
"name": &"hurt_left", "name": &"hurt_left",
"speed": 20.0 "speed": 10.0
}, { }, {
"frames": [{ "frames": [{
"duration": 1.0, "duration": 1.0,
@ -629,7 +629,7 @@ animations = [{
}], }],
"loop": false, "loop": false,
"name": &"hurt_right", "name": &"hurt_right",
"speed": 20.0 "speed": 10.0
}, { }, {
"frames": [{ "frames": [{
"duration": 1.0, "duration": 1.0,
@ -649,7 +649,7 @@ animations = [{
}], }],
"loop": false, "loop": false,
"name": &"hurt_up", "name": &"hurt_up",
"speed": 20.0 "speed": 10.0
}, { }, {
"frames": [{ "frames": [{
"duration": 1.0, "duration": 1.0,

View File

@ -1,22 +0,0 @@
[gd_scene format=3 uid="uid://cchili0scene1"]
[ext_resource type="Script" path="res://scripts/chili.gd" id="1_chili0"]
[ext_resource type="Texture2D" uid="uid://d2pinnrigixnp" path="res://assets/16x16 Pixelart Food Icons/Pixel_Foods(ARTLİNE).png" id="2_chili0"]
[sub_resource type="AtlasTexture" id="AtlasTexture_chili"]
atlas = ExtResource("2_chili0")
region = Rect2(19, 37, 16, 16)
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_chili"]
radius = 4.0
height = 12.0
[node name="Chili" type="Area2D" unique_id=200000001]
script = ExtResource("1_chili0")
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=200000002]
texture_filter = 1
texture = SubResource("AtlasTexture_chili")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=200000003]
shape = SubResource("CapsuleShape2D_chili")

View File

@ -1,68 +0,0 @@
[gd_scene format=3 uid="uid://bhcew4ksnx081"]
[ext_resource type="Script" uid="uid://dt85lj7ts5i87" path="res://scripts/credits.gd" id="1_0ctdu"]
[ext_resource type="Texture2D" uid="uid://2ddggeetjj1t" path="res://assets/images/screenshot_game.png" id="1_2ckv8"]
[ext_resource type="FontFile" uid="uid://8v71dcws4q6o" path="res://assets/fonts/slkscre.ttf" id="2_0ctdu"]
[node name="Credits" type="CanvasLayer" unique_id=45816245]
script = ExtResource("1_0ctdu")
[node name="BackgroundSprite" type="TextureRect" parent="." unique_id=356379919]
z_index = -2
offset_left = 4.0
offset_top = 2.0
offset_right = 1277.0
offset_bottom = 718.0
texture = ExtResource("1_2ckv8")
expand_mode = 2
[node name="BackgroundRect" type="ColorRect" parent="." unique_id=2118797143]
z_index = -1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 0.47058824)
[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=391956149]
z_index = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -308.5
offset_top = -106.0
offset_right = 308.5
offset_bottom = 106.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 50
alignment = 1
[node name="TitleLabel" type="Label" parent="VBoxContainer" unique_id=155909881]
layout_mode = 2
theme_override_fonts/font = ExtResource("2_0ctdu")
theme_override_font_sizes/font_size = 64
text = "Credits"
horizontal_alignment = 1
[node name="CreditsLabel" type="Label" parent="VBoxContainer" unique_id=267626570]
layout_mode = 2
theme_override_fonts/font = ExtResource("2_0ctdu")
theme_override_font_sizes/font_size = 20
text = "Assets — Swordsman, Slimes, Tiles craftpix.net
Asset — Witch AntumDeluge
Asset — Various Effects bdragon1727
Music — Main Menu (8 Bit Dungeon) Kaden_Cook
Music — In-Game (Ashveil) Pixelmaniax"
[node name="BackButton" type="Button" parent="VBoxContainer" unique_id=561894849]
layout_mode = 2
theme_override_fonts/font = ExtResource("2_0ctdu")
theme_override_font_sizes/font_size = 32
text = "Back"
[connection signal="pressed" from="VBoxContainer/BackButton" to="." method="_on_back_button_pressed"]

View File

@ -1,760 +0,0 @@
[gd_scene format=3 uid="uid://cpe6aiuqiox0u"]
[ext_resource type="Script" uid="uid://dklt42vjjcks7" path="res://scripts/fire_slime.gd" id="1_88j2t"]
[ext_resource type="Script" uid="uid://cjkaw7wqw4e30" path="res://scripts/drop_table.gd" id="dt_fslime"]
[ext_resource type="PackedScene" uid="uid://cchili0scene1" path="res://scenes/chili.tscn" id="chili_fslime"]
[ext_resource type="Texture2D" uid="uid://b1tyfy8ooudkc" path="res://assets/Slime3/With_shadow/Slime3_Death_with_shadow.png" id="2_ahfdi"]
[ext_resource type="Texture2D" uid="uid://bbm1sv6hmc2j" path="res://assets/Slime3/With_shadow/Slime3_Hurt_with_shadow.png" id="3_kq38e"]
[ext_resource type="Texture2D" uid="uid://bt07131sttb6e" path="res://assets/Slime3/With_shadow/Slime3_Walk_with_shadow.png" id="4_ret1g"]
[sub_resource type="AtlasTexture" id="AtlasTexture_u74be"]
atlas = ExtResource("2_ahfdi")
region = Rect2(0, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_hky14"]
atlas = ExtResource("2_ahfdi")
region = Rect2(64, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_1hmrm"]
atlas = ExtResource("2_ahfdi")
region = Rect2(128, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_icdnf"]
atlas = ExtResource("2_ahfdi")
region = Rect2(192, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_jpau6"]
atlas = ExtResource("2_ahfdi")
region = Rect2(256, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_pla0y"]
atlas = ExtResource("2_ahfdi")
region = Rect2(320, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_5ug5i"]
atlas = ExtResource("2_ahfdi")
region = Rect2(384, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_p0q1e"]
atlas = ExtResource("2_ahfdi")
region = Rect2(448, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_8gdmr"]
atlas = ExtResource("2_ahfdi")
region = Rect2(512, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_4gxlk"]
atlas = ExtResource("2_ahfdi")
region = Rect2(576, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_w642b"]
atlas = ExtResource("2_ahfdi")
region = Rect2(256, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_6tf61"]
atlas = ExtResource("2_ahfdi")
region = Rect2(0, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_354yo"]
atlas = ExtResource("2_ahfdi")
region = Rect2(64, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_wrhhh"]
atlas = ExtResource("2_ahfdi")
region = Rect2(128, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_5l6b7"]
atlas = ExtResource("2_ahfdi")
region = Rect2(192, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_ml8lr"]
atlas = ExtResource("2_ahfdi")
region = Rect2(256, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_flrsr"]
atlas = ExtResource("2_ahfdi")
region = Rect2(320, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_qr4cj"]
atlas = ExtResource("2_ahfdi")
region = Rect2(384, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_o5jey"]
atlas = ExtResource("2_ahfdi")
region = Rect2(448, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_1fjmf"]
atlas = ExtResource("2_ahfdi")
region = Rect2(512, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_3dxre"]
atlas = ExtResource("2_ahfdi")
region = Rect2(576, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_6mupu"]
atlas = ExtResource("2_ahfdi")
region = Rect2(0, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_cpqhb"]
atlas = ExtResource("2_ahfdi")
region = Rect2(64, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_vpjp1"]
atlas = ExtResource("2_ahfdi")
region = Rect2(128, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_pyvbc"]
atlas = ExtResource("2_ahfdi")
region = Rect2(192, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_t8xj5"]
atlas = ExtResource("2_ahfdi")
region = Rect2(256, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_uq6gh"]
atlas = ExtResource("2_ahfdi")
region = Rect2(320, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_q6wog"]
atlas = ExtResource("2_ahfdi")
region = Rect2(384, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_jcate"]
atlas = ExtResource("2_ahfdi")
region = Rect2(448, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_hl62h"]
atlas = ExtResource("2_ahfdi")
region = Rect2(512, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_60nri"]
atlas = ExtResource("2_ahfdi")
region = Rect2(576, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_60moo"]
atlas = ExtResource("2_ahfdi")
region = Rect2(0, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_pguj2"]
atlas = ExtResource("2_ahfdi")
region = Rect2(64, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_ybskn"]
atlas = ExtResource("2_ahfdi")
region = Rect2(128, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_el31c"]
atlas = ExtResource("2_ahfdi")
region = Rect2(192, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_7hu85"]
atlas = ExtResource("2_ahfdi")
region = Rect2(256, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_fuihh"]
atlas = ExtResource("2_ahfdi")
region = Rect2(320, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_mtyhi"]
atlas = ExtResource("2_ahfdi")
region = Rect2(384, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_sjkfo"]
atlas = ExtResource("2_ahfdi")
region = Rect2(448, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_htj0k"]
atlas = ExtResource("2_ahfdi")
region = Rect2(512, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_6hck2"]
atlas = ExtResource("2_ahfdi")
region = Rect2(576, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_0ksjp"]
atlas = ExtResource("3_kq38e")
region = Rect2(0, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_i4a22"]
atlas = ExtResource("3_kq38e")
region = Rect2(64, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_o8li6"]
atlas = ExtResource("3_kq38e")
region = Rect2(128, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_g0evx"]
atlas = ExtResource("3_kq38e")
region = Rect2(192, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_rdhnu"]
atlas = ExtResource("3_kq38e")
region = Rect2(256, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_84ews"]
atlas = ExtResource("3_kq38e")
region = Rect2(0, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_1xfj1"]
atlas = ExtResource("3_kq38e")
region = Rect2(64, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_trrl8"]
atlas = ExtResource("3_kq38e")
region = Rect2(128, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_lr5qx"]
atlas = ExtResource("3_kq38e")
region = Rect2(192, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_6ma40"]
atlas = ExtResource("3_kq38e")
region = Rect2(256, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_kwtft"]
atlas = ExtResource("3_kq38e")
region = Rect2(128, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_enu58"]
atlas = ExtResource("3_kq38e")
region = Rect2(0, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_7kdux"]
atlas = ExtResource("3_kq38e")
region = Rect2(64, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_bqnxo"]
atlas = ExtResource("3_kq38e")
region = Rect2(128, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_enu87"]
atlas = ExtResource("3_kq38e")
region = Rect2(192, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_2h6h5"]
atlas = ExtResource("3_kq38e")
region = Rect2(256, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_8fjfh"]
atlas = ExtResource("3_kq38e")
region = Rect2(0, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_vh8hy"]
atlas = ExtResource("3_kq38e")
region = Rect2(64, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_2rs53"]
atlas = ExtResource("3_kq38e")
region = Rect2(128, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_6qhe6"]
atlas = ExtResource("3_kq38e")
region = Rect2(192, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_5ch0i"]
atlas = ExtResource("3_kq38e")
region = Rect2(256, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_ugw68"]
atlas = ExtResource("4_ret1g")
region = Rect2(0, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_osbva"]
atlas = ExtResource("4_ret1g")
region = Rect2(64, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_e2rds"]
atlas = ExtResource("4_ret1g")
region = Rect2(128, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_8jpri"]
atlas = ExtResource("4_ret1g")
region = Rect2(192, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_p46gn"]
atlas = ExtResource("4_ret1g")
region = Rect2(256, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_tmsf0"]
atlas = ExtResource("4_ret1g")
region = Rect2(320, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_8jftq"]
atlas = ExtResource("4_ret1g")
region = Rect2(384, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_5xakg"]
atlas = ExtResource("4_ret1g")
region = Rect2(448, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_wjesj"]
atlas = ExtResource("4_ret1g")
region = Rect2(0, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_xicij"]
atlas = ExtResource("4_ret1g")
region = Rect2(64, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_wt4kn"]
atlas = ExtResource("4_ret1g")
region = Rect2(128, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_dfaft"]
atlas = ExtResource("4_ret1g")
region = Rect2(192, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_01vj4"]
atlas = ExtResource("4_ret1g")
region = Rect2(256, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_fevc3"]
atlas = ExtResource("4_ret1g")
region = Rect2(320, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_o8mkr"]
atlas = ExtResource("4_ret1g")
region = Rect2(384, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_khlie"]
atlas = ExtResource("4_ret1g")
region = Rect2(448, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_rt0q0"]
atlas = ExtResource("4_ret1g")
region = Rect2(0, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_b1gjj"]
atlas = ExtResource("4_ret1g")
region = Rect2(64, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_bt6g4"]
atlas = ExtResource("4_ret1g")
region = Rect2(128, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_jsjsv"]
atlas = ExtResource("4_ret1g")
region = Rect2(192, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_0l68k"]
atlas = ExtResource("4_ret1g")
region = Rect2(256, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_iimw2"]
atlas = ExtResource("4_ret1g")
region = Rect2(320, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_jlqmn"]
atlas = ExtResource("4_ret1g")
region = Rect2(384, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_gctn2"]
atlas = ExtResource("4_ret1g")
region = Rect2(448, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_x6bpc"]
atlas = ExtResource("4_ret1g")
region = Rect2(0, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_23if8"]
atlas = ExtResource("4_ret1g")
region = Rect2(64, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_1wf5b"]
atlas = ExtResource("4_ret1g")
region = Rect2(128, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_263iu"]
atlas = ExtResource("4_ret1g")
region = Rect2(192, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_gk0vp"]
atlas = ExtResource("4_ret1g")
region = Rect2(256, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_n30n6"]
atlas = ExtResource("4_ret1g")
region = Rect2(320, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_an4xw"]
atlas = ExtResource("4_ret1g")
region = Rect2(384, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_ohh0e"]
atlas = ExtResource("4_ret1g")
region = Rect2(448, 64, 64, 64)
[sub_resource type="SpriteFrames" id="SpriteFrames_05veu"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_u74be")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_hky14")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_1hmrm")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_icdnf")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_jpau6")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_pla0y")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_5ug5i")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_p0q1e")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_8gdmr")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_4gxlk")
}],
"loop": true,
"name": &"death_down",
"speed": 10.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_w642b")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_6tf61")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_354yo")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_wrhhh")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_5l6b7")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ml8lr")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_flrsr")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_qr4cj")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_o5jey")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_1fjmf")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_3dxre")
}],
"loop": true,
"name": &"death_left",
"speed": 10.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_6mupu")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_cpqhb")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_vpjp1")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_pyvbc")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_t8xj5")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_uq6gh")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_q6wog")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_jcate")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_hl62h")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_60nri")
}],
"loop": true,
"name": &"death_right",
"speed": 10.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_60moo")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_pguj2")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ybskn")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_el31c")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_7hu85")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_fuihh")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_mtyhi")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_sjkfo")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_htj0k")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_6hck2")
}],
"loop": true,
"name": &"death_up",
"speed": 10.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_0ksjp")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_i4a22")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_o8li6")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_g0evx")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_rdhnu")
}],
"loop": false,
"name": &"hurt_down",
"speed": 20.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_84ews")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_1xfj1")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_trrl8")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_lr5qx")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_6ma40")
}],
"loop": true,
"name": &"hurt_left",
"speed": 20.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_kwtft")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_enu58")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_7kdux")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_bqnxo")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_enu87")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_2h6h5")
}],
"loop": true,
"name": &"hurt_right",
"speed": 20.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_8fjfh")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_vh8hy")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_2rs53")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_6qhe6")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_5ch0i")
}],
"loop": true,
"name": &"hurt_up",
"speed": 20.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_ugw68")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_osbva")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_e2rds")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_8jpri")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_p46gn")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_tmsf0")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_8jftq")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_5xakg")
}],
"loop": true,
"name": &"walk_down",
"speed": 10.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_wjesj")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_xicij")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_wt4kn")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_dfaft")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_01vj4")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_fevc3")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_o8mkr")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_khlie")
}],
"loop": true,
"name": &"walk_left",
"speed": 10.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_rt0q0")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_b1gjj")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_bt6g4")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_jsjsv")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_0l68k")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_iimw2")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_jlqmn")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_gctn2")
}],
"loop": true,
"name": &"walk_right",
"speed": 10.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_x6bpc")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_23if8")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_1wf5b")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_263iu")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_gk0vp")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_n30n6")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_an4xw")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ohh0e")
}],
"loop": true,
"name": &"walk_up",
"speed": 10.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_1djsx"]
radius = 7.071068
[sub_resource type="CircleShape2D" id="CircleShape2D_odbmi"]
radius = 8.062258
[sub_resource type="Resource" id="Resource_chili_drop"]
script = ExtResource("dt_fslime")
drop = ExtResource("chili_fslime")
chance = 0.8
[node name="FireSlime" type="CharacterBody2D" unique_id=1827403107]
script = ExtResource("1_88j2t")
metadata/_custom_type_script = "uid://c0uv02nt5ocvg"
drop_table = Array[ExtResource("dt_fslime")]([SubResource("Resource_chili_drop")])
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=1151813585]
texture_filter = 1
sprite_frames = SubResource("SpriteFrames_05veu")
animation = &"hurt_up"
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=2114857632]
position = Vector2(0, 1)
shape = SubResource("CircleShape2D_1djsx")
[node name="Area2D" type="Area2D" parent="." unique_id=1305327123]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D" unique_id=762851125]
position = Vector2(0, 1)
shape = SubResource("CircleShape2D_odbmi")

View File

@ -39,7 +39,7 @@ animations = [{
}], }],
"loop": true, "loop": true,
"name": &"default", "name": &"default",
"speed": 35.0 "speed": 10.0
}] }]
[node name="Fireball" type="Area2D" unique_id=2100779306] [node name="Fireball" type="Area2D" unique_id=2100779306]

View File

@ -1,54 +1,11 @@
extends Node2D extends Node2D
@onready var _timer_label: Label = $CanvasLayer/TimerLabel
@onready var _spawn_control = $SpawnControl
var _debug_menu_script = preload("res://scripts/debug_menu.gd")
var _game_over_scene = preload("res://scenes/game_over.tscn")
# Called when the node enters the scene tree for the first time.
func _ready(): func _ready():
MusicManager.play(preload("res://assets/music&sfx/music/ashveil-355633.mp3")) MusicManager.play(preload("res://assets/music&sfx/music/ashveil-355633.mp3"))
add_child(_debug_menu_script.new())
$Witch.died.connect(_on_witch_died)
func _process(_delta: float) -> void:
var t = int(_spawn_control.elapsed_time)
_timer_label.text = "%02d:%02d" % [t / 60, t % 60]
func _on_witch_died(killer) -> void: # Called every frame. 'delta' is the elapsed time since the previous frame.
var witch = $Witch func _process(delta: float) -> void:
var player = $Player pass
$PauseMenu.process_mode = Node.PROCESS_MODE_DISABLED
get_tree().paused = true
var overlay_layer = CanvasLayer.new()
overlay_layer.layer = 10
overlay_layer.process_mode = Node.PROCESS_MODE_ALWAYS
add_child(overlay_layer)
var overlay = ColorRect.new()
overlay.color = Color(0, 0, 0, 0)
overlay.anchor_right = 1.0
overlay.anchor_bottom = 1.0
overlay.grow_horizontal = Control.GROW_DIRECTION_BOTH
overlay.grow_vertical = Control.GROW_DIRECTION_BOTH
overlay_layer.add_child(overlay)
var highlight_layer = CanvasLayer.new()
highlight_layer.layer = 11
highlight_layer.follow_viewport_enabled = true
highlight_layer.process_mode = Node.PROCESS_MODE_ALWAYS
add_child(highlight_layer)
witch.reparent(highlight_layer, true)
player.reparent(highlight_layer, true)
if is_instance_valid(killer):
killer.reparent(highlight_layer, true)
var tween = create_tween()
tween.set_pause_mode(Tween.TWEEN_PAUSE_PROCESS)
tween.tween_property(overlay, "color", Color(0, 0, 0, 0.85), 2.5)
await tween.finished
var game_over = _game_over_scene.instantiate()
add_child(game_over)

View File

@ -4,21 +4,36 @@
[ext_resource type="Script" uid="uid://cphrdy0xexx30" path="res://scenes/game.gd" id="1_vtaks"] [ext_resource type="Script" uid="uid://cphrdy0xexx30" path="res://scenes/game.gd" id="1_vtaks"]
[ext_resource type="PackedScene" uid="uid://7vohdw0xop0g" path="res://scenes/worldborder.tscn" id="2_dinhu"] [ext_resource type="PackedScene" uid="uid://7vohdw0xop0g" path="res://scenes/worldborder.tscn" id="2_dinhu"]
[ext_resource type="Script" uid="uid://coplu13jpw4xq" path="res://scripts/camera_2d.gd" id="3_kvpfn"] [ext_resource type="Script" uid="uid://coplu13jpw4xq" path="res://scripts/camera_2d.gd" id="3_kvpfn"]
[ext_resource type="Script" uid="uid://b4jrogrq54c8f" path="res://scripts/SpawnEntry.gd" id="6_ir15t"]
[ext_resource type="Script" uid="uid://dovkm6w8af08x" path="res://scripts/spawn_control.gd" id="6_p57ef"] [ext_resource type="Script" uid="uid://dovkm6w8af08x" path="res://scripts/spawn_control.gd" id="6_p57ef"]
[ext_resource type="PackedScene" uid="uid://ccotbw7gepsge" path="res://scenes/slime.tscn" id="7_ca42v"]
[ext_resource type="Texture2D" uid="uid://c4i3fnr6gpjp" path="res://assets/tileset/Tiled_files/details.png" id="7_gee14"] [ext_resource type="Texture2D" uid="uid://c4i3fnr6gpjp" path="res://assets/tileset/Tiled_files/details.png" id="7_gee14"]
[ext_resource type="PackedScene" uid="uid://b4v0ntaukg2je" path="res://scenes/witch.tscn" id="7_u5sy4"] [ext_resource type="PackedScene" uid="uid://b4v0ntaukg2je" path="res://scenes/witch.tscn" id="7_u5sy4"]
[ext_resource type="Texture2D" uid="uid://0xu8ohipv2mj" path="res://assets/tileset/Tiled_files/Objects.png" id="8_0tnpc"] [ext_resource type="Texture2D" uid="uid://0xu8ohipv2mj" path="res://assets/tileset/Tiled_files/Objects.png" id="8_0tnpc"]
[ext_resource type="PackedScene" uid="uid://cj83ht5o2l8c1" path="res://scenes/blue_slime.tscn" id="8_rysoc"]
[ext_resource type="PackedScene" uid="uid://cgu7w2jd42f3a" path="res://scenes/tile_map_layer(background).tscn" id="8_vtaks"] [ext_resource type="PackedScene" uid="uid://cgu7w2jd42f3a" path="res://scenes/tile_map_layer(background).tscn" id="8_vtaks"]
[ext_resource type="PackedScene" uid="uid://bgpsc6dvsn7ak" path="res://scenes/tile_map_layer(objects).tscn" id="9_kvpfn"] [ext_resource type="PackedScene" uid="uid://bgpsc6dvsn7ak" path="res://scenes/tile_map_layer(objects).tscn" id="9_kvpfn"]
[ext_resource type="PackedScene" uid="uid://co8t1fr3b3kub" path="res://scenes/tile_map_layer(overlay).tscn" id="10_dinhu"] [ext_resource type="PackedScene" uid="uid://co8t1fr3b3kub" path="res://scenes/tile_map_layer(overlay).tscn" id="10_dinhu"]
[ext_resource type="Script" uid="uid://ckv6prbe1o7s1" path="res://scripts/drop_manager.gd" id="10_vtaks"] [ext_resource type="Script" uid="uid://ckv6prbe1o7s1" path="res://scripts/drop_manager.gd" id="10_vtaks"]
[ext_resource type="Script" uid="uid://pmmc7tivuuo4" path="res://scripts/perk_effects.gd" id="16_ca42v"] [ext_resource type="Script" uid="uid://pmmc7tivuuo4" path="res://scripts/perk_effects.gd" id="16_ca42v"]
[ext_resource type="Script" uid="uid://dm1sntwjrv3vl" path="res://scripts/level_up_manager.gd" id="16_rysoc"] [ext_resource type="Script" uid="uid://dm1sntwjrv3vl" path="res://scripts/level_up_manager.gd" id="16_rysoc"]
[ext_resource type="Texture2D" uid="uid://dp8o40ssuh8ip" path="res://assets/Tiny RPG Mana Soul GUI v1.0/20250421barB-Sheet.png" id="16_ssvqc"]
[ext_resource type="Script" uid="uid://duauc778wc3hd" path="res://scripts/pause_menu.gd" id="18_264po"] [ext_resource type="Script" uid="uid://duauc778wc3hd" path="res://scripts/pause_menu.gd" id="18_264po"]
[ext_resource type="FontFile" uid="uid://8v71dcws4q6o" path="res://assets/fonts/slkscre.ttf" id="19_1kice"] [ext_resource type="FontFile" uid="uid://8v71dcws4q6o" path="res://assets/fonts/slkscre.ttf" id="19_1kice"]
[ext_resource type="Script" uid="uid://586y330mhx8" path="res://scripts/options_menu_ingame.gd" id="20_1kice"] [ext_resource type="Script" uid="uid://586y330mhx8" path="res://scripts/options_menu_ingame.gd" id="20_1kice"]
[sub_resource type="Resource" id="Resource_ssvqc"]
script = ExtResource("6_ir15t")
weight = 1.0
enemy = ExtResource("7_ca42v")
metadata/_custom_type_script = "uid://b4jrogrq54c8f"
[sub_resource type="Resource" id="Resource_264po"]
script = ExtResource("6_ir15t")
min_time = 10.0
weight = 0.5
enemy = ExtResource("8_rysoc")
metadata/_custom_type_script = "uid://b4jrogrq54c8f"
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_vtaks"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_vtaks"]
texture = ExtResource("7_gee14") texture = ExtResource("7_gee14")
1:1/0 = 0 1:1/0 = 0
@ -2368,6 +2383,11 @@ anchors_preset = 0
offset_right = 40.0 offset_right = 40.0
offset_bottom = 40.0 offset_bottom = 40.0
script = ExtResource("6_p57ef") script = ExtResource("6_p57ef")
spawn_entries = Array[ExtResource("6_ir15t")]([SubResource("Resource_ssvqc"), SubResource("Resource_264po")])
[node name="SpawnTimer" type="Timer" parent="." unique_id=1852920556]
wait_time = 0.2
autostart = true
[node name="Witch" parent="." unique_id=1188927311 instance=ExtResource("7_u5sy4")] [node name="Witch" parent="." unique_id=1188927311 instance=ExtResource("7_u5sy4")]
position = Vector2(304, 164) position = Vector2(304, 164)
@ -2389,88 +2409,24 @@ script = ExtResource("10_vtaks")
[node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1323249211] [node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1323249211]
[node name="ProgressBar" type="ProgressBar" parent="CanvasLayer" unique_id=825658619] [node name="ProgressBar" type="ProgressBar" parent="CanvasLayer" unique_id=825658619]
anchors_preset = 5 offset_right = 607.0
anchor_left = 0.5
anchor_right = 0.5
offset_left = -303.5
offset_right = 303.5
offset_bottom = 27.0 offset_bottom = 27.0
grow_horizontal = 2
max_value = 5.0 max_value = 5.0
step = 1.0 step = 1.0
show_percentage = false show_percentage = false
[node name="NinePatchRect" type="NinePatchRect" parent="CanvasLayer/ProgressBar" unique_id=1364517669]
texture_filter = 1
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -6.5
offset_top = -1.0
offset_right = 5.5
offset_bottom = 2.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("16_ssvqc")
draw_center = false
region_rect = Rect2(0, 0, 95, 15)
patch_margin_left = 7
patch_margin_top = 5
patch_margin_right = 8
patch_margin_bottom = 6
[node name="TimerLabel" type="Label" parent="CanvasLayer" unique_id=1111111111]
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -60.0
offset_top = 31.0
offset_right = 60.0
offset_bottom = 55.0
grow_horizontal = 2
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_shadow_color = Color(0, 0, 0, 1)
theme_override_constants/shadow_offset_x = 1
theme_override_constants/shadow_offset_y = 1
theme_override_fonts/font = ExtResource("19_1kice")
theme_override_font_sizes/font_size = 20
text = "00:00"
horizontal_alignment = 1
[node name="LevelUpManager" type="Control" parent="CanvasLayer" unique_id=292400493] [node name="LevelUpManager" type="Control" parent="CanvasLayer" unique_id=292400493]
process_mode = 3 process_mode = 3
layout_mode = 3 layout_mode = 3
anchors_preset = 5 anchors_preset = 0
anchor_left = 0.5 offset_right = 40.0
anchor_right = 0.5 offset_bottom = 40.0
grow_horizontal = 2
script = ExtResource("16_rysoc") script = ExtResource("16_rysoc")
[node name="ColorRect" type="ColorRect" parent="CanvasLayer/LevelUpManager" unique_id=1319513730]
layout_mode = 1
offset_left = -656.0
offset_top = -9.0
offset_right = 642.0
offset_bottom = 728.0
color = Color(0, 0, 0, 0.0627451)
[node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/LevelUpManager" unique_id=957625333] [node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/LevelUpManager" unique_id=957625333]
custom_minimum_size = Vector2(1000, 400) layout_mode = 0
layout_mode = 1 offset_right = 40.0
anchors_preset = 8 offset_bottom = 40.0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -20.0
offset_top = 350.0
offset_right = 20.0
offset_bottom = 390.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 50
alignment = 1
[node name="PerkEffects" type="Node2D" parent="." unique_id=2027136639] [node name="PerkEffects" type="Node2D" parent="." unique_id=2027136639]
script = ExtResource("16_ca42v") script = ExtResource("16_ca42v")
@ -2619,6 +2575,7 @@ theme_override_fonts/font = ExtResource("19_1kice")
theme_override_font_sizes/font_size = 32 theme_override_font_sizes/font_size = 32
text = "Back" text = "Back"
[connection signal="timeout" from="SpawnTimer" to="SpawnControl" method="_on_spawn_timer_timeout"]
[connection signal="pressed" from="PauseMenu/VBoxContainer/ContinueButton" to="PauseMenu" method="_on_continue_button_pressed"] [connection signal="pressed" from="PauseMenu/VBoxContainer/ContinueButton" to="PauseMenu" method="_on_continue_button_pressed"]
[connection signal="pressed" from="PauseMenu/VBoxContainer/OptionsButton" to="PauseMenu" method="_on_options_button_pressed"] [connection signal="pressed" from="PauseMenu/VBoxContainer/OptionsButton" to="PauseMenu" method="_on_options_button_pressed"]
[connection signal="pressed" from="PauseMenu/VBoxContainer/QuitButton" to="PauseMenu" method="_on_quit_button_pressed"] [connection signal="pressed" from="PauseMenu/VBoxContainer/QuitButton" to="PauseMenu" method="_on_quit_button_pressed"]

View File

@ -1,52 +0,0 @@
[gd_scene format=3]
[ext_resource type="Script" path="res://scripts/game_over.gd" id="1_go"]
[ext_resource type="FontFile" path="res://assets/fonts/slkscre.ttf" id="2_go"]
[node name="GameOver" type="CanvasLayer"]
layer = 12
process_mode = 3
script = ExtResource("1_go")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -200.0
offset_top = -120.0
offset_right = 200.0
offset_bottom = 120.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 40
alignment = 1
[node name="Label" type="Label" parent="VBoxContainer"]
layout_mode = 2
theme_override_fonts/font = ExtResource("2_go")
theme_override_font_sizes/font_size = 64
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_shadow_color = Color(0, 0, 0, 1)
theme_override_constants/shadow_offset_x = 2
theme_override_constants/shadow_offset_y = 2
text = "Game Over"
horizontal_alignment = 1
[node name="RetryButton" type="Button" parent="VBoxContainer"]
custom_minimum_size = Vector2(200, 45)
layout_mode = 2
theme_override_fonts/font = ExtResource("2_go")
theme_override_font_sizes/font_size = 32
text = "Retry"
[node name="MainMenuButton" type="Button" parent="VBoxContainer"]
custom_minimum_size = Vector2(200, 45)
layout_mode = 2
theme_override_fonts/font = ExtResource("2_go")
theme_override_font_sizes/font_size = 32
text = "Main Menu"
[connection signal="pressed" from="VBoxContainer/RetryButton" to="." method="_on_retry_pressed"]
[connection signal="pressed" from="VBoxContainer/MainMenuButton" to="." method="_on_main_menu_pressed"]

View File

@ -1,6 +0,0 @@
[gd_scene format=3 uid="uid://claser0spell1"]
[ext_resource type="Script" path="res://scripts/laser.gd" id="1_laser0"]
[node name="Laser" type="Node2D"]
script = ExtResource("1_laser0")

View File

@ -1,66 +0,0 @@
[gd_scene format=3 uid="uid://dg8vanuerts1t"]
[ext_resource type="Script" uid="uid://c176y1113cvdw" path="res://scripts/level_up_particles.gd" id="1_lvlup"]
[sub_resource type="Gradient" id="Gradient_purple"]
colors = PackedColorArray(0.75, 0.2, 1, 1, 0.4, 0.05, 0.8, 0.35)
[sub_resource type="GradientTexture1D" id="GradTex_purple"]
gradient = SubResource("Gradient_purple")
[sub_resource type="ParticleProcessMaterial" id="Mat_purple"]
emission_shape = 3
emission_box_extents = Vector3(3, 5, 0)
direction = Vector3(0, -1, 0)
spread = 8.0
initial_velocity_min = 25.0
initial_velocity_max = 40.0
gravity = Vector3(0, 12, 0)
scale_min = 1.5
scale_max = 3.0
color_ramp = SubResource("GradTex_purple")
[sub_resource type="Gradient" id="Gradient_yellow"]
colors = PackedColorArray(1, 0.9, 0.1, 1, 0.9, 0.5, 0, 0.35)
[sub_resource type="GradientTexture1D" id="GradTex_yellow"]
gradient = SubResource("Gradient_yellow")
[sub_resource type="ParticleProcessMaterial" id="Mat_yellow"]
emission_shape = 3
emission_box_extents = Vector3(3, 5, 0)
direction = Vector3(0, -1, 0)
spread = 8.0
initial_velocity_min = 25.0
initial_velocity_max = 40.0
gravity = Vector3(0, 12, 0)
scale_min = 1.5
scale_max = 3.0
color_ramp = SubResource("GradTex_yellow")
[node name="LevelUpParticles" type="Node2D" unique_id=260593337]
script = ExtResource("1_lvlup")
[node name="Burst1" type="GPUParticles2D" parent="." unique_id=1316703941]
emitting = false
amount = 14
lifetime = 0.65
one_shot = true
explosiveness = 0.9
process_material = SubResource("Mat_purple")
[node name="Burst2" type="GPUParticles2D" parent="." unique_id=684638951]
emitting = false
amount = 14
lifetime = 0.65
one_shot = true
explosiveness = 0.9
process_material = SubResource("Mat_yellow")
[node name="Burst3" type="GPUParticles2D" parent="." unique_id=373983562]
emitting = false
amount = 14
lifetime = 0.65
one_shot = true
explosiveness = 0.9
process_material = SubResource("Mat_purple")

View File

@ -45,8 +45,7 @@ alignment = 1
layout_mode = 2 layout_mode = 2
theme_override_fonts/font = ExtResource("4_3vvtq") theme_override_fonts/font = ExtResource("4_3vvtq")
theme_override_font_sizes/font_size = 64 theme_override_font_sizes/font_size = 64
text = "Hexwarden" text = "Working Title"
horizontal_alignment = 1
[node name="PlayButton" type="Button" parent="VBoxContainer" unique_id=1536378372] [node name="PlayButton" type="Button" parent="VBoxContainer" unique_id=1536378372]
custom_minimum_size = Vector2(200, 45) custom_minimum_size = Vector2(200, 45)
@ -62,12 +61,6 @@ theme_override_fonts/font = ExtResource("4_3vvtq")
theme_override_font_sizes/font_size = 32 theme_override_font_sizes/font_size = 32
text = "Options" text = "Options"
[node name="CreditsButton" type="Button" parent="VBoxContainer" unique_id=98861855]
layout_mode = 2
theme_override_fonts/font = ExtResource("4_3vvtq")
theme_override_font_sizes/font_size = 32
text = "Credits"
[node name="QuitButton" type="Button" parent="VBoxContainer" unique_id=1704957427] [node name="QuitButton" type="Button" parent="VBoxContainer" unique_id=1704957427]
custom_minimum_size = Vector2(200, 45) custom_minimum_size = Vector2(200, 45)
layout_mode = 2 layout_mode = 2
@ -77,5 +70,4 @@ text = "Quit"
[connection signal="pressed" from="VBoxContainer/PlayButton" to="." method="_on_play_button_pressed"] [connection signal="pressed" from="VBoxContainer/PlayButton" to="." method="_on_play_button_pressed"]
[connection signal="pressed" from="VBoxContainer/OptionsButton" to="." method="_on_options_button_pressed"] [connection signal="pressed" from="VBoxContainer/OptionsButton" to="." method="_on_options_button_pressed"]
[connection signal="pressed" from="VBoxContainer/CreditsButton" to="." method="_on_credits_button_pressed"]
[connection signal="pressed" from="VBoxContainer/QuitButton" to="." method="_on_quit_button_pressed"] [connection signal="pressed" from="VBoxContainer/QuitButton" to="." method="_on_quit_button_pressed"]

View File

@ -399,7 +399,7 @@ animations = [{
"duration": 1.0, "duration": 1.0,
"texture": SubResource("AtlasTexture_qk6i7") "texture": SubResource("AtlasTexture_qk6i7")
}], }],
"loop": false, "loop": true,
"name": &"attack_down", "name": &"attack_down",
"speed": 10.0 "speed": 10.0
}, { }, {
@ -422,7 +422,7 @@ animations = [{
"duration": 1.0, "duration": 1.0,
"texture": SubResource("AtlasTexture_jx8is") "texture": SubResource("AtlasTexture_jx8is")
}], }],
"loop": false, "loop": true,
"name": &"attack_left", "name": &"attack_left",
"speed": 10.0 "speed": 10.0
}, { }, {
@ -445,7 +445,7 @@ animations = [{
"duration": 1.0, "duration": 1.0,
"texture": SubResource("AtlasTexture_cbf1i") "texture": SubResource("AtlasTexture_cbf1i")
}], }],
"loop": false, "loop": true,
"name": &"attack_right", "name": &"attack_right",
"speed": 10.0 "speed": 10.0
}, { }, {
@ -468,7 +468,7 @@ animations = [{
"duration": 1.0, "duration": 1.0,
"texture": SubResource("AtlasTexture_qmsq4") "texture": SubResource("AtlasTexture_qmsq4")
}], }],
"loop": false, "loop": true,
"name": &"attack_up", "name": &"attack_up",
"speed": 10.0 "speed": 10.0
}, { }, {
@ -775,9 +775,6 @@ animations = [{
"speed": 10.0 "speed": 10.0
}] }]
[sub_resource type="CircleShape2D" id="CircleShape2D_tuyoq"]
radius = 30.0
[node name="Player" type="CharacterBody2D" unique_id=804585690] [node name="Player" type="CharacterBody2D" unique_id=804585690]
collision_mask = 129 collision_mask = 129
motion_mode = 1 motion_mode = 1
@ -789,16 +786,4 @@ shape = SubResource("CapsuleShape2D_u8vuu")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=1616479252] [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=1616479252]
texture_filter = 1 texture_filter = 1
sprite_frames = SubResource("SpriteFrames_giy8y") sprite_frames = SubResource("SpriteFrames_giy8y")
animation = &"run_down" animation = &"attack_up"
[node name="MeleeArea" type="Area2D" parent="." unique_id=24997730]
[node name="CollisionShape2D" type="CollisionShape2D" parent="MeleeArea" unique_id=2002113716]
shape = SubResource("CircleShape2D_tuyoq")
[node name="AttackSpeed" type="Timer" parent="." unique_id=2072925004]
wait_time = 0.506
autostart = true
[connection signal="body_entered" from="MeleeArea" to="." method="_on_melee_area_body_entered"]
[connection signal="timeout" from="AttackSpeed" to="." method="_on_attack_speed_timeout"]

View File

@ -7,12 +7,11 @@
[ext_resource type="Texture2D" uid="uid://cxddvfs2wfwcl" path="res://assets/Slime1/Without_shadow/Slime1_Idle_without_shadow.png" id="3_rrqju"] [ext_resource type="Texture2D" uid="uid://cxddvfs2wfwcl" path="res://assets/Slime1/Without_shadow/Slime1_Idle_without_shadow.png" id="3_rrqju"]
[ext_resource type="Texture2D" uid="uid://b2bmw70co6noy" path="res://assets/Slime1/Without_shadow/Slime1_Walk_without_shadow.png" id="4_wyhst"] [ext_resource type="Texture2D" uid="uid://b2bmw70co6noy" path="res://assets/Slime1/Without_shadow/Slime1_Walk_without_shadow.png" id="4_wyhst"]
[ext_resource type="Texture2D" uid="uid://bshpjl3w1n0y1" path="res://assets/Slime1/With_shadow/Slime1_Death_with_shadow.png" id="5_gstla"] [ext_resource type="Texture2D" uid="uid://bshpjl3w1n0y1" path="res://assets/Slime1/With_shadow/Slime1_Death_with_shadow.png" id="5_gstla"]
[ext_resource type="Texture2D" uid="uid://dwpyocmvqptui" path="res://assets/Slime1/With_shadow/Slime1_Hurt_with_shadow.png" id="7_v5wyi"]
[sub_resource type="Resource" id="Resource_gstla"] [sub_resource type="Resource" id="Resource_gstla"]
script = ExtResource("2_2npkn") script = ExtResource("2_2npkn")
drop = ExtResource("3_fd6lc") drop = ExtResource("3_fd6lc")
chance = 0.6 chance = 0.3
metadata/_custom_type_script = "uid://cjkaw7wqw4e30" metadata/_custom_type_script = "uid://cjkaw7wqw4e30"
[sub_resource type="AtlasTexture" id="AtlasTexture_v5wyi"] [sub_resource type="AtlasTexture" id="AtlasTexture_v5wyi"]
@ -239,86 +238,6 @@ region = Rect2(256, 0, 64, 64)
atlas = ExtResource("3_rrqju") atlas = ExtResource("3_rrqju")
region = Rect2(320, 0, 64, 64) region = Rect2(320, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_p5vph"]
atlas = ExtResource("7_v5wyi")
region = Rect2(0, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_4vxow"]
atlas = ExtResource("7_v5wyi")
region = Rect2(64, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_ymo5x"]
atlas = ExtResource("7_v5wyi")
region = Rect2(128, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_v338d"]
atlas = ExtResource("7_v5wyi")
region = Rect2(192, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_vn1yr"]
atlas = ExtResource("7_v5wyi")
region = Rect2(256, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_il7ig"]
atlas = ExtResource("7_v5wyi")
region = Rect2(0, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_5baf8"]
atlas = ExtResource("7_v5wyi")
region = Rect2(64, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_mmuop"]
atlas = ExtResource("7_v5wyi")
region = Rect2(128, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_7fqim"]
atlas = ExtResource("7_v5wyi")
region = Rect2(192, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_0ivba"]
atlas = ExtResource("7_v5wyi")
region = Rect2(256, 128, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_0f1a3"]
atlas = ExtResource("7_v5wyi")
region = Rect2(0, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_3qxe4"]
atlas = ExtResource("7_v5wyi")
region = Rect2(64, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_8tsuk"]
atlas = ExtResource("7_v5wyi")
region = Rect2(128, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_uxjht"]
atlas = ExtResource("7_v5wyi")
region = Rect2(192, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_72t0a"]
atlas = ExtResource("7_v5wyi")
region = Rect2(256, 192, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_e0x1h"]
atlas = ExtResource("7_v5wyi")
region = Rect2(0, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_eodiq"]
atlas = ExtResource("7_v5wyi")
region = Rect2(64, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_d4gio"]
atlas = ExtResource("7_v5wyi")
region = Rect2(128, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_q2l3s"]
atlas = ExtResource("7_v5wyi")
region = Rect2(192, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_3l0w5"]
atlas = ExtResource("7_v5wyi")
region = Rect2(256, 64, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_fur4c"] [sub_resource type="AtlasTexture" id="AtlasTexture_fur4c"]
atlas = ExtResource("4_wyhst") atlas = ExtResource("4_wyhst")
region = Rect2(0, 0, 64, 64) region = Rect2(0, 0, 64, 64)
@ -649,86 +568,6 @@ animations = [{
}, { }, {
"frames": [{ "frames": [{
"duration": 1.0, "duration": 1.0,
"texture": SubResource("AtlasTexture_p5vph")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_4vxow")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ymo5x")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_v338d")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_vn1yr")
}],
"loop": true,
"name": &"hurt_down",
"speed": 20.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_il7ig")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_5baf8")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_mmuop")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_7fqim")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_0ivba")
}],
"loop": true,
"name": &"hurt_left",
"speed": 20.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_0f1a3")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_3qxe4")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_8tsuk")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_uxjht")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_72t0a")
}],
"loop": true,
"name": &"hurt_right",
"speed": 20.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_e0x1h")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_eodiq")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_d4gio")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_q2l3s")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_3l0w5")
}],
"loop": true,
"name": &"hurt_up",
"speed": 20.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_fur4c") "texture": SubResource("AtlasTexture_fur4c")
}, { }, {
"duration": 1.0, "duration": 1.0,
@ -857,7 +696,7 @@ drop_table = Array[ExtResource("2_2npkn")]([SubResource("Resource_gstla")])
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=752118449] [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=752118449]
texture_filter = 1 texture_filter = 1
sprite_frames = SubResource("SpriteFrames_cbi0b") sprite_frames = SubResource("SpriteFrames_cbi0b")
animation = &"hurt_up" animation = &"walk_right"
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=769710804] [node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=769710804]
position = Vector2(0, 1) position = Vector2(0, 1)

View File

@ -1,35 +0,0 @@
[gd_scene format=3 uid="uid://s5m6whnjl3cv"]
[ext_resource type="Script" uid="uid://c6w6hhayguqoj" path="res://scripts/spellbook.gd" id="1_f8wgx"]
[ext_resource type="Texture2D" uid="uid://dlygc6jakfapg" path="res://assets/books_set_2/books_pentagram.png" id="2_g1ouv"]
[sub_resource type="AtlasTexture" id="AtlasTexture_md3wj"]
atlas = ExtResource("2_g1ouv")
region = Rect2(0, 0, 32, 32)
[sub_resource type="SpriteFrames" id="SpriteFrames_qgan7"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_md3wj")
}],
"loop": true,
"name": &"default",
"speed": 10.0
}]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_i8red"]
size = Vector2(22.5, 26.5)
[node name="Spellbook" type="Area2D" unique_id=1926827672]
script = ExtResource("1_f8wgx")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=1402601698]
texture_filter = 1
scale = Vector2(0.5, 0.5)
sprite_frames = SubResource("SpriteFrames_qgan7")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=609912720]
position = Vector2(-0.625, -0.625)
scale = Vector2(0.5, 0.5)
shape = SubResource("RectangleShape2D_i8red")

View File

@ -1,33 +0,0 @@
[gd_scene format=3 uid="uid://oegpflgwf17e"]
[ext_resource type="Script" uid="uid://dpj26ryawjq02" path="res://scripts/throwing_knive.gd" id="2_knive"]
[ext_resource type="Texture2D" uid="uid://pot4k8a6lxd0" path="res://assets/weapons/knvie.png" id="2_tyd64"]
[sub_resource type="AtlasTexture" id="AtlasTexture_frs86"]
atlas = ExtResource("2_tyd64")
region = Rect2(0, 0, 32, 32)
[sub_resource type="SpriteFrames" id="SpriteFrames_t4gbw"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_frs86")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_1ss1s"]
size = Vector2(15, 7)
[node name="ThrowingKnive" type="Area2D" unique_id=882877238]
script = ExtResource("2_knive")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=164559800]
texture_filter = 1
sprite_frames = SubResource("SpriteFrames_t4gbw")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=886320879]
position = Vector2(0.5, -0.5)
shape = SubResource("RectangleShape2D_1ss1s")

View File

@ -1,152 +0,0 @@
[gd_scene format=3 uid="uid://byqfrmwg0mi3y"]
[ext_resource type="Script" uid="uid://cikwl1ib4puyt" path="res://scripts/tornado.gd" id="1_shahy"]
[ext_resource type="Texture2D" uid="uid://c50u48fy7jtd" path="res://assets/Free Effect Bullet Impact Explosion 32x32 V1/Purple Effect Bullet Impact Explosion 32x32.png" id="2_3gxx4"]
[sub_resource type="AtlasTexture" id="AtlasTexture_vctls"]
atlas = ExtResource("2_3gxx4")
region = Rect2(192, 0, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_2nlrq"]
atlas = ExtResource("2_3gxx4")
region = Rect2(224, 0, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_yxxy5"]
atlas = ExtResource("2_3gxx4")
region = Rect2(256, 0, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_mdjqp"]
atlas = ExtResource("2_3gxx4")
region = Rect2(288, 0, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_shahy"]
atlas = ExtResource("2_3gxx4")
region = Rect2(608, 160, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_3gxx4"]
atlas = ExtResource("2_3gxx4")
region = Rect2(576, 160, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_2nqqh"]
atlas = ExtResource("2_3gxx4")
region = Rect2(544, 160, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_g5iue"]
atlas = ExtResource("2_3gxx4")
region = Rect2(512, 160, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_c1uv1"]
atlas = ExtResource("2_3gxx4")
region = Rect2(512, 416, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_ido5e"]
atlas = ExtResource("2_3gxx4")
region = Rect2(512, 448, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_e7sy5"]
atlas = ExtResource("2_3gxx4")
region = Rect2(512, 384, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_0xwcu"]
atlas = ExtResource("2_3gxx4")
region = Rect2(544, 352, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_jd32a"]
atlas = ExtResource("2_3gxx4")
region = Rect2(576, 352, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_p68fy"]
atlas = ExtResource("2_3gxx4")
region = Rect2(608, 352, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_1h6yc"]
atlas = ExtResource("2_3gxx4")
region = Rect2(576, 384, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_3p0aw"]
atlas = ExtResource("2_3gxx4")
region = Rect2(608, 384, 32, 32)
[sub_resource type="SpriteFrames" id="SpriteFrames_2nqqh"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_vctls")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_2nlrq")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_yxxy5")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_mdjqp")
}],
"loop": true,
"name": &"default",
"speed": 10.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_shahy")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_3gxx4")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_2nqqh")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_g5iue")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_c1uv1")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ido5e")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_e7sy5")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_0xwcu")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_jd32a")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_p68fy")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_1h6yc")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_3p0aw")
}],
"loop": false,
"name": &"explosion",
"speed": 10.0
}]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_g5iue"]
radius = 25.0
height = 50.0
[sub_resource type="CircleShape2D" id="CircleShape2D_07hm3"]
radius = 54.0
[node name="Tornado" type="Area2D" unique_id=892015509]
script = ExtResource("1_shahy")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=1613801541]
texture_filter = 1
scale = Vector2(1.5, 1.5)
sprite_frames = SubResource("SpriteFrames_2nqqh")
frame_progress = 0.68617874
[node name="ExplosionCollision" type="CollisionShape2D" parent="." unique_id=1019771818]
shape = SubResource("CapsuleShape2D_g5iue")
disabled = true
[node name="TornadoArea" type="CollisionShape2D" parent="." unique_id=1356386666]
shape = SubResource("CircleShape2D_07hm3")

View File

@ -4,22 +4,15 @@ class_name DropsBase
var witch var witch
var player var player
var is_spawning = true var is_spawning = true
var in_orbit: bool = false
signal collected signal collected
# Called when the node enters the scene tree for the first time.
var _collect_sfx = preload("res://assets/music&sfx/sfx/lesiakower-coin-collect-retro-8-bit-sound-effect-145251.mp3")
var _sfx_player: AudioStreamPlayer
func _ready() -> void: func _ready() -> void:
body_entered.connect(_on_body_entered) body_entered.connect(_on_body_entered)
witch = get_node("/root/Game/Witch") witch = get_node("/root/Game/Witch")
collected.connect(witch._on_collect) collected.connect(witch._on_collect)
player = get_node("/root/Game/Player") player = get_node("/root/Game/Player")
_sfx_player = AudioStreamPlayer.new()
_sfx_player.stream = _collect_sfx
_sfx_player.volume_db = -18
add_child(_sfx_player)
_animate_spawn() _animate_spawn()
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.
@ -45,18 +38,11 @@ func _animate_spawn() -> void:
is_spawning = false is_spawning = false
func _on_body_entered(body: Node2D) -> void: func _on_body_entered(body: Node2D) -> void:
if body == player and not is_spawning and not in_orbit: if body == player and not is_spawning:
var cauldron = witch.get_node("CauldronBar")
if cauldron.is_brewing and player.fruit_queue.size() < 3:
_sfx_player.pitch_scale = randf_range(0.85, 1.15)
_sfx_player.play()
player.add_to_queue(self)
else:
collect() collect()
pass
func collect(): func collect():
_sfx_player.pitch_scale = randf_range(0.85, 1.15)
_sfx_player.play()
is_spawning = true is_spawning = true
var position_drop = create_tween() var position_drop = create_tween()
var target = witch.global_position var target = witch.global_position
@ -68,5 +54,3 @@ func collect():
var scale_tween = create_tween() var scale_tween = create_tween()
collected.emit(self) collected.emit(self)
scale_tween.tween_property(self, "scale", Vector2.ZERO,0.2) scale_tween.tween_property(self, "scale", Vector2.ZERO,0.2)
await scale_tween.finished
queue_free()

View File

@ -3,7 +3,4 @@ class_name Perk
@export var name: String @export var name: String
@export var description: String @export var description: String
@export var stats: String = ""
@export var spell: String = SpellLibrary.NONE
@export var icon: Texture2D = null
var effect: Callable var effect: Callable

View File

@ -2,7 +2,6 @@ extends Area2D
class_name ProjectileBase class_name ProjectileBase
@export var size: float @export var size: float
@export var damage: int = 5
var speed = 200 var speed = 200
@export var element: String @export var element: String
var direction: Vector2 var direction: Vector2
@ -21,7 +20,7 @@ func launch(target: Vector2):
func _on_body_entered(body: Node2D) -> void: func _on_body_entered(body: Node2D) -> void:
if body.is_in_group("enemies"): if body.is_in_group("enemies"):
body.take_damage(damage) body.hit()
queue_free() queue_free()
func _remove(): func _remove():

View File

@ -1,7 +0,0 @@
extends Resource
class_name SpawnStage
@export var time_start: float = 0.0
@export var time_end: float = -1.0
@export var elite_enemy: PackedScene = null
@export var entries: Array[StageEntry]

View File

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

View File

@ -1,34 +0,0 @@
extends Node
const APPLE = 0
const GRAPE = 1
const CHILI = 2
const NONE = "NONE"
const SHURIKEN = "SHURIKEN"
const FIREBALL = "FIREBALL"
const FIRE_SWIRL = "FIRE_SWIRL"
const TORNADO = "TORNADO"
const LASER = "LASER"
var recipes: Dictionary = {
FIREBALL: [APPLE],
TORNADO: [GRAPE],
LASER: [CHILI],
SHURIKEN: [APPLE, GRAPE],
FIRE_SWIRL: [APPLE, CHILI],
}
func identify(cauldron_slots: Array) -> String:
var types: Array = []
if cauldron_slots.any(func(x): return x == 2): types.append(APPLE)
if cauldron_slots.any(func(x): return x == 4): types.append(GRAPE)
if cauldron_slots.any(func(x): return x == 3): types.append(CHILI)
for spell_id in recipes:
if recipes[spell_id] == types:
return spell_id
return NONE
func get_recipe(spell: String) -> Array:
return recipes.get(spell, [])

View File

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

View File

@ -1,8 +0,0 @@
extends Resource
class_name StageEntry
@export var enemy: PackedScene
@export var count_at_start: int = 0
@export var count_at_end: int = 20
@export var min_interval: float = 0.3
@export var max_spawns: int = -1 # -1 = unlimited

View File

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

View File

@ -1,11 +0,0 @@
extends Area2D
@export var beam_type := "middle"
@onready var sprite: AnimatedSprite2D = $AnimatedSprite2D
@onready var shape: CollisionShape2D = $CollisionShape2D
func _ready() -> void:
if sprite.sprite_frames.has_animation(beam_type):
sprite.play(beam_type)
shape.disabled = beam_type != "middle"

View File

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

View File

@ -1,19 +1,17 @@
extends EnemyBase extends EnemyBase
func _ready() -> void: func _ready() -> void:
super() super()
speed = 15.0 speed = 0.1
max_hp = 25 hits_remaining = 2
hp = max_hp $Area2D.body_entered.connect(_on_area_2d_body_entered)
damage = 5
# $Area2D.body_entered.connect(_on_area_2d_body_entered)
func _process(delta: float) -> void: func _process(delta: float) -> void:
super._process(delta)
if is_dying or is_hurt: if is_dying or is_hurt:
return return
_chase_witch() _chase_witch()
#func _on_area_2d_body_entered(body: Node2D) -> void: func _on_area_2d_body_entered(body: Node2D) -> void:
#if body == player: if body == player:
#take_damage(player.damage) hit()

View File

@ -13,12 +13,9 @@ var progres_index = 0
var is_brewing var is_brewing
var brew_explosion = true var brew_explosion = true
@onready var witch = get_parent() @onready var witch = get_parent()
@onready var player = get_node("/root/Game/Player") var explosion_scene = preload("res://scenes/explosion.tscn")# Called when the node enters the scene tree for the first time.
var explosion_scene = preload("res://scenes/explosion.tscn")
var _ignite_sfx = preload("res://assets/music&sfx/sfx/data_pion-sfx9-fwoosh-324525.mp3")
var _ignite_player: AudioStreamPlayer
var _slot_shake_tweens: Array = []
# Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
print(witch) print(witch)
base.atlas = preload("res://assets/Cauldron's Brew/Equiptment.png") base.atlas = preload("res://assets/Cauldron's Brew/Equiptment.png")
@ -34,10 +31,7 @@ func _ready() -> void:
slots = [$Empty1, $Empty2, $Empty3] slots = [$Empty1, $Empty2, $Empty3]
colors = [base, yellow, red, orange, purple] colors = [base, yellow, red, orange, purple]
enrich_burning_colors() enrich_burning_colors()
_ignite_player = AudioStreamPlayer.new() pass # Replace with function body.
_ignite_player.stream = _ignite_sfx
_ignite_player.volume_db = -15
add_child(_ignite_player)
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.
@ -50,21 +44,13 @@ func change_texture(slot_index: int, color_index: int):
pass pass
func reset_texture(): func reset_texture():
for t in _slot_shake_tweens: for slot in slots:
if t: slot.texture = colors[0]
t.kill()
_slot_shake_tweens.clear()
for i in slots.size():
slots[i].texture = colors[0]
slots[i].rotation = 0.0
slot_states = [0,0,0] slot_states = [0,0,0]
func ignite_cauldrons(): func ignite_cauldrons():
for i in slots.size(): for i in slots.size():
slots[i].texture = burning_colors[slot_states[i]] slots[i].texture = burning_colors[slot_states[i]]
_ignite_player.pitch_scale = randf_range(0.8, 1.2)
_ignite_player.play()
_slot_shake_tweens.append(_make_slot_shake(slots[i]))
await get_tree().create_timer(0.4).timeout await get_tree().create_timer(0.4).timeout
if brew_explosion: if brew_explosion:
var boom = explosion_scene.instantiate() var boom = explosion_scene.instantiate()
@ -88,42 +74,27 @@ func progres_bar(fruit):
change_texture(progres_index,2) change_texture(progres_index,2)
if fruit is Grape: if fruit is Grape:
change_texture(progres_index, 4) change_texture(progres_index, 4)
if fruit is Chili:
change_texture(progres_index, 3)
_pop_slot(progres_index)
progres_index += 1 progres_index += 1
if progres_index == 3: if progres_index == 3:
brew(slot_states) brew(slot_states)
progres_index = 0 progres_index = 0
pass pass
func _pop_slot(slot_index: int) -> void:
var slot = slots[slot_index]
slot.pivot_offset = slot.size / 2
slot.scale = Vector2(1.35, 1.35)
var t = create_tween()
t.tween_property(slot, "scale", Vector2(1.0, 1.0), 0.18).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT)
func _make_slot_shake(slot: TextureRect) -> Tween:
slot.pivot_offset = slot.size / 2
var t = create_tween().set_loops()
t.tween_property(slot, "rotation", 0.015, 0.05)
t.tween_property(slot, "rotation", -0.015, 0.05)
t.tween_property(slot, "rotation", 0.0, 0.05)
return t
func brew(fruits): func brew(fruits):
is_brewing = true is_brewing = true
var unique = get_unique_fruits()
await ignite_cauldrons() await ignite_cauldrons()
match SpellLibrary.identify(fruits): if fruits == [2, 2, 4]:
SpellLibrary.SHURIKEN: witch.shoot_shuriken() witch.shoot_fire_swirl()
SpellLibrary.FIREBALL: witch.shoot_fireballs() elif unique.has(2) and unique.size() == 1:
SpellLibrary.FIRE_SWIRL: witch.shoot_fire_swirl() witch.shoot_fireballs()
SpellLibrary.TORNADO: witch.shoot_tornado() elif unique.has(4) and unique.size() == 1:
SpellLibrary.LASER: witch.shoot_laser() witch.shoot_shuriken()
elif unique.has(2) and unique.has(4) and unique.size() == 2:
witch.shoot_fireballs()
witch.shoot_shuriken()
reset_texture() reset_texture()
is_brewing = false is_brewing = false
player.flush_queue()
func get_unique_fruits() -> Array: func get_unique_fruits() -> Array:
var unique = [] var unique = []

View File

@ -1,2 +0,0 @@
extends DropsBase
class_name Chili

View File

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

View File

@ -1,15 +0,0 @@
extends CanvasLayer
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func _on_back_button_pressed() -> void:
get_tree().change_scene_to_file("res://scenes/mainmenu.tscn")

View File

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

View File

@ -1,135 +0,0 @@
extends CanvasLayer
@onready var _spawn_control = get_node("/root/Game/SpawnControl")
@onready var _witch = get_node("/root/Game/Witch")
@onready var _drop_manager = get_node("/root/Game/DropManager")
@onready var _player = get_node("/root/Game/Player")
var _fruit_scenes: Dictionary = {
"Apple": preload("res://scenes/apple.tscn"),
"Grape": preload("res://scenes/grape.tscn"),
"Chili": preload("res://scenes/chili.tscn"),
}
var _spell_dispatch: Dictionary
var _lvl_disable_btn: Button
func _ready() -> void:
layer = 10
_spell_dispatch = {
SpellLibrary.FIREBALL: _witch.shoot_fireballs,
SpellLibrary.SHURIKEN: _witch.shoot_shuriken,
SpellLibrary.FIRE_SWIRL: _witch.shoot_fire_swirl,
SpellLibrary.TORNADO: _witch.shoot_tornado,
SpellLibrary.LASER: _witch.shoot_laser,
}
_build_ui()
hide()
func _exit_tree() -> void:
Engine.time_scale = 1.0
func _unhandled_input(event: InputEvent) -> void:
if event is InputEventKey and event.pressed and not event.echo:
if event.keycode == KEY_D and event.ctrl_pressed:
visible = not visible
get_viewport().set_input_as_handled()
func _build_ui() -> void:
var panel := PanelContainer.new()
var style := StyleBoxFlat.new()
style.bg_color = Color(0.0, 0.0, 0.0, 0.75)
panel.add_theme_stylebox_override("panel", style)
panel.anchor_left = 1.0
panel.anchor_right = 1.0
panel.anchor_top = 0.0
panel.anchor_bottom = 1.0
panel.offset_left = -220
panel.offset_right = 0
add_child(panel)
var scroll := ScrollContainer.new()
scroll.horizontal_scroll_mode = ScrollContainer.SCROLL_MODE_DISABLED
panel.add_child(scroll)
var vbox := VBoxContainer.new()
vbox.custom_minimum_size = Vector2(210, 0)
vbox.add_theme_constant_override("separation", 4)
scroll.add_child(vbox)
_add_section(vbox, "ENEMIES")
_add_button(vbox, "Kill All", _kill_all_enemies)
_add_section(vbox, "TIME SCALE")
var hbox_scale := HBoxContainer.new()
vbox.add_child(hbox_scale)
for s in [1, 2, 5, 10]:
var btn := Button.new()
btn.text = "%dx" % s
btn.size_flags_horizontal = Control.SIZE_EXPAND_FILL
btn.pressed.connect(_set_time_scale.bind(float(s)))
hbox_scale.add_child(btn)
_add_section(vbox, "SKIP TIME")
var hbox_time := HBoxContainer.new()
vbox.add_child(hbox_time)
for secs in [30, 60]:
var btn := Button.new()
btn.text = "+%ds" % secs
btn.size_flags_horizontal = Control.SIZE_EXPAND_FILL
btn.pressed.connect(_skip_time.bind(float(secs)))
hbox_time.add_child(btn)
_add_section(vbox, "FRUITS")
for fruit_name in _fruit_scenes.keys():
_add_button(vbox, fruit_name, _spawn_fruit.bind(fruit_name))
_add_section(vbox, "SPELLS")
for spell_id in SpellLibrary.recipes.keys():
if _spell_dispatch.has(spell_id):
_add_button(vbox, spell_id.capitalize(), _spell_dispatch[spell_id])
_add_section(vbox, "LEVEL")
_add_button(vbox, "Level Up", _force_level_up)
_lvl_disable_btn = Button.new()
_lvl_disable_btn.text = "Disable Level Up: OFF"
_lvl_disable_btn.size_flags_horizontal = Control.SIZE_EXPAND_FILL
_lvl_disable_btn.pressed.connect(_toggle_level_up_disabled)
vbox.add_child(_lvl_disable_btn)
func _add_section(parent: VBoxContainer, title: String) -> void:
var label := Label.new()
label.text = title
label.add_theme_color_override("font_color", Color.YELLOW)
label.add_theme_font_size_override("font_size", 11)
parent.add_child(label)
func _add_button(parent: VBoxContainer, label: String, callback: Callable) -> void:
var btn := Button.new()
btn.text = label
btn.size_flags_horizontal = Control.SIZE_EXPAND_FILL
btn.pressed.connect(callback)
parent.add_child(btn)
func _spawn_fruit(fruit_name: String) -> void:
var fruit = _fruit_scenes[fruit_name].instantiate()
fruit.global_position = _player.global_position + Vector2(randf_range(-30, 30), randf_range(-30, 30))
get_node("/root/Game").add_child(fruit)
func _kill_all_enemies() -> void:
for enemy in get_tree().get_nodes_in_group("enemies"):
if is_instance_valid(enemy):
enemy.die()
func _set_time_scale(scale: float) -> void:
Engine.time_scale = scale
func _skip_time(secs: float) -> void:
_spawn_control.elapsed_time += secs
func _force_level_up() -> void:
_drop_manager.force_level_up()
func _toggle_level_up_disabled() -> void:
_drop_manager.level_up_disabled = not _drop_manager.level_up_disabled
_lvl_disable_btn.text = "Disable Level Up: " + ("ON" if _drop_manager.level_up_disabled else "OFF")

View File

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

View File

@ -3,13 +3,9 @@ extends Node2D
@onready var player = get_node("/root/Game/Player") @onready var player = get_node("/root/Game/Player")
@onready var bar = get_node("/root/Game/CanvasLayer/ProgressBar") @onready var bar = get_node("/root/Game/CanvasLayer/ProgressBar")
signal leveled_up signal leveled_up
@export var fruit_drop_threshold: int = 7
@export var fruit_drop_ceiling: int = 15
var level_up_disabled: bool = false # FOR DEBUG MENU
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
assert(fruit_drop_threshold <= fruit_drop_ceiling)
bar.max_value = player.max_xp bar.max_value = player.max_xp
pass # Replace with function body. pass # Replace with function body.
@ -23,7 +19,7 @@ func on_enemy_died(enemy):
var enemy_xp = enemy.xp var enemy_xp = enemy.xp
player.current_xp += enemy.xp player.current_xp += enemy.xp
bar.value = player.current_xp bar.value = player.current_xp
if player.current_xp >= player.max_xp and not level_up_disabled: if player.current_xp >= player.max_xp:
leveled_up.emit() leveled_up.emit()
player.max_xp = player.max_xp * 1.3 player.max_xp = player.max_xp * 1.3
bar.max_value = player.max_xp bar.max_value = player.max_xp
@ -36,24 +32,8 @@ func on_enemy_died(enemy):
func drop_item(enemy): func drop_item(enemy):
if not is_instance_valid(enemy): if not is_instance_valid(enemy):
return return
var fruit_count = get_children().filter(func(c): return c is DropsBase).size()
for entry in enemy.drop_table: for entry in enemy.drop_table:
var effective_chance = entry.chance if randf() < entry.chance:
if fruit_count >= fruit_drop_ceiling:
continue
elif fruit_count > fruit_drop_threshold:
var chance_scale = 1.0 - float(fruit_count - fruit_drop_threshold) / float(fruit_drop_ceiling - fruit_drop_threshold)
effective_chance *= chance_scale
if randf() < effective_chance:
var drop = entry.drop.instantiate() var drop = entry.drop.instantiate()
drop.global_position = enemy.global_position drop.global_position = enemy.global_position
add_child(drop) add_child(drop)
# FOR DEBUG MENU
func force_level_up() -> void:
leveled_up.emit()
player.max_xp = player.max_xp * 1.3
bar.max_value = player.max_xp
player.current_xp = 0
bar.value = 0
player.level += 1

View File

@ -4,14 +4,9 @@ extends CharacterBody2D
@onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D @onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D
@export var drop_table: Array[DropTable] @export var drop_table: Array[DropTable]
@export var damage: int = 2
@export var max_hp: int = 10
var is_dying = false var is_dying = false
var is_hurt = false var is_hurt = false
var hp: int var hits_remaining = 1
var _touching_witch: bool = false
var speed var speed
var witch var witch
var player var player
@ -26,17 +21,6 @@ func _ready() -> void:
witch = get_node("/root/Game/Witch") witch = get_node("/root/Game/Witch")
player = get_node("/root/Game/Player") player = get_node("/root/Game/Player")
animated_sprite_2d.sprite_frames = animated_sprite_2d.sprite_frames.duplicate() animated_sprite_2d.sprite_frames = animated_sprite_2d.sprite_frames.duplicate()
hp = max_hp
$Area2D.body_entered.connect(_on_base_body_entered)
$Area2D.body_exited.connect(_on_base_body_exited)
func _on_base_body_entered(body: Node2D) -> void:
if body == witch:
_touching_witch = true
func _on_base_body_exited(body: Node2D) -> void:
if body == witch:
_touching_witch = false
func die(): func die():
is_dying = true is_dying = true
@ -48,55 +32,46 @@ func die():
death_anim = "death_up" if last_direction.y < 0 else "death_down" death_anim = "death_up" if last_direction.y < 0 else "death_down"
animated_sprite_2d.sprite_frames.set_animation_loop(death_anim, false) animated_sprite_2d.sprite_frames.set_animation_loop(death_anim, false)
animated_sprite_2d.play(death_anim) animated_sprite_2d.play(death_anim)
_play_hit_sound() var player = AudioStreamPlayer.new()
add_child(player)
player.stream = death_sound
player.bus = "SFX"
player.play()
died.emit(self) died.emit(self)
await animated_sprite_2d.animation_finished await animated_sprite_2d.animation_finished
queue_free() queue_free()
func _play_hit_sound() -> void: func hit() -> void:
var ap = AudioStreamPlayer.new()
add_child(ap)
ap.stream = death_sound
ap.bus = "SFX"
ap.pitch_scale = randf_range(0.7, 1.3)
ap.play()
func take_damage(amount: int) -> void:
if is_dying or is_hurt: if is_dying or is_hurt:
return return
hp -= amount hits_remaining -= 1
if hp <= 0: if hits_remaining <= 0:
die() die()
else: else:
_play_hurt() _play_hurt()
func hit() -> void:
take_damage(1)
func _play_hurt() -> void: func _play_hurt() -> void:
is_hurt = true
var hurt_anim: String var hurt_anim: String
if abs(last_direction.x) >= abs(last_direction.y): if abs(last_direction.x) >= abs(last_direction.y):
hurt_anim = "hurt_left" if last_direction.x < 0 else "hurt_right" hurt_anim = "hurt_left" if last_direction.x < 0 else "hurt_right"
else: else:
hurt_anim = "hurt_up" if last_direction.y < 0 else "hurt_down" hurt_anim = "hurt_up" if last_direction.y < 0 else "hurt_down"
if not animated_sprite_2d.sprite_frames.has_animation(hurt_anim):
return
is_hurt = true
_play_hit_sound()
animated_sprite_2d.sprite_frames.set_animation_loop(hurt_anim, false) animated_sprite_2d.sprite_frames.set_animation_loop(hurt_anim, false)
animated_sprite_2d.play(hurt_anim) animated_sprite_2d.play(hurt_anim)
await get_tree().create_timer(0.25, true).timeout await animated_sprite_2d.animation_finished
is_hurt = false is_hurt = false
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void: func _process(delta: float) -> void:
if _touching_witch and not is_dying: pass
witch.take_damage(damage, self)
func _chase_witch() -> void: func _chase_witch() -> void:
var direction = Vector2(witch.global_position - global_position).normalized() var direction = Vector2(witch.global_position - global_position)
if direction != Vector2.ZERO: if direction != Vector2.ZERO:
last_direction = direction last_direction = direction
velocity = direction * speed velocity = direction * speed
velocity = direction * speed
if direction == Vector2.ZERO: if direction == Vector2.ZERO:
animated_sprite_2d.play("idle") animated_sprite_2d.play("idle")

View File

@ -1,12 +1,11 @@
extends Area2D extends Area2D
@export var damage: int = 15
# Called when the node enters the scene tree for the first time.
func _ready(): func _ready():
await get_tree().physics_frame
for body in get_overlapping_bodies(): for body in get_overlapping_bodies():
if body.is_in_group("enemies"): if body.is_in_group("enemies"):
body.take_damage(damage) body.hit()
await $AnimatedSprite2D.animation_finished await $AnimatedSprite2D.animation_finished
queue_free() queue_free()

View File

@ -1,20 +0,0 @@
extends EnemyBase
func _ready() -> void:
super()
speed = 15.0
max_hp = 50
hp = max_hp
damage = 10
$Area2D.body_entered.connect(_on_area_2d_body_entered)
func _process(delta: float) -> void:
super._process(delta)
if is_dying or is_hurt:
return
_chase_witch()
func _on_area_2d_body_entered(body: Node2D) -> void:
#if body == player:
# take_damage(player.damage)
pass

View File

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

View File

@ -15,10 +15,9 @@ const DIRS := [
func _on_body_entered(body: Node2D) -> void: func _on_body_entered(body: Node2D) -> void:
if body.is_in_group("enemies"): if body.is_in_group("enemies"):
body.take_damage(damage) body.hit()
func _ready() -> void: func _ready() -> void:
damage = 6
if _is_spread_child: if _is_spread_child:
super() super()
return return

View File

@ -2,19 +2,14 @@ extends ProjectileBase
var fireball_aoe = false var fireball_aoe = false
var explosion_scene = preload("res://scenes/explosion.tscn") var explosion_scene = preload("res://scenes/explosion.tscn")
@onready var perk_effects = get_node("/root/Game/PerkEffects") @onready var perk_effects = get_node("/root/Game/PerkEffects")# Called when the node enters the scene tree for the first time.
func _ready() -> void:
super()
damage = 8
func _on_body_entered(body: Node2D) -> void: func _on_body_entered(body: Node2D) -> void:
fireball_aoe = perk_effects.fireball_aoe_enabled fireball_aoe = perk_effects.fireball_aoe_enabled
if body.is_in_group("enemies"): if body.is_in_group("enemies"):
body.take_damage(damage) body.hit()
if fireball_aoe: if fireball_aoe:
var boom = explosion_scene.instantiate() var boom = explosion_scene.instantiate()
boom.global_position = global_position boom.global_position = global_position
get_parent().call_deferred("add_child", boom) get_parent().add_child(boom)
queue_free() queue_free()

View File

@ -1,9 +0,0 @@
extends CanvasLayer
func _on_retry_pressed() -> void:
get_tree().paused = false
get_tree().reload_current_scene()
func _on_main_menu_pressed() -> void:
get_tree().paused = false
get_tree().change_scene_to_file("res://scenes/mainmenu.tscn")

View File

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

Some files were not shown because too many files have changed in this diff Show More