forked from team-sg/hero-mark-2
more work on final boss
This commit is contained in:
parent
3e3b327f5e
commit
0bae67fd3b
7 changed files with 196 additions and 24 deletions
|
@ -2,6 +2,8 @@ extends Node2D
|
||||||
|
|
||||||
signal cutscene_finished
|
signal cutscene_finished
|
||||||
|
|
||||||
|
const DeathParticles = preload("res://objects/enemy/death_particles.tscn")
|
||||||
|
|
||||||
export var cutscene_skip: float = 92.0
|
export var cutscene_skip: float = 92.0
|
||||||
|
|
||||||
onready var animation_player: AnimationPlayer = $AnimationPlayer
|
onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||||
|
@ -26,6 +28,13 @@ func skip_cutscene() -> void:
|
||||||
animation_player.seek(cutscene_skip)
|
animation_player.seek(cutscene_skip)
|
||||||
Fade.fade_in(Options.transition_speed_secs)
|
Fade.fade_in(Options.transition_speed_secs)
|
||||||
|
|
||||||
|
func kill_cop() -> void:
|
||||||
|
var splatter := DeathParticles.instance()
|
||||||
|
splatter.global_position = $Cop.global_position
|
||||||
|
splatter.emitting = true
|
||||||
|
add_child(splatter)
|
||||||
|
$Cop.queue_free()
|
||||||
|
|
||||||
func _notification(what: int) -> void:
|
func _notification(what: int) -> void:
|
||||||
match what:
|
match what:
|
||||||
NOTIFICATION_WM_FOCUS_OUT:
|
NOTIFICATION_WM_FOCUS_OUT:
|
||||||
|
|
|
@ -25,13 +25,27 @@ func _on_Famira_health_changed(amount) -> void:
|
||||||
func _on_cutscene_finished() -> void:
|
func _on_cutscene_finished() -> void:
|
||||||
$GUI.visible = true
|
$GUI.visible = true
|
||||||
sg2083.visible = true
|
sg2083.visible = true
|
||||||
sg2083.state = sg2083.State.STAND
|
|
||||||
famira.visible = true
|
famira.visible = true
|
||||||
famira.animation_player.play("grow")
|
famira.animation_player.play("grow")
|
||||||
|
$AnimationPlayer.play("drop-stg")
|
||||||
yield(get_tree().create_timer(0.5), "timeout")
|
yield(get_tree().create_timer(0.5), "timeout")
|
||||||
$FamiCutscene/FamiHuman.visible = false
|
$FamiCutscene/FamiHuman.visible = false
|
||||||
|
|
||||||
|
|
||||||
|
func fade() -> void:
|
||||||
|
Fade.fade_out(0.4)
|
||||||
|
yield(Fade, "fade_finished")
|
||||||
|
Fade.fade_in(0.4)
|
||||||
|
yield(Fade, "fade_finished")
|
||||||
|
sg2083.anims.play("UnDuck")
|
||||||
|
sg2083.state = sg2083.State.STAND
|
||||||
|
famira.state_chart.send_event("transformed")
|
||||||
|
|
||||||
|
|
||||||
|
func start_fight() -> void:
|
||||||
|
famira.animation_player.state_chart.send_event("transformed")
|
||||||
|
|
||||||
|
|
||||||
func _on_2083_energy_changed(amount) -> void:
|
func _on_2083_energy_changed(amount) -> void:
|
||||||
sg_energy.value = amount
|
sg_energy.value = amount
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=10 format=2]
|
[gd_scene load_steps=12 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://objects/enemy/boss/sg2083.tscn" type="PackedScene" id=1]
|
[ext_resource path="res://objects/enemy/boss/sg2083.tscn" type="PackedScene" id=1]
|
||||||
[ext_resource path="res://tilesets/t_laboratory.tres" type="TileSet" id=2]
|
[ext_resource path="res://tilesets/t_laboratory.tres" type="TileSet" id=2]
|
||||||
|
@ -10,6 +10,157 @@
|
||||||
[ext_resource path="res://objects/lore/boss/fami.tscn" type="PackedScene" id=8]
|
[ext_resource path="res://objects/lore/boss/fami.tscn" type="PackedScene" id=8]
|
||||||
[ext_resource path="res://graphics/backgrounds/fami_rooftop.png" type="Texture" id=9]
|
[ext_resource path="res://graphics/backgrounds/fami_rooftop.png" type="Texture" id=9]
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id=1]
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/path = NodePath("2083:position")
|
||||||
|
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": [ Vector2( 0, 12 ) ]
|
||||||
|
}
|
||||||
|
tracks/1/type = "bezier"
|
||||||
|
tracks/1/path = NodePath("2083:position:x")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"points": PoolRealArray( 0, -0.25, 0, 0.25, 0 ),
|
||||||
|
"times": PoolRealArray( 0 )
|
||||||
|
}
|
||||||
|
tracks/2/type = "bezier"
|
||||||
|
tracks/2/path = NodePath("2083:position:y")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"points": PoolRealArray( 12, -0.25, 0, 0.25, 0 ),
|
||||||
|
"times": PoolRealArray( 0 )
|
||||||
|
}
|
||||||
|
tracks/3/type = "value"
|
||||||
|
tracks/3/path = NodePath("2083:visible")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
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": [ false ]
|
||||||
|
}
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/path = NodePath("ParallaxBackground/ParallaxLayer/Sprite:visible")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
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": [ true ]
|
||||||
|
}
|
||||||
|
tracks/5/type = "value"
|
||||||
|
tracks/5/path = NodePath("FamiCutscene:visible")
|
||||||
|
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": [ true ]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id=2]
|
||||||
|
resource_name = "drop-stg"
|
||||||
|
length = 4.4
|
||||||
|
tracks/0/type = "bezier"
|
||||||
|
tracks/0/path = NodePath("2083:position:y")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"points": PoolRealArray( -300, -0.25, 0, 0.2, 0, 12, -0.1, -149.978, 0.25, 0 ),
|
||||||
|
"times": PoolRealArray( 3, 3.5 )
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/path = NodePath("2083:visible")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PoolRealArray( 3 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"update": 1,
|
||||||
|
"values": [ true ]
|
||||||
|
}
|
||||||
|
tracks/2/type = "method"
|
||||||
|
tracks/2/path = NodePath("FamiCutscene")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PoolRealArray( 3.5 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"values": [ {
|
||||||
|
"args": [ ],
|
||||||
|
"method": "kill_cop"
|
||||||
|
} ]
|
||||||
|
}
|
||||||
|
tracks/3/type = "method"
|
||||||
|
tracks/3/path = NodePath("2083")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"times": PoolRealArray( 3.5 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"values": [ {
|
||||||
|
"args": [ true ],
|
||||||
|
"method": "land"
|
||||||
|
} ]
|
||||||
|
}
|
||||||
|
tracks/4/type = "method"
|
||||||
|
tracks/4/path = NodePath(".")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PoolRealArray( 4 ),
|
||||||
|
"transitions": PoolRealArray( 1 ),
|
||||||
|
"values": [ {
|
||||||
|
"args": [ ],
|
||||||
|
"method": "fade"
|
||||||
|
} ]
|
||||||
|
}
|
||||||
|
tracks/5/type = "value"
|
||||||
|
tracks/5/path = NodePath("FamiCutscene:visible")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/imported = false
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/keys = {
|
||||||
|
"times": PoolRealArray( 3, 4.4 ),
|
||||||
|
"transitions": PoolRealArray( 1, 1 ),
|
||||||
|
"update": 1,
|
||||||
|
"values": [ true, false ]
|
||||||
|
}
|
||||||
|
|
||||||
[node name="Map" type="Node2D" groups=["map"]]
|
[node name="Map" type="Node2D" groups=["map"]]
|
||||||
pause_mode = 1
|
pause_mode = 1
|
||||||
script = ExtResource( 3 )
|
script = ExtResource( 3 )
|
||||||
|
@ -19,11 +170,11 @@ lore_entries = [ ExtResource( 8 ) ]
|
||||||
|
|
||||||
[node name="ParallaxLayer" type="ParallaxLayer" parent="ParallaxBackground"]
|
[node name="ParallaxLayer" type="ParallaxLayer" parent="ParallaxBackground"]
|
||||||
motion_scale = Vector2( 0.5, 1 )
|
motion_scale = Vector2( 0.5, 1 )
|
||||||
motion_offset = Vector2( -256, 0 )
|
|
||||||
|
|
||||||
[node name="Sprite" type="Sprite" parent="ParallaxBackground/ParallaxLayer"]
|
[node name="Sprite" type="Sprite" parent="ParallaxBackground/ParallaxLayer"]
|
||||||
texture = ExtResource( 9 )
|
texture = ExtResource( 9 )
|
||||||
centered = false
|
centered = false
|
||||||
|
offset = Vector2( -128, 0 )
|
||||||
|
|
||||||
[node name="GUI" type="CanvasLayer" parent="."]
|
[node name="GUI" type="CanvasLayer" parent="."]
|
||||||
visible = false
|
visible = false
|
||||||
|
@ -139,6 +290,10 @@ visible = false
|
||||||
position = Vector2( 160, 179 )
|
position = Vector2( 160, 179 )
|
||||||
sg2083_path = NodePath("../2083")
|
sg2083_path = NodePath("../2083")
|
||||||
|
|
||||||
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
|
anims/RESET = SubResource( 1 )
|
||||||
|
anims/drop-stg = SubResource( 2 )
|
||||||
|
|
||||||
[connection signal="cutscene_finished" from="FamiCutscene" to="." method="_on_cutscene_finished"]
|
[connection signal="cutscene_finished" from="FamiCutscene" to="." method="_on_cutscene_finished"]
|
||||||
[connection signal="energy_changed" from="2083" to="." method="_on_2083_energy_changed"]
|
[connection signal="energy_changed" from="2083" to="." method="_on_2083_energy_changed"]
|
||||||
[connection signal="health_changed" from="2083" to="." method="_on_2083_health_changed"]
|
[connection signal="health_changed" from="2083" to="." method="_on_2083_health_changed"]
|
||||||
|
|
|
@ -69,6 +69,7 @@ animations = [ {
|
||||||
} ]
|
} ]
|
||||||
|
|
||||||
[node name="2600Explosion" type="Node2D"]
|
[node name="2600Explosion" type="Node2D"]
|
||||||
|
z_index = 50
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
|
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
|
||||||
|
|
|
@ -2739,20 +2739,6 @@ tracks/18/keys = {
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [ Vector2( 1e-05, 1e-05 ), Vector2( 1, 1 ) ]
|
"values": [ Vector2( 1e-05, 1e-05 ), Vector2( 1, 1 ) ]
|
||||||
}
|
}
|
||||||
tracks/19/type = "method"
|
|
||||||
tracks/19/path = NodePath("../StateChart")
|
|
||||||
tracks/19/interp = 1
|
|
||||||
tracks/19/loop_wrap = true
|
|
||||||
tracks/19/imported = false
|
|
||||||
tracks/19/enabled = true
|
|
||||||
tracks/19/keys = {
|
|
||||||
"times": PoolRealArray( 2.9 ),
|
|
||||||
"transitions": PoolRealArray( 1 ),
|
|
||||||
"values": [ {
|
|
||||||
"args": [ "transformed" ],
|
|
||||||
"method": "send_event"
|
|
||||||
} ]
|
|
||||||
}
|
|
||||||
|
|
||||||
[sub_resource type="Animation" id=24]
|
[sub_resource type="Animation" id=24]
|
||||||
resource_name = "punching"
|
resource_name = "punching"
|
||||||
|
@ -4025,7 +4011,7 @@ shape = SubResource( 14 )
|
||||||
|
|
||||||
[node name="LowerJaw" type="CollisionShape2D" parent="Hitbox"]
|
[node name="LowerJaw" type="CollisionShape2D" parent="Hitbox"]
|
||||||
position = Vector2( -21.3082, -76.1166 )
|
position = Vector2( -21.3082, -76.1166 )
|
||||||
rotation = 1.66395
|
rotation = 1.66396
|
||||||
z_index = 100
|
z_index = 100
|
||||||
shape = SubResource( 15 )
|
shape = SubResource( 15 )
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,13 @@ func set_energy(value: float) -> void:
|
||||||
emit_signal("energy_changed", energy)
|
emit_signal("energy_changed", energy)
|
||||||
|
|
||||||
|
|
||||||
|
func land(duck: bool) -> void:
|
||||||
|
if duck:
|
||||||
|
anims.play("Duck")
|
||||||
|
else:
|
||||||
|
anims.play("UnDuck")
|
||||||
|
|
||||||
|
|
||||||
func shoot() -> void:
|
func shoot() -> void:
|
||||||
set_energy(energy - bullet_energy)
|
set_energy(energy - bullet_energy)
|
||||||
Audio.play_sound(Audio.a_bullet_barrage,Audio.ac_collectible)
|
Audio.play_sound(Audio.a_bullet_barrage,Audio.ac_collectible)
|
||||||
|
|
|
@ -241,7 +241,7 @@ tracks/3/keys = {
|
||||||
"times": PoolRealArray( 0, 0.1, 0.2 ),
|
"times": PoolRealArray( 0, 0.1, 0.2 ),
|
||||||
"transitions": PoolRealArray( 1, 1, 1 ),
|
"transitions": PoolRealArray( 1, 1, 1 ),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [ -25.1199, -42.8239, -52.5731 ]
|
"values": [ -25.1199, -42.8239, -52.6 ]
|
||||||
}
|
}
|
||||||
tracks/4/type = "value"
|
tracks/4/type = "value"
|
||||||
tracks/4/path = NodePath("Axle/JointFront/LegFront/ShinFront:position")
|
tracks/4/path = NodePath("Axle/JointFront/LegFront/ShinFront:position")
|
||||||
|
@ -265,7 +265,7 @@ tracks/5/keys = {
|
||||||
"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
|
"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
|
||||||
"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
|
"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [ 51.0254, 71.6413, 96.9236, 110.502, 129.974 ]
|
"values": [ 51.0254, 71.6413, 96.9236, 110.502, 128.135 ]
|
||||||
}
|
}
|
||||||
tracks/6/type = "value"
|
tracks/6/type = "value"
|
||||||
tracks/6/path = NodePath("Axle/JointFront/LegFront:position")
|
tracks/6/path = NodePath("Axle/JointFront/LegFront:position")
|
||||||
|
@ -289,7 +289,7 @@ tracks/7/keys = {
|
||||||
"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
|
"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
|
||||||
"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
|
"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [ -26.8344, -38.9649, -54.4339, -63.1815, -77.3026 ]
|
"values": [ -26.8344, -38.9649, -54.4339, -63.1815, -75.4293 ]
|
||||||
}
|
}
|
||||||
tracks/8/type = "value"
|
tracks/8/type = "value"
|
||||||
tracks/8/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:position")
|
tracks/8/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:position")
|
||||||
|
@ -313,7 +313,7 @@ tracks/9/keys = {
|
||||||
"times": PoolRealArray( 0, 0.1, 0.2 ),
|
"times": PoolRealArray( 0, 0.1, 0.2 ),
|
||||||
"transitions": PoolRealArray( 1, 1, 1 ),
|
"transitions": PoolRealArray( 1, 1, 1 ),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [ -25.1199, -42.6063, -52.1914 ]
|
"values": [ -25.1199, -42.6063, -52.8 ]
|
||||||
}
|
}
|
||||||
tracks/10/type = "value"
|
tracks/10/type = "value"
|
||||||
tracks/10/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:position")
|
tracks/10/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:position")
|
||||||
|
@ -337,7 +337,7 @@ tracks/11/keys = {
|
||||||
"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
|
"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
|
||||||
"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
|
"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [ 51.0254, -5939.68, -82.9, 2.5, 130.023 ]
|
"values": [ 51.0254, -5939.68, -82.9, 2.5, 128.421 ]
|
||||||
}
|
}
|
||||||
tracks/12/type = "value"
|
tracks/12/type = "value"
|
||||||
tracks/12/path = NodePath("Axle/JointBack/LegBack/KneeBack:position")
|
tracks/12/path = NodePath("Axle/JointBack/LegBack/KneeBack:position")
|
||||||
|
@ -385,7 +385,7 @@ tracks/15/keys = {
|
||||||
"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
|
"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ),
|
||||||
"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
|
"transitions": PoolRealArray( 1, 1, 1, 1, 1 ),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [ -26.8344, -39.4117, -54.688, -63.5339, -77.4075 ]
|
"values": [ -26.8344, -39.4117, -54.688, -63.5339, -76.1645 ]
|
||||||
}
|
}
|
||||||
tracks/16/type = "value"
|
tracks/16/type = "value"
|
||||||
tracks/16/path = NodePath(".:safe_from_breath")
|
tracks/16/path = NodePath(".:safe_from_breath")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue