[gd_scene load_steps=44 format=2] [ext_resource path="res://objects/player/player.gd" type="Script" id=1] [ext_resource path="res://graphics/player/sg_duck.png" type="Texture" id=2] [ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=3] [ext_resource path="res://graphics/player/sg_idle.png" type="Texture" id=4] [ext_resource path="res://addons/godot_state_charts/parallel_state.gd" type="Script" id=5] [ext_resource path="res://addons/godot_state_charts/state_chart.gd" type="Script" id=6] [ext_resource path="res://ui/theme.tres" type="Theme" id=7] [ext_resource path="res://addons/godot_state_charts/state_chart_debug.gd" type="Script" id=8] [ext_resource path="res://addons/godot_state_charts/compound_state.gd" type="Script" id=9] [ext_resource path="res://addons/godot_state_charts/transition.gd" type="Script" id=10] [ext_resource path="res://addons/godot_state_charts/atomic_state.gd" type="Script" id=11] [ext_resource path="res://graphics/player/sg_walk.png" type="Texture" id=12] [ext_resource path="res://graphics/player/sg_jump.png" type="Texture" id=13] [ext_resource path="res://graphics/player/sg_climb.png" type="Texture" id=14] [ext_resource path="res://graphics/player/sg_shoot_grounded.png" type="Texture" id=15] [ext_resource path="res://graphics/player/sg_shoot_air.png" type="Texture" id=16] [ext_resource path="res://graphics/player/sg_doublejump.png" type="Texture" id=17] [ext_resource path="res://graphics/particles/dust.png" type="Texture" id=18] [ext_resource path="res://graphics/player/sg_fall_scared.png" type="Texture" id=19] [ext_resource path="res://graphics/player/sg_fall.png" type="Texture" id=20] [ext_resource path="res://graphics/player/sg_push.png" type="Texture" id=21] [ext_resource path="res://graphics/player/sg_blink.png" type="Texture" id=22] [ext_resource path="res://graphics/player/sg_stim.png" type="Texture" id=23] [sub_resource type="ShaderMaterial" id=1] shader = ExtResource( 3 ) shader_param/border_color = Color( 0, 0, 0, 1 ) shader_param/border_corners = true [sub_resource type="Curve" id=13] _data = [ Vector2( 0, 1 ), 0.0, -0.0636948, 0, 0, Vector2( 1, 0 ), -3.43886, 0.0, 0, 0 ] [sub_resource type="RectangleShape2D" id=2] extents = Vector2( 2.5, 5 ) [sub_resource type="RectangleShape2D" id=3] extents = Vector2( 2.5, 5 ) [sub_resource type="RectangleShape2D" id=16] extents = Vector2( 2.5, 2.5 ) [sub_resource type="Animation" id=5] length = 0.001 tracks/0/type = "value" tracks/0/path = NodePath("Graphics/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": 0, "values": [ ExtResource( 4 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") 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": [ 1 ] } tracks/2/type = "value" tracks/2/path = NodePath("Graphics/Sprite:frame") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/imported = false tracks/2/enabled = true tracks/2/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, "values": [ 0 ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") 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": 0, "values": [ 0.0 ] } [sub_resource type="Animation" id=18] resource_name = "blink" length = 0.1 tracks/0/type = "value" tracks/0/path = NodePath("Graphics/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( 22 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") 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": [ 2 ] } tracks/2/type = "value" tracks/2/path = NodePath("Graphics/Sprite:frame") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/imported = false tracks/2/enabled = true tracks/2/keys = { "times": PoolRealArray( 0, 0.1 ), "transitions": PoolRealArray( 1, 1 ), "update": 1, "values": [ 1, 0 ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") 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": 0, "values": [ 0.0 ] } [sub_resource type="Animation" id=9] resource_name = "climb" length = 0.3 loop = true step = 0.15 tracks/0/type = "value" tracks/0/path = NodePath("Graphics/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( 14 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") 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": [ 2 ] } tracks/2/type = "value" tracks/2/path = NodePath("Graphics/Sprite:frame") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/imported = false tracks/2/enabled = true tracks/2/keys = { "times": PoolRealArray( 0, 0.15 ), "transitions": PoolRealArray( 1, 1 ), "update": 1, "values": [ 0, 1 ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") 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": 0, "values": [ 0.0 ] } [sub_resource type="Animation" id=12] resource_name = "double_jump" length = 0.32 loop = true step = 0.04 tracks/0/type = "value" tracks/0/path = NodePath("Graphics/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( 17 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") 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": [ 2 ] } tracks/2/type = "value" tracks/2/path = NodePath("Graphics/Sprite:frame") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/imported = false tracks/2/enabled = true tracks/2/keys = { "times": PoolRealArray( 0, 0.04, 0.08, 0.12, 0.16, 0.2, 0.24, 0.28 ), "transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ), "update": 1, "values": [ 0, 1, 0, 1, 0, 1, 0, 1 ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/imported = false tracks/3/enabled = true tracks/3/keys = { "times": PoolRealArray( 0, 0.08, 0.16, 0.24 ), "transitions": PoolRealArray( 1, 1, 1, 1 ), "update": 1, "values": [ 0.0, 90.0, 180.0, 270.0 ] } [sub_resource type="Animation" id=20] resource_name = "duck" length = 0.001 tracks/0/type = "value" tracks/0/path = NodePath("Graphics/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( 2 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") 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": [ 1 ] } tracks/2/type = "value" tracks/2/path = NodePath("Graphics/Sprite:frame") 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": [ 0 ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") 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": 0, "values": [ 0.0 ] } [sub_resource type="Animation" id=15] resource_name = "fall" length = 0.001 tracks/0/type = "value" tracks/0/path = NodePath("Graphics/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( 20 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") 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": [ 1 ] } tracks/2/type = "value" tracks/2/path = NodePath("Graphics/Sprite:frame") 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": [ 0 ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") 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": 0, "values": [ 0.0 ] } [sub_resource type="Animation" id=14] resource_name = "fall_scared" length = 0.2 loop = true tracks/0/type = "value" tracks/0/path = NodePath("Graphics/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( 19 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") 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": [ 2 ] } tracks/2/type = "value" tracks/2/path = NodePath("Graphics/Sprite:frame") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/imported = false tracks/2/enabled = true tracks/2/keys = { "times": PoolRealArray( 0, 0.1 ), "transitions": PoolRealArray( 1, 1 ), "update": 1, "values": [ 0, 1 ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/imported = false tracks/3/enabled = true tracks/3/keys = { "times": PoolRealArray( 0.00238396 ), "transitions": PoolRealArray( 1 ), "update": 0, "values": [ 0.0 ] } [sub_resource type="Animation" id=6] resource_name = "idle" length = 0.001 tracks/0/type = "value" tracks/0/path = NodePath("Graphics/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( 4 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") 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": [ 1 ] } tracks/2/type = "value" tracks/2/path = NodePath("Graphics/Sprite:frame") 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": [ 0 ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") 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": 0, "values": [ 0.0 ] } [sub_resource type="Animation" id=8] resource_name = "jump" length = 0.001 tracks/0/type = "value" tracks/0/path = NodePath("Graphics/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( 13 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") 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": [ 1 ] } tracks/2/type = "value" tracks/2/path = NodePath("Graphics/Sprite:frame") 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": [ 0 ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") 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": 0, "values": [ 0.0 ] } [sub_resource type="Animation" id=17] resource_name = "push" length = 0.8 loop = true tracks/0/type = "value" tracks/0/path = NodePath("Graphics/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( 21 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") 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": [ 4 ] } tracks/2/type = "value" tracks/2/path = NodePath("Graphics/Sprite:frame") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/imported = false tracks/2/enabled = true tracks/2/keys = { "times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), "transitions": PoolRealArray( 1, 1, 1, 1 ), "update": 1, "values": [ 0, 1, 2, 3 ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") 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": 0, "values": [ 0.0 ] } [sub_resource type="Animation" id=11] resource_name = "shoot_airborne" length = 0.001 tracks/0/type = "value" tracks/0/path = NodePath("Graphics/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( 16 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/imported = false tracks/1/enabled = true tracks/1/keys = { "times": PoolRealArray( 0, 0.001 ), "transitions": PoolRealArray( 1, 1 ), "update": 1, "values": [ 1, 1 ] } tracks/2/type = "value" tracks/2/path = NodePath("Graphics/Sprite:frame") 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": [ 0 ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") 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": 0, "values": [ 0.0 ] } [sub_resource type="Animation" id=10] resource_name = "shoot_grounded" length = 0.25 step = 0.05 tracks/0/type = "value" tracks/0/path = NodePath("Graphics/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( 15 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") 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": [ 6 ] } tracks/2/type = "value" tracks/2/path = NodePath("Graphics/Sprite:frame") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/imported = false tracks/2/enabled = true tracks/2/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": [ 0, 1, 2, 3, 4, 5 ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") 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": 0, "values": [ 0.0 ] } tracks/4/type = "method" tracks/4/path = NodePath(".") tracks/4/interp = 1 tracks/4/loop_wrap = true tracks/4/imported = false tracks/4/enabled = true tracks/4/keys = { "times": PoolRealArray( 0.12 ), "transitions": PoolRealArray( 1 ), "values": [ { "args": [ ], "method": "spawn_arrow" } ] } tracks/5/type = "method" tracks/5/path = NodePath("StateChart") tracks/5/interp = 1 tracks/5/loop_wrap = true tracks/5/imported = false tracks/5/enabled = true tracks/5/keys = { "times": PoolRealArray( 0.25 ), "transitions": PoolRealArray( 1 ), "values": [ { "args": [ "shoot_end" ], "method": "send_event" } ] } [sub_resource type="Animation" id=19] resource_name = "stim" length = 0.3 loop = true step = 0.05 tracks/0/type = "value" tracks/0/path = NodePath("Graphics/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( 23 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") 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": [ 2 ] } tracks/2/type = "value" tracks/2/path = NodePath("Graphics/Sprite:frame") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/imported = false tracks/2/enabled = true tracks/2/keys = { "times": PoolRealArray( 0, 0.15 ), "transitions": PoolRealArray( 1, 1 ), "update": 1, "values": [ 0, 1 ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") 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": 0, "values": [ 0.0 ] } [sub_resource type="Animation" id=7] resource_name = "walk" length = 0.4 loop = true tracks/0/type = "value" tracks/0/path = NodePath("Graphics/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( 12 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") 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": [ 4 ] } tracks/2/type = "value" tracks/2/path = NodePath("Graphics/Sprite:frame") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/imported = false tracks/2/enabled = true tracks/2/keys = { "times": PoolRealArray( 0, 0.1, 0.2, 0.3 ), "transitions": PoolRealArray( 1, 1, 1, 1 ), "update": 1, "values": [ 1, 2, 3, 0 ] } tracks/3/type = "value" tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") 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": 0, "values": [ 0.0 ] } [sub_resource type="StyleBoxEmpty" id=4] [node name="Player" type="KinematicBody2D" groups=["player"]] collision_layer = 128 collision_mask = 7 moving_platform_apply_velocity_on_leave = 1 script = ExtResource( 1 ) walk_acceleration_frames = 4.0 gravity = 700.0 jump_force = 140.0 double_jump_force = 124.0 [node name="Graphics" type="Node2D" parent="."] [node name="Sprite" type="Sprite" parent="Graphics"] unique_name_in_owner = true material = SubResource( 1 ) position = Vector2( 0, -10 ) texture = ExtResource( 4 ) [node name="ArrowPosition" type="Position2D" parent="Graphics"] unique_name_in_owner = true position = Vector2( 5, -7 ) __meta__ = { "_gizmo_extents_": 2.0 } [node name="DeathSplatterPosition" type="Position2D" parent="Graphics"] unique_name_in_owner = true position = Vector2( 0, -10 ) __meta__ = { "_gizmo_extents_": 2.0 } [node name="DustParticles" type="CPUParticles2D" parent="Graphics"] unique_name_in_owner = true position = Vector2( 0, 2 ) z_index = 1 emitting = false amount = 5 lifetime = 0.3 one_shot = true explosiveness = 0.9 fract_delta = false local_coords = false texture = ExtResource( 18 ) emission_shape = 2 emission_rect_extents = Vector2( 5, 0 ) direction = Vector2( 0, -1 ) spread = 60.0 gravity = Vector2( 0, 0 ) initial_velocity = 10.0 initial_velocity_random = 0.8 angle = 720.0 angle_random = 1.0 scale_amount = 0.25 scale_amount_random = 0.5 scale_amount_curve = SubResource( 13 ) [node name="PushableDetector" type="RayCast2D" parent="Graphics"] unique_name_in_owner = true position = Vector2( 3, -4 ) cast_to = Vector2( 1, 0 ) collision_mask = 4 [node name="BodyShape" type="CollisionShape2D" parent="."] position = Vector2( 0.5, -5 ) shape = SubResource( 2 ) [node name="Hitbox" type="Area2D" parent="." groups=["player_hitbox"]] collision_layer = 11 collision_mask = 32 [node name="GroundedShape" type="CollisionShape2D" parent="Hitbox"] unique_name_in_owner = true position = Vector2( 0.5, -5 ) shape = SubResource( 3 ) [node name="AirborneShape" type="CollisionShape2D" parent="Hitbox"] unique_name_in_owner = true position = Vector2( 0.5, -7.5 ) shape = SubResource( 16 ) [node name="LadderDetector" type="RayCast2D" parent="."] unique_name_in_owner = true position = Vector2( 0.5, -0.5 ) enabled = true cast_to = Vector2( 0, -9.5 ) collision_mask = 64 collide_with_areas = true collide_with_bodies = false [node name="AnimationPlayer" type="AnimationPlayer" parent="."] anims/RESET = SubResource( 5 ) anims/blink = SubResource( 18 ) anims/climb = SubResource( 9 ) anims/double_jump = SubResource( 12 ) anims/duck = SubResource( 20 ) anims/fall = SubResource( 15 ) anims/fall_scared = SubResource( 14 ) anims/idle = SubResource( 6 ) anims/jump = SubResource( 8 ) anims/push = SubResource( 17 ) anims/shoot_airborne = SubResource( 11 ) anims/shoot_grounded = SubResource( 10 ) anims/stim = SubResource( 19 ) anims/walk = SubResource( 7 ) [node name="StateChart" type="Node" parent="."] script = ExtResource( 6 ) auto_initialize = false [node name="Root" type="Node" parent="StateChart"] script = ExtResource( 5 ) __meta__ = { "_editor_description_": "" } [node name="Movement" type="Node" parent="StateChart/Root"] process_priority = 10 script = ExtResource( 9 ) __meta__ = { "_editor_description_": "higher process priority so it can do move_and_slide after everything else" } initial_state = NodePath("Grounded") [node name="On Died" type="Node" parent="StateChart/Root/Movement"] script = ExtResource( 10 ) to = NodePath("../Inactive") event = "died" [node name="Grounded" type="Node" parent="StateChart/Root/Movement"] script = ExtResource( 9 ) __meta__ = { "_editor_description_": "is on the ground" } initial_state = NodePath("CanWalk") [node name="On Airborne" type="Node" parent="StateChart/Root/Movement/Grounded"] script = ExtResource( 10 ) to = NodePath("../../Airborne/Falling/CoyoteFalling") event = "airborne" [node name="On Jump" type="Node" parent="StateChart/Root/Movement/Grounded"] script = ExtResource( 10 ) __meta__ = { "_editor_description_": "enter jump state when the jump button is pressed" } to = NodePath("../../Airborne/Jump/NormalJump") event = "jump" [node name="On Duck" type="Node" parent="StateChart/Root/Movement/Grounded"] script = ExtResource( 10 ) to = NodePath("../Ducking") event = "duck_pressed" [node name="On LadderTouched" type="Node" parent="StateChart/Root/Movement/Grounded"] script = ExtResource( 10 ) to = NodePath("../../Climbing") event = "ladder_touched" [node name="CanWalk" type="Node" parent="StateChart/Root/Movement/Grounded"] script = ExtResource( 9 ) __meta__ = { "_editor_description_": "can walk by moving left and right" } initial_state = NodePath("Still") [node name="On Shoot" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"] script = ExtResource( 10 ) to = NodePath("../../Shooting") event = "shoot" guard_expression = "can_shoot" [node name="On PushStart" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"] script = ExtResource( 10 ) to = NodePath("../../Pushing") event = "push_start" [node name="Still" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"] script = ExtResource( 11 ) [node name="On WalkStart" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Still"] script = ExtResource( 10 ) to = NodePath("../../Walking") event = "walk_start" [node name="On Timeout" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Still"] script = ExtResource( 10 ) to = NodePath("../../Blinking") delay = 1.0 [node name="Walking" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"] script = ExtResource( 11 ) [node name="On WalkStop" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Walking"] script = ExtResource( 10 ) to = NodePath("../../Still") event = "walk_stop" [node name="Blinking" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"] unique_name_in_owner = true script = ExtResource( 11 ) [node name="On Timeout" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Blinking"] script = ExtResource( 10 ) to = NodePath("../../Stimming") delay = 10.0 [node name="On WalkStart" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Blinking"] script = ExtResource( 10 ) to = NodePath("../../Walking") event = "walk_start" [node name="Stimming" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"] script = ExtResource( 11 ) [node name="On WalkStart" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Stimming"] script = ExtResource( 10 ) to = NodePath("../../Walking") event = "walk_start" [node name="Ducking" type="Node" parent="StateChart/Root/Movement/Grounded"] script = ExtResource( 11 ) [node name="On DuckReleased" type="Node" parent="StateChart/Root/Movement/Grounded/Ducking"] script = ExtResource( 10 ) to = NodePath("../../CanWalk/Still") event = "duck_released" [node name="On Shoot" type="Node" parent="StateChart/Root/Movement/Grounded/Ducking"] script = ExtResource( 10 ) to = NodePath("../../Shooting") event = "shoot" guard_expression = "can_shoot" [node name="On Jump" type="Node" parent="StateChart/Root/Movement/Grounded/Ducking"] script = ExtResource( 10 ) __meta__ = { "_editor_description_": "enter jump state when the jump button is pressed" } to = NodePath("../../../Airborne/Jump/NormalJump") event = "jump" [node name="Shooting" type="Node" parent="StateChart/Root/Movement/Grounded"] script = ExtResource( 11 ) consumed_events = [ "jump", "duck_pressed" ] [node name="On ShootEnd" type="Node" parent="StateChart/Root/Movement/Grounded/Shooting"] script = ExtResource( 10 ) to = NodePath("../../CanWalk") event = "shoot_end" [node name="Pushing" type="Node" parent="StateChart/Root/Movement/Grounded"] script = ExtResource( 11 ) [node name="On PushStop" type="Node" parent="StateChart/Root/Movement/Grounded/Pushing"] script = ExtResource( 10 ) to = NodePath("../../CanWalk") event = "push_stop" [node name="Airborne" type="Node" parent="StateChart/Root/Movement"] process_priority = 5 script = ExtResource( 9 ) __meta__ = { "_editor_description_": "SG is in the air and falling DOWN, better think fast!" } initial_state = NodePath("Falling") [node name="On Jump If Redfeather" type="Node" parent="StateChart/Root/Movement/Airborne"] script = ExtResource( 10 ) __meta__ = { "_editor_description_": "enter double jump state when the jump button is pressed" } to = NodePath("../Jump/NormalJump") event = "jump" guard_expression = "red_feather" [node name="On Grounded" type="Node" parent="StateChart/Root/Movement/Airborne"] script = ExtResource( 10 ) to = NodePath("../../Grounded") event = "grounded" [node name="On Shoot" type="Node" parent="StateChart/Root/Movement/Airborne"] script = ExtResource( 10 ) to = NodePath("../AirShooting") event = "shoot" guard_expression = "can_shoot" [node name="On LadderTouched" type="Node" parent="StateChart/Root/Movement/Airborne"] script = ExtResource( 10 ) to = NodePath("../../Climbing") event = "ladder_touched" [node name="Jump" type="Node" parent="StateChart/Root/Movement/Airborne"] script = ExtResource( 9 ) initial_state = NodePath("NormalJump") [node name="On Jump" type="Node" parent="StateChart/Root/Movement/Airborne/Jump"] script = ExtResource( 10 ) __meta__ = { "_editor_description_": "enter double jump state when the jump button is pressed" } to = NodePath("../../DoubleJump") event = "jump" [node name="On JumpPeak" type="Node" parent="StateChart/Root/Movement/Airborne/Jump"] script = ExtResource( 10 ) to = NodePath("../../Falling/NormalFalling") event = "jump_peak" [node name="NormalJump" type="Node" parent="StateChart/Root/Movement/Airborne/Jump"] script = ExtResource( 11 ) [node name="On JumpReleased" type="Node" parent="StateChart/Root/Movement/Airborne/Jump/NormalJump"] script = ExtResource( 10 ) __meta__ = { "_editor_description_": "" } to = NodePath("../../../Falling/NormalFalling") event = "jump_released" [node name="LadderJump" type="Node" parent="StateChart/Root/Movement/Airborne/Jump"] script = ExtResource( 11 ) [node name="Falling" type="Node" parent="StateChart/Root/Movement/Airborne"] script = ExtResource( 9 ) initial_state = NodePath("NormalFalling") [node name="On Jump" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"] script = ExtResource( 10 ) __meta__ = { "_editor_description_": "enter double jump state when the jump button is pressed" } to = NodePath("../../DoubleJump") event = "jump" [node name="CoyoteFalling" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"] script = ExtResource( 11 ) [node name="On Jump" type="Node" parent="StateChart/Root/Movement/Airborne/Falling/CoyoteFalling"] script = ExtResource( 10 ) __meta__ = { "_editor_description_": "enter jump state when the jump button is pressed" } to = NodePath("../../../Jump/NormalJump") event = "jump" [node name="On CoyoteTimeout" type="Node" parent="StateChart/Root/Movement/Airborne/Falling/CoyoteFalling"] script = ExtResource( 10 ) to = NodePath("../../ScaredFalling") delay = 0.067 [node name="NormalFalling" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"] script = ExtResource( 11 ) [node name="ScaredFalling" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"] script = ExtResource( 11 ) [node name="DoubleJump" type="Node" parent="StateChart/Root/Movement/Airborne"] script = ExtResource( 11 ) [node name="AirShooting" type="Node" parent="StateChart/Root/Movement/Airborne"] script = ExtResource( 11 ) [node name="Climbing" type="Node" parent="StateChart/Root/Movement"] script = ExtResource( 11 ) __meta__ = { "_editor_description_": "stuck to ladder" } [node name="On LadderJump" type="Node" parent="StateChart/Root/Movement/Climbing"] script = ExtResource( 10 ) to = NodePath("../../Airborne/Jump/LadderJump") event = "ladder_jump" [node name="On LadderDetach" type="Node" parent="StateChart/Root/Movement/Climbing"] script = ExtResource( 10 ) to = NodePath("../../Airborne/Falling/NormalFalling") event = "ladder_detach" [node name="Inactive" type="Node" parent="StateChart/Root/Movement"] script = ExtResource( 11 ) __meta__ = { "_editor_description_": "player can not move or do anything, immobile" } [node name="On Respawn" type="Node" parent="StateChart/Root/Movement/Inactive"] script = ExtResource( 10 ) to = NodePath("../../Grounded") event = "get_real" [node name="Health" type="Node" parent="StateChart/Root"] script = ExtResource( 9 ) initial_state = NodePath("Vulnerable") [node name="Vulnerable" type="Node" parent="StateChart/Root/Health"] script = ExtResource( 11 ) [node name="On Hurt" type="Node" parent="StateChart/Root/Health/Vulnerable"] script = ExtResource( 10 ) to = NodePath("../../Dead") event = "hurt" [node name="On BecomeInvulnerable" type="Node" parent="StateChart/Root/Health/Vulnerable"] script = ExtResource( 10 ) to = NodePath("../../Invulnerable") event = "become_invulnerable" [node name="Invulnerable" type="Node" parent="StateChart/Root/Health"] script = ExtResource( 11 ) [node name="Respawn" type="Node" parent="StateChart/Root/Health"] script = ExtResource( 11 ) [node name="If Iframes" type="Node" parent="StateChart/Root/Health/Respawn"] script = ExtResource( 10 ) to = NodePath("../../Vulnerable") delay = 0.5 guard_expression = "use_iframes" [node name="On Timeout" type="Node" parent="StateChart/Root/Health/Respawn"] script = ExtResource( 10 ) to = NodePath("../../Vulnerable") guard_expression = "!use_iframes" [node name="Dead" type="Node" parent="StateChart/Root/Health"] script = ExtResource( 11 ) [node name="On Respawn" type="Node" parent="StateChart/Root/Health/Dead"] script = ExtResource( 10 ) to = NodePath("../../Respawn") event = "respawn" guard_expression = "can_respawn" [node name="StateDebugLayer" type="CanvasLayer" parent="."] layer = 128 [node name="StateChartDebug" type="Tree" parent="StateDebugLayer"] visible = false anchor_left = 1.0 anchor_right = 1.0 margin_left = -147.0 margin_bottom = 137.0 theme = ExtResource( 7 ) custom_styles/bg = SubResource( 4 ) script = ExtResource( 8 ) [connection signal="body_entered" from="Hitbox" to="." method="_on_Hitbox_body_entered"] [connection signal="state_physics_processing" from="StateChart/Root/Movement" to="." method="_process_movement"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded" to="." method="_on_Grounded_state_entered"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Grounded" to="." method="_process_grounded"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Grounded/CanWalk" to="." method="_process_horizontal_movement_grounded"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Grounded/CanWalk" to="." method="_process_can_walk"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded/CanWalk/Still" to="." method="_on_Still_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded/CanWalk/Walking" to="." method="_on_Walking_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded/CanWalk/Blinking" to="." method="_on_Blinking_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded/CanWalk/Stimming" to="." method="_on_Stimming_state_entered"] [connection signal="event_received" from="StateChart/Root/Movement/Grounded/Ducking" to="." method="_on_Ducking_event_received"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded/Ducking" to="." method="_on_Ducking_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded/Shooting" to="." method="_on_Shooting_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded/Pushing" to="." method="_on_Pushing_state_entered"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Grounded/Pushing" to="." method="_process_pushing"] [connection signal="state_entered" from="StateChart/Root/Movement/Airborne" to="." method="_on_Airborne_state_entered"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne" to="." method="_process_gravity"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/Jump" to="." method="_process_horizontal_movement"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/Jump" to="." method="_process_jump"] [connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Jump/NormalJump" to="." method="_on_NormalJump_state_entered"] [connection signal="state_exited" from="StateChart/Root/Movement/Airborne/Jump/NormalJump" to="." method="_on_NormalJump_state_exited"] [connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Jump/LadderJump" to="." method="_on_LadderJump_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Falling/CoyoteFalling" to="." method="_on_CoyoteFalling_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Falling/NormalFalling" to="." method="_on_NormalFalling_state_entered"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/Falling/NormalFalling" to="." method="_process_horizontal_movement"] [connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Falling/ScaredFalling" to="." method="_on_ScaredFalling_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Airborne/DoubleJump" to="." method="_on_DoubleJump_state_entered"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/DoubleJump" to="." method="_process_horizontal_movement"] [connection signal="state_entered" from="StateChart/Root/Movement/Airborne/AirShooting" to="." method="_on_AirShooting_state_entered"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/AirShooting" to="." method="_process_horizontal_movement"] [connection signal="state_entered" from="StateChart/Root/Movement/Climbing" to="." method="_on_Climbing_state_entered"] [connection signal="state_exited" from="StateChart/Root/Movement/Climbing" to="." method="_on_Climbing_state_exited"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Climbing" to="." method="_process_climbing"] [connection signal="state_entered" from="StateChart/Root/Health/Respawn" to="." method="_on_Respawn_state_entered"] [connection signal="state_entered" from="StateChart/Root/Health/Dead" to="." method="_on_Dead_state_entered"]