Compare commits

...

45 Commits

Author SHA1 Message Date
HumanoidSandvichDispenser 24b5dc09d0
Merge 79e42d5b02 into 5e87a02a76 2024-11-26 16:54:03 +00:00
John Montagu, the 4th Earl of Sandvich 5e87a02a76
Update Godot .NET SDK to 4.3.0 release 2024-10-18 15:06:52 -07:00
John Montagu, the 4th Earl of Sandvich 534f9436ee
Set XP decay timer to be one shot 2024-10-18 15:06:52 -07:00
John Montagu, the 4th Earl of Sandvich 7f7d079bb4
Add hitbox/hurtbox layer names 2024-10-18 15:06:52 -07:00
John Montagu, the 4th Earl of Sandvich d9f36896ad
Implement `Node.GetChildrenEnumerable` extension 2024-10-18 15:06:52 -07:00
John Montagu, the 4th Earl of Sandvich b5b3f86fb6
Update weapon mechanics 2024-10-18 15:06:52 -07:00
John Montagu, the 4th Earl of Sandvich 767a9830e7
Add debug commands 2024-10-18 15:06:52 -07:00
John Montagu, the 4th Earl of Sandvich a8e4aca91e
Make Inventory remove item from hotbar as well
Inventory.Remove(ItemMetadata) removes the item from both the inventory
and the hotbar
2024-10-18 15:06:51 -07:00
John Montagu, the 4th Earl of Sandvich df82248670
Add TimeElapsed property 2024-10-18 11:10:34 -07:00
John Montagu, the 4th Earl of Sandvich 28a408de1b
Add ISave interface 2024-10-17 13:29:47 -07:00
John Montagu, the 4th Earl of Sandvich c0424444b9
Make Doc dash away instead of predetermined angle 2024-10-11 19:00:19 -07:00
John Montagu, the 4th Earl of Sandvich feec74fa65
Make Doc dodge projectiles during lance state 2024-10-11 12:24:13 -07:00
John Montagu, the 4th Earl of Sandvich b54ce905ab
Make Hurtbox and Hitbox have dedicated layers 2024-10-11 11:39:14 -07:00
John Montagu, the 4th Earl of Sandvich ec5204c452
Remove Player.InventoryMap 2024-10-05 16:21:42 -07:00
John Montagu, the 4th Earl of Sandvich cfb8527a42 Fix broken WorldEnvironment for maps 2024-10-05 15:52:31 -07:00
HumanoidSandvichDispenser c85aeb6b5b
Implement saving and loading hotbar state (#45) 2024-10-05 15:46:40 -07:00
HumanoidSandvichDispenser b687b49e52
Implement all current work-in-progress features (#43)
* Add WIP vendors

* Add TimerExtensions

* chore: Update dialogue manager version

* Add Inventory.EquippedItem signal

* Move files to UI.Inventory namespace

* Modify Hotbar and InventorySlot organization

Made InventorySlot a bit more modular.

* Modify hotbar icons

* Implement request to display shop

* Add forsenLevel placeholder icon

* Add shop UI

* Update UI to use theme and click through

* Update item metadata

Added placeholder icons for items without an icon.

* Add Snus Dealer example vendor NPC

* Implement factions with bitflags instead

* Fix typo in Doc dialogue

* Hide and show shop menu

* Add shaders

* Add newline to console output

* Add modal interface

* wip: new sprites

* Add new tileset

* wip: Redesign Depths of the Arena

* Change tiles

* Implement igniting bow arrows

* Add bow alt-fire ability

* Update Arena redesign

* Add Doc summon sounds

* Add inventory menu

* Add glow to effects

* Add some props to ArenaExterior

* Add alt fire to RangedIdleState

* Add keybinds for inventory menu

* Make arrows remain on fire if bow was set on fire

* Redesign Arena

* Add Sword effects and self knockback

* Update lighting effects

* Add wait/delay for Doc to exit when attacking

* Modify UI
2024-09-16 12:33:29 -07:00
HumanoidSandvichDispenser 12767e3c70
Merge branch 'wip' into master (#42)
* Implement igniting bow arrows

* Add bow alt-fire ability
2024-07-06 22:51:09 -07:00
HumanoidSandvichDispenser f0ac72b919
Redesign Arena tilemap (#41)
* Add new tileset

* Change tilemap
2024-06-24 16:07:15 -07:00
John Montagu, the 4th Earl of Sandvich 3ea50d5c97
Merge branch 'phantom-camera' 2024-06-09 08:13:57 -07:00
HumanoidSandvichDispenser 0c0aa63cc6
Implement phantom camera (#39)
* Add PhantomCamera nodes

* temp: Remove CameraBounds events

* Add CameraTrigger

* Add proper CameraTriggers to Arena.tscn

* Remove CameraBounds
2024-06-07 21:14:35 -07:00
John Montagu, the 4th Earl of Sandvich e7d0116ad7
Remove CameraBounds 2024-06-07 20:53:35 -07:00
John Montagu, the 4th Earl of Sandvich cb24cb5809
Add proper CameraTriggers to Arena.tscn 2024-06-07 20:52:06 -07:00
John Montagu, the 4th Earl of Sandvich ceba8f9386
Add CameraTrigger 2024-06-07 07:24:20 -07:00
John Montagu, the 4th Earl of Sandvich ad8ef32ea0
temp: Remove CameraBounds events 2024-06-07 07:14:29 -07:00
John Montagu, the 4th Earl of Sandvich 3248794dc3
Add PhantomCamera nodes 2024-06-07 07:14:29 -07:00
John Montagu, the 4th Earl of Sandvich 462f90dce7
Change map node ordering 2024-06-07 07:12:33 -07:00
John Montagu, the 4th Earl of Sandvich 8512bfd2de
Fix y-sort not applying to TileMapLayers 2024-06-07 07:10:23 -07:00
John Montagu, the 4th Earl of Sandvich 2ddf6dca5a
Change TileMaps to use TileMapLayers instead
TileMaps are now deprecated in 4.3 beta 1
2024-06-07 06:55:48 -07:00
John Montagu, the 4th Earl of Sandvich dd9b618bcf
Remove old maps 2024-06-07 06:52:31 -07:00
John Montagu, the 4th Earl of Sandvich 085f9287bd
Update Godot to 4.3 beta 1 2024-06-07 06:51:41 -07:00
John Montagu, the 4th Earl of Sandvich 164a13776a
Use AOT compilation 2024-06-06 19:15:48 -07:00
John Montagu, the 4th Earl of Sandvich 8764d12859
Remove resource UIDs 2024-06-06 09:40:11 -07:00
John Montagu, the 4th Earl of Sandvich 94d66ec8da
Use Forest tileset as external resource 2024-06-06 09:38:25 -07:00
John Montagu, the 4th Earl of Sandvich b7547f3b38
Remove print statement 2024-06-06 09:37:56 -07:00
John Montagu, the 4th Earl of Sandvich 2cffab617c
Fix DocLegionary NPC off-center sprite 2024-06-06 09:31:13 -07:00
John Montagu, the 4th Earl of Sandvich 590f440b92
Add correct faction to Doc NPCs 2024-06-06 09:30:21 -07:00
John Montagu, the 4th Earl of Sandvich 0f73567aa7
Fix navigation issues 2024-06-06 09:27:59 -07:00
John Montagu, the 4th Earl of Sandvich 057aedca30
Add check to not rebake while navmesh is baking 2024-06-06 09:23:33 -07:00
John Montagu, the 4th Earl of Sandvich c3ead0cdaa
Add Get and Set methods for MapState 2024-06-06 09:22:26 -07:00
John Montagu, the 4th Earl of Sandvich 4f3d5dd316
Use World singleton 2024-06-06 09:21:39 -07:00
John Montagu, the 4th Earl of Sandvich a67dedf3f9
Add `Map.GetCharacters()` 2024-06-06 07:59:29 -07:00
John Montagu, the 4th Earl of Sandvich 4c780da552
Fix alt fire on joystick right 2024-06-05 12:20:30 -07:00
John Montagu, the 4th Earl of Sandvich 54ddc63fbe
Remove parentheses check in parser 2024-06-05 12:13:36 -07:00
HumanoidSandvichDispenser 79e42d5b02
Update issue templates 2024-05-17 23:42:44 -07:00
236 changed files with 21081 additions and 3187 deletions

View File

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

View File

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

View File

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

Binary file not shown.

View File

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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 743 B

View File

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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

View File

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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 B

View File

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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

View File

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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

View File

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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 B

View File

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

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 783 B

After

Width:  |  Height:  |  Size: 810 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 B

After

Width:  |  Height:  |  Size: 148 B

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

View File

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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B

View File

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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -65,4 +65,15 @@ public abstract partial class Item : Node2D
{
}
public virtual void Remove()
{
if (IsUsing)
{
Deuse();
}
Unequip(CharacterOwner);
QueueFree();
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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