Merge branch 'wip'
|
@ -0,0 +1,7 @@
|
||||||
|
[gd_resource type="FontVariation" load_steps=2 format=3 uid="uid://ndkrorerbxft"]
|
||||||
|
|
||||||
|
[ext_resource type="FontFile" uid="uid://cgwa8bjiyv534" path="res://Assets/Fonts/alagard.ttf" id="1_krbnd"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
base_font = ExtResource("1_krbnd")
|
||||||
|
spacing_glyph = 4
|
|
@ -0,0 +1,7 @@
|
||||||
|
[gd_resource type="FontVariation" load_steps=2 format=3 uid="uid://bjnmfgt5yqle7"]
|
||||||
|
|
||||||
|
[ext_resource type="FontFile" uid="uid://bo3obq6sos7lu" path="res://Assets/Fonts/compass-pro.ttf" id="1_brr65"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
base_font = ExtResource("1_brr65")
|
||||||
|
spacing_glyph = 4
|
|
@ -0,0 +1,33 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="font_data_dynamic"
|
||||||
|
type="FontFile"
|
||||||
|
uid="uid://bo3obq6sos7lu"
|
||||||
|
path="res://.godot/imported/compass-pro.ttf-5e813dda823d14f9501edd94273a527c.fontdata"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Fonts/compass-pro.ttf"
|
||||||
|
dest_files=["res://.godot/imported/compass-pro.ttf-5e813dda823d14f9501edd94273a527c.fontdata"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
Rendering=null
|
||||||
|
antialiasing=1
|
||||||
|
generate_mipmaps=false
|
||||||
|
multichannel_signed_distance_field=false
|
||||||
|
msdf_pixel_range=8
|
||||||
|
msdf_size=48
|
||||||
|
allow_system_fallback=true
|
||||||
|
force_autohinter=false
|
||||||
|
hinting=1
|
||||||
|
subpixel_positioning=1
|
||||||
|
oversampling=0.0
|
||||||
|
Fallbacks=null
|
||||||
|
fallbacks=[]
|
||||||
|
Compress=null
|
||||||
|
compress=true
|
||||||
|
preload=[]
|
||||||
|
language_support={}
|
||||||
|
script_support={}
|
||||||
|
opentype_features={}
|
|
@ -0,0 +1,19 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="mp3"
|
||||||
|
type="AudioStreamMP3"
|
||||||
|
uid="uid://ipss4y2gkk3y"
|
||||||
|
path="res://.godot/imported/gillette.mp3-5dd6f93f1f9df01778f80e3dd2caeb1e.mp3str"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Music/gillette.mp3"
|
||||||
|
dest_files=["res://.godot/imported/gillette.mp3-5dd6f93f1f9df01778f80e3dd2caeb1e.mp3str"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
loop=false
|
||||||
|
loop_offset=0
|
||||||
|
bpm=0
|
||||||
|
beat_count=0
|
||||||
|
bar_beats=4
|
|
@ -0,0 +1,24 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wav"
|
||||||
|
type="AudioStreamWAV"
|
||||||
|
uid="uid://cqj44je3mvk60"
|
||||||
|
path="res://.godot/imported/rauuul.wav-9eb73999b440b60f20c6cb1832d4cb17.sample"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sounds/rauuul.wav"
|
||||||
|
dest_files=["res://.godot/imported/rauuul.wav-9eb73999b440b60f20c6cb1832d4cb17.sample"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
force/8_bit=false
|
||||||
|
force/mono=false
|
||||||
|
force/max_rate=false
|
||||||
|
force/max_rate_hz=44100
|
||||||
|
edit/trim=false
|
||||||
|
edit/normalize=false
|
||||||
|
edit/loop_mode=0
|
||||||
|
edit/loop_begin=0
|
||||||
|
edit/loop_end=-1
|
||||||
|
compress/mode=0
|
|
@ -0,0 +1,24 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wav"
|
||||||
|
type="AudioStreamWAV"
|
||||||
|
uid="uid://jsnjoyaj6p5a"
|
||||||
|
path="res://.godot/imported/rock-smash.wav-5412810912e8fdbd3060f5accd900f03.sample"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sounds/rock-smash.wav"
|
||||||
|
dest_files=["res://.godot/imported/rock-smash.wav-5412810912e8fdbd3060f5accd900f03.sample"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
force/8_bit=false
|
||||||
|
force/mono=false
|
||||||
|
force/max_rate=false
|
||||||
|
force/max_rate_hz=44100
|
||||||
|
edit/trim=false
|
||||||
|
edit/normalize=false
|
||||||
|
edit/loop_mode=0
|
||||||
|
edit/loop_begin=0
|
||||||
|
edit/loop_end=-1
|
||||||
|
compress/mode=0
|
|
@ -0,0 +1,24 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wav"
|
||||||
|
type="AudioStreamWAV"
|
||||||
|
uid="uid://cceld51anbm1m"
|
||||||
|
path="res://.godot/imported/unsheathe.wav-44389853e33f8a5eeb838ecbc38c9e52.sample"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sounds/unsheathe.wav"
|
||||||
|
dest_files=["res://.godot/imported/unsheathe.wav-44389853e33f8a5eeb838ecbc38c9e52.sample"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
force/8_bit=false
|
||||||
|
force/mono=false
|
||||||
|
force/max_rate=false
|
||||||
|
force/max_rate_hz=44100
|
||||||
|
edit/trim=false
|
||||||
|
edit/normalize=false
|
||||||
|
edit/loop_mode=0
|
||||||
|
edit/loop_begin=0
|
||||||
|
edit/loop_end=-1
|
||||||
|
compress/mode=0
|
|
@ -0,0 +1,24 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wav"
|
||||||
|
type="AudioStreamWAV"
|
||||||
|
uid="uid://qvthq6tppp63"
|
||||||
|
path="res://.godot/imported/whoosh.wav-ed2d61376c9fa3c90f1bcd8d0d47a04b.sample"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sounds/whoosh.wav"
|
||||||
|
dest_files=["res://.godot/imported/whoosh.wav-ed2d61376c9fa3c90f1bcd8d0d47a04b.sample"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
force/8_bit=false
|
||||||
|
force/mono=false
|
||||||
|
force/max_rate=false
|
||||||
|
force/max_rate_hz=44100
|
||||||
|
edit/trim=false
|
||||||
|
edit/normalize=false
|
||||||
|
edit/loop_mode=0
|
||||||
|
edit/loop_begin=0
|
||||||
|
edit/loop_end=-1
|
||||||
|
compress/mode=0
|
Before Width: | Height: | Size: 536 B After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 78 B |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dpepm54hjuyga"
|
||||||
|
path="res://.godot/imported/forsen-hand.png-d22d8449d49935bb2be976828e8a6ea2.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/Characters/forsen-hand.png"
|
||||||
|
dest_files=["res://.godot/imported/forsen-hand.png-d22d8449d49935bb2be976828e8a6ea2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
After Width: | Height: | Size: 629 B |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bwlk47lcbhlds"
|
||||||
|
path="res://.godot/imported/forsen2-portrait.png-ca8f11b7ad39ec3d34d5a24ad210303a.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/Characters/forsen2-portrait.png"
|
||||||
|
dest_files=["res://.godot/imported/forsen2-portrait.png-ca8f11b7ad39ec3d34d5a24ad210303a.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 523 B |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://qc6agawkad5k"
|
||||||
|
path="res://.godot/imported/compact-disc.png-5b17d460d1330809bc650ebf5321160e.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/Misc/compact-disc.png"
|
||||||
|
dest_files=["res://.godot/imported/compact-disc.png-5b17d460d1330809bc650ebf5321160e.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
|
|
@ -0,0 +1,22 @@
|
||||||
|
[gd_resource type="ParticleProcessMaterial" load_steps=3 format=3 uid="uid://rcjujd5dv7lm"]
|
||||||
|
|
||||||
|
[sub_resource type="Gradient" id="Gradient_v7xci"]
|
||||||
|
offsets = PackedFloat32Array(0.525926, 0.6)
|
||||||
|
colors = PackedColorArray(0, 0, 0, 1, 1, 0, 0, 1)
|
||||||
|
|
||||||
|
[sub_resource type="GradientTexture1D" id="GradientTexture1D_pntll"]
|
||||||
|
gradient = SubResource("Gradient_v7xci")
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
particle_flag_disable_z = true
|
||||||
|
spread = 180.0
|
||||||
|
gravity = Vector3(0, 0, 0)
|
||||||
|
initial_velocity_min = 64.0
|
||||||
|
initial_velocity_max = 96.0
|
||||||
|
orbit_velocity_min = 0.0
|
||||||
|
orbit_velocity_max = 0.0
|
||||||
|
linear_accel_min = -128.0
|
||||||
|
linear_accel_max = -96.0
|
||||||
|
scale_min = 0.1
|
||||||
|
scale_max = 0.2
|
||||||
|
color_initial_ramp = SubResource("GradientTexture1D_pntll")
|
|
@ -0,0 +1,25 @@
|
||||||
|
[gd_resource type="ParticleProcessMaterial" load_steps=3 format=3 uid="uid://bat28samf7ukd"]
|
||||||
|
|
||||||
|
[sub_resource type="Curve" id="Curve_jqr7v"]
|
||||||
|
_data = [Vector2(0, 0), 0.0, 2.0, 0, 1, Vector2(0.5, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), -2.0, 0.0, 1, 0]
|
||||||
|
point_count = 3
|
||||||
|
|
||||||
|
[sub_resource type="CurveTexture" id="CurveTexture_s2csc"]
|
||||||
|
curve = SubResource("Curve_jqr7v")
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
emission_shape = 1
|
||||||
|
emission_sphere_radius = 8.0
|
||||||
|
particle_flag_disable_z = true
|
||||||
|
direction = Vector3(0, -1, 0)
|
||||||
|
gravity = Vector3(0, 0, 0)
|
||||||
|
initial_velocity_min = 64.0
|
||||||
|
initial_velocity_max = 128.0
|
||||||
|
orbit_velocity_min = 0.0
|
||||||
|
orbit_velocity_max = 0.0
|
||||||
|
linear_accel_min = -256.0
|
||||||
|
linear_accel_max = -128.0
|
||||||
|
scale_min = 0.01
|
||||||
|
scale_max = 0.02
|
||||||
|
scale_curve = SubResource("CurveTexture_s2csc")
|
||||||
|
attractor_interaction_enabled = false
|
|
@ -0,0 +1,32 @@
|
||||||
|
[gd_resource type="ParticleProcessMaterial" load_steps=5 format=3 uid="uid://cbfaqolx1ydvv"]
|
||||||
|
|
||||||
|
[sub_resource type="Gradient" id="Gradient_44upg"]
|
||||||
|
offsets = PackedFloat32Array(0, 0.5)
|
||||||
|
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
|
||||||
|
|
||||||
|
[sub_resource type="GradientTexture1D" id="GradientTexture1D_droiy"]
|
||||||
|
gradient = SubResource("Gradient_44upg")
|
||||||
|
|
||||||
|
[sub_resource type="Curve" id="Curve_4kf4j"]
|
||||||
|
_data = [Vector2(0, 0.5), 0.0, 0.0, 0, 0, Vector2(0.1, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.5), 0.0, 0.0, 0, 0]
|
||||||
|
point_count = 3
|
||||||
|
|
||||||
|
[sub_resource type="CurveTexture" id="CurveTexture_qqrjb"]
|
||||||
|
curve = SubResource("Curve_4kf4j")
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
emission_shape = 1
|
||||||
|
emission_sphere_radius = 4.0
|
||||||
|
particle_flag_disable_z = true
|
||||||
|
spread = 180.0
|
||||||
|
gravity = Vector3(0, 0, 0)
|
||||||
|
initial_velocity_min = 256.0
|
||||||
|
initial_velocity_max = 256.0
|
||||||
|
orbit_velocity_min = 0.0
|
||||||
|
orbit_velocity_max = 0.0
|
||||||
|
linear_accel_min = -512.0
|
||||||
|
linear_accel_max = -512.0
|
||||||
|
scale_min = 2.0
|
||||||
|
scale_max = 2.0
|
||||||
|
scale_curve = SubResource("CurveTexture_qqrjb")
|
||||||
|
color_ramp = SubResource("GradientTexture1D_droiy")
|
|
@ -0,0 +1,42 @@
|
||||||
|
[gd_resource type="ParticleProcessMaterial" load_steps=7 format=3 uid="uid://x5qcq5muvc3g"]
|
||||||
|
|
||||||
|
[sub_resource type="Gradient" id="Gradient_6k7fi"]
|
||||||
|
offsets = PackedFloat32Array(0, 0.540741, 0.592593, 1)
|
||||||
|
colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1)
|
||||||
|
|
||||||
|
[sub_resource type="GradientTexture1D" id="GradientTexture1D_1phkb"]
|
||||||
|
gradient = SubResource("Gradient_6k7fi")
|
||||||
|
|
||||||
|
[sub_resource type="Gradient" id="Gradient_3tax5"]
|
||||||
|
offsets = PackedFloat32Array(0, 0.533333, 1)
|
||||||
|
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0)
|
||||||
|
|
||||||
|
[sub_resource type="GradientTexture1D" id="GradientTexture1D_13jjx"]
|
||||||
|
gradient = SubResource("Gradient_3tax5")
|
||||||
|
|
||||||
|
[sub_resource type="Curve" id="Curve_0565g"]
|
||||||
|
_data = [Vector2(0, 0.5), 0.0, 5.0, 0, 1, Vector2(0.1, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), -1.11111, 0.0, 1, 0]
|
||||||
|
point_count = 3
|
||||||
|
|
||||||
|
[sub_resource type="CurveTexture" id="CurveTexture_k4txv"]
|
||||||
|
curve = SubResource("Curve_0565g")
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
emission_shape = 2
|
||||||
|
emission_sphere_radius = 32.0
|
||||||
|
particle_flag_disable_z = true
|
||||||
|
direction = Vector3(0, -1, 0)
|
||||||
|
gravity = Vector3(0, 0, 0)
|
||||||
|
initial_velocity_min = 128.0
|
||||||
|
initial_velocity_max = 256.0
|
||||||
|
orbit_velocity_min = 0.0
|
||||||
|
orbit_velocity_max = 0.0
|
||||||
|
tangential_accel_min = -16.0
|
||||||
|
tangential_accel_max = 16.0
|
||||||
|
scale_min = 0.25
|
||||||
|
scale_max = 0.25
|
||||||
|
scale_curve = SubResource("CurveTexture_k4txv")
|
||||||
|
color_ramp = SubResource("GradientTexture1D_13jjx")
|
||||||
|
color_initial_ramp = SubResource("GradientTexture1D_1phkb")
|
||||||
|
turbulence_enabled = true
|
||||||
|
turbulence_noise_scale = 4.0
|
After Width: | Height: | Size: 131 B |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://c1a7lvb4uuwfy"
|
||||||
|
path="res://.godot/imported/circle-16.png-2c9910635b94cf262d735877f73c9d54.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/Particles/circle-16.png"
|
||||||
|
dest_files=["res://.godot/imported/circle-16.png-2c9910635b94cf262d735877f73c9d54.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
After Width: | Height: | Size: 765 B |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://d75jkoev5v3w"
|
||||||
|
path="res://.godot/imported/circle-64.png-14e0a440e19bf6b7889c28107bfd3189.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/Particles/circle-64.png"
|
||||||
|
dest_files=["res://.godot/imported/circle-64.png-14e0a440e19bf6b7889c28107bfd3189.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
After Width: | Height: | Size: 4.8 KiB |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bd8l8kafb42dt"
|
||||||
|
path="res://.godot/imported/circle.png-e947f0f855ee4b3d0717c4cb325e029e.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/Particles/circle.png"
|
||||||
|
dest_files=["res://.godot/imported/circle.png-e947f0f855ee4b3d0717c4cb325e029e.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
After Width: | Height: | Size: 633 B |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://d1ukste16yq6v"
|
||||||
|
path="res://.godot/imported/player-light.png-261881914c11364b14e2af7628defbb7.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/Particles/player-light.png"
|
||||||
|
dest_files=["res://.godot/imported/player-light.png-261881914c11364b14e2af7628defbb7.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
After Width: | Height: | Size: 102 B |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b07x1uedfexfi"
|
||||||
|
path="res://.godot/imported/boss-bar.png-14402f9e8d9c8a30b766d18572a90e44.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/UI/boss-bar.png"
|
||||||
|
dest_files=["res://.godot/imported/boss-bar.png-14402f9e8d9c8a30b766d18572a90e44.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
After Width: | Height: | Size: 78 B |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b75oak1nd2q6x"
|
||||||
|
path="res://.godot/imported/over-under-bar.png-2dd8e0831ce7b8d0ab833d2ac7ca543b.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/UI/over-under-bar.png"
|
||||||
|
dest_files=["res://.godot/imported/over-under-bar.png-2dd8e0831ce7b8d0ab833d2ac7ca543b.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
After Width: | Height: | Size: 102 B |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://co7xm7i5f6n51"
|
||||||
|
path="res://.godot/imported/progress-bar.png-0e003ec68d4d1aedbb2c4345d3d47107.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/UI/progress-bar.png"
|
||||||
|
dest_files=["res://.godot/imported/progress-bar.png-0e003ec68d4d1aedbb2c4345d3d47107.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 342 B |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://o7enu13gvji5"
|
||||||
|
path="res://.godot/imported/doc-lance.png-2fd1894aa4282b30b176bb21b10e8c6f.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/doc-lance.png"
|
||||||
|
dest_files=["res://.godot/imported/doc-lance.png-2fd1894aa4282b30b176bb21b10e8c6f.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
After Width: | Height: | Size: 785 B |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cmvh6pc71ir1m"
|
||||||
|
path="res://.godot/imported/sword-swing-large.png-d24bea57b216aba22c9a1cccd93085d2.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/sword-swing-large.png"
|
||||||
|
dest_files=["res://.godot/imported/sword-swing-large.png-d24bea57b216aba22c9a1cccd93085d2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
Before Width: | Height: | Size: 325 B After Width: | Height: | Size: 299 B |
|
@ -0,0 +1,21 @@
|
||||||
|
using Godot;
|
||||||
|
|
||||||
|
namespace SupaLidlGame.BoundingBoxes;
|
||||||
|
|
||||||
|
public partial class CameraBounds : Area2D
|
||||||
|
{
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
BodyEntered += OnBodyEntered;
|
||||||
|
base._Ready();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnBodyEntered(Node2D body)
|
||||||
|
{
|
||||||
|
if (body is Characters.Player player)
|
||||||
|
{
|
||||||
|
var camera = player.Camera;
|
||||||
|
//camera.LimitLeft =
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,8 +11,13 @@ public partial class Hurtbox : BoundingBox, IFaction
|
||||||
float damage,
|
float damage,
|
||||||
Character inflictor,
|
Character inflictor,
|
||||||
float knockback,
|
float knockback,
|
||||||
Vector2 knockbackOrigin = default,
|
Vector2 knockbackDir = default);
|
||||||
Vector2 knockbackVector = default);
|
|
||||||
|
/// <summary>
|
||||||
|
/// The timer to use for invincibility frames
|
||||||
|
/// </summary>
|
||||||
|
[Export]
|
||||||
|
public Timer InvincibilityTimer { get; set; }
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
|
@ -20,6 +25,15 @@ public partial class Hurtbox : BoundingBox, IFaction
|
||||||
{
|
{
|
||||||
Faction = factionEntity.Faction;
|
Faction = factionEntity.Faction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (InvincibilityTimer is not null)
|
||||||
|
{
|
||||||
|
InvincibilityTimer.Timeout += () =>
|
||||||
|
{
|
||||||
|
GD.Print("invincibility off");
|
||||||
|
Monitorable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InflictDamage(
|
public void InflictDamage(
|
||||||
|
@ -29,11 +43,48 @@ public partial class Hurtbox : BoundingBox, IFaction
|
||||||
Vector2 knockbackOrigin = default,
|
Vector2 knockbackOrigin = default,
|
||||||
Vector2 knockbackVector = default)
|
Vector2 knockbackVector = default)
|
||||||
{
|
{
|
||||||
|
if (!IsInstanceValid(this))
|
||||||
|
{
|
||||||
|
// this should fix the error of the object being invalid
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 knockbackDir = knockbackVector;
|
||||||
|
if (knockbackDir == default)
|
||||||
|
{
|
||||||
|
if (knockbackOrigin == default)
|
||||||
|
{
|
||||||
|
if (inflictor is null)
|
||||||
|
{
|
||||||
|
knockbackOrigin = GlobalPosition + Vector2.Down;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
knockbackOrigin = inflictor.GlobalPosition;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
knockbackDir = knockbackOrigin.DirectionTo(GlobalPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (InvincibilityTimer is not null)
|
||||||
|
{
|
||||||
|
if (!InvincibilityTimer.IsStopped())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
InvincibilityTimer.Start();
|
||||||
|
//Monitorable = false;
|
||||||
|
SetDeferred("monitorable", false);
|
||||||
|
GD.Print("invincible");
|
||||||
|
}
|
||||||
|
|
||||||
EmitSignal(
|
EmitSignal(
|
||||||
SignalName.ReceivedDamage,
|
SignalName.ReceivedDamage,
|
||||||
damage,
|
damage,
|
||||||
inflictor,
|
inflictor,
|
||||||
knockback,
|
knockback,
|
||||||
knockbackOrigin, knockbackVector);
|
knockbackDir);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
using Godot;
|
||||||
|
using GodotUtilities;
|
||||||
|
|
||||||
|
namespace SupaLidlGame.Characters;
|
||||||
|
|
||||||
|
public abstract partial class Boss : Enemy
|
||||||
|
{
|
||||||
|
[Export]
|
||||||
|
public State.NPC.NPCStateMachine BossStateMachine { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public string BossName { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public AudioStream Music { get; set; }
|
||||||
|
|
||||||
|
public abstract int Intensity { get; }
|
||||||
|
|
||||||
|
private bool _isActive;
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public bool IsActive
|
||||||
|
{
|
||||||
|
get => _isActive;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_isActive = value;
|
||||||
|
|
||||||
|
// register or deregister ourselves when we are active/inactive
|
||||||
|
this.GetAncestor<Utils.World>()
|
||||||
|
.RegisterBoss(_isActive ? this : null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,7 +13,7 @@ public partial class Character : CharacterBody2D, IFaction
|
||||||
public float Speed { get; protected set; } = 32.0f;
|
public float Speed { get; protected set; } = 32.0f;
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public float Friction { get; protected set; } = 4.0f;
|
public float Friction { get; set; } = 4.0f;
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public float Mass
|
public float Mass
|
||||||
|
@ -41,7 +41,10 @@ public partial class Character : CharacterBody2D, IFaction
|
||||||
public Vector2 Target { get; set; } = Vector2.Zero;
|
public Vector2 Target { get; set; } = Vector2.Zero;
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public float Health
|
public Texture2D HandTexture { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public virtual float Health
|
||||||
{
|
{
|
||||||
get => _health;
|
get => _health;
|
||||||
set
|
set
|
||||||
|
@ -66,7 +69,7 @@ public partial class Character : CharacterBody2D, IFaction
|
||||||
public double StunTime { get; set; }
|
public double StunTime { get; set; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public AnimatedSprite2D Sprite { get; set; }
|
public Sprite2D Sprite { get; set; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public Inventory Inventory { get; set; }
|
public Inventory Inventory { get; set; }
|
||||||
|
@ -80,8 +83,19 @@ public partial class Character : CharacterBody2D, IFaction
|
||||||
[Export]
|
[Export]
|
||||||
public ushort Faction { get; set; }
|
public ushort Faction { get; set; }
|
||||||
|
|
||||||
|
public AnimationPlayer MovementAnimation { get; set; }
|
||||||
|
|
||||||
|
public AnimationPlayer HurtAnimation { get; set; }
|
||||||
|
|
||||||
|
public AnimationPlayer StunAnimation { get; set; }
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
|
// TODO: 80+ char line
|
||||||
|
MovementAnimation = GetNode<AnimationPlayer>("Animations/Movement");
|
||||||
|
HurtAnimation = GetNode<AnimationPlayer>("Animations/Hurt");
|
||||||
|
StunAnimation = GetNode<AnimationPlayer>("Animations/Stun");
|
||||||
|
GD.Print(Name + " " + MovementAnimation.CurrentAnimation);
|
||||||
Hurtbox.ReceivedDamage += OnReceivedDamage;
|
Hurtbox.ReceivedDamage += OnReceivedDamage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +106,15 @@ public partial class Character : CharacterBody2D, IFaction
|
||||||
StateMachine.Process(delta);
|
StateMachine.Process(delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (StunTime > 0 && !StunAnimation.IsPlaying())
|
||||||
|
{
|
||||||
|
StunAnimation.Play("stun");
|
||||||
|
}
|
||||||
|
else if (StunTime < 0 && StunAnimation.IsPlaying())
|
||||||
|
{
|
||||||
|
StunAnimation.Stop();
|
||||||
|
}
|
||||||
|
|
||||||
Sprite.FlipH = Target.X < 0;
|
Sprite.FlipH = Target.X < 0;
|
||||||
DrawTarget();
|
DrawTarget();
|
||||||
}
|
}
|
||||||
|
@ -113,6 +136,18 @@ public partial class Character : CharacterBody2D, IFaction
|
||||||
{
|
{
|
||||||
Velocity *= 0.25f;
|
Velocity *= 0.25f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var state = StateMachine.CurrentState;
|
||||||
|
if (state is State.Character.CharacterDashState dashState)
|
||||||
|
{
|
||||||
|
Velocity *= dashState.VelocityModifier;
|
||||||
|
}
|
||||||
|
// TODO: make PlayerRollState a CharacterRollState instead
|
||||||
|
else if (state is State.Character.PlayerRollState rollState)
|
||||||
|
{
|
||||||
|
Velocity *= 2;
|
||||||
|
//Velocity *= rollState.VelocityModifier;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void Die()
|
public virtual void Die()
|
||||||
|
@ -131,7 +166,7 @@ public partial class Character : CharacterBody2D, IFaction
|
||||||
|
|
||||||
public virtual void Stun(float time)
|
public virtual void Stun(float time)
|
||||||
{
|
{
|
||||||
StunTime += time;
|
StunTime = Mathf.Max(time, StunTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void DrawTarget()
|
protected virtual void DrawTarget()
|
||||||
|
@ -156,13 +191,25 @@ public partial class Character : CharacterBody2D, IFaction
|
||||||
{
|
{
|
||||||
if (StunTime > 0)
|
if (StunTime > 0)
|
||||||
{
|
{
|
||||||
GD.Print("tried to use weapon but stunned");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Inventory.SelectedItem is Weapon weapon)
|
if (Inventory.SelectedItem is Weapon weapon)
|
||||||
{
|
{
|
||||||
weapon.Use();
|
weapon.Use();
|
||||||
|
if (weapon.IsUsing)
|
||||||
|
{
|
||||||
|
Inventory.EmitSignal(Inventory.SignalName.UsedItem, weapon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DeuseCurrentItem()
|
||||||
|
{
|
||||||
|
if (Inventory.SelectedItem is Weapon weapon)
|
||||||
|
{
|
||||||
|
weapon.Deuse();
|
||||||
|
// TODO: DeusedItem signal, implement when needed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,12 +221,18 @@ public partial class Character : CharacterBody2D, IFaction
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual float ReceiveDamage(
|
||||||
|
float damage,
|
||||||
|
Character inflictor,
|
||||||
|
float knockback,
|
||||||
|
Vector2 knockbackDir = default) => damage;
|
||||||
|
|
||||||
|
|
||||||
public virtual void OnReceivedDamage(
|
public virtual void OnReceivedDamage(
|
||||||
float damage,
|
float damage,
|
||||||
Character inflictor,
|
Character inflictor,
|
||||||
float knockback,
|
float knockback,
|
||||||
Vector2 knockbackOrigin = default,
|
Vector2 knockbackDir = default)
|
||||||
Vector2 knockbackVector = default)
|
|
||||||
{
|
{
|
||||||
if (Health <= 0)
|
if (Health <= 0)
|
||||||
{
|
{
|
||||||
|
@ -187,7 +240,7 @@ public partial class Character : CharacterBody2D, IFaction
|
||||||
}
|
}
|
||||||
|
|
||||||
float oldHealth = Health;
|
float oldHealth = Health;
|
||||||
Health -= damage;
|
Health -= ReceiveDamage(damage, inflictor, knockback, knockbackDir);
|
||||||
|
|
||||||
// create damage text
|
// create damage text
|
||||||
var textScene = GD.Load<PackedScene>("res://UI/FloatingText.tscn");
|
var textScene = GD.Load<PackedScene>("res://UI/FloatingText.tscn");
|
||||||
|
@ -197,41 +250,25 @@ public partial class Character : CharacterBody2D, IFaction
|
||||||
this.GetAncestor<TileMap>().AddChild(instance);
|
this.GetAncestor<TileMap>().AddChild(instance);
|
||||||
|
|
||||||
// apply knockback
|
// apply knockback
|
||||||
Vector2 knockbackDir = knockbackVector;
|
|
||||||
if (knockbackDir == default)
|
|
||||||
{
|
|
||||||
if (knockbackOrigin == default)
|
|
||||||
{
|
|
||||||
if (inflictor is null)
|
|
||||||
{
|
|
||||||
knockbackOrigin = GlobalPosition + Vector2.Down;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
knockbackOrigin = inflictor.GlobalPosition;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
knockbackDir = knockbackOrigin.DirectionTo(GlobalPosition);
|
|
||||||
}
|
|
||||||
|
|
||||||
ApplyImpulse(knockbackDir.Normalized() * knockback);
|
ApplyImpulse(knockbackDir.Normalized() * knockback);
|
||||||
|
|
||||||
GD.Print("lol");
|
GD.Print("lol");
|
||||||
|
|
||||||
// play damage animation
|
// play damage animation
|
||||||
var anim = GetNode<AnimationPlayer>("FlashAnimation");
|
var anim = GetNode<AnimationPlayer>("Animations/Hurt");
|
||||||
if (anim != null)
|
if (anim != null)
|
||||||
{
|
{
|
||||||
anim.Stop();
|
anim.Stop();
|
||||||
anim.Play("Hurt");
|
anim.Play("hurt");
|
||||||
|
anim.Queue("hurt_flash");
|
||||||
}
|
}
|
||||||
|
|
||||||
// if anyone involved is a player, shake their screen
|
// if anyone involved is a player, shake their screen
|
||||||
Player plr = inflictor as Player ?? this as Player;
|
Player plr = inflictor as Player ?? this as Player;
|
||||||
if (plr is not null)
|
if (plr is not null)
|
||||||
{
|
{
|
||||||
plr.Camera.Shake(1, 0.4f);
|
//plr.Camera.Shake(1, 0.4f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.GetNode("HurtSound") is AudioStreamPlayer2D sound)
|
if (this.GetNode("HurtSound") is AudioStreamPlayer2D sound)
|
||||||
|
|
|
@ -1,21 +1,45 @@
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using GodotUtilities;
|
||||||
|
using SupaLidlGame.State.Character;
|
||||||
|
|
||||||
namespace SupaLidlGame.Characters;
|
namespace SupaLidlGame.Characters;
|
||||||
|
|
||||||
public partial class Doc : Enemy
|
public partial class Doc : Boss
|
||||||
{
|
{
|
||||||
[Export]
|
public AnimationPlayer TelegraphAnimation { get; set; }
|
||||||
public State.NPC.NPCStateMachine BossStateMachine { get; set; }
|
|
||||||
|
|
||||||
public int Intensity
|
[Export]
|
||||||
|
public Items.Weapons.Sword Lance { get; set; }
|
||||||
|
|
||||||
|
protected bool _dashedAway = false;
|
||||||
|
|
||||||
|
public override float Health
|
||||||
|
{
|
||||||
|
get => base.Health;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (IsActive)
|
||||||
|
{
|
||||||
|
base.Health = value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// play opening animation
|
||||||
|
// then become active when it finishes
|
||||||
|
base.Health = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int Intensity
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
switch (Health)
|
switch (Health)
|
||||||
{
|
{
|
||||||
case < 250:
|
case < 200:
|
||||||
return 3;
|
return 3;
|
||||||
case < 500:
|
case < 400:
|
||||||
return 2;
|
return 2;
|
||||||
default:
|
default:
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -23,15 +47,115 @@ public partial class Doc : Enemy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Doc()
|
||||||
|
{
|
||||||
|
ShouldMove = false;
|
||||||
|
}
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
GD.Print(Health);
|
TelegraphAnimation = GetNode<AnimationPlayer>("Animations/Telegraph");
|
||||||
base._Ready();
|
base._Ready();
|
||||||
|
|
||||||
|
// when we are hurt, start the boss fight
|
||||||
|
Hurt += (Events.HealthChangedArgs args) =>
|
||||||
|
{
|
||||||
|
if (!IsActive)
|
||||||
|
{
|
||||||
|
IsActive = true;
|
||||||
|
Inventory.SelectedItem = Lance;
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void _Process(double delta)
|
public override void _Process(double delta)
|
||||||
|
{
|
||||||
|
if (IsActive)
|
||||||
{
|
{
|
||||||
BossStateMachine.Process(delta);
|
BossStateMachine.Process(delta);
|
||||||
|
}
|
||||||
base._Process(delta);
|
base._Process(delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override float ReceiveDamage(
|
||||||
|
float damage,
|
||||||
|
Character inflictor,
|
||||||
|
float knockback,
|
||||||
|
Vector2 knockbackDir = default)
|
||||||
|
{
|
||||||
|
if (IsActive)
|
||||||
|
{
|
||||||
|
return base.ReceiveDamage(
|
||||||
|
damage, inflictor, knockback, knockbackDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnReceivedDamage(
|
||||||
|
float damage,
|
||||||
|
Character inflictor,
|
||||||
|
float knockback,
|
||||||
|
Vector2 knockbackDir = default)
|
||||||
|
{
|
||||||
|
GetNode<GpuParticles2D>("Effects/HurtParticles")
|
||||||
|
.SetDirection(knockbackDir);
|
||||||
|
|
||||||
|
base.OnReceivedDamage(damage, inflictor, knockback, knockbackDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Think()
|
||||||
|
{
|
||||||
|
if (BossStateMachine.CurrentState is State.NPC.Doc.DocLanceState)
|
||||||
|
{
|
||||||
|
ThirdPhaseThink();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
base.Think();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void ThirdPhaseThink()
|
||||||
|
{
|
||||||
|
Character bestTarget = FindBestTarget();
|
||||||
|
if (bestTarget is not null)
|
||||||
|
{
|
||||||
|
Vector2 pos = bestTarget.GlobalPosition;
|
||||||
|
Target = pos - GlobalPosition;
|
||||||
|
Vector2 dir = GlobalPosition.DirectionTo(pos);
|
||||||
|
float dist = GlobalPosition.DistanceSquaredTo(pos);
|
||||||
|
UpdateWeights(pos);
|
||||||
|
|
||||||
|
if (CanAttack && StunTime <= 0)
|
||||||
|
{
|
||||||
|
bool isTargetStunned = bestTarget.StunTime > 0;
|
||||||
|
if (!isTargetStunned && dist < 2500)
|
||||||
|
{
|
||||||
|
if (Inventory.SelectedItem is Items.Weapon weapon)
|
||||||
|
{
|
||||||
|
// dash away if too close
|
||||||
|
DashTo(-dir);
|
||||||
|
UseCurrentItem();
|
||||||
|
_dashedAway = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (isTargetStunned || (dist < 3600 && _dashedAway))
|
||||||
|
{
|
||||||
|
if (!Inventory.SelectedItem.IsUsing)
|
||||||
|
{
|
||||||
|
DashTo(dir);
|
||||||
|
UseCurrentItem();
|
||||||
|
_dashedAway = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DashTo(Vector2 direction)
|
||||||
|
{
|
||||||
|
StateMachine.ChangeState<CharacterDashState>(out var state);
|
||||||
|
state.DashDirection = direction;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,30 +1,155 @@
|
||||||
[gd_scene load_steps=38 format=3 uid="uid://d2skjvvx6fal0"]
|
[gd_scene load_steps=61 format=3 uid="uid://d2skjvvx6fal0"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://Characters/Doc.cs" id="2_3elet"]
|
[ext_resource type="Script" path="res://Characters/Doc.cs" id="2_3elet"]
|
||||||
[ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_5jxom"]
|
[ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_5jxom"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://ipss4y2gkk3y" path="res://Assets/Music/gillette.mp3" id="3_eo4lg"]
|
||||||
[ext_resource type="Texture2D" uid="uid://baiuqgrqipppt" path="res://Assets/Sprites/Characters/doc.png" id="3_rs44f"]
|
[ext_resource type="Texture2D" uid="uid://baiuqgrqipppt" path="res://Assets/Sprites/Characters/doc.png" id="3_rs44f"]
|
||||||
[ext_resource type="Script" path="res://State/Character/CharacterStateMachine.cs" id="3_t5jjc"]
|
[ext_resource type="Script" path="res://State/Character/CharacterStateMachine.cs" id="3_t5jjc"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://dpepm54hjuyga" path="res://Assets/Sprites/Characters/forsen-hand.png" id="4_8lqj6"]
|
||||||
[ext_resource type="Script" path="res://State/Character/NPCIdleState.cs" id="4_b35px"]
|
[ext_resource type="Script" path="res://State/Character/NPCIdleState.cs" id="4_b35px"]
|
||||||
[ext_resource type="Script" path="res://State/Character/NPCMoveState.cs" id="5_pejsd"]
|
[ext_resource type="Script" path="res://State/Character/NPCMoveState.cs" id="5_pejsd"]
|
||||||
[ext_resource type="Script" path="res://State/NPC/NPCStateMachine.cs" id="6_kjpug"]
|
[ext_resource type="Script" path="res://State/NPC/NPCStateMachine.cs" id="6_kjpug"]
|
||||||
|
[ext_resource type="Script" path="res://State/Character/CharacterDashState.cs" id="7_0ks57"]
|
||||||
[ext_resource type="Script" path="res://State/NPC/Doc/DocTelegraphState.cs" id="7_tfwbh"]
|
[ext_resource type="Script" path="res://State/NPC/Doc/DocTelegraphState.cs" id="7_tfwbh"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cjgxyhgcyvsv7" path="res://BoundingBoxes/Hurtbox.tscn" id="7_tnve0"]
|
[ext_resource type="PackedScene" uid="uid://cjgxyhgcyvsv7" path="res://BoundingBoxes/Hurtbox.tscn" id="7_tnve0"]
|
||||||
[ext_resource type="Script" path="res://State/NPC/Doc/DocShungiteDartState.cs" id="8_1hoax"]
|
[ext_resource type="Script" path="res://State/NPC/Doc/DocShungiteDartState.cs" id="8_1hoax"]
|
||||||
[ext_resource type="Script" path="res://Items/Inventory.cs" id="8_r8ejq"]
|
[ext_resource type="Script" path="res://Items/Inventory.cs" id="8_r8ejq"]
|
||||||
[ext_resource type="Script" path="res://State/NPC/Doc/DocExitState.cs" id="9_6com1"]
|
[ext_resource type="Script" path="res://State/NPC/Doc/DocExitState.cs" id="9_6com1"]
|
||||||
[ext_resource type="PackedScene" uid="uid://1tiswf3gtyvv" path="res://Entities/ShungiteSpike.tscn" id="9_7kavk"]
|
[ext_resource type="PackedScene" uid="uid://1tiswf3gtyvv" path="res://Entities/ShungiteSpike.tscn" id="9_7kavk"]
|
||||||
[ext_resource type="PackedScene" uid="uid://djaljmco3xo4g" path="res://Entities/ShungiteDart.tscn" id="9_kthpr"]
|
|
||||||
[ext_resource type="AudioStream" uid="uid://k6kpdj1kv0jg" path="res://Assets/Sounds/splat.ogg" id="9_stm0e"]
|
[ext_resource type="AudioStream" uid="uid://k6kpdj1kv0jg" path="res://Assets/Sounds/splat.ogg" id="9_stm0e"]
|
||||||
[ext_resource type="Script" path="res://State/NPC/Doc/DocShungiteSpikeState.cs" id="10_bgs6o"]
|
[ext_resource type="Script" path="res://State/NPC/Doc/DocShungiteSpikeState.cs" id="10_bgs6o"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cqx56u46g2c16" path="res://Entities/CompactDisc.tscn" id="11_23p3o"]
|
||||||
[ext_resource type="Script" path="res://State/NPC/Doc/DocChooseAttackState.cs" id="12_45x13"]
|
[ext_resource type="Script" path="res://State/NPC/Doc/DocChooseAttackState.cs" id="12_45x13"]
|
||||||
[ext_resource type="Script" path="res://State/NPC/Doc/DocUnwantedFrequencyState.cs" id="12_d51jv"]
|
[ext_resource type="Script" path="res://State/NPC/Doc/DocUnwantedFrequencyState.cs" id="12_d51jv"]
|
||||||
[ext_resource type="PackedScene" uid="uid://1y5r6sklwgrp" path="res://Entities/UnwantedFrequency.tscn" id="13_lpj21"]
|
[ext_resource type="PackedScene" uid="uid://1y5r6sklwgrp" path="res://Entities/UnwantedFrequency.tscn" id="13_lpj21"]
|
||||||
|
[ext_resource type="Script" path="res://State/NPC/Doc/DocLanceState.cs" id="15_dmd05"]
|
||||||
|
[ext_resource type="Script" path="res://Utils/AnimationManager.cs" id="16_bsvls"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bd8l8kafb42dt" path="res://Assets/Sprites/Particles/circle.png" id="16_x277j"]
|
||||||
|
[ext_resource type="Material" uid="uid://bat28samf7ukd" path="res://Assets/Sprites/Particles/NPCDamageProcessMaterial.tres" id="17_iomdx"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://c1a7lvb4uuwfy" path="res://Assets/Sprites/Particles/circle-16.png" id="19_p0p6c"]
|
||||||
|
[ext_resource type="Material" uid="uid://rcjujd5dv7lm" path="res://Assets/Sprites/Particles/DocIntroParticles.tres" id="19_q4rt1"]
|
||||||
|
[ext_resource type="Animation" uid="uid://8e8r3y1imvsx" path="res://Assets/Animations/stun.res" id="21_ixn4k"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://p7oijq6dbvvk" path="res://Items/Weapons/DocLance.tscn" id="24_2es2r"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bauucuqvjwbxp" path="res://Items/Weapons/DocLanceHold.tscn" id="26_0tntj"]
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_7n7iy"]
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_7n7iy"]
|
||||||
resource_local_to_scene = true
|
resource_local_to_scene = true
|
||||||
shader = ExtResource("2_5jxom")
|
shader = ExtResource("2_5jxom")
|
||||||
shader_parameter/color = Quaternion(1, 1, 1, 1)
|
shader_parameter/color = Quaternion(1, 1, 1, 1)
|
||||||
shader_parameter/intensity = 0.0
|
shader_parameter/intensity = 0.0
|
||||||
|
shader_parameter/alpha_modulate = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_7ay6e"]
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("../Sprite:frame")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [0]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_px7yx"]
|
||||||
|
resource_name = "idle"
|
||||||
|
length = 0.5
|
||||||
|
loop_mode = 1
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("../Sprite:frame")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.3),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [0, 1]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_a7sk6"]
|
||||||
|
resource_name = "move"
|
||||||
|
length = 0.6
|
||||||
|
loop_mode = 1
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("../Sprite: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),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [2, 3, 4, 5, 6, 7]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_j0d8o"]
|
||||||
|
resource_name = "dash"
|
||||||
|
length = 0.1
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_1xv7m"]
|
||||||
|
_data = {
|
||||||
|
"RESET": SubResource("Animation_7ay6e"),
|
||||||
|
"dash": SubResource("Animation_j0d8o"),
|
||||||
|
"idle": SubResource("Animation_px7yx"),
|
||||||
|
"move": SubResource("Animation_a7sk6")
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_dbist"]
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("../Effects/UnwantedFrequenciesParticles:emitting")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("../Sprite:frame")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [0]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("../Sprite:scale")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector2(1, 1)]
|
||||||
|
}
|
||||||
|
tracks/3/type = "value"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("..:material:shader_parameter/alpha_modulate")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [1.0]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_7oukw"]
|
[sub_resource type="Animation" id="Animation_7oukw"]
|
||||||
resource_name = "enter_in"
|
resource_name = "enter_in"
|
||||||
|
@ -44,14 +169,38 @@ tracks/0/keys = {
|
||||||
tracks/1/type = "value"
|
tracks/1/type = "value"
|
||||||
tracks/1/imported = false
|
tracks/1/imported = false
|
||||||
tracks/1/enabled = true
|
tracks/1/enabled = true
|
||||||
tracks/1/path = NodePath("../Sprite:modulate")
|
tracks/1/path = NodePath("../Sprite:frame")
|
||||||
tracks/1/interp = 1
|
tracks/1/interp = 1
|
||||||
tracks/1/loop_wrap = true
|
tracks/1/loop_wrap = true
|
||||||
tracks/1/keys = {
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [0]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("../Effects/UnwantedFrequenciesParticles:emitting")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false]
|
||||||
|
}
|
||||||
|
tracks/3/type = "value"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("..:material:shader_parameter/alpha_modulate")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.5),
|
"times": PackedFloat32Array(0, 0.5),
|
||||||
"transitions": PackedFloat32Array(2, 1),
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 0.5)]
|
"values": [0.0, 1.0]
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_j3s0y"]
|
[sub_resource type="Animation" id="Animation_j3s0y"]
|
||||||
|
@ -72,112 +221,113 @@ tracks/0/keys = {
|
||||||
tracks/1/type = "value"
|
tracks/1/type = "value"
|
||||||
tracks/1/imported = false
|
tracks/1/imported = false
|
||||||
tracks/1/enabled = true
|
tracks/1/enabled = true
|
||||||
tracks/1/path = NodePath("../Sprite:modulate")
|
tracks/1/path = NodePath("../Sprite:frame")
|
||||||
tracks/1/interp = 1
|
tracks/1/interp = 1
|
||||||
tracks/1/loop_wrap = true
|
tracks/1/loop_wrap = true
|
||||||
tracks/1/keys = {
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [0]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("../Effects/UnwantedFrequenciesParticles:emitting")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false]
|
||||||
|
}
|
||||||
|
tracks/3/type = "value"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("..:material:shader_parameter/alpha_modulate")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.5),
|
"times": PackedFloat32Array(0, 0.5),
|
||||||
"transitions": PackedFloat32Array(1, 2),
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [Color(1, 1, 1, 0.5), Color(1, 1, 1, 0)]
|
"values": [1.0, 0.0]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_8dhub"]
|
||||||
|
resource_name = "shungite_spike"
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("../Sprite:frame")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [15]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("../Sprite:scale")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3),
|
||||||
|
"transitions": PackedFloat32Array(2, 5, 5, 5),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector2(1.5, 0.75), Vector2(1, 1), Vector2(0.75, 1.5), Vector2(1, 1)]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_qggcf"]
|
||||||
|
resource_name = "unwanted_frequencies"
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("../Effects/UnwantedFrequenciesParticles:emitting")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 1),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("../Sprite:frame")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/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": [8, 9, 10, 11, 12, 13, 14, 8, 9]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("../Sprite:scale")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.1),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector2(1.5, 0.75), Vector2(1, 1)]
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_rpply"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_rpply"]
|
||||||
_data = {
|
_data = {
|
||||||
|
"RESET": SubResource("Animation_dbist"),
|
||||||
"enter_in": SubResource("Animation_7oukw"),
|
"enter_in": SubResource("Animation_7oukw"),
|
||||||
"exit_out": SubResource("Animation_j3s0y")
|
"exit_out": SubResource("Animation_j3s0y"),
|
||||||
}
|
"shungite_spike": SubResource("Animation_8dhub"),
|
||||||
|
"unwanted_frequencies": SubResource("Animation_qggcf")
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_dib6t"]
|
|
||||||
atlas = ExtResource("3_rs44f")
|
|
||||||
region = Rect2(0, 0, 12, 16)
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_cwqre"]
|
|
||||||
atlas = ExtResource("3_rs44f")
|
|
||||||
region = Rect2(12, 0, 12, 16)
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_r8xjl"]
|
|
||||||
atlas = ExtResource("3_rs44f")
|
|
||||||
region = Rect2(24, 0, 12, 16)
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_7hkj4"]
|
|
||||||
atlas = ExtResource("3_rs44f")
|
|
||||||
region = Rect2(36, 0, 12, 16)
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_w04w0"]
|
|
||||||
atlas = ExtResource("3_rs44f")
|
|
||||||
region = Rect2(48, 0, 12, 16)
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_ym6tg"]
|
|
||||||
atlas = ExtResource("3_rs44f")
|
|
||||||
region = Rect2(60, 0, 12, 16)
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_3rbas"]
|
|
||||||
atlas = ExtResource("3_rs44f")
|
|
||||||
region = Rect2(72, 0, 12, 16)
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_63wkp"]
|
|
||||||
atlas = ExtResource("3_rs44f")
|
|
||||||
region = Rect2(84, 0, 12, 16)
|
|
||||||
|
|
||||||
[sub_resource type="SpriteFrames" id="SpriteFrames_kb0pl"]
|
|
||||||
resource_local_to_scene = true
|
|
||||||
animations = [{
|
|
||||||
"frames": [{
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_dib6t")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_cwqre")
|
|
||||||
}],
|
|
||||||
"loop": true,
|
|
||||||
"name": &"idle",
|
|
||||||
"speed": 5.0
|
|
||||||
}, {
|
|
||||||
"frames": [{
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_r8xjl")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_7hkj4")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_w04w0")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_ym6tg")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_3rbas")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_63wkp")
|
|
||||||
}],
|
|
||||||
"loop": true,
|
|
||||||
"name": &"move",
|
|
||||||
"speed": 12.0
|
|
||||||
}]
|
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_uict5"]
|
|
||||||
size = Vector2(16, 8)
|
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_8lxmf"]
|
|
||||||
size = Vector2(16, 18)
|
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_dxevc"]
|
|
||||||
resource_name = "Hurt"
|
|
||||||
length = 0.6
|
|
||||||
tracks/0/type = "value"
|
|
||||||
tracks/0/imported = false
|
|
||||||
tracks/0/enabled = true
|
|
||||||
tracks/0/path = NodePath(".:material:shader_parameter/intensity")
|
|
||||||
tracks/0/interp = 2
|
|
||||||
tracks/0/loop_wrap = true
|
|
||||||
tracks/0/keys = {
|
|
||||||
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6),
|
|
||||||
"transitions": PackedFloat32Array(4, 4, 4, 4, 4, 4, 4),
|
|
||||||
"update": 0,
|
|
||||||
"values": [0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_k6l16"]
|
[sub_resource type="Animation" id="Animation_k6l16"]
|
||||||
|
@ -194,27 +344,134 @@ tracks/0/keys = {
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [0.0]
|
"values": [0.0]
|
||||||
}
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Effects/HurtParticles:emitting")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_dxevc"]
|
||||||
|
resource_name = "hurt"
|
||||||
|
length = 0.6
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath(".:material:shader_parameter/intensity")
|
||||||
|
tracks/0/interp = 2
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6),
|
||||||
|
"transitions": PackedFloat32Array(4, 4, 4, 4, 4, 4, 4),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Effects/HurtParticles:emitting")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.1),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xe5eq"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xe5eq"]
|
||||||
_data = {
|
_data = {
|
||||||
"Hurt": SubResource("Animation_dxevc"),
|
"RESET": SubResource("Animation_k6l16"),
|
||||||
"RESET": SubResource("Animation_k6l16")
|
"hurt": SubResource("Animation_dxevc")
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="Doc" type="CharacterBody2D" node_paths=PackedStringArray("BossStateMachine", "Sprite", "Inventory", "StateMachine", "Hurtbox")]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_kks2p"]
|
||||||
|
_data = {
|
||||||
|
"stun": ExtResource("21_ixn4k")
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_uemm6"]
|
||||||
|
resource_name = "intro"
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_kjxam"]
|
||||||
|
_data = {
|
||||||
|
"intro": SubResource("Animation_uemm6")
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Gradient" id="Gradient_lcoxi"]
|
||||||
|
offsets = PackedFloat32Array(0.37037, 0.651852)
|
||||||
|
colors = PackedColorArray(0.367549, 0.894801, 1, 1, 0.992095, 0.364069, 1, 1)
|
||||||
|
|
||||||
|
[sub_resource type="GradientTexture1D" id="GradientTexture1D_5606i"]
|
||||||
|
gradient = SubResource("Gradient_lcoxi")
|
||||||
|
|
||||||
|
[sub_resource type="Gradient" id="Gradient_pikjh"]
|
||||||
|
offsets = PackedFloat32Array(0.533333, 1)
|
||||||
|
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
|
||||||
|
|
||||||
|
[sub_resource type="GradientTexture1D" id="GradientTexture1D_pjeh8"]
|
||||||
|
gradient = SubResource("Gradient_pikjh")
|
||||||
|
|
||||||
|
[sub_resource type="Curve" id="Curve_x3x4q"]
|
||||||
|
_data = [Vector2(0, 0.463636), 0.0, 0.0, 0, 0, Vector2(0.325301, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||||
|
point_count = 3
|
||||||
|
|
||||||
|
[sub_resource type="CurveTexture" id="CurveTexture_ssoms"]
|
||||||
|
curve = SubResource("Curve_x3x4q")
|
||||||
|
|
||||||
|
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_s1tqp"]
|
||||||
|
emission_shape = 3
|
||||||
|
emission_box_extents = Vector3(8, 1, 1)
|
||||||
|
particle_flag_disable_z = true
|
||||||
|
direction = Vector3(0, -1, 0)
|
||||||
|
spread = 0.0
|
||||||
|
gravity = Vector3(0, 0, 0)
|
||||||
|
initial_velocity_min = 32.0
|
||||||
|
initial_velocity_max = 64.0
|
||||||
|
orbit_velocity_min = 0.0
|
||||||
|
orbit_velocity_max = 0.0
|
||||||
|
scale_max = 1.5
|
||||||
|
scale_curve = SubResource("CurveTexture_ssoms")
|
||||||
|
color_ramp = SubResource("GradientTexture1D_pjeh8")
|
||||||
|
color_initial_ramp = SubResource("GradientTexture1D_5606i")
|
||||||
|
|
||||||
|
[sub_resource type="CanvasTexture" id="CanvasTexture_hs7xn"]
|
||||||
|
|
||||||
|
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_j1srf"]
|
||||||
|
particle_flag_disable_z = true
|
||||||
|
gravity = Vector3(0, 98, 0)
|
||||||
|
orbit_velocity_min = 0.0
|
||||||
|
orbit_velocity_max = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_uict5"]
|
||||||
|
size = Vector2(11, 5)
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_8lxmf"]
|
||||||
|
size = Vector2(16, 19)
|
||||||
|
|
||||||
|
[node name="Doc" type="CharacterBody2D" node_paths=PackedStringArray("Lance", "BossStateMachine", "Sprite", "Inventory", "StateMachine", "Hurtbox")]
|
||||||
y_sort_enabled = true
|
y_sort_enabled = true
|
||||||
texture_filter = 3
|
texture_filter = 3
|
||||||
material = SubResource("ShaderMaterial_7n7iy")
|
material = SubResource("ShaderMaterial_7n7iy")
|
||||||
collision_layer = 10
|
collision_layer = 10
|
||||||
collision_mask = 17
|
collision_mask = 17
|
||||||
script = ExtResource("2_3elet")
|
script = ExtResource("2_3elet")
|
||||||
|
Lance = NodePath("Inventory/DocLance")
|
||||||
BossStateMachine = NodePath("BossStateMachine")
|
BossStateMachine = NodePath("BossStateMachine")
|
||||||
Health = 1000.0
|
BossName = "Doc, The Two-Time"
|
||||||
|
Music = ExtResource("3_eo4lg")
|
||||||
|
HandTexture = ExtResource("4_8lqj6")
|
||||||
|
Health = 800.0
|
||||||
Sprite = NodePath("Sprite")
|
Sprite = NodePath("Sprite")
|
||||||
Inventory = NodePath("Inventory")
|
Inventory = NodePath("Inventory")
|
||||||
StateMachine = NodePath("StateMachine")
|
StateMachine = NodePath("StateMachine")
|
||||||
Hurtbox = NodePath("Hurtbox")
|
Hurtbox = NodePath("Hurtbox")
|
||||||
Faction = 2
|
|
||||||
|
|
||||||
[node name="StateMachine" type="Node" parent="." node_paths=PackedStringArray("InitialState", "Character")]
|
[node name="StateMachine" type="Node" parent="." node_paths=PackedStringArray("InitialState", "Character")]
|
||||||
script = ExtResource("3_t5jjc")
|
script = ExtResource("3_t5jjc")
|
||||||
|
@ -231,6 +488,13 @@ script = ExtResource("5_pejsd")
|
||||||
IdleState = NodePath("../Idle")
|
IdleState = NodePath("../Idle")
|
||||||
Character = NodePath("../..")
|
Character = NodePath("../..")
|
||||||
|
|
||||||
|
[node name="Dash" type="Node" parent="StateMachine" node_paths=PackedStringArray("IdleState", "Character")]
|
||||||
|
script = ExtResource("7_0ks57")
|
||||||
|
IdleState = NodePath("../Idle")
|
||||||
|
TimeToDash = 0.1
|
||||||
|
VelocityModifier = 10.0
|
||||||
|
Character = NodePath("../..")
|
||||||
|
|
||||||
[node name="BossStateMachine" type="Node" parent="." node_paths=PackedStringArray("InitialState")]
|
[node name="BossStateMachine" type="Node" parent="." node_paths=PackedStringArray("InitialState")]
|
||||||
script = ExtResource("6_kjpug")
|
script = ExtResource("6_kjpug")
|
||||||
InitialState = NodePath("Telegraph")
|
InitialState = NodePath("Telegraph")
|
||||||
|
@ -245,14 +509,14 @@ NPC = NodePath("../..")
|
||||||
script = ExtResource("8_1hoax")
|
script = ExtResource("8_1hoax")
|
||||||
Duration = 8.0
|
Duration = 8.0
|
||||||
AttackDuration = 1.0
|
AttackDuration = 1.0
|
||||||
Projectile = ExtResource("9_kthpr")
|
Projectile = ExtResource("11_23p3o")
|
||||||
ChooseAttackState = NodePath("../ChooseAttack")
|
ChooseAttackState = NodePath("../ChooseAttack")
|
||||||
Doc = NodePath("../..")
|
Doc = NodePath("../..")
|
||||||
NPC = NodePath("../..")
|
NPC = NodePath("../..")
|
||||||
|
|
||||||
[node name="Spike" type="Node" parent="BossStateMachine" node_paths=PackedStringArray("ChooseAttackState", "Doc", "NPC")]
|
[node name="Spike" type="Node" parent="BossStateMachine" node_paths=PackedStringArray("ChooseAttackState", "Doc", "NPC")]
|
||||||
script = ExtResource("10_bgs6o")
|
script = ExtResource("10_bgs6o")
|
||||||
Duration = 8.0
|
Duration = 4.0
|
||||||
AttackDuration = 1.0
|
AttackDuration = 1.0
|
||||||
Projectile = ExtResource("9_7kavk")
|
Projectile = ExtResource("9_7kavk")
|
||||||
ChooseAttackState = NodePath("../ChooseAttack")
|
ChooseAttackState = NodePath("../ChooseAttack")
|
||||||
|
@ -268,11 +532,17 @@ ChooseAttackState = NodePath("../ChooseAttack")
|
||||||
Doc = NodePath("../..")
|
Doc = NodePath("../..")
|
||||||
NPC = NodePath("../..")
|
NPC = NodePath("../..")
|
||||||
|
|
||||||
[node name="ChooseAttack" type="Node" parent="BossStateMachine" node_paths=PackedStringArray("DartState", "SpikeState", "UnwantedFrequencyState", "ExitState", "NPC")]
|
[node name="Lance" type="Node" parent="BossStateMachine" node_paths=PackedStringArray("ExitState", "NPC")]
|
||||||
|
script = ExtResource("15_dmd05")
|
||||||
|
ExitState = NodePath("../Exit")
|
||||||
|
NPC = NodePath("../..")
|
||||||
|
|
||||||
|
[node name="ChooseAttack" type="Node" parent="BossStateMachine" node_paths=PackedStringArray("DartState", "SpikeState", "UnwantedFrequencyState", "LanceState", "ExitState", "NPC")]
|
||||||
script = ExtResource("12_45x13")
|
script = ExtResource("12_45x13")
|
||||||
DartState = NodePath("../Dart")
|
DartState = NodePath("../Dart")
|
||||||
SpikeState = NodePath("../Spike")
|
SpikeState = NodePath("../Spike")
|
||||||
UnwantedFrequencyState = NodePath("../UnwantedFrequency")
|
UnwantedFrequencyState = NodePath("../UnwantedFrequency")
|
||||||
|
LanceState = NodePath("../Lance")
|
||||||
ExitState = NodePath("../Exit")
|
ExitState = NodePath("../Exit")
|
||||||
NPC = NodePath("../..")
|
NPC = NodePath("../..")
|
||||||
|
|
||||||
|
@ -283,33 +553,85 @@ TelegraphState = NodePath("../Telegraph")
|
||||||
NPC = NodePath("../..")
|
NPC = NodePath("../..")
|
||||||
|
|
||||||
[node name="Animations" type="Node" parent="."]
|
[node name="Animations" type="Node" parent="."]
|
||||||
|
script = ExtResource("16_bsvls")
|
||||||
|
|
||||||
|
[node name="Movement" type="AnimationPlayer" parent="Animations"]
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_1xv7m")
|
||||||
|
}
|
||||||
|
|
||||||
[node name="Telegraph" type="AnimationPlayer" parent="Animations"]
|
[node name="Telegraph" type="AnimationPlayer" parent="Animations"]
|
||||||
libraries = {
|
libraries = {
|
||||||
"": SubResource("AnimationLibrary_rpply")
|
"": SubResource("AnimationLibrary_rpply")
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="Sprite" type="AnimatedSprite2D" parent="."]
|
[node name="Hurt" type="AnimationPlayer" parent="Animations"]
|
||||||
|
root_node = NodePath("../..")
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_xe5eq")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Stun" type="AnimationPlayer" parent="Animations"]
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_kks2p")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Misc" type="AnimationPlayer" parent="Animations"]
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_kjxam")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Effects" type="Node2D" parent="."]
|
||||||
|
|
||||||
|
[node name="UnwantedFrequenciesParticles" type="GPUParticles2D" parent="Effects"]
|
||||||
|
emitting = false
|
||||||
|
process_material = SubResource("ParticleProcessMaterial_s1tqp")
|
||||||
|
texture = SubResource("CanvasTexture_hs7xn")
|
||||||
|
lifetime = 0.5
|
||||||
|
trail_enabled = true
|
||||||
|
trail_sections = 4
|
||||||
|
|
||||||
|
[node name="HurtParticles" type="GPUParticles2D" parent="Effects"]
|
||||||
|
position = Vector2(0, -8)
|
||||||
|
emitting = false
|
||||||
|
process_material = ExtResource("17_iomdx")
|
||||||
|
texture = ExtResource("16_x277j")
|
||||||
|
lifetime = 0.4
|
||||||
|
one_shot = true
|
||||||
|
explosiveness = 1.0
|
||||||
|
|
||||||
|
[node name="IntroParticles" type="GPUParticles2D" parent="Effects"]
|
||||||
|
position = Vector2(0, -8)
|
||||||
|
emitting = false
|
||||||
|
amount = 32
|
||||||
|
process_material = ExtResource("19_q4rt1")
|
||||||
|
texture = ExtResource("19_p0p6c")
|
||||||
|
|
||||||
|
[node name="Dash" type="GPUParticles2D" parent="Effects"]
|
||||||
|
position = Vector2(0, -8)
|
||||||
|
emitting = false
|
||||||
|
amount = 32
|
||||||
|
process_material = SubResource("ParticleProcessMaterial_j1srf")
|
||||||
|
|
||||||
|
[node name="Sprite" type="Sprite2D" parent="."]
|
||||||
modulate = Color(1, 1, 1, 0.5)
|
modulate = Color(1, 1, 1, 0.5)
|
||||||
|
y_sort_enabled = true
|
||||||
use_parent_material = true
|
use_parent_material = true
|
||||||
position = Vector2(0, -4)
|
position = Vector2(-0.5, 0)
|
||||||
sprite_frames = SubResource("SpriteFrames_kb0pl")
|
texture = ExtResource("3_rs44f")
|
||||||
animation = &"move"
|
offset = Vector2(0, -8)
|
||||||
frame_progress = 0.563144
|
hframes = 16
|
||||||
offset = Vector2(0, 4)
|
|
||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
visible = false
|
position = Vector2(-0.5, -1.5)
|
||||||
position = Vector2(0, 4)
|
|
||||||
shape = SubResource("RectangleShape2D_uict5")
|
shape = SubResource("RectangleShape2D_uict5")
|
||||||
|
|
||||||
[node name="Hurtbox" parent="." instance=ExtResource("7_tnve0")]
|
[node name="Hurtbox" parent="." instance=ExtResource("7_tnve0")]
|
||||||
visible = false
|
|
||||||
position = Vector2(0, -4)
|
position = Vector2(0, -4)
|
||||||
Faction = 2
|
Faction = 2
|
||||||
|
|
||||||
[node name="CollisionShape2D" parent="Hurtbox" index="0"]
|
[node name="CollisionShape2D" parent="Hurtbox" index="0"]
|
||||||
position = Vector2(0, 4)
|
position = Vector2(0, -3.5)
|
||||||
shape = SubResource("RectangleShape2D_8lxmf")
|
shape = SubResource("RectangleShape2D_8lxmf")
|
||||||
|
|
||||||
[node name="Inventory" type="Node2D" parent="."]
|
[node name="Inventory" type="Node2D" parent="."]
|
||||||
|
@ -317,10 +639,9 @@ y_sort_enabled = true
|
||||||
script = ExtResource("8_r8ejq")
|
script = ExtResource("8_r8ejq")
|
||||||
Items = Array[Node2D]([])
|
Items = Array[Node2D]([])
|
||||||
|
|
||||||
[node name="FlashAnimation" type="AnimationPlayer" parent="."]
|
[node name="DocLance" parent="Inventory" instance=ExtResource("24_2es2r")]
|
||||||
libraries = {
|
|
||||||
"": SubResource("AnimationLibrary_xe5eq")
|
[node name="DocLanceHold" parent="Inventory" instance=ExtResource("26_0tntj")]
|
||||||
}
|
|
||||||
|
|
||||||
[node name="HurtSound" type="AudioStreamPlayer2D" parent="."]
|
[node name="HurtSound" type="AudioStreamPlayer2D" parent="."]
|
||||||
stream = ExtResource("9_stm0e")
|
stream = ExtResource("9_stm0e")
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
#undef DEBUG_NPC
|
||||||
|
|
||||||
using Godot;
|
using Godot;
|
||||||
using SupaLidlGame.Extensions;
|
using SupaLidlGame.Extensions;
|
||||||
using SupaLidlGame.Items;
|
using SupaLidlGame.Items;
|
||||||
|
@ -41,6 +43,10 @@ public partial class NPC : Character
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool ShouldMove { get; set; } = true;
|
||||||
|
|
||||||
|
public bool CanAttack { get; set; } = true;
|
||||||
|
|
||||||
protected float[] _weights = new float[16];
|
protected float[] _weights = new float[16];
|
||||||
protected int _bestWeightIdx;
|
protected int _bestWeightIdx;
|
||||||
protected double _thinkTimeElapsed = 0;
|
protected double _thinkTimeElapsed = 0;
|
||||||
|
@ -65,7 +71,7 @@ public partial class NPC : Character
|
||||||
|
|
||||||
public override void _Draw()
|
public override void _Draw()
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG_NPC
|
||||||
for (int i = 0; i < 16; i++)
|
for (int i = 0; i < 16; i++)
|
||||||
{
|
{
|
||||||
Vector2 vec = _weightDirs[i] * _weights[i] * 32;
|
Vector2 vec = _weightDirs[i] * _weights[i] * 32;
|
||||||
|
@ -116,13 +122,20 @@ public partial class NPC : Character
|
||||||
{
|
{
|
||||||
_thinkTimeElapsed = 0;
|
_thinkTimeElapsed = 0;
|
||||||
Think();
|
Think();
|
||||||
#if DEBUG
|
#if DEBUG_NPC
|
||||||
QueueRedraw();
|
QueueRedraw();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ShouldMove)
|
||||||
|
{
|
||||||
Direction = _weightDirs[_bestWeightIdx];
|
Direction = _weightDirs[_bestWeightIdx];
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Direction = Vector2.Zero;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void UpdateWeights(Vector2 pos)
|
public void UpdateWeights(Vector2 pos)
|
||||||
{
|
{
|
||||||
|
@ -221,7 +234,7 @@ public partial class NPC : Character
|
||||||
float dist = GlobalPosition.DistanceSquaredTo(pos);
|
float dist = GlobalPosition.DistanceSquaredTo(pos);
|
||||||
UpdateWeights(pos);
|
UpdateWeights(pos);
|
||||||
|
|
||||||
if (dist < 1024)
|
if (dist < 1600 && CanAttack)
|
||||||
{
|
{
|
||||||
if (Inventory.SelectedItem is Weapon weapon)
|
if (Inventory.SelectedItem is Weapon weapon)
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,7 +8,6 @@ namespace SupaLidlGame.Characters;
|
||||||
[Scene]
|
[Scene]
|
||||||
public sealed partial class Player : Character
|
public sealed partial class Player : Character
|
||||||
{
|
{
|
||||||
private AnimatedSprite2D _sprite;
|
|
||||||
private string _spriteAnim;
|
private string _spriteAnim;
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
|
@ -17,40 +16,32 @@ public sealed partial class Player : Character
|
||||||
[Export]
|
[Export]
|
||||||
public Marker2D DirectionMarker { get; private set; }
|
public Marker2D DirectionMarker { get; private set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public AnimationTree AnimationTree { get; private set; }
|
||||||
|
|
||||||
public InteractionRay InteractionRay { get; private set; }
|
public InteractionRay InteractionRay { get; private set; }
|
||||||
|
|
||||||
public string Animation
|
public AnimationPlayer AttackAnimation { get; set; }
|
||||||
{
|
|
||||||
get => _sprite.Animation;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
// the Player.Animation property might be set before this node is
|
|
||||||
// even ready, so if _sprite is null, then we just hold the new
|
|
||||||
// animation in a temp value, which will be assigned once this node
|
|
||||||
// is ready
|
|
||||||
if (_sprite is null)
|
|
||||||
{
|
|
||||||
_spriteAnim = value;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_sprite.Play(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
InteractionRay = GetNode<InteractionRay>("Direction2D/InteractionRay");
|
InteractionRay = GetNode<InteractionRay>("Direction2D/InteractionRay");
|
||||||
_sprite = GetNode<AnimatedSprite2D>("Sprite");
|
|
||||||
if (_spriteAnim != default)
|
|
||||||
{
|
|
||||||
_sprite.Animation = _spriteAnim;
|
|
||||||
}
|
|
||||||
base._Ready();
|
|
||||||
Death += (Events.HealthChangedArgs args) =>
|
Death += (Events.HealthChangedArgs args) =>
|
||||||
{
|
{
|
||||||
Visible = false;
|
Visible = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
AttackAnimation = GetNode<AnimationPlayer>("Animations/Attack");
|
||||||
|
|
||||||
|
base._Ready();
|
||||||
|
|
||||||
|
Inventory.UsedItem += (Items.Item item) =>
|
||||||
|
{
|
||||||
|
if (item is Items.Weapons.Sword)
|
||||||
|
{
|
||||||
|
AttackAnimation.Play("sword");
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void _Input(InputEvent @event)
|
public override void _Input(InputEvent @event)
|
||||||
|
@ -69,11 +60,6 @@ public sealed partial class Player : Character
|
||||||
|
|
||||||
public override void ModifyVelocity()
|
public override void ModifyVelocity()
|
||||||
{
|
{
|
||||||
if (StateMachine.CurrentState is SupaLidlGame.State.Character.PlayerRollState)
|
|
||||||
{
|
|
||||||
Velocity *= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
base.ModifyVelocity();
|
base.ModifyVelocity();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,19 +74,17 @@ public sealed partial class Player : Character
|
||||||
float damage,
|
float damage,
|
||||||
Character inflictor,
|
Character inflictor,
|
||||||
float knockback,
|
float knockback,
|
||||||
Vector2 knockbackOrigin = default,
|
Vector2 knockbackDir = default)
|
||||||
Vector2 knockbackVector = default)
|
|
||||||
{
|
{
|
||||||
if (damage >= 10 && IsAlive)
|
if (damage >= 10 && IsAlive)
|
||||||
{
|
{
|
||||||
Camera.Shake(2, 0.5f);
|
Camera.Shake(2, 0.5f);
|
||||||
}
|
}
|
||||||
base.OnReceivedDamage(
|
|
||||||
damage,
|
GetNode<GpuParticles2D>("Effects/HurtParticles")
|
||||||
inflictor,
|
.SetDirection(knockbackDir);
|
||||||
knockback,
|
|
||||||
knockbackOrigin,
|
base.OnReceivedDamage(damage, inflictor, knockback, knockbackDir);
|
||||||
knockbackVector);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Die()
|
public override void Die()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=39 format=3 uid="uid://b2254pup8k161"]
|
[gd_scene load_steps=55 format=3 uid="uid://b2254pup8k161"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://Characters/Player.cs" id="1_flygr"]
|
[ext_resource type="Script" path="res://Characters/Player.cs" id="1_flygr"]
|
||||||
[ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_ngsgt"]
|
[ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_ngsgt"]
|
||||||
|
@ -8,111 +8,163 @@
|
||||||
[ext_resource type="Script" path="res://State/Character/PlayerIdleState.cs" id="6_wkfdm"]
|
[ext_resource type="Script" path="res://State/Character/PlayerIdleState.cs" id="6_wkfdm"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dvqap2uhcah63" path="res://Items/Weapons/Sword.tscn" id="7_4rxuv"]
|
[ext_resource type="PackedScene" uid="uid://dvqap2uhcah63" path="res://Items/Weapons/Sword.tscn" id="7_4rxuv"]
|
||||||
[ext_resource type="Script" path="res://State/Character/PlayerMoveState.cs" id="7_dfqd8"]
|
[ext_resource type="Script" path="res://State/Character/PlayerMoveState.cs" id="7_dfqd8"]
|
||||||
|
[ext_resource type="Script" path="res://Utils/AnimationManager.cs" id="7_sdgvb"]
|
||||||
[ext_resource type="Script" path="res://Items/Inventory.cs" id="7_xyenu"]
|
[ext_resource type="Script" path="res://Items/Inventory.cs" id="7_xyenu"]
|
||||||
[ext_resource type="Script" path="res://State/Character/PlayerRollState.cs" id="8_fy0v5"]
|
[ext_resource type="Script" path="res://State/Character/PlayerRollState.cs" id="8_fy0v5"]
|
||||||
|
[ext_resource type="Animation" uid="uid://8e8r3y1imvsx" path="res://Assets/Animations/stun.res" id="8_m08fh"]
|
||||||
|
[ext_resource type="Material" uid="uid://x5qcq5muvc3g" path="res://Assets/Sprites/Particles/PlayerDamageProcessMaterial.tres" id="8_yf112"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://c1a7lvb4uuwfy" path="res://Assets/Sprites/Particles/circle-16.png" id="9_7gumm"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cjgxyhgcyvsv7" path="res://BoundingBoxes/Hurtbox.tscn" id="9_avyu4"]
|
[ext_resource type="PackedScene" uid="uid://cjgxyhgcyvsv7" path="res://BoundingBoxes/Hurtbox.tscn" id="9_avyu4"]
|
||||||
[ext_resource type="AudioStream" uid="uid://bkeyg8weaqnuu" path="res://Assets/Sounds/splat-player.ogg" id="12_vvem5"]
|
[ext_resource type="AudioStream" uid="uid://bkeyg8weaqnuu" path="res://Assets/Sounds/splat-player.ogg" id="12_vvem5"]
|
||||||
[ext_resource type="Script" path="res://BoundingBoxes/InteractionRay.cs" id="13_hs3u1"]
|
[ext_resource type="Script" path="res://BoundingBoxes/InteractionRay.cs" id="13_hs3u1"]
|
||||||
[ext_resource type="Texture2D" uid="uid://coarr28adgo1u" path="res://Assets/Sprites/Particles/point-light.png" id="14_l4ekh"]
|
[ext_resource type="PackedScene" uid="uid://p7oijq6dbvvk" path="res://Items/Weapons/DocLance.tscn" id="14_bj0lo"]
|
||||||
|
[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="Script" path="res://Utils/DamageTime.cs" id="15_4xl06"]
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_h78y7"]
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_h78y7"]
|
||||||
shader = ExtResource("2_ngsgt")
|
shader = ExtResource("2_ngsgt")
|
||||||
shader_parameter/color = Quaternion(1, 1, 1, 1)
|
shader_parameter/color = Vector4(1, 1, 1, 1)
|
||||||
shader_parameter/intensity = 0.0
|
shader_parameter/intensity = 0.0
|
||||||
|
shader_parameter/alpha_modulate = 1.0
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_55yt4"]
|
[sub_resource type="Animation" id="Animation_imqdv"]
|
||||||
atlas = ExtResource("4_5vird")
|
length = 0.001
|
||||||
region = Rect2(0, 0, 24, 24)
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_xa1bi"]
|
|
||||||
atlas = ExtResource("4_5vird")
|
|
||||||
region = Rect2(24, 0, 24, 24)
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_hiodl"]
|
|
||||||
atlas = ExtResource("4_5vird")
|
|
||||||
region = Rect2(48, 0, 24, 24)
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_tok7d"]
|
|
||||||
atlas = ExtResource("4_5vird")
|
|
||||||
region = Rect2(72, 0, 24, 24)
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_dp8x6"]
|
|
||||||
atlas = ExtResource("4_5vird")
|
|
||||||
region = Rect2(96, 0, 24, 24)
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_sglor"]
|
|
||||||
atlas = ExtResource("4_5vird")
|
|
||||||
region = Rect2(120, 0, 24, 24)
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_gb41o"]
|
|
||||||
atlas = ExtResource("4_5vird")
|
|
||||||
region = Rect2(144, 0, 24, 24)
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_bx6qq"]
|
|
||||||
atlas = ExtResource("4_5vird")
|
|
||||||
region = Rect2(168, 0, 24, 24)
|
|
||||||
|
|
||||||
[sub_resource type="SpriteFrames" id="SpriteFrames_2h7cf"]
|
|
||||||
animations = [{
|
|
||||||
"frames": [{
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_55yt4")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_xa1bi")
|
|
||||||
}],
|
|
||||||
"loop": true,
|
|
||||||
"name": &"idle",
|
|
||||||
"speed": 2.0
|
|
||||||
}, {
|
|
||||||
"frames": [{
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_hiodl")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_tok7d")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_dp8x6")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_sglor")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_gb41o")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_bx6qq")
|
|
||||||
}],
|
|
||||||
"loop": true,
|
|
||||||
"name": &"move",
|
|
||||||
"speed": 10.0
|
|
||||||
}]
|
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_bfqew"]
|
|
||||||
size = Vector2(12, 8)
|
|
||||||
|
|
||||||
[sub_resource type="LabelSettings" id="LabelSettings_q5h1n"]
|
|
||||||
font_size = 24
|
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_cjk6b"]
|
|
||||||
size = Vector2(8, 8)
|
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_dxevc"]
|
|
||||||
resource_name = "Hurt"
|
|
||||||
length = 0.6
|
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
tracks/0/imported = false
|
tracks/0/imported = false
|
||||||
tracks/0/enabled = true
|
tracks/0/enabled = true
|
||||||
tracks/0/path = NodePath(".:material:shader_parameter/intensity")
|
tracks/0/path = NodePath("../Sprites/Node2D/Character:frame")
|
||||||
tracks/0/interp = 2
|
tracks/0/interp = 1
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6),
|
"times": PackedFloat32Array(0),
|
||||||
"transitions": PackedFloat32Array(4, 4, 4, 4, 4, 4, 4),
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [0]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("../Sprites/Node2D/Character:rotation")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0]
|
"values": [0.0]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_mg66i"]
|
||||||
|
resource_name = "idle"
|
||||||
|
length = 0.5
|
||||||
|
loop_mode = 1
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("../Sprites/Node2D/Character:frame")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.3),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [0, 1]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_iyr4r"]
|
||||||
|
resource_name = "move"
|
||||||
|
length = 0.6
|
||||||
|
loop_mode = 1
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("../Sprites/Node2D/Character: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),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [2, 3, 4, 5, 6, 7]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_vobpw"]
|
||||||
|
resource_name = "roll"
|
||||||
|
length = 0.5
|
||||||
|
step = 0.05
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("../Sprites/Node2D/Character:rotation")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.5),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.0, 6.28319]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_tpnyg"]
|
||||||
|
resource_name = "stop"
|
||||||
|
length = 0.2
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("../Sprites/Node2D/Character:frame")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.2),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [10, 0]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_0tohi"]
|
||||||
|
_data = {
|
||||||
|
"RESET": SubResource("Animation_imqdv"),
|
||||||
|
"idle": SubResource("Animation_mg66i"),
|
||||||
|
"move": SubResource("Animation_iyr4r"),
|
||||||
|
"roll": SubResource("Animation_vobpw"),
|
||||||
|
"stop": SubResource("Animation_tpnyg")
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_adxyh"]
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("../Sprites/Node2D/Character:frame")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [0]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_3w3u1"]
|
||||||
|
resource_name = "sword"
|
||||||
|
length = 0.3
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("../Sprites/Node2D/Character:frame")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.1, 0.2),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [12, 13, 14]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_73mj7"]
|
||||||
|
_data = {
|
||||||
|
"RESET": SubResource("Animation_adxyh"),
|
||||||
|
"sword": SubResource("Animation_3w3u1")
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_k6l16"]
|
[sub_resource type="Animation" id="Animation_k6l16"]
|
||||||
|
@ -129,87 +181,205 @@ tracks/0/keys = {
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [0.0]
|
"values": [0.0]
|
||||||
}
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xe5eq"]
|
tracks/1/imported = false
|
||||||
_data = {
|
tracks/1/enabled = true
|
||||||
"Hurt": SubResource("Animation_dxevc"),
|
tracks/1/path = NodePath("Sprites/Node2D/Character:frame")
|
||||||
"RESET": SubResource("Animation_k6l16")
|
tracks/1/interp = 1
|
||||||
}
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
[sub_resource type="Animation" id="Animation_yejx2"]
|
|
||||||
length = 0.001
|
|
||||||
tracks/0/type = "value"
|
|
||||||
tracks/0/imported = false
|
|
||||||
tracks/0/enabled = true
|
|
||||||
tracks/0/path = NodePath("Sprite:rotation")
|
|
||||||
tracks/0/interp = 1
|
|
||||||
tracks/0/loop_wrap = true
|
|
||||||
tracks/0/keys = {
|
|
||||||
"times": PackedFloat32Array(0),
|
"times": PackedFloat32Array(0),
|
||||||
"transitions": PackedFloat32Array(1),
|
"transitions": PackedFloat32Array(1),
|
||||||
"update": 0,
|
"update": 1,
|
||||||
"values": [0.0]
|
"values": [0]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("Effects/HurtParticles:emitting")
|
||||||
|
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_rx2pj"]
|
[sub_resource type="Animation" id="Animation_dxevc"]
|
||||||
resource_name = "roll"
|
resource_name = "hurt"
|
||||||
length = 0.5
|
length = 0.2
|
||||||
step = 0.05
|
step = 0.05
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
tracks/0/imported = false
|
tracks/0/imported = false
|
||||||
tracks/0/enabled = true
|
tracks/0/enabled = true
|
||||||
tracks/0/path = NodePath("Sprite:rotation")
|
tracks/0/path = NodePath(".:material:shader_parameter/intensity")
|
||||||
tracks/0/interp = 1
|
tracks/0/interp = 2
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.25, 0.5),
|
"times": PackedFloat32Array(0, 0.05, 0.1, 0.2),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(4, 4, 4, 4),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [0.0, 3.14159, 6.28319]
|
"values": [1.0, 0.0, 1.0, 0.0]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Sprites/Node2D/Character:frame")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [11]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("Effects/HurtParticles:emitting")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.1),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false]
|
||||||
|
}
|
||||||
|
tracks/3/type = "method"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("Effects/HurtParticles")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"times": PackedFloat32Array(0.2),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"values": [{
|
||||||
|
"args": [],
|
||||||
|
"method": &"restart"
|
||||||
|
}]
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_jai06"]
|
[sub_resource type="Animation" id="Animation_pjey7"]
|
||||||
|
resource_name = "hurt_flash"
|
||||||
|
length = 0.4
|
||||||
|
step = 0.05
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath(".:material:shader_parameter/intensity")
|
||||||
|
tracks/0/interp = 2
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.2, 0.4),
|
||||||
|
"transitions": PackedFloat32Array(4, 4, 4),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.0, 1.0, 0.0]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xe5eq"]
|
||||||
_data = {
|
_data = {
|
||||||
"RESET": SubResource("Animation_yejx2"),
|
"RESET": SubResource("Animation_k6l16"),
|
||||||
"roll": SubResource("Animation_rx2pj")
|
"hurt": SubResource("Animation_dxevc"),
|
||||||
|
"hurt_flash": SubResource("Animation_pjey7")
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="Gradient" id="Gradient_3tax5"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_kks2p"]
|
||||||
offsets = PackedFloat32Array(0.533333, 1)
|
_data = {
|
||||||
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
|
"stun": ExtResource("8_m08fh")
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_pjeh8"]
|
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_kwett"]
|
||||||
gradient = SubResource("Gradient_3tax5")
|
animation = &"idle"
|
||||||
|
|
||||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_humq0"]
|
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_vqdng"]
|
||||||
emission_shape = 1
|
animation = &"move"
|
||||||
emission_sphere_radius = 1.0
|
|
||||||
|
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_4np0m"]
|
||||||
|
animation = &"roll"
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_suhx1"]
|
||||||
|
animation = &"stop"
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_sorqc"]
|
||||||
|
advance_mode = 2
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_ujrp0"]
|
||||||
|
advance_condition = &"move"
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_kjkm8"]
|
||||||
|
advance_condition = &"idle"
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_1ywlq"]
|
||||||
|
switch_mode = 2
|
||||||
|
advance_mode = 2
|
||||||
|
advance_condition = &"idle"
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_abs7t"]
|
||||||
|
advance_condition = &"roll"
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_qlka8"]
|
||||||
|
advance_condition = &"idle"
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_ql2f3"]
|
||||||
|
advance_condition = &"move"
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_g1yba"]
|
||||||
|
advance_condition = &"roll"
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_0ukul"]
|
||||||
|
states/End/position = Vector2(613, 100)
|
||||||
|
states/Start/position = Vector2(89, 100)
|
||||||
|
states/idle/node = SubResource("AnimationNodeAnimation_kwett")
|
||||||
|
states/idle/position = Vector2(259, 100)
|
||||||
|
states/move/node = SubResource("AnimationNodeAnimation_vqdng")
|
||||||
|
states/move/position = Vector2(259, 18)
|
||||||
|
states/roll/node = SubResource("AnimationNodeAnimation_4np0m")
|
||||||
|
states/roll/position = Vector2(89, 18)
|
||||||
|
states/stop/node = SubResource("AnimationNodeAnimation_suhx1")
|
||||||
|
states/stop/position = Vector2(438, 100)
|
||||||
|
transitions = ["Start", "idle", SubResource("AnimationNodeStateMachineTransition_sorqc"), "idle", "move", SubResource("AnimationNodeStateMachineTransition_ujrp0"), "move", "stop", SubResource("AnimationNodeStateMachineTransition_kjkm8"), "stop", "idle", SubResource("AnimationNodeStateMachineTransition_1ywlq"), "idle", "roll", SubResource("AnimationNodeStateMachineTransition_abs7t"), "roll", "idle", SubResource("AnimationNodeStateMachineTransition_qlka8"), "roll", "move", SubResource("AnimationNodeStateMachineTransition_ql2f3"), "move", "roll", SubResource("AnimationNodeStateMachineTransition_g1yba")]
|
||||||
|
graph_offset = Vector2(-335.315, -63.5708)
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachinePlayback" id="AnimationNodeStateMachinePlayback_jln87"]
|
||||||
|
|
||||||
|
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_852jj"]
|
||||||
particle_flag_disable_z = true
|
particle_flag_disable_z = true
|
||||||
direction = Vector3(0, 0, 0)
|
|
||||||
spread = 180.0
|
spread = 180.0
|
||||||
gravity = Vector3(0, 0, 0)
|
gravity = Vector3(0, 0, 0)
|
||||||
initial_velocity_min = 32.0
|
initial_velocity_min = 8.0
|
||||||
initial_velocity_max = 32.0
|
initial_velocity_max = 16.0
|
||||||
orbit_velocity_min = 0.0
|
orbit_velocity_min = 0.0
|
||||||
orbit_velocity_max = 0.1
|
orbit_velocity_max = 0.0
|
||||||
tangential_accel_min = 64.0
|
linear_accel_min = -32.0
|
||||||
tangential_accel_max = 64.0
|
linear_accel_max = -16.0
|
||||||
color_ramp = SubResource("GradientTexture1D_pjeh8")
|
scale_min = 0.1
|
||||||
|
scale_max = 0.1
|
||||||
|
|
||||||
[sub_resource type="CanvasTexture" id="CanvasTexture_pited"]
|
[sub_resource type="CanvasTexture" id="CanvasTexture_pited"]
|
||||||
|
diffuse_texture = ExtResource("9_7gumm")
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_bfqew"]
|
||||||
|
size = Vector2(12, 8)
|
||||||
|
|
||||||
|
[sub_resource type="LabelSettings" id="LabelSettings_q5h1n"]
|
||||||
|
font_size = 24
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_cjk6b"]
|
||||||
|
size = Vector2(8, 8)
|
||||||
|
|
||||||
[node name="Player" type="CharacterBody2D" node_paths=PackedStringArray("Camera", "DirectionMarker", "Sprite", "Inventory", "StateMachine", "Hurtbox")]
|
[node name="Player" type="CharacterBody2D" node_paths=PackedStringArray("Camera", "DirectionMarker", "Sprite", "Inventory", "StateMachine", "Hurtbox")]
|
||||||
y_sort_enabled = true
|
y_sort_enabled = true
|
||||||
texture_filter = 3
|
texture_filter = 3
|
||||||
material = SubResource("ShaderMaterial_h78y7")
|
material = SubResource("ShaderMaterial_h78y7")
|
||||||
position = Vector2(1, -12)
|
|
||||||
collision_layer = 6
|
collision_layer = 6
|
||||||
collision_mask = 17
|
collision_mask = 17
|
||||||
script = ExtResource("1_flygr")
|
script = ExtResource("1_flygr")
|
||||||
Camera = NodePath("Camera2D")
|
Camera = NodePath("Camera2D")
|
||||||
DirectionMarker = NodePath("Direction2D")
|
DirectionMarker = NodePath("Direction2D")
|
||||||
Speed = 64.0
|
Speed = 80.0
|
||||||
Sprite = NodePath("Sprite")
|
Sprite = NodePath("Sprites/Node2D/Character")
|
||||||
Inventory = NodePath("Inventory")
|
Inventory = NodePath("Inventory")
|
||||||
StateMachine = NodePath("StateMachine")
|
StateMachine = NodePath("StateMachine")
|
||||||
Hurtbox = NodePath("Hurtbox")
|
Hurtbox = NodePath("Hurtbox")
|
||||||
|
@ -237,18 +407,89 @@ script = ExtResource("8_fy0v5")
|
||||||
IdleState = NodePath("../Idle")
|
IdleState = NodePath("../Idle")
|
||||||
Character = NodePath("../..")
|
Character = NodePath("../..")
|
||||||
|
|
||||||
|
[node name="Animations" type="Node" parent="."]
|
||||||
|
script = ExtResource("7_sdgvb")
|
||||||
|
|
||||||
|
[node name="Movement" type="AnimationPlayer" parent="Animations"]
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_0tohi")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Attack" type="AnimationPlayer" parent="Animations"]
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_73mj7")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Hurt" type="AnimationPlayer" parent="Animations"]
|
||||||
|
root_node = NodePath("../..")
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_xe5eq")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Stun" type="AnimationPlayer" parent="Animations"]
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_kks2p")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="AnimationTree" type="AnimationTree" parent="Animations"]
|
||||||
|
tree_root = SubResource("AnimationNodeStateMachine_0ukul")
|
||||||
|
anim_player = NodePath("../Movement")
|
||||||
|
parameters/playback = SubResource("AnimationNodeStateMachinePlayback_jln87")
|
||||||
|
parameters/conditions/idle = false
|
||||||
|
parameters/conditions/move = false
|
||||||
|
parameters/conditions/roll = false
|
||||||
|
|
||||||
|
[node name="Effects" type="Node2D" parent="."]
|
||||||
|
|
||||||
|
[node name="RollParticles" type="GPUParticles2D" parent="Effects"]
|
||||||
|
emitting = false
|
||||||
|
amount = 16
|
||||||
|
process_material = SubResource("ParticleProcessMaterial_852jj")
|
||||||
|
texture = ExtResource("9_7gumm")
|
||||||
|
lifetime = 0.8
|
||||||
|
|
||||||
|
[node name="DeathParticles" type="GPUParticles2D" parent="Effects"]
|
||||||
|
emitting = false
|
||||||
|
amount = 32
|
||||||
|
process_material = ExtResource("8_yf112")
|
||||||
|
texture = SubResource("CanvasTexture_pited")
|
||||||
|
lifetime = 2.0
|
||||||
|
preprocess = 0.1
|
||||||
|
explosiveness = 0.9
|
||||||
|
|
||||||
|
[node name="HurtParticles" type="GPUParticles2D" parent="Effects"]
|
||||||
|
emitting = false
|
||||||
|
amount = 32
|
||||||
|
process_material = ExtResource("8_yf112")
|
||||||
|
texture = ExtResource("9_7gumm")
|
||||||
|
lifetime = 1.5
|
||||||
|
one_shot = true
|
||||||
|
preprocess = 0.1
|
||||||
|
explosiveness = 0.9
|
||||||
|
|
||||||
[node name="Camera2D" parent="." instance=ExtResource("4_ym125")]
|
[node name="Camera2D" parent="." instance=ExtResource("4_ym125")]
|
||||||
|
limit_left = -256
|
||||||
|
limit_top = -256
|
||||||
|
limit_right = 256
|
||||||
|
limit_bottom = 256
|
||||||
position_smoothing_speed = 8.0
|
position_smoothing_speed = 8.0
|
||||||
|
|
||||||
[node name="Sprite" type="AnimatedSprite2D" parent="."]
|
[node name="Sprites" type="Node2D" parent="."]
|
||||||
|
y_sort_enabled = true
|
||||||
use_parent_material = true
|
use_parent_material = true
|
||||||
position = Vector2(0, 4)
|
rotation = 6.28319
|
||||||
sprite_frames = SubResource("SpriteFrames_2h7cf")
|
|
||||||
animation = &"idle"
|
[node name="Node2D" type="Node2D" parent="Sprites"]
|
||||||
|
|
||||||
|
[node name="Character" type="Sprite2D" parent="Sprites/Node2D"]
|
||||||
|
use_parent_material = true
|
||||||
|
position = Vector2(-1, -8)
|
||||||
|
texture = ExtResource("4_5vird")
|
||||||
offset = Vector2(0, -4)
|
offset = Vector2(0, -4)
|
||||||
|
hframes = 24
|
||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
position = Vector2(0, 8)
|
position = Vector2(0, -4)
|
||||||
shape = SubResource("RectangleShape2D_bfqew")
|
shape = SubResource("RectangleShape2D_bfqew")
|
||||||
|
|
||||||
[node name="Debug" type="Control" parent="."]
|
[node name="Debug" type="Control" parent="."]
|
||||||
|
@ -266,10 +507,8 @@ text = "lol"
|
||||||
label_settings = SubResource("LabelSettings_q5h1n")
|
label_settings = SubResource("LabelSettings_q5h1n")
|
||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
|
|
||||||
[node name="Node" type="Node" parent="."]
|
|
||||||
|
|
||||||
[node name="Inventory" type="Node2D" parent="."]
|
[node name="Inventory" type="Node2D" parent="."]
|
||||||
position = Vector2(0, 4)
|
position = Vector2(0, -4)
|
||||||
script = ExtResource("7_xyenu")
|
script = ExtResource("7_xyenu")
|
||||||
InventoryMap = {
|
InventoryMap = {
|
||||||
"equip_1": 0,
|
"equip_1": 0,
|
||||||
|
@ -278,56 +517,50 @@ InventoryMap = {
|
||||||
|
|
||||||
[node name="Node2D" parent="Inventory" instance=ExtResource("7_4rxuv")]
|
[node name="Node2D" parent="Inventory" instance=ExtResource("7_4rxuv")]
|
||||||
visible = false
|
visible = false
|
||||||
ShouldHideIdle = false
|
|
||||||
|
|
||||||
[node name="Hurtbox" parent="." instance=ExtResource("9_avyu4")]
|
[node name="DocLance" parent="Inventory" instance=ExtResource("14_bj0lo")]
|
||||||
|
|
||||||
|
[node name="Hurtbox" parent="." node_paths=PackedStringArray("InvincibilityTimer") instance=ExtResource("9_avyu4")]
|
||||||
|
visible = false
|
||||||
|
InvincibilityTimer = NodePath("Timer")
|
||||||
Faction = 1
|
Faction = 1
|
||||||
|
|
||||||
[node name="CollisionShape2D" parent="Hurtbox" index="0"]
|
[node name="CollisionShape2D" parent="Hurtbox" index="0"]
|
||||||
position = Vector2(0, 6)
|
visible = false
|
||||||
|
position = Vector2(0, 4)
|
||||||
shape = SubResource("RectangleShape2D_cjk6b")
|
shape = SubResource("RectangleShape2D_cjk6b")
|
||||||
|
|
||||||
[node name="FlashAnimation" type="AnimationPlayer" parent="."]
|
[node name="Timer" type="Timer" parent="Hurtbox"]
|
||||||
libraries = {
|
one_shot = true
|
||||||
"": SubResource("AnimationLibrary_xe5eq")
|
|
||||||
}
|
|
||||||
|
|
||||||
[node name="RollAnimation" type="AnimationPlayer" parent="."]
|
|
||||||
libraries = {
|
|
||||||
"": SubResource("AnimationLibrary_jai06")
|
|
||||||
}
|
|
||||||
|
|
||||||
[node name="HurtSound" type="AudioStreamPlayer2D" parent="."]
|
[node name="HurtSound" type="AudioStreamPlayer2D" parent="."]
|
||||||
|
visible = false
|
||||||
stream = ExtResource("12_vvem5")
|
stream = ExtResource("12_vvem5")
|
||||||
max_distance = 64.0
|
max_distance = 64.0
|
||||||
|
|
||||||
[node name="AudioListener2D" type="AudioListener2D" parent="."]
|
[node name="AudioListener2D" type="AudioListener2D" parent="."]
|
||||||
|
visible = false
|
||||||
current = true
|
current = true
|
||||||
|
|
||||||
[node name="Direction2D" type="Marker2D" parent="."]
|
[node name="Direction2D" type="Marker2D" parent="."]
|
||||||
|
visible = false
|
||||||
position = Vector2(0, 6)
|
position = Vector2(0, 6)
|
||||||
|
|
||||||
[node name="InteractionRay" type="RayCast2D" parent="Direction2D"]
|
[node name="InteractionRay" type="RayCast2D" parent="Direction2D"]
|
||||||
|
visible = false
|
||||||
target_position = Vector2(16, 0)
|
target_position = Vector2(16, 0)
|
||||||
collision_mask = 64
|
collision_mask = 64
|
||||||
collide_with_areas = true
|
collide_with_areas = true
|
||||||
script = ExtResource("13_hs3u1")
|
script = ExtResource("13_hs3u1")
|
||||||
|
|
||||||
[node name="DeathParticles" type="GPUParticles2D" parent="."]
|
|
||||||
emitting = false
|
|
||||||
amount = 16
|
|
||||||
process_material = SubResource("ParticleProcessMaterial_humq0")
|
|
||||||
texture = SubResource("CanvasTexture_pited")
|
|
||||||
one_shot = true
|
|
||||||
explosiveness = 0.9
|
|
||||||
|
|
||||||
[node name="PointLight2D" type="PointLight2D" parent="."]
|
[node name="PointLight2D" type="PointLight2D" parent="."]
|
||||||
|
visible = false
|
||||||
blend_mode = 2
|
blend_mode = 2
|
||||||
shadow_enabled = true
|
shadow_enabled = true
|
||||||
shadow_filter = 2
|
shadow_filter = 2
|
||||||
shadow_filter_smooth = 3.0
|
shadow_filter_smooth = 3.0
|
||||||
texture = ExtResource("14_l4ekh")
|
texture = ExtResource("15_3hahh")
|
||||||
texture_scale = 0.5
|
height = 10.0
|
||||||
|
|
||||||
[node name="DamageTime" type="Node" parent="."]
|
[node name="DamageTime" type="Node" parent="."]
|
||||||
script = ExtResource("15_4xl06")
|
script = ExtResource("15_4xl06")
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
[gd_scene load_steps=7 format=3 uid="uid://cqx56u46g2c16"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://djaljmco3xo4g" path="res://Entities/ShungiteDart.tscn" id="1_md2qh"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://qc6agawkad5k" path="res://Assets/Sprites/Misc/compact-disc.png" id="3_8r6gc"]
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_wvy7p"]
|
||||||
|
atlas = ExtResource("3_8r6gc")
|
||||||
|
region = Rect2(0, 0, 12, 12)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_0ibsw"]
|
||||||
|
atlas = ExtResource("3_8r6gc")
|
||||||
|
region = Rect2(12, 0, 12, 12)
|
||||||
|
|
||||||
|
[sub_resource type="SpriteFrames" id="SpriteFrames_80dw6"]
|
||||||
|
animations = [{
|
||||||
|
"frames": [{
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_wvy7p")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_0ibsw")
|
||||||
|
}],
|
||||||
|
"loop": true,
|
||||||
|
"name": &"default",
|
||||||
|
"speed": 5.0
|
||||||
|
}]
|
||||||
|
|
||||||
|
[sub_resource type="CircleShape2D" id="CircleShape2D_v6kob"]
|
||||||
|
radius = 4.0
|
||||||
|
|
||||||
|
[node name="ShungiteDart" instance=ExtResource("1_md2qh")]
|
||||||
|
|
||||||
|
[node name="Sprite2D" parent="." index="0"]
|
||||||
|
sprite_frames = SubResource("SpriteFrames_80dw6")
|
||||||
|
frame_progress = 0.70222
|
||||||
|
speed_scale = 2.0
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" parent="Hitbox" index="0"]
|
||||||
|
shape = SubResource("CircleShape2D_v6kob")
|
||||||
|
|
||||||
|
[editable path="Hitbox"]
|
|
@ -6,7 +6,15 @@ namespace SupaLidlGame.Entities;
|
||||||
|
|
||||||
public partial class Projectile : RigidBody2D
|
public partial class Projectile : RigidBody2D
|
||||||
{
|
{
|
||||||
public Vector2 Velocity => Direction * Speed;
|
//public virtual Vector2 Velocity => Direction * Speed;
|
||||||
|
public virtual Vector2 Velocity
|
||||||
|
{
|
||||||
|
get => Direction * Speed;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
throw new System.NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public string ProjectileName { get; set; }
|
public string ProjectileName { get; set; }
|
||||||
|
@ -14,6 +22,12 @@ public partial class Projectile : RigidBody2D
|
||||||
[Export]
|
[Export]
|
||||||
public float Speed { get; set; }
|
public float Speed { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public Vector2 AccelerationDirection { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public float AccelerationMagnitude { get; set; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public Vector2 Direction { get; set; }
|
public Vector2 Direction { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -63,8 +63,7 @@ public partial class ShungiteSpike : Projectile
|
||||||
float damage,
|
float damage,
|
||||||
Characters.Character inflictor,
|
Characters.Character inflictor,
|
||||||
float knockback,
|
float knockback,
|
||||||
Vector2 knockbackOrigin = default,
|
Vector2 knockbackDir)
|
||||||
Vector2 knockbackVector = default)
|
|
||||||
{
|
{
|
||||||
// if we were hit by the player before the spike freezes,
|
// if we were hit by the player before the spike freezes,
|
||||||
// spawn a dart towards where the player is aiming
|
// spawn a dart towards where the player is aiming
|
||||||
|
|
|
@ -5,10 +5,10 @@
|
||||||
[ext_resource type="Texture2D" uid="uid://dvx2b0y6dup53" path="res://Assets/Sprites/Misc/shungite-spike.png" id="2_klp8v"]
|
[ext_resource type="Texture2D" uid="uid://dvx2b0y6dup53" path="res://Assets/Sprites/Misc/shungite-spike.png" id="2_klp8v"]
|
||||||
[ext_resource type="PackedScene" uid="uid://du5vhccg75nrq" path="res://BoundingBoxes/Hitbox.tscn" id="3_kojrj"]
|
[ext_resource type="PackedScene" uid="uid://du5vhccg75nrq" path="res://BoundingBoxes/Hitbox.tscn" id="3_kojrj"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cjgxyhgcyvsv7" path="res://BoundingBoxes/Hurtbox.tscn" id="4_d8dl4"]
|
[ext_resource type="PackedScene" uid="uid://cjgxyhgcyvsv7" path="res://BoundingBoxes/Hurtbox.tscn" id="4_d8dl4"]
|
||||||
[ext_resource type="AudioStream" uid="uid://c4n7ioxpukdwi" path="res://Assets/Sounds/parry.wav" id="6_fepye"]
|
[ext_resource type="AudioStream" uid="uid://jsnjoyaj6p5a" path="res://Assets/Sounds/rock-smash.wav" id="6_vr2ui"]
|
||||||
|
|
||||||
[sub_resource type="CircleShape2D" id="CircleShape2D_hrev2"]
|
[sub_resource type="CircleShape2D" id="CircleShape2D_hrev2"]
|
||||||
radius = 8.0
|
radius = 6.0
|
||||||
|
|
||||||
[sub_resource type="CircleShape2D" id="CircleShape2D_kumrg"]
|
[sub_resource type="CircleShape2D" id="CircleShape2D_kumrg"]
|
||||||
radius = 12.0
|
radius = 12.0
|
||||||
|
@ -144,7 +144,7 @@ shape = SubResource("CircleShape2D_hrev2")
|
||||||
shape = SubResource("CircleShape2D_kumrg")
|
shape = SubResource("CircleShape2D_kumrg")
|
||||||
|
|
||||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
|
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
|
||||||
stream = ExtResource("6_fepye")
|
stream = ExtResource("6_vr2ui")
|
||||||
|
|
||||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
libraries = {
|
libraries = {
|
||||||
|
|
|
@ -57,7 +57,7 @@ animations = [{
|
||||||
}],
|
}],
|
||||||
"loop": true,
|
"loop": true,
|
||||||
"name": &"default",
|
"name": &"default",
|
||||||
"speed": 5.0
|
"speed": 10.0
|
||||||
}]
|
}]
|
||||||
|
|
||||||
[node name="Torch" type="Node2D"]
|
[node name="Torch" type="Node2D"]
|
||||||
|
@ -67,8 +67,7 @@ texture_filter = 1
|
||||||
position = Vector2(0, -12)
|
position = Vector2(0, -12)
|
||||||
sprite_frames = SubResource("SpriteFrames_gf7ku")
|
sprite_frames = SubResource("SpriteFrames_gf7ku")
|
||||||
autoplay = "default"
|
autoplay = "default"
|
||||||
frame = 5
|
frame_progress = 0.337799
|
||||||
frame_progress = 0.743234
|
|
||||||
|
|
||||||
[node name="PointLight2D" type="PointLight2D" parent="."]
|
[node name="PointLight2D" type="PointLight2D" parent="."]
|
||||||
color = Color(1, 0.898039, 0.686275, 1)
|
color = Color(1, 0.898039, 0.686275, 1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
[gd_scene load_steps=16 format=3 uid="uid://ceadk7pam7vab"]
|
[gd_scene load_steps=16 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://cyldr0ck3yfrp" path="res://Assets/Sprites/Misc/torch-lamp.png" id="1_dlkl0"]
|
||||||
[ext_resource type="Texture2D" uid="uid://b8ann6yb8qox4" path="res://Assets/Sprites/Particles/light-pixel.png" id="2_yuj6j"]
|
[ext_resource type="Texture2D" uid="uid://coarr28adgo1u" path="res://Assets/Sprites/Particles/point-light.png" id="2_0xpf8"]
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_ikvnd"]
|
[sub_resource type="AtlasTexture" id="AtlasTexture_ikvnd"]
|
||||||
atlas = ExtResource("1_dlkl0")
|
atlas = ExtResource("1_dlkl0")
|
||||||
|
@ -98,17 +98,18 @@ animations = [{
|
||||||
[node name="TorchLamp" type="Node2D"]
|
[node name="TorchLamp" type="Node2D"]
|
||||||
|
|
||||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
||||||
|
y_sort_enabled = true
|
||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
position = Vector2(0, -12)
|
|
||||||
sprite_frames = SubResource("SpriteFrames_gf7ku")
|
sprite_frames = SubResource("SpriteFrames_gf7ku")
|
||||||
autoplay = "default"
|
autoplay = "default"
|
||||||
frame = 6
|
frame = 6
|
||||||
frame_progress = 0.743234
|
frame_progress = 0.743234
|
||||||
|
offset = Vector2(0, -12)
|
||||||
|
|
||||||
[node name="PointLight2D" type="PointLight2D" parent="."]
|
[node name="PointLight2D" type="PointLight2D" parent="."]
|
||||||
color = Color(1, 0.827451, 0.619608, 1)
|
color = Color(1, 0.803922, 0.698039, 1)
|
||||||
|
energy = 1.2
|
||||||
blend_mode = 2
|
blend_mode = 2
|
||||||
shadow_enabled = true
|
|
||||||
shadow_filter_smooth = 3.0
|
shadow_filter_smooth = 3.0
|
||||||
texture = ExtResource("2_yuj6j")
|
texture = ExtResource("2_0xpf8")
|
||||||
offset = Vector2(0, 2)
|
texture_scale = 0.25
|
||||||
|
|
|
@ -15,6 +15,7 @@ public partial class UnwantedFrequency : Projectile
|
||||||
public Node2D TrailRotation { get; set; }
|
public Node2D TrailRotation { get; set; }
|
||||||
public Node2D TrailPosition { get; set; }
|
public Node2D TrailPosition { get; set; }
|
||||||
public GpuParticles2D DeathParticles { get; set; }
|
public GpuParticles2D DeathParticles { get; set; }
|
||||||
|
public GpuParticles2D SpawnParticles { get; set; }
|
||||||
public Timer DeferDeathTimer { get; set; }
|
public Timer DeferDeathTimer { get; set; }
|
||||||
|
|
||||||
private double _currentLifetime = 0;
|
private double _currentLifetime = 0;
|
||||||
|
@ -26,6 +27,8 @@ public partial class UnwantedFrequency : Projectile
|
||||||
Trail = TrailPosition.GetNode<Utils.Trail>("Trail");
|
Trail = TrailPosition.GetNode<Utils.Trail>("Trail");
|
||||||
DeferDeathTimer = GetNode<Timer>("DeferDeath");
|
DeferDeathTimer = GetNode<Timer>("DeferDeath");
|
||||||
DeathParticles = GetNode<GpuParticles2D>("DeathParticles");
|
DeathParticles = GetNode<GpuParticles2D>("DeathParticles");
|
||||||
|
SpawnParticles = GetNode<GpuParticles2D>("SpawnParticles");
|
||||||
|
SpawnParticles.Emitting = true;
|
||||||
Hitbox.Hit += (BoundingBoxes.BoundingBox box) =>
|
Hitbox.Hit += (BoundingBoxes.BoundingBox box) =>
|
||||||
{
|
{
|
||||||
if (box is BoundingBoxes.Hurtbox && box.Faction != Hitbox.Faction)
|
if (box is BoundingBoxes.Hurtbox && box.Faction != Hitbox.Faction)
|
||||||
|
@ -62,7 +65,8 @@ public partial class UnwantedFrequency : Projectile
|
||||||
|
|
||||||
public override void Die()
|
public override void Die()
|
||||||
{
|
{
|
||||||
IsDead = Trail.IsDead = Hitbox.IsDisabled = true;
|
IsDead = Trail.IsDead = true;
|
||||||
|
Hitbox.SetDeferred("monitoring", false);
|
||||||
DeferDeathTimer.Timeout += () =>
|
DeferDeathTimer.Timeout += () =>
|
||||||
{
|
{
|
||||||
QueueFree();
|
QueueFree();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=14 format=3 uid="uid://1y5r6sklwgrp"]
|
[gd_scene load_steps=19 format=3 uid="uid://1y5r6sklwgrp"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://Entities/UnwantedFrequency.cs" id="1_6sbe0"]
|
[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"]
|
[ext_resource type="PackedScene" uid="uid://du5vhccg75nrq" path="res://BoundingBoxes/Hitbox.tscn" id="2_gxtvd"]
|
||||||
|
@ -34,6 +34,36 @@ orbit_velocity_min = 0.0
|
||||||
orbit_velocity_max = 2.0
|
orbit_velocity_max = 2.0
|
||||||
color_ramp = SubResource("GradientTexture1D_yfhnr")
|
color_ramp = SubResource("GradientTexture1D_yfhnr")
|
||||||
|
|
||||||
|
[sub_resource type="Gradient" id="Gradient_5hy7c"]
|
||||||
|
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
|
||||||
|
|
||||||
|
[sub_resource type="GradientTexture1D" id="GradientTexture1D_iyaih"]
|
||||||
|
gradient = SubResource("Gradient_5hy7c")
|
||||||
|
|
||||||
|
[sub_resource type="Curve" id="Curve_wt1cb"]
|
||||||
|
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.2, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.5), 0.0, 0.0, 0, 0]
|
||||||
|
point_count = 3
|
||||||
|
|
||||||
|
[sub_resource type="CurveTexture" id="CurveTexture_5uulw"]
|
||||||
|
curve = SubResource("Curve_wt1cb")
|
||||||
|
|
||||||
|
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_olfm2"]
|
||||||
|
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
|
||||||
|
tangential_accel_min = 8.0
|
||||||
|
tangential_accel_max = 8.0
|
||||||
|
scale_max = 2.0
|
||||||
|
scale_curve = SubResource("CurveTexture_5uulw")
|
||||||
|
color = Color(1, 0, 0, 1)
|
||||||
|
color_ramp = SubResource("GradientTexture1D_iyaih")
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_w1abs"]
|
[sub_resource type="Animation" id="Animation_w1abs"]
|
||||||
length = 0.001
|
length = 0.001
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
|
@ -73,12 +103,12 @@ _data = {
|
||||||
|
|
||||||
[node name="UnwantedFrequency" type="RigidBody2D" node_paths=PackedStringArray("Hitbox")]
|
[node name="UnwantedFrequency" type="RigidBody2D" node_paths=PackedStringArray("Hitbox")]
|
||||||
script = ExtResource("1_6sbe0")
|
script = ExtResource("1_6sbe0")
|
||||||
HomingVelocity = 1.4
|
HomingVelocity = 1.2
|
||||||
ProjectileName = "Unwanted Frequency"
|
ProjectileName = "Unwanted Frequency"
|
||||||
Speed = 140.0
|
Speed = 124.0
|
||||||
Direction = Vector2(1, 1)
|
Direction = Vector2(1, 1)
|
||||||
Hitbox = NodePath("Hitbox")
|
Hitbox = NodePath("Hitbox")
|
||||||
Lifetime = 8.0
|
Lifetime = 7.0
|
||||||
|
|
||||||
[node name="Hitbox" parent="." instance=ExtResource("2_gxtvd")]
|
[node name="Hitbox" parent="." instance=ExtResource("2_gxtvd")]
|
||||||
collision_layer = 0
|
collision_layer = 0
|
||||||
|
@ -122,6 +152,14 @@ lifetime = 2.0
|
||||||
one_shot = true
|
one_shot = true
|
||||||
explosiveness = 0.8
|
explosiveness = 0.8
|
||||||
|
|
||||||
|
[node name="SpawnParticles" type="GPUParticles2D" parent="."]
|
||||||
|
emitting = false
|
||||||
|
amount = 12
|
||||||
|
process_material = SubResource("ParticleProcessMaterial_olfm2")
|
||||||
|
lifetime = 2.0
|
||||||
|
one_shot = true
|
||||||
|
explosiveness = 1.0
|
||||||
|
|
||||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
libraries = {
|
libraries = {
|
||||||
"": SubResource("AnimationLibrary_v8fdt")
|
"": SubResource("AnimationLibrary_v8fdt")
|
||||||
|
|
|
@ -38,4 +38,17 @@ public static class NodeExtensions
|
||||||
{
|
{
|
||||||
return node.GetNode(name) as T;
|
return node.GetNode(name) as T;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static T FindChildOfType<T>(this Node node) where T : Node
|
||||||
|
{
|
||||||
|
foreach (Node child in node.GetChildren())
|
||||||
|
{
|
||||||
|
if (child is T t)
|
||||||
|
{
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ public static class Node2DExtensions
|
||||||
var clone = node.Duplicate() as T;
|
var clone = node.Duplicate() as T;
|
||||||
world.AddChild(clone);
|
world.AddChild(clone);
|
||||||
clone.GlobalPosition = node.GlobalPosition;
|
clone.GlobalPosition = node.GlobalPosition;
|
||||||
|
GD.Print("clone on world: " + clone.GlobalPosition);
|
||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,5 +10,6 @@ public static class Particles2D
|
||||||
{
|
{
|
||||||
particles.QueueFree();
|
particles.QueueFree();
|
||||||
};
|
};
|
||||||
|
particles.Emitting = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,9 @@ public partial class Inventory : Node2D
|
||||||
[Export]
|
[Export]
|
||||||
public Dictionary<string, int> InventoryMap { get; set; }
|
public Dictionary<string, int> InventoryMap { get; set; }
|
||||||
|
|
||||||
|
[Signal]
|
||||||
|
public delegate void UsedItemEventHandler(Item item);
|
||||||
|
|
||||||
public const int MaxCapacity = 32;
|
public const int MaxCapacity = 32;
|
||||||
|
|
||||||
private Item _selectedItem;
|
private Item _selectedItem;
|
||||||
|
|
|
@ -53,6 +53,9 @@ public abstract partial class Weapon : Item
|
||||||
[Export]
|
[Export]
|
||||||
public float MaxDistanceHint { get; set; }
|
public float MaxDistanceHint { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public Sprite2D HandAnchor { get; set; }
|
||||||
|
|
||||||
public virtual bool IsParryable { get; protected set; } = false;
|
public virtual bool IsParryable { get; protected set; } = false;
|
||||||
|
|
||||||
public bool IsParried { get; set; }
|
public bool IsParried { get; set; }
|
||||||
|
@ -70,6 +73,12 @@ public abstract partial class Weapon : Item
|
||||||
Visible = true;
|
Visible = true;
|
||||||
}
|
}
|
||||||
Character = character;
|
Character = character;
|
||||||
|
|
||||||
|
// set the hand textures to the character's
|
||||||
|
if (HandAnchor is not null && character.HandTexture is not null)
|
||||||
|
{
|
||||||
|
HandAnchor.Texture = character.HandTexture;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Unequip(Character character)
|
public override void Unequip(Character character)
|
||||||
|
@ -99,7 +108,7 @@ public abstract partial class Weapon : Item
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void _on_hitbox_hit(BoundingBox box)
|
public virtual void OnHitboxHit(BoundingBox box)
|
||||||
{
|
{
|
||||||
if (box is Hurtbox hurtbox)
|
if (box is Hurtbox hurtbox)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,293 @@
|
||||||
|
[gd_scene load_steps=21 format=3 uid="uid://p7oijq6dbvvk"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://Items/Weapons/Sword.cs" id="1_1oyma"]
|
||||||
|
[ext_resource type="Script" path="res://State/Weapon/WeaponStateMachine.cs" id="2_c41ov"]
|
||||||
|
[ext_resource type="Script" path="res://State/Weapon/SwordIdleState.cs" id="3_sxffm"]
|
||||||
|
[ext_resource type="Script" path="res://State/Weapon/SwordAnticipateState.cs" id="4_t7af2"]
|
||||||
|
[ext_resource type="Script" path="res://State/Weapon/SwordAttackState.cs" id="5_i5v42"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://o7enu13gvji5" path="res://Assets/Sprites/doc-lance.png" id="6_7t87o"]
|
||||||
|
[ext_resource type="Material" uid="uid://cbfaqolx1ydvv" path="res://Assets/Sprites/Particles/ParryParticles.tres" id="8_y2qyn"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://du5vhccg75nrq" path="res://BoundingBoxes/Hitbox.tscn" id="9_buajm"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cmvh6pc71ir1m" path="res://Assets/Sprites/sword-swing-large.png" id="11_46l1i"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://qvthq6tppp63" path="res://Assets/Sounds/whoosh.wav" id="12_85vwu"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://cceld51anbm1m" path="res://Assets/Sounds/unsheathe.wav" id="12_khh4e"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://c4n7ioxpukdwi" path="res://Assets/Sounds/parry.wav" id="13_p4djk"]
|
||||||
|
|
||||||
|
[sub_resource type="Curve" id="Curve_36q15"]
|
||||||
|
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.5, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.5), 0.0, 0.0, 0, 0]
|
||||||
|
point_count = 3
|
||||||
|
|
||||||
|
[sub_resource type="CurveTexture" id="CurveTexture_383y7"]
|
||||||
|
curve = SubResource("Curve_36q15")
|
||||||
|
|
||||||
|
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_duy55"]
|
||||||
|
emission_shape = 3
|
||||||
|
emission_box_extents = Vector3(1, 1, 1)
|
||||||
|
particle_flag_disable_z = true
|
||||||
|
direction = Vector3(0, 1, 0)
|
||||||
|
spread = 60.0
|
||||||
|
gravity = Vector3(0, 0, 0)
|
||||||
|
initial_velocity_min = 8.0
|
||||||
|
initial_velocity_max = 16.0
|
||||||
|
orbit_velocity_min = 0.0
|
||||||
|
orbit_velocity_max = 0.0
|
||||||
|
scale_min = 2.0
|
||||||
|
scale_max = 2.0
|
||||||
|
scale_curve = SubResource("CurveTexture_383y7")
|
||||||
|
color = Color(1, 0, 1, 1)
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_b7327"]
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Anchor:rotation")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [1.5708]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("SwingSprite:frame")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [0]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("Anchor:position")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [Vector2(0, 0)]
|
||||||
|
}
|
||||||
|
tracks/3/type = "value"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("Anchor/Node2D:rotation")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.0001, 0.0002),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [0.0, 0.0, 0.0]
|
||||||
|
}
|
||||||
|
tracks/4/type = "method"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath(".")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"values": [{
|
||||||
|
"args": ["is_alternate", false],
|
||||||
|
"method": &"SetAnimationCondition"
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
tracks/5/type = "value"
|
||||||
|
tracks/5/imported = false
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath("SwingSprite:modulate")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Color(2, 2, 2, 1)]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_ameas"]
|
||||||
|
resource_name = "anticipate"
|
||||||
|
length = 0.1
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Anchor:position")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.1),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector2(0, 0), Vector2(-8, 0)]
|
||||||
|
}
|
||||||
|
tracks/1/type = "method"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("UnsheatheSound")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"values": [{
|
||||||
|
"args": [0.0],
|
||||||
|
"method": &"play"
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_6jphj"]
|
||||||
|
resource_name = "attack"
|
||||||
|
step = 0.05
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Anchor:position")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.1, 0.65),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [Vector2(-8, 0), Vector2(8, 0), Vector2(0, 0)]
|
||||||
|
}
|
||||||
|
tracks/1/type = "method"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("SwingSound")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0.1),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"values": [{
|
||||||
|
"args": [0.0],
|
||||||
|
"method": &"play"
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_tao4k"]
|
||||||
|
_data = {
|
||||||
|
"RESET": SubResource("Animation_b7327"),
|
||||||
|
"anticipate": SubResource("Animation_ameas"),
|
||||||
|
"attack": SubResource("Animation_6jphj")
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_rrgwb"]
|
||||||
|
size = Vector2(8, 32)
|
||||||
|
|
||||||
|
[node name="DocLance" type="Node2D" node_paths=PackedStringArray("Hitbox", "AnimationPlayer", "ParryParticles", "StateMachine", "Anchor", "HandAnchor")]
|
||||||
|
y_sort_enabled = true
|
||||||
|
texture_filter = 3
|
||||||
|
script = ExtResource("1_1oyma")
|
||||||
|
Hitbox = NodePath("Hitbox")
|
||||||
|
AnimationPlayer = NodePath("AnimationPlayer")
|
||||||
|
AttackTime = 0.2
|
||||||
|
AttackAnimationDuration = 0.75
|
||||||
|
ParryParticles = NodePath("Anchor/Node2D/Sprite2D/ParryParticles")
|
||||||
|
NPCAnticipateTime = 0.3
|
||||||
|
StateMachine = NodePath("State")
|
||||||
|
Anchor = NodePath("Anchor")
|
||||||
|
Damage = 20.0
|
||||||
|
UseTime = 0.55
|
||||||
|
Knockback = 64.0
|
||||||
|
ShouldHideIdle = true
|
||||||
|
HandAnchor = NodePath("Anchor/Node2D/Sprite2D/Hand")
|
||||||
|
ItemName = "VSM-93"
|
||||||
|
Description = "\"Violence. Speed. Momentum.\""
|
||||||
|
|
||||||
|
[node name="State" type="Node" parent="." node_paths=PackedStringArray("InitialState")]
|
||||||
|
script = ExtResource("2_c41ov")
|
||||||
|
InitialState = NodePath("Idle")
|
||||||
|
|
||||||
|
[node name="Idle" type="Node" parent="State" node_paths=PackedStringArray("AnticipateState", "Sword")]
|
||||||
|
script = ExtResource("3_sxffm")
|
||||||
|
AnticipateState = NodePath("../Anticipate")
|
||||||
|
Sword = NodePath("../..")
|
||||||
|
|
||||||
|
[node name="Anticipate" type="Node" parent="State" node_paths=PackedStringArray("Sword", "AttackState")]
|
||||||
|
script = ExtResource("4_t7af2")
|
||||||
|
Sword = NodePath("../..")
|
||||||
|
AttackState = NodePath("../Attack")
|
||||||
|
|
||||||
|
[node name="Attack" type="Node" parent="State" node_paths=PackedStringArray("Sword", "IdleState")]
|
||||||
|
script = ExtResource("5_i5v42")
|
||||||
|
Sword = NodePath("../..")
|
||||||
|
IdleState = NodePath("../Idle")
|
||||||
|
|
||||||
|
[node name="Anchor" type="Node2D" parent="."]
|
||||||
|
y_sort_enabled = true
|
||||||
|
rotation = 1.5708
|
||||||
|
|
||||||
|
[node name="Node2D" type="Node2D" parent="Anchor"]
|
||||||
|
y_sort_enabled = true
|
||||||
|
position = Vector2(-4, 0)
|
||||||
|
|
||||||
|
[node name="Sprite2D" type="Sprite2D" parent="Anchor/Node2D"]
|
||||||
|
y_sort_enabled = true
|
||||||
|
position = Vector2(0, -8)
|
||||||
|
texture = ExtResource("6_7t87o")
|
||||||
|
|
||||||
|
[node name="ParryParticles" type="GPUParticles2D" parent="Anchor/Node2D/Sprite2D"]
|
||||||
|
modulate = Color(1.2, 1.2, 1.2, 1)
|
||||||
|
position = Vector2(-0.221825, -3.12132)
|
||||||
|
rotation = 0.785398
|
||||||
|
emitting = false
|
||||||
|
amount = 16
|
||||||
|
process_material = ExtResource("8_y2qyn")
|
||||||
|
lifetime = 2.0
|
||||||
|
one_shot = true
|
||||||
|
explosiveness = 1.0
|
||||||
|
trail_enabled = true
|
||||||
|
trail_lifetime = 0.1
|
||||||
|
trail_sections = 4
|
||||||
|
|
||||||
|
[node name="GPUParticles2D" type="GPUParticles2D" parent="Anchor/Node2D/Sprite2D"]
|
||||||
|
position = Vector2(-2.28882e-05, -6)
|
||||||
|
amount = 4
|
||||||
|
process_material = SubResource("ParticleProcessMaterial_duy55")
|
||||||
|
lifetime = 0.25
|
||||||
|
|
||||||
|
[node name="Hand" type="Sprite2D" parent="Anchor/Node2D/Sprite2D"]
|
||||||
|
position = Vector2(-2.52724e-05, 7)
|
||||||
|
rotation = 1.5708
|
||||||
|
|
||||||
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_tao4k")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Hitbox" parent="." instance=ExtResource("9_buajm")]
|
||||||
|
position = Vector2(16, -4)
|
||||||
|
IsDisabled = true
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" parent="Hitbox" index="0"]
|
||||||
|
rotation = 1.5708
|
||||||
|
shape = SubResource("RectangleShape2D_rrgwb")
|
||||||
|
disabled = true
|
||||||
|
|
||||||
|
[node name="SwingSprite" type="Sprite2D" parent="."]
|
||||||
|
modulate = Color(2, 2, 2, 1)
|
||||||
|
texture = ExtResource("11_46l1i")
|
||||||
|
offset = Vector2(8, 0)
|
||||||
|
hframes = 5
|
||||||
|
|
||||||
|
[node name="SwingSound" type="AudioStreamPlayer2D" parent="."]
|
||||||
|
stream = ExtResource("12_85vwu")
|
||||||
|
max_distance = 256.0
|
||||||
|
|
||||||
|
[node name="ParrySound" type="AudioStreamPlayer2D" parent="."]
|
||||||
|
stream = ExtResource("13_p4djk")
|
||||||
|
max_distance = 256.0
|
||||||
|
|
||||||
|
[node name="UnsheatheSound" type="AudioStreamPlayer2D" parent="."]
|
||||||
|
stream = ExtResource("12_khh4e")
|
||||||
|
|
||||||
|
[editable path="Hitbox"]
|
|
@ -0,0 +1,20 @@
|
||||||
|
[gd_scene load_steps=3 format=3 uid="uid://bauucuqvjwbxp"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://p7oijq6dbvvk" path="res://Items/Weapons/DocLance.tscn" id="1_kmq5r"]
|
||||||
|
[ext_resource type="Script" path="res://State/Weapon/SwordHoldAttackState.cs" id="2_7fom6"]
|
||||||
|
|
||||||
|
[node name="DocLance" instance=ExtResource("1_kmq5r")]
|
||||||
|
NPCAnticipateTime = 0.1
|
||||||
|
|
||||||
|
[node name="Anticipate" parent="State" index="1" node_paths=PackedStringArray("AttackState")]
|
||||||
|
AttackState = NodePath("../HoldAttack")
|
||||||
|
|
||||||
|
[node name="Attack" parent="State" index="2"]
|
||||||
|
script = ExtResource("2_7fom6")
|
||||||
|
|
||||||
|
[node name="HoldAttack" type="Node" parent="State" index="3" node_paths=PackedStringArray("Sword", "IdleState")]
|
||||||
|
script = ExtResource("2_7fom6")
|
||||||
|
Sword = NodePath("../..")
|
||||||
|
IdleState = NodePath("../Idle")
|
||||||
|
|
||||||
|
[editable path="Hitbox"]
|
|
@ -0,0 +1,13 @@
|
||||||
|
/*
|
||||||
|
using Godot;
|
||||||
|
|
||||||
|
namespace SupaLidlGame.Items.Weapons;
|
||||||
|
|
||||||
|
public partial class Lance : Sword
|
||||||
|
{
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
|
@ -20,9 +20,6 @@ public partial class Sword : Weapon, IParryable
|
||||||
[Export]
|
[Export]
|
||||||
public AnimationPlayer AnimationPlayer { get; set; }
|
public AnimationPlayer AnimationPlayer { get; set; }
|
||||||
|
|
||||||
[Export]
|
|
||||||
public AnimationTree AnimationTree { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The time frame in seconds for which the weapon will deal damage.
|
/// The time frame in seconds for which the weapon will deal damage.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -37,7 +34,7 @@ public partial class Sword : Weapon, IParryable
|
||||||
public double AttackAnimationDuration { get; set; }
|
public double AttackAnimationDuration { get; set; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public CpuParticles2D ParryParticles { get; set; }
|
public GpuParticles2D ParryParticles { get; set; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public double NPCAnticipateTime { get; set; }
|
public double NPCAnticipateTime { get; set; }
|
||||||
|
@ -69,41 +66,7 @@ public partial class Sword : Weapon, IParryable
|
||||||
|
|
||||||
public override void Use()
|
public override void Use()
|
||||||
{
|
{
|
||||||
// we can't use if we're still using the weapon
|
|
||||||
if (RemainingUseTime > 0)
|
|
||||||
{
|
|
||||||
//return;
|
|
||||||
}
|
|
||||||
|
|
||||||
StateMachine.Use();
|
StateMachine.Use();
|
||||||
|
|
||||||
/*
|
|
||||||
// reset state of the weapon
|
|
||||||
IsParried = false;
|
|
||||||
IsParryable = true;
|
|
||||||
ParryTimeOrigin = Time.GetTicksMsec();
|
|
||||||
|
|
||||||
_playback.Travel("use");
|
|
||||||
*/
|
|
||||||
|
|
||||||
// play animation depending on rotation of weapon
|
|
||||||
/*
|
|
||||||
string anim = "use";
|
|
||||||
|
|
||||||
if (GetNode<Node2D>("Anchor").Rotation > Mathf.DegToRad(50))
|
|
||||||
{
|
|
||||||
anim = "use2";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Character is NPC)
|
|
||||||
{
|
|
||||||
// NPCs have a slower attack
|
|
||||||
anim += "-npc";
|
|
||||||
}
|
|
||||||
|
|
||||||
AnimationPlayer.Play(anim);
|
|
||||||
*/
|
|
||||||
|
|
||||||
base.Use();
|
base.Use();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +75,6 @@ public partial class Sword : Weapon, IParryable
|
||||||
IsParried = false;
|
IsParried = false;
|
||||||
IsParryable = true;
|
IsParryable = true;
|
||||||
ParryTimeOrigin = Time.GetTicksMsec();
|
ParryTimeOrigin = Time.GetTicksMsec();
|
||||||
GD.Print(Character.Name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DisableParry()
|
public void DisableParry()
|
||||||
|
@ -123,7 +85,8 @@ public partial class Sword : Weapon, IParryable
|
||||||
public override void Deuse()
|
public override void Deuse()
|
||||||
{
|
{
|
||||||
//AnimationPlayer.Stop();
|
//AnimationPlayer.Stop();
|
||||||
Deattack();
|
//Deattack();
|
||||||
|
StateMachine.Deuse();
|
||||||
base.Deuse();
|
base.Deuse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,8 +110,7 @@ public partial class Sword : Weapon, IParryable
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
Hitbox.Damage = Damage;
|
Hitbox.Damage = Damage;
|
||||||
_playback = (AnimationNodeStateMachinePlayback)AnimationTree
|
Hitbox.Hit += OnHitboxHit;
|
||||||
.Get("parameters/playback");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void _Process(double delta)
|
public override void _Process(double delta)
|
||||||
|
@ -166,9 +128,9 @@ public partial class Sword : Weapon, IParryable
|
||||||
|
|
||||||
foreach (BoundingBox box in Hitbox.Hits)
|
foreach (BoundingBox box in Hitbox.Hits)
|
||||||
{
|
{
|
||||||
GD.Print("processing hit");
|
|
||||||
if (box is Hurtbox hurtbox)
|
if (box is Hurtbox hurtbox)
|
||||||
{
|
{
|
||||||
|
GD.Print("LUL");
|
||||||
hurtbox.InflictDamage(Damage, Character, Knockback);
|
hurtbox.InflictDamage(Damage, Character, Knockback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -176,32 +138,33 @@ public partial class Sword : Weapon, IParryable
|
||||||
|
|
||||||
public void AttemptParry(Weapon otherWeapon)
|
public void AttemptParry(Weapon otherWeapon)
|
||||||
{
|
{
|
||||||
//if (IsParryable && otherWeapon.IsParryable)
|
|
||||||
if (otherWeapon.IsParryable &&
|
if (otherWeapon.IsParryable &&
|
||||||
otherWeapon is IParryable otherParryable)
|
otherWeapon is IParryable otherParryable)
|
||||||
{
|
{
|
||||||
ParryParticles.Emitting = true;
|
|
||||||
if (ParryTimeOrigin < otherParryable.ParryTimeOrigin)
|
if (ParryTimeOrigin < otherParryable.ParryTimeOrigin)
|
||||||
{
|
{
|
||||||
// our character was parried
|
// our character was parried
|
||||||
|
ParryParticles.CloneOnWorld<GpuParticles2D>().EmitOneShot();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
otherParryable.Stun();
|
otherParryable.Stun();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//this.GetAncestor<TileMap>().AddChild(instance);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Stun()
|
public void Stun()
|
||||||
{
|
{
|
||||||
IsParried = true;
|
IsParried = true;
|
||||||
AnimationPlayer.SpeedScale = 0.25f;
|
AnimationPlayer.SpeedScale = 0.25f;
|
||||||
Character.Stun(1.5f);
|
Character.Stun(1);
|
||||||
GetNode<AudioStreamPlayer2D>("ParrySound").OnWorld().PlayOneShot();
|
GetNode<AudioStreamPlayer2D>("ParrySound")
|
||||||
|
.OnWorld()
|
||||||
|
.WithPitchDeviation(0.125f)
|
||||||
|
.PlayOneShot();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void _on_hitbox_hit(BoundingBox box)
|
public override void OnHitboxHit(BoundingBox box)
|
||||||
{
|
{
|
||||||
if (IsParried)
|
if (IsParried)
|
||||||
{
|
{
|
||||||
|
@ -232,6 +195,6 @@ public partial class Sword : Weapon, IParryable
|
||||||
|
|
||||||
protected void SetAnimationCondition(string condition, bool value)
|
protected void SetAnimationCondition(string condition, bool value)
|
||||||
{
|
{
|
||||||
AnimationTree.Set("parameters/conditions/" + condition, value);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=35 format=3 uid="uid://dvqap2uhcah63"]
|
[gd_scene load_steps=36 format=3 uid="uid://dvqap2uhcah63"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://Items/Weapons/Sword.cs" id="1_mlo73"]
|
[ext_resource type="Script" path="res://Items/Weapons/Sword.cs" id="1_mlo73"]
|
||||||
[ext_resource type="Script" path="res://State/Weapon/WeaponStateMachine.cs" id="2_vwirq"]
|
[ext_resource type="Script" path="res://State/Weapon/WeaponStateMachine.cs" id="2_vwirq"]
|
||||||
|
@ -8,8 +8,11 @@
|
||||||
[ext_resource type="Script" path="res://State/Weapon/SwordAnticipateState.cs" id="4_j3cud"]
|
[ext_resource type="Script" path="res://State/Weapon/SwordAnticipateState.cs" id="4_j3cud"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cojxmcin13ihm" path="res://Utils/Trail.tscn" id="4_pt6lq"]
|
[ext_resource type="PackedScene" uid="uid://cojxmcin13ihm" path="res://Utils/Trail.tscn" id="4_pt6lq"]
|
||||||
[ext_resource type="Script" path="res://State/Weapon/SwordAttackState.cs" id="5_hmisb"]
|
[ext_resource type="Script" path="res://State/Weapon/SwordAttackState.cs" id="5_hmisb"]
|
||||||
[ext_resource type="Texture2D" uid="uid://do1bui3bblkk7" path="res://Assets/Sprites/sword-swing.png" id="5_pywek"]
|
|
||||||
[ext_resource type="AudioStream" uid="uid://c4n7ioxpukdwi" path="res://Assets/Sounds/parry.wav" id="6_8nxjm"]
|
[ext_resource type="AudioStream" uid="uid://c4n7ioxpukdwi" path="res://Assets/Sounds/parry.wav" id="6_8nxjm"]
|
||||||
|
[ext_resource type="Material" uid="uid://cbfaqolx1ydvv" path="res://Assets/Sprites/Particles/ParryParticles.tres" id="8_10gir"]
|
||||||
|
[ext_resource type="Shape2D" uid="uid://dw4e4r2yxwk1b" path="res://Items/Weapons/SwordCollisionShape.tres" id="9_wsprl"]
|
||||||
|
[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"]
|
[sub_resource type="Environment" id="Environment_72txp"]
|
||||||
background_mode = 3
|
background_mode = 3
|
||||||
|
@ -24,10 +27,6 @@ point_count = 3
|
||||||
offsets = PackedFloat32Array(0.835938, 0.992188)
|
offsets = PackedFloat32Array(0.835938, 0.992188)
|
||||||
colors = PackedColorArray(1, 1, 1, 0.498039, 1, 1, 1, 0)
|
colors = PackedColorArray(1, 1, 1, 0.498039, 1, 1, 1, 0)
|
||||||
|
|
||||||
[sub_resource type="Gradient" id="Gradient_jjxq2"]
|
|
||||||
offsets = PackedFloat32Array(0, 0.945312)
|
|
||||||
colors = PackedColorArray(1, 1, 1, 1, 0.687215, 0.687215, 0.687215, 0)
|
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_b7327"]
|
[sub_resource type="Animation" id="Animation_b7327"]
|
||||||
length = 0.001
|
length = 0.001
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
|
@ -92,6 +91,18 @@ tracks/4/keys = {
|
||||||
"method": &"SetAnimationCondition"
|
"method": &"SetAnimationCondition"
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
tracks/5/type = "value"
|
||||||
|
tracks/5/imported = false
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath("SwingSprite:modulate")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Color(2, 2, 2, 1)]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_ameas"]
|
[sub_resource type="Animation" id="Animation_ameas"]
|
||||||
resource_name = "anticipate"
|
resource_name = "anticipate"
|
||||||
|
@ -162,7 +173,7 @@ tracks/1/path = NodePath("SwingSprite:frame")
|
||||||
tracks/1/interp = 1
|
tracks/1/interp = 1
|
||||||
tracks/1/loop_wrap = true
|
tracks/1/loop_wrap = true
|
||||||
tracks/1/keys = {
|
tracks/1/keys = {
|
||||||
"times": PackedFloat32Array(0.1, 0.2, 0.4),
|
"times": PackedFloat32Array(0.1, 0.3, 0.35),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [1, 2, 0]
|
"values": [1, 2, 0]
|
||||||
|
@ -202,6 +213,20 @@ tracks/4/keys = {
|
||||||
"transitions": PackedFloat32Array(),
|
"transitions": PackedFloat32Array(),
|
||||||
"values": []
|
"values": []
|
||||||
}
|
}
|
||||||
|
tracks/5/type = "method"
|
||||||
|
tracks/5/imported = false
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath("SwingSound")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = {
|
||||||
|
"times": PackedFloat32Array(0.1),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"values": [{
|
||||||
|
"args": [0.0],
|
||||||
|
"method": &"play"
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_pclfs"]
|
[sub_resource type="Animation" id="Animation_pclfs"]
|
||||||
resource_name = "attack_alternate"
|
resource_name = "attack_alternate"
|
||||||
|
@ -225,10 +250,10 @@ tracks/1/path = NodePath("SwingSprite:frame")
|
||||||
tracks/1/interp = 1
|
tracks/1/interp = 1
|
||||||
tracks/1/loop_wrap = true
|
tracks/1/loop_wrap = true
|
||||||
tracks/1/keys = {
|
tracks/1/keys = {
|
||||||
"times": PackedFloat32Array(0.1, 0.2, 0.4),
|
"times": PackedFloat32Array(0.1, 0.3, 0.35),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [1, 3, 0]
|
"values": [3, 4, 0]
|
||||||
}
|
}
|
||||||
tracks/2/type = "value"
|
tracks/2/type = "value"
|
||||||
tracks/2/imported = false
|
tracks/2/imported = false
|
||||||
|
@ -328,11 +353,7 @@ graph_offset = Vector2(0, -104.073)
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeStateMachinePlayback" id="AnimationNodeStateMachinePlayback_o5g2u"]
|
[sub_resource type="AnimationNodeStateMachinePlayback" id="AnimationNodeStateMachinePlayback_o5g2u"]
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_ic623"]
|
[node name="Sword" type="Node2D" node_paths=PackedStringArray("Hitbox", "AnimationPlayer", "AnimationTree", "ParryParticles", "StateMachine", "Anchor", "HandAnchor")]
|
||||||
radius = 20.0
|
|
||||||
height = 48.0
|
|
||||||
|
|
||||||
[node name="Sword" type="Node2D" node_paths=PackedStringArray("Hitbox", "AnimationPlayer", "AnimationTree", "ParryParticles", "StateMachine", "Anchor")]
|
|
||||||
y_sort_enabled = true
|
y_sort_enabled = true
|
||||||
texture_filter = 3
|
texture_filter = 3
|
||||||
script = ExtResource("1_mlo73")
|
script = ExtResource("1_mlo73")
|
||||||
|
@ -349,6 +370,7 @@ Damage = 20.0
|
||||||
UseTime = 0.55
|
UseTime = 0.55
|
||||||
Knockback = 64.0
|
Knockback = 64.0
|
||||||
ShouldHideIdle = true
|
ShouldHideIdle = true
|
||||||
|
HandAnchor = NodePath("Anchor/Node2D/Sprite2D/Hand")
|
||||||
|
|
||||||
[node name="State" type="Node" parent="." node_paths=PackedStringArray("InitialState")]
|
[node name="State" type="Node" parent="." node_paths=PackedStringArray("InitialState")]
|
||||||
script = ExtResource("2_vwirq")
|
script = ExtResource("2_vwirq")
|
||||||
|
@ -392,23 +414,23 @@ y_sort_enabled = true
|
||||||
position = Vector2(0, -8)
|
position = Vector2(0, -8)
|
||||||
texture = ExtResource("3_r75ni")
|
texture = ExtResource("3_r75ni")
|
||||||
|
|
||||||
[node name="ParryParticles" type="CPUParticles2D" parent="Anchor/Node2D/Sprite2D"]
|
[node name="ParryParticles" type="GPUParticles2D" parent="Anchor/Node2D/Sprite2D"]
|
||||||
modulate = Color(1.2, 1.2, 1.2, 1)
|
modulate = Color(1.2, 1.2, 1.2, 1)
|
||||||
position = Vector2(-0.221825, -3.12132)
|
position = Vector2(-0.221825, -3.12132)
|
||||||
rotation = 0.785398
|
rotation = 0.785398
|
||||||
emitting = false
|
emitting = false
|
||||||
amount = 24
|
amount = 16
|
||||||
lifetime = 0.4
|
process_material = ExtResource("8_10gir")
|
||||||
|
lifetime = 2.0
|
||||||
one_shot = true
|
one_shot = true
|
||||||
explosiveness = 1.0
|
explosiveness = 1.0
|
||||||
emission_shape = 1
|
trail_enabled = true
|
||||||
emission_sphere_radius = 4.0
|
trail_lifetime = 0.1
|
||||||
direction = Vector2(0, -1)
|
trail_sections = 4
|
||||||
spread = 180.0
|
|
||||||
gravity = Vector2(0, 200)
|
[node name="Hand" type="Sprite2D" parent="Anchor/Node2D/Sprite2D"]
|
||||||
initial_velocity_min = 8.0
|
position = Vector2(-2.52724e-05, 7)
|
||||||
initial_velocity_max = 64.0
|
rotation = 1.5708
|
||||||
color_ramp = SubResource("Gradient_jjxq2")
|
|
||||||
|
|
||||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
libraries = {
|
libraries = {
|
||||||
|
@ -428,22 +450,21 @@ IsDisabled = true
|
||||||
[node name="CollisionShape2D" parent="Hitbox" index="0"]
|
[node name="CollisionShape2D" parent="Hitbox" index="0"]
|
||||||
position = Vector2(4, 0)
|
position = Vector2(4, 0)
|
||||||
rotation = 1.5708
|
rotation = 1.5708
|
||||||
shape = SubResource("CapsuleShape2D_ic623")
|
shape = ExtResource("9_wsprl")
|
||||||
disabled = true
|
disabled = true
|
||||||
|
|
||||||
[node name="SwingSprite" type="Sprite2D" parent="."]
|
[node name="SwingSprite" type="Sprite2D" parent="."]
|
||||||
modulate = Color(2, 2, 2, 1)
|
modulate = Color(2, 2, 2, 1)
|
||||||
texture = ExtResource("5_pywek")
|
texture = ExtResource("10_672jv")
|
||||||
offset = Vector2(8, 0)
|
offset = Vector2(8, 0)
|
||||||
hframes = 4
|
hframes = 5
|
||||||
|
|
||||||
[node name="SwingSound" type="AudioStreamPlayer2D" parent="."]
|
[node name="SwingSound" type="AudioStreamPlayer2D" parent="."]
|
||||||
|
stream = ExtResource("10_mfnl7")
|
||||||
max_distance = 256.0
|
max_distance = 256.0
|
||||||
|
|
||||||
[node name="ParrySound" type="AudioStreamPlayer2D" parent="."]
|
[node name="ParrySound" type="AudioStreamPlayer2D" parent="."]
|
||||||
stream = ExtResource("6_8nxjm")
|
stream = ExtResource("6_8nxjm")
|
||||||
max_distance = 256.0
|
max_distance = 256.0
|
||||||
|
|
||||||
[connection signal="Hit" from="Hitbox" to="." method="_on_hitbox_hit"]
|
|
||||||
|
|
||||||
[editable path="Hitbox"]
|
[editable path="Hitbox"]
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[gd_resource type="ConvexPolygonShape2D" format=3 uid="uid://dw4e4r2yxwk1b"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
points = PackedVector2Array(0, 0, -21.213, 21.213, -30, 0, -21.213, -21.213, 0, -30, 21.213, -21.213, 30, 0, 21.213, 21.213, 0, 0)
|
|
@ -2,8 +2,5 @@
|
||||||
|
|
||||||
Forsen-related game
|
Forsen-related game
|
||||||
|
|
||||||
Issue below fixed with [[https://github.com/godotengine/godot/pull/68866]]. Please update your version to ~4.0.beta6.mono~.
|
#+attr_html: :style margin-left: auto; margin-right: auto;
|
||||||
|
[[./Assets/Sprites/Characters/forsen2-portrait.png]]
|
||||||
+*NOTE:* although the latest version at the time of writing is ~4.0.beta5.mono~, this project only works under ~4.0.beta4.mono~. The latest beta does not include node exports, which was previously in Beta 4.+
|
|
||||||
|
|
||||||
+[[https://github.com/godotengine/godot/pull/67055]]+
|
|
||||||
|
|
|
@ -1,8 +1,56 @@
|
||||||
[gd_scene load_steps=3 format=3 uid="uid://1pb3mpmrl7lc"]
|
[gd_scene load_steps=6 format=3 uid="uid://1pb3mpmrl7lc"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://Utils/World.cs" id="1_1k6ew"]
|
[ext_resource type="Script" path="res://Utils/World.cs" id="1_1k6ew"]
|
||||||
[ext_resource type="PackedScene" uid="uid://b2x17su05ou5w" path="res://Scenes/Maps/Arena.tscn" id="2_avsrq"]
|
[ext_resource type="PackedScene" uid="uid://b2x17su05ou5w" path="res://Scenes/Maps/Arena.tscn" id="2_avsrq"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bxo553hblp6nf" path="res://UI/HealthBar.tscn" id="3_5rhge"]
|
||||||
|
[ext_resource type="Script" path="res://UI/UIController.cs" id="3_fe62s"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://01d24ij5av1y" path="res://UI/BossBar.tscn" id="5_8njq4"]
|
||||||
|
|
||||||
[node name="World" type="Node2D"]
|
[node name="World" type="Node2D"]
|
||||||
script = ExtResource("1_1k6ew")
|
script = ExtResource("1_1k6ew")
|
||||||
StartingArea = ExtResource("2_avsrq")
|
StartingArea = ExtResource("2_avsrq")
|
||||||
|
|
||||||
|
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||||
|
|
||||||
|
[node name="UI" type="Control" parent="CanvasLayer"]
|
||||||
|
z_index = 128
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
size_flags_vertical = 3
|
||||||
|
script = ExtResource("3_fe62s")
|
||||||
|
|
||||||
|
[node name="Top" type="HBoxContainer" parent="CanvasLayer/UI"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 10
|
||||||
|
anchor_right = 1.0
|
||||||
|
offset_bottom = 40.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
|
||||||
|
[node name="Margin" type="MarginContainer" parent="CanvasLayer/UI/Top"]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_constants/margin_left = 16
|
||||||
|
theme_override_constants/margin_top = 16
|
||||||
|
|
||||||
|
[node name="HealthBar" parent="CanvasLayer/UI/Top/Margin" instance=ExtResource("3_5rhge")]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
|
||||||
|
[node name="Bottom" type="HBoxContainer" parent="CanvasLayer/UI"]
|
||||||
|
visible = false
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 12
|
||||||
|
anchor_top = 1.0
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_top = -44.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 0
|
||||||
|
alignment = 1
|
||||||
|
|
||||||
|
[node name="BossBar" parent="CanvasLayer/UI/Bottom" instance=ExtResource("5_8njq4")]
|
||||||
|
layout_mode = 2
|
||||||
|
|
|
@ -1,23 +1,51 @@
|
||||||
[gd_scene load_steps=13 format=3 uid="uid://b2x17su05ou5w"]
|
[gd_scene load_steps=15 format=3 uid="uid://b2x17su05ou5w"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://clwv2owvk6abe" path="res://Scenes/BaseMap.tscn" id="1_ifiic"]
|
[ext_resource type="PackedScene" uid="uid://clwv2owvk6abe" path="res://Scenes/BaseMap.tscn" id="1_ifiic"]
|
||||||
[ext_resource type="Texture2D" uid="uid://b0yiy7w8nxmas" path="res://Assets/Sprites/arena-tileset.png" id="2_wnjm0"]
|
[ext_resource type="Texture2D" uid="uid://b0yiy7w8nxmas" path="res://Assets/Sprites/arena-tileset.png" id="2_wnjm0"]
|
||||||
[ext_resource type="PackedScene" uid="uid://d2skjvvx6fal0" path="res://Characters/Doc.tscn" id="4_c0csw"]
|
[ext_resource type="PackedScene" uid="uid://d2skjvvx6fal0" path="res://Characters/Doc.tscn" id="4_ej0f3"]
|
||||||
[ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="5_aevwf"]
|
[ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="5_h8k5p"]
|
||||||
[ext_resource type="PackedScene" uid="uid://c1w7t6irnohfx" path="res://Entities/Torch.tscn" id="6_1wwor"]
|
[ext_resource type="PackedScene" uid="uid://c1w7t6irnohfx" path="res://Entities/Torch.tscn" id="6_1wwor"]
|
||||||
[ext_resource type="PackedScene" uid="uid://ceadk7pam7vab" path="res://Entities/TorchLamp.tscn" id="6_jy3pc"]
|
[ext_resource type="PackedScene" uid="uid://ceadk7pam7vab" path="res://Entities/TorchLamp.tscn" id="6_jy3pc"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://d1ukste16yq6v" path="res://Assets/Sprites/Particles/player-light.png" id="7_y7j0e"]
|
||||||
|
|
||||||
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_8jil2"]
|
[sub_resource type="CanvasTexture" id="CanvasTexture_3n6aa"]
|
||||||
polygon = PackedVector2Array(-8, -4, -6, -5, -6, -18, 6, -18, 6, -5, 8, -4, 8, 4, 4, 8, -4, 8, -8, 3.5)
|
diffuse_texture = ExtResource("2_wnjm0")
|
||||||
|
|
||||||
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_fcd6d"]
|
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_fcd6d"]
|
||||||
texture = ExtResource("2_wnjm0")
|
texture = SubResource("CanvasTexture_3n6aa")
|
||||||
|
use_texture_padding = false
|
||||||
0:0/0 = 0
|
0:0/0 = 0
|
||||||
0:0/0/physics_layer_0/linear_velocity = Vector2(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/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
|
||||||
|
2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
2:2/0 = 0
|
||||||
|
2:2/0/physics_layer_0/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)
|
||||||
1:0/0 = 0
|
1:0/0 = 0
|
||||||
1:0/0/physics_layer_0/linear_velocity = Vector2(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/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
|
||||||
|
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
|
||||||
2:0/0 = 0
|
2:0/0 = 0
|
||||||
2:0/0/physics_layer_0/linear_velocity = Vector2(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/physics_layer_0/angular_velocity = 0.0
|
||||||
|
@ -35,94 +63,68 @@ texture = ExtResource("2_wnjm0")
|
||||||
6:0/0 = 0
|
6:0/0 = 0
|
||||||
6:0/0/physics_layer_0/linear_velocity = Vector2(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/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/occlusion_layer_0/polygon = SubResource("OccluderPolygon2D_8jil2")
|
|
||||||
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, -4, 8, -4, 8, 3.5, 4.5, 8, -4, 8, -8, 4)
|
|
||||||
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
|
|
||||||
2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
|
||||||
3:1/0 = 0
|
|
||||||
3:1/0/physics_layer_0/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)
|
|
||||||
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)
|
|
||||||
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)
|
|
||||||
6:1/0 = 0
|
6:1/0 = 0
|
||||||
6:1/0/physics_layer_0/linear_velocity = Vector2(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/angular_velocity = 0.0
|
||||||
6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
0:2/0 = 0
|
5:1/0 = 0
|
||||||
0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
0:2/0/physics_layer_0/angular_velocity = 0.0
|
5:1/0/physics_layer_0/angular_velocity = 0.0
|
||||||
0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
1:2/0 = 0
|
4:1/0 = 0
|
||||||
1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
1:2/0/physics_layer_0/angular_velocity = 0.0
|
4:1/0/physics_layer_0/angular_velocity = 0.0
|
||||||
1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
2:2/0 = 0
|
3:1/0 = 0
|
||||||
2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
2:2/0/physics_layer_0/angular_velocity = 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:2/0 = 0
|
3:2/0 = 0
|
||||||
3:2/0/physics_layer_0/linear_velocity = Vector2(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/physics_layer_0/angular_velocity = 0.0
|
||||||
3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0, -8, 0)
|
||||||
|
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/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, 8, -8, 8, 8, 0, 8)
|
||||||
|
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/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -8, 0, 8, -8, 8)
|
||||||
|
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/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, 8, 0, 0, 0, 0, -8)
|
||||||
4:2/0 = 0
|
4:2/0 = 0
|
||||||
4:2/0/physics_layer_0/linear_velocity = Vector2(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/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)
|
||||||
5:2/0 = 0
|
5:2/0 = 0
|
||||||
5:2/0/physics_layer_0/linear_velocity = Vector2(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/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: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/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -8, 0, 0, -8, 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 = 0
|
||||||
6:2/0/physics_layer_0/linear_velocity = Vector2(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/physics_layer_0/angular_velocity = 0.0
|
||||||
7:2/0 = 0
|
7:2/0 = 0
|
||||||
7:2/0/physics_layer_0/linear_velocity = Vector2(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/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
|
|
||||||
0:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
|
||||||
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/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
|
||||||
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/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
|
||||||
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/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/linear_velocity = Vector2(0, 0)
|
|
||||||
4:3/0/physics_layer_0/angular_velocity = 0.0
|
|
||||||
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
|
|
||||||
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
|
|
||||||
7:3/0 = 0
|
7:3/0 = 0
|
||||||
7:3/0/physics_layer_0/linear_velocity = Vector2(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/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)
|
||||||
|
|
||||||
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_kbvre"]
|
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_kbvre"]
|
||||||
polygon = PackedVector2Array(-4, 8, -8, 4, -8, -4, -6, -4, -6, -20, 6, -20, 6, -4, 8, -4, 8, 4, 4, 8)
|
polygon = PackedVector2Array(-4, 8, -8, 4, -8, -4, -6, -4, -6, -20, 6, -20, 6, -4, 8, -4, 8, 4, 4, 8)
|
||||||
|
@ -249,11 +251,15 @@ physics_layer_0/collision_layer = 1
|
||||||
sources/2 = SubResource("TileSetAtlasSource_5yxvt")
|
sources/2 = SubResource("TileSetAtlasSource_5yxvt")
|
||||||
sources/0 = SubResource("TileSetAtlasSource_fcd6d")
|
sources/0 = SubResource("TileSetAtlasSource_fcd6d")
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_im5g2"]
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_q3ile"]
|
||||||
resource_local_to_scene = true
|
resource_local_to_scene = true
|
||||||
shader = ExtResource("5_aevwf")
|
shader = ExtResource("5_h8k5p")
|
||||||
shader_parameter/color = Quaternion(1, 1, 1, 1)
|
shader_parameter/color = Quaternion(1, 1, 1, 1)
|
||||||
shader_parameter/intensity = 0.0
|
shader_parameter/intensity = 0.0
|
||||||
|
shader_parameter/alpha_modulate = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_gwpea"]
|
||||||
|
size = Vector2(256, 256)
|
||||||
|
|
||||||
[node name="TileMap" instance=ExtResource("1_ifiic")]
|
[node name="TileMap" instance=ExtResource("1_ifiic")]
|
||||||
tile_set = SubResource("TileSet_k1u48")
|
tile_set = SubResource("TileSet_k1u48")
|
||||||
|
@ -262,42 +268,99 @@ layer_3/tile_data = PackedInt32Array(-196612, 65536, 1, -131076, 65536, 1, -6554
|
||||||
layer_4/tile_data = PackedInt32Array(-524296, 327680, 0, -589818, 262144, 0, -589817, 262144, 1, -589819, 327680, 0, -589820, 196608, 1, -589821, 327680, 1, -589822, 131072, 1, -589823, 262144, 1, -589824, 327680, 0, -524289, 131072, 1, -524290, 327680, 0, -524291, 327680, 1, -524292, 327680, 1, -524293, 327680, 0, -524294, 131072, 1, -524295, 262144, 1, -589832, 131072, 2, -589831, 131072, 2, -589830, 131072, 2, -589829, 131072, 2, -589828, 131072, 2, -589827, 131072, 2, -589826, 131072, 2, -589825, 131072, 2, -655360, 131072, 2, -655359, 131072, 2, -655358, 131072, 2, -655357, 131072, 2, -655356, 131072, 2, -655355, 131072, 2, -655354, 131072, 2, -655353, 131072, 2, -655352, 327680, 2, -589833, 262144, 2, -524297, 196608, 3, -458761, 196608, 3, -393225, 196608, 3, -327689, 196608, 3, -262153, 196608, 3, -196617, 196608, 3, -131081, 196608, 3, -65545, 196608, 3, -9, 196608, 3, 65527, 196608, 3, 131063, 196608, 3, 196599, 196608, 3, 262135, 196608, 3, 327671, 196608, 3, 393207, 196608, 3, 458743, 196608, 3, 524279, 196608, 3, 262152, 131072, 3, 327688, 131072, 3, 393224, 131072, 3, 458760, 131072, 3, 196616, 131072, 3, 131080, 131072, 3, 65544, 131072, 3, 8, 131072, 3, -65528, 131072, 3, -131064, 131072, 3, -196600, 131072, 3, -262136, 131072, 3, -589816, 131072, 3, -524280, 131072, 3, -458744, 131072, 3, -393208, 131072, 3, -327672, 131072, 3, 589816, 196608, 2, 589817, 196608, 2, 589818, 196608, 2, 589819, 196608, 2, 589820, 196608, 2, 589821, 196608, 2, 589822, 196608, 2, 589823, 196608, 2, 524288, 196608, 2, 524289, 196608, 2, 524290, 196608, 2, 524291, 196608, 2, 524292, 196608, 2, 524293, 196608, 2, 524294, 196608, 2, 524295, 196608, 2, 524296, 327680, 3, 589815, 262144, 3)
|
layer_4/tile_data = PackedInt32Array(-524296, 327680, 0, -589818, 262144, 0, -589817, 262144, 1, -589819, 327680, 0, -589820, 196608, 1, -589821, 327680, 1, -589822, 131072, 1, -589823, 262144, 1, -589824, 327680, 0, -524289, 131072, 1, -524290, 327680, 0, -524291, 327680, 1, -524292, 327680, 1, -524293, 327680, 0, -524294, 131072, 1, -524295, 262144, 1, -589832, 131072, 2, -589831, 131072, 2, -589830, 131072, 2, -589829, 131072, 2, -589828, 131072, 2, -589827, 131072, 2, -589826, 131072, 2, -589825, 131072, 2, -655360, 131072, 2, -655359, 131072, 2, -655358, 131072, 2, -655357, 131072, 2, -655356, 131072, 2, -655355, 131072, 2, -655354, 131072, 2, -655353, 131072, 2, -655352, 327680, 2, -589833, 262144, 2, -524297, 196608, 3, -458761, 196608, 3, -393225, 196608, 3, -327689, 196608, 3, -262153, 196608, 3, -196617, 196608, 3, -131081, 196608, 3, -65545, 196608, 3, -9, 196608, 3, 65527, 196608, 3, 131063, 196608, 3, 196599, 196608, 3, 262135, 196608, 3, 327671, 196608, 3, 393207, 196608, 3, 458743, 196608, 3, 524279, 196608, 3, 262152, 131072, 3, 327688, 131072, 3, 393224, 131072, 3, 458760, 131072, 3, 196616, 131072, 3, 131080, 131072, 3, 65544, 131072, 3, 8, 131072, 3, -65528, 131072, 3, -131064, 131072, 3, -196600, 131072, 3, -262136, 131072, 3, -589816, 131072, 3, -524280, 131072, 3, -458744, 131072, 3, -393208, 131072, 3, -327672, 131072, 3, 589816, 196608, 2, 589817, 196608, 2, 589818, 196608, 2, 589819, 196608, 2, 589820, 196608, 2, 589821, 196608, 2, 589822, 196608, 2, 589823, 196608, 2, 524288, 196608, 2, 524289, 196608, 2, 524290, 196608, 2, 524291, 196608, 2, 524292, 196608, 2, 524293, 196608, 2, 524294, 196608, 2, 524295, 196608, 2, 524296, 327680, 3, 589815, 262144, 3)
|
||||||
|
|
||||||
[node name="CanvasModulate" parent="." index="0"]
|
[node name="CanvasModulate" parent="." index="0"]
|
||||||
color = Color(0.501961, 0.501961, 0.501961, 1)
|
color = Color(0.682353, 0.643137, 0.866667, 1)
|
||||||
|
|
||||||
[node name="Doc" parent="Entities" index="0" instance=ExtResource("4_c0csw")]
|
[node name="TorchLamp" parent="Entities" index="0" instance=ExtResource("6_jy3pc")]
|
||||||
material = SubResource("ShaderMaterial_im5g2")
|
y_sort_enabled = true
|
||||||
PreferredWeightDistance = 256.0
|
|
||||||
MaxWeightDistance = 32.0
|
|
||||||
|
|
||||||
[node name="Torch" parent="Entities" index="1" instance=ExtResource("6_1wwor")]
|
|
||||||
position = Vector2(-120, -112)
|
|
||||||
|
|
||||||
[node name="Torch2" parent="Entities" index="2" instance=ExtResource("6_1wwor")]
|
|
||||||
position = Vector2(-72, -112)
|
|
||||||
|
|
||||||
[node name="Torch3" parent="Entities" index="3" instance=ExtResource("6_1wwor")]
|
|
||||||
position = Vector2(-24, -113)
|
|
||||||
|
|
||||||
[node name="Torch4" parent="Entities" index="4" instance=ExtResource("6_1wwor")]
|
|
||||||
position = Vector2(24, -112)
|
|
||||||
|
|
||||||
[node name="Torch5" parent="Entities" index="5" instance=ExtResource("6_1wwor")]
|
|
||||||
position = Vector2(72, -112)
|
|
||||||
|
|
||||||
[node name="Torch6" parent="Entities" index="6" instance=ExtResource("6_1wwor")]
|
|
||||||
position = Vector2(120, -112)
|
|
||||||
|
|
||||||
[node name="TorchLamp" parent="." index="6" instance=ExtResource("6_jy3pc")]
|
|
||||||
position = Vector2(-96, -120)
|
position = Vector2(-96, -120)
|
||||||
|
|
||||||
[node name="TorchLamp2" parent="." index="7" instance=ExtResource("6_jy3pc")]
|
[node name="TorchLamp3" parent="Entities" index="1" instance=ExtResource("6_jy3pc")]
|
||||||
position = Vector2(-48, -120)
|
y_sort_enabled = true
|
||||||
|
|
||||||
[node name="TorchLamp3" parent="." index="8" instance=ExtResource("6_jy3pc")]
|
|
||||||
position = Vector2(0, -120)
|
position = Vector2(0, -120)
|
||||||
|
|
||||||
[node name="TorchLamp4" parent="." index="9" instance=ExtResource("6_jy3pc")]
|
[node name="TorchLamp5" parent="Entities" index="2" instance=ExtResource("6_jy3pc")]
|
||||||
position = Vector2(48, -120)
|
y_sort_enabled = true
|
||||||
|
|
||||||
[node name="TorchLamp5" parent="." index="10" instance=ExtResource("6_jy3pc")]
|
|
||||||
position = Vector2(96, -120)
|
position = Vector2(96, -120)
|
||||||
|
|
||||||
|
[node name="TorchLamp6" parent="Entities" index="3" instance=ExtResource("6_jy3pc")]
|
||||||
|
y_sort_enabled = true
|
||||||
|
position = Vector2(-120, -96)
|
||||||
|
|
||||||
|
[node name="TorchLamp7" parent="Entities" index="4" instance=ExtResource("6_jy3pc")]
|
||||||
|
y_sort_enabled = true
|
||||||
|
position = Vector2(120, -96)
|
||||||
|
|
||||||
|
[node name="TorchLamp9" parent="Entities" index="5" instance=ExtResource("6_jy3pc")]
|
||||||
|
y_sort_enabled = true
|
||||||
|
position = Vector2(120, -1)
|
||||||
|
|
||||||
|
[node name="TorchLamp11" parent="Entities" index="6" instance=ExtResource("6_jy3pc")]
|
||||||
|
y_sort_enabled = true
|
||||||
|
position = Vector2(120, 95)
|
||||||
|
|
||||||
|
[node name="TorchLamp12" parent="Entities" index="7" instance=ExtResource("6_jy3pc")]
|
||||||
|
y_sort_enabled = true
|
||||||
|
position = Vector2(97, 120)
|
||||||
|
|
||||||
|
[node name="TorchLamp14" parent="Entities" index="8" instance=ExtResource("6_jy3pc")]
|
||||||
|
y_sort_enabled = true
|
||||||
|
position = Vector2(0, 120)
|
||||||
|
|
||||||
|
[node name="TorchLamp16" parent="Entities" index="9" instance=ExtResource("6_jy3pc")]
|
||||||
|
y_sort_enabled = true
|
||||||
|
position = Vector2(-96, 120)
|
||||||
|
|
||||||
|
[node name="TorchLamp17" parent="Entities" index="10" instance=ExtResource("6_jy3pc")]
|
||||||
|
y_sort_enabled = true
|
||||||
|
position = Vector2(-120, 95)
|
||||||
|
|
||||||
|
[node name="TorchLamp19" parent="Entities" index="11" instance=ExtResource("6_jy3pc")]
|
||||||
|
y_sort_enabled = true
|
||||||
|
position = Vector2(-120, -1)
|
||||||
|
|
||||||
|
[node name="Torch" parent="Entities" index="12" instance=ExtResource("6_1wwor")]
|
||||||
|
visible = false
|
||||||
|
position = Vector2(-120, -112)
|
||||||
|
|
||||||
|
[node name="Torch2" parent="Entities" index="13" instance=ExtResource("6_1wwor")]
|
||||||
|
visible = false
|
||||||
|
position = Vector2(-72, -112)
|
||||||
|
|
||||||
|
[node name="Torch3" parent="Entities" index="14" instance=ExtResource("6_1wwor")]
|
||||||
|
visible = false
|
||||||
|
position = Vector2(-24, -113)
|
||||||
|
|
||||||
|
[node name="Torch4" parent="Entities" index="15" instance=ExtResource("6_1wwor")]
|
||||||
|
visible = false
|
||||||
|
position = Vector2(24, -112)
|
||||||
|
|
||||||
|
[node name="Torch5" parent="Entities" index="16" instance=ExtResource("6_1wwor")]
|
||||||
|
visible = false
|
||||||
|
position = Vector2(72, -112)
|
||||||
|
|
||||||
|
[node name="Torch6" parent="Entities" index="17" instance=ExtResource("6_1wwor")]
|
||||||
|
visible = false
|
||||||
|
position = Vector2(120, -112)
|
||||||
|
|
||||||
|
[node name="Doc" parent="Entities" index="18" instance=ExtResource("4_ej0f3")]
|
||||||
|
material = SubResource("ShaderMaterial_q3ile")
|
||||||
|
|
||||||
|
[node name="PointLight2D" type="PointLight2D" parent="Entities" index="19"]
|
||||||
|
position = Vector2(168, -42)
|
||||||
|
energy = 1.5
|
||||||
|
blend_mode = 2
|
||||||
|
range_item_cull_mask = 0
|
||||||
|
shadow_enabled = true
|
||||||
|
shadow_color = Color(0.572549, 0.572549, 0.572549, 0)
|
||||||
|
texture = ExtResource("7_y7j0e")
|
||||||
|
height = 16.0
|
||||||
|
|
||||||
|
[node name="CanvasGroup" type="CanvasGroup" parent="Entities" index="20"]
|
||||||
|
|
||||||
|
[node name="Areas" parent="." index="2"]
|
||||||
|
visible = false
|
||||||
|
|
||||||
|
[node name="Area2D" type="Area2D" parent="Areas" index="0"]
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="Areas/Area2D" index="0"]
|
||||||
|
shape = SubResource("RectangleShape2D_gwpea")
|
||||||
|
|
|
@ -2,9 +2,11 @@ shader_type canvas_item;
|
||||||
|
|
||||||
uniform vec4 color = vec4(1.0);
|
uniform vec4 color = vec4(1.0);
|
||||||
uniform float intensity : hint_range(0.0, 1.0) = 0.0;
|
uniform float intensity : hint_range(0.0, 1.0) = 0.0;
|
||||||
|
uniform float alpha_modulate : hint_range(0.0, 1.0) = 1.0;
|
||||||
|
|
||||||
void fragment() {
|
void fragment() {
|
||||||
vec4 tex = texture(TEXTURE, UV);
|
vec4 tex = texture(TEXTURE, UV);
|
||||||
tex.rgb = mix(tex.rgb, color.rgb, intensity);
|
tex.rgb = mix(tex.rgb, color.rgb, intensity);
|
||||||
COLOR = tex;
|
COLOR = tex;
|
||||||
|
COLOR.a *= alpha_modulate;
|
||||||
}
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
using Godot;
|
||||||
|
using SupaLidlGame.Extensions;
|
||||||
|
|
||||||
|
namespace SupaLidlGame.State.Character;
|
||||||
|
|
||||||
|
public partial class CharacterDashState : CharacterState
|
||||||
|
{
|
||||||
|
[Export]
|
||||||
|
public CharacterState IdleState { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public double TimeToDash { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public float VelocityModifier { get; set; }
|
||||||
|
|
||||||
|
private double _timeLeftToDash = 0;
|
||||||
|
|
||||||
|
public Vector2 DashDirection = Vector2.Zero;
|
||||||
|
|
||||||
|
public override IState<CharacterState> Enter(IState<CharacterState> previousState)
|
||||||
|
{
|
||||||
|
_timeLeftToDash = TimeToDash;
|
||||||
|
// dash the direction we were previously moving in
|
||||||
|
DashDirection = Character.Direction;
|
||||||
|
Character.MovementAnimation.Play("dash");
|
||||||
|
Character.MovementAnimation.Queue("idle");
|
||||||
|
|
||||||
|
// create ghost effect
|
||||||
|
var ghost = Character.Sprite.CloneOnWorld<Sprite2D>();
|
||||||
|
ghost.GlobalPosition = Character.Sprite.GlobalPosition;
|
||||||
|
var tween = ghost.GetTree().CreateTween();
|
||||||
|
tween.TweenProperty(ghost, "self_modulate", Colors.Transparent, 0.5);
|
||||||
|
tween.TweenCallback(new Callable(ghost, "queue_free"));
|
||||||
|
tween.Play();
|
||||||
|
|
||||||
|
return base.Enter(previousState);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Exit(IState<CharacterState> nextState)
|
||||||
|
{
|
||||||
|
_timeLeftToDash = 0;
|
||||||
|
DashDirection = Character.Direction;
|
||||||
|
base.Exit(nextState);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override CharacterState Process(double delta)
|
||||||
|
{
|
||||||
|
Character.Direction = DashDirection;
|
||||||
|
if ((_timeLeftToDash -= delta) <= 0 || Character.Health <= 0)
|
||||||
|
{
|
||||||
|
return IdleState;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,7 +10,7 @@ public partial class NPCIdleState : NPCState
|
||||||
public override CharacterState Process(double delta)
|
public override CharacterState Process(double delta)
|
||||||
{
|
{
|
||||||
base.Process(delta);
|
base.Process(delta);
|
||||||
if (Character.Direction.LengthSquared() > 0)
|
if (Character.Direction.LengthSquared() > 0.01f)
|
||||||
{
|
{
|
||||||
return MoveState;
|
return MoveState;
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ public partial class NPCIdleState : NPCState
|
||||||
|
|
||||||
public override IState<CharacterState> Enter(IState<CharacterState> previousState)
|
public override IState<CharacterState> Enter(IState<CharacterState> previousState)
|
||||||
{
|
{
|
||||||
Character.Sprite.Play("idle");
|
Character.MovementAnimation.Play("idle");
|
||||||
return base.Enter(previousState);
|
return base.Enter(previousState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ public partial class NPCMoveState : NPCState
|
||||||
|
|
||||||
public override IState<CharacterState> Enter(IState<CharacterState> prev)
|
public override IState<CharacterState> Enter(IState<CharacterState> prev)
|
||||||
{
|
{
|
||||||
Character.Sprite.Play("move");
|
Character.MovementAnimation.Play("move");
|
||||||
return base.Enter(prev);
|
return base.Enter(prev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,6 @@ public partial class PlayerIdleState : PlayerState
|
||||||
|
|
||||||
public override IState<CharacterState> Enter(IState<CharacterState> previousState)
|
public override IState<CharacterState> Enter(IState<CharacterState> previousState)
|
||||||
{
|
{
|
||||||
GD.Print("Entered idle state");
|
|
||||||
if (previousState is not PlayerMoveState)
|
if (previousState is not PlayerMoveState)
|
||||||
{
|
{
|
||||||
if (Character.Direction.LengthSquared() > 0.01f)
|
if (Character.Direction.LengthSquared() > 0.01f)
|
||||||
|
@ -21,7 +20,26 @@ public partial class PlayerIdleState : PlayerState
|
||||||
return MoveState;
|
return MoveState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_player.Animation = "idle";
|
|
||||||
|
// must be moving at least 4 u/s for more than 0.5 seconds
|
||||||
|
bool shouldPlayStopAnim = false;
|
||||||
|
|
||||||
|
if (previousState is PlayerMoveState move)
|
||||||
|
{
|
||||||
|
shouldPlayStopAnim = move.MoveDuration > 0.5;
|
||||||
|
// NOTE: more conditions may be added soon
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shouldPlayStopAnim)
|
||||||
|
{
|
||||||
|
_player.MovementAnimation.Play("stop");
|
||||||
|
_player.MovementAnimation.Queue("idle");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_player.MovementAnimation.Play("idle");
|
||||||
|
}
|
||||||
|
|
||||||
return base.Enter(previousState);
|
return base.Enter(previousState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,16 +7,19 @@ public partial class PlayerMoveState : PlayerState
|
||||||
[Export]
|
[Export]
|
||||||
public PlayerRollState RollState { get; set; }
|
public PlayerRollState RollState { get; set; }
|
||||||
|
|
||||||
|
public double MoveDuration { get; private set; }
|
||||||
|
|
||||||
public override IState<CharacterState> Enter(IState<CharacterState> previousState)
|
public override IState<CharacterState> Enter(IState<CharacterState> previousState)
|
||||||
{
|
{
|
||||||
Godot.GD.Print("Started moving");
|
_player.MovementAnimation.Play("move");
|
||||||
_player.Animation = "move";
|
MoveDuration = 0;
|
||||||
return base.Enter(previousState);
|
return base.Enter(previousState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override CharacterState Process(double delta)
|
public override CharacterState Process(double delta)
|
||||||
{
|
{
|
||||||
base.Process(delta);
|
base.Process(delta);
|
||||||
|
MoveDuration += delta;
|
||||||
if (Character.Direction.LengthSquared() == 0)
|
if (Character.Direction.LengthSquared() == 0)
|
||||||
{
|
{
|
||||||
return IdleState;
|
return IdleState;
|
||||||
|
|
|
@ -8,12 +8,12 @@ public partial class PlayerRollState : PlayerState
|
||||||
|
|
||||||
private Vector2 _rollDirection = Vector2.Zero;
|
private Vector2 _rollDirection = Vector2.Zero;
|
||||||
|
|
||||||
private AnimationPlayer _rollAnimation;
|
private GpuParticles2D _particles;
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
_rollAnimation = _player.GetNode<AnimationPlayer>("RollAnimation");
|
|
||||||
base._Ready();
|
base._Ready();
|
||||||
|
_particles = _player.GetNode<GpuParticles2D>("Effects/RollParticles");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IState<CharacterState> Enter(IState<CharacterState> previousState)
|
public override IState<CharacterState> Enter(IState<CharacterState> previousState)
|
||||||
|
@ -24,12 +24,14 @@ public partial class PlayerRollState : PlayerState
|
||||||
Character.Target = Character.Direction;
|
Character.Target = Character.Direction;
|
||||||
if (Character.Direction.X >= 0)
|
if (Character.Direction.X >= 0)
|
||||||
{
|
{
|
||||||
_rollAnimation.Play("roll");
|
_player.MovementAnimation.Play("roll");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_rollAnimation.PlayBackwards("roll");
|
_player.MovementAnimation.PlayBackwards("roll");
|
||||||
}
|
}
|
||||||
|
_player.MovementAnimation.Queue("idle");
|
||||||
|
_particles.Emitting = true;
|
||||||
return base.Enter(previousState);
|
return base.Enter(previousState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +41,7 @@ public partial class PlayerRollState : PlayerState
|
||||||
// this state (e.g. from death)
|
// this state (e.g. from death)
|
||||||
_timeLeftToRoll = 0;
|
_timeLeftToRoll = 0;
|
||||||
_rollDirection = Character.Direction;
|
_rollDirection = Character.Direction;
|
||||||
_rollAnimation.Stop();
|
_particles.Emitting = false;
|
||||||
base.Exit(nextState);
|
base.Exit(nextState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,9 +51,9 @@ public abstract partial class PlayerState : CharacterState
|
||||||
{
|
{
|
||||||
if (Character.Inventory.SelectedItem is Items.Weapon weapon)
|
if (Character.Inventory.SelectedItem is Items.Weapon weapon)
|
||||||
{
|
{
|
||||||
|
var isPressed = Godot.Input.IsActionPressed("attack1");
|
||||||
if (!weapon.IsUsing)
|
if (!weapon.IsUsing)
|
||||||
{
|
{
|
||||||
var isPressed = Godot.Input.IsActionPressed("attack1");
|
|
||||||
var ret = false;
|
var ret = false;
|
||||||
|
|
||||||
if (!weapon.ShouldHideIdle || isPressed)
|
if (!weapon.ShouldHideIdle || isPressed)
|
||||||
|
@ -69,6 +69,13 @@ public abstract partial class PlayerState : CharacterState
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!isPressed)
|
||||||
|
{
|
||||||
|
Character.DeuseCurrentItem();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using GodotUtilities;
|
||||||
|
|
||||||
namespace SupaLidlGame.State.NPC.Doc;
|
namespace SupaLidlGame.State.NPC.Doc;
|
||||||
|
|
||||||
|
@ -12,5 +13,25 @@ public abstract partial class DocAttackState : NPCState
|
||||||
|
|
||||||
public abstract DocChooseAttackState ChooseAttackState { get; set; }
|
public abstract DocChooseAttackState ChooseAttackState { get; set; }
|
||||||
|
|
||||||
|
protected Scenes.Map _map;
|
||||||
|
protected Utils.World _world;
|
||||||
|
protected Characters.Doc _doc;
|
||||||
|
protected double _currentDuration = 0;
|
||||||
|
protected double _currentAttackDuration = 0;
|
||||||
|
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
_doc = NPC as Characters.Doc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override NPCState Enter(IState<NPCState> previousState)
|
||||||
|
{
|
||||||
|
_map = this.GetAncestor<Scenes.Map>();
|
||||||
|
_world = this.GetAncestor<Utils.World>();
|
||||||
|
_currentDuration = Duration;
|
||||||
|
_currentAttackDuration = AttackDuration;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
protected abstract void Attack();
|
protected abstract void Attack();
|
||||||
}
|
}
|
||||||
|
|