mirror of
https://github.com/creyD/ludum_dare_46.git
synced 2026-06-17 15:40:20 +02:00
Progress on the boss
This commit is contained in:
@@ -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/Hurtbox.tscn" type="PackedScene" id=1]
|
||||||
[ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=2]
|
[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_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/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/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/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_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/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://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://Overlap/Kind.tscn" type="PackedScene" id=13]
|
||||||
[ext_resource path="res://Boss/SlimeBoss/HeroCloseZone.gd" type="Script" id=14]
|
[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]
|
[sub_resource type="CapsuleShape2D" id=1]
|
||||||
radius = 18.0
|
radius = 18.0
|
||||||
@@ -31,7 +40,391 @@ radius = 8.0
|
|||||||
height = 32.0
|
height = 32.0
|
||||||
|
|
||||||
[sub_resource type="Animation" id=5]
|
[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
|
length = 1.9
|
||||||
step = 0.025
|
step = 0.025
|
||||||
tracks/0/type = "value"
|
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 ]
|
"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
|
length = 2.66666
|
||||||
loop = true
|
|
||||||
step = 0.0111111
|
step = 0.0111111
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
tracks/0/path = NodePath("Sprite:frame")
|
tracks/0/path = NodePath("Sprite:frame")
|
||||||
@@ -130,10 +522,10 @@ tracks/1/loop_wrap = true
|
|||||||
tracks/1/imported = false
|
tracks/1/imported = false
|
||||||
tracks/1/enabled = true
|
tracks/1/enabled = true
|
||||||
tracks/1/keys = {
|
tracks/1/keys = {
|
||||||
"times": PoolRealArray( 0 ),
|
"times": PoolRealArray( 0, 2.66666 ),
|
||||||
"transitions": PoolRealArray( 1 ),
|
"transitions": PoolRealArray( 1, 1 ),
|
||||||
"update": 1,
|
"update": 0,
|
||||||
"values": [ ExtResource( 5 ) ]
|
"values": [ ExtResource( 5 ), ExtResource( 5 ) ]
|
||||||
}
|
}
|
||||||
tracks/2/type = "value"
|
tracks/2/type = "value"
|
||||||
tracks/2/path = NodePath("Sprite:vframes")
|
tracks/2/path = NodePath("Sprite:vframes")
|
||||||
@@ -184,9 +576,8 @@ tracks/5/keys = {
|
|||||||
"values": [ false ]
|
"values": [ false ]
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id=7]
|
[sub_resource type="Animation" id=12]
|
||||||
length = 1.28333
|
length = 1.28333
|
||||||
loop = true
|
|
||||||
step = 0.0166667
|
step = 0.0166667
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
tracks/0/path = NodePath("Sprite:frame")
|
tracks/0/path = NodePath("Sprite:frame")
|
||||||
@@ -207,10 +598,10 @@ tracks/1/loop_wrap = true
|
|||||||
tracks/1/imported = false
|
tracks/1/imported = false
|
||||||
tracks/1/enabled = true
|
tracks/1/enabled = true
|
||||||
tracks/1/keys = {
|
tracks/1/keys = {
|
||||||
"times": PoolRealArray( 0 ),
|
"times": PoolRealArray( 0, 1.28333 ),
|
||||||
"transitions": PoolRealArray( 1 ),
|
"transitions": PoolRealArray( 1, 1 ),
|
||||||
"update": 1,
|
"update": 0,
|
||||||
"values": [ ExtResource( 6 ) ]
|
"values": [ ExtResource( 6 ), ExtResource( 6 ) ]
|
||||||
}
|
}
|
||||||
tracks/2/type = "value"
|
tracks/2/type = "value"
|
||||||
tracks/2/path = NodePath("Sprite:vframes")
|
tracks/2/path = NodePath("Sprite:vframes")
|
||||||
@@ -261,9 +652,8 @@ tracks/5/keys = {
|
|||||||
"values": [ true ]
|
"values": [ true ]
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id=8]
|
[sub_resource type="Animation" id=13]
|
||||||
length = 1.28333
|
length = 1.28333
|
||||||
loop = true
|
|
||||||
step = 0.0166667
|
step = 0.0166667
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
tracks/0/path = NodePath("Sprite:frame")
|
tracks/0/path = NodePath("Sprite:frame")
|
||||||
@@ -284,10 +674,10 @@ tracks/1/loop_wrap = true
|
|||||||
tracks/1/imported = false
|
tracks/1/imported = false
|
||||||
tracks/1/enabled = true
|
tracks/1/enabled = true
|
||||||
tracks/1/keys = {
|
tracks/1/keys = {
|
||||||
"times": PoolRealArray( 0 ),
|
"times": PoolRealArray( 0, 1.28334 ),
|
||||||
"transitions": PoolRealArray( 1 ),
|
"transitions": PoolRealArray( 1, 1 ),
|
||||||
"update": 1,
|
"update": 0,
|
||||||
"values": [ ExtResource( 6 ) ]
|
"values": [ ExtResource( 6 ), ExtResource( 6 ) ]
|
||||||
}
|
}
|
||||||
tracks/2/type = "value"
|
tracks/2/type = "value"
|
||||||
tracks/2/path = NodePath("Sprite:vframes")
|
tracks/2/path = NodePath("Sprite:vframes")
|
||||||
@@ -338,9 +728,8 @@ tracks/5/keys = {
|
|||||||
"values": [ false ]
|
"values": [ false ]
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id=9]
|
[sub_resource type="Animation" id=14]
|
||||||
length = 1.28333
|
length = 1.28333
|
||||||
loop = true
|
|
||||||
step = 0.0166667
|
step = 0.0166667
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
tracks/0/path = NodePath("Sprite:texture")
|
tracks/0/path = NodePath("Sprite:texture")
|
||||||
@@ -349,10 +738,10 @@ tracks/0/loop_wrap = true
|
|||||||
tracks/0/imported = false
|
tracks/0/imported = false
|
||||||
tracks/0/enabled = true
|
tracks/0/enabled = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PoolRealArray( 0 ),
|
"times": PoolRealArray( 0, 1.28334 ),
|
||||||
"transitions": PoolRealArray( 1 ),
|
"transitions": PoolRealArray( 1, 1 ),
|
||||||
"update": 1,
|
"update": 0,
|
||||||
"values": [ ExtResource( 11 ) ]
|
"values": [ ExtResource( 11 ), ExtResource( 11 ) ]
|
||||||
}
|
}
|
||||||
tracks/1/type = "value"
|
tracks/1/type = "value"
|
||||||
tracks/1/path = NodePath("Sprite:vframes")
|
tracks/1/path = NodePath("Sprite:vframes")
|
||||||
@@ -415,37 +804,6 @@ tracks/5/keys = {
|
|||||||
"values": [ Vector2( 0, -28 ) ]
|
"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"]
|
[node name="SlimeBoss" type="KinematicBody2D"]
|
||||||
collision_layer = 4
|
collision_layer = 4
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
@@ -456,6 +814,12 @@ __meta__ = {
|
|||||||
|
|
||||||
[node name="Kind" parent="." instance=ExtResource( 13 )]
|
[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 )]
|
[node name="Stats" parent="." instance=ExtResource( 3 )]
|
||||||
max_health = 3
|
max_health = 3
|
||||||
|
|
||||||
@@ -476,15 +840,49 @@ one_shot = true
|
|||||||
[node name="MoveToRandomPosition" type="Node" parent="States/RoamSequence"]
|
[node name="MoveToRandomPosition" type="Node" parent="States/RoamSequence"]
|
||||||
script = ExtResource( 12 )
|
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="."]
|
[node name="Sprite" type="Sprite" parent="."]
|
||||||
position = Vector2( -5, -28 )
|
position = Vector2( 5, -28 )
|
||||||
texture = ExtResource( 6 )
|
texture = ExtResource( 6 )
|
||||||
|
flip_h = true
|
||||||
vframes = 7
|
vframes = 7
|
||||||
hframes = 11
|
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 )]
|
[node name="Hitbox" parent="." instance=ExtResource( 2 )]
|
||||||
visible = false
|
|
||||||
collision_layer = 4
|
collision_layer = 4
|
||||||
|
|
||||||
[node name="CollisionShape2D" parent="Hitbox" index="0"]
|
[node name="CollisionShape2D" parent="Hitbox" index="0"]
|
||||||
@@ -512,6 +910,7 @@ rotation = 1.5708
|
|||||||
shape = SubResource( 4 )
|
shape = SubResource( 4 )
|
||||||
|
|
||||||
[node name="DebugLabel" type="Label" parent="."]
|
[node name="DebugLabel" type="Label" parent="."]
|
||||||
|
visible = false
|
||||||
margin_left = -42.2456
|
margin_left = -42.2456
|
||||||
margin_top = -65.04
|
margin_top = -65.04
|
||||||
margin_right = 42.7544
|
margin_right = 42.7544
|
||||||
@@ -523,22 +922,23 @@ __meta__ = {
|
|||||||
|
|
||||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
autoplay = "MoveRight"
|
autoplay = "MoveRight"
|
||||||
anims/FightStart = SubResource( 5 )
|
anims/ChargeDown = SubResource( 5 )
|
||||||
anims/MoveDown = SubResource( 6 )
|
anims/ChargeLeft = SubResource( 6 )
|
||||||
anims/MoveLeft = SubResource( 7 )
|
anims/ChargeRight = SubResource( 7 )
|
||||||
anims/MoveRight = SubResource( 8 )
|
anims/ChargeUp = SubResource( 8 )
|
||||||
anims/MoveUp = SubResource( 9 )
|
anims/Charging = SubResource( 9 )
|
||||||
|
anims/FightStart = SubResource( 10 )
|
||||||
[node name="AnimationTree" type="AnimationTree" parent="."]
|
anims/MoveDown = SubResource( 11 )
|
||||||
tree_root = SubResource( 15 )
|
anims/MoveLeft = SubResource( 12 )
|
||||||
anim_player = NodePath("../AnimationPlayer")
|
anims/MoveRight = SubResource( 13 )
|
||||||
active = true
|
anims/MoveUp = SubResource( 14 )
|
||||||
parameters/playback = SubResource( 16 )
|
[connection signal="health_changed" from="Stats" to="." method="_on_Stats_health_changed"]
|
||||||
parameters/move/blend_position = Vector2( 0.210872, 0.275 )
|
|
||||||
[connection signal="no_health" from="Stats" to="." method="_on_Stats_no_health"]
|
[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="area_entered" from="Hurtbox" to="." method="_on_Hurtbox_area_entered"]
|
||||||
[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_finished"]
|
[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_finished"]
|
||||||
|
|
||||||
|
[editable path="StompHitbox"]
|
||||||
|
|
||||||
[editable path="Hitbox"]
|
[editable path="Hitbox"]
|
||||||
|
|
||||||
[editable path="Hurtbox"]
|
[editable path="Hurtbox"]
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
extends KinematicBody2D
|
extends KinematicBody2D
|
||||||
|
|
||||||
onready var animation_playback = $AnimationTree.get("parameters/playback")
|
|
||||||
signal target_position_changed
|
signal target_position_changed
|
||||||
signal state_changed(new_state_name)
|
signal state_changed(new_state_name)
|
||||||
signal phase_changed(new_phase_name)
|
signal phase_changed(new_phase_name)
|
||||||
@@ -8,7 +7,7 @@ signal phase_changed(new_phase_name)
|
|||||||
export(float) var MASS = 8.0
|
export(float) var MASS = 8.0
|
||||||
onready var start_global_position = global_position
|
onready var start_global_position = global_position
|
||||||
|
|
||||||
var target_position = Vector2()
|
var last_look = Vector2()
|
||||||
|
|
||||||
var state_active = null
|
var state_active = null
|
||||||
var sequence_cycles = 0
|
var sequence_cycles = 0
|
||||||
@@ -26,7 +25,7 @@ func _ready():
|
|||||||
if get_parent().has_node('Player'):
|
if get_parent().has_node('Player'):
|
||||||
var player_node = get_parent().get_node('Player')
|
var player_node = get_parent().get_node('Player')
|
||||||
player_node.connect('position_changed', self, '_on_target_position_changed')
|
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():
|
for state_node in $States.get_children():
|
||||||
state_node.connect('finished', self, '_on_active_state_finished')
|
state_node.connect('finished', self, '_on_active_state_finished')
|
||||||
@@ -51,6 +50,15 @@ func _on_Stats_no_health():
|
|||||||
set_invincible(true)
|
set_invincible(true)
|
||||||
go_to_next_state($States/Die)
|
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):
|
func go_to_next_state(state_override=null):
|
||||||
if state_active:
|
if state_active:
|
||||||
@@ -63,18 +71,6 @@ func go_to_next_state(state_override=null):
|
|||||||
emit_signal("state_changed", state_active.name)
|
emit_signal("state_changed", state_active.name)
|
||||||
state_active.enter()
|
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):
|
func _change_phase(new_phase):
|
||||||
var phase_name = ""
|
var phase_name = ""
|
||||||
match new_phase:
|
match new_phase:
|
||||||
@@ -92,20 +88,35 @@ func _change_phase(new_phase):
|
|||||||
_phase = new_phase
|
_phase = new_phase
|
||||||
|
|
||||||
|
|
||||||
# The AI's brain. This function defines the flow of states
|
var angry_phases_done = 0
|
||||||
# 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
|
|
||||||
func _decide_on_next_state():
|
func _decide_on_next_state():
|
||||||
# Battle start
|
# Battle start
|
||||||
if state_active == null:
|
if state_active == null:
|
||||||
set_invincible(true)
|
set_invincible(true)
|
||||||
return $States/FightStart
|
return $States/FightStart
|
||||||
if state_active == $States/FightStart:
|
if state_active == $States/FightStart:
|
||||||
set_invincible(false)
|
# set_invincible(false)
|
||||||
return $States/RoamSequence
|
return $States/ChargeSequence
|
||||||
if state_active == $States/RoamSequence:
|
|
||||||
return $States/FightStart
|
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
|
# # Death
|
||||||
# if state_active == $States/Die:
|
# if state_active == $States/Die:
|
||||||
@@ -159,23 +170,11 @@ func _decide_on_next_state():
|
|||||||
# return $States/Stomp
|
# 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):
|
func set_invincible(value):
|
||||||
$CollisionShape2D.disabled = value
|
# $CollisionShape2D.disabled = value
|
||||||
$Hitbox/CollisionShape2D.disabled = value
|
# $Hitbox/CollisionShape2D.disabled = value
|
||||||
$Hurtbox/CollisionShape2D.disabled = value
|
$Hurtbox/CollisionShape2D.disabled = value
|
||||||
|
|
||||||
|
|
||||||
func _on_target_position_changed(new_position):
|
|
||||||
target_position = new_position
|
|
||||||
|
|
||||||
|
|
||||||
func _on_Hurtbox_area_entered(area):
|
func _on_Hurtbox_area_entered(area):
|
||||||
$Stats.health -= area.damage
|
$Stats.health -= area.damage
|
||||||
|
|
||||||
|
|||||||
@@ -1,20 +1,42 @@
|
|||||||
extends "res://Overlap/StateMachine/State.gd"
|
extends "res://Overlap/StateMachine/State.gd"
|
||||||
|
|
||||||
onready var animation_player = owner.get_node("AnimationPlayer")
|
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
|
func play_directional_animation(name, vec):
|
||||||
|
var anim_name = name + get_nearest_diretion(vec)
|
||||||
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
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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():
|
func enter():
|
||||||
owner.get_node('AnimationPlayer').play('prepare')
|
charge_effect.emitting = true
|
||||||
|
animation_player.play('Charging')
|
||||||
|
$Timer.start()
|
||||||
|
|
||||||
func _on_animation_finished(anim_name):
|
func exit():
|
||||||
emit_signal('finished')
|
charge_effect.emitting = false
|
||||||
|
$Timer.stop()
|
||||||
|
|
||||||
|
func update(delta):
|
||||||
|
if $Timer.time_left <= 0.0:
|
||||||
|
emit_signal('finished')
|
||||||
|
|||||||
@@ -1,23 +1,19 @@
|
|||||||
extends "res://Boss/SlimeBoss/States/BossState.gd"
|
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()
|
var direction = Vector2()
|
||||||
|
|
||||||
func enter():
|
func enter():
|
||||||
# Set animation
|
var player_pos = owner.get_parent().get_node("Player").global_position
|
||||||
set_animation_type(ANIMATION_TYPE.TREE)
|
|
||||||
animation_playback.play("move")
|
|
||||||
|
|
||||||
direction = (player_pos - owner.global_position).normalized()
|
direction = (player_pos - owner.global_position).normalized()
|
||||||
owner.set_particles_active(true)
|
|
||||||
|
|
||||||
func exit():
|
func exit():
|
||||||
owner.set_particles_active(false)
|
owner.last_look = direction
|
||||||
|
|
||||||
func update(delta):
|
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:
|
if owner.get_slide_count() > 0 or owner.position.x > 1800:
|
||||||
emit_signal('finished')
|
emit_signal('finished')
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
extends "BossState.gd"
|
extends "BossState.gd"
|
||||||
|
|
||||||
func enter():
|
func enter():
|
||||||
animation_tree.active = false
|
|
||||||
animation_player.playback_active = true
|
|
||||||
animation_player.play('FightStart')
|
animation_player.play('FightStart')
|
||||||
|
|
||||||
func _on_animation_finished(anim_name):
|
func _on_animation_finished(anim_name):
|
||||||
|
|||||||
21
src/Boss/SlimeBoss/States/ReturnToCenter.gd
Normal file
21
src/Boss/SlimeBoss/States/ReturnToCenter.gd
Normal 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')
|
||||||
@@ -14,22 +14,23 @@ var velocity = Vector2()
|
|||||||
var last_vel = Vector2()
|
var last_vel = Vector2()
|
||||||
|
|
||||||
func enter():
|
func enter():
|
||||||
# Set animation
|
|
||||||
set_animation_type(ANIMATION_TYPE.TREE)
|
|
||||||
animation_playback.start("move")
|
|
||||||
|
|
||||||
time_since_start = 0
|
|
||||||
start_position = get_parent().start_position
|
start_position = get_parent().start_position
|
||||||
target_position = calculate_new_target_position()
|
target_position = calculate_new_target_position()
|
||||||
|
$Timer.start()
|
||||||
|
|
||||||
|
func exit():
|
||||||
|
owner.last_look = last_vel
|
||||||
|
$Timer.stop()
|
||||||
|
|
||||||
|
|
||||||
func update(delta):
|
func update(delta):
|
||||||
|
# Set animation
|
||||||
velocity = Steering.arrive_to(velocity, owner.global_position, target_position, MASS, SLOW_RADIUS, MAX_SPEED)
|
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)
|
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')
|
emit_signal('finished')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
18
src/Boss/SlimeBoss/States/Stomp.gd
Normal file
18
src/Boss/SlimeBoss/States/Stomp.gd
Normal 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")
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
extends "res://Boss/SlimeBoss/States/BossState.gd"
|
extends "res://Boss/SlimeBoss/States/BossState.gd"
|
||||||
|
|
||||||
func enter():
|
func enter():
|
||||||
set_animation_type(ANIMATION_TYPE.PLAYER)
|
|
||||||
# owner.get_node('AnimationPlayer').play('idle')
|
|
||||||
$Timer.start()
|
$Timer.start()
|
||||||
|
|
||||||
func update(delta):
|
func update(delta):
|
||||||
20
src/Effects/Charge/ChargeEffect.tscn
Normal file
20
src/Effects/Charge/ChargeEffect.tscn
Normal 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 )
|
||||||
BIN
src/Effects/Charge/charge.png
Normal file
BIN
src/Effects/Charge/charge.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 143 B |
34
src/Effects/Charge/charge.png.import
Normal file
34
src/Effects/Charge/charge.png.import
Normal 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
|
||||||
@@ -7,6 +7,7 @@ export(float) var max_speed := 125.0
|
|||||||
onready var speed := max_speed setget set_speed
|
onready var speed := max_speed setget set_speed
|
||||||
|
|
||||||
signal no_health
|
signal no_health
|
||||||
|
signal health_changed
|
||||||
|
|
||||||
func set_health(value):
|
func set_health(value):
|
||||||
if value > max_health:
|
if value > max_health:
|
||||||
@@ -15,6 +16,8 @@ func set_health(value):
|
|||||||
health = value
|
health = value
|
||||||
if health < 1:
|
if health < 1:
|
||||||
emit_signal("no_health")
|
emit_signal("no_health")
|
||||||
|
|
||||||
|
emit_signal("health_changed", health)
|
||||||
|
|
||||||
func set_speed(value):
|
func set_speed(value):
|
||||||
if value > max_speed:
|
if value > max_speed:
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ region_enabled = true
|
|||||||
region_rect = Rect2( 0, 0, 1280, 720 )
|
region_rect = Rect2( 0, 0, 1280, 720 )
|
||||||
|
|
||||||
[node name="Background" parent="." instance=ExtResource( 7 )]
|
[node name="Background" parent="." instance=ExtResource( 7 )]
|
||||||
frame = 50
|
frame = 5
|
||||||
|
|
||||||
[node name="FloorTileMap" type="TileMap" parent="."]
|
[node name="FloorTileMap" type="TileMap" parent="."]
|
||||||
visible = false
|
visible = false
|
||||||
@@ -45,14 +45,14 @@ __meta__ = {
|
|||||||
position = Vector2( 265.543, -16 )
|
position = Vector2( 265.543, -16 )
|
||||||
|
|
||||||
[node name="Player" parent="YSort" instance=ExtResource( 1 )]
|
[node name="Player" parent="YSort" instance=ExtResource( 1 )]
|
||||||
position = Vector2( 344, 125.768 )
|
position = Vector2( 432, 168 )
|
||||||
scale = Vector2( 2, 2 )
|
scale = Vector2( 2, 2 )
|
||||||
debug = true
|
debug = true
|
||||||
ROLL_SPEED = 140
|
ROLL_SPEED = 140
|
||||||
FRICTION = 200
|
FRICTION = 200
|
||||||
|
|
||||||
[node name="SlimeBoss" parent="YSort" instance=ExtResource( 8 )]
|
[node name="SlimeBoss" parent="YSort" instance=ExtResource( 8 )]
|
||||||
position = Vector2( 104, 80 )
|
position = Vector2( 240, 120 )
|
||||||
|
|
||||||
[node name="Grid" parent="." instance=ExtResource( 18 )]
|
[node name="Grid" parent="." instance=ExtResource( 18 )]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user