From 46578f033f0a224966dcabaf99c8e03f3e77aff0 Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Mon, 16 Oct 2023 11:21:49 -0400 Subject: [PATCH] STG-2600 death animation. --- maps/boss/boss2_arena.gd | 1 + objects/enemy/boss/2600.gd | 31 +- objects/enemy/boss/2600.tscn | 564 ++++++++++++++++++- objects/enemy/boss/2600_small_explosion.gd | 11 + objects/enemy/boss/2600_small_explosion.tscn | 85 +++ objects/enemy/boss/intelli_head.tscn | 29 + 6 files changed, 703 insertions(+), 18 deletions(-) create mode 100644 objects/enemy/boss/2600_small_explosion.gd create mode 100644 objects/enemy/boss/2600_small_explosion.tscn create mode 100644 objects/enemy/boss/intelli_head.tscn diff --git a/maps/boss/boss2_arena.gd b/maps/boss/boss2_arena.gd index 4148057..d32371b 100644 --- a/maps/boss/boss2_arena.gd +++ b/maps/boss/boss2_arena.gd @@ -15,6 +15,7 @@ func _on_2600_entered_phase(phase): $ExitTimer.start() var text_3d = Text3D.instance() text_3d.anim = "victory" + yield(get_tree(), "idle_frame") self.add_child(text_3d) diff --git a/objects/enemy/boss/2600.gd b/objects/enemy/boss/2600.gd index be0f1fa..3d3eb47 100644 --- a/objects/enemy/boss/2600.gd +++ b/objects/enemy/boss/2600.gd @@ -3,10 +3,14 @@ extends "res://objects/enemy/enemy.gd" signal entered_phase(phase) const Bullet = preload("res://objects/enemy/2600_bullet.tscn") +const SmallExplosion = preload("res://objects/enemy/boss/2600_small_explosion.tscn") +const IntelliHead = preload("res://objects/enemy/boss/intelli_head.tscn") export var shot_speed: float = 50 export var fire_rate: float = 1 export var can_shoot: bool = false +export var explosion_rect: Rect2 +export var make_explosions: bool = true var hp: int = 3 @@ -42,9 +46,23 @@ func _play_charge_sound(play: bool): Audio.ac_boss.playing = false +func _spawn_explosions() -> void: + var head = IntelliHead.instance() + head.global_position = $"%IntelliHeadPos".global_position + get_parent().add_child(head) + while make_explosions: + yield(get_tree().create_timer(randf() * 0.5, false), "timeout") + var explosion = SmallExplosion.instance() + explosion.position = Vector2( + rand_range(explosion_rect.position.x, explosion_rect.end.x), + rand_range(explosion_rect.position.y, explosion_rect.end.y) + ) + add_child(explosion) + func die(): hp -= 1 - anims.play("Beam") + if hp > 0: + anims.play("Beam") match hp: 2: Game.instance_node(preload("res://objects/enemy/boss/collapse_blocks.tscn"),0,0,get_parent()) @@ -53,9 +71,16 @@ func die(): 1: shot_speed = 70 fire_rate = 0.8 + $"%GlassShape".queue_free() emit_signal("entered_phase", 3) head_sprite.texture = preload("res://graphics/enemy/boss/stg_2600/head_broken.png") 0: - queue_free() - Game.instance_node(load("res://objects/enemy/boss/2600_die.tscn"),position.x,position.y,get_parent()) + anims.play("die") + Audio.play_sound(Audio.a_die, Audio.ac_die) + yield(anims, "animation_finished") emit_signal("entered_phase", 4) + + +func _on_animation_finished(anim_name: String) -> void: + if anim_name == "Beam": + anims.play("stomping") diff --git a/objects/enemy/boss/2600.tscn b/objects/enemy/boss/2600.tscn index d03b780..403648e 100644 --- a/objects/enemy/boss/2600.tscn +++ b/objects/enemy/boss/2600.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=28 format=2] +[gd_scene load_steps=35 format=2] [ext_resource path="res://objects/enemy/boss/2600.gd" type="Script" id=1] [ext_resource path="res://graphics/enemy/boss/stg_2600/tailpipes.png" type="Texture" id=2] @@ -16,6 +16,8 @@ [ext_resource path="res://shaders/beam_cycle.gdshader" type="Shader" id=14] [ext_resource path="res://graphics/particles/dust.png" type="Texture" id=15] [ext_resource path="res://graphics/particles/smoke.png" type="Texture" id=16] +[ext_resource path="res://shaders/fade.gdshader" type="Shader" id=17] +[ext_resource path="res://graphics/fade_patterns/stg_explosion.png" type="Texture" id=18] [sub_resource type="ShaderMaterial" id=11] shader = ExtResource( 3 ) @@ -45,12 +47,86 @@ shader_param/pixel_scale = 1.0 [sub_resource type="RectangleShape2D" id=1] extents = Vector2( 20.5, 15.5 ) -[sub_resource type="RectangleShape2D" id=2] -extents = Vector2( 47, 16 ) +[sub_resource type="RectangleShape2D" id=19] +extents = Vector2( 5.5, 5.5 ) [sub_resource type="RectangleShape2D" id=3] extents = Vector2( 23, 13 ) +[sub_resource type="ShaderMaterial" id=16] +shader = ExtResource( 17 ) +shader_param/color = Color( 1, 1, 1, 1 ) +shader_param/smooth_mode = true +shader_param/reverse = true +shader_param/opacity = 0.0 + +[sub_resource type="Animation" id=17] +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath("ExplosionRect:material:shader_param/opacity") +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": [ 0.0 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("ExplosionRect:material:shader_param/reverse") +tracks/1/interp = 1 +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": [ true ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("ExplosionRect:modulate") +tracks/2/interp = 1 +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": [ Color( 1, 1, 1, 1 ) ] +} + +[sub_resource type="Animation" id=18] +resource_name = "explode" +step = 0.05 +tracks/0/type = "value" +tracks/0/path = NodePath("ExplosionRect:material:shader_param/opacity") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.3 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ 0.0, 1.0 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("ExplosionRect:modulate") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0.833333 ), Color( 1, 1, 1, 0.666667 ), Color( 1, 1, 1, 0.5 ), Color( 1, 1, 1, 0.333333 ), Color( 1, 1, 1, 0.166667 ), Color( 1, 1, 1, 0 ) ] +} + [sub_resource type="Animation" id=4] resource_name = "Beam" length = 4.0 @@ -146,6 +222,90 @@ tracks/6/keys = { "update": 1, "values": [ true, false ] } +tracks/7/type = "value" +tracks/7/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack: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.5, 4 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ -25.1199, -25.1199 ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:rotation_degrees") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/keys = { +"times": PoolRealArray( 0.5, 4 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ 51.0254, 51.0254 ] +} +tracks/9/type = "value" +tracks/9/path = NodePath("Axle/JointBack/LegBack/KneeBack:rotation_degrees") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/keys = { +"times": PoolRealArray( 0.5, 4 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ 0.0, 0.0 ] +} +tracks/10/type = "value" +tracks/10/path = NodePath("Axle/JointBack/LegBack:rotation_degrees") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/keys = { +"times": PoolRealArray( 0.5, 4 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ -26.8344, -26.8344 ] +} +tracks/11/type = "value" +tracks/11/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:rotation_degrees") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/keys = { +"times": PoolRealArray( 0.5, 4 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ -25.1199, -25.1199 ] +} +tracks/12/type = "value" +tracks/12/path = NodePath("Axle/JointFront/LegFront/ShinFront:rotation_degrees") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/keys = { +"times": PoolRealArray( 0.5, 4 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ 51.0254, 51.0254 ] +} +tracks/13/type = "value" +tracks/13/path = NodePath("Axle/JointFront/LegFront:rotation_degrees") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/keys = { +"times": PoolRealArray( 0.5, 4 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ -26.8344, -26.8344 ] +} [sub_resource type="Animation" id=5] length = 0.001 @@ -233,11 +393,356 @@ tracks/6/keys = { "update": 0, "values": [ false ] } +tracks/7/type = "value" +tracks/7/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront: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": [ -25.1199 ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("Axle/JointFront/LegFront/ShinFront:rotation_degrees") +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": [ 51.0254 ] +} +tracks/9/type = "value" +tracks/9/path = NodePath("Axle/JointFront/LegFront:rotation_degrees") +tracks/9/interp = 1 +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": [ -26.8344 ] +} +tracks/10/type = "value" +tracks/10/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:rotation_degrees") +tracks/10/interp = 1 +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": [ -25.1199 ] +} +tracks/11/type = "value" +tracks/11/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:rotation_degrees") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ 51.0254 ] +} +tracks/12/type = "value" +tracks/12/path = NodePath("Axle/JointBack/LegBack/KneeBack:rotation_degrees") +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": 0, +"values": [ 0.0 ] +} +tracks/13/type = "value" +tracks/13/path = NodePath("Axle/JointBack/LegBack:rotation_degrees") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ -26.8344 ] +} +tracks/14/type = "value" +tracks/14/path = NodePath("Axle:position") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 66, 78 ) ] +} +tracks/15/type = "value" +tracks/15/path = NodePath("Axle/Head/Intelli:visible") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ true ] +} +tracks/16/type = "value" +tracks/16/path = NodePath(".:make_explosions") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ true ] +} +tracks/17/type = "value" +tracks/17/path = NodePath("Axle:visible") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ true ] +} +tracks/18/type = "value" +tracks/18/path = NodePath("Hitbox:monitoring") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ true ] +} +tracks/19/type = "value" +tracks/19/path = NodePath("Hitbox:monitorable") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ true ] +} + +[sub_resource type="Animation" id=15] +resource_name = "die" +length = 3.0 +tracks/0/type = "value" +tracks/0/path = NodePath("Axle:position") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ), Vector2( 67, 78 ), Vector2( 65, 78 ) ] +} +tracks/1/type = "method" +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "_spawn_explosions" +} ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("Axle/Head/Intelli:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} +tracks/3/type = "value" +tracks/3/path = NodePath(".:can_shoot") +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": 1, +"values": [ false ] +} +tracks/4/type = "animation" +tracks/4/path = NodePath("BigExplosion/ExplosionAnimation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"clips": PoolStringArray( "explode" ), +"times": PoolRealArray( 2 ) +} +tracks/5/type = "value" +tracks/5/path = NodePath(".:make_explosions") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0, 2 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ true, false ] +} +tracks/6/type = "value" +tracks/6/path = NodePath("Axle:visible") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/keys = { +"times": PoolRealArray( 0, 2.5 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ true, false ] +} +tracks/7/type = "value" +tracks/7/path = NodePath("Hitbox:monitoring") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/keys = { +"times": PoolRealArray( 0, 2.5 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ true, false ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("Hitbox:monitorable") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/keys = { +"times": PoolRealArray( 0, 2.5 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ true, false ] +} + +[sub_resource type="Animation" id=14] +resource_name = "stomping" +length = 5.0 +loop = true +tracks/0/type = "bezier" +tracks/0/path = NodePath("Axle/JointFront/LegFront/ShinFront/FootFront:rotation_degrees") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"points": PoolRealArray( -25.1199, -0.25, 0, 0, -2.10696, -33.4027, -0.7, 0.0638618, 0.25, 0, -33.4027, -0.25, 0, 0.25, 0, -22.7921, -0.25, 0, 0.25, 0, -25.1199, 0, -0.968742, 0, -2.10696 ), +"times": PoolRealArray( 0, 1.2, 1.5, 1.8, 1.9 ) +} +tracks/1/type = "bezier" +tracks/1/path = NodePath("Axle/JointFront/LegFront/ShinFront:rotation_degrees") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"points": PoolRealArray( 51.0254, -0.25, 0, 0, 6.18464, 84.1092, -0.5, 0.233734, 0.25, 0, 84.1092, -0.25, 0, 0.25, 0, 43.8714, -0.25, 0, 0.25, 0, 51.0254, 0, 5.17889, 0, 6.18464 ), +"times": PoolRealArray( 0, 1.2, 1.5, 1.8, 1.9 ) +} +tracks/2/type = "bezier" +tracks/2/path = NodePath("Axle/JointFront/LegFront:rotation_degrees") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"points": PoolRealArray( -26.8344, -0.25, 0, 0, -5.79777, -51.6355, -0.6, 0.20406, 0.25, 0, -51.6355, -0.25, 0, 0.25, 0, -22.0103, -0.25, 0, 0.25, 0, -26.8344, 0, -5.58774, 0, -5.79777 ), +"times": PoolRealArray( 0, 1.2, 1.5, 1.8, 1.9 ) +} +tracks/3/type = "bezier" +tracks/3/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack:rotation_degrees") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"points": PoolRealArray( -25.1199, -0.25, 0, 0.25, 0, -25.1199, -0.25, 0, 0, -2.10696, -33.4027, -0.7, 0.0638618, 0.25, 0, -33.4027, -0.25, 0, 0.25, 0, -22.7921, -0.25, 0, 0.25, 0, -25.1199, 0, -0.968742, 0, -2.10696 ), +"times": PoolRealArray( 0, 2.5, 3.7, 4, 4.3, 4.4 ) +} +tracks/4/type = "bezier" +tracks/4/path = NodePath("Axle/JointBack/LegBack/KneeBack/ShinBack:rotation_degrees") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"points": PoolRealArray( 51.0254, -0.25, 0, 0.25, 0, 51.0254, -0.25, 0, 0, 6.18464, 84.1092, -0.5, 0.233734, 0.25, 0, 84.1092, -0.25, 0, 0.25, 0, 43.8714, -0.25, 0, 0.25, 0, 51.0254, 0, 5.17889, 0, 6.18464 ), +"times": PoolRealArray( 0, 2.5, 3.7, 4, 4.3, 4.4 ) +} +tracks/5/type = "bezier" +tracks/5/path = NodePath("Axle/JointBack/LegBack:rotation_degrees") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"points": PoolRealArray( -26.8344, -0.25, 0, 0.25, 0, -26.8344, -0.25, 0, 0, -5.79777, -51.6355, -0.6, 0.20406, 0.25, 0, -51.6355, -0.25, 0, 0.25, 0, -22.0103, -0.25, 0, 0.25, 0, -26.8344, 0, -5.58774, 0, -5.79777 ), +"times": PoolRealArray( 0, 2.5, 3.7, 4, 4.3, 4.4 ) +} +tracks/6/type = "value" +tracks/6/path = NodePath("Axle/JointBack/LegBack/KneeBack: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.0 ] +} [node name="2600" type="Node2D"] -position = Vector2( 0, -16 ) script = ExtResource( 1 ) can_shoot = true +explosion_rect = Rect2( 7, 17, 83, 63 ) [node name="Axle" type="Node2D" parent="."] position = Vector2( 66, 78 ) @@ -252,7 +757,7 @@ __meta__ = { [node name="LegBack" type="Sprite" parent="Axle/JointBack"] show_behind_parent = true -rotation = -0.436332 +rotation = -0.468349 texture = ExtResource( 9 ) offset = Vector2( 0, 18 ) region_enabled = true @@ -269,7 +774,7 @@ __meta__ = { } [node name="ShinBack" type="Sprite" parent="Axle/JointBack/LegBack/KneeBack"] -rotation = 0.872665 +rotation = 0.890561 texture = ExtResource( 9 ) offset = Vector2( 0, 24 ) region_enabled = true @@ -280,7 +785,7 @@ __meta__ = { [node name="FootBack" type="Sprite" parent="Axle/JointBack/LegBack/KneeBack/ShinBack"] position = Vector2( 0.00983047, 47.8521 ) -rotation = -0.436332 +rotation = -0.438425 texture = ExtResource( 12 ) offset = Vector2( -11.6527, 2.61113 ) script = ExtResource( 10 ) @@ -397,6 +902,10 @@ position = Vector2( -37, -32 ) texture = ExtResource( 5 ) flip_h = true +[node name="IntelliHeadPos" type="Position2D" parent="Axle/Head/Intelli"] +unique_name_in_owner = true +position = Vector2( 0, -4 ) + [node name="Beam" type="Sprite" parent="Axle/Head"] show_behind_parent = true material = SubResource( 10 ) @@ -455,7 +964,7 @@ __meta__ = { [node name="LegFront" type="Sprite" parent="Axle/JointFront"] show_behind_parent = true -rotation = -0.436332 +rotation = -0.468349 texture = ExtResource( 9 ) offset = Vector2( 0, 18 ) region_enabled = true @@ -468,7 +977,7 @@ __meta__ = { [node name="ShinFront" type="Sprite" parent="Axle/JointFront/LegFront"] material = SubResource( 8 ) position = Vector2( 3.8147e-06, 36 ) -rotation = 0.872665 +rotation = 0.890561 texture = ExtResource( 9 ) offset = Vector2( 0, 24 ) region_enabled = true @@ -479,7 +988,7 @@ __meta__ = { [node name="FootFront" type="Sprite" parent="Axle/JointFront/LegFront/ShinFront"] position = Vector2( 0.00983047, 47.8521 ) -rotation = -0.436332 +rotation = -0.438425 texture = ExtResource( 12 ) offset = Vector2( -11.6527, 2.61113 ) script = ExtResource( 10 ) @@ -529,30 +1038,55 @@ autostart = true [node name="WeakSpot" type="Area2D" parent="." groups=["boss_weakspot", "enemy_hitbox"]] position = Vector2( 1, 0 ) -[node name="CollisionShape2D" type="CollisionShape2D" parent="WeakSpot"] +[node name="GlassShape" type="CollisionShape2D" parent="WeakSpot"] +unique_name_in_owner = true position = Vector2( 26.5, 32.5 ) shape = SubResource( 1 ) +[node name="IntelliShape" type="CollisionShape2D" parent="WeakSpot"] +position = Vector2( 27.5, 37.5 ) +shape = SubResource( 19 ) + [node name="Hitbox" type="Area2D" parent="." groups=["blocks_arrow", "enemy_hitbox"]] position = Vector2( 1, 0 ) -[node name="HeadShape" type="CollisionShape2D" parent="Hitbox"] +[node name="HeadShape" type="CollisionPolygon2D" parent="Hitbox"] position = Vector2( 47, 64 ) -shape = SubResource( 2 ) +polygon = PoolVector2Array( -1, -48, 25, -48, 37, -36, 47, 8, 39, 17, -42, 17, -47, 6, -47, -6, -42, -17, -1, -17 ) [node name="FootShapeFront" type="CollisionShape2D" parent="Hitbox"] -position = Vector2( 62, 155 ) +position = Vector2( 63.7333, 154.923 ) +rotation = -0.0162124 shape = SubResource( 3 ) [node name="FootShapeBack" type="CollisionShape2D" parent="Hitbox"] -position = Vector2( 41, 155 ) +position = Vector2( 42.7333, 154.923 ) +rotation = -0.0162124 shape = SubResource( 3 ) +[node name="BigExplosion" type="CanvasLayer" parent="."] +layer = 101 + +[node name="ExplosionRect" type="TextureRect" parent="BigExplosion"] +material = SubResource( 16 ) +anchor_right = 1.0 +anchor_bottom = 1.0 +texture = ExtResource( 18 ) + +[node name="ExplosionAnimation" type="AnimationPlayer" parent="BigExplosion"] +anims/RESET = SubResource( 17 ) +anims/explode = SubResource( 18 ) + [node name="AnimationPlayer" type="AnimationPlayer" parent="."] +autoplay = "stomping" +playback_default_blend_time = 0.5 anims/Beam = SubResource( 4 ) anims/RESET = SubResource( 5 ) +anims/die = SubResource( 15 ) +anims/stomping = SubResource( 14 ) [connection signal="area_entered" from="Axle/Head/Beam/Hitbox" to="." method="_on_Hitbox_area_entered"] [connection signal="timeout" from="ShootTimer" to="." method="_on_ShootTimer_timeout"] [connection signal="area_entered" from="WeakSpot" to="." method="_on_WeakSpot_area_entered"] [connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"] +[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_finished"] diff --git a/objects/enemy/boss/2600_small_explosion.gd b/objects/enemy/boss/2600_small_explosion.gd new file mode 100644 index 0000000..c79262b --- /dev/null +++ b/objects/enemy/boss/2600_small_explosion.gd @@ -0,0 +1,11 @@ +extends Node2D + +func _ready() -> void: + Audio.play_sound(Audio.a_explosion,Audio.ac_die) + var sprite: AnimatedSprite = get_child(randi() % get_child_count()) + sprite.visible = true + sprite.play() + + +func _on_animation_finished() -> void: + queue_free() diff --git a/objects/enemy/boss/2600_small_explosion.tscn b/objects/enemy/boss/2600_small_explosion.tscn new file mode 100644 index 0000000..877a4ea --- /dev/null +++ b/objects/enemy/boss/2600_small_explosion.tscn @@ -0,0 +1,85 @@ +[gd_scene load_steps=18 format=2] + +[ext_resource path="res://objects/enemy/boss/2600_small_explosion.gd" type="Script" id=1] +[ext_resource path="res://graphics/enemy/explosion_small.png" type="Texture" id=2] +[ext_resource path="res://graphics/enemy/explosion.png" type="Texture" id=3] + +[sub_resource type="AtlasTexture" id=1] +atlas = ExtResource( 2 ) +region = Rect2( 0, 0, 16, 16 ) + +[sub_resource type="AtlasTexture" id=2] +atlas = ExtResource( 2 ) +region = Rect2( 16, 0, 16, 16 ) + +[sub_resource type="AtlasTexture" id=3] +atlas = ExtResource( 2 ) +region = Rect2( 32, 0, 16, 16 ) + +[sub_resource type="AtlasTexture" id=4] +atlas = ExtResource( 2 ) +region = Rect2( 48, 0, 16, 16 ) + +[sub_resource type="AtlasTexture" id=5] +atlas = ExtResource( 2 ) +region = Rect2( 64, 0, 16, 16 ) + +[sub_resource type="AtlasTexture" id=6] +atlas = ExtResource( 2 ) +region = Rect2( 80, 0, 16, 16 ) + +[sub_resource type="SpriteFrames" id=14] +animations = [ { +"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 6 ) ], +"loop": false, +"name": "explode", +"speed": 20.0 +} ] + +[sub_resource type="AtlasTexture" id=8] +atlas = ExtResource( 3 ) +region = Rect2( 0, 0, 64, 64 ) + +[sub_resource type="AtlasTexture" id=9] +atlas = ExtResource( 3 ) +region = Rect2( 64, 0, 64, 64 ) + +[sub_resource type="AtlasTexture" id=10] +atlas = ExtResource( 3 ) +region = Rect2( 128, 0, 64, 64 ) + +[sub_resource type="AtlasTexture" id=11] +atlas = ExtResource( 3 ) +region = Rect2( 192, 0, 64, 64 ) + +[sub_resource type="AtlasTexture" id=12] +atlas = ExtResource( 3 ) +region = Rect2( 256, 0, 64, 64 ) + +[sub_resource type="AtlasTexture" id=13] +atlas = ExtResource( 3 ) +region = Rect2( 320, 0, 64, 64 ) + +[sub_resource type="SpriteFrames" id=15] +animations = [ { +"frames": [ SubResource( 8 ), SubResource( 9 ), SubResource( 10 ), SubResource( 11 ), SubResource( 12 ), SubResource( 13 ) ], +"loop": false, +"name": "explode", +"speed": 10.0 +} ] + +[node name="2600Explosion" type="Node2D"] +script = ExtResource( 1 ) + +[node name="AnimatedSprite" type="AnimatedSprite" parent="."] +visible = false +frames = SubResource( 14 ) +animation = "explode" + +[node name="AnimatedSprite2" type="AnimatedSprite" parent="."] +visible = false +frames = SubResource( 15 ) +animation = "explode" + +[connection signal="animation_finished" from="AnimatedSprite" to="." method="_on_animation_finished"] +[connection signal="animation_finished" from="AnimatedSprite2" to="." method="_on_animation_finished"] diff --git a/objects/enemy/boss/intelli_head.tscn b/objects/enemy/boss/intelli_head.tscn new file mode 100644 index 0000000..ed77b03 --- /dev/null +++ b/objects/enemy/boss/intelli_head.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://graphics/npc/intelli_head.png" type="Texture" id=1] +[ext_resource path="res://objects/enemy/constant_bleed.tscn" type="PackedScene" id=2] + +[sub_resource type="PhysicsMaterial" id=17] +bounce = 0.5 + +[sub_resource type="CircleShape2D" id=16] +radius = 5.0 + +[node name="IntelliHead" type="RigidBody2D"] +position = Vector2( 0, -4 ) +mass = 2.0 +physics_material_override = SubResource( 17 ) +linear_velocity = Vector2( -80, -80 ) + +[node name="DeathSplatter" parent="." instance=ExtResource( 2 )] +position = Vector2( -1, 5 ) +emission_shape = 0 +direction = Vector2( 0, 1 ) +spread = 60.0 + +[node name="Sprite" type="Sprite" parent="."] +texture = ExtResource( 1 ) +flip_h = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 16 )