From c09dfd1e7b6059bd5ef7644a78b6e8125778bd1a Mon Sep 17 00:00:00 2001 From: Minimata Date: Wed, 11 Feb 2026 17:06:18 +0100 Subject: [PATCH] more tuts, respawn mechanic when falling, reworked wall run again --- .../Vector/xbox_lb_outline.svg.import | 14 +- maps/_templates/main_scene_template.gd | 21 ++ maps/_templates/main_scene_template.gd.uid | 1 + maps/_templates/main_scene_template.tscn | 201 ++++++++++++++++++ maps/levels/tuto_sword_parry.tscn | 173 +++++++++++---- .../player_controller/PlayerController.tscn | 14 +- .../components/head/HeadSystem.cs | 5 + .../scripts/PlayerController.cs | 28 ++- 8 files changed, 404 insertions(+), 53 deletions(-) create mode 100644 maps/_templates/main_scene_template.gd create mode 100644 maps/_templates/main_scene_template.gd.uid diff --git a/assets/ui/input-prompts/Xbox Series/Vector/xbox_lb_outline.svg.import b/assets/ui/input-prompts/Xbox Series/Vector/xbox_lb_outline.svg.import index 36617f18..5f54680a 100644 --- a/assets/ui/input-prompts/Xbox Series/Vector/xbox_lb_outline.svg.import +++ b/assets/ui/input-prompts/Xbox Series/Vector/xbox_lb_outline.svg.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://db6uqhcmcfs5t" -path="res://.godot/imported/xbox_lb_outline.svg-609923d5fb24f594348efed4ab529ec6.ctex" +path.s3tc="res://.godot/imported/xbox_lb_outline.svg-609923d5fb24f594348efed4ab529ec6.s3tc.ctex" +path.etc2="res://.godot/imported/xbox_lb_outline.svg-609923d5fb24f594348efed4ab529ec6.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_lb_outline.svg" -dest_files=["res://.godot/imported/xbox_lb_outline.svg-609923d5fb24f594348efed4ab529ec6.ctex"] +dest_files=["res://.godot/imported/xbox_lb_outline.svg-609923d5fb24f594348efed4ab529ec6.s3tc.ctex", "res://.godot/imported/xbox_lb_outline.svg-609923d5fb24f594348efed4ab529ec6.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -37,7 +39,7 @@ process/normal_map_invert_y=false process/hdr_as_srgb=false process/hdr_clamp_exposure=false process/size_limit=0 -detect_3d/compress_to=1 +detect_3d/compress_to=0 svg/scale=1.0 editor/scale_with_editor_scale=false editor/convert_colors_with_editor_theme=false diff --git a/maps/_templates/main_scene_template.gd b/maps/_templates/main_scene_template.gd new file mode 100644 index 00000000..03da94e6 --- /dev/null +++ b/maps/_templates/main_scene_template.gd @@ -0,0 +1,21 @@ +extends Node3D + + +@onready var player_fell_respawn: Marker3D = $PlayerFellRespawn +@onready var animation_player: AnimationPlayer = $AnimationPlayer + +var _player: Node3D + +func _on_player_fell_tp_body_entered(body: Node3D) -> void: + _player = body + animation_player.play("player_fell") + + +func reset_player_position() -> void: + if _player == null: + return + _player.position = player_fell_respawn.position + + +func _on_death_plane_body_entered(body: Node3D) -> void: + body.queue_free() diff --git a/maps/_templates/main_scene_template.gd.uid b/maps/_templates/main_scene_template.gd.uid new file mode 100644 index 00000000..37d8c11c --- /dev/null +++ b/maps/_templates/main_scene_template.gd.uid @@ -0,0 +1 @@ +uid://beof168aw2acj diff --git a/maps/_templates/main_scene_template.tscn b/maps/_templates/main_scene_template.tscn index 45be1ffb..5af538ea 100644 --- a/maps/_templates/main_scene_template.tscn +++ b/maps/_templates/main_scene_template.tscn @@ -1,5 +1,6 @@ [gd_scene format=3 uid="uid://55wehh6xombr"] +[ext_resource type="Script" uid="uid://beof168aw2acj" path="res://maps/_templates/main_scene_template.gd" id="1_5g5a0"] [ext_resource type="PackedScene" uid="uid://bkcsjsk2ciff" path="res://addons/maaacks_game_template/base/scenes/music_players/background_music_player.tscn" id="2_roiv2"] [ext_resource type="AudioStream" uid="uid://f8cvr5s041ej" path="res://assets/audio/ambiance/637083__nox_sound__ambiance_nature_night_cricket_calm_loop_stereo.wav" id="3_boadi"] [ext_resource type="Script" uid="uid://cupqhe3qv7ero" path="res://tools/general_manager.gd" id="3_k6got"] @@ -68,13 +69,188 @@ fog_enabled = true fog_light_color = Color(1, 1, 1, 1) fog_sun_scatter = 0.5 fog_density = 0.002 +fog_aerial_perspective = 1.0 fog_sky_affect = 0.184 volumetric_fog_density = 0.004 volumetric_fog_emission = Color(1, 1, 1, 1) volumetric_fog_anisotropy = 0.6 adjustment_enabled = true +[sub_resource type="Animation" id="Animation_nyvgt"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("WorldEnvironment:environment:fog_density") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.002] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("WorldEnvironment:environment:fog_sun_scatter") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.5] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("WorldEnvironment:environment:fog_light_energy") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.0] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("WorldEnvironment:environment:fog_aerial_perspective") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.0] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("WorldEnvironment:environment:fog_height") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("WorldEnvironment:environment:fog_height_density") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} + +[sub_resource type="Animation" id="Animation_5g5a0"] +resource_name = "player_fell" +length = 2.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("WorldEnvironment:environment:fog_density") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1, 2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.002, 1.0, 0.002] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("WorldEnvironment:environment:fog_sun_scatter") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 1, 2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.5, 1.0, 0.5] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("WorldEnvironment:environment:fog_light_energy") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 1, 2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [1.0, 10.0, 1.0] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("WorldEnvironment:environment:fog_aerial_perspective") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 1, 2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [1.0, 0.0, 1.0] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("WorldEnvironment:environment:fog_height") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 1, 2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 1024.0, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("WorldEnvironment:environment:fog_height_density") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/6/type = "method" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath(".") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(1), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"reset_player_position" +}] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_nyvgt"] +_data = { +&"RESET": SubResource("Animation_nyvgt"), +&"player_fell": SubResource("Animation_5g5a0") +} + +[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_gm8ij"] + [node name="Main" type="Node3D" unique_id=955321579] +script = ExtResource("1_5g5a0") [node name="DebugLayer" type="CanvasLayer" parent="." unique_id=294370189] @@ -104,6 +280,9 @@ shadow_enabled = true shadow_opacity = 0.95 shadow_blur = 2.435 +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=511897109] +libraries/ = SubResource("AnimationLibrary_nyvgt") + [node name="Player" parent="." unique_id=1309399929 instance=ExtResource("17_clkha")] transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, 0, 0, 0) TutorialDone = true @@ -113,4 +292,26 @@ AccelerationAir = 1.5 visible = false Radius = 2.0 +[node name="PlayerFellRespawn" type="Marker3D" parent="." unique_id=479136076] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 300, 0) + +[node name="PlayerFellTP" type="Area3D" parent="." unique_id=1277888169] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -200, 0) +collision_layer = 0 +monitorable = false + +[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerFellTP" unique_id=1866249040] +shape = SubResource("WorldBoundaryShape3D_gm8ij") + +[node name="DeathPlane" type="Area3D" parent="." unique_id=1766360237] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -100, 0) +collision_layer = 0 +collision_mask = 16 +monitorable = false + +[node name="CollisionShape3D" type="CollisionShape3D" parent="DeathPlane" unique_id=835637700] +shape = SubResource("WorldBoundaryShape3D_gm8ij") + [connection signal="PlayerDied" from="Player" to="GeneralManager" method="on_player_died"] +[connection signal="body_entered" from="PlayerFellTP" to="." method="_on_player_fell_tp_body_entered"] +[connection signal="body_entered" from="DeathPlane" to="." method="_on_death_plane_body_entered"] diff --git a/maps/levels/tuto_sword_parry.tscn b/maps/levels/tuto_sword_parry.tscn index 3b753cb9..3c296475 100644 --- a/maps/levels/tuto_sword_parry.tscn +++ b/maps/levels/tuto_sword_parry.tscn @@ -13,6 +13,7 @@ [ext_resource type="Texture2D" uid="uid://nrhxjdpuje3f" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_lt_outline.svg" id="11_nwk5u"] [ext_resource type="Texture2D" uid="uid://cjh5cnvdbq5ku" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_button_b_outline.svg" id="12_xy0m1"] [ext_resource type="Texture2D" uid="uid://dyjvbsvbriii4" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_rb_outline.svg" id="13_nwk5u"] +[ext_resource type="Texture2D" uid="uid://db6uqhcmcfs5t" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_lb_outline.svg" id="14_xy0m1"] [sub_resource type="Resource" id="Resource_nwk5u"] script = ExtResource("6_cgfmf") @@ -34,6 +35,16 @@ script = ExtResource("9_ofbe2") DamageType = 2 metadata/_custom_type_script = "uid://jitubgv6judn" +[sub_resource type="Resource" id="Resource_05lnh"] +script = ExtResource("7_hr4qv") +StartingHealth = 100.0 +metadata/_custom_type_script = "uid://baiapod3csndf" + +[sub_resource type="Resource" id="Resource_t5o40"] +script = ExtResource("7_hr4qv") +StartingHealth = 100.0 +metadata/_custom_type_script = "uid://baiapod3csndf" + [sub_resource type="BoxShape3D" id="BoxShape3D_xy0m1"] size = Vector3(3, 3.75, 3) @@ -50,7 +61,10 @@ size = Vector3(5, 2.25, 3.75) size = Vector3(5.5, 4.5, 2) [sub_resource type="BoxShape3D" id="BoxShape3D_prjj8"] -size = Vector3(5.25, 4.5, 3.5) +size = Vector3(2, 3.25, 1.25) + +[sub_resource type="BoxShape3D" id="BoxShape3D_1opdv"] +size = Vector3(8.25, 3.25, 2.75) [node name="Main" unique_id=955321579 instance=ExtResource("1_8n6bu")] @@ -58,8 +72,7 @@ size = Vector3(5.25, 4.5, 3.5) transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, -0.5, 0, 0) [node name="Playground" type="Node3D" parent="." index="7" unique_id=2099606598] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 57.5, 0, 0) -visible = false +transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -8.25, 13, 58.5) [node name="PlaytestArena" parent="Playground" index="0" unique_id=664535670 instance=ExtResource("2_wsc2c")] @@ -333,7 +346,21 @@ RHealth = SubResource("Resource_invhv") RDamage = SubResource("Resource_cgfmf") RMovement = SubResource("Resource_nwk5u") -[node name="Triggers" type="Node3D" parent="Tutorial" index="3" unique_id=1531131828] +[node name="Enemy29" parent="Tutorial" index="3" unique_id=1071267369 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -10, 22, 28.75) +Target = NodePath("../../Player") +RHealth = SubResource("Resource_05lnh") +RDamage = SubResource("Resource_cgfmf") +RMovement = SubResource("Resource_nwk5u") + +[node name="Enemy30" parent="Tutorial" index="4" unique_id=1982933011 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0.25, 22, 28.75) +Target = NodePath("../../Player") +RHealth = SubResource("Resource_t5o40") +RDamage = SubResource("Resource_cgfmf") +RMovement = SubResource("Resource_nwk5u") + +[node name="Triggers" type="Node3D" parent="Tutorial" index="5" unique_id=1531131828] [node name="TutoTrigger5" parent="Tutorial/Triggers" index="0" unique_id=840713937 instance=ExtResource("10_dkfm7")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.25, 23.25, -24.25) @@ -395,7 +422,27 @@ tuto_text = "dash through" transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.625, 1.75, -0.75) shape = SubResource("BoxShape3D_prjj8") -[node name="DashWithMantle" type="CSGCombiner3D" parent="Tutorial" index="4" unique_id=128667834] +[node name="TutoTrigger7" parent="Tutorial/Triggers" index="6" unique_id=271532103 instance=ExtResource("10_dkfm7")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 22.75, 30.25) +first_input_texture = ExtResource("11_nwk5u") +second_input_texture = ExtResource("13_nwk5u") +tuto_text = "throw weapon" + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Tutorial/Triggers/TutoTrigger7" index="1" unique_id=1932556219] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.875, 3.75) +shape = SubResource("BoxShape3D_prjj8") + +[node name="TutoTrigger8" parent="Tutorial/Triggers" index="7" unique_id=36196488 instance=ExtResource("10_dkfm7")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 21.75, 28.25) +first_input_texture = ExtResource("14_xy0m1") +complex_input_text = "at enemy" +tuto_text = "knockback" + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Tutorial/Triggers/TutoTrigger8" index="1" unique_id=929676345] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.125, 1.875, 0.375) +shape = SubResource("BoxShape3D_1opdv") + +[node name="DashWithMantle" type="CSGCombiner3D" parent="Tutorial" index="6" unique_id=128667834] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9, 0, -36.5) [node name="CSGBox3D109" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="0" unique_id=531736596] @@ -470,60 +517,60 @@ use_collision = true size = Vector3(1, 1, 11) material = ExtResource("3_wsc2c") -[node name="CSGBox3D120" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="12" unique_id=1446497915] +[node name="CSGBox3D139" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="12" unique_id=1708119368] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 22.5, 68.625) +use_collision = true +size = Vector3(1, 1, 3.25) +material = ExtResource("3_wsc2c") + +[node name="CSGBox3D140" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="13" unique_id=762102441] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 22.5, 68.625) +use_collision = true +size = Vector3(1, 1, 3.25) +material = ExtResource("3_wsc2c") + +[node name="CSGBox3D120" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="14" unique_id=1446497915] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.5, 17, 6.75) use_collision = true size = Vector3(1, 2, 6.5) material = ExtResource("3_wsc2c") -[node name="CSGBox3D127" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="13" unique_id=1731176595] +[node name="CSGBox3D127" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="15" unique_id=1731176595] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7, 17, 10.5) use_collision = true size = Vector3(4, 2, 1) material = ExtResource("3_wsc2c") -[node name="CSGBox3D119" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="14" unique_id=1284139577] +[node name="CSGBox3D119" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="16" unique_id=1284139577] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.5, 0.625, 10) use_collision = true size = Vector3(3, 2.25, 6) material = ExtResource("3_wsc2c") -[node name="CSGBox3D114" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="15" unique_id=1204742131] +[node name="CSGBox3D114" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="17" unique_id=1204742131] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 16.5, 4.75) use_collision = true size = Vector3(12, 1, 2.5) material = ExtResource("3_wsc2c") -[node name="CSGBox3D139" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="16" unique_id=1561729125] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 21.5, 64.75) -use_collision = true -size = Vector3(12, 1, 2.5) -material = ExtResource("3_wsc2c") - -[node name="CSGBox3D118" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="17" unique_id=1985192046] +[node name="CSGBox3D118" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="18" unique_id=1985192046] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 23.125, 6.5) use_collision = true size = Vector3(18, 12.25, 1) material = ExtResource("3_wsc2c") -[node name="CSGBox3D130" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="18" unique_id=1502907002] +[node name="CSGBox3D130" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="19" unique_id=1502907002] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.25, 23.125, 44) use_collision = true size = Vector3(7.5, 12.25, 1) material = ExtResource("3_wsc2c") -[node name="CSGBox3D131" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="19" unique_id=632272709] +[node name="CSGBox3D131" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="20" unique_id=632272709] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.25, 23.125, 43) use_collision = true size = Vector3(7.5, 12.25, 3) material = ExtResource("3_wsc2c") -[node name="CSGBox3D140" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="20" unique_id=124463390] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 25.125, 66.5) -use_collision = true -size = Vector3(12, 8.25, 1) -material = ExtResource("3_wsc2c") - [node name="CSGBox3D123" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="21" unique_id=696789507] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.375, 23.125, 10.5) use_collision = true @@ -572,74 +619,128 @@ use_collision = true size = Vector3(5, 1, 11) material = ExtResource("3_wsc2c") -[node name="CSGBox3D121" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="29" unique_id=302433684] +[node name="CSGBox3D141" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="29" unique_id=1207463075] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 21.487345, 68.625) +use_collision = true +size = Vector3(5, 1, 3.25) +material = ExtResource("3_wsc2c") + +[node name="CSGBox3D121" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="30" unique_id=302433684] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.875, 23.125, 26.25) use_collision = true size = Vector3(13.75, 12.25, 30.5) material = ExtResource("3_wsc2c") -[node name="CSGBox3D122" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="30" unique_id=1125662345] +[node name="CSGBox3D122" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="31" unique_id=1125662345] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.5, 23.125, 25.25) use_collision = true size = Vector3(1, 12.25, 36.5) material = ExtResource("3_wsc2c") -[node name="CSGBox3D111" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="31" unique_id=923535141] +[node name="CSGBox3D111" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="32" unique_id=923535141] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -11.125, -3.75) use_collision = true size = Vector3(9, 4.25, 21.5) material = ExtResource("3_wsc2c") -[node name="CSGBox3D114" type="CSGBox3D" parent="Tutorial" index="5" unique_id=1217279859] +[node name="CSGBox3D142" type="CSGBox3D" parent="Tutorial" index="7" unique_id=886061699] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 22, 34) +use_collision = true +size = Vector3(2, 2, 1) +material = ExtResource("3_wsc2c") + +[node name="CSGBox3D145" type="CSGBox3D" parent="Tutorial" index="8" unique_id=1440927327] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 12.25, 34) +use_collision = true +size = Vector3(12, 17.5, 1) +material = ExtResource("3_wsc2c") + +[node name="CSGBox3D139" type="CSGBox3D" parent="Tutorial" index="9" unique_id=1561729125] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 21.5, 28.75) +use_collision = true +size = Vector3(12, 1, 3.5) +material = ExtResource("3_wsc2c") + +[node name="CSGBox3D146" type="CSGBox3D" parent="Tutorial" index="10" unique_id=1614862969] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.75, 23, 55.75) +use_collision = true +size = Vector3(19.5, 1, 3.5) +material = ExtResource("3_wsc2c") + +[node name="CSGBox3D147" type="CSGBox3D" parent="Tutorial" index="11" unique_id=1320459108] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.875, 23, 67.25) +use_collision = true +size = Vector3(3.25, 1, 19.5) +material = ExtResource("3_wsc2c") + +[node name="CSGBox3D140" type="CSGBox3D" parent="Tutorial" index="12" unique_id=124463390] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.5, 25.125, 34) +use_collision = true +size = Vector3(5, 8.25, 1) +material = ExtResource("3_wsc2c") + +[node name="CSGBox3D141" type="CSGBox3D" parent="Tutorial" index="13" unique_id=164888540] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.5, 25.125, 34) +use_collision = true +size = Vector3(5, 8.25, 1) +material = ExtResource("3_wsc2c") + +[node name="CSGBox3D114" type="CSGBox3D" parent="Tutorial" index="14" unique_id=1217279859] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -4.75, 0) use_collision = true size = Vector3(9, 8.5, 14) material = ExtResource("3_wsc2c") -[node name="CSGBox3D116" type="CSGBox3D" parent="Tutorial" index="6" unique_id=720911926] +[node name="CSGBox3D116" type="CSGBox3D" parent="Tutorial" index="15" unique_id=720911926] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 9.375, -11.75) use_collision = true size = Vector3(18, 15.25, 37.5) material = ExtResource("3_wsc2c") -[node name="CSGBox3D115" type="CSGBox3D" parent="Tutorial" index="7" unique_id=995233474] +[node name="CSGBox3D115" type="CSGBox3D" parent="Tutorial" index="16" unique_id=995233474] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, -1, -26.5) use_collision = true size = Vector3(18, 1, 6) material = ExtResource("3_wsc2c") -[node name="CSGBox3D119" type="CSGBox3D" parent="Tutorial" index="8" unique_id=1412582714] +[node name="CSGBox3D119" type="CSGBox3D" parent="Tutorial" index="17" unique_id=1412582714] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.875, -3.75, -30) use_collision = true size = Vector3(11.75, 11, 1) material = ExtResource("3_wsc2c") -[node name="CSGBox3D121" type="CSGBox3D" parent="Tutorial" index="9" unique_id=697302898] +[node name="CSGBox3D121" type="CSGBox3D" parent="Tutorial" index="18" unique_id=697302898] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0.125, -30) use_collision = true size = Vector3(3, 3.25, 1) material = ExtResource("3_wsc2c") -[node name="CSGBox3D117" type="CSGBox3D" parent="Tutorial" index="10" unique_id=603171965] +[node name="CSGBox3D117" type="CSGBox3D" parent="Tutorial" index="19" unique_id=603171965] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -6.25, -8) use_collision = true size = Vector3(9, 5.5, 2) material = ExtResource("3_wsc2c") -[node name="CSGBox3D118" type="CSGBox3D" parent="Tutorial" index="11" unique_id=1950738925] +[node name="CSGBox3D118" type="CSGBox3D" parent="Tutorial" index="20" unique_id=1950738925] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -7.75, -10) use_collision = true size = Vector3(9, 2.5, 2) material = ExtResource("3_wsc2c") -[node name="CSGBox3D120" type="CSGBox3D" parent="Tutorial" index="12" unique_id=1024529143] +[node name="CSGBox3D120" type="CSGBox3D" parent="Tutorial" index="21" unique_id=1024529143] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -21.75, -11.75) use_collision = true size = Vector3(9, 25.5, 37.5) material = ExtResource("3_wsc2c") -[node name="CSGBox3D122" type="CSGBox3D" parent="Tutorial" index="13" unique_id=1261455320] +[node name="CSGBox3D122" type="CSGBox3D" parent="Tutorial" index="22" unique_id=1261455320] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15.5, 16.5, -28.5) use_collision = true size = Vector3(3, 1, 4) material = ExtResource("3_wsc2c") + +[node name="CSGBox3D143" type="CSGBox3D" parent="Tutorial" index="23" unique_id=1090375546] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 27.625, 34) +use_collision = true +size = Vector3(2, 3.25, 1) +material = ExtResource("3_wsc2c") diff --git a/scenes/player_controller/PlayerController.tscn b/scenes/player_controller/PlayerController.tscn index ccdadd57..790e8667 100644 --- a/scenes/player_controller/PlayerController.tscn +++ b/scenes/player_controller/PlayerController.tscn @@ -160,7 +160,7 @@ WallHugHorizontalDeceleration = 1.0 WallRunUpwardVelocityFactor = 0.5 MinimumWallRunUpwardSpeed = 4.0 WallRunAltitudeLossSpeed = 8.0 -WallRunSpeedThreshold = 7.0 +WallRunSpeedThreshold = 2.0 [node name="CHealth" parent="." unique_id=1244478698 instance=ExtResource("3_q7bng")] RHealth = ExtResource("4_m8gvy") @@ -1129,6 +1129,18 @@ to = NodePath("../../Dashing/Dash") event = &"dash" delay_in_seconds = "0.0" +[node name="OnSlam" type="Node" parent="StateChart/Root/Movement/OnWall" unique_id=448306362] +script = ExtResource("28_n7qhm") +to = NodePath("../../Slamming") +event = &"slam" +delay_in_seconds = "0.0" + +[node name="OnMantle2" type="Node" parent="StateChart/Root/Movement/OnWall" unique_id=7136911] +script = ExtResource("28_n7qhm") +to = NodePath("../../Mantling") +event = &"mantle" +delay_in_seconds = "0.0" + [node name="Hugging" type="Node" parent="StateChart/Root/Movement/OnWall" unique_id=162057636] script = ExtResource("27_34snm") diff --git a/scenes/player_controller/components/head/HeadSystem.cs b/scenes/player_controller/components/head/HeadSystem.cs index 9d454f09..9e883ad9 100644 --- a/scenes/player_controller/components/head/HeadSystem.cs +++ b/scenes/player_controller/components/head/HeadSystem.cs @@ -193,6 +193,11 @@ public partial class HeadSystem : Node3D private bool _footstepEmitted; private bool _isPlayingForcingAnim; + public void ResetHeadBobbing() + { + _bobbingAccumulator = 0; + } + public void LookAround(CameraParameters inputs) { if (_isPlayingForcingAnim) diff --git a/scenes/player_controller/scripts/PlayerController.cs b/scenes/player_controller/scripts/PlayerController.cs index e05ac15f..25ede056 100644 --- a/scenes/player_controller/scripts/PlayerController.cs +++ b/scenes/player_controller/scripts/PlayerController.cs @@ -1267,6 +1267,8 @@ public partial class PlayerController : CharacterBody3D, _currentWallContactPoint = WallHugSystem.WallHugLocation.UnwrapOr(Vector3.Zero); + if (MantleSystem.IsMantlePossible && IsPlayerInputtingForward()) + _playerState.SendEvent("mantle"); if (isOnFloorCustom()) _playerState.SendEvent("grounded"); if (!WallHugSystem.IsWallHugging()) @@ -1286,23 +1288,23 @@ public partial class PlayerController : CharacterBody3D, { var wallNormal = WallHugSystem.WallHugNormal.UnwrapOr(Vector3.Zero); var isIndeedWall = wallNormal.Y < 0.1; + var isThereInput = GetMoveInput().Length() > Mathf.Epsilon; var hvel = new Vector3(Velocity.X, 0, Velocity.Z); - var hvelProjected = hvel.Slide(_wallHugStartNormal); - var haveEnoughSpeed = Velocity.Length() > WallRunSpeedThreshold; - var isCoplanarEnough = Velocity.AngleTo(wallNormal) > Math.PI/4 && Velocity.AngleTo(wallNormal) < 3*Math.PI/4; - var isGoingDownwards = Velocity.AngleTo(Vector3.Down) < Math.PI/4; - var isLookingInDirectionOfRun = hvelProjected.AngleTo(-HeadSystem.GetForwardHorizontalVector()) < Math.PI/2; - var shouldStart = haveEnoughSpeed && !isGoingDownwards && isIndeedWall && isCoplanarEnough && isLookingInDirectionOfRun; + var hvelProjected = Velocity.Slide(_wallHugStartNormal); + var haveEnoughSpeed = hvelProjected.Length() > WallRunSpeedThreshold; + var isCoplanarEnough = Math.Abs(Velocity.Dot(wallNormal)) < 0.3; + var isGoingDownwards = Velocity.Dot(Vector3.Down) > 0.9; + var isLookingInDirectionOfRun = true; // hvelProjected.Dot(-HeadSystem.GetForwardHorizontalVector()) > 0.5; + var shouldStart = haveEnoughSpeed && isThereInput && !isGoingDownwards && isIndeedWall && isCoplanarEnough && isLookingInDirectionOfRun; var debugText = "--------------\n"; debugText += shouldStart ? "WALL RUN STARTED\n" : "NO WALL RUN\n"; debugText += $"Enough speed? {haveEnoughSpeed}\n"; debugText += $"Coplanar enough? {isCoplanarEnough}\n"; - debugText += $"Going downwards? {isGoingDownwards} with angle {Velocity.AngleTo(Vector3.Down)}\n"; - debugText += $"Is looking in direction of run? {isLookingInDirectionOfRun} with angle {hvelProjected.AngleTo(-HeadSystem.GetForwardHorizontalVector())}\n"; - debugText += $"HVelocity on wall: {hvelProjected} - Forward H Vector: {-HeadSystem.GetForwardHorizontalVector()}\n"; + debugText += $"Going downwards? {isGoingDownwards}\n"; + debugText += $"Is looking in direction of run? {isLookingInDirectionOfRun}\n"; debugText += "--------------\n"; - //GD.Print(debugText); + GD.Print(debugText); return shouldStart; } @@ -1524,6 +1526,10 @@ public partial class PlayerController : CharacterBody3D, // SimpleDashInDirection(directionHorizontal.Normalized()); SetVelocity(directionHorizontal.Normalized() * _velocityOnMantleStarted.Length()); } + else + { + SetVelocity(Vector3.Zero); + } _customMantle = false; _playerState.SendEvent("grounded"); @@ -2053,6 +2059,8 @@ public partial class PlayerController : CharacterBody3D, } public void DashToPlantedWeaponTweenEnded() { + HeadSystem.ResetHeadBobbing(); + // Store the weapon state before resetting it var isPlantedOnWall = WeaponSystem.IsPlantedInWall(); var isPlantedUnderPlatform = WeaponSystem.IsPlantedUnderPlatform();