Compare commits
	
		
			45 Commits 
		
	
	
		
			4de81c9a63
			...
			24b5dc09d0
		
	
	| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
---
 | 
			
		||||
name: Bug report
 | 
			
		||||
about: Create a report to help us improve
 | 
			
		||||
title: ''
 | 
			
		||||
labels: ''
 | 
			
		||||
assignees: ''
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
**Describe the bug**
 | 
			
		||||
A clear and concise description of what the bug is.
 | 
			
		||||
 | 
			
		||||
**To Reproduce**
 | 
			
		||||
Steps to reproduce the behavior:
 | 
			
		||||
1. Go to '...'
 | 
			
		||||
2. Click on '....'
 | 
			
		||||
3. Scroll down to '....'
 | 
			
		||||
4. See error
 | 
			
		||||
 | 
			
		||||
**Expected behavior**
 | 
			
		||||
A clear and concise description of what you expected to happen.
 | 
			
		||||
 | 
			
		||||
**Screenshots**
 | 
			
		||||
If applicable, add screenshots to help explain your problem.
 | 
			
		||||
 | 
			
		||||
**Desktop (please complete the following information):**
 | 
			
		||||
 - OS: [e.g. iOS]
 | 
			
		||||
 - Browser [e.g. chrome, safari]
 | 
			
		||||
 - Version [e.g. 22]
 | 
			
		||||
 | 
			
		||||
**Smartphone (please complete the following information):**
 | 
			
		||||
 - Device: [e.g. iPhone6]
 | 
			
		||||
 - OS: [e.g. iOS8.1]
 | 
			
		||||
 - Browser [e.g. stock browser, safari]
 | 
			
		||||
 - Version [e.g. 22]
 | 
			
		||||
 | 
			
		||||
**Additional context**
 | 
			
		||||
Add any other context about the problem here.
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
---
 | 
			
		||||
name: Feature request
 | 
			
		||||
about: Suggest an idea for this project
 | 
			
		||||
title: ''
 | 
			
		||||
labels: ''
 | 
			
		||||
assignees: ''
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
**Is your feature request related to a problem? Please describe.**
 | 
			
		||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
 | 
			
		||||
 | 
			
		||||
**Describe the solution you'd like**
 | 
			
		||||
A clear and concise description of what you want to happen.
 | 
			
		||||
 | 
			
		||||
**Describe alternatives you've considered**
 | 
			
		||||
A clear and concise description of any alternative solutions or features you've considered.
 | 
			
		||||
 | 
			
		||||
**Additional context**
 | 
			
		||||
Add any other context or screenshots about the feature request here.
 | 
			
		||||
| 
						 | 
				
			
			@ -16,4 +16,10 @@ I can write english pretty good but since It is not my mothertounge I will make
 | 
			
		|||
 | 
			
		||||
The dark room was clouded with smoke as the 1st lieutenant entered the room. He walked slowly , trying to avoid the big clouds, towards the black desk where a man in black cape was sitting and enjoying his last cigar.
 | 
			
		||||
 | 
			
		||||
=> END
 | 
			
		||||
=> END
 | 
			
		||||
 | 
			
		||||
~ wall_writing
 | 
			
		||||
 | 
			
		||||
"Life's not fair. Get a grip." -- Doc, The Two Time
 | 
			
		||||
 | 
			
		||||
=> END
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
[remap]
 | 
			
		||||
 | 
			
		||||
importer="mp3"
 | 
			
		||||
type="AudioStreamMP3"
 | 
			
		||||
uid="uid://bskrlh73x1sgp"
 | 
			
		||||
path="res://.godot/imported/doc-summon.mp3-ebe66881fc8469c2b9dc405db43209d0.mp3str"
 | 
			
		||||
 | 
			
		||||
[deps]
 | 
			
		||||
 | 
			
		||||
source_file="res://Assets/Sounds/doc-summon.mp3"
 | 
			
		||||
dest_files=["res://.godot/imported/doc-summon.mp3-ebe66881fc8469c2b9dc405db43209d0.mp3str"]
 | 
			
		||||
 | 
			
		||||
[params]
 | 
			
		||||
 | 
			
		||||
loop=false
 | 
			
		||||
loop_offset=0
 | 
			
		||||
bpm=0
 | 
			
		||||
beat_count=0
 | 
			
		||||
bar_beats=4
 | 
			
		||||
| 
		 After Width: | Height: | Size: 1.5 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
[remap]
 | 
			
		||||
 | 
			
		||||
importer="texture"
 | 
			
		||||
type="CompressedTexture2D"
 | 
			
		||||
uid="uid://xgy5gihyxgih"
 | 
			
		||||
path="res://.godot/imported/fire-32x32.png-6317a2b0efbef8c9d4ff90f6384746c6.ctex"
 | 
			
		||||
