diff --git a/maps/level_z.tscn b/maps/level_z.tscn index cca6728..8d2d0de 100644 --- a/maps/level_z.tscn +++ b/maps/level_z.tscn @@ -24,19 +24,19 @@ texture = ExtResource("1_h5jcm") [node name="TileMap" type="TileMapLayer" parent="."] z_index = -100 use_parent_material = true -tile_map_data = PackedByteArray("AAAAAAsAAAAAAAAAAAABAAsAAAAAAAAAAAACAAsAAAAAAAAAAAAHAAsAAAAAAAAAAAAIAAsAAAAAAAAAAAAJAAsAAAAAAAAAAAAKAAsAAAAAAAAAAAALAAsAAAAAAAAAAAANAAsAAAAAAAAAAAAOAAsAAAAAAAAAAAAPAAsAAAAAAAAAAAAQAAsAAAAAAAAAAAARAAsAAAAAAAAAAAADAAsAAAAAAAAAAAAEAAsAAAAAAAAAAAAFAAsAAAAAAAAAAAAGAAsAAAAAAAAAAAAMAAsAAAAAAAAAAAAFAAoAAAAAAAAAAAAGAAoAAAAAAAAAAAAGAAkAAAAAAAAAAAAHAAkAAAAAAAAAAAAIAAkAAAAAAAAAAAAJAAkAAAAAAAAAAAAKAAkAAAAAAAAAAAALAAkAAAAAAAAAAAAMAAkAAAAAAAAAAAALAAoAAAAAAAAAAAAKAAoAAAAAAAAAAAAJAAoAAAAAAAAAAAAIAAoAAAAAAAAAAAAHAAoAAAAAAAAAAAAMAAoAAAAAAAAAAAANAAoAAAAAAAAAAAAOAAoAAAAAAAAAAAAPAAoAAAAAAAAAAAAPAAkAAAAAAAAAAAAQAAkAAAAAAAAAAAAQAAgAAAAAAAAAAAAQAAcAAAAAAAAAAAAQAAYAAAAAAAAAAAARAAcAAAAAAAAAAAAQAAoAAAAAAAAAAAARAAkAAAAAAAAAAAARAAgAAAAAAAAAAAARAAoAAAAAAAAAAAARAAYAAAAAAAAAAAARAAUAAAAAAAAAAAARAAQAAAAAAAAAAAAQAAQAAAAAAAAAAAAQAAUAAAAAAAAAAAAFAAkAAAAAAAAAAAAEAAkAAAAAAAAAAAADAAkAAAAAAAAAAAACAAkAAAAAAAAAAAABAAkAAAAAAAAAAAABAAoAAAAAAAAAAAACAAoAAAAAAAAAAAADAAoAAAAAAAAAAAAEAAoAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAkAAAAAAAAAAAABAAgAAAAAAAAAAAABAAcAAAAAAAAAAAABAAYAAAAAAAAAAAABAAUAAAAAAAAAAAABAAQAAAAAAAAAAAABAAMAAAAAAAAAAAABAAIAAAAAAAAAAAAKAAgAAAAAAAAAAAAKAAcAAAAAAAAAAAALAAcAAAAAAAAAAAALAAgAAAAAAAAAAAANAAkAAAAAAAAAAAAOAAkAAAAAAAAAAAA=") +tile_map_data = PackedByteArray("AAAAAAsAAAAAAAAAAAABAAsAAAAAAAAAAAACAAsAAAAAAAAAAAAHAAsAAAAAAAAAAAAIAAsAAAAAAAAAAAAJAAsAAAAAAAAAAAAKAAsAAAAAAAAAAAALAAsAAAAAAAAAAAANAAsAAAAAAAAAAAAOAAsAAAAAAAAAAAAPAAsAAAAAAAAAAAAQAAsAAAAAAAAAAAARAAsAAAAAAAAAAAADAAsAAAAAAAAAAAAEAAsAAAAAAAAAAAAFAAsAAAAAAAAAAAAGAAsAAAAAAAAAAAAMAAsAAAAAAAAAAAAFAAoAAAAAAAAAAAAGAAoAAAAAAAAAAAAGAAkAAAAAAAAAAAAHAAkAAAAAAAAAAAAIAAkAAAAAAAAAAAAJAAkAAAAAAAAAAAAKAAkAAAAAAAAAAAALAAkAAAAAAAAAAAAMAAkAAAAAAAAAAAALAAoAAAAAAAAAAAAKAAoAAAAAAAAAAAAJAAoAAAAAAAAAAAAIAAoAAAAAAAAAAAAHAAoAAAAAAAAAAAAMAAoAAAAAAAAAAAANAAoAAAAAAAAAAAAOAAoAAAAAAAAAAAAPAAoAAAAAAAAAAAAPAAkAAAAAAAAAAAAQAAkAAAAAAAAAAAAQAAoAAAAAAAAAAAARAAkAAAAAAAAAAAARAAoAAAAAAAAAAAAFAAkAAAAAAAAAAAAEAAkAAAAAAAAAAAADAAkAAAAAAAAAAAACAAkAAAAAAAAAAAABAAkAAAAAAAAAAAABAAoAAAAAAAAAAAACAAoAAAAAAAAAAAADAAoAAAAAAAAAAAAEAAoAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAkAAAAAAAAAAAABAAgAAAAAAAAAAAABAAcAAAAAAAAAAAABAAYAAAAAAAAAAAABAAUAAAAAAAAAAAABAAQAAAAAAAAAAAABAAMAAAAAAAAAAAABAAIAAAAAAAAAAAANAAkAAAAAAAAAAAAOAAkAAAAAAAAAAAA=") tile_set = ExtResource("2_dj7w1") [node name="Lashy" parent="." instance=ExtResource("4_gykx6")] -position = Vector2(32, 144) +position = Vector2(144, 112) launch_power = 300.0 idle_radius = 6.0 [node name="Player" parent="." instance=ExtResource("5_5v7mr")] -position = Vector2(120, 144) +position = Vector2(96, 136) [node name="Spring" parent="." instance=ExtResource("6_tlqas")] -position = Vector2(72, 144) +position = Vector2(32, 72) [node name="RotoBoy" parent="." instance=ExtResource("7_j1102")] position = Vector2(240, 40) diff --git a/objects/player/player.gd b/objects/player/player.gd index c88c706..0c7ac0b 100644 --- a/objects/player/player.gd +++ b/objects/player/player.gd @@ -10,7 +10,9 @@ extends CharacterBody2D @export_group("Air Movement") @export var gravity: float +@export var fast_gravity: float @export var jump_power: float +@export var jump_horizontal_boost: float @export var splat_launch_power: float @export var splat_offset: float @export var chomp_vault_impulse: Vector2 @@ -56,6 +58,10 @@ func _physics_process(delta: float) -> void: func _unhandled_input(event: InputEvent) -> void: if event.is_action_pressed(&"jump"): state_chart.send_event(&"jump_pressed") + if event.is_action_pressed(&"grab"): + state_chart.send_event(&"grab_pressed") + if event.is_action_released(&"grab"): + state_chart.send_event(&"grab_released") func kill() -> void: @@ -90,13 +96,17 @@ func _apply_turn_acceleration(delta: float) -> void: #region Falling func _apply_gravity(delta: float) -> void: - velocity.y += gravity * delta + if input_dir.y > 0.0: + velocity.y += fast_gravity * delta + else: + velocity.y += gravity * delta #endregion #region Jumping func _start_jump() -> void: velocity.y = -jump_power + velocity.x += input_dir.x * jump_horizontal_boost #endregion @@ -135,9 +145,11 @@ func _face_towards_velocity(_delta: float) -> void: func _check_for_splat(delta: float) -> void: var col = move_and_collide(_last_velocity * delta, true) if col: + _splat_normal = col.get_normal() + if _splat_normal.dot(Vector2.UP) > 0.5: + return velocity = Vector2.ZERO global_position += col.get_travel() - _splat_normal = col.get_normal() var angle = col.get_normal().angle() if graphics.scale.x > 0.0: angle += PI diff --git a/objects/player/player.tscn b/objects/player/player.tscn index cfe8fc9..54c0aaa 100644 --- a/objects/player/player.tscn +++ b/objects/player/player.tscn @@ -118,7 +118,9 @@ max_run_speed = 100.0 turn_acceleration = 300.0 stopping_force = 250.0 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) @@ -438,6 +440,13 @@ 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") @@ -482,5 +491,6 @@ delay_in_seconds = "0.25" [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"] diff --git a/project.godot b/project.godot index c556d90..e38a8ef 100644 --- a/project.godot +++ b/project.godot @@ -73,6 +73,11 @@ jump={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":90,"key_label":0,"unicode":122,"location":0,"echo":false,"script":null) ] } +grab={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":88,"key_label":0,"unicode":120,"location":0,"echo":false,"script":null) +] +} [layer_names]