Progress on the boss

This commit is contained in:
Paul Norberger
2020-04-20 17:52:21 +02:00
parent efacd63543
commit 75a5130121
15 changed files with 671 additions and 152 deletions

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=31 format=2]
[gd_scene load_steps=36 format=2]
[ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1]
[ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=2]
@@ -7,13 +7,22 @@
[ext_resource path="res://Boss/SlimeBoss/Animations/move_down.png" type="Texture" id=5]
[ext_resource path="res://Boss/SlimeBoss/Animations/move_right.png" type="Texture" id=6]
[ext_resource path="res://Boss/SlimeBoss/States/Roam/RoamSequence.gd" type="Script" id=7]
[ext_resource path="res://Boss/SlimeBoss/States/Roam/Wait.gd" type="Script" id=8]
[ext_resource path="res://Boss/SlimeBoss/States/Wait.gd" type="Script" id=8]
[ext_resource path="res://Boss/SlimeBoss/States/FightStart.gd" type="Script" id=9]
[ext_resource path="res://Boss/SlimeBoss/Animations/move_down_angry.png" type="Texture" id=10]
[ext_resource path="res://Boss/SlimeBoss/Animations/move_up.png" type="Texture" id=11]
[ext_resource path="res://Boss/SlimeBoss/States/Roam/MoveToRandomPosition.gd" type="Script" id=12]
[ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=13]
[ext_resource path="res://Boss/SlimeBoss/HeroCloseZone.gd" type="Script" id=14]
[ext_resource path="res://Overlap/StateMachine/SequenceState.gd" type="Script" id=15]
[ext_resource path="res://Boss/SlimeBoss/States/Charge/Prepare.gd" type="Script" id=16]
[ext_resource path="res://Boss/SlimeBoss/States/Charge/Sprint.gd" type="Script" id=17]
[ext_resource path="res://Effects/Charge/ChargeEffect.tscn" type="PackedScene" id=18]
[ext_resource path="res://Boss/SlimeBoss/States/ReturnToCenter.gd" type="Script" id=19]
[ext_resource path="res://Boss/SlimeBoss/States/Stomp.gd" type="Script" id=20]
[sub_resource type="CircleShape2D" id=15]
radius = 60.0
[sub_resource type="CapsuleShape2D" id=1]
radius = 18.0
@@ -31,7 +40,391 @@ radius = 8.0
height = 32.0
[sub_resource type="Animation" id=5]
resource_name = "FightStart"
resource_name = "ChargeDown"
length = 0.45
step = 0.025
tracks/0/type = "value"
tracks/0/path = NodePath("Sprite:texture")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.45 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ ExtResource( 5 ), ExtResource( 5 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("Sprite:vframes")
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": 1,
"values": [ 10 ]
}
tracks/2/type = "value"
tracks/2/path = NodePath("Sprite:hframes")
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": [ 24 ]
}
tracks/3/type = "value"
tracks/3/path = NodePath("Sprite:position")
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": [ Vector2( 0, -28 ) ]
}
tracks/4/type = "value"
tracks/4/path = NodePath("Sprite:flip_h")
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": 1,
"values": [ false ]
}
tracks/5/type = "value"
tracks/5/path = NodePath("Sprite:frame")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/keys = {
"times": PoolRealArray( 0, 0.025, 0.05, 0.075, 0.1, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25, 0.275, 0.3, 0.325, 0.35, 0.375, 0.4, 0.425 ),
"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
"update": 1,
"values": [ 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]
}
[sub_resource type="Animation" id=6]
resource_name = "ChargeLeft"
length = 0.45
step = 0.025
tracks/0/type = "value"
tracks/0/path = NodePath("Sprite:texture")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.45 ),
"transitions": PoolRealArray( 2, 2 ),
"update": 0,
"values": [ ExtResource( 6 ), ExtResource( 6 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("Sprite:vframes")
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": 1,
"values": [ 7 ]
}
tracks/2/type = "value"
tracks/2/path = NodePath("Sprite:hframes")
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": [ 11 ]
}
tracks/3/type = "value"
tracks/3/path = NodePath("Sprite:position")
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": [ Vector2( 5, -28 ) ]
}
tracks/4/type = "value"
tracks/4/path = NodePath("Sprite:flip_h")
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": 1,
"values": [ true ]
}
tracks/5/type = "value"
tracks/5/path = NodePath("Sprite:frame")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/keys = {
"times": PoolRealArray( 0, 0.025, 0.05, 0.075, 0.1, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25, 0.275, 0.3, 0.325, 0.35, 0.375, 0.4, 0.425 ),
"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
"update": 1,
"values": [ 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]
}
[sub_resource type="Animation" id=7]
resource_name = "ChargeRight"
length = 0.45
step = 0.025
tracks/0/type = "value"
tracks/0/path = NodePath("Sprite:texture")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.45 ),
"transitions": PoolRealArray( 2, 2 ),
"update": 0,
"values": [ ExtResource( 6 ), ExtResource( 6 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("Sprite:vframes")
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": 1,
"values": [ 7 ]
}
tracks/2/type = "value"
tracks/2/path = NodePath("Sprite:hframes")
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": [ 11 ]
}
tracks/3/type = "value"
tracks/3/path = NodePath("Sprite:position")
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": [ Vector2( -5, -28 ) ]
}
tracks/4/type = "value"
tracks/4/path = NodePath("Sprite:flip_h")
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": 1,
"values": [ false ]
}
tracks/5/type = "value"
tracks/5/path = NodePath("Sprite:frame")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/keys = {
"times": PoolRealArray( 0, 0.025, 0.05, 0.075, 0.1, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25, 0.275, 0.3, 0.325, 0.35, 0.375, 0.4, 0.425 ),
"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
"update": 1,
"values": [ 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]
}
[sub_resource type="Animation" id=8]
resource_name = "ChargeUp"
length = 0.45
step = 0.025
tracks/0/type = "value"
tracks/0/path = NodePath("Sprite:texture")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.45 ),
"transitions": PoolRealArray( 36.7583, 36.7583 ),
"update": 0,
"values": [ ExtResource( 11 ), ExtResource( 11 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("Sprite:vframes")
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": 1,
"values": [ 7 ]
}
tracks/2/type = "value"
tracks/2/path = NodePath("Sprite:hframes")
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": [ 11 ]
}
tracks/3/type = "value"
tracks/3/path = NodePath("Sprite:position")
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": [ Vector2( 0, -28 ) ]
}
tracks/4/type = "value"
tracks/4/path = NodePath("Sprite:flip_h")
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": 1,
"values": [ false ]
}
tracks/5/type = "value"
tracks/5/path = NodePath("Sprite:frame")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/keys = {
"times": PoolRealArray( 0, 0.025, 0.05, 0.075, 0.1, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25, 0.275, 0.3, 0.325, 0.35, 0.375, 0.4, 0.425 ),
"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
"update": 1,
"values": [ 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]
}
[sub_resource type="Animation" id=9]
resource_name = "Charging"
length = 1.9
step = 0.025
tracks/0/type = "value"
tracks/0/path = NodePath("Sprite:texture")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.175, 0.3, 0.65, 0.775, 1.05, 1.9 ),
"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1 ),
"update": 1,
"values": [ ExtResource( 5 ), ExtResource( 10 ), ExtResource( 5 ), ExtResource( 10 ), ExtResource( 5 ), ExtResource( 10 ), ExtResource( 5 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("Sprite:vframes")
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": 1,
"values": [ 10 ]
}
tracks/2/type = "value"
tracks/2/path = NodePath("Sprite:hframes")
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": [ 24 ]
}
tracks/3/type = "value"
tracks/3/path = NodePath("Sprite:position")
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": [ Vector2( 0, -28 ) ]
}
tracks/4/type = "value"
tracks/4/path = NodePath("Sprite:flip_h")
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": 1,
"values": [ false ]
}
tracks/5/type = "value"
tracks/5/path = NodePath("Sprite:frame")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/keys = {
"times": PoolRealArray( 0, 0.025, 0.05, 0.075, 0.1, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25, 0.275, 0.3, 0.325, 0.35, 0.375, 0.4, 0.425, 0.45, 0.475, 0.5, 0.525, 0.55, 0.575, 0.6, 0.625, 0.65, 0.675, 0.7, 0.725, 0.75, 0.775, 0.8, 0.825, 0.85, 0.875, 0.9, 0.925, 0.95, 0.975, 1, 1.025, 1.05, 1.075, 1.1, 1.125, 1.15, 1.175, 1.2, 1.225, 1.25, 1.275, 1.3, 1.325, 1.35, 1.375, 1.4, 1.425, 1.45, 1.475, 1.5, 1.525, 1.55, 1.575, 1.6, 1.625, 1.65, 1.675, 1.7, 1.725, 1.75, 1.775, 1.8, 1.825, 1.85, 1.875 ),
"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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
"update": 1,
"values": [ 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ]
}
[sub_resource type="Animation" id=10]
length = 1.9
step = 0.025
tracks/0/type = "value"
@@ -107,9 +500,8 @@ tracks/5/keys = {
"values": [ 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ]
}
[sub_resource type="Animation" id=6]
[sub_resource type="Animation" id=11]
length = 2.66666
loop = true
step = 0.0111111
tracks/0/type = "value"
tracks/0/path = NodePath("Sprite:frame")
@@ -130,10 +522,10 @@ tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ ExtResource( 5 ) ]
"times": PoolRealArray( 0, 2.66666 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ ExtResource( 5 ), ExtResource( 5 ) ]
}
tracks/2/type = "value"
tracks/2/path = NodePath("Sprite:vframes")
@@ -184,9 +576,8 @@ tracks/5/keys = {
"values": [ false ]
}
[sub_resource type="Animation" id=7]
[sub_resource type="Animation" id=12]
length = 1.28333
loop = true
step = 0.0166667
tracks/0/type = "value"
tracks/0/path = NodePath("Sprite:frame")
@@ -207,10 +598,10 @@ tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ ExtResource( 6 ) ]
"times": PoolRealArray( 0, 1.28333 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ ExtResource( 6 ), ExtResource( 6 ) ]
}
tracks/2/type = "value"
tracks/2/path = NodePath("Sprite:vframes")
@@ -261,9 +652,8 @@ tracks/5/keys = {
"values": [ true ]
}
[sub_resource type="Animation" id=8]
[sub_resource type="Animation" id=13]
length = 1.28333
loop = true
step = 0.0166667
tracks/0/type = "value"
tracks/0/path = NodePath("Sprite:frame")
@@ -284,10 +674,10 @@ tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ ExtResource( 6 ) ]
"times": PoolRealArray( 0, 1.28334 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ ExtResource( 6 ), ExtResource( 6 ) ]
}
tracks/2/type = "value"
tracks/2/path = NodePath("Sprite:vframes")
@@ -338,9 +728,8 @@ tracks/5/keys = {
"values": [ false ]
}
[sub_resource type="Animation" id=9]
[sub_resource type="Animation" id=14]
length = 1.28333
loop = true
step = 0.0166667
tracks/0/type = "value"
tracks/0/path = NodePath("Sprite:texture")
@@ -349,10 +738,10 @@ tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ ExtResource( 11 ) ]
"times": PoolRealArray( 0, 1.28334 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ ExtResource( 11 ), ExtResource( 11 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("Sprite:vframes")
@@ -415,37 +804,6 @@ tracks/5/keys = {
"values": [ Vector2( 0, -28 ) ]
}
[sub_resource type="AnimationNodeAnimation" id=10]
animation = "MoveRight"
[sub_resource type="AnimationNodeAnimation" id=11]
animation = "MoveUp"
[sub_resource type="AnimationNodeAnimation" id=12]
animation = "MoveDown"
[sub_resource type="AnimationNodeAnimation" id=13]
animation = "MoveLeft"
[sub_resource type="AnimationNodeBlendSpace2D" id=14]
blend_point_0/node = SubResource( 10 )
blend_point_0/pos = Vector2( 1, 0 )
blend_point_1/node = SubResource( 11 )
blend_point_1/pos = Vector2( 0, -1.1 )
blend_point_2/node = SubResource( 12 )
blend_point_2/pos = Vector2( 0, 1.1 )
blend_point_3/node = SubResource( 13 )
blend_point_3/pos = Vector2( -1, 0 )
min_space = Vector2( -1, -1.1 )
max_space = Vector2( 1, 1.1 )
blend_mode = 1
[sub_resource type="AnimationNodeStateMachine" id=15]
states/move/node = SubResource( 14 )
states/move/position = Vector2( 143, 70 )
[sub_resource type="AnimationNodeStateMachinePlayback" id=16]
[node name="SlimeBoss" type="KinematicBody2D"]
collision_layer = 4
collision_mask = 3
@@ -456,6 +814,12 @@ __meta__ = {
[node name="Kind" parent="." instance=ExtResource( 13 )]
[node name="Effects" type="Node2D" parent="."]
[node name="ChargeEffect" parent="Effects" instance=ExtResource( 18 )]
position = Vector2( 0, -8 )
emitting = false
[node name="Stats" parent="." instance=ExtResource( 3 )]
max_health = 3
@@ -476,15 +840,49 @@ one_shot = true
[node name="MoveToRandomPosition" type="Node" parent="States/RoamSequence"]
script = ExtResource( 12 )
[node name="Timer" type="Timer" parent="States/RoamSequence/MoveToRandomPosition"]
one_shot = true
[node name="ChargeSequence" type="Node" parent="States"]
script = ExtResource( 15 )
[node name="Charge" type="Node" parent="States/ChargeSequence"]
script = ExtResource( 16 )
[node name="Timer" type="Timer" parent="States/ChargeSequence/Charge"]
wait_time = 0.8
one_shot = true
[node name="Sprint" type="Node" parent="States/ChargeSequence"]
script = ExtResource( 17 )
[node name="Wait" type="Node" parent="States/ChargeSequence"]
script = ExtResource( 8 )
[node name="Timer" type="Timer" parent="States/ChargeSequence/Wait"]
wait_time = 0.25
one_shot = true
[node name="ReturnToCenter" type="Node" parent="States"]
script = ExtResource( 19 )
[node name="Stomp" type="Node" parent="States"]
script = ExtResource( 20 )
[node name="Sprite" type="Sprite" parent="."]
position = Vector2( -5, -28 )
position = Vector2( 5, -28 )
texture = ExtResource( 6 )
flip_h = true
vframes = 7
hframes = 11
frame = 50
[node name="StompHitbox" parent="." instance=ExtResource( 2 )]
[node name="CollisionShape2D" parent="StompHitbox" index="0"]
shape = SubResource( 15 )
disabled = true
[node name="Hitbox" parent="." instance=ExtResource( 2 )]
visible = false
collision_layer = 4
[node name="CollisionShape2D" parent="Hitbox" index="0"]
@@ -512,6 +910,7 @@ rotation = 1.5708
shape = SubResource( 4 )
[node name="DebugLabel" type="Label" parent="."]
visible = false
margin_left = -42.2456
margin_top = -65.04
margin_right = 42.7544
@@ -523,22 +922,23 @@ __meta__ = {
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
autoplay = "MoveRight"
anims/FightStart = SubResource( 5 )
anims/MoveDown = SubResource( 6 )
anims/MoveLeft = SubResource( 7 )
anims/MoveRight = SubResource( 8 )
anims/MoveUp = SubResource( 9 )
[node name="AnimationTree" type="AnimationTree" parent="."]
tree_root = SubResource( 15 )
anim_player = NodePath("../AnimationPlayer")
active = true
parameters/playback = SubResource( 16 )
parameters/move/blend_position = Vector2( 0.210872, 0.275 )
anims/ChargeDown = SubResource( 5 )
anims/ChargeLeft = SubResource( 6 )
anims/ChargeRight = SubResource( 7 )
anims/ChargeUp = SubResource( 8 )
anims/Charging = SubResource( 9 )
anims/FightStart = SubResource( 10 )
anims/MoveDown = SubResource( 11 )
anims/MoveLeft = SubResource( 12 )
anims/MoveRight = SubResource( 13 )
anims/MoveUp = SubResource( 14 )
[connection signal="health_changed" from="Stats" to="." method="_on_Stats_health_changed"]
[connection signal="no_health" from="Stats" to="." method="_on_Stats_no_health"]
[connection signal="area_entered" from="Hurtbox" to="." method="_on_Hurtbox_area_entered"]
[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_finished"]
[editable path="StompHitbox"]
[editable path="Hitbox"]
[editable path="Hurtbox"]

View File

@@ -1,6 +1,5 @@
extends KinematicBody2D
onready var animation_playback = $AnimationTree.get("parameters/playback")
signal target_position_changed
signal state_changed(new_state_name)
signal phase_changed(new_phase_name)
@@ -8,7 +7,7 @@ signal phase_changed(new_phase_name)
export(float) var MASS = 8.0
onready var start_global_position = global_position
var target_position = Vector2()
var last_look = Vector2()
var state_active = null
var sequence_cycles = 0
@@ -26,7 +25,7 @@ func _ready():
if get_parent().has_node('Player'):
var player_node = get_parent().get_node('Player')
player_node.connect('position_changed', self, '_on_target_position_changed')
target_position = player_node.global_position
# target_position = player_node.global_position
for state_node in $States.get_children():
state_node.connect('finished', self, '_on_active_state_finished')
@@ -51,6 +50,15 @@ func _on_Stats_no_health():
set_invincible(true)
go_to_next_state($States/Die)
func _on_Stats_health_changed(new_health):
assert(new_health > -1)
assert(new_health < $Stats.max_health)
if _phase == PHASES.PHASE_ONE and new_health == 2:
_change_phase(PHASES.PHASE_TWO)
if _phase == PHASES.PHASE_TWO and new_health == 1:
_change_phase(PHASES.PHASE_THREE)
func go_to_next_state(state_override=null):
if state_active:
@@ -63,18 +71,6 @@ func go_to_next_state(state_override=null):
emit_signal("state_changed", state_active.name)
state_active.enter()
func _on_Health_health_changed(new_health):
$Tween.interpolate_property($Pivot, 'scale', Vector2(0.92, 1.12), Vector2(1.0, 1.0), 0.3, Tween.TRANS_ELASTIC, Tween.EASE_IN_OUT)
$Tween.interpolate_property($Pivot/Body, 'modulate', Color('#ff48de'), Color('#ffffff'), 0.2, Tween.TRANS_QUINT, Tween.EASE_IN)
$Tween.start()
if _phase == PHASES.PHASE_ONE and new_health < 100:
_change_phase(PHASES.PHASE_TWO)
if _phase == PHASES.PHASE_TWO and new_health < 50:
_change_phase(PHASES.PHASE_THREE)
func _change_phase(new_phase):
var phase_name = ""
match new_phase:
@@ -92,20 +88,35 @@ func _change_phase(new_phase):
_phase = new_phase
# The AI's brain. This function defines the flow of states
# That's a big advantage of the state pattern
# If it grows too big you can swap it with a node
# Or move the flow of states to a data file, like JSON or a text file
var angry_phases_done = 0
func _decide_on_next_state():
# Battle start
if state_active == null:
set_invincible(true)
return $States/FightStart
if state_active == $States/FightStart:
set_invincible(false)
return $States/RoamSequence
if state_active == $States/RoamSequence:
return $States/FightStart
# set_invincible(false)
return $States/ChargeSequence
if _phase == PHASES.PHASE_ONE:
if angry_phases_done < 1:
set_invincible(true)
sequence_cycles += 1
if sequence_cycles < 4:
return $States/ChargeSequence
else:
angry_phases_done = 1
sequence_cycles = 0
return $States/ReturnToCenter
else:
if state_active == $States/ReturnToCenter:
return $States/Stomp # TODO: Maybe Stomp.
if state_active == $States/Stomp:
set_invincible(false)
return $States/RoamSequence
if state_active == $States/RoamSequence:
return $States/RoamSequence
# # Death
# if state_active == $States/Die:
@@ -159,23 +170,11 @@ func _decide_on_next_state():
# return $States/Stomp
# Using a public method makes it so we can change the entire particle setup anytime
func set_particles_active(value):
$DustPuffsLarge.emitting = value
# Same thing here, we will likely need more collision shapes in the final version
# So using a function we can group these disabled toggles together
func set_invincible(value):
$CollisionShape2D.disabled = value
$Hitbox/CollisionShape2D.disabled = value
# $CollisionShape2D.disabled = value
# $Hitbox/CollisionShape2D.disabled = value
$Hurtbox/CollisionShape2D.disabled = value
func _on_target_position_changed(new_position):
target_position = new_position
func _on_Hurtbox_area_entered(area):
$Stats.health -= area.damage

View File

@@ -1,20 +1,42 @@
extends "res://Overlap/StateMachine/State.gd"
onready var animation_player = owner.get_node("AnimationPlayer")
onready var animation_tree = owner.get_node("AnimationTree")
onready var animation_playback = animation_tree.get("parameters/playback")
var _animation_type = ANIMATION_TYPE.TREE
enum ANIMATION_TYPE {
PLAYER,
TREE
}
func set_animation_type(val):
print("wow")
_animation_type = val
animation_player.playback_active = _animation_type == ANIMATION_TYPE.PLAYER
animation_tree.active = _animation_type == ANIMATION_TYPE.TREE
func play_directional_animation(name, vec):
var anim_name = name + get_nearest_diretion(vec)
if animation_player.current_animation != anim_name:
animation_player.play(anim_name)
func get_base_anim_name(name):
var base_name = name[0]
for i in range(1, len(name)):
if name[i] == name[i].to_upper():
return base_name
base_name += name[i]
func get_nearest_diretion(vec):
var directions = {
"Up": Vector2(0, -1.1),
"Down": Vector2(0, 1.1),
"Left": Vector2(-1.0, 0),
"Right": Vector2(1.0, 0)
}
var nearest_direction = "Left"
var smallest_distance = 999999999
for direction in directions.keys():
var vector = directions.get(direction)
var distance = vec.distance_to(vector)
if distance < smallest_distance:
nearest_direction = direction
smallest_distance = distance
return nearest_direction

View File

@@ -1,7 +1,16 @@
extends "res://Overlap/StateMachine/State.gd"
extends "res://Boss/SlimeBoss/States/BossState.gd"
onready var charge_effect = owner.get_node("Effects/ChargeEffect")
func enter():
owner.get_node('AnimationPlayer').play('prepare')
charge_effect.emitting = true
animation_player.play('Charging')
$Timer.start()
func _on_animation_finished(anim_name):
emit_signal('finished')
func exit():
charge_effect.emitting = false
$Timer.stop()
func update(delta):
if $Timer.time_left <= 0.0:
emit_signal('finished')

View File

@@ -1,23 +1,19 @@
extends "res://Boss/SlimeBoss/States/BossState.gd"
export(float) var SPEED = 1000.0
export(float) var SPEED = 800.0
var player_pos = owner.get_parent().get_node("Player").global_position
var direction = Vector2()
func enter():
# Set animation
set_animation_type(ANIMATION_TYPE.TREE)
animation_playback.play("move")
var player_pos = owner.get_parent().get_node("Player").global_position
direction = (player_pos - owner.global_position).normalized()
owner.set_particles_active(true)
func exit():
owner.set_particles_active(false)
owner.last_look = direction
func update(delta):
owner.move_and_slide(SPEED * direction)
var last_vel = owner.move_and_slide(SPEED * direction)
play_directional_animation("Move", last_vel)
if owner.get_slide_count() > 0 or owner.position.x > 1800:
emit_signal('finished')

View File

@@ -1,8 +1,6 @@
extends "BossState.gd"
func enter():
animation_tree.active = false
animation_player.playback_active = true
animation_player.play('FightStart')
func _on_animation_finished(anim_name):

View File

@@ -0,0 +1,21 @@
extends "res://Boss/SlimeBoss/States/BossState.gd"
export(float) var MASS = 4.0
export(float) var SLOW_RADIUS = 200.0
export(float) var MAX_SPEED = 300.0
export(float) var ARRIVE_DISTANCE = 6.0
var velocity = Vector2.ZERO
var center = Vector2.ZERO
func update(delta):
velocity = Steering.arrive_to(velocity,
owner.global_position,
owner.start_global_position,
MASS,
SLOW_RADIUS,
MAX_SPEED)
play_directional_animation("Move", velocity)
owner.move_and_slide(velocity)
if owner.global_position.distance_to(owner.start_global_position) < ARRIVE_DISTANCE:
emit_signal('finished')

View File

@@ -14,22 +14,23 @@ var velocity = Vector2()
var last_vel = Vector2()
func enter():
# Set animation
set_animation_type(ANIMATION_TYPE.TREE)
animation_playback.start("move")
time_since_start = 0
start_position = get_parent().start_position
target_position = calculate_new_target_position()
$Timer.start()
func exit():
owner.last_look = last_vel
$Timer.stop()
func update(delta):
# Set animation
velocity = Steering.arrive_to(velocity, owner.global_position, target_position, MASS, SLOW_RADIUS, MAX_SPEED)
time_since_start += delta
last_vel = owner.move_and_slide(velocity)
animation_tree.set("parameters/move/blend_position", last_vel)
if owner.global_position.distance_to(target_position) < ARRIVE_DISTANCE or time_since_start > 2.0:
play_directional_animation("Move", last_vel)
if owner.global_position.distance_to(target_position) < ARRIVE_DISTANCE or $Timer.time_left <= 0.0:
emit_signal('finished')

View File

@@ -0,0 +1,18 @@
extends "res://Boss/SlimeBoss/States/BossState.gd"
onready var stomp_hitbox = owner.get_node("StompHitbox/CollisionShape2D")
func enter():
stomp_hitbox.disabled = false
func exit():
stomp_hitbox.disabled = true
func update(delta):
play_directional_animation("Charge", owner.last_look)
func _on_animation_finished(anim_name):
anim_name = get_base_anim_name(anim_name)
assert(anim_name == "Charge")
emit_signal("finished")

View File

@@ -1,8 +1,6 @@
extends "res://Boss/SlimeBoss/States/BossState.gd"
func enter():
set_animation_type(ANIMATION_TYPE.PLAYER)
# owner.get_node('AnimationPlayer').play('idle')
$Timer.start()
func update(delta):

View File

@@ -0,0 +1,20 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://Effects/Charge/charge.png" type="Texture" id=1]
[sub_resource type="ParticlesMaterial" id=1]
emission_shape = 2
emission_box_extents = Vector3( 50, 20, 1 )
flag_disable_z = true
gravity = Vector3( 0, -40, 0 )
orbit_velocity = 0.0
orbit_velocity_random = 0.0
tangential_accel = 80.0
scale = 0.1
scale_random = 1.0
[node name="ChargeEffect" type="Particles2D"]
amount = 20
lifetime = 0.8
process_material = SubResource( 1 )
texture = ExtResource( 1 )

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/charge.png-ac36c6bab3ea421fea437d8d775673a9.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Effects/Charge/charge.png"
dest_files=[ "res://.import/charge.png-ac36c6bab3ea421fea437d8d775673a9.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=false
svg/scale=1.0

View File

@@ -7,6 +7,7 @@ export(float) var max_speed := 125.0
onready var speed := max_speed setget set_speed
signal no_health
signal health_changed
func set_health(value):
if value > max_health:
@@ -15,6 +16,8 @@ func set_health(value):
health = value
if health < 1:
emit_signal("no_health")
emit_signal("health_changed", health)
func set_speed(value):
if value > max_speed:

View File

@@ -23,7 +23,7 @@ region_enabled = true
region_rect = Rect2( 0, 0, 1280, 720 )
[node name="Background" parent="." instance=ExtResource( 7 )]
frame = 50
frame = 5
[node name="FloorTileMap" type="TileMap" parent="."]
visible = false
@@ -45,14 +45,14 @@ __meta__ = {
position = Vector2( 265.543, -16 )
[node name="Player" parent="YSort" instance=ExtResource( 1 )]
position = Vector2( 344, 125.768 )
position = Vector2( 432, 168 )
scale = Vector2( 2, 2 )
debug = true
ROLL_SPEED = 140
FRICTION = 200
[node name="SlimeBoss" parent="YSort" instance=ExtResource( 8 )]
position = Vector2( 104, 80 )
position = Vector2( 240, 120 )
[node name="Grid" parent="." instance=ExtResource( 18 )]