metadata={
 | 
			
		||||
"vram_texture": false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[deps]
 | 
			
		||||
 | 
			
		||||
source_file="res://Assets/Sprites/Misc/fire-32x32.png"
 | 
			
		||||
dest_files=["res://.godot/imported/fire-32x32.png-6317a2b0efbef8c9d4ff90f6384746c6.ctex"]
 | 
			
		||||
 | 
			
		||||
[params]
 | 
			
		||||
 | 
			
		||||
compress/mode=0
 | 
			
		||||
compress/high_quality=false
 | 
			
		||||
compress/lossy_quality=0.7
 | 
			
		||||
compress/hdr_compression=1
 | 
			
		||||
compress/normal_map=0
 | 
			
		||||
compress/channel_pack=0
 | 
			
		||||
mipmaps/generate=false
 | 
			
		||||
mipmaps/limit=-1
 | 
			
		||||
roughness/mode=0
 | 
			
		||||
roughness/src_normal=""
 | 
			
		||||
process/fix_alpha_border=true
 | 
			
		||||
process/premult_alpha=false
 | 
			
		||||
process/normal_map_invert_y=false
 | 
			
		||||
process/hdr_as_srgb=false
 | 
			
		||||
process/hdr_clamp_exposure=false
 | 
			
		||||
process/size_limit=0
 | 
			
		||||
detect_3d/compress_to=1
 | 
			
		||||
| 
		 After Width: | Height: | Size: 743 B  | 
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
[remap]
 | 
			
		||||
 | 
			
		||||
importer="texture"
 | 
			
		||||
type="CompressedTexture2D"
 | 
			
		||||
uid="uid://c1garalf1clsp"
 | 
			
		||||
path="res://.godot/imported/flame-large.png-41b172a8bfc9c186ab97a98ae0c5a459.ctex"
 | 
			
		||||
metadata={
 | 
			
		||||
"vram_texture": false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[deps]
 | 
			
		||||
 | 
			
		||||
source_file="res://Assets/Sprites/Misc/flame-large.png"
 | 
			
		||||
dest_files=["res://.godot/imported/flame-large.png-41b172a8bfc9c186ab97a98ae0c5a459.ctex"]
 | 
			
		||||
 | 
			
		||||
[params]
 | 
			
		||||
 | 
			
		||||
compress/mode=0
 | 
			
		||||
compress/high_quality=false
 | 
			
		||||
compress/lossy_quality=0.7
 | 
			
		||||
compress/hdr_compression=1
 | 
			
		||||
compress/normal_map=0
 | 
			
		||||
compress/channel_pack=0
 | 
			
		||||
mipmaps/generate=false
 | 
			
		||||
mipmaps/limit=-1
 | 
			
		||||
roughness/mode=0
 | 
			
		||||
roughness/src_normal=""
 | 
			
		||||
process/fix_alpha_border=true
 | 
			
		||||
process/premult_alpha=false
 | 
			
		||||
process/normal_map_invert_y=false
 | 
			
		||||
process/hdr_as_srgb=false
 | 
			
		||||
process/hdr_clamp_exposure=false
 | 
			
		||||
process/size_limit=0
 | 
			
		||||
detect_3d/compress_to=1
 | 
			
		||||
| 
		 After Width: | Height: | Size: 379 B  | 
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
[remap]
 | 
			
		||||
 | 
			
		||||
importer="texture"
 | 
			
		||||
type="CompressedTexture2D"
 | 
			
		||||
uid="uid://dj1vsctgh1scr"
 | 
			
		||||
path="res://.godot/imported/flame.png-e7b2d4c51e3e9c0041d6294e9c805c89.ctex"
 | 
			
		||||
metadata={
 | 
			
		||||
"vram_texture": false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[deps]
 | 
			
		||||
 | 
			
		||||
source_file="res://Assets/Sprites/Misc/flame.png"
 | 
			
		||||
dest_files=["res://.godot/imported/flame.png-e7b2d4c51e3e9c0041d6294e9c805c89.ctex"]
 | 
			
		||||
 | 
			
		||||
[params]
 | 
			
		||||
 | 
			
		||||
compress/mode=0
 | 
			
		||||
compress/high_quality=false
 | 
			
		||||
compress/lossy_quality=0.7
 | 
			
		||||
compress/hdr_compression=1
 | 
			
		||||
compress/normal_map=0
 | 
			
		||||
compress/channel_pack=0
 | 
			
		||||
mipmaps/generate=false
 | 
			
		||||
mipmaps/limit=-1
 | 
			
		||||
roughness/mode=0
 | 
			
		||||
roughness/src_normal=""
 | 
			
		||||
process/fix_alpha_border=true
 | 
			
		||||
process/premult_alpha=false
 | 
			
		||||
process/normal_map_invert_y=false
 | 
			
		||||
process/hdr_as_srgb=false
 | 
			
		||||
process/hdr_clamp_exposure=false
 | 
			
		||||
process/size_limit=0
 | 
			
		||||
detect_3d/compress_to=1
 | 
			
		||||
| 
		 After Width: | Height: | Size: 92 B  | 
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
[remap]
 | 
			
		||||
 | 
			
		||||
importer="texture"
 | 
			
		||||
type="CompressedTexture2D"
 | 
			
		||||
uid="uid://bitpf645g0prl"
 | 
			
		||||
path="res://.godot/imported/torch-base.png-d14e78df3788bf6d3a9565b574d6c1a1.ctex"
 | 
			
		||||
metadata={
 | 
			
		||||
"vram_texture": false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[deps]
 | 
			
		||||
 | 
			
		||||
source_file="res://Assets/Sprites/Misc/torch-base.png"
 | 
			
		||||
dest_files=["res://.godot/imported/torch-base.png-d14e78df3788bf6d3a9565b574d6c1a1.ctex"]
 | 
			
		||||
 | 
			
		||||
[params]
 | 
			
		||||
 | 
			
		||||
compress/mode=0
 | 
			
		||||
compress/high_quality=false
 | 
			
		||||
compress/lossy_quality=0.7
 | 
			
		||||
compress/hdr_compression=1
 | 
			
		||||
compress/normal_map=0
 | 
			
		||||
compress/channel_pack=0
 | 
			
		||||
mipmaps/generate=false
 | 
			
		||||
mipmaps/limit=-1
 | 
			
		||||
roughness/mode=0
 | 
			
		||||
roughness/src_normal=""
 | 
			
		||||
process/fix_alpha_border=true
 | 
			
		||||
process/premult_alpha=false
 | 
			
		||||
process/normal_map_invert_y=false
 | 
			
		||||
process/hdr_as_srgb=false
 | 
			
		||||
process/hdr_clamp_exposure=false
 | 
			
		||||
process/size_limit=0
 | 
			
		||||
detect_3d/compress_to=1
 | 
			
		||||
| 
		 After Width: | Height: | Size: 379 B  | 
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
[remap]
 | 
			
		||||
 | 
			
		||||
importer="texture"
 | 
			
		||||
type="CompressedTexture2D"
 | 
			
		||||
uid="uid://cyfyelyq3o15s"
 | 
			
		||||
path="res://.godot/imported/torch-fire.png-a9f51cf7273c726b68014cb26a31d54c.ctex"
 | 
			
		||||
metadata={
 | 
			
		||||
"vram_texture": false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[deps]
 | 
			
		||||
 | 
			
		||||
source_file="res://Assets/Sprites/Misc/torch-fire.png"
 | 
			
		||||
dest_files=["res://.godot/imported/torch-fire.png-a9f51cf7273c726b68014cb26a31d54c.ctex"]
 | 
			
		||||
 | 
			
		||||
[params]
 | 
			
		||||
 | 
			
		||||
compress/mode=0
 | 
			
		||||
compress/high_quality=false
 | 
			
		||||
compress/lossy_quality=0.7
 | 
			
		||||
compress/hdr_compression=1
 | 
			
		||||
compress/normal_map=0
 | 
			
		||||
compress/channel_pack=0
 | 
			
		||||
mipmaps/generate=false
 | 
			
		||||
mipmaps/limit=-1
 | 
			
		||||
roughness/mode=0
 | 
			
		||||
roughness/src_normal=""
 | 
			
		||||
process/fix_alpha_border=true
 | 
			
		||||
process/premult_alpha=false
 | 
			
		||||
process/normal_map_invert_y=false
 | 
			
		||||
process/hdr_as_srgb=false
 | 
			
		||||
process/hdr_clamp_exposure=false
 | 
			
		||||
process/size_limit=0
 | 
			
		||||
detect_3d/compress_to=1
 | 
			
		||||
| 
		 After Width: | Height: | Size: 379 B  | 
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
[remap]
 | 
			
		||||
 | 
			
		||||
importer="texture"
 | 
			
		||||
type="CompressedTexture2D"
 | 
			
		||||
uid="uid://i5ksh8i0q48o"
 | 
			
		||||
path="res://.godot/imported/torch-lamp-base-back.png-a6c17eff02f04f493c4e495a2d662d5a.ctex"
 | 
			
		||||
metadata={
 | 
			
		||||
"vram_texture": false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[deps]
 | 
			
		||||
 | 
			
		||||
source_file="res://Assets/Sprites/Misc/torch-lamp-base-back.png"
 | 
			
		||||
dest_files=["res://.godot/imported/torch-lamp-base-back.png-a6c17eff02f04f493c4e495a2d662d5a.ctex"]
 | 
			
		||||
 | 
			
		||||
[params]
 | 
			
		||||
 | 
			
		||||
compress/mode=0
 | 
			
		||||
compress/high_quality=false
 | 
			
		||||
compress/lossy_quality=0.7
 | 
			
		||||
compress/hdr_compression=1
 | 
			
		||||
compress/normal_map=0
 | 
			
		||||
compress/channel_pack=0
 | 
			
		||||
mipmaps/generate=false
 | 
			
		||||
mipmaps/limit=-1
 | 
			
		||||
roughness/mode=0
 | 
			
		||||
roughness/src_normal=""
 | 
			
		||||
process/fix_alpha_border=true
 | 
			
		||||
process/premult_alpha=false
 | 
			
		||||
process/normal_map_invert_y=false
 | 
			
		||||
process/hdr_as_srgb=false
 | 
			
		||||
process/hdr_clamp_exposure=false
 | 
			
		||||
process/size_limit=0
 | 
			
		||||
detect_3d/compress_to=1
 | 
			
		||||
| 
		 After Width: | Height: | Size: 416 B  | 
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
[remap]
 | 
			
		||||
 | 
			
		||||
importer="texture"
 | 
			
		||||
type="CompressedTexture2D"
 | 
			
		||||
uid="uid://ca0htndnsb38k"
 | 
			
		||||
path="res://.godot/imported/torch-lamp-base.png-03b38ecb41ff35cadec5aeaad2c98e38.ctex"
 | 
			
		||||
metadata={
 | 
			
		||||
"vram_texture": false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[deps]
 | 
			
		||||
 | 
			
		||||
source_file="res://Assets/Sprites/Misc/torch-lamp-base.png"
 | 
			
		||||
dest_files=["res://.godot/imported/torch-lamp-base.png-03b38ecb41ff35cadec5aeaad2c98e38.ctex"]
 | 
			
		||||
 | 
			
		||||
[params]
 | 
			
		||||
 | 
			
		||||
compress/mode=0
 | 
			
		||||
compress/high_quality=false
 | 
			
		||||
compress/lossy_quality=0.7
 | 
			
		||||
compress/hdr_compression=1
 | 
			
		||||
compress/normal_map=0
 | 
			
		||||
compress/channel_pack=0
 | 
			
		||||
mipmaps/generate=false
 | 
			
		||||
mipmaps/limit=-1
 | 
			
		||||
roughness/mode=0
 | 
			
		||||
roughness/src_normal=""
 | 
			
		||||
process/fix_alpha_border=true
 | 
			
		||||
process/premult_alpha=false
 | 
			
		||||
process/normal_map_invert_y=false
 | 
			
		||||
process/hdr_as_srgb=false
 | 
			
		||||
process/hdr_clamp_exposure=false
 | 
			
		||||
process/size_limit=0
 | 
			
		||||
detect_3d/compress_to=1
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 783 B After Width: | Height: | Size: 810 B  | 
| 
		 Before Width: | Height: | Size: 152 B After Width: | Height: | Size: 148 B  | 
| 
		 After Width: | Height: | Size: 596 B  | 
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
[remap]
 | 
			
		||||
 | 
			
		||||
importer="texture"
 | 
			
		||||
type="CompressedTexture2D"
 | 
			
		||||
uid="uid://dlxiybkk75imp"
 | 
			
		||||
path="res://.godot/imported/tree-leaves-dark-0.png-c0a1d8978753948673d83a622b613796.ctex"
 | 
			
		||||
metadata={
 | 
			
		||||
"vram_texture": false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[deps]
 | 
			
		||||
 | 
			
		||||
source_file="res://Assets/Sprites/Props/tree-leaves-dark-0.png"
 | 
			
		||||
dest_files=["res://.godot/imported/tree-leaves-dark-0.png-c0a1d8978753948673d83a622b613796.ctex"]
 | 
			
		||||
 | 
			
		||||
[params]
 | 
			
		||||
 | 
			
		||||
compress/mode=0
 | 
			
		||||
compress/high_quality=false
 | 
			
		||||
compress/lossy_quality=0.7
 | 
			
		||||
compress/hdr_compression=1
 | 
			
		||||
compress/normal_map=0
 | 
			
		||||
compress/channel_pack=0
 | 
			
		||||
mipmaps/generate=false
 | 
			
		||||
mipmaps/limit=-1
 | 
			
		||||
roughness/mode=0
 | 
			
		||||
roughness/src_normal=""
 | 
			
		||||
process/fix_alpha_border=true
 | 
			
		||||
process/premult_alpha=false
 | 
			
		||||
process/normal_map_invert_y=false
 | 
			
		||||
process/hdr_as_srgb=false
 | 
			
		||||
process/hdr_clamp_exposure=false
 | 
			
		||||
process/size_limit=0
 | 
			
		||||
detect_3d/compress_to=1
 | 
			
		||||
| 
		 After Width: | Height: | Size: 775 B  | 
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
[remap]
 | 
			
		||||
 | 
			
		||||
importer="texture"
 | 
			
		||||
type="CompressedTexture2D"
 | 
			
		||||
uid="uid://022r5gtr5ut5"
 | 
			
		||||
path="res://.godot/imported/tree-leaves-dark-1.png-e500a7048d53ad3769f9fb33e7139e3a.ctex"
 | 
			
		||||
metadata={
 | 
			
		||||
"vram_texture": false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[deps]
 | 
			
		||||
 | 
			
		||||
source_file="res://Assets/Sprites/Props/tree-leaves-dark-1.png"
 | 
			
		||||
dest_files=["res://.godot/imported/tree-leaves-dark-1.png-e500a7048d53ad3769f9fb33e7139e3a.ctex"]
 | 
			
		||||
 | 
			
		||||
[params]
 | 
			
		||||
 | 
			
		||||
compress/mode=0
 | 
			
		||||
compress/high_quality=false
 | 
			
		||||
compress/lossy_quality=0.7
 | 
			
		||||
compress/hdr_compression=1
 | 
			
		||||
compress/normal_map=0
 | 
			
		||||
compress/channel_pack=0
 | 
			
		||||
mipmaps/generate=false
 | 
			
		||||
mipmaps/limit=-1
 | 
			
		||||
roughness/mode=0
 | 
			
		||||
roughness/src_normal=""
 | 
			
		||||
process/fix_alpha_border=true
 | 
			
		||||
process/premult_alpha=false
 | 
			
		||||
process/normal_map_invert_y=false
 | 
			
		||||
process/hdr_as_srgb=false
 | 
			
		||||
process/hdr_clamp_exposure=false
 | 
			
		||||
process/size_limit=0
 | 
			
		||||
detect_3d/compress_to=1
 | 
			
		||||
| 
		 After Width: | Height: | Size: 1.8 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
[remap]
 | 
			
		||||
 | 
			
		||||
importer="texture"
 | 
			
		||||
type="CompressedTexture2D"
 | 
			
		||||
uid="uid://fb2cpwplhe7o"
 | 
			
		||||
path="res://.godot/imported/tree-leaves-dark-2.png-e3e4a859dde5c7535113533f8a9eb51d.ctex"
 | 
			
		||||
metadata={
 | 
			
		||||
"vram_texture": false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[deps]
 | 
			
		||||
 | 
			
		||||
source_file="res://Assets/Sprites/Props/tree-leaves-dark-2.png"
 | 
			
		||||
dest_files=["res://.godot/imported/tree-leaves-dark-2.png-e3e4a859dde5c7535113533f8a9eb51d.ctex"]
 | 
			
		||||
 | 
			
		||||
[params]
 | 
			
		||||
 | 
			
		||||
compress/mode=0
 | 
			
		||||
compress/high_quality=false
 | 
			
		||||
compress/lossy_quality=0.7
 | 
			
		||||
compress/hdr_compression=1
 | 
			
		||||
compress/normal_map=0
 | 
			
		||||
compress/channel_pack=0
 | 
			
		||||
mipmaps/generate=false
 | 
			
		||||
mipmaps/limit=-1
 | 
			
		||||
roughness/mode=0
 | 
			
		||||
roughness/src_normal=""
 | 
			
		||||
process/fix_alpha_border=true
 | 
			
		||||
process/premult_alpha=false
 | 
			
		||||
process/normal_map_invert_y=false
 | 
			
		||||
process/hdr_as_srgb=false
 | 
			
		||||
process/hdr_clamp_exposure=false
 | 
			
		||||
process/size_limit=0
 | 
			
		||||
detect_3d/compress_to=1
 | 
			
		||||
| 
		 After Width: | Height: | Size: 4.8 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
[remap]
 | 
			
		||||
 | 
			
		||||
importer="texture"
 | 
			
		||||
type="CompressedTexture2D"
 | 
			
		||||
uid="uid://bth1v3dyuqwg6"
 | 
			
		||||
path="res://.godot/imported/arena-tileset-new.png-be9f2f14aeaee34d9c3f67ae1188e672.ctex"
 | 
			
		||||
metadata={
 | 
			
		||||
"vram_texture": false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[deps]
 | 
			
		||||
 | 
			
		||||
source_file="res://Assets/Sprites/arena-tileset-new.png"
 | 
			
		||||
dest_files=["res://.godot/imported/arena-tileset-new.png-be9f2f14aeaee34d9c3f67ae1188e672.ctex"]
 | 
			
		||||
 | 
			
		||||
[params]
 | 
			
		||||
 | 
			
		||||
compress/mode=0
 | 
			
		||||
compress/high_quality=false
 | 
			
		||||
compress/lossy_quality=0.7
 | 
			
		||||
compress/hdr_compression=1
 | 
			
		||||
compress/normal_map=0
 | 
			
		||||
compress/channel_pack=0
 | 
			
		||||
mipmaps/generate=false
 | 
			
		||||
mipmaps/limit=-1
 | 
			
		||||
roughness/mode=0
 | 
			
		||||
roughness/src_normal=""
 | 
			
		||||
process/fix_alpha_border=true
 | 
			
		||||
process/premult_alpha=false
 | 
			
		||||
process/normal_map_invert_y=false
 | 
			
		||||
process/hdr_as_srgb=false
 | 
			
		||||
process/hdr_clamp_exposure=false
 | 
			
		||||
process/size_limit=0
 | 
			
		||||
detect_3d/compress_to=1
 | 
			
		||||
| 
						 | 
				
			
			@ -1,48 +0,0 @@
 | 
			
		|||
using Godot;
 | 
			
		||||
 | 
			
		||||
namespace SupaLidlGame.BoundingBoxes;
 | 
			
		||||
 | 
			
		||||
public partial class CameraBounds : Node2D
 | 
			
		||||
{
 | 
			
		||||
    [Export]
 | 
			
		||||
    public Area2D Trigger { get; set; }
 | 
			
		||||
 | 
			
		||||
    //[Export]
 | 
			
		||||
    //public Rect2I Bounds { get; set; }
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public Marker2D TopLeft { get; set; }
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public Marker2D BottomRight { get; set; }
 | 
			
		||||
 | 
			
		||||
    public override void _Ready()
 | 
			
		||||
    {
 | 
			
		||||
        Trigger.BodyEntered += OnBodyEntered;
 | 
			
		||||
        Trigger.BodyExited += OnBodyExited;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void OnBodyEntered(Node2D body)
 | 
			
		||||
    {
 | 
			
		||||
        if (body is Characters.Player player)
 | 
			
		||||
        {
 | 
			
		||||
            var camera = player.Camera;
 | 
			
		||||
            var rect = new Rect2I();
 | 
			
		||||
            rect.Position = (Vector2I)TopLeft.GlobalPosition;
 | 
			
		||||
            rect.End = (Vector2I)BottomRight.GlobalPosition;
 | 
			
		||||
            camera.SetCameraBounds(rect);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void OnBodyExited(Node2D body)
 | 
			
		||||
    {
 | 
			
		||||
        if (body is Characters.Player player)
 | 
			
		||||
        {
 | 
			
		||||
            var camera = player.Camera;
 | 
			
		||||
            camera.LimitLeft = int.MinValue;
 | 
			
		||||
            camera.LimitTop = int.MinValue;
 | 
			
		||||
            camera.LimitRight = int.MaxValue;
 | 
			
		||||
            camera.LimitBottom = int.MaxValue;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,25 +0,0 @@
 | 
			
		|||
[gd_scene load_steps=3 format=3 uid="uid://malbos18dh7l"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Script" path="res://BoundingBoxes/CameraBounds.cs" id="1_vaknk"]
 | 
			
		||||
 | 
			
		||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_b2lli"]
 | 
			
		||||
size = Vector2(256, 272)
 | 
			
		||||
 | 
			
		||||
[node name="CameraBounds" type="Node2D" node_paths=PackedStringArray("Trigger", "TopLeft", "BottomRight")]
 | 
			
		||||
script = ExtResource("1_vaknk")
 | 
			
		||||
Trigger = NodePath("Area2D")
 | 
			
		||||
TopLeft = NodePath("TopLeft")
 | 
			
		||||
BottomRight = NodePath("BottomRight")
 | 
			
		||||
 | 
			
		||||
[node name="Area2D" type="Area2D" parent="."]
 | 
			
		||||
collision_layer = 0
 | 
			
		||||
collision_mask = 4
 | 
			
		||||
monitorable = false
 | 
			
		||||
 | 
			
		||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
 | 
			
		||||
shape = SubResource("RectangleShape2D_b2lli")
 | 
			
		||||
debug_color = Color(0.631373, 0.345098, 1, 0.419608)
 | 
			
		||||
 | 
			
		||||
[node name="TopLeft" type="Marker2D" parent="."]
 | 
			
		||||
 | 
			
		||||
[node name="BottomRight" type="Marker2D" parent="."]
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,47 @@
 | 
			
		|||
using Godot;
 | 
			
		||||
 | 
			
		||||
namespace SupaLidlGame.BoundingBoxes;
 | 
			
		||||
 | 
			
		||||
public partial class CameraTrigger : Area2D
 | 
			
		||||
{
 | 
			
		||||
    [Export]
 | 
			
		||||
    public Node Camera { get; set; }
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public int EnablePriority { get; set; } = 2;
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public int DisablePriority { get; set; } = 0;
 | 
			
		||||
 | 
			
		||||
    public override void _Ready()
 | 
			
		||||
    {
 | 
			
		||||
        Connect(SignalName.BodyEntered, new Callable(this, nameof(OnBodyEntered)));
 | 
			
		||||
        Connect(SignalName.BodyExited, new Callable(this, nameof(OnBodyExited)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public override void _EnterTree()
 | 
			
		||||
    {
 | 
			
		||||
        if (!Camera.Get("tween_on_load").AsBool())
 | 
			
		||||
        {
 | 
			
		||||
            var tween = Camera.Get("tween_resource").AsGodotObject();
 | 
			
		||||
            double duration = tween.Get("duration").AsDouble();
 | 
			
		||||
 | 
			
		||||
            // HACK: manually set this field to interrupt tween when the
 | 
			
		||||
            // trigger enters the scene, which happens when the scene is loaded
 | 
			
		||||
            // from the cache
 | 
			
		||||
            Camera.SetDeferred("_has_tweened", true);
 | 
			
		||||
            GD.Print("set tween");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void OnBodyEntered(Node2D node)
 | 
			
		||||
    {
 | 
			
		||||
        Camera.Set("priority", EnablePriority);
 | 
			
		||||
        Camera.Set("follow_target", node);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void OnBodyExited(Node2D node)
 | 
			
		||||
    {
 | 
			
		||||
        Camera.Set("priority", DisablePriority);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -3,7 +3,9 @@
 | 
			
		|||
[ext_resource type="Script" path="res://BoundingBoxes/Hitbox.cs" id="1_44i8j"]
 | 
			
		||||
 | 
			
		||||
[node name="Hitbox" type="Area2D"]
 | 
			
		||||
priority = 5.0
 | 
			
		||||
collision_layer = 256
 | 
			
		||||
collision_mask = 769
 | 
			
		||||
priority = 5
 | 
			
		||||
script = ExtResource("1_44i8j")
 | 
			
		||||
 | 
			
		||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,8 @@
 | 
			
		|||
[ext_resource type="Script" path="res://BoundingBoxes/Hurtbox.cs" id="1_ov1ss"]
 | 
			
		||||
 | 
			
		||||
[node name="Hurtbox" type="Area2D"]
 | 
			
		||||
collision_layer = 512
 | 
			
		||||
collision_mask = 769
 | 
			
		||||
script = ExtResource("1_ov1ss")
 | 
			
		||||
 | 
			
		||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,70 @@
 | 
			
		|||
using Godot;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace SupaLidlGame.BoundingBoxes;
 | 
			
		||||
 | 
			
		||||
public partial class OcclusionTrigger : Area2D
 | 
			
		||||
{
 | 
			
		||||
    [Export]
 | 
			
		||||
    public double FadeDuration { get; set; }
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public Godot.Collections.Array<string> Groups { get; set; }
 | 
			
		||||
 | 
			
		||||
    private Tween _tween = null;
 | 
			
		||||
 | 
			
		||||
    public override void _Ready()
 | 
			
		||||
    {
 | 
			
		||||
        Connect(SignalName.BodyEntered, new Callable(this, nameof(OnBodyEntered)));
 | 
			
		||||
        Connect(SignalName.BodyExited, new Callable(this, nameof(OnBodyExited)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private IEnumerable<CanvasItem> GetCanvasItems()
 | 
			
		||||
    {
 | 
			
		||||
        IEnumerable<IEnumerable<CanvasItem>> pack()
 | 
			
		||||
        {
 | 
			
		||||
            foreach (string group in Groups)
 | 
			
		||||
            {
 | 
			
		||||
                var nodes = GetTree().GetNodesInGroup(group)
 | 
			
		||||
                    .OfType<CanvasItem>();
 | 
			
		||||
 | 
			
		||||
                yield return nodes;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return pack().SelectMany(e => e);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void OnBodyEntered(Node2D _)
 | 
			
		||||
    {
 | 
			
		||||
        if (IsInstanceValid(_tween))
 | 
			
		||||
        {
 | 
			
		||||
            _tween.Kill();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        _tween = GetTree().CreateTween();
 | 
			
		||||
        _tween.SetParallel();
 | 
			
		||||
 | 
			
		||||
        foreach (var node in GetCanvasItems())
 | 
			
		||||
        {
 | 
			
		||||
            _tween.TweenProperty(node, "modulate", Colors.Transparent, FadeDuration);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void OnBodyExited(Node2D _)
 | 
			
		||||
    {
 | 
			
		||||
        if (IsInstanceValid(_tween))
 | 
			
		||||
        {
 | 
			
		||||
            _tween.Kill();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        _tween = GetTree().CreateTween();
 | 
			
		||||
        _tween.SetParallel();
 | 
			
		||||
 | 
			
		||||
        foreach (var node in GetCanvasItems())
 | 
			
		||||
        {
 | 
			
		||||
            _tween.TweenProperty(node, "modulate", Colors.White, FadeDuration);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -10,9 +10,6 @@ public partial class Doc : Boss
 | 
			
		|||
 | 
			
		||||
    public AnimationPlayer MiscAnimation { get; set; }
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public Items.Weapons.Sword Lance { get; set; }
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public override bool IsActive
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -109,7 +106,7 @@ public partial class Doc : Boss
 | 
			
		|||
            if (name == "Doc")
 | 
			
		||||
            {
 | 
			
		||||
                IsActive = true;
 | 
			
		||||
                Inventory.SelectedItem = Lance;
 | 
			
		||||
                Inventory.SelectedItem = GetNode<Items.Item>("%DocLance");
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -122,7 +119,7 @@ public partial class Doc : Boss
 | 
			
		|||
            if (this.GetWorld().CurrentPlayer.IsAlive && !IsActive)
 | 
			
		||||
            {
 | 
			
		||||
                IsActive = true;
 | 
			
		||||
                Inventory.SelectedItem = Lance;
 | 
			
		||||
                Inventory.SelectedItem = GetNode<Items.Item>("%DocLance");
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
[gd_scene load_steps=70 format=3 uid="uid://d2skjvvx6fal0"]
 | 
			
		||||
[gd_scene load_steps=72 format=3 uid="uid://d2skjvvx6fal0"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Script" path="res://Characters/Doc.cs" id="2_3elet"]
 | 
			
		||||
[ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_5jxom"]
 | 
			
		||||
| 
						 | 
				
			
			@ -38,6 +38,7 @@
 | 
			
		|||
[ext_resource type="PackedScene" uid="uid://p7oijq6dbvvk" path="res://Items/Weapons/DocLance.tscn" id="24_2es2r"]
 | 
			
		||||
[ext_resource type="AudioStream" uid="uid://cqj44je3mvk60" path="res://Assets/Sounds/rauuul.wav" id="26_js7p2"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://dldnp8eunxj3q" path="res://BoundingBoxes/InteractionTrigger.tscn" id="33_08dyq"]
 | 
			
		||||
[ext_resource type="AudioStream" uid="uid://bskrlh73x1sgp" path="res://Assets/Sounds/doc-summon.mp3" id="34_g57b0"]
 | 
			
		||||
 | 
			
		||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_7n7iy"]
 | 
			
		||||
resource_local_to_scene = true
 | 
			
		||||
| 
						 | 
				
			
			@ -327,6 +328,21 @@ tracks/2/keys = {
 | 
			
		|||
"update": 0,
 | 
			
		||||
"values": [Vector2(1.5, 0.75), Vector2(1, 1)]
 | 
			
		||||
}
 | 
			
		||||
tracks/3/type = "audio"
 | 
			
		||||
tracks/3/imported = false
 | 
			
		||||
tracks/3/enabled = true
 | 
			
		||||
tracks/3/path = NodePath("../Effects/SummonCry")
 | 
			
		||||
tracks/3/interp = 1
 | 
			
		||||
tracks/3/loop_wrap = true
 | 
			
		||||
tracks/3/keys = {
 | 
			
		||||
"clips": [{
 | 
			
		||||
"end_offset": 1.1,
 | 
			
		||||
"start_offset": 0.4,
 | 
			
		||||
"stream": ExtResource("34_g57b0")
 | 
			
		||||
}],
 | 
			
		||||
"times": PackedFloat32Array(0)
 | 
			
		||||
}
 | 
			
		||||
tracks/3/use_blend = true
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_rpply"]
 | 
			
		||||
_data = {
 | 
			
		||||
| 
						 | 
				
			
			@ -552,14 +568,16 @@ size = Vector2(16, 19)
 | 
			
		|||
[sub_resource type="CircleShape2D" id="CircleShape2D_8hwat"]
 | 
			
		||||
radius = 16.0
 | 
			
		||||
 | 
			
		||||
[node name="Doc" type="CharacterBody2D" node_paths=PackedStringArray("Lance", "BossStateMachine", "DefaultSelectedItem", "ThinkerStateMachine", "Stats", "Sprite", "Inventory", "StateMachine", "Hurtbox")]
 | 
			
		||||
[sub_resource type="CircleShape2D" id="CircleShape2D_kap5k"]
 | 
			
		||||
radius = 48.0
 | 
			
		||||
 | 
			
		||||
[node name="Doc" type="CharacterBody2D" node_paths=PackedStringArray("BossStateMachine", "DefaultSelectedItem", "ThinkerStateMachine", "Stats", "Sprite", "Inventory", "StateMachine", "Hurtbox")]
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
texture_filter = 3
 | 
			
		||||
material = SubResource("ShaderMaterial_7n7iy")
 | 
			
		||||
collision_layer = 10
 | 
			
		||||
collision_mask = 17
 | 
			
		||||
script = ExtResource("2_3elet")
 | 
			
		||||
Lance = NodePath("Inventory/DocLance")
 | 
			
		||||
BossStateMachine = NodePath("BossStateMachine")
 | 
			
		||||
BossName = "Doc, The Two-Time"
 | 
			
		||||
Music = ExtResource("3_qnxmu")
 | 
			
		||||
| 
						 | 
				
			
			@ -682,8 +700,9 @@ InitialState = NodePath("Attack")
 | 
			
		|||
script = ExtResource("21_ij3bp")
 | 
			
		||||
NPC = NodePath("../..")
 | 
			
		||||
 | 
			
		||||
[node name="DashDefensive" type="Node" parent="ThinkerStateMachine" node_paths=PackedStringArray("NPC")]
 | 
			
		||||
[node name="DashDefensive" type="Node" parent="ThinkerStateMachine" node_paths=PackedStringArray("ProjectileDetection", "NPC")]
 | 
			
		||||
script = ExtResource("20_12htp")
 | 
			
		||||
ProjectileDetection = NodePath("../../ProjectileDetection")
 | 
			
		||||
MaxDistanceToTarget = 256.0
 | 
			
		||||
UseItemDistance = 64.0
 | 
			
		||||
NPC = NodePath("../..")
 | 
			
		||||
| 
						 | 
				
			
			@ -760,6 +779,9 @@ attenuation = 0.5
 | 
			
		|||
[node name="HurtSound" type="AudioStreamPlayer2D" parent="Effects"]
 | 
			
		||||
stream = ExtResource("9_stm0e")
 | 
			
		||||
 | 
			
		||||
[node name="SummonCry" type="AudioStreamPlayer2D" parent="Effects"]
 | 
			
		||||
attenuation = 4.0
 | 
			
		||||
 | 
			
		||||
[node name="Sprite" type="Sprite2D" parent="."]
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
use_parent_material = true
 | 
			
		||||
| 
						 | 
				
			
			@ -785,14 +807,8 @@ script = ExtResource("8_r8ejq")
 | 
			
		|||
Hotbar = []
 | 
			
		||||
Items = []
 | 
			
		||||
 | 
			
		||||
[node name="DocLance" parent="Inventory" node_paths=PackedStringArray("Hitbox", "AnimationPlayer", "ParryParticles", "StateMachine", "Anchor", "HandAnchor") instance=ExtResource("24_2es2r")]
 | 
			
		||||
[node name="DocLance" parent="Inventory" instance=ExtResource("24_2es2r")]
 | 
			
		||||
unique_name_in_owner = true
 | 
			
		||||
Hitbox = NodePath("Hitbox")
 | 
			
		||||
AnimationPlayer = NodePath("AnimationPlayer")
 | 
			
		||||
ParryParticles = NodePath("Anchor/Node2D/Sprite2D/ParryParticles")
 | 
			
		||||
StateMachine = NodePath("State")
 | 
			
		||||
Anchor = NodePath("Anchor")
 | 
			
		||||
HandAnchor = NodePath("Anchor/Node2D/Sprite2D/Hand")
 | 
			
		||||
 | 
			
		||||
[node name="InteractionTrigger" parent="." instance=ExtResource("33_08dyq")]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -807,5 +823,13 @@ offset_bottom = -14.0
 | 
			
		|||
[node name="Label" parent="InteractionTrigger/Popup" index="0"]
 | 
			
		||||
text = "Duel"
 | 
			
		||||
 | 
			
		||||
[node name="ProjectileDetection" type="Area2D" parent="."]
 | 
			
		||||
unique_name_in_owner = true
 | 
			
		||||
collision_layer = 0
 | 
			
		||||
collision_mask = 256
 | 
			
		||||
 | 
			
		||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="ProjectileDetection"]
 | 
			
		||||
shape = SubResource("CircleShape2D_kap5k")
 | 
			
		||||
 | 
			
		||||
[editable path="Hurtbox"]
 | 
			
		||||
[editable path="InteractionTrigger"]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -152,6 +152,7 @@ Sprite = NodePath("Sprites/Node2D/Character")
 | 
			
		|||
Inventory = NodePath("Inventory")
 | 
			
		||||
StateMachine = NodePath("StateMachine")
 | 
			
		||||
Hurtbox = NodePath("Hurtbox")
 | 
			
		||||
Faction = 2
 | 
			
		||||
 | 
			
		||||
[node name="Stats" type="Node" parent="."]
 | 
			
		||||
script = ExtResource("9_bxrs2")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -364,13 +364,11 @@ curve = SubResource("Curve_30p4b")
 | 
			
		|||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_qdhau"]
 | 
			
		||||
particle_flag_disable_z = true
 | 
			
		||||
spread = 180.0
 | 
			
		||||
gravity = Vector3(0, 0, 0)
 | 
			
		||||
initial_velocity_min = 32.0
 | 
			
		||||
initial_velocity_max = 32.0
 | 
			
		||||
angular_velocity_min = 90.0
 | 
			
		||||
angular_velocity_max = 90.0
 | 
			
		||||
orbit_velocity_min = 0.0
 | 
			
		||||
orbit_velocity_max = 0.0
 | 
			
		||||
gravity = Vector3(0, 0, 0)
 | 
			
		||||
linear_accel_min = -64.0
 | 
			
		||||
linear_accel_max = -32.0
 | 
			
		||||
tangential_accel_min = 8.0
 | 
			
		||||
| 
						 | 
				
			
			@ -405,6 +403,7 @@ Sprite = NodePath("Sprites/Node2D/Character")
 | 
			
		|||
Inventory = NodePath("Inventory")
 | 
			
		||||
StateMachine = NodePath("StateMachine")
 | 
			
		||||
Hurtbox = NodePath("Hurtbox")
 | 
			
		||||
Faction = 2
 | 
			
		||||
 | 
			
		||||
[node name="StateMachine" type="Node" parent="." node_paths=PackedStringArray("InitialState", "Character")]
 | 
			
		||||
script = ExtResource("3_lj2a2")
 | 
			
		||||
| 
						 | 
				
			
			@ -441,7 +440,6 @@ MaxDistanceToTarget = 128.0
 | 
			
		|||
UseItemDistance = 128.0
 | 
			
		||||
PassiveState = NodePath("../Pursue")
 | 
			
		||||
PursueState = NodePath("../Pursue")
 | 
			
		||||
PursueOnLineOfSight = false
 | 
			
		||||
NPC = NodePath("../..")
 | 
			
		||||
 | 
			
		||||
[node name="Idle" type="Node" parent="ThinkerStateMachine" node_paths=PackedStringArray("PursueState", "NavigationAgent", "NPC")]
 | 
			
		||||
| 
						 | 
				
			
			@ -450,7 +448,6 @@ PursueState = NodePath("../Pursue")
 | 
			
		|||
MinTargetDistance = 32.0
 | 
			
		||||
PursueOnLineOfSight = true
 | 
			
		||||
MinLineOfSightDistance = 128.0
 | 
			
		||||
ShouldReturnToOriginalPosition = true
 | 
			
		||||
NavigationAgent = NodePath("../../NavigationAgent2D")
 | 
			
		||||
NPC = NodePath("../..")
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -530,15 +527,17 @@ hframes = 6
 | 
			
		|||
position = Vector2(0, -4)
 | 
			
		||||
shape = SubResource("RectangleShape2D_bfqew")
 | 
			
		||||
 | 
			
		||||
[node name="Inventory" type="Node2D" parent="."]
 | 
			
		||||
[node name="Inventory" type="Node2D" parent="." node_paths=PackedStringArray("Hotbar")]
 | 
			
		||||
position = Vector2(0, -4)
 | 
			
		||||
script = ExtResource("17_sjq8t")
 | 
			
		||||
Hotbar = []
 | 
			
		||||
 | 
			
		||||
[node name="ProjectileSpawner" parent="Inventory" instance=ExtResource("17_dmlbb")]
 | 
			
		||||
[node name="ProjectileSpawner" parent="Inventory" node_paths=PackedStringArray("StateMachine") instance=ExtResource("17_dmlbb")]
 | 
			
		||||
Projectile = ExtResource("18_lwg36")
 | 
			
		||||
ShouldOverrideProjectileDamage = false
 | 
			
		||||
ShouldOverrideVelocity = false
 | 
			
		||||
ShouldRotate = false
 | 
			
		||||
StateMachine = NodePath("StateMachine")
 | 
			
		||||
UseTime = 2.0
 | 
			
		||||
 | 
			
		||||
[node name="Hurtbox" parent="." instance=ExtResource("18_ajs2x")]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -268,8 +268,8 @@ scale_curve = SubResource("CurveTexture_5uulw")
 | 
			
		|||
color = Color(1, 0, 0, 1)
 | 
			
		||||
color_ramp = SubResource("GradientTexture1D_iyaih")
 | 
			
		||||
 | 
			
		||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_bfqew"]
 | 
			
		||||
size = Vector2(8, 8)
 | 
			
		||||
[sub_resource type="CircleShape2D" id="CircleShape2D_umi1b"]
 | 
			
		||||
radius = 4.0
 | 
			
		||||
 | 
			
		||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_1gjgc"]
 | 
			
		||||
size = Vector2(12, 16)
 | 
			
		||||
| 
						 | 
				
			
			@ -290,6 +290,7 @@ Sprite = NodePath("Sprites/Node2D/Character")
 | 
			
		|||
Inventory = NodePath("Inventory")
 | 
			
		||||
StateMachine = NodePath("StateMachine")
 | 
			
		||||
Hurtbox = NodePath("Hurtbox")
 | 
			
		||||
Faction = 2
 | 
			
		||||
metadata/_edit_vertical_guides_ = []
 | 
			
		||||
 | 
			
		||||
[node name="Stats" type="Node" parent="."]
 | 
			
		||||
| 
						 | 
				
			
			@ -416,7 +417,7 @@ stream = ExtResource("15_w7mkq")
 | 
			
		|||
unique_name_in_owner = true
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
use_parent_material = true
 | 
			
		||||
position = Vector2(-0.5, 4)
 | 
			
		||||
position = Vector2(0, 4)
 | 
			
		||||
rotation = 6.28319
 | 
			
		||||
 | 
			
		||||
[node name="Node2D" type="Node2D" parent="Sprites"]
 | 
			
		||||
| 
						 | 
				
			
			@ -429,7 +430,7 @@ offset = Vector2(0, -12)
 | 
			
		|||
hframes = 7
 | 
			
		||||
 | 
			
		||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 | 
			
		||||
shape = SubResource("RectangleShape2D_bfqew")
 | 
			
		||||
shape = SubResource("CircleShape2D_umi1b")
 | 
			
		||||
 | 
			
		||||
[node name="Inventory" type="Node2D" parent="." node_paths=PackedStringArray("Hotbar")]
 | 
			
		||||
script = ExtResource("17_5rur0")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -104,27 +104,25 @@ public partial class NPC : Character
 | 
			
		|||
    {
 | 
			
		||||
        float bestScore = float.MaxValue;
 | 
			
		||||
        Character bestChar = null;
 | 
			
		||||
        // NOTE: this relies on all Characters being under the Entities node
 | 
			
		||||
        foreach (Node node in GetParent().GetChildren())
 | 
			
		||||
 | 
			
		||||
        foreach (var character in World.Instance.CurrentMap.GetCharacters())
 | 
			
		||||
        {
 | 
			
		||||
            if (node is Character character)
 | 
			
		||||
            bool isFriendly = ((IFaction)character).AlignsWith(this);
 | 
			
		||||
            if (isFriendly || !character.IsAlive)
 | 
			
		||||
            {
 | 
			
		||||
                bool isFriendly = character.Faction == Faction;
 | 
			
		||||
                if (isFriendly || character.Health <= 0)
 | 
			
		||||
                {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
                float score = 0;
 | 
			
		||||
                score -= Position.DistanceTo(character.Position);
 | 
			
		||||
            float score = 0;
 | 
			
		||||
            score += GlobalPosition.DistanceSquaredTo(character.GlobalPosition);
 | 
			
		||||
 | 
			
		||||
                if (score < bestScore)
 | 
			
		||||
                {
 | 
			
		||||
                    bestScore = score;
 | 
			
		||||
                    bestChar = character;
 | 
			
		||||
                }
 | 
			
		||||
            if (score < bestScore)
 | 
			
		||||
            {
 | 
			
		||||
                bestScore = score;
 | 
			
		||||
                bestChar = character;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return bestChar;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,6 +36,9 @@ public sealed partial class Player : Character
 | 
			
		|||
    [Export]
 | 
			
		||||
    public PlayerCamera Camera { get; set; }
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public GodotObject PCamera { get; set; }
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public Marker2D DirectionMarker { get; private set; }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -75,6 +78,17 @@ public sealed partial class Player : Character
 | 
			
		|||
        Inventory.SelectedIndex = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public override void _EnterTree()
 | 
			
		||||
    {
 | 
			
		||||
        // HACK: instantly move camera to player when switching to a scene
 | 
			
		||||
        // with another PhantomCamera2D
 | 
			
		||||
        var tween = GetNode<GodotObject>("PCamera")
 | 
			
		||||
            .Get("tween_resource")
 | 
			
		||||
            .AsGodotObject();
 | 
			
		||||
        tween.Set("duration", 0);
 | 
			
		||||
        tween.SetDeferred("duration", 1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public override void _Process(double delta)
 | 
			
		||||
    {
 | 
			
		||||
        base._Process(delta);
 | 
			
		||||
| 
						 | 
				
			
			@ -238,7 +252,6 @@ public sealed partial class Player : Character
 | 
			
		|||
        switch (inputMethod)
 | 
			
		||||
        {
 | 
			
		||||
            case State.Global.InputMethod.Joystick:
 | 
			
		||||
                GD.Print(joystick);
 | 
			
		||||
                if (joystick.IsZeroApprox())
 | 
			
		||||
                {
 | 
			
		||||
                    return Direction;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
[gd_scene load_steps=74 format=3 uid="uid://b2254pup8k161"]
 | 
			
		||||
[gd_scene load_steps=77 format=3 uid="uid://b2254pup8k161"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Script" path="res://Characters/Player.cs" id="1_flygr"]
 | 
			
		||||
[ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_ngsgt"]
 | 
			
		||||
| 
						 | 
				
			
			@ -27,16 +27,18 @@
 | 
			
		|||
[ext_resource type="Script" path="res://BoundingBoxes/InteractionRay.cs" id="13_hs3u1"]
 | 
			
		||||
[ext_resource type="Script" path="res://State/Character/PlayerHealState.cs" id="13_t103m"]
 | 
			
		||||
[ext_resource type="Script" path="res://State/Character/PlayerMaxLevelState.cs" id="14_1sn10"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://d1ukste16yq6v" path="res://Assets/Sprites/Particles/player-light.png" id="15_3hahh"]
 | 
			
		||||
[ext_resource type="Script" path="res://Utils/DamageTime.cs" id="15_4xl06"]
 | 
			
		||||
[ext_resource type="AudioStream" uid="uid://st8qgqiygy5a" path="res://Assets/Sounds/electricity.wav" id="15_61bua"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://ce0ph4wk0ylra" path="res://UI/TargetTracer.tscn" id="22_hxi53"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://bd8l8kafb42dt" path="res://Assets/Sprites/Particles/circle.png" id="22_uefct"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://bcgm3r168qjn3" path="res://Assets/Sprites/Particles/cast-effect.png" id="24_njn4h"]
 | 
			
		||||
[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="27_mndpv"]
 | 
			
		||||
[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="28_6gq8l"]
 | 
			
		||||
[ext_resource type="Script" path="res://Items/PlayerInventory.cs" id="30_y2wmw"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://cgg0sfm2qeiwn" path="res://Items/Weapons/Bow.tscn" id="31_mofvy"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://dvqap2uhcah63" path="res://Items/Weapons/Sword.tscn" id="31_ql4as"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://5y1acxl4j4n7" path="res://Items/Weapons/Pugio.tscn" id="32_6ffmm"]
 | 
			
		||||
[ext_resource type="Resource" uid="uid://cl7jvdu2lnv2d" path="res://Items/Weapons/Sword.tres" id="33_3qyfl"]
 | 
			
		||||
[ext_resource type="Resource" uid="uid://cjsh0dcgbfn77" path="res://Items/Weapons/Bow.tres" id="34_70ron"]
 | 
			
		||||
[ext_resource type="Resource" uid="uid://iqe6rgnb3jur" path="res://Items/Weapons/Pugio.tres" id="35_4pap1"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://coarr28adgo1u" path="res://Assets/Sprites/Particles/point-light.png" id="38_6udj8"]
 | 
			
		||||
 | 
			
		||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_h78y7"]
 | 
			
		||||
shader = ExtResource("2_ngsgt")
 | 
			
		||||
| 
						 | 
				
			
			@ -44,6 +46,12 @@ shader_parameter/color = Vector4(1, 1, 1, 1)
 | 
			
		|||
shader_parameter/intensity = 0.0
 | 
			
		||||
shader_parameter/alpha_modulate = 1.0
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Resource" id="Resource_535hq"]
 | 
			
		||||
script = ExtResource("28_6gq8l")
 | 
			
		||||
duration = 1.0
 | 
			
		||||
transition = 0
 | 
			
		||||
ease = 2
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Animation" id="Animation_imqdv"]
 | 
			
		||||
length = 0.001
 | 
			
		||||
tracks/0/type = "value"
 | 
			
		||||
| 
						 | 
				
			
			@ -594,6 +602,14 @@ StateMachine = NodePath("StateMachine")
 | 
			
		|||
Hurtbox = NodePath("Hurtbox")
 | 
			
		||||
Faction = 1
 | 
			
		||||
 | 
			
		||||
[node name="PCamera" type="Node2D" parent="."]
 | 
			
		||||
script = ExtResource("27_mndpv")
 | 
			
		||||
priority = 1
 | 
			
		||||
follow_mode = 2
 | 
			
		||||
zoom = Vector2(4, 4)
 | 
			
		||||
tween_resource = SubResource("Resource_535hq")
 | 
			
		||||
draw_limits = true
 | 
			
		||||
 | 
			
		||||
[node name="Stats" type="Node" parent="."]
 | 
			
		||||
script = ExtResource("4_06oya")
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -765,6 +781,7 @@ stream = ExtResource("12_vvem5")
 | 
			
		|||
unique_name_in_owner = true
 | 
			
		||||
 | 
			
		||||
[node name="Camera2D" parent="." instance=ExtResource("4_ym125")]
 | 
			
		||||
enabled = false
 | 
			
		||||
zoom = Vector2(4, 4)
 | 
			
		||||
position_smoothing_speed = 8.0
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -819,34 +836,8 @@ horizontal_alignment = 1
 | 
			
		|||
[node name="Inventory" type="Node2D" parent="." node_paths=PackedStringArray("Hotbar")]
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
script = ExtResource("30_y2wmw")
 | 
			
		||||
Hotbar = [NodePath("Sword"), NodePath("Bow"), NodePath("Pugio")]
 | 
			
		||||
InventoryMap = {
 | 
			
		||||
"equip_1": 0,
 | 
			
		||||
"equip_2": 1,
 | 
			
		||||
"equip_3": 2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[node name="Bow" parent="Inventory" node_paths=PackedStringArray("StateMachine") instance=ExtResource("31_mofvy")]
 | 
			
		||||
visible = false
 | 
			
		||||
StateMachine = NodePath("StateMachine")
 | 
			
		||||
 | 
			
		||||
[node name="Sword" parent="Inventory" node_paths=PackedStringArray("Hitbox", "AnimationPlayer", "ParryParticles", "StateMachine", "Anchor", "HandAnchor") instance=ExtResource("31_ql4as")]
 | 
			
		||||
visible = false
 | 
			
		||||
Hitbox = NodePath("Hitbox")
 | 
			
		||||
AnimationPlayer = NodePath("AnimationPlayer")
 | 
			
		||||
ParryParticles = NodePath("Anchor/Node2D/Sprite2D/ParryParticles")
 | 
			
		||||
StateMachine = NodePath("State")
 | 
			
		||||
Anchor = NodePath("Anchor")
 | 
			
		||||
HandAnchor = NodePath("Anchor/Node2D/Sprite2D/Hand")
 | 
			
		||||
 | 
			
		||||
[node name="Pugio" parent="Inventory" node_paths=PackedStringArray("Hitbox", "AnimationPlayer", "ParryParticles", "StateMachine", "Anchor", "HandAnchor") instance=ExtResource("32_6ffmm")]
 | 
			
		||||
visible = false
 | 
			
		||||
Hitbox = NodePath("Hitbox")
 | 
			
		||||
AnimationPlayer = NodePath("AnimationPlayer")
 | 
			
		||||
ParryParticles = NodePath("Anchor/Node2D/Sprite2D/ParryParticles")
 | 
			
		||||
StateMachine = NodePath("State")
 | 
			
		||||
Anchor = NodePath("Anchor")
 | 
			
		||||
HandAnchor = NodePath("Anchor/Node2D/Sprite2D/Hand")
 | 
			
		||||
Hotbar = [null, null, null]
 | 
			
		||||
Items = Array[Object]([ExtResource("33_3qyfl"), ExtResource("34_70ron"), ExtResource("35_4pap1")])
 | 
			
		||||
 | 
			
		||||
[node name="Hurtbox" parent="." node_paths=PackedStringArray("InvincibilityTimer") instance=ExtResource("9_avyu4")]
 | 
			
		||||
visible = false
 | 
			
		||||
| 
						 | 
				
			
			@ -875,12 +866,12 @@ script = ExtResource("13_hs3u1")
 | 
			
		|||
 | 
			
		||||
[node name="PointLight2D" type="PointLight2D" parent="."]
 | 
			
		||||
position = Vector2(0, -4)
 | 
			
		||||
blend_mode = 2
 | 
			
		||||
energy = 0.2
 | 
			
		||||
shadow_enabled = true
 | 
			
		||||
shadow_filter = 2
 | 
			
		||||
shadow_filter_smooth = 3.0
 | 
			
		||||
texture = ExtResource("15_3hahh")
 | 
			
		||||
height = 10.0
 | 
			
		||||
texture = ExtResource("38_6udj8")
 | 
			
		||||
texture_scale = 0.5
 | 
			
		||||
 | 
			
		||||
[node name="DamageTime" type="Node" parent="."]
 | 
			
		||||
script = ExtResource("15_4xl06")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -174,6 +174,7 @@ Sprite = NodePath("Sprites/Sprite2D")
 | 
			
		|||
Inventory = NodePath("Inventory")
 | 
			
		||||
StateMachine = NodePath("StateMachine")
 | 
			
		||||
Hurtbox = NodePath("Hurtbox")
 | 
			
		||||
Faction = 4
 | 
			
		||||
 | 
			
		||||
[node name="StateMachine" type="Node" parent="." node_paths=PackedStringArray("InitialState", "Character")]
 | 
			
		||||
script = ExtResource("2_dhles")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -91,11 +91,6 @@ public class Parser
 | 
			
		|||
        }
 | 
			
		||||
        else if (token.Type == TokenType.Grouping)
 | 
			
		||||
        {
 | 
			
		||||
            if (token.Value == ")")
 | 
			
		||||
            {
 | 
			
		||||
                throw new InterpreterException("Unexpected )",
 | 
			
		||||
                    token.Line, token.Column);
 | 
			
		||||
            }
 | 
			
		||||
            if (prev is LiteralExpression l)
 | 
			
		||||
            {
 | 
			
		||||
                // this is a function call
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,11 +17,9 @@ gradient = SubResource("Gradient_uqfn8")
 | 
			
		|||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_yg5po"]
 | 
			
		||||
particle_flag_disable_z = true
 | 
			
		||||
direction = Vector3(-1, 0, 0)
 | 
			
		||||
gravity = Vector3(0, 0, 0)
 | 
			
		||||
initial_velocity_min = 4.0
 | 
			
		||||
initial_velocity_max = 8.0
 | 
			
		||||
orbit_velocity_min = 0.0
 | 
			
		||||
orbit_velocity_max = 0.0
 | 
			
		||||
gravity = Vector3(0, 0, 0)
 | 
			
		||||
scale_min = 2.0
 | 
			
		||||
scale_max = 2.0
 | 
			
		||||
color_ramp = SubResource("GradientTexture1D_te0n4")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,7 +59,10 @@ public partial class DynamicDoor : StaticBody2D
 | 
			
		|||
            {
 | 
			
		||||
                // rebake navmesh so NPCs can correctly travel conditionally
 | 
			
		||||
                GD.Print("Dynamic door updated; rebaking navmeshes...");
 | 
			
		||||
                navmesh.BakeNavigationPolygon();
 | 
			
		||||
                if (!navmesh.IsBaking())
 | 
			
		||||
                {
 | 
			
		||||
                    navmesh.BakeNavigationPolygon();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,7 +85,7 @@ tracks/2/keys = {
 | 
			
		|||
"times": PackedFloat32Array(0, 0.7),
 | 
			
		||||
"transitions": PackedFloat32Array(1, 1),
 | 
			
		||||
"update": 0,
 | 
			
		||||
"values": [0.5, 0.0]
 | 
			
		||||
"values": [1.0, 0.0]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_g3m4l"]
 | 
			
		||||
| 
						 | 
				
			
			@ -105,6 +105,7 @@ ProjectileName = "Lightning"
 | 
			
		|||
Hitbox = NodePath("Hitbox")
 | 
			
		||||
 | 
			
		||||
[node name="Sprite2D" type="Sprite2D" parent="."]
 | 
			
		||||
modulate = Color(4, 4, 4, 1)
 | 
			
		||||
material = SubResource("CanvasItemMaterial_3bsa7")
 | 
			
		||||
position = Vector2(0, 8)
 | 
			
		||||
texture = ExtResource("1_bf8ae")
 | 
			
		||||
| 
						 | 
				
			
			@ -119,6 +120,7 @@ libraries = {
 | 
			
		|||
 | 
			
		||||
[node name="Hitbox" parent="." instance=ExtResource("3_vlt1v")]
 | 
			
		||||
collision_layer = 0
 | 
			
		||||
priority = 5
 | 
			
		||||
Damage = 20.0
 | 
			
		||||
 | 
			
		||||
[node name="CollisionShape2D" parent="Hitbox" index="0"]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,59 +1,60 @@
 | 
			
		|||
[gd_scene load_steps=12 format=3 uid="uid://c1w7t6irnohfx"]
 | 
			
		||||
[gd_scene load_steps=13 format=3 uid="uid://c1w7t6irnohfx"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://har1bd5u4dq3" path="res://Assets/Sprites/Misc/torch.png" id="1_14bgb"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://cyfyelyq3o15s" path="res://Assets/Sprites/Misc/torch-fire.png" id="1_gnoxc"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://bitpf645g0prl" path="res://Assets/Sprites/Misc/torch-base.png" id="2_cwgtj"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://coarr28adgo1u" path="res://Assets/Sprites/Particles/point-light.png" id="2_hotvd"]
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_js1l1"]
 | 
			
		||||
atlas = ExtResource("1_14bgb")
 | 
			
		||||
region = Rect2(0, 0, 8, 12)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_vnjya"]
 | 
			
		||||
atlas = ExtResource("1_gnoxc")
 | 
			
		||||
region = Rect2(0, 0, 8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_gdxtl"]
 | 
			
		||||
atlas = ExtResource("1_14bgb")
 | 
			
		||||
region = Rect2(8, 0, 8, 12)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_l2emm"]
 | 
			
		||||
atlas = ExtResource("1_gnoxc")
 | 
			
		||||
region = Rect2(8, 0, 8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_da7fw"]
 | 
			
		||||
atlas = ExtResource("1_14bgb")
 | 
			
		||||
region = Rect2(16, 0, 8, 12)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_03weu"]
 | 
			
		||||
atlas = ExtResource("1_gnoxc")
 | 
			
		||||
region = Rect2(16, 0, 8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_rpccx"]
 | 
			
		||||
atlas = ExtResource("1_14bgb")
 | 
			
		||||
region = Rect2(24, 0, 8, 12)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_1fqw1"]
 | 
			
		||||
atlas = ExtResource("1_gnoxc")
 | 
			
		||||
region = Rect2(24, 0, 8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_crwu1"]
 | 
			
		||||
atlas = ExtResource("1_14bgb")
 | 
			
		||||
region = Rect2(32, 0, 8, 12)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_sj1bi"]
 | 
			
		||||
atlas = ExtResource("1_gnoxc")
 | 
			
		||||
region = Rect2(32, 0, 8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_r3kxc"]
 | 
			
		||||
atlas = ExtResource("1_14bgb")
 | 
			
		||||
region = Rect2(40, 0, 8, 12)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_1xpxx"]
 | 
			
		||||
atlas = ExtResource("1_gnoxc")
 | 
			
		||||
region = Rect2(40, 0, 8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_225la"]
 | 
			
		||||
atlas = ExtResource("1_14bgb")
 | 
			
		||||
region = Rect2(48, 0, 8, 12)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_dxfgw"]
 | 
			
		||||
atlas = ExtResource("1_gnoxc")
 | 
			
		||||
region = Rect2(48, 0, 8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="SpriteFrames" id="SpriteFrames_gf7ku"]
 | 
			
		||||
animations = [{
 | 
			
		||||
"frames": [{
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_js1l1")
 | 
			
		||||
"texture": SubResource("AtlasTexture_vnjya")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_gdxtl")
 | 
			
		||||
"texture": SubResource("AtlasTexture_l2emm")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_da7fw")
 | 
			
		||||
"texture": SubResource("AtlasTexture_03weu")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_rpccx")
 | 
			
		||||
"texture": SubResource("AtlasTexture_1fqw1")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_crwu1")
 | 
			
		||||
"texture": SubResource("AtlasTexture_sj1bi")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_r3kxc")
 | 
			
		||||
"texture": SubResource("AtlasTexture_1xpxx")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_225la")
 | 
			
		||||
"texture": SubResource("AtlasTexture_dxfgw")
 | 
			
		||||
}],
 | 
			
		||||
"loop": true,
 | 
			
		||||
"name": &"default",
 | 
			
		||||
| 
						 | 
				
			
			@ -64,18 +65,25 @@ animations = [{
 | 
			
		|||
radius = 4.0
 | 
			
		||||
 | 
			
		||||
[node name="Torch" type="Node2D"]
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
 | 
			
		||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
 | 
			
		||||
texture_filter = 1
 | 
			
		||||
position = Vector2(0, -10)
 | 
			
		||||
[node name="Sprites" type="Node2D" parent="."]
 | 
			
		||||
 | 
			
		||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Sprites"]
 | 
			
		||||
modulate = Color(3.5, 3.5, 3, 1)
 | 
			
		||||
position = Vector2(0, -14)
 | 
			
		||||
sprite_frames = SubResource("SpriteFrames_gf7ku")
 | 
			
		||||
autoplay = "default"
 | 
			
		||||
frame_progress = 0.337799
 | 
			
		||||
 | 
			
		||||
[node name="Sprite2D" type="Sprite2D" parent="Sprites"]
 | 
			
		||||
position = Vector2(0, -8)
 | 
			
		||||
texture = ExtResource("2_cwgtj")
 | 
			
		||||
 | 
			
		||||
[node name="PointLight2D" type="PointLight2D" parent="."]
 | 
			
		||||
color = Color(1, 0.976471, 0.92549, 1)
 | 
			
		||||
color = Color(1, 0.811765, 0.537255, 1)
 | 
			
		||||
energy = 1.2
 | 
			
		||||
blend_mode = 2
 | 
			
		||||
shadow_enabled = true
 | 
			
		||||
shadow_filter_smooth = 3.0
 | 
			
		||||
texture = ExtResource("2_hotvd")
 | 
			
		||||
offset = Vector2(0, 2)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,94 +1,96 @@
 | 
			
		|||
[gd_scene load_steps=16 format=3 uid="uid://ceadk7pam7vab"]
 | 
			
		||||
[gd_scene load_steps=18 format=3 uid="uid://ceadk7pam7vab"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://cyldr0ck3yfrp" path="res://Assets/Sprites/Misc/torch-lamp.png" id="1_dlkl0"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://coarr28adgo1u" path="res://Assets/Sprites/Particles/point-light.png" id="2_0xpf8"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://c1garalf1clsp" path="res://Assets/Sprites/Misc/flame-large.png" id="2_a6lwn"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://ca0htndnsb38k" path="res://Assets/Sprites/Misc/torch-lamp-base.png" id="2_bq1kw"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://i5ksh8i0q48o" path="res://Assets/Sprites/Misc/torch-lamp-base-back.png" id="3_vh465"]
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_ikvnd"]
 | 
			
		||||
atlas = ExtResource("1_dlkl0")
 | 
			
		||||
region = Rect2(0, 0, 12, 24)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_dtmd3"]
 | 
			
		||||
atlas = ExtResource("2_a6lwn")
 | 
			
		||||
region = Rect2(0, 0, 12, 14)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_b7wal"]
 | 
			
		||||
atlas = ExtResource("1_dlkl0")
 | 
			
		||||
region = Rect2(12, 0, 12, 24)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_irtpk"]
 | 
			
		||||
atlas = ExtResource("2_a6lwn")
 | 
			
		||||
region = Rect2(12, 0, 12, 14)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_68y2k"]
 | 
			
		||||
atlas = ExtResource("1_dlkl0")
 | 
			
		||||
region = Rect2(24, 0, 12, 24)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_0gb20"]
 | 
			
		||||
atlas = ExtResource("2_a6lwn")
 | 
			
		||||
region = Rect2(24, 0, 12, 14)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_eib4d"]
 | 
			
		||||
atlas = ExtResource("1_dlkl0")
 | 
			
		||||
region = Rect2(36, 0, 12, 24)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_5uhdg"]
 | 
			
		||||
atlas = ExtResource("2_a6lwn")
 | 
			
		||||
region = Rect2(36, 0, 12, 14)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_7q5cd"]
 | 
			
		||||
atlas = ExtResource("1_dlkl0")
 | 
			
		||||
region = Rect2(48, 0, 12, 24)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_e4moo"]
 | 
			
		||||
atlas = ExtResource("2_a6lwn")
 | 
			
		||||
region = Rect2(48, 0, 12, 14)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_k8jtr"]
 | 
			
		||||
atlas = ExtResource("1_dlkl0")
 | 
			
		||||
region = Rect2(60, 0, 12, 24)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_soja6"]
 | 
			
		||||
atlas = ExtResource("2_a6lwn")
 | 
			
		||||
region = Rect2(60, 0, 12, 14)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_egan1"]
 | 
			
		||||
atlas = ExtResource("1_dlkl0")
 | 
			
		||||
region = Rect2(72, 0, 12, 24)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_sn741"]
 | 
			
		||||
atlas = ExtResource("2_a6lwn")
 | 
			
		||||
region = Rect2(72, 0, 12, 14)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_eymjc"]
 | 
			
		||||
atlas = ExtResource("1_dlkl0")
 | 
			
		||||
region = Rect2(84, 0, 12, 24)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_r825r"]
 | 
			
		||||
atlas = ExtResource("2_a6lwn")
 | 
			
		||||
region = Rect2(84, 0, 12, 14)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_go3ky"]
 | 
			
		||||
atlas = ExtResource("1_dlkl0")
 | 
			
		||||
region = Rect2(96, 0, 12, 24)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_75y5m"]
 | 
			
		||||
atlas = ExtResource("2_a6lwn")
 | 
			
		||||
region = Rect2(96, 0, 12, 14)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_rvq52"]
 | 
			
		||||
atlas = ExtResource("1_dlkl0")
 | 
			
		||||
region = Rect2(108, 0, 12, 24)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_l8r4c"]
 | 
			
		||||
atlas = ExtResource("2_a6lwn")
 | 
			
		||||
region = Rect2(108, 0, 12, 14)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_cjdtb"]
 | 
			
		||||
atlas = ExtResource("1_dlkl0")
 | 
			
		||||
region = Rect2(120, 0, 12, 24)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_7gxo8"]
 | 
			
		||||
atlas = ExtResource("2_a6lwn")
 | 
			
		||||
region = Rect2(120, 0, 12, 14)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_vi5xh"]
 | 
			
		||||
atlas = ExtResource("1_dlkl0")
 | 
			
		||||
region = Rect2(132, 0, 12, 24)
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_60wov"]
 | 
			
		||||
atlas = ExtResource("2_a6lwn")
 | 
			
		||||
region = Rect2(132, 0, 12, 14)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="SpriteFrames" id="SpriteFrames_gf7ku"]
 | 
			
		||||
animations = [{
 | 
			
		||||
"frames": [{
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_ikvnd")
 | 
			
		||||
"texture": SubResource("AtlasTexture_dtmd3")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_b7wal")
 | 
			
		||||
"texture": SubResource("AtlasTexture_irtpk")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_68y2k")
 | 
			
		||||
"texture": SubResource("AtlasTexture_0gb20")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_eib4d")
 | 
			
		||||
"texture": SubResource("AtlasTexture_5uhdg")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_7q5cd")
 | 
			
		||||
"texture": SubResource("AtlasTexture_e4moo")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_k8jtr")
 | 
			
		||||
"texture": SubResource("AtlasTexture_soja6")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_egan1")
 | 
			
		||||
"texture": SubResource("AtlasTexture_sn741")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_eymjc")
 | 
			
		||||
"texture": SubResource("AtlasTexture_r825r")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_go3ky")
 | 
			
		||||
"texture": SubResource("AtlasTexture_75y5m")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_rvq52")
 | 
			
		||||
"texture": SubResource("AtlasTexture_l8r4c")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_cjdtb")
 | 
			
		||||
"texture": SubResource("AtlasTexture_7gxo8")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_vi5xh")
 | 
			
		||||
"texture": SubResource("AtlasTexture_60wov")
 | 
			
		||||
}],
 | 
			
		||||
"loop": true,
 | 
			
		||||
"name": &"default",
 | 
			
		||||
| 
						 | 
				
			
			@ -97,15 +99,26 @@ animations = [{
 | 
			
		|||
 | 
			
		||||
[node name="TorchLamp" type="Node2D"]
 | 
			
		||||
 | 
			
		||||
[node name="Sprite2D2" type="Sprite2D" parent="."]
 | 
			
		||||
texture = ExtResource("3_vh465")
 | 
			
		||||
centered = false
 | 
			
		||||
offset = Vector2(-6, -16)
 | 
			
		||||
 | 
			
		||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
 | 
			
		||||
modulate = Color(2.5, 2, 2, 1)
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
texture_filter = 1
 | 
			
		||||
position = Vector2(0, -6)
 | 
			
		||||
sprite_frames = SubResource("SpriteFrames_gf7ku")
 | 
			
		||||
autoplay = "default"
 | 
			
		||||
frame = 9
 | 
			
		||||
frame_progress = 0.966501
 | 
			
		||||
frame_progress = 0.557817
 | 
			
		||||
offset = Vector2(0, -12)
 | 
			
		||||
 | 
			
		||||
[node name="Sprite2D" type="Sprite2D" parent="."]
 | 
			
		||||
texture = ExtResource("2_bq1kw")
 | 
			
		||||
centered = false
 | 
			
		||||
offset = Vector2(-6, -16)
 | 
			
		||||
 | 
			
		||||
[node name="PointLight2D" type="PointLight2D" parent="."]
 | 
			
		||||
color = Color(1, 0.811765, 0.537255, 1)
 | 
			
		||||
energy = 1.2
 | 
			
		||||
| 
						 | 
				
			
			@ -113,3 +126,13 @@ blend_mode = 2
 | 
			
		|||
shadow_filter_smooth = 3.0
 | 
			
		||||
texture = ExtResource("2_0xpf8")
 | 
			
		||||
texture_scale = 0.25
 | 
			
		||||
 | 
			
		||||
[node name="PointLight2D2" type="PointLight2D" parent="."]
 | 
			
		||||
visible = false
 | 
			
		||||
color = Color(1, 0.811765, 0.537255, 1)
 | 
			
		||||
energy = 1.2
 | 
			
		||||
blend_mode = 2
 | 
			
		||||
range_item_cull_mask = 8
 | 
			
		||||
shadow_filter_smooth = 3.0
 | 
			
		||||
texture = ExtResource("2_0xpf8")
 | 
			
		||||
texture_scale = 0.25
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,7 +59,7 @@ public partial class UnwantedFrequency : Projectile, Utils.ITarget
 | 
			
		|||
        TrailPosition.Position = new Vector2(0, 4 * Mathf.Sin(radians));
 | 
			
		||||
        TrailPosition2.Position = -TrailPosition.Position;
 | 
			
		||||
 | 
			
		||||
        if (CharacterTarget is not null)
 | 
			
		||||
        if (CharacterTarget is not null && IsInstanceValid(CharacterTarget))
 | 
			
		||||
        {
 | 
			
		||||
            var pos = CharacterTarget.GlobalPosition;
 | 
			
		||||
            var desired = GlobalPosition.DirectionTo(pos);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
[gd_scene load_steps=24 format=3 uid="uid://1y5r6sklwgrp"]
 | 
			
		||||
[gd_scene load_steps=25 format=3 uid="uid://1y5r6sklwgrp"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Script" path="res://Entities/UnwantedFrequency.cs" id="1_6sbe0"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://du5vhccg75nrq" path="res://BoundingBoxes/Hitbox.tscn" id="2_gxtvd"]
 | 
			
		||||
| 
						 | 
				
			
			@ -10,17 +10,20 @@
 | 
			
		|||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_30y8q"]
 | 
			
		||||
size = Vector2(8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_dhurx"]
 | 
			
		||||
light_mode = 1
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Curve" id="Curve_eu273"]
 | 
			
		||||
_data = [Vector2(0.0618557, 0), 0.0, 0.0, 0, 0, Vector2(0.489691, 1), 0.0, 0.0, 0, 0]
 | 
			
		||||
point_count = 2
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Gradient" id="Gradient_dyqhb"]
 | 
			
		||||
offsets = PackedFloat32Array(0.00662252, 0.715232, 1)
 | 
			
		||||
colors = PackedColorArray(0.996078, 0, 0.164706, 0, 0.996045, 0, 0.166638, 1, 1, 1, 1, 1)
 | 
			
		||||
colors = PackedColorArray(0.996078, 0, 0.164706, 0, 1.992, 0, 0.334, 1, 2, 2, 2, 1)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Gradient" id="Gradient_m1y6u"]
 | 
			
		||||
offsets = PackedFloat32Array(0.00662252, 0.715232, 1)
 | 
			
		||||
colors = PackedColorArray(0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1)
 | 
			
		||||
colors = PackedColorArray(0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 1)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Gradient" id="Gradient_2q0ut"]
 | 
			
		||||
offsets = PackedFloat32Array(0.525926, 0.740741, 1)
 | 
			
		||||
| 
						 | 
				
			
			@ -132,11 +135,14 @@ Knockback = 324.0
 | 
			
		|||
shape = SubResource("RectangleShape2D_30y8q")
 | 
			
		||||
 | 
			
		||||
[node name="TrailRotation" type="Node2D" parent="."]
 | 
			
		||||
material = SubResource("CanvasItemMaterial_dhurx")
 | 
			
		||||
 | 
			
		||||
[node name="TrailPosition" type="Node2D" parent="TrailRotation"]
 | 
			
		||||
use_parent_material = true
 | 
			
		||||
 | 
			
		||||
[node name="Trail" parent="TrailRotation/TrailPosition" instance=ExtResource("3_67uhs")]
 | 
			
		||||
self_modulate = Color(2, 2, 2, 1)
 | 
			
		||||
use_parent_material = true
 | 
			
		||||
width = 2.0
 | 
			
		||||
width_curve = SubResource("Curve_eu273")
 | 
			
		||||
default_color = Color(1, 0.0862745, 0.207843, 1)
 | 
			
		||||
| 
						 | 
				
			
			@ -148,9 +154,11 @@ MaximumPoints = 64
 | 
			
		|||
Frequency = 30
 | 
			
		||||
 | 
			
		||||
[node name="TrailPosition2" type="Node2D" parent="TrailRotation"]
 | 
			
		||||
use_parent_material = true
 | 
			
		||||
 | 
			
		||||
[node name="Trail" parent="TrailRotation/TrailPosition2" instance=ExtResource("3_67uhs")]
 | 
			
		||||
self_modulate = Color(2, 2, 2, 1)
 | 
			
		||||
use_parent_material = true
 | 
			
		||||
width = 2.0
 | 
			
		||||
width_curve = SubResource("Curve_eu273")
 | 
			
		||||
gradient = SubResource("Gradient_m1y6u")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,6 +36,9 @@ public partial class EventBus : Node
 | 
			
		|||
    [Signal]
 | 
			
		||||
    public delegate void PlayerStunEventHandler();
 | 
			
		||||
 | 
			
		||||
    [Signal]
 | 
			
		||||
    public delegate void PlayerOpenInventoryEventHandler(Items.Inventory inventory);
 | 
			
		||||
 | 
			
		||||
    [Signal]
 | 
			
		||||
    public delegate void RegisteredBossEventHandler(Characters.Boss boss);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
using Godot;
 | 
			
		||||
using IEnumerableNode = System.Collections.Generic.IEnumerable<Godot.Node>;
 | 
			
		||||
 | 
			
		||||
namespace SupaLidlGame.Extensions;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -55,4 +56,13 @@ public static class NodeExtensions
 | 
			
		|||
        return node.GetNode<UI.UIController>("/root/BaseUI/" +
 | 
			
		||||
            "SubViewportContainer/UIViewport/CanvasLayer/MainUILayer/Main");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static IEnumerableNode GetChildrenEnumerable(this Node node)
 | 
			
		||||
    {
 | 
			
		||||
        int childCount = node.GetChildCount();
 | 
			
		||||
        for (int i = 0; i < childCount; i++)
 | 
			
		||||
        {
 | 
			
		||||
            yield return node.GetChild(i);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,10 +11,11 @@ public partial class Inventory : Node2D, IItemCollection<ItemMetadata>
 | 
			
		|||
    [Export]
 | 
			
		||||
    public Array<Item> Hotbar { get; private set; }
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public Array<ItemMetadata> Items { get; private set; }
 | 
			
		||||
    public Array<int> HotbarToItemIndexMap { get; set; } = new();
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public Array<ItemMetadata> Items { get; set; }
 | 
			
		||||
 | 
			
		||||
    public Dictionary<string, int> InventoryMap { get; set; }
 | 
			
		||||
 | 
			
		||||
    [Signal]
 | 
			
		||||
| 
						 | 
				
			
			@ -62,6 +63,12 @@ public partial class Inventory : Node2D, IItemCollection<ItemMetadata>
 | 
			
		|||
 | 
			
		||||
    public bool IsUsingItem => SelectedItem?.IsUsing ?? false;
 | 
			
		||||
 | 
			
		||||
    public Inventory()
 | 
			
		||||
    {
 | 
			
		||||
        HotbarToItemIndexMap.Resize(HotbarCapacity);
 | 
			
		||||
        HotbarToItemIndexMap.Fill(-1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public override void _Ready()
 | 
			
		||||
    {
 | 
			
		||||
        if (Hotbar is null)
 | 
			
		||||
| 
						 | 
				
			
			@ -69,6 +76,7 @@ public partial class Inventory : Node2D, IItemCollection<ItemMetadata>
 | 
			
		|||
            // instantiating a new array will prevent characters from
 | 
			
		||||
            // sharing inventories
 | 
			
		||||
            Hotbar = new();
 | 
			
		||||
            Hotbar.Resize(HotbarCapacity);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (Items is null)
 | 
			
		||||
| 
						 | 
				
			
			@ -111,8 +119,6 @@ public partial class Inventory : Node2D, IItemCollection<ItemMetadata>
 | 
			
		|||
 | 
			
		||||
        EmitSignal(SignalName.EquippedItem, prevItem, _selectedItem);
 | 
			
		||||
 | 
			
		||||
        GD.Print($"Inventory: {index} is new selected index.");
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -156,6 +162,47 @@ public partial class Inventory : Node2D, IItemCollection<ItemMetadata>
 | 
			
		|||
        return item;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Item SetHotbarIndexToItemIndex(int hotbarIndex, int itemIndex)
 | 
			
		||||
    {
 | 
			
		||||
        HotbarToItemIndexMap[hotbarIndex] = itemIndex;
 | 
			
		||||
 | 
			
		||||
        if (itemIndex >= 0)
 | 
			
		||||
        {
 | 
			
		||||
            return SetHotbarIndexToItem(hotbarIndex, Items[itemIndex]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Item SetHotbarIndexToItem(int index, ItemMetadata metadata)
 | 
			
		||||
    {
 | 
			
		||||
        var oldItem = Hotbar[index];
 | 
			
		||||
        Item newItem = null;
 | 
			
		||||
 | 
			
		||||
        if (IsInstanceValid(oldItem))
 | 
			
		||||
        {
 | 
			
		||||
            oldItem?.QueueFree();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (metadata is not null)
 | 
			
		||||
        {
 | 
			
		||||
            newItem = metadata.Instance.Instantiate<Item>();
 | 
			
		||||
            AddChild(newItem);
 | 
			
		||||
            Hotbar[index] = newItem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (SelectedIndex == index)
 | 
			
		||||
        {
 | 
			
		||||
            // equip item if the hotbar index we are setting is selected
 | 
			
		||||
            EquipIndex(index);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        var bus = Events.EventBus.Instance;
 | 
			
		||||
        bus.EmitSignal(Events.EventBus.SignalName.PlayerInventoryUpdate, this);
 | 
			
		||||
 | 
			
		||||
        return newItem;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Item AddItem(Item item)
 | 
			
		||||
    {
 | 
			
		||||
        if (Hotbar.Count >= HotbarCapacity)
 | 
			
		||||
| 
						 | 
				
			
			@ -192,6 +239,21 @@ public partial class Inventory : Node2D, IItemCollection<ItemMetadata>
 | 
			
		|||
 | 
			
		||||
    public bool Remove(ItemMetadata item)
 | 
			
		||||
    {
 | 
			
		||||
        int indexInInventory = Items.IndexOf(item);
 | 
			
		||||
        if (indexInInventory < 0)
 | 
			
		||||
        {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // remove instances of item from hotbar
 | 
			
		||||
        int indexInHotbar = HotbarToItemIndexMap.IndexOf(indexInInventory);
 | 
			
		||||
        if (indexInHotbar >= 0)
 | 
			
		||||
        {
 | 
			
		||||
            HotbarToItemIndexMap[indexInHotbar] = -1;
 | 
			
		||||
            Hotbar[indexInHotbar].QueueFree();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Items[indexInInventory] = null;
 | 
			
		||||
        return Items.Remove(item);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,4 +65,15 @@ public abstract partial class Item : Node2D
 | 
			
		|||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public virtual void Remove()
 | 
			
		||||
    {
 | 
			
		||||
        if (IsUsing)
 | 
			
		||||
        {
 | 
			
		||||
            Deuse();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Unequip(CharacterOwner);
 | 
			
		||||
        QueueFree();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
using Godot;
 | 
			
		||||
using SupaLidlGame.Extensions;
 | 
			
		||||
 | 
			
		||||
namespace SupaLidlGame.Items.Weapons;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -8,19 +9,47 @@ public partial class Bow : ProjectileSpawner
 | 
			
		|||
 | 
			
		||||
    protected Area2D _ignitionArea;
 | 
			
		||||
 | 
			
		||||
    protected override void SpawnProjectile(Scenes.Map map,
 | 
			
		||||
    protected override Entities.Projectile SpawnProjectile(Scenes.Map map,
 | 
			
		||||
        Vector2 direction, float velocityModifier = 1)
 | 
			
		||||
    {
 | 
			
		||||
        base.SpawnProjectile(map, direction, velocityModifier);
 | 
			
		||||
        var projectile = base.SpawnProjectile(map, direction, velocityModifier);
 | 
			
		||||
 | 
			
		||||
        if (_isOnFire)
 | 
			
		||||
        {
 | 
			
		||||
            var flame = GetNode<AnimatedSprite2D>("%Flame");
 | 
			
		||||
 | 
			
		||||
            var newFlame = flame.Duplicate() as Node2D;
 | 
			
		||||
            projectile.AddChild(newFlame);
 | 
			
		||||
 | 
			
		||||
            newFlame.Position = Vector2.Zero;
 | 
			
		||||
 | 
			
		||||
            flame.Visible = false;
 | 
			
		||||
            // TODO: instead of doing 1.5x damage, create an "On Fire" debuff
 | 
			
		||||
            projectile.Hitbox.Damage *= 1.5f;
 | 
			
		||||
            _isOnFire = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return projectile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public override void _Ready()
 | 
			
		||||
    {
 | 
			
		||||
        base._Ready();
 | 
			
		||||
        _ignitionArea = GetNode<Area2D>("IgnitionArea");
 | 
			
		||||
        _ignitionArea.AreaEntered += (Area2D area) =>
 | 
			
		||||
        var onAreaEntered = (Area2D area) =>
 | 
			
		||||
        {
 | 
			
		||||
            _isOnFire = false;
 | 
			
		||||
            if (!_isOnFire)
 | 
			
		||||
            {
 | 
			
		||||
                var flame = GetNode<AnimatedSprite2D>("%Flame");
 | 
			
		||||
                flame.Visible = true;
 | 
			
		||||
                flame.GetNode<AudioStreamPlayer2D>("Ignite")
 | 
			
		||||
                    .OnWorld()
 | 
			
		||||
                    .PlayOneShot();
 | 
			
		||||
                _isOnFire = true;
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
        _ignitionArea.Connect(
 | 
			
		||||
            Area2D.SignalName.AreaEntered,
 | 
			
		||||
            Callable.From(onAreaEntered));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,75 @@
 | 
			
		|||
[gd_scene load_steps=17 format=3 uid="uid://cgg0sfm2qeiwn"]
 | 
			
		||||
[gd_scene load_steps=29 format=3 uid="uid://cgg0sfm2qeiwn"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://dam6aigkw8xs" path="res://Assets/Sprites/Items/bow-and-arrow.png" id="1_1ghvv"]
 | 
			
		||||
[ext_resource type="Script" path="res://Items/Weapons/ProjectileSpawner.cs" id="1_76bur"]
 | 
			
		||||
[ext_resource type="Script" path="res://Items/Weapons/Bow.cs" id="1_ikgu2"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://cjiftn2suskla" path="res://Entities/Arrow.tscn" id="2_mvw0j"]
 | 
			
		||||
[ext_resource type="Resource" uid="uid://cjsh0dcgbfn77" path="res://Items/Weapons/Bow.tres" id="3_j7q7r"]
 | 
			
		||||
[ext_resource type="Script" path="res://State/Weapon/WeaponStateMachine.cs" id="3_pg4gy"]
 | 
			
		||||
[ext_resource type="Script" path="res://State/Weapon/RangedIdleState.cs" id="3_uxif8"]
 | 
			
		||||
[ext_resource type="Script" path="res://State/Weapon/RangedFireState.cs" id="4_moo4d"]
 | 
			
		||||
[ext_resource type="Script" path="res://State/Weapon/RangedChargeState.cs" id="5_k8y6f"]
 | 
			
		||||
[ext_resource type="Script" path="res://State/Weapon/BowAltState.cs" id="7_l73rl"]
 | 
			
		||||
[ext_resource type="AudioStream" uid="uid://bkekgj4gu7fw4" path="res://Assets/Sounds/bow-draw.wav" id="7_t07v0"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://coarr28adgo1u" path="res://Assets/Sprites/Particles/point-light.png" id="9_tk6lc"]
 | 
			
		||||
[ext_resource type="AudioStream" uid="uid://cwy4giq8eod5g" path="res://Assets/Sounds/bow-release.wav" id="9_v051g"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://dj1vsctgh1scr" path="res://Assets/Sprites/Misc/flame.png" id="9_xwcvy"]
 | 
			
		||||
[ext_resource type="AudioStream" uid="uid://braj74by0oowo" path="res://Assets/Sounds/fire-burst-flash.wav" id="11_65ega"]
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_5af70"]
 | 
			
		||||
atlas = ExtResource("9_xwcvy")
 | 
			
		||||
region = Rect2(0, 0, 8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_bct7o"]
 | 
			
		||||
atlas = ExtResource("9_xwcvy")
 | 
			
		||||
region = Rect2(8, 0, 8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_fhtjn"]
 | 
			
		||||
atlas = ExtResource("9_xwcvy")
 | 
			
		||||
region = Rect2(16, 0, 8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_si88l"]
 | 
			
		||||
atlas = ExtResource("9_xwcvy")
 | 
			
		||||
region = Rect2(24, 0, 8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_ap5vw"]
 | 
			
		||||
atlas = ExtResource("9_xwcvy")
 | 
			
		||||
region = Rect2(32, 0, 8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_uad0p"]
 | 
			
		||||
atlas = ExtResource("9_xwcvy")
 | 
			
		||||
region = Rect2(40, 0, 8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="AtlasTexture" id="AtlasTexture_cxv2f"]
 | 
			
		||||
atlas = ExtResource("9_xwcvy")
 | 
			
		||||
region = Rect2(48, 0, 8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="SpriteFrames" id="SpriteFrames_b2khh"]
 | 
			
		||||
animations = [{
 | 
			
		||||
"frames": [{
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_5af70")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_bct7o")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_fhtjn")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_si88l")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_ap5vw")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_uad0p")
 | 
			
		||||
}, {
 | 
			
		||||
"duration": 1.0,
 | 
			
		||||
"texture": SubResource("AtlasTexture_cxv2f")
 | 
			
		||||
}],
 | 
			
		||||
"loop": true,
 | 
			
		||||
"name": &"default",
 | 
			
		||||
"speed": 10.0
 | 
			
		||||
}]
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Animation" id="Animation_h0fti"]
 | 
			
		||||
resource_name = "RESET"
 | 
			
		||||
| 
						 | 
				
			
			@ -25,6 +85,101 @@ tracks/0/keys = {
 | 
			
		|||
"update": 1,
 | 
			
		||||
"values": [0]
 | 
			
		||||
}
 | 
			
		||||
tracks/1/type = "value"
 | 
			
		||||
tracks/1/imported = false
 | 
			
		||||
tracks/1/enabled = true
 | 
			
		||||
tracks/1/path = NodePath("Anchor/Flame:position")
 | 
			
		||||
tracks/1/interp = 1
 | 
			
		||||
tracks/1/loop_wrap = true
 | 
			
		||||
tracks/1/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0),
 | 
			
		||||
"transitions": PackedFloat32Array(1),
 | 
			
		||||
"update": 0,
 | 
			
		||||
"values": [Vector2(15, -4)]
 | 
			
		||||
}
 | 
			
		||||
tracks/2/type = "value"
 | 
			
		||||
tracks/2/imported = false
 | 
			
		||||
tracks/2/enabled = true
 | 
			
		||||
tracks/2/path = NodePath("Anchor/Flame:visible")
 | 
			
		||||
tracks/2/interp = 1
 | 
			
		||||
tracks/2/loop_wrap = true
 | 
			
		||||
tracks/2/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0),
 | 
			
		||||
"transitions": PackedFloat32Array(1),
 | 
			
		||||
"update": 1,
 | 
			
		||||
"values": [false]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Animation" id="Animation_bejvb"]
 | 
			
		||||
resource_name = "alt_fire"
 | 
			
		||||
step = 0.05
 | 
			
		||||
tracks/0/type = "value"
 | 
			
		||||
tracks/0/imported = false
 | 
			
		||||
tracks/0/enabled = true
 | 
			
		||||
tracks/0/path = NodePath("Anchor/Sprite2D:frame")
 | 
			
		||||
tracks/0/interp = 1
 | 
			
		||||
tracks/0/loop_wrap = true
 | 
			
		||||
tracks/0/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8),
 | 
			
		||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1),
 | 
			
		||||
"update": 1,
 | 
			
		||||
"values": [0, 5, 0, 5, 0, 5, 0, 5, 0]
 | 
			
		||||
}
 | 
			
		||||
tracks/1/type = "audio"
 | 
			
		||||
tracks/1/imported = false
 | 
			
		||||
tracks/1/enabled = true
 | 
			
		||||
tracks/1/path = NodePath("AudioStreamPlayer2D")
 | 
			
		||||
tracks/1/interp = 1
 | 
			
		||||
tracks/1/loop_wrap = true
 | 
			
		||||
tracks/1/keys = {
 | 
			
		||||
"clips": [{
 | 
			
		||||
"end_offset": 0.0,
 | 
			
		||||
"start_offset": 0.03,
 | 
			
		||||
"stream": ExtResource("9_v051g")
 | 
			
		||||
}, {
 | 
			
		||||
"end_offset": 0.0,
 | 
			
		||||
"start_offset": 0.03,
 | 
			
		||||
"stream": ExtResource("9_v051g")
 | 
			
		||||
}, {
 | 
			
		||||
"end_offset": 0.0,
 | 
			
		||||
"start_offset": 0.03,
 | 
			
		||||
"stream": ExtResource("9_v051g")
 | 
			
		||||
}, {
 | 
			
		||||
"end_offset": 0.0,
 | 
			
		||||
"start_offset": 0.03,
 | 
			
		||||
"stream": ExtResource("9_v051g")
 | 
			
		||||
}, {
 | 
			
		||||
"end_offset": 0.0,
 | 
			
		||||
"start_offset": 0.03,
 | 
			
		||||
"stream": ExtResource("9_v051g")
 | 
			
		||||
}],
 | 
			
		||||
"times": PackedFloat32Array(0, 0.1998, 0.3996, 0.5994, 0.7992)
 | 
			
		||||
}
 | 
			
		||||
tracks/1/use_blend = true
 | 
			
		||||
tracks/2/type = "value"
 | 
			
		||||
tracks/2/imported = false
 | 
			
		||||
tracks/2/enabled = true
 | 
			
		||||
tracks/2/path = NodePath("Anchor/Flame:position")
 | 
			
		||||
tracks/2/interp = 1
 | 
			
		||||
tracks/2/loop_wrap = true
 | 
			
		||||
tracks/2/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0),
 | 
			
		||||
"transitions": PackedFloat32Array(1),
 | 
			
		||||
"update": 0,
 | 
			
		||||
"values": [Vector2(15, -4)]
 | 
			
		||||
}
 | 
			
		||||
tracks/3/type = "value"
 | 
			
		||||
tracks/3/imported = false
 | 
			
		||||
tracks/3/enabled = true
 | 
			
		||||
tracks/3/path = NodePath("Anchor/Flame:visible")
 | 
			
		||||
tracks/3/interp = 1
 | 
			
		||||
tracks/3/loop_wrap = true
 | 
			
		||||
tracks/3/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0),
 | 
			
		||||
"transitions": PackedFloat32Array(1),
 | 
			
		||||
"update": 1,
 | 
			
		||||
"values": [false]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Animation" id="Animation_8qr8x"]
 | 
			
		||||
resource_name = "charge"
 | 
			
		||||
| 
						 | 
				
			
			@ -56,8 +211,20 @@ tracks/1/keys = {
 | 
			
		|||
"times": PackedFloat32Array(0)
 | 
			
		||||
}
 | 
			
		||||
tracks/1/use_blend = true
 | 
			
		||||
tracks/2/type = "value"
 | 
			
		||||
tracks/2/imported = false
 | 
			
		||||
tracks/2/enabled = true
 | 
			
		||||
tracks/2/path = NodePath("Anchor/Flame:position")
 | 
			
		||||
tracks/2/interp = 1
 | 
			
		||||
tracks/2/loop_wrap = true
 | 
			
		||||
tracks/2/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5),
 | 
			
		||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
 | 
			
		||||
"update": 1,
 | 
			
		||||
"values": [Vector2(15, -4), Vector2(14, -4), Vector2(13, -4), Vector2(12, -4), Vector2(11, -4), Vector2(9, -4)]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Animation" id="Animation_bejvb"]
 | 
			
		||||
[sub_resource type="Animation" id="Animation_j5qtq"]
 | 
			
		||||
resource_name = "fire"
 | 
			
		||||
tracks/0/type = "value"
 | 
			
		||||
tracks/0/imported = false
 | 
			
		||||
| 
						 | 
				
			
			@ -86,6 +253,30 @@ tracks/1/keys = {
 | 
			
		|||
"times": PackedFloat32Array(0)
 | 
			
		||||
}
 | 
			
		||||
tracks/1/use_blend = true
 | 
			
		||||
tracks/2/type = "value"
 | 
			
		||||
tracks/2/imported = false
 | 
			
		||||
tracks/2/enabled = true
 | 
			
		||||
tracks/2/path = NodePath("Anchor/Flame:position")
 | 
			
		||||
tracks/2/interp = 1
 | 
			
		||||
tracks/2/loop_wrap = true
 | 
			
		||||
tracks/2/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0),
 | 
			
		||||
"transitions": PackedFloat32Array(1),
 | 
			
		||||
"update": 0,
 | 
			
		||||
"values": [Vector2(15, -4)]
 | 
			
		||||
}
 | 
			
		||||
tracks/3/type = "value"
 | 
			
		||||
tracks/3/imported = false
 | 
			
		||||
tracks/3/enabled = true
 | 
			
		||||
tracks/3/path = NodePath("Anchor/Flame:visible")
 | 
			
		||||
tracks/3/interp = 1
 | 
			
		||||
tracks/3/loop_wrap = true
 | 
			
		||||
tracks/3/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0),
 | 
			
		||||
"transitions": PackedFloat32Array(1),
 | 
			
		||||
"update": 1,
 | 
			
		||||
"values": [false]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Animation" id="Animation_riv7t"]
 | 
			
		||||
resource_name = "idle"
 | 
			
		||||
| 
						 | 
				
			
			@ -105,8 +296,9 @@ tracks/0/keys = {
 | 
			
		|||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_5vx8d"]
 | 
			
		||||
_data = {
 | 
			
		||||
"RESET": SubResource("Animation_h0fti"),
 | 
			
		||||
"alt_fire": SubResource("Animation_bejvb"),
 | 
			
		||||
"charge": SubResource("Animation_8qr8x"),
 | 
			
		||||
"fire": SubResource("Animation_bejvb"),
 | 
			
		||||
"fire": SubResource("Animation_j5qtq"),
 | 
			
		||||
"idle": SubResource("Animation_riv7t")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -114,27 +306,29 @@ _data = {
 | 
			
		|||
 | 
			
		||||
[node name="Bow" type="Node2D" node_paths=PackedStringArray("StateMachine")]
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
script = ExtResource("1_76bur")
 | 
			
		||||
script = ExtResource("1_ikgu2")
 | 
			
		||||
Projectile = ExtResource("2_mvw0j")
 | 
			
		||||
ChargeTime = 0.5
 | 
			
		||||
StateMachine = NodePath("StateMachine")
 | 
			
		||||
Damage = 20.0
 | 
			
		||||
UseTime = 0.5
 | 
			
		||||
UseAltTime = 0.2
 | 
			
		||||
Knockback = 64.0
 | 
			
		||||
InitialVelocity = 200.0
 | 
			
		||||
ShouldFreezeAngleOnUse = false
 | 
			
		||||
PlayerLevelGain = 1.0
 | 
			
		||||
Metadata = ExtResource("3_j7q7r")
 | 
			
		||||
 | 
			
		||||
[node name="StateMachine" type="Node" parent="." node_paths=PackedStringArray("InitialState")]
 | 
			
		||||
script = ExtResource("3_pg4gy")
 | 
			
		||||
InitialState = NodePath("Idle")
 | 
			
		||||
UsedItemStates = Array[NodePath]([NodePath("Charge"), NodePath("Fire")])
 | 
			
		||||
UsedItemAltStates = Array[NodePath]([NodePath("AltFire")])
 | 
			
		||||
DeusedItemStates = Array[NodePath]([NodePath("Idle")])
 | 
			
		||||
 | 
			
		||||
[node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("FireState", "Weapon", "AnimationPlayer")]
 | 
			
		||||
[node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("FireState", "AltFireState", "Weapon", "AnimationPlayer")]
 | 
			
		||||
script = ExtResource("3_uxif8")
 | 
			
		||||
FireState = NodePath("../Charge")
 | 
			
		||||
AltFireState = NodePath("../AltFire")
 | 
			
		||||
Weapon = NodePath("../..")
 | 
			
		||||
AnimationPlayer = NodePath("../../AnimationPlayer")
 | 
			
		||||
AnimationKey = "idle"
 | 
			
		||||
| 
						 | 
				
			
			@ -154,6 +348,14 @@ IdleState = NodePath("../Idle")
 | 
			
		|||
AnimationPlayer = NodePath("../../AnimationPlayer")
 | 
			
		||||
AnimationKey = "fire"
 | 
			
		||||
 | 
			
		||||
[node name="AltFire" type="Node" parent="StateMachine" node_paths=PackedStringArray("Bow", "IdleState", "AnimationPlayer")]
 | 
			
		||||
script = ExtResource("7_l73rl")
 | 
			
		||||
Bow = NodePath("../..")
 | 
			
		||||
IdleState = NodePath("../Idle")
 | 
			
		||||
AnimationPlayer = NodePath("../../AnimationPlayer")
 | 
			
		||||
AnimationKey = "alt_fire"
 | 
			
		||||
AngleDeviation = 30.0
 | 
			
		||||
 | 
			
		||||
[node name="Anchor" type="Node2D" parent="."]
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
position = Vector2(0, 4)
 | 
			
		||||
| 
						 | 
				
			
			@ -166,6 +368,25 @@ centered = false
 | 
			
		|||
offset = Vector2(-8, -16)
 | 
			
		||||
hframes = 8
 | 
			
		||||
 | 
			
		||||
[node name="Flame" type="AnimatedSprite2D" parent="Anchor"]
 | 
			
		||||
unique_name_in_owner = true
 | 
			
		||||
visible = false
 | 
			
		||||
modulate = Color(3, 3, 3, 1)
 | 
			
		||||
position = Vector2(15, -4)
 | 
			
		||||
sprite_frames = SubResource("SpriteFrames_b2khh")
 | 
			
		||||
autoplay = "default"
 | 
			
		||||
frame_progress = 0.1652
 | 
			
		||||
offset = Vector2(0, -4)
 | 
			
		||||
 | 
			
		||||
[node name="PointLight2D" type="PointLight2D" parent="Anchor/Flame"]
 | 
			
		||||
color = Color(1, 0.8, 0.701961, 1)
 | 
			
		||||
energy = 0.5
 | 
			
		||||
texture = ExtResource("9_tk6lc")
 | 
			
		||||
texture_scale = 0.13
 | 
			
		||||
 | 
			
		||||
[node name="Ignite" type="AudioStreamPlayer2D" parent="Anchor/Flame"]
 | 
			
		||||
stream = ExtResource("11_65ega")
 | 
			
		||||
 | 
			
		||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
 | 
			
		||||
libraries = {
 | 
			
		||||
"": SubResource("AnimationLibrary_5vx8d")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ public partial class ProjectileSpawner : Ranged
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected virtual void SpawnProjectile(Scenes.Map map,
 | 
			
		||||
    protected virtual Entities.Projectile SpawnProjectile(Scenes.Map map,
 | 
			
		||||
        Vector2 direction, float velocityModifier = 1)
 | 
			
		||||
    {
 | 
			
		||||
        var projectile = map.SpawnEntity<Entities.Projectile>(Projectile);
 | 
			
		||||
| 
						 | 
				
			
			@ -70,6 +70,7 @@ public partial class ProjectileSpawner : Ranged
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return projectile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public override void Attack()
 | 
			
		||||
| 
						 | 
				
			
			@ -85,6 +86,12 @@ public partial class ProjectileSpawner : Ranged
 | 
			
		|||
 | 
			
		||||
        Vector2 target = Character.Target.Normalized();
 | 
			
		||||
 | 
			
		||||
        if (AngleDeviation > 0)
 | 
			
		||||
        {
 | 
			
		||||
            float angle = (GD.Randf() - 0.5f) * AngleDeviation;
 | 
			
		||||
            target = target.Rotated(Mathf.DegToRad(angle));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (CharacterRecoil > 0)
 | 
			
		||||
        {
 | 
			
		||||
            Character.ApplyImpulse(-target * CharacterRecoil);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
[gd_scene load_steps=30 format=3 uid="uid://5y1acxl4j4n7"]
 | 
			
		||||
[gd_scene load_steps=29 format=3 uid="uid://5y1acxl4j4n7"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Script" path="res://Items/Weapons/Sword.cs" id="1_mai31"]
 | 
			
		||||
[ext_resource type="Script" path="res://State/Weapon/WeaponStateMachine.cs" id="2_5ramr"]
 | 
			
		||||
| 
						 | 
				
			
			@ -19,11 +19,6 @@
 | 
			
		|||
[ext_resource type="AudioStream" uid="uid://qvthq6tppp63" path="res://Assets/Sounds/whoosh.wav" id="12_a8o3x"]
 | 
			
		||||
[ext_resource type="AudioStream" uid="uid://c4n7ioxpukdwi" path="res://Assets/Sounds/parry.wav" id="13_t5wmj"]
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Environment" id="Environment_72txp"]
 | 
			
		||||
background_mode = 3
 | 
			
		||||
glow_enabled = true
 | 
			
		||||
glow_hdr_threshold = 1.42
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Animation" id="Animation_b7327"]
 | 
			
		||||
length = 0.001
 | 
			
		||||
tracks/0/type = "value"
 | 
			
		||||
| 
						 | 
				
			
			@ -382,9 +377,6 @@ IdleState = NodePath("../Idle")
 | 
			
		|||
UseState = NodePath("../Anticipate")
 | 
			
		||||
BlockAnimKey = "block"
 | 
			
		||||
 | 
			
		||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
 | 
			
		||||
environment = SubResource("Environment_72txp")
 | 
			
		||||
 | 
			
		||||
[node name="Anchor" type="Node2D" parent="."]
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
rotation = 3.14159
 | 
			
		||||
| 
						 | 
				
			
			@ -420,7 +412,6 @@ libraries = {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
[node name="Hitbox" parent="." instance=ExtResource("9_qimey")]
 | 
			
		||||
priority = 5
 | 
			
		||||
IsDisabled = true
 | 
			
		||||
 | 
			
		||||
[node name="CollisionShape2D" parent="Hitbox" index="0"]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,12 +29,24 @@ public abstract partial class Ranged : Weapon
 | 
			
		|||
        base.Use();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public override void UseAlt()
 | 
			
		||||
    {
 | 
			
		||||
        StateMachine.UseAlt();
 | 
			
		||||
        base.Use();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public override void Deuse()
 | 
			
		||||
    {
 | 
			
		||||
        StateMachine.Deuse();
 | 
			
		||||
        base.Deuse();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public override void DeuseAlt()
 | 
			
		||||
    {
 | 
			
		||||
        StateMachine.DeuseAlt();
 | 
			
		||||
        base.Deuse();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public override void _Process(double delta)
 | 
			
		||||
    {
 | 
			
		||||
        StateMachine.Process(delta);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,9 +65,9 @@ tracks/0/path = NodePath("Anchor:position")
 | 
			
		|||
tracks/0/interp = 1
 | 
			
		||||
tracks/0/loop_wrap = true
 | 
			
		||||
tracks/0/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0, 0.5),
 | 
			
		||||
"times": PackedFloat32Array(0, 0.2),
 | 
			
		||||
"transitions": PackedFloat32Array(1, 1),
 | 
			
		||||
"update": 1,
 | 
			
		||||
"update": 0,
 | 
			
		||||
"values": [Vector2(-4, 0), Vector2(0, 0)]
 | 
			
		||||
}
 | 
			
		||||
tracks/1/type = "audio"
 | 
			
		||||
| 
						 | 
				
			
			@ -92,10 +92,10 @@ tracks/2/path = NodePath("Anchor:rotation")
 | 
			
		|||
tracks/2/interp = 1
 | 
			
		||||
tracks/2/loop_wrap = true
 | 
			
		||||
tracks/2/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0, 1, 1.5),
 | 
			
		||||
"transitions": PackedFloat32Array(1, 1, 1),
 | 
			
		||||
"times": PackedFloat32Array(0, 0.1, 1, 1.5),
 | 
			
		||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
 | 
			
		||||
"update": 0,
 | 
			
		||||
"values": [6.28319, 6.28319, 0.0]
 | 
			
		||||
"values": [6.19592, 6.28319, 6.28319, 0.0]
 | 
			
		||||
}
 | 
			
		||||
tracks/3/type = "audio"
 | 
			
		||||
tracks/3/imported = false
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -206,6 +206,11 @@ public partial class Sword : Weapon, IParryable
 | 
			
		|||
                    this);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (Hitbox.Hits.Count > 0)
 | 
			
		||||
        {
 | 
			
		||||
            Character.ApplyImpulse(-Character.Target.Normalized() * Knockback);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void AttemptParry(Weapon otherWeapon)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
[gd_scene load_steps=26 format=3 uid="uid://dvqap2uhcah63"]
 | 
			
		||||
[gd_scene load_steps=25 format=3 uid="uid://dvqap2uhcah63"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Script" path="res://Items/Weapons/Sword.cs" id="1_mlo73"]
 | 
			
		||||
[ext_resource type="Resource" uid="uid://cl7jvdu2lnv2d" path="res://Items/Weapons/Sword.tres" id="2_atd4f"]
 | 
			
		||||
| 
						 | 
				
			
			@ -16,11 +16,6 @@
 | 
			
		|||
[ext_resource type="Texture2D" uid="uid://cmvh6pc71ir1m" path="res://Assets/Sprites/sword-swing-large.png" id="10_672jv"]
 | 
			
		||||
[ext_resource type="AudioStream" uid="uid://qvthq6tppp63" path="res://Assets/Sounds/whoosh.wav" id="10_mfnl7"]
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Environment" id="Environment_72txp"]
 | 
			
		||||
background_mode = 3
 | 
			
		||||
glow_enabled = true
 | 
			
		||||
glow_hdr_threshold = 1.42
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Curve" id="Curve_4cxtp"]
 | 
			
		||||
_data = [Vector2(0.00687286, 1), 0.0, 0.0, 0, 0, Vector2(0.879725, 0.190909), -2.93145, -2.93145, 0, 0, Vector2(1, 0.0454545), 0.0483926, 0.0, 0, 0]
 | 
			
		||||
point_count = 3
 | 
			
		||||
| 
						 | 
				
			
			@ -103,6 +98,18 @@ tracks/5/keys = {
 | 
			
		|||
"update": 1,
 | 
			
		||||
"values": [true]
 | 
			
		||||
}
 | 
			
		||||
tracks/6/type = "value"
 | 
			
		||||
tracks/6/imported = false
 | 
			
		||||
tracks/6/enabled = true
 | 
			
		||||
tracks/6/path = NodePath("SwingSprite:position")
 | 
			
		||||
tracks/6/interp = 1
 | 
			
		||||
tracks/6/loop_wrap = true
 | 
			
		||||
tracks/6/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0),
 | 
			
		||||
"transitions": PackedFloat32Array(1),
 | 
			
		||||
"update": 0,
 | 
			
		||||
"values": [Vector2(0, 0)]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Animation" id="Animation_ameas"]
 | 
			
		||||
resource_name = "anticipate"
 | 
			
		||||
| 
						 | 
				
			
			@ -173,7 +180,7 @@ tracks/0/path = NodePath("Anchor:rotation")
 | 
			
		|||
tracks/0/interp = 1
 | 
			
		||||
tracks/0/loop_wrap = true
 | 
			
		||||
tracks/0/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0, 0.15, 0.35),
 | 
			
		||||
"times": PackedFloat32Array(0, 0.1, 0.35),
 | 
			
		||||
"transitions": PackedFloat32Array(1, 1, 1),
 | 
			
		||||
"update": 1,
 | 
			
		||||
"values": [-1.5708, 1.5708, 1.5708]
 | 
			
		||||
| 
						 | 
				
			
			@ -209,10 +216,10 @@ tracks/3/path = NodePath("Anchor/Node2D:rotation")
 | 
			
		|||
tracks/3/interp = 1
 | 
			
		||||
tracks/3/loop_wrap = true
 | 
			
		||||
tracks/3/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0, 0.15),
 | 
			
		||||
"transitions": PackedFloat32Array(1, 1),
 | 
			
		||||
"times": PackedFloat32Array(0.1),
 | 
			
		||||
"transitions": PackedFloat32Array(1),
 | 
			
		||||
"update": 1,
 | 
			
		||||
"values": [0.0, 2.35619]
 | 
			
		||||
"values": [2.35619]
 | 
			
		||||
}
 | 
			
		||||
tracks/4/type = "method"
 | 
			
		||||
tracks/4/imported = false
 | 
			
		||||
| 
						 | 
				
			
			@ -235,10 +242,34 @@ tracks/5/path = NodePath("Anchor/Node2D/Sprite2D:visible")
 | 
			
		|||
tracks/5/interp = 1
 | 
			
		||||
tracks/5/loop_wrap = true
 | 
			
		||||
tracks/5/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0, 0.35),
 | 
			
		||||
"transitions": PackedFloat32Array(1, 1),
 | 
			
		||||
"times": PackedFloat32Array(0, 0.1, 0.35),
 | 
			
		||||
"transitions": PackedFloat32Array(1, 1, 1),
 | 
			
		||||
"update": 1,
 | 
			
		||||
"values": [true, false]
 | 
			
		||||
"values": [false, true, false]
 | 
			
		||||
}
 | 
			
		||||
tracks/6/type = "value"
 | 
			
		||||
tracks/6/imported = false
 | 
			
		||||
tracks/6/enabled = true
 | 
			
		||||
tracks/6/path = NodePath("SwingSprite:modulate")
 | 
			
		||||
tracks/6/interp = 1
 | 
			
		||||
tracks/6/loop_wrap = true
 | 
			
		||||
tracks/6/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0, 0.2, 0.35),
 | 
			
		||||
"transitions": PackedFloat32Array(1, 1, 1),
 | 
			
		||||
"update": 0,
 | 
			
		||||
"values": [Color(2, 2, 2, 1), Color(2, 2, 2, 1), Color(2, 2, 2, 0)]
 | 
			
		||||
}
 | 
			
		||||
tracks/7/type = "value"
 | 
			
		||||
tracks/7/imported = false
 | 
			
		||||
tracks/7/enabled = true
 | 
			
		||||
tracks/7/path = NodePath("SwingSprite:position")
 | 
			
		||||
tracks/7/interp = 1
 | 
			
		||||
tracks/7/loop_wrap = true
 | 
			
		||||
tracks/7/keys = {
 | 
			
		||||
"times": PackedFloat32Array(0, 0.2, 0.35),
 | 
			
		||||
"transitions": PackedFloat32Array(1, 1, 1),
 | 
			
		||||
"update": 0,
 | 
			
		||||
"values": [Vector2(0, 0), Vector2(0, 0), Vector2(2, 0)]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Animation" id="Animation_pclfs"]
 | 
			
		||||
| 
						 | 
				
			
			@ -344,9 +375,6 @@ script = ExtResource("5_hmisb")
 | 
			
		|||
Sword = NodePath("../..")
 | 
			
		||||
IdleState = NodePath("../Idle")
 | 
			
		||||
 | 
			
		||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
 | 
			
		||||
environment = SubResource("Environment_72txp")
 | 
			
		||||
 | 
			
		||||
[node name="Anchor" type="Node2D" parent="."]
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
rotation = -1.5708
 | 
			
		||||
| 
						 | 
				
			
			@ -389,7 +417,6 @@ libraries = {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
[node name="Hitbox" parent="." instance=ExtResource("3_up3ob")]
 | 
			
		||||
priority = 5
 | 
			
		||||
IsDisabled = true
 | 
			
		||||
 | 
			
		||||
[node name="CollisionShape2D" parent="Hitbox" index="0"]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -111,6 +111,7 @@ offset_bottom = -8.0
 | 
			
		|||
text = "Activate"
 | 
			
		||||
 | 
			
		||||
[node name="Sprite2D" type="Sprite2D" parent="."]
 | 
			
		||||
position = Vector2(0, -4)
 | 
			
		||||
texture = ExtResource("3_pgkt4")
 | 
			
		||||
centered = false
 | 
			
		||||
offset = Vector2(-2, -8)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1,10 @@
 | 
			
		|||
[gd_scene load_steps=4 format=3 uid="uid://hm3ek8vqt1d4"]
 | 
			
		||||
[gd_scene load_steps=3 format=3 uid="uid://hm3ek8vqt1d4"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://dwbrymm3ud5xu" path="res://Assets/Sprites/Props/bookshelf.png" id="1_cnrpk"]
 | 
			
		||||
 | 
			
		||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_wc4oe"]
 | 
			
		||||
size = Vector2(28, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="NavigationPolygon" id="NavigationPolygon_tsfmt"]
 | 
			
		||||
source_geometry_group_name = &"navigation_polygon_source_group"
 | 
			
		||||
 | 
			
		||||
[node name="Bookshelf" type="StaticBody2D"]
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -29,18 +26,17 @@ vframes = 2
 | 
			
		|||
frame = 9
 | 
			
		||||
 | 
			
		||||
[node name="TopLeft" type="Sprite2D" parent="."]
 | 
			
		||||
position = Vector2(-16, -16)
 | 
			
		||||
position = Vector2(-16, 0)
 | 
			
		||||
texture = ExtResource("1_cnrpk")
 | 
			
		||||
centered = false
 | 
			
		||||
offset = Vector2(0, -16)
 | 
			
		||||
offset = Vector2(0, -32)
 | 
			
		||||
hframes = 8
 | 
			
		||||
vframes = 2
 | 
			
		||||
 | 
			
		||||
[node name="TopRight" type="Sprite2D" parent="."]
 | 
			
		||||
position = Vector2(0, -16)
 | 
			
		||||
texture = ExtResource("1_cnrpk")
 | 
			
		||||
centered = false
 | 
			
		||||
offset = Vector2(0, -16)
 | 
			
		||||
offset = Vector2(0, -32)
 | 
			
		||||
hframes = 8
 | 
			
		||||
vframes = 2
 | 
			
		||||
frame = 1
 | 
			
		||||
| 
						 | 
				
			
			@ -48,6 +44,3 @@ frame = 1
 | 
			
		|||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 | 
			
		||||
position = Vector2(0, -4)
 | 
			
		||||
shape = SubResource("RectangleShape2D_wc4oe")
 | 
			
		||||
 | 
			
		||||
[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."]
 | 
			
		||||
navigation_polygon = SubResource("NavigationPolygon_tsfmt")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,9 +7,8 @@ Forsen-related game
 | 
			
		|||
## Building
 | 
			
		||||
 | 
			
		||||
> [!IMPORTANT]
 | 
			
		||||
> This is currently being developed with Godot 4.3 dev 3 snapshot, which
 | 
			
		||||
> includes a fix for C# generics causing problems and resetting properties to
 | 
			
		||||
> null.
 | 
			
		||||
> This is currently being developed with Godot 4.3 beta 1, which > includes
 | 
			
		||||
a fix for C# generics causing problems and resetting properties to > null.
 | 
			
		||||
 | 
			
		||||
Requires .NET version >=7.0.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,45 +10,62 @@ physics_layer_1/collision_mask = 0
 | 
			
		|||
[sub_resource type="Environment" id="Environment_pxx66"]
 | 
			
		||||
background_mode = 3
 | 
			
		||||
glow_enabled = true
 | 
			
		||||
glow_hdr_threshold = 1.4
 | 
			
		||||
glow_hdr_threshold = 1.2
 | 
			
		||||
 | 
			
		||||
[node name="TileMap" type="TileMap" node_paths=PackedStringArray("Entities", "Areas", "Spawners", "Markers")]
 | 
			
		||||
[node name="TileMap" type="Node2D" node_paths=PackedStringArray("Entities", "Areas", "Spawners", "Markers")]
 | 
			
		||||
process_mode = 1
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
texture_filter = 3
 | 
			
		||||
tile_set = SubResource("TileSet_18c7j")
 | 
			
		||||
format = 2
 | 
			
		||||
layer_0/name = "z-index 0"
 | 
			
		||||
layer_0/y_sort_enabled = true
 | 
			
		||||
layer_1/name = "z-index -1"
 | 
			
		||||
layer_1/y_sort_enabled = true
 | 
			
		||||
layer_1/z_index = -1
 | 
			
		||||
layer_1/tile_data = PackedInt32Array()
 | 
			
		||||
layer_2/name = "z-index -1 (under)"
 | 
			
		||||
layer_2/y_sort_enabled = true
 | 
			
		||||
layer_2/z_index = -1
 | 
			
		||||
layer_2/tile_data = PackedInt32Array()
 | 
			
		||||
layer_3/name = "z-index -2"
 | 
			
		||||
layer_3/y_sort_enabled = true
 | 
			
		||||
layer_3/z_index = -2
 | 
			
		||||
layer_3/tile_data = PackedInt32Array()
 | 
			
		||||
layer_4/name = "z-index -3"
 | 
			
		||||
layer_4/y_sort_enabled = true
 | 
			
		||||
layer_4/z_index = -3
 | 
			
		||||
layer_4/tile_data = PackedInt32Array()
 | 
			
		||||
layer_5/name = "Lower 1"
 | 
			
		||||
layer_5/z_index = -4
 | 
			
		||||
layer_5/tile_data = PackedInt32Array()
 | 
			
		||||
layer_6/name = "z-index 0 (walls)"
 | 
			
		||||
layer_6/y_sort_enabled = true
 | 
			
		||||
layer_6/y_sort_origin = -8
 | 
			
		||||
layer_6/tile_data = PackedInt32Array()
 | 
			
		||||
script = ExtResource("2_4m0a1")
 | 
			
		||||
Entities = NodePath("Entities")
 | 
			
		||||
Areas = NodePath("Areas")
 | 
			
		||||
Spawners = NodePath("Spawners")
 | 
			
		||||
Markers = NodePath("Markers")
 | 
			
		||||
 | 
			
		||||
[node name="Layers" type="Node2D" parent="."]
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
 | 
			
		||||
[node name="z-index 0" type="TileMapLayer" parent="Layers"]
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
texture_filter = 3
 | 
			
		||||
use_parent_material = true
 | 
			
		||||
tile_set = SubResource("TileSet_18c7j")
 | 
			
		||||
 | 
			
		||||
[node name="z-index -1" type="TileMapLayer" parent="Layers"]
 | 
			
		||||
z_index = -1
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
use_parent_material = true
 | 
			
		||||
tile_set = SubResource("TileSet_18c7j")
 | 
			
		||||
 | 
			
		||||
[node name="z-index -1 (under)" type="TileMapLayer" parent="Layers"]
 | 
			
		||||
z_index = -1
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
use_parent_material = true
 | 
			
		||||
tile_set = SubResource("TileSet_18c7j")
 | 
			
		||||
 | 
			
		||||
[node name="z-index -2" type="TileMapLayer" parent="Layers"]
 | 
			
		||||
z_index = -2
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
use_parent_material = true
 | 
			
		||||
tile_set = SubResource("TileSet_18c7j")
 | 
			
		||||
 | 
			
		||||
[node name="z-index -3" type="TileMapLayer" parent="Layers"]
 | 
			
		||||
z_index = -3
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
use_parent_material = true
 | 
			
		||||
tile_set = SubResource("TileSet_18c7j")
 | 
			
		||||
 | 
			
		||||
[node name="z-index -4" type="TileMapLayer" parent="Layers"]
 | 
			
		||||
z_index = -4
 | 
			
		||||
use_parent_material = true
 | 
			
		||||
tile_set = SubResource("TileSet_18c7j")
 | 
			
		||||
 | 
			
		||||
[node name="z-index 0 (walls)" type="TileMapLayer" parent="Layers"]
 | 
			
		||||
y_sort_enabled = true
 | 
			
		||||
use_parent_material = true
 | 
			
		||||
tile_set = SubResource("TileSet_18c7j")
 | 
			
		||||
y_sort_origin = -8
 | 
			
		||||
 | 
			
		||||
[node name="CanvasModulate" type="CanvasModulate" parent="."]
 | 
			
		||||
 | 
			
		||||
[node name="Props" type="Node2D" parent="."]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,8 @@
 | 
			
		|||
[gd_scene load_steps=3 format=3 uid="uid://1pb3mpmrl7lc"]
 | 
			
		||||
[gd_scene load_steps=4 format=3 uid="uid://1pb3mpmrl7lc"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Script" path="res://Utils/World.cs" id="1_1k6ew"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://c271rdjhd1gfo" path="res://UI/Base.tscn" id="2_mm0qt"]
 | 
			
		||||
[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="3_ge4f0"]
 | 
			
		||||
 | 
			
		||||
[node name="World" type="Node2D" node_paths=PackedStringArray("MusicPlayer")]
 | 
			
		||||
process_mode = 3
 | 
			
		||||
| 
						 | 
				
			
			@ -24,3 +25,8 @@ mouse_filter = 2
 | 
			
		|||
 | 
			
		||||
[node name="MusicPlayer" type="AudioStreamPlayer" parent="."]
 | 
			
		||||
bus = &"Music"
 | 
			
		||||
 | 
			
		||||
[node name="Camera2D" type="Camera2D" parent="."]
 | 
			
		||||
 | 
			
		||||
[node name="PhantomCameraHost" type="Node" parent="Camera2D"]
 | 
			
		||||
script = ExtResource("3_ge4f0")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,10 @@
 | 
			
		|||
using Godot;
 | 
			
		||||
using SupaLidlGame.Extensions;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace SupaLidlGame.Scenes;
 | 
			
		||||
 | 
			
		||||
public partial class Map : TileMap
 | 
			
		||||
public partial class Map : Node2D
 | 
			
		||||
{
 | 
			
		||||
    [Export]
 | 
			
		||||
    public Node2D Entities { get; set; }
 | 
			
		||||
| 
						 | 
				
			
			@ -71,6 +72,17 @@ public partial class Map : TileMap
 | 
			
		|||
        GetNode<Audio.AudioManager>("/root/AudioManager").PlayBackground(Music);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public IEnumerable<Characters.Character> GetCharacters()
 | 
			
		||||
    {
 | 
			
		||||
        foreach (var child in Entities.GetChildren())
 | 
			
		||||
        {
 | 
			
		||||
            if (child is Characters.Character c)
 | 
			
		||||
            {
 | 
			
		||||
                yield return c;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Node SpawnEntity(PackedScene scene)
 | 
			
		||||
    {
 | 
			
		||||
        var instance = scene.Instantiate();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
[gd_resource type="Environment" load_steps=3 format=3 uid="uid://bl15544uvuppq"]
 | 
			
		||||
 | 
			
		||||
[sub_resource type="Gradient" id="Gradient_u5tnr"]
 | 
			
		||||
offsets = PackedFloat32Array(0, 0.933649, 1)
 | 
			
		||||
colors = PackedColorArray(0, 0, 0, 1, 0.938186, 0.874428, 0.818076, 1, 1, 1, 1, 1)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_ri0vy"]
 | 
			
		||||
gradient = SubResource("Gradient_u5tnr")
 | 
			
		||||
 | 
			
		||||
[resource]
 | 
			
		||||
background_mode = 3
 | 
			
		||||
glow_enabled = true
 | 
			
		||||
glow_intensity = 4.0
 | 
			
		||||
adjustment_enabled = true
 | 
			
		||||
adjustment_saturation = 0.75
 | 
			
		||||
adjustment_color_correction = SubResource("GradientTexture1D_ri0vy")
 | 
			
		||||
| 
						 | 
				
			
			@ -1,25 +1,17 @@
 | 
			
		|||
[gd_resource type="TileSet" load_steps=12 format=3 uid="uid://l61kbx31ug4p"]
 | 
			
		||||
[gd_resource type="TileSet" load_steps=14 format=3 uid="uid://l61kbx31ug4p"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://b0yiy7w8nxmas" path="res://Assets/Sprites/arena-tileset.png" id="1_kud44"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://j1ekk1ppenm4" path="res://Assets/Sprites/grass-tileset.png" id="2_lihbs"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://udgjrcaexuaq" path="res://Assets/Sprites/Props/arena-arches.png" id="3_hbylw"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://bth1v3dyuqwg6" path="res://Assets/Sprites/arena-tileset-new.png" id="4_n70qi"]
 | 
			
		||||
 | 
			
		||||
[sub_resource type="NavigationPolygon" id="NavigationPolygon_7lhug"]
 | 
			
		||||
vertices = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)])
 | 
			
		||||
outlines = Array[PackedVector2Array]([PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)])
 | 
			
		||||
[sub_resource type="NavigationPolygon" id="NavigationPolygon_7s0wj"]
 | 
			
		||||
source_geometry_group_name = &"navigation_polygon_source_group"
 | 
			
		||||
 | 
			
		||||
[sub_resource type="NavigationPolygon" id="NavigationPolygon_d0snv"]
 | 
			
		||||
vertices = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)])
 | 
			
		||||
outlines = Array[PackedVector2Array]([PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)])
 | 
			
		||||
[sub_resource type="NavigationPolygon" id="NavigationPolygon_7vkqx"]
 | 
			
		||||
source_geometry_group_name = &"navigation_polygon_source_group"
 | 
			
		||||
 | 
			
		||||
[sub_resource type="NavigationPolygon" id="NavigationPolygon_m43r7"]
 | 
			
		||||
vertices = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)])
 | 
			
		||||
outlines = Array[PackedVector2Array]([PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)])
 | 
			
		||||
[sub_resource type="NavigationPolygon" id="NavigationPolygon_pxj45"]
 | 
			
		||||
source_geometry_group_name = &"navigation_polygon_source_group"
 | 
			
		||||
 | 
			
		||||
[sub_resource type="CanvasTexture" id="CanvasTexture_3n6aa"]
 | 
			
		||||
| 
						 | 
				
			
			@ -30,8 +22,6 @@ texture = SubResource("CanvasTexture_3n6aa")
 | 
			
		|||
0:0/0 = 0
 | 
			
		||||
0:0/0/terrain_set = 0
 | 
			
		||||
0:0/0/terrain = 0
 | 
			
		||||
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
0:0/0/terrains_peering_bit/right_side = 0
 | 
			
		||||
0:0/0/terrains_peering_bit/bottom_right_corner = 0
 | 
			
		||||
0:0/0/terrains_peering_bit/bottom_side = 0
 | 
			
		||||
| 
						 | 
				
			
			@ -40,12 +30,10 @@ texture = SubResource("CanvasTexture_3n6aa")
 | 
			
		|||
0:0/0/terrains_peering_bit/top_left_corner = 0
 | 
			
		||||
0:0/0/terrains_peering_bit/top_side = 0
 | 
			
		||||
0:0/0/terrains_peering_bit/top_right_corner = 0
 | 
			
		||||
0:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7lhug")
 | 
			
		||||
0:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
1:1/0 = 0
 | 
			
		||||
1:1/0/terrain_set = 0
 | 
			
		||||
1:1/0/terrain = 0
 | 
			
		||||
1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:1/0/terrains_peering_bit/right_side = 0
 | 
			
		||||
1:1/0/terrains_peering_bit/bottom_right_corner = 0
 | 
			
		||||
1:1/0/terrains_peering_bit/bottom_side = 0
 | 
			
		||||
| 
						 | 
				
			
			@ -54,12 +42,10 @@ texture = SubResource("CanvasTexture_3n6aa")
 | 
			
		|||
1:1/0/terrains_peering_bit/top_left_corner = 0
 | 
			
		||||
1:1/0/terrains_peering_bit/top_side = 0
 | 
			
		||||
1:1/0/terrains_peering_bit/top_right_corner = 0
 | 
			
		||||
1:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7lhug")
 | 
			
		||||
1:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
2:1/0 = 0
 | 
			
		||||
2:1/0/terrain_set = 0
 | 
			
		||||
2:1/0/terrain = 1
 | 
			
		||||
2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
2:1/0/terrains_peering_bit/right_side = 1
 | 
			
		||||
2:1/0/terrains_peering_bit/bottom_right_corner = 0
 | 
			
		||||
| 
						 | 
				
			
			@ -71,17 +57,14 @@ texture = SubResource("CanvasTexture_3n6aa")
 | 
			
		|||
2:1/0/terrains_peering_bit/top_right_corner = 1
 | 
			
		||||
2:2/0 = 0
 | 
			
		||||
2:2/0/terrain_set = 0
 | 
			
		||||
2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8)
 | 
			
		||||
2:2/0/terrains_peering_bit/bottom_right_corner = 1
 | 
			
		||||
2:2/0/terrains_peering_bit/bottom_side = 1
 | 
			
		||||
2:2/0/terrains_peering_bit/bottom_left_corner = 1
 | 
			
		||||
2:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
1:0/0 = 0
 | 
			
		||||
1:0/0/terrain_set = 0
 | 
			
		||||
1:0/0/terrain = 0
 | 
			
		||||
1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:0/0/terrains_peering_bit/right_side = 0
 | 
			
		||||
1:0/0/terrains_peering_bit/bottom_right_corner = 0
 | 
			
		||||
1:0/0/terrains_peering_bit/bottom_side = 0
 | 
			
		||||
| 
						 | 
				
			
			@ -90,12 +73,10 @@ texture = SubResource("CanvasTexture_3n6aa")
 | 
			
		|||
1:0/0/terrains_peering_bit/top_left_corner = 0
 | 
			
		||||
1:0/0/terrains_peering_bit/top_side = 0
 | 
			
		||||
1:0/0/terrains_peering_bit/top_right_corner = 0
 | 
			
		||||
1:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7lhug")
 | 
			
		||||
1:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
0:1/0 = 0
 | 
			
		||||
0:1/0/terrain_set = 0
 | 
			
		||||
0:1/0/terrain = 0
 | 
			
		||||
0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
0:1/0/terrains_peering_bit/right_side = 0
 | 
			
		||||
0:1/0/terrains_peering_bit/bottom_right_corner = 0
 | 
			
		||||
0:1/0/terrains_peering_bit/bottom_side = 0
 | 
			
		||||
| 
						 | 
				
			
			@ -104,59 +85,35 @@ texture = SubResource("CanvasTexture_3n6aa")
 | 
			
		|||
0:1/0/terrains_peering_bit/top_left_corner = 0
 | 
			
		||||
0:1/0/terrains_peering_bit/top_side = 0
 | 
			
		||||
0:1/0/terrains_peering_bit/top_right_corner = 0
 | 
			
		||||
0:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7lhug")
 | 
			
		||||
0:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
0:2/0 = 0
 | 
			
		||||
0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
0:3/0 = 0
 | 
			
		||||
0:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:3/0 = 0
 | 
			
		||||
1:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:2/0 = 0
 | 
			
		||||
1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
2:0/0 = 0
 | 
			
		||||
2:0/0/terrain_set = 0
 | 
			
		||||
2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
2:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_m43r7")
 | 
			
		||||
2:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
3:0/0 = 0
 | 
			
		||||
3:0/0/terrain_set = 0
 | 
			
		||||
3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
3:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
3:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_m43r7")
 | 
			
		||||
3:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
4:0/0 = 0
 | 
			
		||||
4:0/0/terrain_set = 0
 | 
			
		||||
4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
4:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
4:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
5:0/0 = 0
 | 
			
		||||
5:0/0/terrain_set = 0
 | 
			
		||||
5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
5:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
5:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
6:0/0 = 0
 | 
			
		||||
6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
6:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
6:1/0 = 0
 | 
			
		||||
6:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
6:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
5:1/0 = 0
 | 
			
		||||
5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
5:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
4:1/0 = 0
 | 
			
		||||
4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
4:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
3:1/0 = 0
 | 
			
		||||
3:1/0/terrain_set = 0
 | 
			
		||||
3:1/0/terrain = 1
 | 
			
		||||
3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
3:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
3:1/0/terrains_peering_bit/right_side = 1
 | 
			
		||||
3:1/0/terrains_peering_bit/bottom_right_corner = 0
 | 
			
		||||
| 
						 | 
				
			
			@ -168,74 +125,53 @@ texture = SubResource("CanvasTexture_3n6aa")
 | 
			
		|||
3:1/0/terrains_peering_bit/top_right_corner = 1
 | 
			
		||||
3:2/0 = 0
 | 
			
		||||
3:2/0/terrain_set = 0
 | 
			
		||||
3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
3:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0, -8, 0)
 | 
			
		||||
3:2/0/terrains_peering_bit/top_left_corner = 0
 | 
			
		||||
3:2/0/terrains_peering_bit/top_side = 0
 | 
			
		||||
3:2/0/terrains_peering_bit/top_right_corner = 0
 | 
			
		||||
3:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
3:3/0 = 0
 | 
			
		||||
3:3/0/terrain_set = 0
 | 
			
		||||
3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
3:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, 8, -8, 8, 8, 0, 8)
 | 
			
		||||
3:3/0/terrains_peering_bit/right_side = 0
 | 
			
		||||
3:3/0/terrains_peering_bit/bottom_right_corner = 0
 | 
			
		||||
3:3/0/terrains_peering_bit/top_right_corner = 1
 | 
			
		||||
2:3/0 = 0
 | 
			
		||||
2:3/0/terrain_set = 0
 | 
			
		||||
2:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -8, 0, 8, -8, 8)
 | 
			
		||||
2:3/0/terrains_peering_bit/bottom_left_corner = 0
 | 
			
		||||
2:3/0/terrains_peering_bit/left_side = 0
 | 
			
		||||
2:3/0/terrains_peering_bit/top_left_corner = 1
 | 
			
		||||
4:3/0 = 0
 | 
			
		||||
4:3/0/terrain_set = 0
 | 
			
		||||
4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
4:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
4:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, 8, 0, 0, 0, 0, -8)
 | 
			
		||||
4:3/0/terrains_peering_bit/top_right_corner = 0
 | 
			
		||||
4:2/0 = 0
 | 
			
		||||
4:2/0/terrain_set = 0
 | 
			
		||||
4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
4:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, 0, 8, 0, 8, 8, 0, 8)
 | 
			
		||||
4:2/0/terrains_peering_bit/bottom_right_corner = 1
 | 
			
		||||
4:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
5:2/0 = 0
 | 
			
		||||
5:2/0/terrain_set = 0
 | 
			
		||||
5:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
5:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0, 0, 0, 8, -8, 8)
 | 
			
		||||
5:2/0/terrains_peering_bit/bottom_left_corner = 1
 | 
			
		||||
5:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
5:3/0 = 0
 | 
			
		||||
5:3/0/terrain_set = 0
 | 
			
		||||
5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
5:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -8, 0, 0, -8, 0)
 | 
			
		||||
5:3/0/terrains_peering_bit/top_left_corner = 0
 | 
			
		||||
6:3/0 = 0
 | 
			
		||||
6:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
6:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
6:2/0 = 0
 | 
			
		||||
6:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
6:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
6:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
7:2/0 = 0
 | 
			
		||||
7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
7:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
7:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
7:3/0 = 0
 | 
			
		||||
7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
7:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
7:0/size_in_atlas = Vector2i(1, 2)
 | 
			
		||||
7:0/0 = 0
 | 
			
		||||
7:0/0/texture_origin = Vector2i(0, 8)
 | 
			
		||||
7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
7:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -5, 8, -5, 8, 4, 4, 8, -4, 8, -8, 4)
 | 
			
		||||
0:4/0 = 0
 | 
			
		||||
0:4/0/terrain_set = 0
 | 
			
		||||
0:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:4/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
0:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
0:4/0/terrains_peering_bit/bottom_left_corner = 0
 | 
			
		||||
0:4/0/terrains_peering_bit/left_side = 0
 | 
			
		||||
| 
						 | 
				
			
			@ -244,8 +180,6 @@ texture = SubResource("CanvasTexture_3n6aa")
 | 
			
		|||
0:4/0/terrains_peering_bit/top_right_corner = 0
 | 
			
		||||
0:5/0 = 0
 | 
			
		||||
0:5/0/terrain_set = 0
 | 
			
		||||
0:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:5/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
0:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
0:5/0/terrains_peering_bit/bottom_right_corner = 1
 | 
			
		||||
0:5/0/terrains_peering_bit/bottom_side = 1
 | 
			
		||||
| 
						 | 
				
			
			@ -254,8 +188,6 @@ texture = SubResource("CanvasTexture_3n6aa")
 | 
			
		|||
0:5/0/terrains_peering_bit/top_left_corner = 0
 | 
			
		||||
1:5/0 = 0
 | 
			
		||||
1:5/0/terrain_set = 0
 | 
			
		||||
1:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:5/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
1:5/0/terrains_peering_bit/right_side = 0
 | 
			
		||||
1:5/0/terrains_peering_bit/bottom_right_corner = 1
 | 
			
		||||
| 
						 | 
				
			
			@ -264,8 +196,6 @@ texture = SubResource("CanvasTexture_3n6aa")
 | 
			
		|||
1:5/0/terrains_peering_bit/top_right_corner = 0
 | 
			
		||||
1:4/0 = 0
 | 
			
		||||
1:4/0/terrain_set = 0
 | 
			
		||||
1:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:4/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
1:4/0/terrains_peering_bit/right_side = 0
 | 
			
		||||
1:4/0/terrains_peering_bit/bottom_right_corner = 0
 | 
			
		||||
| 
						 | 
				
			
			@ -275,100 +205,61 @@ texture = SubResource("CanvasTexture_3n6aa")
 | 
			
		|||
2:4/size_in_atlas = Vector2i(1, 3)
 | 
			
		||||
2:4/0 = 0
 | 
			
		||||
2:4/0/texture_origin = Vector2i(0, 16)
 | 
			
		||||
2:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:4/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
3:4/size_in_atlas = Vector2i(2, 2)
 | 
			
		||||
3:4/0 = 0
 | 
			
		||||
3:4/0/texture_origin = Vector2i(8, 9)
 | 
			
		||||
3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
3:4/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
5:4/size_in_atlas = Vector2i(2, 2)
 | 
			
		||||
5:4/0 = 0
 | 
			
		||||
5:4/0/texture_origin = Vector2i(8, 9)
 | 
			
		||||
5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
5:4/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
7:4/size_in_atlas = Vector2i(1, 2)
 | 
			
		||||
7:4/0 = 0
 | 
			
		||||
7:4/0/texture_origin = Vector2i(0, 8)
 | 
			
		||||
7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
7:4/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
3:6/0 = 0
 | 
			
		||||
3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
3:6/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
3:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
4:6/0 = 0
 | 
			
		||||
4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
4:6/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
4:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
4:7/0 = 0
 | 
			
		||||
4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
4:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
4:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
3:7/0 = 0
 | 
			
		||||
3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
3:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
3:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
10:1/0 = 0
 | 
			
		||||
10:1/0/terrain_set = 1
 | 
			
		||||
10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
10:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
10:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_d0snv")
 | 
			
		||||
10:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
11:1/0 = 0
 | 
			
		||||
11:1/0/terrain_set = 1
 | 
			
		||||
11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
11:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
11:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_d0snv")
 | 
			
		||||
11:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
11:2/0 = 0
 | 
			
		||||
11:2/0/terrain_set = 1
 | 
			
		||||
11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
11:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
11:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_d0snv")
 | 
			
		||||
11:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
10:2/0 = 0
 | 
			
		||||
10:2/0/terrain_set = 1
 | 
			
		||||
10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
10:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
10:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_d0snv")
 | 
			
		||||
10:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
8:1/0 = 0
 | 
			
		||||
8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
8:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
8:2/0 = 0
 | 
			
		||||
8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
8:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
8:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
9:1/0 = 0
 | 
			
		||||
9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
9:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
9:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
9:2/0 = 0
 | 
			
		||||
9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
9:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
9:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7s0wj")
 | 
			
		||||
9:5/0 = 0
 | 
			
		||||
9:5/0/terrain_set = 1
 | 
			
		||||
9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
9:5/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
9:5/0/terrains_peering_bit/bottom_right_corner = 0
 | 
			
		||||
10:5/0 = 0
 | 
			
		||||
10:5/0/terrain_set = 1
 | 
			
		||||
10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
10:5/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
10:5/0/terrains_peering_bit/bottom_right_corner = 0
 | 
			
		||||
10:5/0/terrains_peering_bit/bottom_side = 0
 | 
			
		||||
10:5/0/terrains_peering_bit/bottom_left_corner = 0
 | 
			
		||||
11:5/0 = 0
 | 
			
		||||
11:5/0/terrain_set = 1
 | 
			
		||||
11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
11:5/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
11:5/0/terrains_peering_bit/bottom_left_corner = 0
 | 
			
		||||
11:6/0 = 0
 | 
			
		||||
11:6/0/terrain_set = 1
 | 
			
		||||
11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
11:6/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
11:6/0/terrains_peering_bit/bottom_left_corner = 0
 | 
			
		||||
11:6/0/terrains_peering_bit/left_side = 0
 | 
			
		||||
11:6/0/terrains_peering_bit/top_left_corner = 0
 | 
			
		||||
10:6/0 = 0
 | 
			
		||||
10:6/0/terrain_set = 1
 | 
			
		||||
10:6/0/terrain = 0
 | 
			
		||||
10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
10:6/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
10:6/0/terrains_peering_bit/right_side = 0
 | 
			
		||||
10:6/0/terrains_peering_bit/bottom_right_corner = 0
 | 
			
		||||
10:6/0/terrains_peering_bit/bottom_side = 0
 | 
			
		||||
| 
						 | 
				
			
			@ -379,52 +270,37 @@ texture = SubResource("CanvasTexture_3n6aa")
 | 
			
		|||
10:6/0/terrains_peering_bit/top_right_corner = 0
 | 
			
		||||
9:6/0 = 0
 | 
			
		||||
9:6/0/terrain_set = 1
 | 
			
		||||
9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
9:6/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
9:6/0/terrains_peering_bit/right_side = 0
 | 
			
		||||
9:6/0/terrains_peering_bit/bottom_right_corner = 0
 | 
			
		||||
9:6/0/terrains_peering_bit/top_right_corner = 0
 | 
			
		||||
9:6/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_pxj45")
 | 
			
		||||
9:7/0 = 0
 | 
			
		||||
9:7/0/terrain_set = 1
 | 
			
		||||
9:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
9:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
9:7/0/terrains_peering_bit/top_right_corner = 0
 | 
			
		||||
10:7/0 = 0
 | 
			
		||||
10:7/0/terrain_set = 1
 | 
			
		||||
10:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
10:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
10:7/0/terrains_peering_bit/top_left_corner = 0
 | 
			
		||||
10:7/0/terrains_peering_bit/top_side = 0
 | 
			
		||||
10:7/0/terrains_peering_bit/top_right_corner = 0
 | 
			
		||||
11:7/0 = 0
 | 
			
		||||
11:7/0/terrain_set = 1
 | 
			
		||||
11:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
11:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
11:7/0/terrains_peering_bit/top_left_corner = 0
 | 
			
		||||
12:5/0 = 0
 | 
			
		||||
12:5/0/terrain_set = 1
 | 
			
		||||
12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
12:5/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
12:5/0/terrains_peering_bit/bottom_right_corner = 1
 | 
			
		||||
13:5/0 = 0
 | 
			
		||||
13:5/0/terrain_set = 1
 | 
			
		||||
13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
13:5/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
13:5/0/terrains_peering_bit/bottom_right_corner = 1
 | 
			
		||||
13:5/0/terrains_peering_bit/bottom_side = 1
 | 
			
		||||
13:5/0/terrains_peering_bit/bottom_left_corner = 1
 | 
			
		||||
14:6/0 = 0
 | 
			
		||||
14:6/0/terrain_set = 1
 | 
			
		||||
14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
14:6/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
14:6/0/terrains_peering_bit/bottom_left_corner = 1
 | 
			
		||||
14:6/0/terrains_peering_bit/left_side = 1
 | 
			
		||||
14:6/0/terrains_peering_bit/top_left_corner = 1
 | 
			
		||||
13:6/0 = 0
 | 
			
		||||
13:6/0/terrain_set = 1
 | 
			
		||||
13:6/0/terrain = 1
 | 
			
		||||
13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
13:6/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
13:6/0/terrains_peering_bit/right_side = 1
 | 
			
		||||
13:6/0/terrains_peering_bit/bottom_right_corner = 1
 | 
			
		||||
13:6/0/terrains_peering_bit/bottom_side = 1
 | 
			
		||||
| 
						 | 
				
			
			@ -435,70 +311,43 @@ texture = SubResource("CanvasTexture_3n6aa")
 | 
			
		|||
13:6/0/terrains_peering_bit/top_right_corner = 1
 | 
			
		||||
12:6/0 = 0
 | 
			
		||||
12:6/0/terrain_set = 1
 | 
			
		||||
12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
12:6/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
12:6/0/terrains_peering_bit/right_side = 1
 | 
			
		||||
12:6/0/terrains_peering_bit/bottom_right_corner = 1
 | 
			
		||||
12:6/0/terrains_peering_bit/top_right_corner = 1
 | 
			
		||||
12:7/0 = 0
 | 
			
		||||
12:7/0/terrain_set = 1
 | 
			
		||||
12:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
12:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
12:7/0/terrains_peering_bit/top_right_corner = 1
 | 
			
		||||
13:7/0 = 0
 | 
			
		||||
13:7/0/terrain_set = 1
 | 
			
		||||
13:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
13:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
13:7/0/terrains_peering_bit/top_left_corner = 1
 | 
			
		||||
13:7/0/terrains_peering_bit/top_side = 1
 | 
			
		||||
13:7/0/terrains_peering_bit/top_right_corner = 1
 | 
			
		||||
14:7/0 = 0
 | 
			
		||||
14:7/0/terrain_set = 1
 | 
			
		||||
14:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
14:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
14:7/0/terrains_peering_bit/top_left_corner = 1
 | 
			
		||||
14:5/0 = 0
 | 
			
		||||
14:5/0/terrain_set = 1
 | 
			
		||||
14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
14:5/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
14:5/0/terrains_peering_bit/bottom_left_corner = 1
 | 
			
		||||
5:7/0 = 0
 | 
			
		||||
5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
5:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
5:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
5:6/0 = 0
 | 
			
		||||
5:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
5:6/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
5:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
6:6/0 = 0
 | 
			
		||||
6:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
6:6/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
6:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
6:7/0 = 0
 | 
			
		||||
6:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
6:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
6:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
7:7/0 = 0
 | 
			
		||||
7:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
7:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
7:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
7:7/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_7vkqx")
 | 
			
		||||
8:7/0 = 0
 | 
			
		||||
8:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
8:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
8:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
8:6/0 = 0
 | 
			
		||||
8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
8:6/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
8:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
12:0/0 = 0
 | 
			
		||||
12:0/0/y_sort_origin = 8
 | 
			
		||||
12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
12:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 2, 8, 2, 8, 8, -8, 8)
 | 
			
		||||
13:0/0 = 0
 | 
			
		||||
13:0/0/y_sort_origin = 8
 | 
			
		||||
13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
13:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 2, 8, 2, 8, 8, -8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="NavigationPolygon" id="NavigationPolygon_que0c"]
 | 
			
		||||
| 
						 | 
				
			
			@ -510,213 +359,271 @@ source_geometry_group_name = &"navigation_polygon_source_group"
 | 
			
		|||
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_mdfpe"]
 | 
			
		||||
texture = ExtResource("2_lihbs")
 | 
			
		||||
0:0/0 = 0
 | 
			
		||||
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
0:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
1:0/0 = 0
 | 
			
		||||
1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
2:0/0 = 0
 | 
			
		||||
2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
2:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
3:0/0 = 0
 | 
			
		||||
3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
3:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
3:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
4:0/0 = 0
 | 
			
		||||
4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
4:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
4:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
5:0/0 = 0
 | 
			
		||||
5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
5:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
5:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
6:0/0 = 0
 | 
			
		||||
6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
6:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
6:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
7:0/0 = 0
 | 
			
		||||
7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
7:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
7:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
7:1/0 = 0
 | 
			
		||||
7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
7:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
7:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
7:2/0 = 0
 | 
			
		||||
7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
7:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
7:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
7:3/0 = 0
 | 
			
		||||
7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
7:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
7:3/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
7:4/0 = 0
 | 
			
		||||
7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
7:4/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
7:4/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
6:4/0 = 0
 | 
			
		||||
6:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
6:4/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
6:4/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
5:4/0 = 0
 | 
			
		||||
5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
5:4/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
5:4/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
4:4/0 = 0
 | 
			
		||||
4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
4:4/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
4:4/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
3:4/0 = 0
 | 
			
		||||
3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
3:4/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
3:4/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
2:4/0 = 0
 | 
			
		||||
2:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:4/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
2:4/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
1:4/0 = 0
 | 
			
		||||
1:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:4/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:4/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
0:4/0 = 0
 | 
			
		||||
0:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:4/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
0:4/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
0:3/0 = 0
 | 
			
		||||
0:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
0:3/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
1:2/0 = 0
 | 
			
		||||
1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
1:1/0 = 0
 | 
			
		||||
1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
0:1/0 = 0
 | 
			
		||||
0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
0:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
0:2/0 = 0
 | 
			
		||||
0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
0:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
2:3/0 = 0
 | 
			
		||||
2:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
2:3/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
3:3/0 = 0
 | 
			
		||||
3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
3:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
3:3/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
1:3/0 = 0
 | 
			
		||||
1:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:3/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
2:2/0 = 0
 | 
			
		||||
2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
2:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
3:1/0 = 0
 | 
			
		||||
3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
3:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
3:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
4:1/0 = 0
 | 
			
		||||
4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
4:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
4:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
2:1/0 = 0
 | 
			
		||||
2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
2:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
4:2/0 = 0
 | 
			
		||||
4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
4:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
4:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
5:2/0 = 0
 | 
			
		||||
5:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
5:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
5:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
3:2/0 = 0
 | 
			
		||||
3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
3:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
3:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
6:3/0 = 0
 | 
			
		||||
6:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
6:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
6:3/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
5:3/0 = 0
 | 
			
		||||
5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
5:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
5:3/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
4:3/0 = 0
 | 
			
		||||
4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
4:3/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
4:3/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
6:2/0 = 0
 | 
			
		||||
6:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
6:2/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
6:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
6:1/0 = 0
 | 
			
		||||
6:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
6:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
6:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
5:1/0 = 0
 | 
			
		||||
5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
5:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
5:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_que0c")
 | 
			
		||||
0:5/0 = 0
 | 
			
		||||
0:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:5/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:5/0 = 0
 | 
			
		||||
1:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:5/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
0:6/0 = 0
 | 
			
		||||
0:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:6/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
0:7/0 = 0
 | 
			
		||||
0:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:7/0 = 0
 | 
			
		||||
1:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:6/0 = 0
 | 
			
		||||
1:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:6/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
2:6/0 = 0
 | 
			
		||||
2:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:6/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
2:5/0 = 0
 | 
			
		||||
2:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:5/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
2:7/0 = 0
 | 
			
		||||
2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:7/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
 | 
			
		||||
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_u4tjf"]
 | 
			
		||||
texture = ExtResource("3_hbylw")
 | 
			
		||||
0:0/0 = 0
 | 
			
		||||
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:0/0 = 0
 | 
			
		||||
1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
2:0/0 = 0
 | 
			
		||||
2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:0/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
0:1/0 = 0
 | 
			
		||||
0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
0:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
1:1/0 = 0
 | 
			
		||||
1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
1:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
2:1/0 = 0
 | 
			
		||||
2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
 | 
			
		||||
2:1/0/physics_layer_0/angular_velocity = 0.0
 | 
			
		||||
 | 
			
		||||
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_45tin"]
 | 
			
		||||
texture = ExtResource("4_n70qi")
 | 
			
		||||
0:0/0 = 0
 | 
			
		||||
1:0/0 = 0
 | 
			
		||||
4:0/0 = 0
 | 
			
		||||
4:0/0/y_sort_origin = 8
 | 
			
		||||
4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
5:0/0 = 0
 | 
			
		||||
5:0/0/y_sort_origin = 8
 | 
			
		||||
5:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
6:0/0 = 0
 | 
			
		||||
6:0/0/y_sort_origin = 8
 | 
			
		||||
6:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
8:0/0 = 0
 | 
			
		||||
9:0/0 = 0
 | 
			
		||||
10:0/0 = 0
 | 
			
		||||
11:0/0 = 0
 | 
			
		||||
12:0/0 = 0
 | 
			
		||||
13:0/0 = 0
 | 
			
		||||
0:1/0 = 0
 | 
			
		||||
1:1/0 = 0
 | 
			
		||||
4:1/0 = 0
 | 
			
		||||
4:1/0/y_sort_origin = 8
 | 
			
		||||
4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
5:1/0 = 0
 | 
			
		||||
5:1/0/y_sort_origin = 8
 | 
			
		||||
5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
6:1/0 = 0
 | 
			
		||||
6:1/0/y_sort_origin = 8
 | 
			
		||||
6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
7:1/0 = 0
 | 
			
		||||
7:1/0/y_sort_origin = 8
 | 
			
		||||
7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
8:1/0 = 0
 | 
			
		||||
8:1/0/y_sort_origin = 8
 | 
			
		||||
8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
9:1/0 = 0
 | 
			
		||||
9:1/0/y_sort_origin = 8
 | 
			
		||||
9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
10:1/0 = 0
 | 
			
		||||
11:1/0 = 0
 | 
			
		||||
2:2/0 = 0
 | 
			
		||||
2:2/0/y_sort_origin = 8
 | 
			
		||||
2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
3:2/0 = 0
 | 
			
		||||
3:2/0/y_sort_origin = 8
 | 
			
		||||
3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
4:2/0 = 0
 | 
			
		||||
4:2/0/y_sort_origin = 8
 | 
			
		||||
4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
5:2/0 = 0
 | 
			
		||||
5:2/0/y_sort_origin = 8
 | 
			
		||||
5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
6:2/0 = 0
 | 
			
		||||
6:2/0/y_sort_origin = 8
 | 
			
		||||
6:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
7:2/0 = 0
 | 
			
		||||
7:2/0/y_sort_origin = 8
 | 
			
		||||
7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
8:2/0 = 0
 | 
			
		||||
8:2/0/y_sort_origin = 8
 | 
			
		||||
8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
9:2/0 = 0
 | 
			
		||||
9:2/0/y_sort_origin = 8
 | 
			
		||||
9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
10:2/0 = 0
 | 
			
		||||
11:2/0 = 0
 | 
			
		||||
0:3/0 = 0
 | 
			
		||||
0:3/0/y_sort_origin = 12
 | 
			
		||||
1:3/0 = 0
 | 
			
		||||
1:3/0/y_sort_origin = 12
 | 
			
		||||
2:3/0 = 0
 | 
			
		||||
2:3/0/y_sort_origin = 12
 | 
			
		||||
3:3/0 = 0
 | 
			
		||||
3:3/0/y_sort_origin = 8
 | 
			
		||||
3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
4:3/0 = 0
 | 
			
		||||
4:3/0/y_sort_origin = 8
 | 
			
		||||
4:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
8:3/0 = 0
 | 
			
		||||
0:4/0 = 0
 | 
			
		||||
0:4/0/y_sort_origin = 8
 | 
			
		||||
0:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
2:4/0 = 0
 | 
			
		||||
2:4/0/y_sort_origin = 8
 | 
			
		||||
2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
3:4/0 = 0
 | 
			
		||||
3:4/0/y_sort_origin = 12
 | 
			
		||||
3:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
4:4/0 = 0
 | 
			
		||||
4:4/0/y_sort_origin = 12
 | 
			
		||||
4:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
5:4/0 = 0
 | 
			
		||||
5:4/0/y_sort_origin = 8
 | 
			
		||||
5:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
6:4/0 = 0
 | 
			
		||||
6:4/0/y_sort_origin = 8
 | 
			
		||||
6:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
0:5/0 = 0
 | 
			
		||||
0:5/0/y_sort_origin = 8
 | 
			
		||||
0:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
1:5/0 = 0
 | 
			
		||||
1:5/0/y_sort_origin = 8
 | 
			
		||||
1:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
2:5/0 = 0
 | 
			
		||||
2:5/0/y_sort_origin = 8
 | 
			
		||||
2:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
3:5/0 = 0
 | 
			
		||||
4:5/0 = 0
 | 
			
		||||
5:3/0 = 0
 | 
			
		||||
5:3/0/y_sort_origin = 12
 | 
			
		||||
6:3/0 = 0
 | 
			
		||||
6:3/0/y_sort_origin = 12
 | 
			
		||||
0:6/0 = 0
 | 
			
		||||
0:7/0 = 0
 | 
			
		||||
1:7/0 = 0
 | 
			
		||||
2:7/0 = 0
 | 
			
		||||
1:6/0 = 0
 | 
			
		||||
2:6/0 = 0
 | 
			
		||||
2:1/0 = 0
 | 
			
		||||
2:0/0 = 0
 | 
			
		||||
3:0/0 = 0
 | 
			
		||||
3:1/0 = 0
 | 
			
		||||
13:5/size_in_atlas = Vector2i(1, 2)
 | 
			
		||||
13:5/0 = 0
 | 
			
		||||
13:5/0/texture_origin = Vector2i(0, 8)
 | 
			
		||||
13:5/0/y_sort_origin = 8
 | 
			
		||||
13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
12:4/size_in_atlas = Vector2i(1, 3)
 | 
			
		||||
12:4/0 = 0
 | 
			
		||||
12:4/0/texture_origin = Vector2i(0, 16)
 | 
			
		||||
12:4/0/y_sort_origin = -2
 | 
			
		||||
10:3/0 = 0
 | 
			
		||||
10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
11:3/0 = 0
 | 
			
		||||
11:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
12:2/0 = 0
 | 
			
		||||
12:3/0 = 0
 | 
			
		||||
13:3/0 = 0
 | 
			
		||||
13:2/0 = 0
 | 
			
		||||
12:1/0 = 0
 | 
			
		||||
13:1/0 = 0
 | 
			
		||||
14:2/0 = 0
 | 
			
		||||
8:5/0 = 0
 | 
			
		||||
7:5/0 = 0
 | 
			
		||||
9:4/size_in_atlas = Vector2i(1, 2)
 | 
			
		||||
9:4/0 = 0
 | 
			
		||||
9:4/0/texture_origin = Vector2i(0, -8)
 | 
			
		||||
10:4/size_in_atlas = Vector2i(1, 2)
 | 
			
		||||
10:4/0 = 0
 | 
			
		||||
10:4/0/texture_origin = Vector2i(0, -8)
 | 
			
		||||
8:4/0 = 0
 | 
			
		||||
11:4/0 = 0
 | 
			
		||||
14:4/size_in_atlas = Vector2i(1, 3)
 | 
			
		||||
14:4/0 = 0
 | 
			
		||||
14:4/0/texture_origin = Vector2i(0, 16)
 | 
			
		||||
14:4/0/y_sort_origin = 8
 | 
			
		||||
14:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
3:6/0 = 0
 | 
			
		||||
3:7/0 = 0
 | 
			
		||||
4:6/0 = 0
 | 
			
		||||
7:4/0 = 0
 | 
			
		||||
15:4/size_in_atlas = Vector2i(1, 3)
 | 
			
		||||
15:4/0 = 0
 | 
			
		||||
15:4/0/texture_origin = Vector2i(0, 16)
 | 
			
		||||
15:4/0/y_sort_origin = 8
 | 
			
		||||
15:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
 | 
			
		||||
[resource]
 | 
			
		||||
occlusion_layer_0/light_mask = 1
 | 
			
		||||
| 
						 | 
				
			
			@ -735,3 +642,4 @@ navigation_layer_0/layers = 1
 | 
			
		|||
sources/0 = SubResource("TileSetAtlasSource_fcd6d")
 | 
			
		||||
sources/1 = SubResource("TileSetAtlasSource_mdfpe")
 | 
			
		||||
sources/2 = SubResource("TileSetAtlasSource_u4tjf")
 | 
			
		||||
sources/3 = SubResource("TileSetAtlasSource_45tin")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,211 @@
 | 
			
		|||
[gd_resource type="TileSet" load_steps=7 format=3 uid="uid://dkis3rb4n62cu"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://c70cn53osy56w" path="res://Assets/Sprites/dev-tileset.png" id="1_nk7yv"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://lnyd6osxcu0g" path="res://Assets/Sprites/Props/tree-autumn-cluster-tiles.png" id="2_j2hod"]
 | 
			
		||||
[ext_resource type="Texture2D" uid="uid://ccqfwgjkerta5" path="res://Assets/Sprites/grass-tileset-dark.png" id="3_dmva5"]
 | 
			
		||||
 | 
			
		||||
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_s1h2f"]
 | 
			
		||||
texture = ExtResource("1_nk7yv")
 | 
			
		||||
0:0/0 = 0
 | 
			
		||||
1:0/0 = 0
 | 
			
		||||
2:0/0 = 0
 | 
			
		||||
3:0/0 = 0
 | 
			
		||||
0:1/0 = 0
 | 
			
		||||
1:1/0 = 0
 | 
			
		||||
2:1/0 = 0
 | 
			
		||||
3:1/0 = 0
 | 
			
		||||
0:2/0 = 0
 | 
			
		||||
1:2/0 = 0
 | 
			
		||||
2:2/0 = 0
 | 
			
		||||
3:2/0 = 0
 | 
			
		||||
0:3/0 = 0
 | 
			
		||||
0:3/0/y_sort_origin = 8
 | 
			
		||||
1:3/0 = 0
 | 
			
		||||
1:3/0/y_sort_origin = 8
 | 
			
		||||
2:3/0 = 0
 | 
			
		||||
2:3/0/y_sort_origin = 8
 | 
			
		||||
0:4/0 = 0
 | 
			
		||||
0:4/0/y_sort_origin = 8
 | 
			
		||||
0:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, -8, 8, -8, 8, 8, 4, 8)
 | 
			
		||||
1:4/0 = 0
 | 
			
		||||
1:4/0/y_sort_origin = 8
 | 
			
		||||
1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
2:4/0 = 0
 | 
			
		||||
2:4/0/y_sort_origin = 8
 | 
			
		||||
2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -4, -8, -4, 8, -8, 8)
 | 
			
		||||
0:5/0 = 0
 | 
			
		||||
0:5/0/y_sort_origin = 8
 | 
			
		||||
0:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(3.5, -8, 8, -8, 8, -4, 4, -4)
 | 
			
		||||
1:5/0 = 0
 | 
			
		||||
1:5/0/y_sort_origin = 8
 | 
			
		||||
1:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, -4, -8, -4)
 | 
			
		||||
2:5/0 = 0
 | 
			
		||||
2:5/0/y_sort_origin = 8
 | 
			
		||||
2:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -4, -8, -4, -4, -8, -4)
 | 
			
		||||
3:5/0 = 0
 | 
			
		||||
3:5/0/y_sort_origin = 8
 | 
			
		||||
4:5/0 = 0
 | 
			
		||||
4:5/0/y_sort_origin = 8
 | 
			
		||||
5:5/0 = 0
 | 
			
		||||
5:5/0/y_sort_origin = 8
 | 
			
		||||
4:4/0 = 0
 | 
			
		||||
4:4/0/y_sort_origin = 8
 | 
			
		||||
4:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, -8, 4, 8, 8, 8, 8, -8)
 | 
			
		||||
3:4/0 = 0
 | 
			
		||||
3:4/0/y_sort_origin = 8
 | 
			
		||||
3:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -4, -8, -4, 8, -8, 8)
 | 
			
		||||
4:3/0 = 0
 | 
			
		||||
4:3/0/y_sort_origin = 8
 | 
			
		||||
3:3/0 = 0
 | 
			
		||||
3:3/0/y_sort_origin = 8
 | 
			
		||||
5:2/0 = 0
 | 
			
		||||
5:2/0/y_sort_origin = 8
 | 
			
		||||
4:1/0 = 0
 | 
			
		||||
4:1/0/y_sort_origin = 8
 | 
			
		||||
4:0/0 = 0
 | 
			
		||||
4:0/0/y_sort_origin = 8
 | 
			
		||||
5:0/0 = 0
 | 
			
		||||
5:0/0/y_sort_origin = 8
 | 
			
		||||
5:1/0 = 0
 | 
			
		||||
5:1/0/y_sort_origin = 8
 | 
			
		||||
4:2/0 = 0
 | 
			
		||||
4:2/0/y_sort_origin = 8
 | 
			
		||||
5:4/0 = 0
 | 
			
		||||
5:4/0/y_sort_origin = 8
 | 
			
		||||
5:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, -8, 8, -8, 8, 8, 4, 8)
 | 
			
		||||
5:3/0 = 0
 | 
			
		||||
5:3/0/y_sort_origin = 8
 | 
			
		||||
5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -4, -8, -4, 8, -8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_tw0o1"]
 | 
			
		||||
texture = ExtResource("2_j2hod")
 | 
			
		||||
0:0/0 = 0
 | 
			
		||||
0:0/0/y_sort_origin = 8
 | 
			
		||||
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
1:0/0 = 0
 | 
			
		||||
1:0/0/y_sort_origin = 8
 | 
			
		||||
1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
2:0/0 = 0
 | 
			
		||||
2:0/0/y_sort_origin = 8
 | 
			
		||||
2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
3:0/0 = 0
 | 
			
		||||
3:0/0/y_sort_origin = 8
 | 
			
		||||
3:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
0:1/0 = 0
 | 
			
		||||
0:1/0/y_sort_origin = 8
 | 
			
		||||
0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
1:1/0 = 0
 | 
			
		||||
1:1/0/y_sort_origin = 8
 | 
			
		||||
1:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
2:1/0 = 0
 | 
			
		||||
2:1/0/y_sort_origin = 8
 | 
			
		||||
2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
3:1/0 = 0
 | 
			
		||||
3:1/0/y_sort_origin = 8
 | 
			
		||||
3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
0:2/0 = 0
 | 
			
		||||
0:2/0/y_sort_origin = 8
 | 
			
		||||
0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
1:2/0 = 0
 | 
			
		||||
1:2/0/y_sort_origin = 8
 | 
			
		||||
1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
2:2/0 = 0
 | 
			
		||||
2:2/0/y_sort_origin = 8
 | 
			
		||||
2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
3:2/0 = 0
 | 
			
		||||
3:2/0/y_sort_origin = 8
 | 
			
		||||
3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
0:3/size_in_atlas = Vector2i(1, 2)
 | 
			
		||||
0:3/0 = 0
 | 
			
		||||
0:3/0/texture_origin = Vector2i(0, 8)
 | 
			
		||||
0:3/0/y_sort_origin = 8
 | 
			
		||||
0:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -24, 8, -24, 8, 8, -8, 8)
 | 
			
		||||
1:3/size_in_atlas = Vector2i(1, 2)
 | 
			
		||||
1:3/0 = 0
 | 
			
		||||
1:3/0/texture_origin = Vector2i(0, 8)
 | 
			
		||||
1:3/0/y_sort_origin = 8
 | 
			
		||||
1:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -24, 8, -24, 8, 8, -8, 8)
 | 
			
		||||
2:3/size_in_atlas = Vector2i(1, 2)
 | 
			
		||||
2:3/0 = 0
 | 
			
		||||
2:3/0/texture_origin = Vector2i(0, 8)
 | 
			
		||||
2:3/0/y_sort_origin = 8
 | 
			
		||||
2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -24, 8, -24, 8, 8, -8, 8)
 | 
			
		||||
3:3/size_in_atlas = Vector2i(1, 2)
 | 
			
		||||
3:3/0 = 0
 | 
			
		||||
3:3/0/texture_origin = Vector2i(0, 8)
 | 
			
		||||
3:3/0/y_sort_origin = 8
 | 
			
		||||
3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -24, 8, -24, 8, 8, -8, 8)
 | 
			
		||||
4:0/0 = 0
 | 
			
		||||
4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
5:0/0 = 0
 | 
			
		||||
5:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
5:1/0 = 0
 | 
			
		||||
5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
4:1/0 = 0
 | 
			
		||||
4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
4:2/0 = 0
 | 
			
		||||
4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
5:2/0 = 0
 | 
			
		||||
5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
5:3/0 = 0
 | 
			
		||||
5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
4:3/0 = 0
 | 
			
		||||
4:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
 | 
			
		||||
 | 
			
		||||
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_w8vpx"]
 | 
			
		||||
texture = ExtResource("3_dmva5")
 | 
			
		||||
0:0/0 = 0
 | 
			
		||||
1:0/0 = 0
 | 
			
		||||
1:1/0 = 0
 | 
			
		||||
2:1/0 = 0
 | 
			
		||||
3:2/0 = 0
 | 
			
		||||
4:2/0 = 0
 | 
			
		||||
4:3/0 = 0
 | 
			
		||||
5:3/0 = 0
 | 
			
		||||
0:1/0 = 0
 | 
			
		||||
0:2/0 = 0
 | 
			
		||||
0:3/0 = 0
 | 
			
		||||
0:4/0 = 0
 | 
			
		||||
0:5/0 = 0
 | 
			
		||||
1:5/0 = 0
 | 
			
		||||
1:6/0 = 0
 | 
			
		||||
2:6/0 = 0
 | 
			
		||||
0:6/0 = 0
 | 
			
		||||
0:7/0 = 0
 | 
			
		||||
1:7/0 = 0
 | 
			
		||||
2:7/0 = 0
 | 
			
		||||
2:5/0 = 0
 | 
			
		||||
1:2/0 = 0
 | 
			
		||||
1:3/0 = 0
 | 
			
		||||
2:3/0 = 0
 | 
			
		||||
3:3/0 = 0
 | 
			
		||||
1:4/0 = 0
 | 
			
		||||
6:3/0 = 0
 | 
			
		||||
2:4/0 = 0
 | 
			
		||||
3:4/0 = 0
 | 
			
		||||
4:4/0 = 0
 | 
			
		||||
2:2/0 = 0
 | 
			
		||||
5:4/0 = 0
 | 
			
		||||
6:4/0 = 0
 | 
			
		||||
7:4/0 = 0
 | 
			
		||||
7:3/0 = 0
 | 
			
		||||
2:0/0 = 0
 | 
			
		||||
3:0/0 = 0
 | 
			
		||||
4:0/0 = 0
 | 
			
		||||
5:0/0 = 0
 | 
			
		||||
6:0/0 = 0
 | 
			
		||||
7:0/0 = 0
 | 
			
		||||
7:1/0 = 0
 | 
			
		||||
6:2/0 = 0
 | 
			
		||||
5:2/0 = 0
 | 
			
		||||
4:1/0 = 0
 | 
			
		||||
3:1/0 = 0
 | 
			
		||||
6:1/0 = 0
 | 
			
		||||
7:2/0 = 0
 | 
			
		||||
5:1/0 = 0
 | 
			
		||||
 | 
			
		||||
[resource]
 | 
			
		||||
physics_layer_0/collision_layer = 1
 | 
			
		||||
sources/0 = SubResource("TileSetAtlasSource_s1h2f")
 | 
			
		||||
sources/3 = SubResource("TileSetAtlasSource_w8vpx")
 | 
			
		||||
sources/1 = SubResource("TileSetAtlasSource_tw0o1")
 | 
			
		||||
| 
						 | 
				
			
			@ -23,17 +23,14 @@ public abstract partial class PlayerState : CharacterState
 | 
			
		|||
        {
 | 
			
		||||
            if (@event.IsActionPressed("equip_1"))
 | 
			
		||||
            {
 | 
			
		||||
                //inventory.SelectedItem = inventory.GetItemByMap("equip_1");
 | 
			
		||||
                inventory.SelectedIndex = 0;
 | 
			
		||||
            }
 | 
			
		||||
            else if (@event.IsActionPressed("equip_2"))
 | 
			
		||||
            {
 | 
			
		||||
                //inventory.SelectedItem = inventory.GetItemByMap("equip_2");
 | 
			
		||||
                inventory.SelectedIndex = 1;
 | 
			
		||||
            }
 | 
			
		||||
            else if (@event.IsActionPressed("equip_3"))
 | 
			
		||||
            {
 | 
			
		||||
                //inventory.SelectedItem = inventory.GetItemByMap("equip_3");
 | 
			
		||||
                inventory.SelectedIndex = 2;
 | 
			
		||||
            }
 | 
			
		||||
            else if (@event.IsActionPressed("next_item"))
 | 
			
		||||
| 
						 | 
				
			
			@ -58,6 +55,13 @@ public abstract partial class PlayerState : CharacterState
 | 
			
		|||
                    return MaxLevelState;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (@event.IsActionPressed("inventory"))
 | 
			
		||||
            {
 | 
			
		||||
                var bus = Events.EventBus.Instance;
 | 
			
		||||
                bus.EmitSignal(Events.EventBus.SignalName.PlayerOpenInventory,
 | 
			
		||||
                    player.Inventory);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return base.UnhandledInput(@event);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@ using SupaLidlGame.Utils;
 | 
			
		|||
 | 
			
		||||
namespace SupaLidlGame.State.Global;
 | 
			
		||||
 | 
			
		||||
public partial class GlobalState : Node
 | 
			
		||||
public partial class GlobalState : Node, ISave
 | 
			
		||||
{
 | 
			
		||||
    [Export]
 | 
			
		||||
    public Progression Progression { get; set; }
 | 
			
		||||
| 
						 | 
				
			
			@ -14,6 +14,10 @@ public partial class GlobalState : Node
 | 
			
		|||
    [Export]
 | 
			
		||||
    public Stats Stats { get; set; }
 | 
			
		||||
 | 
			
		||||
    private ulong _saveTimeElapsed = 0;
 | 
			
		||||
 | 
			
		||||
    public ulong TimeElapsed => _saveTimeElapsed + Godot.Time.GetTicksMsec();
 | 
			
		||||
 | 
			
		||||
    public static GlobalState Instance { get; private set; }
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
| 
						 | 
				
			
			@ -76,6 +80,20 @@ public partial class GlobalState : Node
 | 
			
		|||
        Progression = save.Progression;
 | 
			
		||||
        MapState = save.MapState;
 | 
			
		||||
        Stats = save.Stats;
 | 
			
		||||
        _saveTimeElapsed = save.TimeElapsed; // use as offset
 | 
			
		||||
 | 
			
		||||
        var inventory = World.Instance.CurrentPlayer.Inventory;
 | 
			
		||||
        inventory.Items = Stats.Items;
 | 
			
		||||
 | 
			
		||||
        for (int i = 0; i < Stats.HotbarToItemIndexMap.Count; i++)
 | 
			
		||||
        {
 | 
			
		||||
            int itemIndex = Stats.HotbarToItemIndexMap[i];
 | 
			
		||||
 | 
			
		||||
            if (itemIndex >= 0)
 | 
			
		||||
            {
 | 
			
		||||
                inventory.SetHotbarIndexToItemIndex(i, itemIndex);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void ExportToSave(Save save)
 | 
			
		||||
| 
						 | 
				
			
			@ -83,5 +101,10 @@ public partial class GlobalState : Node
 | 
			
		|||
        save.Progression = Progression;
 | 
			
		||||
        save.MapState = MapState;
 | 
			
		||||
        save.Stats = Stats;
 | 
			
		||||
        save.TimeElapsed = TimeElapsed; // update time elapsed when saving
 | 
			
		||||
 | 
			
		||||
        var inventory = World.Instance.CurrentPlayer.Inventory;
 | 
			
		||||
        Stats.Items = inventory.Items;
 | 
			
		||||
        Stats.HotbarToItemIndexMap = inventory.HotbarToItemIndexMap;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,4 +54,14 @@ public partial class MapState : Resource
 | 
			
		|||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Variant Get(string key)
 | 
			
		||||
    {
 | 
			
		||||
        return this[key];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void Set(string key, Variant value)
 | 
			
		||||
    {
 | 
			
		||||
        this[key] = value;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
using Godot;
 | 
			
		||||
using Godot.Collections;
 | 
			
		||||
 | 
			
		||||
namespace SupaLidlGame.State.Global;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -13,4 +14,10 @@ public partial class Stats : Resource
 | 
			
		|||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public int DeathCount { get; set; } = 0;
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public Array<Items.ItemMetadata> Items { get; set; } = new();
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public Array<int> HotbarToItemIndexMap { get; set; } = new();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,24 +15,39 @@ public partial class DocExitState : NPCState
 | 
			
		|||
 | 
			
		||||
    private double _currentDuration = 0;
 | 
			
		||||
 | 
			
		||||
    private bool _hasPlayedExitAnim = false;
 | 
			
		||||
 | 
			
		||||
    private bool _previouslyCouldAttack = false;
 | 
			
		||||
 | 
			
		||||
    public override NPCState Enter(IState<NPCState> previousState)
 | 
			
		||||
    {
 | 
			
		||||
        _currentDuration = Duration;
 | 
			
		||||
        TelegraphAnimationPlayer.Play("exit_out");
 | 
			
		||||
        NPC.ShouldMove = false;
 | 
			
		||||
        _hasPlayedExitAnim = false;
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public override void Exit(IState<NPCState> nextState)
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        NPC.CanAttack = _previouslyCouldAttack;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public override NPCState Process(double delta)
 | 
			
		||||
    {
 | 
			
		||||
        if ((_currentDuration -= delta) <= 0)
 | 
			
		||||
        if (!NPC.Inventory.IsUsingItem)
 | 
			
		||||
        {
 | 
			
		||||
            return TelegraphState;
 | 
			
		||||
            if (!_hasPlayedExitAnim)
 | 
			
		||||
            {
 | 
			
		||||
                _hasPlayedExitAnim = true;
 | 
			
		||||
                _previouslyCouldAttack = NPC.CanAttack;
 | 
			
		||||
                NPC.CanAttack = false;
 | 
			
		||||
                TelegraphAnimationPlayer.Play("exit_out");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((_currentDuration -= delta) <= 0)
 | 
			
		||||
            {
 | 
			
		||||
                return TelegraphState;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,8 +33,19 @@ public partial class DocTelegraphState : NPCState
 | 
			
		|||
 | 
			
		||||
        do
 | 
			
		||||
        {
 | 
			
		||||
            float randX = GD.RandRange(-112, 112);
 | 
			
		||||
            float randY = GD.RandRange(-112, 112);
 | 
			
		||||
            float randX = GD.RandRange(32, 112);
 | 
			
		||||
            float randY = GD.RandRange(32, 112);
 | 
			
		||||
 | 
			
		||||
            if (GD.Randi() % 2 == 0)
 | 
			
		||||
            {
 | 
			
		||||
                randX = -randX;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (GD.Randi() % 2 == 0)
 | 
			
		||||
            {
 | 
			
		||||
                randY = -randY;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            randVec = new Vector2(randX, randY);
 | 
			
		||||
        }
 | 
			
		||||
        while (randVec.DistanceSquaredTo(player.GlobalPosition) < 9216);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||