more work on final boss

This commit is contained in:
Haze Weathers 2024-03-05 22:03:51 -05:00
parent 3e3b327f5e
commit 0bae67fd3b
7 changed files with 196 additions and 24 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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