diff --git a/objects/enemy/cop.gd b/objects/enemy/cop.gd index d8b3c02..88fcb4e 100644 --- a/objects/enemy/cop.gd +++ b/objects/enemy/cop.gd @@ -43,7 +43,7 @@ func _physics_process(delta): if !shooting: # check for player in raycast var collider = shoot_cast.get_collider() - if collider != null && collider.is_in_group("player"): + if collider != null && (collider.is_in_group("player") or collider.is_in_group("msx")): # kill player and enter shooting state temporarily collider.get_parent().die() # play sound diff --git a/objects/enemy/laser_wall.gd b/objects/enemy/laser_wall.gd index aacbc61..5a434c9 100644 --- a/objects/enemy/laser_wall.gd +++ b/objects/enemy/laser_wall.gd @@ -19,7 +19,7 @@ func _physics_process(delta): sparks.emitting = true var collider = cast.get_collider() - if collider.is_in_group("player"): + if collider.is_in_group("player") or collider.is_in_group("msx"): collider.get_parent().die() else: line.visible = false diff --git a/objects/npc/msx.gd b/objects/npc/msx.gd new file mode 100644 index 0000000..dd3d1f2 --- /dev/null +++ b/objects/npc/msx.gd @@ -0,0 +1,35 @@ +extends KinematicBody2D + +var velocity = Vector2.ZERO +var is_moving = false +onready var death_particles = $DeathSplatter +onready var sprite = $Sprite +onready var anims = $AnimationPlayer +onready var raycast = $RayCast2D + +func _ready(): + raycast.add_exception($Area2D) + +func _physics_process(delta): + if is_moving: velocity.x = -50 + #Stop when see something + if raycast.is_colliding(): velocity.x = 0 + velocity.y += 128 * delta + velocity = move_and_slide_with_snap(velocity, Vector2.DOWN, Vector2.UP, true) + #Anims + if velocity.x == 0: + anims.play("idle") + else: + anims.play("walk") + +func switch_action(): + is_moving = true + +func die(): + #Create particles + remove_child(death_particles) + get_parent().add_child(death_particles) + death_particles.global_position = global_position + death_particles.emitting = true + Audio.play_sound(Audio.a_die,Audio.ac_die) + queue_free() diff --git a/objects/npc/msx.tscn b/objects/npc/msx.tscn new file mode 100644 index 0000000..7f1cf93 --- /dev/null +++ b/objects/npc/msx.tscn @@ -0,0 +1,701 @@ +[gd_scene load_steps=28 format=2] + +[ext_resource path="res://graphics/player/sg_walk.png" type="Texture" id=1] +[ext_resource path="res://graphics/player/sg_idle.png" type="Texture" id=2] +[ext_resource path="res://graphics/player/pal_purplearmor.png" type="Texture" id=3] +[ext_resource path="res://graphics/player/sg_shoot_air.png" type="Texture" id=4] +[ext_resource path="res://graphics/player/sg_doublejump.png" type="Texture" id=5] +[ext_resource path="res://graphics/player/sg_climb.png" type="Texture" id=6] +[ext_resource path="res://graphics/player/sg_stab.png" type="Texture" id=7] +[ext_resource path="res://graphics/player/sg_shoot_grounded.png" type="Texture" id=8] +[ext_resource path="res://graphics/player/sword_stab.png" type="Texture" id=9] +[ext_resource path="res://graphics/player/jump.png" type="Texture" id=10] +[ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=11] +[ext_resource path="res://scripts/snap_sprite.gd" type="Script" id=12] +[ext_resource path="res://objects/npc/msx.gd" type="Script" id=13] +[ext_resource path="res://graphics/particles/blood.png" type="Texture" id=14] + +[sub_resource type="Animation" id=1] +resource_name = "climb" +length = 0.3 +loop = true +step = 0.15 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:region_rect") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.15 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:texture") +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": [ ExtResource( 6 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled") +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": [ true ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("SwordSprite:texture") +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": [ null ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("Sprite:rotation_degrees") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ 0.0 ] +} + +[sub_resource type="Animation" id=2] +resource_name = "doublejump" +length = 0.3 +loop = true +step = 0.038 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:region_rect") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.038, 0.076, 0.114, 0.152, 0.19, 0.228, 0.266 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ), Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ), Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ), Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:texture") +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": [ ExtResource( 5 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled") +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": [ true ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("SwordSprite:texture") +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": [ null ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("Sprite:rotation_degrees") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0, 0.038, 0.076, 0.114, 0.152, 0.19, 0.228, 0.266, 0.3 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 0.0, 0.0, 90.0, 90.0, 180.0, 180.0, 270.0, 270.0, 360.0 ] +} + +[sub_resource type="Animation" id=3] +resource_name = "enter hatch" +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:offset") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.1, 0.3, 0.5 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 0, 0 ), Vector2( 0, -6 ), Vector2( 0, 0 ), Vector2( 0, 10 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:texture") +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": [ ExtResource( 10 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("Sprite:region_rect") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.3, 0.5 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Rect2( 1, 0, 20, 20 ), Rect2( 1, 0, 20, 20 ), Rect2( 1, 0, 20, 0 ) ] +} + +[sub_resource type="Animation" id=4] +resource_name = "idle" +length = 0.5 +loop = true +step = 0.06 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:region_rect") +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": [ Rect2( 0, 0, 20, 20 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:texture") +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": [ ExtResource( 2 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled") +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": [ true ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("SwordSprite:texture") +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": [ null ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("Sprite:rotation_degrees") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ 0.0 ] +} + +[sub_resource type="Animation" id=5] +resource_name = "jump" +length = 0.5 +loop = true +step = 0.06 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:region_rect") +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": [ Rect2( 1, 0, 20, 20 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:texture") +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": [ ExtResource( 10 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled") +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": [ true ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("SwordSprite:texture") +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": [ null ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("Sprite:rotation_degrees") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ 0.0 ] +} + +[sub_resource type="Animation" id=6] +resource_name = "shoot air" +length = 0.5 +step = 0.06 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:region_rect") +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": [ Rect2( 0, 0, 20, 20 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:texture") +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": [ ExtResource( 4 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled") +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": [ true ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("SwordSprite:texture") +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": [ null ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("Sprite:rotation_degrees") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ 0.0 ] +} +tracks/5/type = "method" +tracks/5/path = NodePath(".") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "spawn_arrow" +} ] +} + +[sub_resource type="Animation" id=7] +resource_name = "shoot grounded" +length = 0.25 +step = 0.06 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:region_rect") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.03, 0.06, 0.12, 0.15, 0.18 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ), Rect2( 40, 0, 20, 20 ), Rect2( 60, 0, 20, 20 ), Rect2( 80, 0, 20, 20 ), Rect2( 100, 0, 20, 20 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:texture") +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": [ ExtResource( 8 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled") +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": [ true ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("SwordSprite:texture") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( ), +"transitions": PoolRealArray( ), +"update": 1, +"values": [ ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("Sprite:rotation_degrees") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ 0.0 ] +} +tracks/5/type = "method" +tracks/5/path = NodePath(".") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0.12 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "spawn_arrow" +} ] +} + +[sub_resource type="Animation" id=8] +resource_name = "stab" +length = 0.3 +step = 0.06 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:region_rect") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.06 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ Rect2( 0, 0, 32, 32 ), Rect2( 32, 0, 32, 32 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:texture") +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": [ ExtResource( 7 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.06 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ true, false ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("SwordSprite:texture") +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": [ ExtResource( 9 ) ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("SwordSprite:region_rect") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0, 0.06 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ Rect2( 0, 0, 32, 32 ), Rect2( 32, 0, 32, 32 ) ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("Sprite:rotation_degrees") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ 0.0 ] +} + +[sub_resource type="Animation" id=9] +resource_name = "walk" +length = 0.4 +loop = true +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:region_rect") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ Rect2( 0, 0, 20, 20 ), Rect2( 20, 0, 20, 20 ), Rect2( 40, 0, 20, 20 ), Rect2( 60, 0, 20, 20 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:texture") +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": [ ExtResource( 1 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("SwordArea/SwordHitBox:disabled") +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": [ true ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("SwordSprite:texture") +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": [ null ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("Sprite:rotation_degrees") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ 0.0 ] +} + +[sub_resource type="ShaderMaterial" id=10] +resource_local_to_scene = true +shader = ExtResource( 11 ) +shader_param/border_color = Color( 0, 0, 0, 1 ) +shader_param/border_corners = true +shader_param/palette = ExtResource( 3 ) + +[sub_resource type="RectangleShape2D" id=11] +extents = Vector2( 2.5, 5 ) + +[sub_resource type="CapsuleShape2D" id=14] +radius = 2.5 +height = 5.0 + +[sub_resource type="Curve" id=13] +_data = [ Vector2( 0, 1 ), 0.0, -0.113537, 0, 0, Vector2( 1, 0 ), -3.35032, 0.0, 0, 0 ] + +[node name="MsX" type="KinematicBody2D"] +script = ExtResource( 13 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +autoplay = "idle" +anims/climb = SubResource( 1 ) +anims/doublejump = SubResource( 2 ) +"anims/enter hatch" = SubResource( 3 ) +anims/idle = SubResource( 4 ) +anims/jump = SubResource( 5 ) +"anims/shoot air" = SubResource( 6 ) +"anims/shoot grounded" = SubResource( 7 ) +anims/stab = SubResource( 8 ) +anims/walk = SubResource( 9 ) + +[node name="Sprite" type="Sprite" parent="."] +modulate = Color( 0, 1, 0.298039, 1 ) +material = SubResource( 10 ) +texture = ExtResource( 2 ) +region_enabled = true +region_rect = Rect2( 0, 0, 20, 20 ) +script = ExtResource( 12 ) + +[node name="Area2D" type="Area2D" parent="." groups=["msx"]] +position = Vector2( 0, 3 ) +collision_layer = 11 +collision_mask = 33 + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="Area2D"] +position = Vector2( 0.5, 2 ) +shape = SubResource( 11 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2( 0.5, 5 ) +shape = SubResource( 14 ) + +[node name="DeathSplatter" type="CPUParticles2D" parent="."] +pause_mode = 2 +emitting = false +amount = 16 +lifetime = 0.3 +one_shot = true +explosiveness = 0.9 +local_coords = false +texture = ExtResource( 14 ) +emission_shape = 2 +emission_rect_extents = Vector2( 4, 4 ) +direction = Vector2( 0, -1 ) +spread = 180.0 +gravity = Vector2( 0, 50 ) +initial_velocity = 60.0 +initial_velocity_random = 0.9 +damping = 2.0 +angle = 720.0 +angle_random = 1.0 +scale_amount = 0.5 +scale_amount_random = 1.0 +scale_amount_curve = SubResource( 13 ) + +[node name="RayCast2D" type="RayCast2D" parent="."] +enabled = true +cast_to = Vector2( 32, 0 ) +collision_mask = 3 +collide_with_areas = true