[gd_scene load_steps=37 format=3 uid="uid://bwtpsjpe2lf7l"] [ext_resource type="Script" uid="uid://dhyi4yn0xleoy" path="res://objects/player/player.gd" id="1_xs4s5"] [ext_resource type="PackedScene" uid="uid://djdpcsmms727b" path="res://objects/effects/bouncing_spark.tscn" id="2_28utn"] [ext_resource type="Texture2D" uid="uid://c71nqfyw4a3v4" path="res://assets/textures/player/capri.png" id="3_trcll"] [ext_resource type="Script" uid="uid://cv55s54clajw5" path="res://scripts/spritesheet_animation/spritesheet_animation.gd" id="4_bsdw5"] [ext_resource type="AudioStream" uid="uid://4kxio0mlrr4k" path="res://assets/audio/vox/capri_jump2.ogg" id="5_45urx"] [ext_resource type="Script" uid="uid://bhrh1qkv7nlyl" path="res://addons/godot_state_charts/state_chart.gd" id="5_bcjtl"] [ext_resource type="AudioStream" uid="uid://dfa1ev73rsc7g" path="res://assets/audio/vox/capri_die.ogg" id="5_bi5m7"] [ext_resource type="AudioStream" uid="uid://c350jqy4yue8c" path="res://assets/audio/vox/capri_jump3.ogg" id="6_c34wb"] [ext_resource type="Script" uid="uid://b11v7h3ny6kh1" path="res://addons/godot_state_charts/compound_state.gd" id="6_jnxnd"] [ext_resource type="Script" uid="uid://rrj3six8lu8p" path="res://addons/godot_state_charts/transition.gd" id="7_rgjdc"] [ext_resource type="Script" uid="uid://b6u7unac5srh0" path="res://addons/godot_state_charts/expression_guard.gd" id="8_8i2im"] [ext_resource type="AudioStream" uid="uid://cxfl2cqlre0ma" path="res://assets/audio/vox/capri_die2.ogg" id="8_45rsp"] [ext_resource type="AudioStream" uid="uid://7be7ts3rdegh" path="res://assets/audio/vox/capri_jump.ogg" id="9_8c74o"] [ext_resource type="AudioStream" uid="uid://c6gck1lyk6aer" path="res://assets/audio/vox/capri_die3.ogg" id="9_ylcck"] [ext_resource type="Script" uid="uid://cyvphy8py4ntr" path="res://addons/godot_state_charts/atomic_state.gd" id="10_mvu25"] [ext_resource type="AudioStream" uid="uid://cquhska140wrt" path="res://assets/audio/vox/capri_whee.ogg" id="10_xlkbi"] [ext_resource type="AudioStream" uid="uid://e3ptgegyv17" path="res://assets/audio/vox/capri_whee2.ogg" id="11_l55sg"] [ext_resource type="AudioStream" uid="uid://bauqpxusk0p1i" path="res://assets/audio/vox/capri_whee3.ogg" id="12_28utn"] [ext_resource type="AudioStream" uid="uid://bhr0uvens076m" path="res://assets/audio/sfx/se_turn2.ogg" id="13_yyeqs"] [ext_resource type="AudioStream" uid="uid://c7b60nylv85rw" path="res://assets/audio/sfx/se_Attack.wav" id="14_l55sg"] [sub_resource type="CircleShape2D" id="CircleShape2D_tvyy1"] radius = 6.0 [sub_resource type="RectangleShape2D" id="RectangleShape2D_l55sg"] size = Vector2(4, 5) [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_45rsp"] streams_count = 3 stream_0/stream = ExtResource("9_8c74o") stream_1/stream = ExtResource("5_45urx") stream_2/stream = ExtResource("6_c34wb") [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_x5bgp"] streams_count = 3 stream_0/stream = ExtResource("5_bi5m7") stream_1/stream = ExtResource("8_45rsp") stream_2/stream = ExtResource("9_ylcck") [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_u8bnf"] streams_count = 3 stream_0/stream = ExtResource("10_xlkbi") stream_1/stream = ExtResource("11_l55sg") stream_2/stream = ExtResource("12_28utn") [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_lc6id"] random_pitch = 1.1 streams_count = 1 stream_0/stream = ExtResource("13_yyeqs") [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_28utn"] random_pitch = 1.1 streams_count = 1 stream_0/stream = ExtResource("14_l55sg") [sub_resource type="Resource" id="Resource_sfpnl"] resource_name = "Not On Floor" script = ExtResource("8_8i2im") expression = "not on_floor" metadata/_custom_type_script = "uid://b6u7unac5srh0" [sub_resource type="Resource" id="Resource_mq184"] resource_name = "Horizontal Input" script = ExtResource("8_8i2im") expression = "input_dir.x != 0.0" metadata/_custom_type_script = "uid://b6u7unac5srh0" [sub_resource type="Resource" id="Resource_nye2q"] resource_name = "Horizontal Movement" script = ExtResource("8_8i2im") expression = "velocity.x != 0.0" metadata/_custom_type_script = "uid://b6u7unac5srh0" [sub_resource type="Resource" id="Resource_n665q"] resource_name = "No Horizontal Movement" script = ExtResource("8_8i2im") expression = "velocity.x == 0.0" metadata/_custom_type_script = "uid://b6u7unac5srh0" [sub_resource type="Resource" id="Resource_8c74o"] resource_name = "No Horizontal Input" script = ExtResource("8_8i2im") expression = "input_dir.x == 0.0" metadata/_custom_type_script = "uid://b6u7unac5srh0" [sub_resource type="Resource" id="Resource_xs4s5"] resource_name = "Opposite Input" script = ExtResource("8_8i2im") expression = "input_dir.x != signf(velocity.x)" metadata/_custom_type_script = "uid://b6u7unac5srh0" [sub_resource type="Resource" id="Resource_e1cbd"] resource_name = "Aligned Input" script = ExtResource("8_8i2im") expression = "input_dir.x == signf(velocity.x)" metadata/_custom_type_script = "uid://b6u7unac5srh0" [sub_resource type="Resource" id="Resource_163ft"] resource_name = "On Floor" script = ExtResource("8_8i2im") expression = "on_floor" metadata/_custom_type_script = "uid://b6u7unac5srh0" [sub_resource type="Resource" id="Resource_whx0j"] resource_name = "Falling Down" script = ExtResource("8_8i2im") expression = "velocity.y > 0.0" metadata/_custom_type_script = "uid://b6u7unac5srh0" [node name="Player" type="CharacterBody2D" node_paths=PackedStringArray("state_chart", "graphics", "run_animation", "wall_cast", "corner_cast", "corner_height_cast", "corner_snap_point", "vault_off_point", "bonk_effect_point")] collision_layer = 16 collision_mask = 3 floor_snap_length = 3.0 script = ExtResource("1_xs4s5") run_acceleration = 200.0 max_run_speed = 100.0 turn_acceleration = 300.0 stopping_force = 250.0 bonk_speed_threshold = 75.0 bonk_power = 100.0 bonk_effect_count = 3 bonk_effect_scene = ExtResource("2_28utn") gravity = 450.0 fast_gravity = 675.0 jump_power = 180.0 jump_horizontal_boost = 25.0 splat_launch_power = 240.0 splat_offset = 6.0 chomp_vault_impulse = Vector2(60, -60) state_chart = NodePath("StateChart") graphics = NodePath("Graphics") run_animation = NodePath("Graphics/Sprite/Run") wall_cast = NodePath("Graphics/CornerDetector/WallCast") corner_cast = NodePath("Graphics/CornerDetector/CornerCast") corner_height_cast = NodePath("Graphics/CornerDetector/CornerHeightCast") corner_snap_point = NodePath("Graphics/CornerDetector/CornerSnapPoint") vault_off_point = NodePath("Graphics/CornerDetector/VaultOffPoint") bonk_effect_point = NodePath("Graphics/SparksPoint") [node name="CollisionShape" type="CollisionShape2D" parent="."] shape = SubResource("CircleShape2D_tvyy1") debug_color = Color(3.32102e-06, 0.648976, 0.161954, 0.42) [node name="Graphics" type="Node2D" parent="."] [node name="Sprite" type="Sprite2D" parent="Graphics"] texture = ExtResource("3_trcll") offset = Vector2(0, -2) hframes = 8 vframes = 4 region_rect = Rect2(0, 0, 64, 64) [node name="Idle" type="Node" parent="Graphics/Sprite"] script = ExtResource("4_bsdw5") [node name="Bark" type="Node" parent="Graphics/Sprite"] script = ExtResource("4_bsdw5") first_frame = Vector2i(1, 0) [node name="Bonk" type="Node" parent="Graphics/Sprite"] script = ExtResource("4_bsdw5") first_frame = Vector2i(3, 0) [node name="StunnedFall" type="Node" parent="Graphics/Sprite"] script = ExtResource("4_bsdw5") first_frame = Vector2i(3, 2) [node name="Skid" type="Node" parent="Graphics/Sprite"] script = ExtResource("4_bsdw5") first_frame = Vector2i(2, 0) [node name="Run" type="Node" parent="Graphics/Sprite"] script = ExtResource("4_bsdw5") first_frame = Vector2i(0, 1) frames = 4 fps = 16.0 loop = true [node name="Fall" type="Node" parent="Graphics/Sprite"] script = ExtResource("4_bsdw5") first_frame = Vector2i(0, 2) [node name="Jump" type="Node" parent="Graphics/Sprite"] script = ExtResource("4_bsdw5") first_frame = Vector2i(1, 2) [node name="Missile" type="Node" parent="Graphics/Sprite"] script = ExtResource("4_bsdw5") first_frame = Vector2i(2, 2) [node name="Splat" type="Node" parent="Graphics/Sprite"] script = ExtResource("4_bsdw5") first_frame = Vector2i(0, 3) frames = 2 fps = 8.0 [node name="UnSplat" type="Node" parent="Graphics/Sprite"] script = ExtResource("4_bsdw5") first_frame = Vector2i(2, 3) frames = 2 fps = 8.0 [node name="ChompVault" type="Node" parent="Graphics/Sprite"] editor_description = "Triggers transition out of ChompVault state when animation is finished." script = ExtResource("4_bsdw5") first_frame = Vector2i(4, 0) frames = 3 fps = 10.0 metadata/_custom_type_script = "uid://cv55s54clajw5" [node name="CornerDetector" type="Node2D" parent="Graphics"] metadata/_edit_group_ = true [node name="WallCast" type="ShapeCast2D" parent="Graphics/CornerDetector"] position = Vector2(0, 2.5) enabled = false shape = SubResource("RectangleShape2D_l55sg") target_position = Vector2(6, 0) max_results = 1 [node name="CornerCast" type="RayCast2D" parent="Graphics/CornerDetector"] position = Vector2(0, -1) enabled = false target_position = Vector2(8, 0) [node name="CornerHeightCast" type="RayCast2D" parent="Graphics/CornerDetector"] position = Vector2(9, -1) enabled = false target_position = Vector2(0, 8) [node name="CornerSnapPoint" type="Node2D" parent="Graphics/CornerDetector"] position = Vector2(4, 2) [node name="VaultOffPoint" type="Node2D" parent="Graphics/CornerDetector"] position = Vector2(2, 7) [node name="SparksPoint" type="Node2D" parent="Graphics"] position = Vector2(8, 0) [node name="Sounds" type="Node" parent="."] [node name="Jump" type="AudioStreamPlayer" parent="Sounds"] stream = SubResource("AudioStreamRandomizer_45rsp") bus = &"Capri" [node name="Death" type="AudioStreamPlayer" parent="Sounds"] stream = SubResource("AudioStreamRandomizer_x5bgp") bus = &"Capri" [node name="Whee" type="AudioStreamPlayer" parent="Sounds"] stream = SubResource("AudioStreamRandomizer_u8bnf") [node name="Wallkick" type="AudioStreamPlayer" parent="Sounds"] stream = SubResource("AudioStreamRandomizer_lc6id") volume_db = -20.0 [node name="HitWall" type="AudioStreamPlayer" parent="Sounds"] stream = SubResource("AudioStreamRandomizer_28utn") volume_db = -10.0 [node name="StateChart" type="Node" parent="."] script = ExtResource("5_bcjtl") initial_expression_properties = { &"input_dir": Vector2(0, 0), &"on_floor": false, &"velocity": Vector2(0, 0) } [node name="Root" type="Node" parent="StateChart"] script = ExtResource("6_jnxnd") initial_state = NodePath("Grounded") [node name="on Killed" type="Node" parent="StateChart/Root"] script = ExtResource("7_rgjdc") to = NodePath("../Grounded") event = &"killed" delay_in_seconds = "0.0" [node name="on Launched" type="Node" parent="StateChart/Root"] script = ExtResource("7_rgjdc") to = NodePath("../Airborne/Missile") event = &"launched" delay_in_seconds = "0.0" [node name="Grounded" type="Node" parent="StateChart/Root"] editor_description = "Player is standing on a floor." script = ExtResource("6_jnxnd") initial_state = NodePath("Standing") [node name="on Bonked" type="Node" parent="StateChart/Root/Grounded"] script = ExtResource("7_rgjdc") to = NodePath("../../Floating/Bonk") event = &"bonked" delay_in_seconds = "0.0" [node name="on JumpPressed" type="Node" parent="StateChart/Root/Grounded"] script = ExtResource("7_rgjdc") to = NodePath("../../Airborne/Jumping") event = &"jump_pressed" delay_in_seconds = "0.0" [node name="if NotOnFloor" type="Node" parent="StateChart/Root/Grounded"] editor_description = "Transition to falling state if not touching a floor." script = ExtResource("7_rgjdc") to = NodePath("../../Airborne/Falling") event = &"tick" guard = SubResource("Resource_sfpnl") delay_in_seconds = "0.0" [node name="Standing" type="Node" parent="StateChart/Root/Grounded"] editor_description = "Player is standing still or coming to a stop." script = ExtResource("6_jnxnd") initial_state = NodePath("Idle") metadata/_custom_type_script = "uid://b11v7h3ny6kh1" [node name="if WalkHeld" type="Node" parent="StateChart/Root/Grounded/Standing"] editor_description = "Transition to running state if a horizontal direction is being held." script = ExtResource("7_rgjdc") to = NodePath("../../Running") guard = SubResource("Resource_mq184") delay_in_seconds = "0.0" [node name="Idle" type="Node" parent="StateChart/Root/Grounded/Standing"] editor_description = "Player is stopped, standing still." script = ExtResource("10_mvu25") [node name="if Moving" type="Node" parent="StateChart/Root/Grounded/Standing/Idle"] editor_description = "Transition to stopping state if the player has horizontal velocity." script = ExtResource("7_rgjdc") to = NodePath("../../Stopping") guard = SubResource("Resource_nye2q") delay_in_seconds = "0.0" [node name="Stopping" type="Node" parent="StateChart/Root/Grounded/Standing"] editor_description = "Player is slowing to a stop naturally." script = ExtResource("10_mvu25") [node name="if Stopped" type="Node" parent="StateChart/Root/Grounded/Standing/Stopping"] editor_description = "Transition to idle state when the player has come to a full stop." script = ExtResource("7_rgjdc") to = NodePath("../../Idle") guard = SubResource("Resource_n665q") delay_in_seconds = "0.0" [node name="Running" type="Node" parent="StateChart/Root/Grounded"] editor_description = "Player is accelerating in the held input direction." script = ExtResource("10_mvu25") [node name="if WalkReleased" type="Node" parent="StateChart/Root/Grounded/Running"] editor_description = "Transition to standing state if no input direction is held." script = ExtResource("7_rgjdc") to = NodePath("../../Standing") guard = SubResource("Resource_8c74o") delay_in_seconds = "0.0" [node name="if OppositeInput" type="Node" parent="StateChart/Root/Grounded/Running"] editor_description = "Transition to turning state if the held input dir is opposite the horizontal velocity." script = ExtResource("7_rgjdc") to = NodePath("../../Turning") guard = SubResource("Resource_xs4s5") delay_in_seconds = "0.0" [node name="Turning" type="Node" parent="StateChart/Root/Grounded"] editor_description = "Player is more quickly accelerating in the held input direction to slow and turn around." script = ExtResource("10_mvu25") [node name="if WalkReleased" type="Node" parent="StateChart/Root/Grounded/Turning"] editor_description = "Transition to standing state if no input direction is held." script = ExtResource("7_rgjdc") to = NodePath("../../Standing") guard = SubResource("Resource_8c74o") delay_in_seconds = "0.0" [node name="if AlignedInput" type="Node" parent="StateChart/Root/Grounded/Turning"] editor_description = "Transition to running state when input direction matches horizontal velocity." script = ExtResource("7_rgjdc") to = NodePath("../../Running") guard = SubResource("Resource_e1cbd") delay_in_seconds = "0.0" [node name="Airborne" type="Node" parent="StateChart/Root"] editor_description = "Player is in the air." script = ExtResource("6_jnxnd") initial_state = NodePath("Falling") [node name="if OnFloor" type="Node" parent="StateChart/Root/Airborne"] editor_description = "Transition to grounded state if touching a floor." script = ExtResource("7_rgjdc") to = NodePath("../../Grounded") event = &"tick" guard = SubResource("Resource_163ft") delay_in_seconds = "0.0" [node name="Falling" type="Node" parent="StateChart/Root/Airborne"] editor_description = "Player is falling down." script = ExtResource("10_mvu25") [node name="on CornerDetected" type="Node" parent="StateChart/Root/Airborne/Falling"] script = ExtResource("7_rgjdc") to = NodePath("../../../Floating/ChompVault") event = &"corner_detected" delay_in_seconds = "0.0" [node name="on Bonked" type="Node" parent="StateChart/Root/Airborne/Falling"] script = ExtResource("7_rgjdc") to = NodePath("../../../Floating/Bonk") event = &"bonked" delay_in_seconds = "0.0" [node name="Jumping" type="Node" parent="StateChart/Root/Airborne"] editor_description = "Player has jumped and is rising." script = ExtResource("6_jnxnd") initial_state = NodePath("FromGround") [node name="if DownVelocity" type="Node" parent="StateChart/Root/Airborne/Jumping"] editor_description = "Transition to the falling state if moving downwards." script = ExtResource("7_rgjdc") to = NodePath("../../Falling") guard = SubResource("Resource_whx0j") delay_in_seconds = "0.0" [node name="on CornerDetected" type="Node" parent="StateChart/Root/Airborne/Jumping"] script = ExtResource("7_rgjdc") to = NodePath("../../../Floating/ChompVault") event = &"corner_detected" delay_in_seconds = "0.0" [node name="on Bonked" type="Node" parent="StateChart/Root/Airborne/Jumping"] script = ExtResource("7_rgjdc") to = NodePath("../../../Floating/Bonk") event = &"bonked" delay_in_seconds = "0.0" [node name="FromGround" type="Node" parent="StateChart/Root/Airborne/Jumping"] script = ExtResource("10_mvu25") [node name="NoBoost" type="Node" parent="StateChart/Root/Airborne/Jumping"] script = ExtResource("10_mvu25") [node name="Missile" type="Node" parent="StateChart/Root/Airborne"] editor_description = "Player is hurtling through the air and ricocheting off of surfaces." script = ExtResource("10_mvu25") [node name="on Splatted" type="Node" parent="StateChart/Root/Airborne/Missile"] editor_description = "Transition to splat state when the player hits a wall" script = ExtResource("7_rgjdc") to = NodePath("../../../Floating/Splat") event = &"splatted" delay_in_seconds = "0.0" [node name="StunnedFalling" type="Node" parent="StateChart/Root/Airborne"] script = ExtResource("10_mvu25") [node name="on Bonked" type="Node" parent="StateChart/Root/Airborne/StunnedFalling"] script = ExtResource("7_rgjdc") to = NodePath("../../../Floating/Bonk") event = &"bonked" delay_in_seconds = "0.0" [node name="Floating" type="Node" parent="StateChart/Root"] script = ExtResource("6_jnxnd") initial_state = NodePath("UnSplat") [node name="ChompVault" type="Node" parent="StateChart/Root/Floating"] editor_description = "Player is launching off of a corner." script = ExtResource("10_mvu25") [node name="on AnimationFinished" type="Node" parent="StateChart/Root/Floating/ChompVault"] script = ExtResource("7_rgjdc") to = NodePath("../../../Airborne/Jumping/NoBoost") event = &"*animation_finished" delay_in_seconds = "0.0" [node name="Splat" type="Node" parent="StateChart/Root/Floating"] editor_description = "Player has slammed into a surface (and has a moment to perform an action?)" script = ExtResource("10_mvu25") [node name="on JumpPressed" type="Node" parent="StateChart/Root/Floating/Splat"] script = ExtResource("7_rgjdc") to = NodePath("..") event = &"jump_pressed" delay_in_seconds = "0.0" [node name="on GrabPressed" type="Node" parent="StateChart/Root/Floating/Splat"] editor_description = "Detach from wall early if \"grab\" is pressed." script = ExtResource("7_rgjdc") to = NodePath("../../../Airborne/Falling") event = &"grab_pressed" delay_in_seconds = "0.0" [node name="on Timeout" type="Node" parent="StateChart/Root/Floating/Splat"] script = ExtResource("7_rgjdc") to = NodePath("../../UnSplat") delay_in_seconds = "0.75" [node name="UnSplat" type="Node" parent="StateChart/Root/Floating"] editor_description = "Player is unsticking from a surface." script = ExtResource("10_mvu25") [node name="on TimeOut" type="Node" parent="StateChart/Root/Floating/UnSplat"] script = ExtResource("7_rgjdc") to = NodePath("../../../Airborne/Falling") delay_in_seconds = "0.25" [node name="Bonk" type="Node" parent="StateChart/Root/Floating"] script = ExtResource("10_mvu25") [node name="on Timeout" type="Node" parent="StateChart/Root/Floating/Bonk"] script = ExtResource("7_rgjdc") to = NodePath("../../../Airborne/StunnedFalling") delay_in_seconds = "0.2" [node name="on JumpPressed" type="Node" parent="StateChart/Root/Floating/Bonk"] script = ExtResource("7_rgjdc") to = NodePath("../../../Airborne/Jumping/FromGround") event = &"jump_pressed" delay_in_seconds = "0.0" [connection signal="finished" from="Graphics/Sprite/ChompVault" to="StateChart/Root/Floating/ChompVault/on AnimationFinished" method="take"] [connection signal="taken" from="StateChart/Root/on Killed" to="." method="_reset_position"] [connection signal="taken" from="StateChart/Root/on Killed" to="Sounds/Death" method="play"] [connection signal="state_physics_processing" from="StateChart/Root/Grounded" to="." method="_check_for_bonk"] [connection signal="state_entered" from="StateChart/Root/Grounded/Standing/Idle" to="Graphics/Sprite/Idle" method="play"] [connection signal="state_entered" from="StateChart/Root/Grounded/Standing/Stopping" to="Graphics/Sprite/Run" method="play"] [connection signal="state_physics_processing" from="StateChart/Root/Grounded/Standing/Stopping" to="." method="_slow_to_stop"] [connection signal="state_physics_processing" from="StateChart/Root/Grounded/Standing/Stopping" to="." method="_scale_run_animation"] [connection signal="state_entered" from="StateChart/Root/Grounded/Running" to="Graphics/Sprite/Run" method="play"] [connection signal="state_physics_processing" from="StateChart/Root/Grounded/Running" to="." method="_scale_run_animation"] [connection signal="state_physics_processing" from="StateChart/Root/Grounded/Running" to="." method="_apply_run_acceleration"] [connection signal="state_entered" from="StateChart/Root/Grounded/Turning" to="Graphics/Sprite/Skid" method="play"] [connection signal="state_physics_processing" from="StateChart/Root/Grounded/Turning" to="." method="_apply_turn_acceleration"] [connection signal="state_physics_processing" from="StateChart/Root/Airborne" to="." method="_check_for_bonk"] [connection signal="state_physics_processing" from="StateChart/Root/Airborne" to="." method="_apply_gravity"] [connection signal="state_physics_processing" from="StateChart/Root/Airborne" to="." method="_check_for_corner"] [connection signal="state_entered" from="StateChart/Root/Airborne/Falling" to="Graphics/Sprite/Fall" method="play"] [connection signal="state_entered" from="StateChart/Root/Airborne/Jumping" to="Graphics/Sprite/Jump" method="play"] [connection signal="state_entered" from="StateChart/Root/Airborne/Jumping/FromGround" to="." method="_start_jump"] [connection signal="state_entered" from="StateChart/Root/Airborne/Jumping/FromGround" to="Sounds/Jump" method="play"] [connection signal="state_entered" from="StateChart/Root/Airborne/Missile" to="Graphics/Sprite/Missile" method="play"] [connection signal="state_entered" from="StateChart/Root/Airborne/Missile" to="Sounds/Whee" method="play"] [connection signal="state_entered" from="StateChart/Root/Airborne/Missile" to="Sounds/Wallkick" method="play"] [connection signal="state_exited" from="StateChart/Root/Airborne/Missile" to="." method="_restore_graphics_rotation"] [connection signal="state_physics_processing" from="StateChart/Root/Airborne/Missile" to="." method="_check_for_splat"] [connection signal="state_physics_processing" from="StateChart/Root/Airborne/Missile" to="." method="_face_towards_velocity"] [connection signal="taken" from="StateChart/Root/Airborne/Missile/on Splatted" to="Sounds/HitWall" method="play"] [connection signal="state_entered" from="StateChart/Root/Airborne/StunnedFalling" to="Graphics/Sprite/StunnedFall" method="play"] [connection signal="state_entered" from="StateChart/Root/Floating/ChompVault" to="." method="_start_chomp_vault"] [connection signal="state_entered" from="StateChart/Root/Floating/ChompVault" to="Graphics/Sprite/ChompVault" method="play"] [connection signal="taken" from="StateChart/Root/Floating/ChompVault/on AnimationFinished" to="." method="_end_chomp_vault"] [connection signal="state_entered" from="StateChart/Root/Floating/Splat" to="Graphics/Sprite/Splat" method="play"] [connection signal="taken" from="StateChart/Root/Floating/Splat/on JumpPressed" to="." method="_do_splat_launch"] [connection signal="taken" from="StateChart/Root/Floating/Splat/on GrabPressed" to="." method="_restore_graphics_rotation"] [connection signal="state_entered" from="StateChart/Root/Floating/UnSplat" to="Graphics/Sprite/UnSplat" method="play"] [connection signal="state_exited" from="StateChart/Root/Floating/UnSplat" to="." method="_restore_graphics_rotation"] [connection signal="state_entered" from="StateChart/Root/Floating/Bonk" to="." method="_enter_bonk"] [connection signal="state_entered" from="StateChart/Root/Floating/Bonk" to="Graphics/Sprite/Bonk" method="play"] [connection signal="taken" from="StateChart/Root/Floating/Bonk/on Timeout" to="." method="_apply_bonk"] [connection signal="taken" from="StateChart/Root/Floating/Bonk/on JumpPressed" to="." method="_cancel_bonk"]