diff --git a/src/Boss/SlimeBoss/SlimeBoss.tscn b/src/Boss/SlimeBoss/SlimeBoss.tscn index 4359ca6..dec440c 100644 --- a/src/Boss/SlimeBoss/SlimeBoss.tscn +++ b/src/Boss/SlimeBoss/SlimeBoss.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=31 format=2] +[gd_scene load_steps=39 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,31 +7,509 @@ [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://Boss/SlimeBoss/States/Die.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] +[ext_resource path="res://Effects/Stomp/StompEffect.tscn" type="PackedScene" id=21] +[ext_resource path="res://Boss/SlimeBoss/States/BossState.gd" type="Script" id=22] [sub_resource type="CapsuleShape2D" id=1] -radius = 18.0 -height = 18.0 +radius = 30.0 +height = 50.0 [sub_resource type="CapsuleShape2D" id=2] -radius = 20.0 -height = 18.0 +radius = 13.0 +height = 30.0 -[sub_resource type="CircleShape2D" id=3] -radius = 150.0 + +[sub_resource type="CapsuleShape2D" id=3] +radius = 20.0 +height = 30.0 [sub_resource type="CapsuleShape2D" id=4] radius = 8.0 height = 32.0 [sub_resource type="Animation" id=5] -resource_name = "FightStart" +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] +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] +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] +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] +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=15] +resource_name = "Die" +length = 0.6 +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 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ ExtResource( 10 ) ] +} +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, 0.55 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Vector2( 0, -28 ), Vector2( 0, -1.90735e-06 ) ] +} +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 ), +"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 ), +"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 ] +} +tracks/6/type = "value" +tracks/6/path = NodePath("Sprite:scale") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/keys = { +"times": PoolRealArray( 0, 0.55 ), +"transitions": PoolRealArray( 1, 1.93187 ), +"update": 0, +"values": [ Vector2( 1, 1 ), Vector2( 1e-05, 1e-05 ) ] +} + +[sub_resource type="Animation" id=10] length = 1.9 step = 0.025 tracks/0/type = "value" @@ -107,9 +585,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 +607,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 +661,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 +683,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 +737,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 +759,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 +813,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 +823,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,40 +889,37 @@ 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] +[sub_resource type="Animation" id=16] +resource_name = "__INIT__" +length = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 0, -28 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:scale") +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": [ Vector2( 1, 1 ) ] +} [node name="SlimeBoss" type="KinematicBody2D"] collision_layer = 4 -collision_mask = 131 +collision_mask = 2 script = ExtResource( 4 ) __meta__ = { "_edit_group_": true @@ -456,6 +927,16 @@ __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="StompEffect" parent="Effects" instance=ExtResource( 21 )] +visible = false +frame = 29 + [node name="Stats" parent="." instance=ExtResource( 3 )] max_health = 3 @@ -476,20 +957,62 @@ 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="Die" type="Node" parent="States"] +script = ExtResource( 14 ) + +[node name="Death" type="Node" parent="States"] +script = ExtResource( 22 ) + [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0, -28 ) -texture = ExtResource( 5 ) +texture = ExtResource( 10 ) vframes = 10 hframes = 24 -frame = 2 + +[node name="StompHitbox" parent="." instance=ExtResource( 2 )] + +[node name="CollisionShape2D" parent="StompHitbox" index="0"] +position = Vector2( 0, 10 ) +rotation = 1.5708 +shape = SubResource( 1 ) +disabled = true [node name="Hitbox" parent="." instance=ExtResource( 2 )] -visible = false collision_layer = 4 [node name="CollisionShape2D" parent="Hitbox" index="0"] -position = Vector2( 0, -15 ) -shape = SubResource( 1 ) +position = Vector2( 0, -5 ) +rotation = 1.5708 +shape = SubResource( 2 ) [node name="Hurtbox" parent="." groups=[ "HittableByPlayer", @@ -498,14 +1021,7 @@ collision_layer = 4 collision_mask = 128 [node name="CollisionShape2D" parent="Hurtbox" index="0"] -position = Vector2( 0, -15 ) -shape = SubResource( 2 ) - -[node name="HeroCloseZone" type="Area2D" parent="."] -collision_layer = 0 -script = ExtResource( 14 ) - -[node name="CollisionShape2D" type="CollisionShape2D" parent="HeroCloseZone"] +rotation = 1.5708 shape = SubResource( 3 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="."] @@ -514,6 +1030,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 @@ -525,22 +1042,26 @@ __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/Die = SubResource( 15 ) +anims/FightStart = SubResource( 10 ) +anims/MoveDown = SubResource( 11 ) +anims/MoveLeft = SubResource( 12 ) +anims/MoveRight = SubResource( 13 ) +anims/MoveUp = SubResource( 14 ) +anims/__INIT__ = SubResource( 16 ) +[connection signal="animation_finished" from="Effects/StompEffect" to="States/Stomp" method="_on_StompEffect_animation_finished"] +[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"] diff --git a/src/Boss/SlimeBoss/SlimeBossStateMachine.gd b/src/Boss/SlimeBoss/SlimeBossStateMachine.gd index 8339fd4..f2adad6 100644 --- a/src/Boss/SlimeBoss/SlimeBossStateMachine.gd +++ b/src/Boss/SlimeBoss/SlimeBossStateMachine.gd @@ -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,31 +50,29 @@ func _on_Stats_no_health(): set_invincible(true) go_to_next_state($States/Die) +func _on_Stats_health_changed(new_health): + if _phase == PHASES.PHASE_ONE and new_health == 2: + _change_phase(PHASES.PHASE_TWO) + elif _phase == PHASES.PHASE_TWO and new_health == 1: + _change_phase(PHASES.PHASE_THREE) + elif _phase == PHASES.PHASE_THREE and new_health < 1: + go_to_next_state($States/Die) + func go_to_next_state(state_override=null): if state_active: state_active.exit() - if state_override != null: state_active = state_override else: state_active = _decide_on_next_state() + 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): + set_invincible(true) var phase_name = "" match new_phase: PHASES.PHASE_ONE: @@ -92,90 +89,100 @@ 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 + return $States/ChargeSequence + # Death + if state_active == $States/Die: + queue_free() + # return $States/Dead + + if _phase == PHASES.PHASE_ONE: + if angry_phases_done < 1: + set_invincible(true) + sequence_cycles += 1 + if sequence_cycles < 2: + 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/ChargeSequence + if state_active == $States/ChargeSequence: + return $States/Stomp + + if _phase == PHASES.PHASE_TWO: + if angry_phases_done < 2: + set_invincible(true) + if sequence_cycles < 4: + if state_active == $States/ChargeSequence: + return $States/Stomp + if state_active == $States/Stomp: + sequence_cycles += 1 + return $States/ChargeSequence + return $States/ChargeSequence + else: + angry_phases_done = 2 + 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/ChargeSequence + if state_active == $States/ChargeSequence: + return $States/Stomp + + if _phase == PHASES.PHASE_THREE: + if angry_phases_done < 3: + set_invincible(true) + if sequence_cycles < 6: + if state_active == $States/ChargeSequence: + return $States/Stomp + if state_active == $States/Stomp: + sequence_cycles += 1 + return $States/ChargeSequence + return $States/ChargeSequence + else: + angry_phases_done = 3 + 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/ChargeSequence + if state_active == $States/ChargeSequence: + return $States/Stomp + -# # Death -# if state_active == $States/Die: -# queue_free() -# return $States/Dead -# -# # PHASE ONE -# if _phase == PHASES.PHASE_ONE: -# if state_active == $States/RoamSequence: -# sequence_cycles += 1 -# if sequence_cycles < 2: -# return $States/RoamSequence -# else: -# sequence_cycles = 0 -# return $States/Stomp -# if state_active == $States/Stomp: -# return $States/RoamSequence -# -# # PHASE TWO -# elif _phase == PHASES.PHASE_TWO: -# if state_active == $States/RoamSequence: -# return $States/Stomp -# if state_active == $States/Stomp: -# if sequence_cycles < 2: -# sequence_cycles += 1 -# return $States/Stomp -# else: -# sequence_cycles = 0 -# return $States/ChargeSequence -# if state_active == $States/ChargeSequence: -# return $States/RoamSequence -# -# -# # PHASE THREE -# elif _phase == PHASES.PHASE_THREE: -# if state_active == $States/RoamSequence: -# return $States/Stomp -# if state_active == $States/Stomp: -# if sequence_cycles < 2: -# sequence_cycles += 1 -# return $States/Stomp -# else: -# sequence_cycles = 0 -# return $States/ChargeSequence -# if state_active == $States/ChargeSequence: -# if sequence_cycles < 2: -# sequence_cycles += 1 -# return $States/ChargeSequence -# else: -# sequence_cycles = 0 -# 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 diff --git a/src/Boss/SlimeBoss/States/BossState.gd b/src/Boss/SlimeBoss/States/BossState.gd new file mode 100644 index 0000000..4486d0d --- /dev/null +++ b/src/Boss/SlimeBoss/States/BossState.gd @@ -0,0 +1,42 @@ +extends "res://Overlap/StateMachine/State.gd" + +onready var animation_player = owner.get_node("AnimationPlayer") + +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 + + + + diff --git a/src/Boss/SlimeBoss/States/Charge/Prepare.gd b/src/Boss/SlimeBoss/States/Charge/Prepare.gd index d616208..ba0fe4e 100644 --- a/src/Boss/SlimeBoss/States/Charge/Prepare.gd +++ b/src/Boss/SlimeBoss/States/Charge/Prepare.gd @@ -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') diff --git a/src/Boss/SlimeBoss/States/Charge/Sprint.gd b/src/Boss/SlimeBoss/States/Charge/Sprint.gd new file mode 100644 index 0000000..befd4eb --- /dev/null +++ b/src/Boss/SlimeBoss/States/Charge/Sprint.gd @@ -0,0 +1,19 @@ +extends "res://Boss/SlimeBoss/States/BossState.gd" + +export(float) var SPEED = 300.0 + +var direction = Vector2() + +func enter(): + var player_pos = owner.get_parent().get_node("Player").global_position + direction = (player_pos - owner.global_position).normalized() + +func exit(): + owner.last_look = direction + +func update(delta): + 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') diff --git a/src/Boss/SlimeBoss/States/Die.gd b/src/Boss/SlimeBoss/States/Die.gd new file mode 100644 index 0000000..697ab47 --- /dev/null +++ b/src/Boss/SlimeBoss/States/Die.gd @@ -0,0 +1,7 @@ +extends "res://Boss/SlimeBoss/States/BossState.gd" + +func enter(): + animation_player.play("Die") + +func _on_animation_finished(anim_name): + emit_signal("finished") diff --git a/src/Boss/SlimeBoss/States/FightStart.gd b/src/Boss/SlimeBoss/States/FightStart.gd index b51aa26..a456fd1 100644 --- a/src/Boss/SlimeBoss/States/FightStart.gd +++ b/src/Boss/SlimeBoss/States/FightStart.gd @@ -1,11 +1,6 @@ -extends "res://Overlap/StateMachine/State.gd" - -onready var animation_player = owner.get_node("AnimationPlayer") -onready var animation_tree = owner.get_node("AnimationTree") +extends "BossState.gd" func enter(): - animation_tree.active = false - animation_player.playback_active = true animation_player.play('FightStart') func _on_animation_finished(anim_name): diff --git a/src/Boss/SlimeBoss/States/ReturnToCenter.gd b/src/Boss/SlimeBoss/States/ReturnToCenter.gd new file mode 100644 index 0000000..df2e5a4 --- /dev/null +++ b/src/Boss/SlimeBoss/States/ReturnToCenter.gd @@ -0,0 +1,20 @@ +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 + +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') diff --git a/src/Boss/SlimeBoss/States/Roam/MoveToRandomPosition.gd b/src/Boss/SlimeBoss/States/Roam/MoveToRandomPosition.gd index 16908d7..1b5c1cf 100644 --- a/src/Boss/SlimeBoss/States/Roam/MoveToRandomPosition.gd +++ b/src/Boss/SlimeBoss/States/Roam/MoveToRandomPosition.gd @@ -1,28 +1,36 @@ -extends "res://Overlap/StateMachine/State.gd" +extends "../BossState.gd" export(float) var ARRIVE_DISTANCE = 6.0 export(float) var SLOW_RADIUS = 200.0 -export(float) var MASS = 4.0 +export(float) var MASS = 5.0 export(float) var MAX_SPEED = 300.0 -export(float) var ROAM_RADIUS = 150.0 - +export(float) var ROAM_RADIUS = 100.0 +var time_since_start = 0 var target_position = Vector2() var start_position = Vector2() var velocity = Vector2() +var last_vel = Vector2() func enter(): start_position = get_parent().start_position target_position = calculate_new_target_position() - owner.get_node('AnimationPlayer').play('move') + $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) - owner.move_and_slide(velocity) + last_vel = owner.move_and_slide(velocity) - if owner.global_position.distance_to(target_position) < ARRIVE_DISTANCE: + 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') diff --git a/src/Boss/SlimeBoss/States/Stomp.gd b/src/Boss/SlimeBoss/States/Stomp.gd new file mode 100644 index 0000000..922878f --- /dev/null +++ b/src/Boss/SlimeBoss/States/Stomp.gd @@ -0,0 +1,17 @@ +extends "res://Boss/SlimeBoss/States/BossState.gd" + +onready var stomp_hitbox = owner.get_node("StompHitbox/CollisionShape2D") +onready var stomp_effect = owner.get_node("Effects/StompEffect") + +func enter(): + stomp_hitbox.disabled = false + stomp_effect.stomp() + +func exit(): + stomp_hitbox.disabled = true + +func update(delta): + play_directional_animation("Charge", owner.last_look) + +func _on_StompEffect_animation_finished(): + emit_signal("finished") diff --git a/src/Boss/SlimeBoss/States/Roam/Wait.gd b/src/Boss/SlimeBoss/States/Wait.gd similarity index 59% rename from src/Boss/SlimeBoss/States/Roam/Wait.gd rename to src/Boss/SlimeBoss/States/Wait.gd index dfc5be8..06f57bf 100644 --- a/src/Boss/SlimeBoss/States/Roam/Wait.gd +++ b/src/Boss/SlimeBoss/States/Wait.gd @@ -1,7 +1,6 @@ -extends "res://Overlap/StateMachine/State.gd" +extends "res://Boss/SlimeBoss/States/BossState.gd" func enter(): - owner.get_node('AnimationPlayer').play('idle') $Timer.start() func update(delta): diff --git a/src/Effects/Charge/ChargeEffect.tscn b/src/Effects/Charge/ChargeEffect.tscn new file mode 100644 index 0000000..7ceec79 --- /dev/null +++ b/src/Effects/Charge/ChargeEffect.tscn @@ -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 ) diff --git a/src/Effects/Charge/charge.png b/src/Effects/Charge/charge.png new file mode 100644 index 0000000..5621cd5 Binary files /dev/null and b/src/Effects/Charge/charge.png differ diff --git a/src/Effects/Charge/charge.png.import b/src/Effects/Charge/charge.png.import new file mode 100644 index 0000000..4d791f9 --- /dev/null +++ b/src/Effects/Charge/charge.png.import @@ -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 diff --git a/src/Effects/Stomp/StompEffect.gd b/src/Effects/Stomp/StompEffect.gd new file mode 100644 index 0000000..f6666c0 --- /dev/null +++ b/src/Effects/Stomp/StompEffect.gd @@ -0,0 +1,9 @@ +extends AnimatedSprite + +func stomp(): + visible = true + frame = 0 + play("stomp") + +func _animation_finished(): + visible = false diff --git a/src/Effects/Stomp/StompEffect.tscn b/src/Effects/Stomp/StompEffect.tscn new file mode 100644 index 0000000..aa7a14c --- /dev/null +++ b/src/Effects/Stomp/StompEffect.tscn @@ -0,0 +1,138 @@ +[gd_scene load_steps=34 format=2] + +[ext_resource path="res://Effects/Stomp/stomp-splash.png" type="Texture" id=1] +[ext_resource path="res://Effects/Stomp/StompEffect.gd" type="Script" id=2] + +[sub_resource type="AtlasTexture" id=2] +atlas = ExtResource( 1 ) +region = Rect2( 0, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=3] +atlas = ExtResource( 1 ) +region = Rect2( 120, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=4] +atlas = ExtResource( 1 ) +region = Rect2( 240, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=5] +atlas = ExtResource( 1 ) +region = Rect2( 360, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=6] +atlas = ExtResource( 1 ) +region = Rect2( 480, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=7] +atlas = ExtResource( 1 ) +region = Rect2( 600, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=8] +atlas = ExtResource( 1 ) +region = Rect2( 720, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=9] +atlas = ExtResource( 1 ) +region = Rect2( 840, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=10] +atlas = ExtResource( 1 ) +region = Rect2( 960, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=11] +atlas = ExtResource( 1 ) +region = Rect2( 1080, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=12] +atlas = ExtResource( 1 ) +region = Rect2( 1200, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=13] +atlas = ExtResource( 1 ) +region = Rect2( 1320, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=14] +atlas = ExtResource( 1 ) +region = Rect2( 1440, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=15] +atlas = ExtResource( 1 ) +region = Rect2( 1560, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=16] +atlas = ExtResource( 1 ) +region = Rect2( 1680, 0, 120, 120 ) + +[sub_resource type="AtlasTexture" id=17] +atlas = ExtResource( 1 ) +region = Rect2( 0, 120, 120, 120 ) + +[sub_resource type="AtlasTexture" id=18] +atlas = ExtResource( 1 ) +region = Rect2( 120, 120, 120, 120 ) + +[sub_resource type="AtlasTexture" id=19] +atlas = ExtResource( 1 ) +region = Rect2( 240, 120, 120, 120 ) + +[sub_resource type="AtlasTexture" id=20] +atlas = ExtResource( 1 ) +region = Rect2( 360, 120, 120, 120 ) + +[sub_resource type="AtlasTexture" id=21] +atlas = ExtResource( 1 ) +region = Rect2( 480, 120, 120, 120 ) + +[sub_resource type="AtlasTexture" id=22] +atlas = ExtResource( 1 ) +region = Rect2( 600, 120, 120, 120 ) + +[sub_resource type="AtlasTexture" id=23] +atlas = ExtResource( 1 ) +region = Rect2( 720, 120, 120, 120 ) + +[sub_resource type="AtlasTexture" id=24] +atlas = ExtResource( 1 ) +region = Rect2( 840, 120, 120, 120 ) + +[sub_resource type="AtlasTexture" id=25] +atlas = ExtResource( 1 ) +region = Rect2( 960, 120, 120, 120 ) + +[sub_resource type="AtlasTexture" id=26] +atlas = ExtResource( 1 ) +region = Rect2( 1080, 120, 120, 120 ) + +[sub_resource type="AtlasTexture" id=27] +atlas = ExtResource( 1 ) +region = Rect2( 1200, 120, 120, 120 ) + +[sub_resource type="AtlasTexture" id=28] +atlas = ExtResource( 1 ) +region = Rect2( 1320, 120, 120, 120 ) + +[sub_resource type="AtlasTexture" id=29] +atlas = ExtResource( 1 ) +region = Rect2( 1440, 120, 120, 120 ) + +[sub_resource type="AtlasTexture" id=30] +atlas = ExtResource( 1 ) +region = Rect2( 1560, 120, 120, 120 ) + +[sub_resource type="AtlasTexture" id=31] +atlas = ExtResource( 1 ) +region = Rect2( 1680, 120, 120, 120 ) + +[sub_resource type="SpriteFrames" id=32] +animations = [ { +"frames": [ SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 6 ), SubResource( 7 ), SubResource( 8 ), SubResource( 9 ), SubResource( 10 ), SubResource( 11 ), SubResource( 12 ), SubResource( 13 ), SubResource( 14 ), SubResource( 15 ), SubResource( 16 ), SubResource( 17 ), SubResource( 18 ), SubResource( 19 ), SubResource( 20 ), SubResource( 21 ), SubResource( 22 ), SubResource( 23 ), SubResource( 24 ), SubResource( 25 ), SubResource( 26 ), SubResource( 27 ), SubResource( 28 ), SubResource( 29 ), SubResource( 30 ), SubResource( 31 ) ], +"loop": false, +"name": "stomp", +"speed": 60.0 +} ] + +[node name="StompEffect" type="AnimatedSprite"] +frames = SubResource( 32 ) +animation = "stomp" +script = ExtResource( 2 ) +[connection signal="animation_finished" from="." to="." method="_animation_finished"] diff --git a/src/Effects/Stomp/stomp-splash.png b/src/Effects/Stomp/stomp-splash.png new file mode 100644 index 0000000..a9beb59 Binary files /dev/null and b/src/Effects/Stomp/stomp-splash.png differ diff --git a/src/Effects/Stomp/stomp-splash.png.import b/src/Effects/Stomp/stomp-splash.png.import new file mode 100644 index 0000000..8ae506c --- /dev/null +++ b/src/Effects/Stomp/stomp-splash.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/stomp-splash.png-8255ebc3952d7a9d2ea05b169c877e7f.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Effects/Stomp/stomp-splash.png" +dest_files=[ "res://.import/stomp-splash.png-8255ebc3952d7a9d2ea05b169c877e7f.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 diff --git a/src/Maps/Tilesets/Edge/tileset_edge.png b/src/Maps/Tilesets/Edge/tileset_edge.png new file mode 100644 index 0000000..f2990d4 Binary files /dev/null and b/src/Maps/Tilesets/Edge/tileset_edge.png differ diff --git a/src/Maps/Tilesets/Edge/tileset_edge.png.import b/src/Maps/Tilesets/Edge/tileset_edge.png.import new file mode 100644 index 0000000..ec0e916 --- /dev/null +++ b/src/Maps/Tilesets/Edge/tileset_edge.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/tileset_edge.png-9676f4036529ea7cfae58e9cbb837b60.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Maps/Tilesets/Edge/tileset_edge.png" +dest_files=[ "res://.import/tileset_edge.png-9676f4036529ea7cfae58e9cbb837b60.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 diff --git a/src/Overlap/StateMachine/SequenceState.gd b/src/Overlap/StateMachine/SequenceState.gd index e9e68e7..37cb924 100644 --- a/src/Overlap/StateMachine/SequenceState.gd +++ b/src/Overlap/StateMachine/SequenceState.gd @@ -31,7 +31,6 @@ func _on_state_active_finished(): func go_to_next_state_in_sequence(): state_active.exit() - var new_state_index = (state_active.get_index() + 1) % get_child_count() if new_state_index == 0: emit_signal('finished') diff --git a/src/Overlap/Stats/Stats.gd b/src/Overlap/Stats/Stats.gd index c651303..3501e89 100644 --- a/src/Overlap/Stats/Stats.gd +++ b/src/Overlap/Stats/Stats.gd @@ -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: diff --git a/src/World.tscn b/src/World.tscn index 9c646ec..800cb42 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=2] +[gd_scene load_steps=23 format=2] [ext_resource path="res://Player/Player.tscn" type="PackedScene" id=1] [ext_resource path="res://World.gd" type="Script" id=2] @@ -9,8 +9,227 @@ [ext_resource path="res://Boss/SlimeBoss/SlimeBoss.tscn" type="PackedScene" id=8] [ext_resource path="res://Menus/SelectUpgradeUI/SelectUpgradeUI.tscn" type="PackedScene" id=9] [ext_resource path="res://Objects/Bonfire/Bonfire.tscn" type="PackedScene" id=10] +[ext_resource path="res://Debug/BossStateDisplay.gd" type="Script" id=11] +[ext_resource path="res://Maps/Tilesets/Edge/tileset_edge.png" type="Texture" id=12] [ext_resource path="res://Maps/Grid.tscn" type="PackedScene" id=18] +[sub_resource type="ConvexPolygonShape2D" id=1] +points = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) + +[sub_resource type="ConvexPolygonShape2D" id=2] +points = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) + +[sub_resource type="ConvexPolygonShape2D" id=3] +points = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) + +[sub_resource type="ConvexPolygonShape2D" id=4] +points = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) + +[sub_resource type="ConvexPolygonShape2D" id=5] +points = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) + +[sub_resource type="ConvexPolygonShape2D" id=6] +points = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) + +[sub_resource type="ConvexPolygonShape2D" id=7] +points = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) + +[sub_resource type="ConvexPolygonShape2D" id=8] +points = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) + +[sub_resource type="TileSet" id=9] +1/name = "tileset_edge.png 1" +1/texture = ExtResource( 12 ) +1/tex_offset = Vector2( 0, 0 ) +1/modulate = Color( 1, 1, 1, 1 ) +1/region = Rect2( 0, -32, 96, 32 ) +1/tile_mode = 1 +1/autotile/bitmask_mode = 0 +1/autotile/bitmask_flags = [ ] +1/autotile/icon_coordinate = Vector2( 0, 0 ) +1/autotile/tile_size = Vector2( 32, 32 ) +1/autotile/spacing = 0 +1/autotile/occluder_map = [ ] +1/autotile/navpoly_map = [ ] +1/autotile/priority_map = [ ] +1/autotile/z_index_map = [ ] +1/occluder_offset = Vector2( 0, 0 ) +1/navigation_offset = Vector2( 0, 0 ) +1/shape_offset = Vector2( 0, 0 ) +1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +1/shape_one_way = false +1/shape_one_way_margin = 0.0 +1/shapes = [ ] +1/z_index = 0 +2/name = "tileset_edge.png 2" +2/texture = ExtResource( 12 ) +2/tex_offset = Vector2( 0, 0 ) +2/modulate = Color( 1, 1, 1, 1 ) +2/region = Rect2( 0, 0, 32, 32 ) +2/tile_mode = 0 +2/occluder_offset = Vector2( 0, 0 ) +2/navigation_offset = Vector2( 0, 0 ) +2/shape_offset = Vector2( 0, 0 ) +2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +2/shape = SubResource( 1 ) +2/shape_one_way = false +2/shape_one_way_margin = 1.0 +2/shapes = [ { +"autotile_coord": Vector2( 0, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 1 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +2/z_index = 0 +3/name = "tileset_edge.png 3" +3/texture = ExtResource( 12 ) +3/tex_offset = Vector2( 0, 0 ) +3/modulate = Color( 1, 1, 1, 1 ) +3/region = Rect2( 32, 0, 32, 32 ) +3/tile_mode = 0 +3/occluder_offset = Vector2( 0, 0 ) +3/navigation_offset = Vector2( 0, 0 ) +3/shape_offset = Vector2( 0, 0 ) +3/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +3/shape = SubResource( 2 ) +3/shape_one_way = false +3/shape_one_way_margin = 1.0 +3/shapes = [ { +"autotile_coord": Vector2( 0, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 2 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +3/z_index = 0 +4/name = "tileset_edge.png 4" +4/texture = ExtResource( 12 ) +4/tex_offset = Vector2( 0, 0 ) +4/modulate = Color( 1, 1, 1, 1 ) +4/region = Rect2( 64, 0, 32, 32 ) +4/tile_mode = 0 +4/occluder_offset = Vector2( 0, 0 ) +4/navigation_offset = Vector2( 0, 0 ) +4/shape_offset = Vector2( 0, 0 ) +4/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +4/shape = SubResource( 3 ) +4/shape_one_way = false +4/shape_one_way_margin = 1.0 +4/shapes = [ { +"autotile_coord": Vector2( 0, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 3 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +4/z_index = 0 +5/name = "tileset_edge.png 5" +5/texture = ExtResource( 12 ) +5/tex_offset = Vector2( 0, 0 ) +5/modulate = Color( 1, 1, 1, 1 ) +5/region = Rect2( 96, 0, 32, 32 ) +5/tile_mode = 0 +5/occluder_offset = Vector2( 0, 0 ) +5/navigation_offset = Vector2( 0, 0 ) +5/shape_offset = Vector2( 0, 0 ) +5/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +5/shape = SubResource( 4 ) +5/shape_one_way = false +5/shape_one_way_margin = 1.0 +5/shapes = [ { +"autotile_coord": Vector2( 0, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 4 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +5/z_index = 0 +6/name = "tileset_edge.png 6" +6/texture = ExtResource( 12 ) +6/tex_offset = Vector2( 0, 0 ) +6/modulate = Color( 1, 1, 1, 1 ) +6/region = Rect2( 0, 32, 32, 32 ) +6/tile_mode = 0 +6/occluder_offset = Vector2( 0, 0 ) +6/navigation_offset = Vector2( 0, 0 ) +6/shape_offset = Vector2( 0, 0 ) +6/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +6/shape = SubResource( 5 ) +6/shape_one_way = false +6/shape_one_way_margin = 1.0 +6/shapes = [ { +"autotile_coord": Vector2( 0, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 5 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +6/z_index = 0 +7/name = "tileset_edge.png 7" +7/texture = ExtResource( 12 ) +7/tex_offset = Vector2( 0, 0 ) +7/modulate = Color( 1, 1, 1, 1 ) +7/region = Rect2( 32, 32, 32, 32 ) +7/tile_mode = 0 +7/occluder_offset = Vector2( 0, 0 ) +7/navigation_offset = Vector2( 0, 0 ) +7/shape_offset = Vector2( 0, 0 ) +7/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +7/shape = SubResource( 6 ) +7/shape_one_way = false +7/shape_one_way_margin = 1.0 +7/shapes = [ { +"autotile_coord": Vector2( 0, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 6 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +7/z_index = 0 +8/name = "tileset_edge.png 8" +8/texture = ExtResource( 12 ) +8/tex_offset = Vector2( 0, 0 ) +8/modulate = Color( 1, 1, 1, 1 ) +8/region = Rect2( 64, 32, 32, 32 ) +8/tile_mode = 0 +8/occluder_offset = Vector2( 0, 0 ) +8/navigation_offset = Vector2( 0, 0 ) +8/shape_offset = Vector2( 0, 0 ) +8/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +8/shape = SubResource( 7 ) +8/shape_one_way = false +8/shape_one_way_margin = 1.0 +8/shapes = [ { +"autotile_coord": Vector2( 0, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 7 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +8/z_index = 0 +9/name = "tileset_edge.png 9" +9/texture = ExtResource( 12 ) +9/tex_offset = Vector2( 0, 0 ) +9/modulate = Color( 1, 1, 1, 1 ) +9/region = Rect2( 96, 32, 32, 32 ) +9/tile_mode = 0 +9/occluder_offset = Vector2( 0, 0 ) +9/navigation_offset = Vector2( 0, 0 ) +9/shape_offset = Vector2( 0, 0 ) +9/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +9/shape = SubResource( 8 ) +9/shape_one_way = false +9/shape_one_way_margin = 1.0 +9/shapes = [ { +"autotile_coord": Vector2( 0, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 8 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +9/z_index = 0 + [node name="World" type="Node2D"] pause_mode = 2 script = ExtResource( 2 ) @@ -26,6 +245,7 @@ pause_mode = 1 frame = 20 playing = false + [node name="FloorTileMap" type="TileMap" parent="."] pause_mode = 1 position = Vector2( 16, 16 ) @@ -36,14 +256,23 @@ collision_mask = 0 format = 1 tile_data = PoolIntArray( -131074, 47, 0, -131073, 47, 1, -196608, 47, 1, -196607, 47, 1, -196606, 47, 1, -196605, 47, 1, -196604, 47, 1, -196603, 47, 1, -196602, 47, 1, -196601, 47, 1, -196600, 47, 1, -196599, 47, 1, -196598, 47, 1, -196597, 47, 1, -196596, 47, 1, -196595, 47, 1, -196594, 47, 1, -196593, 47, 1, -196592, 47, 2, -65538, 47, 65536, -65537, 47, 65537, -131072, 47, 65537, -131071, 47, 65537, -131070, 47, 65537, -131069, 47, 65537, -131068, 47, 65537, -131067, 47, 65537, -131066, 47, 65537, -131065, 47, 65537, -131064, 47, 65537, -131063, 47, 65537, -131062, 47, 65537, -131061, 47, 65537, -131060, 47, 65537, -131059, 47, 65537, -131058, 47, 65537, -131057, 47, 65537, -131056, 47, 65538, -2, 47, 65536, -1, 47, 65541, -65536, 47, 131073, -65535, 47, 131073, -65534, 47, 131073, -65533, 47, 131073, -65532, 47, 131073, -65531, 47, 131073, -65530, 47, 131073, -65529, 47, 131073, -65528, 47, 131073, -65527, 47, 131073, -65526, 47, 131073, -65525, 47, 131073, -65524, 47, 131073, -65523, 47, 131073, -65522, 47, 65542, -65521, 47, 65537, -65520, 47, 65538, 65534, 47, 65536, 65535, 47, 65538, 14, 47, 65536, 15, 47, 65537, 16, 47, 65538, 131070, 47, 65536, 131071, 47, 65538, 65550, 47, 65536, 65551, 47, 65537, 65552, 47, 65538, 196606, 47, 65536, 196607, 47, 65538, 131086, 47, 65536, 131087, 47, 65537, 131088, 47, 65538, 262142, 47, 65536, 262143, 47, 65538, 196622, 47, 65536, 196623, 47, 65537, 196624, 47, 65538, 327678, 47, 65536, 327679, 47, 65538, 262158, 47, 65536, 262159, 47, 65537, 262160, 47, 65538, 393214, 47, 65536, 393215, 47, 65538, 327694, 47, 65536, 327695, 47, 65537, 327696, 47, 65538, 458750, 47, 65536, 458751, 47, 131077, 393216, 47, 1, 393217, 47, 1, 393218, 47, 1, 393219, 47, 1, 393220, 47, 1, 393221, 47, 1, 393222, 47, 1, 393223, 47, 1, 393224, 47, 1, 393225, 47, 1, 393226, 47, 1, 393227, 47, 1, 393228, 47, 1, 393229, 47, 1, 393230, 47, 131078, 393231, 47, 65537, 393232, 47, 65538, 524286, 47, 65536, 524287, 47, 65537, 458752, 47, 65537, 458753, 47, 65537, 458754, 47, 65537, 458755, 47, 65537, 458756, 47, 65537, 458757, 47, 65537, 458758, 47, 65537, 458759, 47, 65537, 458760, 47, 65537, 458761, 47, 65537, 458762, 47, 65537, 458763, 47, 65537, 458764, 47, 65537, 458765, 47, 65537, 458766, 47, 65537, 458767, 47, 65537, 458768, 47, 65538, 589822, 47, 65536, 589823, 47, 65537, 524288, 47, 65537, 524289, 47, 65537, 524290, 47, 65537, 524291, 47, 65537, 524292, 47, 65537, 524293, 47, 65537, 524294, 47, 65537, 524295, 47, 65537, 524296, 47, 65537, 524297, 47, 65537, 524298, 47, 65537, 524299, 47, 65537, 524300, 47, 65537, 524301, 47, 65537, 524302, 47, 65537, 524303, 47, 65537, 524304, 47, 65538, 655358, 47, 131072, 655359, 47, 131073, 589824, 47, 131073, 589825, 47, 131073, 589826, 47, 131073, 589827, 47, 131073, 589828, 47, 131073, 589829, 47, 131073, 589830, 47, 131073, 589831, 47, 131073, 589832, 47, 131073, 589833, 47, 131073, 589834, 47, 131073, 589835, 47, 131073, 589836, 47, 131073, 589837, 47, 131073, 589838, 47, 131073, 589839, 47, 131073, 589840, 47, 131074 ) + +[node name="Edge" type="TileMap" parent="."] +position = Vector2( 16, 16 ) +tile_set = SubResource( 9 ) +cell_size = Vector2( 32, 32 ) +format = 1 +tile_data = PoolIntArray( -1, 5, 0, -65536, 3, 0, -65535, 3, 0, -65534, 3, 0, -65533, 3, 0, -65532, 3, 0, -65531, 3, 0, -65530, 3, 0, -65529, 3, 0, -65528, 3, 0, -65527, 3, 0, -65526, 3, 0, -65525, 3, 0, -65524, 3, 0, -65523, 3, 0, -65522, 4, 0, 65535, 2, 0, 14, 6, 0, 131071, 2, 0, 65550, 6, 0, 196607, 2, 0, 131086, 6, 0, 262143, 2, 0, 196622, 6, 0, 327679, 2, 0, 262158, 6, 0, 393215, 9, 0, 327680, 7, 0, 327681, 7, 0, 327682, 7, 0, 327683, 7, 0, 327684, 7, 0, 327685, 7, 0, 327686, 7, 0, 327687, 7, 0, 327688, 7, 0, 327689, 7, 0, 327690, 7, 0, 327691, 7, 0, 327692, 7, 0, 327693, 7, 0, 327694, 8, 0, 458751, 0, 0 ) + [node name="YSort" type="YSort" parent="."] pause_mode = 1 [node name="Bonfire" parent="YSort" instance=ExtResource( 10 )] position = Vector2( 379.618, 131.478 ) + [node name="SlimeBoss" parent="YSort" instance=ExtResource( 8 )] -position = Vector2( 104, 80 ) +position = Vector2( 240, 120 ) [node name="Minion" parent="YSort" instance=ExtResource( 9 )] position = Vector2( 24, 184 ) @@ -57,6 +286,49 @@ pause_mode = 2 [node name="DialogueBox" parent="CanvasLayer" instance=ExtResource( 6 )] visible = false +[node name="DebugLabel" type="Control" parent="CanvasLayer"] +visible = false +anchor_right = 1.0 +anchor_bottom = 1.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="BossStateDisplay" type="Panel" parent="CanvasLayer/DebugLabel"] +anchor_left = 1.0 +anchor_right = 1.0 +margin_left = -80.0 +margin_bottom = 50.0 +script = ExtResource( 11 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/DebugLabel/BossStateDisplay"] +margin_right = 40.0 +margin_bottom = 40.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Title" type="Label" parent="CanvasLayer/DebugLabel/BossStateDisplay/VBoxContainer"] +margin_right = 40.0 +margin_bottom = 12.0 +custom_fonts/font = ExtResource( 9 ) +text = "Boss" + +[node name="Phase" type="Label" parent="CanvasLayer/DebugLabel/BossStateDisplay/VBoxContainer"] +margin_top = 16.0 +margin_right = 40.0 +margin_bottom = 28.0 +custom_fonts/font = ExtResource( 9 ) + +[node name="State" type="Label" parent="CanvasLayer/DebugLabel/BossStateDisplay/VBoxContainer"] +margin_top = 32.0 +margin_right = 40.0 +margin_bottom = 44.0 +custom_fonts/font = ExtResource( 9 ) + [node name="DragNDropUI" parent="CanvasLayer" instance=ExtResource( 5 )] anchor_top = -0.00171594 anchor_bottom = 0.998284