[gd_scene load_steps=27 format=3 uid="uid://bwtpsjpe2lf7l"] [ext_resource type="Script" uid="uid://dhyi4yn0xleoy" path="res://objects/player/player.gd" id="1_xs4s5"] [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"] [sub_resource type="CircleShape2D" id="CircleShape2D_tvyy1"] radius = 6.0 [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="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")] 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 gravity = 450.0 jump_power = 180.0 splat_launch_power = 240.0 splat_offset = 6.0 state_chart = NodePath("StateChart") graphics = NodePath("Graphics") run_animation = NodePath("Graphics/Sprite/Run") [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 = 4 vframes = 4 frame = 10 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="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="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="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 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="Jumping" type="Node" parent="StateChart/Root/Airborne"] editor_description = "Player has jumped and is rising." script = ExtResource("10_mvu25") [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="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="Floating" type="Node" parent="StateChart/Root"] script = ExtResource("6_jnxnd") initial_state = NodePath("UnSplat") [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 = "" [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 = ".25" [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_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="_apply_gravity"] [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="." method="_start_jump"] [connection signal="state_entered" from="StateChart/Root/Airborne/Jumping" to="Graphics/Sprite/Jump" method="play"] [connection signal="state_entered" from="StateChart/Root/Airborne/Jumping" to="Sounds/Jump" method="play"] [connection signal="state_entered" from="StateChart/Root/Airborne/Missile" to="Graphics/Sprite/Missile" 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="_face_towards_velocity"] [connection signal="state_physics_processing" from="StateChart/Root/Airborne/Missile" to="." method="_check_for_splat"] [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="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"]