famira can die
This commit is contained in:
parent
5b520f0a46
commit
1274e989b4
3 changed files with 200 additions and 9 deletions
|
@ -8,6 +8,8 @@ export var breath_knockback: float = 16.0
|
||||||
export var punch_damage: float = 10.0
|
export var punch_damage: float = 10.0
|
||||||
export var punch_knockback: float = 8.0
|
export var punch_knockback: float = 8.0
|
||||||
export var hurting: bool = false
|
export var hurting: bool = false
|
||||||
|
export var hp: float = 100.0
|
||||||
|
export var sg2083_beam_dps: float = 10.0
|
||||||
export var sg2083_path: NodePath
|
export var sg2083_path: NodePath
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,6 +41,12 @@ func stop_push() -> void:
|
||||||
state_chart.send_event("stop_push")
|
state_chart.send_event("stop_push")
|
||||||
|
|
||||||
|
|
||||||
|
func hurt(amount: float) -> void:
|
||||||
|
hp -= amount
|
||||||
|
if hp <= 0.0:
|
||||||
|
state_chart.send_event("die")
|
||||||
|
|
||||||
|
|
||||||
func _attack() -> void:
|
func _attack() -> void:
|
||||||
var sg2083 := get_node(sg2083_path)
|
var sg2083 := get_node(sg2083_path)
|
||||||
if sg2083.has_method("hurt"):
|
if sg2083.has_method("hurt"):
|
||||||
|
@ -48,6 +56,9 @@ func _attack() -> void:
|
||||||
|
|
||||||
func _on_Roar_state_entered() -> void:
|
func _on_Roar_state_entered() -> void:
|
||||||
animation_player.play("roar", 0.25)
|
animation_player.play("roar", 0.25)
|
||||||
|
|
||||||
|
|
||||||
|
func _roar() -> void:
|
||||||
Audio.play_sound(Audio.a_famira, Audio.ac_boss)
|
Audio.play_sound(Audio.a_famira, Audio.ac_boss)
|
||||||
|
|
||||||
|
|
||||||
|
@ -72,11 +83,8 @@ func _on_PushedBack_state_entered() -> void:
|
||||||
|
|
||||||
|
|
||||||
func _on_Dying_state_entered() -> void:
|
func _on_Dying_state_entered() -> void:
|
||||||
queue_free()
|
animation_player.play("die", 0.25)
|
||||||
|
_roar()
|
||||||
|
|
||||||
func _on_PushedBack_event_received(event) -> void:
|
|
||||||
print(event)
|
|
||||||
|
|
||||||
|
|
||||||
func _on_Chasing_state_physics_processing(delta) -> void:
|
func _on_Chasing_state_physics_processing(delta) -> void:
|
||||||
|
@ -84,6 +92,7 @@ func _on_Chasing_state_physics_processing(delta) -> void:
|
||||||
|
|
||||||
|
|
||||||
func _on_PushedBack_state_physics_processing(delta) -> void:
|
func _on_PushedBack_state_physics_processing(delta) -> void:
|
||||||
|
hurt(sg2083_beam_dps * delta)
|
||||||
position.x += push_speed * delta
|
position.x += push_speed * delta
|
||||||
|
|
||||||
|
|
||||||
|
@ -94,4 +103,4 @@ func _on_Shooting_state_physics_processing(delta) -> void:
|
||||||
var distance := shoot_range_cast.to_local(shoot_range_cast.get_collision_point()).x
|
var distance := shoot_range_cast.to_local(shoot_range_cast.get_collision_point()).x
|
||||||
var weight := inverse_lerp(shoot_range_cast.cast_to.x, 0.0, distance)
|
var weight := inverse_lerp(shoot_range_cast.cast_to.x, 0.0, distance)
|
||||||
sg2083.hurt(breath_dps * weight * delta, true)
|
sg2083.hurt(breath_dps * weight * delta, true)
|
||||||
sg2083.knock_back(breath_knockback * weight * delta)
|
sg2083.knock_back(breath_knockback * weight * delta, true)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=28 format=2]
|
[gd_scene load_steps=29 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://objects/enemy/boss/famira.gd" type="Script" id=1]
|
[ext_resource path="res://objects/enemy/boss/famira.gd" type="Script" id=1]
|
||||||
[ext_resource path="res://shaders/scale3x.gdshader" type="Shader" id=2]
|
[ext_resource path="res://shaders/scale3x.gdshader" type="Shader" id=2]
|
||||||
|
@ -380,6 +380,167 @@ tracks/12/keys = {
|
||||||
"values": [ false ]
|
"values": [ false ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id=12]
|
||||||
|
resource_name = "die"
|
||||||
|
length = 0.2
|
||||||
|
loop = true
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/path = NodePath("Hip/Body:rotation_degrees")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PoolRealArray( 0 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"update": 0,
|
||||||
|
"values": [ 89.3425 ]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/path = NodePath("Hip/Body/BackArm/HandBack:position")
|
||||||
|
tracks/1/interp = 2
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PoolRealArray( 0 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"update": 0,
|
||||||
|
"values": [ Vector2( -41.0008, -18.9997 ) ]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/path = NodePath("Hip/Body/FrontArm/HandFront:position")
|
||||||
|
tracks/2/interp = 2
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PoolRealArray( 0 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"update": 0,
|
||||||
|
"values": [ Vector2( 37.9987, -18.9981 ) ]
|
||||||
|
}
|
||||||
|
tracks/3/type = "value"
|
||||||
|
tracks/3/path = NodePath("Hip/Body/Neck:rotation_degrees")
|
||||||
|
tracks/3/interp = 2
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"times": PoolRealArray( 0 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"update": 0,
|
||||||
|
"values": [ -109.576 ]
|
||||||
|
}
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/path = NodePath("Hip/Body/Neck/Headlower:rotation_degrees")
|
||||||
|
tracks/4/interp = 2
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PoolRealArray( 0 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"update": 0,
|
||||||
|
"values": [ 28.215 ]
|
||||||
|
}
|
||||||
|
tracks/5/type = "value"
|
||||||
|
tracks/5/path = NodePath("Hip/Body/Neck/Headupper:rotation_degrees")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/imported = false
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/keys = {
|
||||||
|
"times": PoolRealArray( 0 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"update": 0,
|
||||||
|
"values": [ 45.9167 ]
|
||||||
|
}
|
||||||
|
tracks/6/type = "value"
|
||||||
|
tracks/6/path = NodePath("Hip/LegFront:rotation_degrees")
|
||||||
|
tracks/6/interp = 1
|
||||||
|
tracks/6/loop_wrap = true
|
||||||
|
tracks/6/imported = false
|
||||||
|
tracks/6/enabled = true
|
||||||
|
tracks/6/keys = {
|
||||||
|
"times": PoolRealArray( 0 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"update": 0,
|
||||||
|
"values": [ -0.657538 ]
|
||||||
|
}
|
||||||
|
tracks/7/type = "value"
|
||||||
|
tracks/7/path = NodePath("Hip/LegBack:rotation_degrees")
|
||||||
|
tracks/7/interp = 1
|
||||||
|
tracks/7/loop_wrap = true
|
||||||
|
tracks/7/imported = false
|
||||||
|
tracks/7/enabled = true
|
||||||
|
tracks/7/keys = {
|
||||||
|
"times": PoolRealArray( 0 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"update": 0,
|
||||||
|
"values": [ -0.657538 ]
|
||||||
|
}
|
||||||
|
tracks/8/type = "value"
|
||||||
|
tracks/8/path = NodePath("Hip/Body/Neck:position")
|
||||||
|
tracks/8/interp = 1
|
||||||
|
tracks/8/loop_wrap = true
|
||||||
|
tracks/8/imported = false
|
||||||
|
tracks/8/enabled = true
|
||||||
|
tracks/8/keys = {
|
||||||
|
"times": PoolRealArray( 0 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"update": 0,
|
||||||
|
"values": [ Vector2( -25.5991, -9.59989 ) ]
|
||||||
|
}
|
||||||
|
tracks/9/type = "value"
|
||||||
|
tracks/9/path = NodePath("Hip/Body/BackArm/HandBack:rotation_degrees")
|
||||||
|
tracks/9/interp = 2
|
||||||
|
tracks/9/loop_wrap = true
|
||||||
|
tracks/9/imported = false
|
||||||
|
tracks/9/enabled = true
|
||||||
|
tracks/9/keys = {
|
||||||
|
"times": PoolRealArray( 0 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"update": 0,
|
||||||
|
"values": [ -23.1788 ]
|
||||||
|
}
|
||||||
|
tracks/10/type = "value"
|
||||||
|
tracks/10/path = NodePath("Hip/Body/FrontArm/HandFront:rotation_degrees")
|
||||||
|
tracks/10/interp = 2
|
||||||
|
tracks/10/loop_wrap = true
|
||||||
|
tracks/10/imported = false
|
||||||
|
tracks/10/enabled = true
|
||||||
|
tracks/10/keys = {
|
||||||
|
"times": PoolRealArray( 0 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"update": 0,
|
||||||
|
"values": [ 38.5195 ]
|
||||||
|
}
|
||||||
|
tracks/11/type = "value"
|
||||||
|
tracks/11/path = NodePath("Hip:position")
|
||||||
|
tracks/11/interp = 2
|
||||||
|
tracks/11/loop_wrap = true
|
||||||
|
tracks/11/imported = false
|
||||||
|
tracks/11/enabled = true
|
||||||
|
tracks/11/keys = {
|
||||||
|
"times": PoolRealArray( 0, 0.1 ),
|
||||||
|
"transitions": PoolRealArray( 1, 1 ),
|
||||||
|
"update": 0,
|
||||||
|
"values": [ Vector2( 4, -57 ), Vector2( 12, -57 ) ]
|
||||||
|
}
|
||||||
|
tracks/12/type = "value"
|
||||||
|
tracks/12/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
|
||||||
|
tracks/12/interp = 1
|
||||||
|
tracks/12/loop_wrap = true
|
||||||
|
tracks/12/imported = false
|
||||||
|
tracks/12/enabled = true
|
||||||
|
tracks/12/keys = {
|
||||||
|
"times": PoolRealArray( 0 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"update": 1,
|
||||||
|
"values": [ false ]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id=5]
|
[sub_resource type="Animation" id=5]
|
||||||
resource_name = "punching"
|
resource_name = "punching"
|
||||||
loop = true
|
loop = true
|
||||||
|
@ -904,6 +1065,20 @@ tracks/13/keys = {
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [ false ]
|
"values": [ false ]
|
||||||
}
|
}
|
||||||
|
tracks/14/type = "method"
|
||||||
|
tracks/14/path = NodePath("..")
|
||||||
|
tracks/14/interp = 1
|
||||||
|
tracks/14/loop_wrap = true
|
||||||
|
tracks/14/imported = false
|
||||||
|
tracks/14/enabled = true
|
||||||
|
tracks/14/keys = {
|
||||||
|
"times": PoolRealArray( 0.5 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"values": [ {
|
||||||
|
"args": [ ],
|
||||||
|
"method": "_roar"
|
||||||
|
} ]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id=7]
|
[sub_resource type="Animation" id=7]
|
||||||
resource_name = "shooting"
|
resource_name = "shooting"
|
||||||
|
@ -1124,6 +1299,7 @@ material = SubResource( 1 )
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
anims/RESET = SubResource( 2 )
|
anims/RESET = SubResource( 2 )
|
||||||
anims/chasing = SubResource( 4 )
|
anims/chasing = SubResource( 4 )
|
||||||
|
anims/die = SubResource( 12 )
|
||||||
anims/punching = SubResource( 5 )
|
anims/punching = SubResource( 5 )
|
||||||
anims/pushed = SubResource( 6 )
|
anims/pushed = SubResource( 6 )
|
||||||
anims/roar = SubResource( 3 )
|
anims/roar = SubResource( 3 )
|
||||||
|
@ -1295,6 +1471,11 @@ script = ExtResource( 6 )
|
||||||
to = NodePath("../Roar")
|
to = NodePath("../Roar")
|
||||||
event = "player_dead"
|
event = "player_dead"
|
||||||
|
|
||||||
|
[node name="On Die" type="Node" parent="StateChart/Root"]
|
||||||
|
script = ExtResource( 6 )
|
||||||
|
to = NodePath("../Dying")
|
||||||
|
event = "die"
|
||||||
|
|
||||||
[node name="Roar" type="Node" parent="StateChart/Root"]
|
[node name="Roar" type="Node" parent="StateChart/Root"]
|
||||||
script = ExtResource( 5 )
|
script = ExtResource( 5 )
|
||||||
|
|
||||||
|
@ -1383,7 +1564,6 @@ collide_with_bodies = false
|
||||||
[connection signal="state_entered" from="StateChart/Root/PunchCooldown" to="." method="_on_PunchCooldown_state_entered"]
|
[connection signal="state_entered" from="StateChart/Root/PunchCooldown" to="." method="_on_PunchCooldown_state_entered"]
|
||||||
[connection signal="state_entered" from="StateChart/Root/Shooting" to="." method="_on_Shooting_state_entered"]
|
[connection signal="state_entered" from="StateChart/Root/Shooting" to="." method="_on_Shooting_state_entered"]
|
||||||
[connection signal="state_physics_processing" from="StateChart/Root/Shooting" to="." method="_on_Shooting_state_physics_processing"]
|
[connection signal="state_physics_processing" from="StateChart/Root/Shooting" to="." method="_on_Shooting_state_physics_processing"]
|
||||||
[connection signal="event_received" from="StateChart/Root/PushedBack" to="." method="_on_PushedBack_event_received"]
|
|
||||||
[connection signal="state_entered" from="StateChart/Root/PushedBack" to="." method="_on_PushedBack_state_entered"]
|
[connection signal="state_entered" from="StateChart/Root/PushedBack" to="." method="_on_PushedBack_state_entered"]
|
||||||
[connection signal="state_physics_processing" from="StateChart/Root/PushedBack" to="." method="_on_PushedBack_state_physics_processing"]
|
[connection signal="state_physics_processing" from="StateChart/Root/PushedBack" to="." method="_on_PushedBack_state_physics_processing"]
|
||||||
[connection signal="state_entered" from="StateChart/Root/Dying" to="." method="_on_Dying_state_entered"]
|
[connection signal="state_entered" from="StateChart/Root/Dying" to="." method="_on_Dying_state_entered"]
|
||||||
|
|
|
@ -83,7 +83,9 @@ func hurt(amount: float, can_duck: bool = false) -> void:
|
||||||
anims.play("die")
|
anims.play("die")
|
||||||
|
|
||||||
|
|
||||||
func knock_back(amount: float) -> void:
|
func knock_back(amount: float, can_duck: bool = false) -> void:
|
||||||
|
if can_duck and state == State.DUCK:
|
||||||
|
return
|
||||||
knockback += amount
|
knockback += amount
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue