Compare commits

...

7 Commits

Author SHA1 Message Date
759d972b6d removed automatic itch upload on every main run because it costs too much
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Test (push) Successful in 6m54s
Create tag and build when new code gets to main / Export (push) Successful in 8m21s
2026-02-13 19:21:44 +01:00
4df4585149 fixed escape menu input on keyboard
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 21s
Create tag and build when new code gets to main / Test (push) Successful in 7m14s
Create tag and build when new code gets to main / Export (push) Successful in 8m46s
2026-02-13 15:20:54 +01:00
88b0911c6c removed wall run tutorial and fixed wall run leave auto dash 2026-02-13 15:00:25 +01:00
81ce45a0dc Merge branch 'main' of https://git.game-dev.space/minimata/MovementTests
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 21s
Create tag and build when new code gets to main / Test (push) Successful in 7m13s
Create tag and build when new code gets to main / Export (push) Successful in 9m11s
2026-02-13 12:32:12 +01:00
1caf202310 fine tuned wall jump and run again 2026-02-13 12:31:51 +01:00
22c4301244 fix forge issue 2026-02-13 11:11:03 +01:00
032e059826 wall run is easier to control and triggers more consistently 2026-02-13 10:24:25 +01:00
10 changed files with 289 additions and 183 deletions

View File

@@ -91,26 +91,26 @@ jobs:
${{ steps.setup-godot.outputs.godot_bin }} --headless --verbose --export-release "Windows Desktop" build/windows/${{ env.GAME_NAME }}.exe ${{ steps.setup-godot.outputs.godot_bin }} --headless --verbose --export-release "Windows Desktop" build/windows/${{ env.GAME_NAME }}.exe
zip -r Windows.zip build/windows zip -r Windows.zip build/windows
- name: Setup Butler # - name: Setup Butler
shell: bash # shell: bash
env: # env:
BUTLER_API_KEY: ${{ secrets.BUTLER_TOKEN }} # BUTLER_API_KEY: ${{ secrets.BUTLER_TOKEN }}
run: | # run: |
mkdir ./tools 2>/dev/null || true # mkdir ./tools 2>/dev/null || true
pushd tools # pushd tools
curl -sSLfo ./butler.zip "https://broth.itch.zone/butler/linux-amd64/LATEST/archive/default" # curl -sSLfo ./butler.zip "https://broth.itch.zone/butler/linux-amd64/LATEST/archive/default"
unzip butler.zip # unzip butler.zip
chmod +x ./butler # chmod +x ./butler
popd # popd
./tools/butler -V # ./tools/butler -V
#
- name: Upload to itch.io # - name: Upload to itch.io
shell: bash # shell: bash
env: # env:
BUTLER_API_KEY: ${{ secrets.BUTLER_TOKEN }} # BUTLER_API_KEY: ${{ secrets.BUTLER_TOKEN }}
run: | # run: |
versionArgument="--userversion ${{ needs.BumpTag.outputs.tag_name }}" # versionArgument="--userversion ${{ needs.BumpTag.outputs.tag_name }}"
./tools/butler push \ # ./tools/butler push \
"Windows.zip" \ # "Windows.zip" \
${{ env.ITCHIO_USERNAME }}/${{ env.ITCHIO_GAMEID }}:windows ${versionArgument} # ${{ env.ITCHIO_USERNAME }}/${{ env.ITCHIO_GAMEID }}:windows ${versionArgument}

View File

@@ -13,22 +13,27 @@ public partial class CueHandlerInspectorPlugin : EditorInspectorPlugin
public override bool _CanHandle(GodotObject @object) public override bool _CanHandle(GodotObject @object)
{ {
// Find out if its an implementation of CueHandler without having to add [Tool] attribute to them. // Find out if its an implementation of CueHandler without having to add [Tool] attribute to them.
if (@object?.GetScript().As<CSharpScript>() is CSharpScript script) try
{ {
StringName className = script.GetGlobalName(); if (@object.GetScript().As<CSharpScript>() is not { }) return false;
}
Type baseType = typeof(ForgeCueHandler); catch (Exception e)
System.Reflection.Assembly assembly = baseType.Assembly; {
return false;
Type? implementationType =
Array.Find(assembly.GetTypes(), x =>
x.Name == className &&
baseType.IsAssignableFrom(x));
return implementationType is not null;
} }
return false; var script = @object.GetScript().As<CSharpScript>();
StringName className = script.GetGlobalName();
Type baseType = typeof(ForgeCueHandler);
System.Reflection.Assembly assembly = baseType.Assembly;
Type? implementationType =
Array.Find(assembly.GetTypes(), x =>
x.Name == className &&
baseType.IsAssignableFrom(x));
return implementationType is not null;
} }
public override bool _ParseProperty( public override bool _ParseProperty(

View File

@@ -35,6 +35,7 @@
[ext_resource type="Resource" uid="uid://spo3pbqjx0eb" path="res://inputs/base_mode/parry.tres" id="30_rvpjj"] [ext_resource type="Resource" uid="uid://spo3pbqjx0eb" path="res://inputs/base_mode/parry.tres" id="30_rvpjj"]
[ext_resource type="Resource" uid="uid://dxy0071ic1wdj" path="res://inputs/base_mode/slam.tres" id="32_s8kjn"] [ext_resource type="Resource" uid="uid://dxy0071ic1wdj" path="res://inputs/base_mode/slam.tres" id="32_s8kjn"]
[ext_resource type="Resource" uid="uid://s1l0n1iitc6m" path="res://inputs/base_mode/move_back.tres" id="33_fykw6"] [ext_resource type="Resource" uid="uid://s1l0n1iitc6m" path="res://inputs/base_mode/move_back.tres" id="33_fykw6"]
[ext_resource type="Script" uid="uid://c76fmncyucwqc" path="res://addons/guide/triggers/guide_trigger_tap.gd" id="34_2ienm"]
[ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://inputs/base_mode/move_front.tres" id="34_rvpjj"] [ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://inputs/base_mode/move_front.tres" id="34_rvpjj"]
[ext_resource type="Resource" uid="uid://ca68r7n3bwba3" path="res://inputs/base_mode/toolbox.tres" id="34_s8kjn"] [ext_resource type="Resource" uid="uid://ca68r7n3bwba3" path="res://inputs/base_mode/toolbox.tres" id="34_s8kjn"]
[ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://inputs/base_mode/move_left.tres" id="35_s8kjn"] [ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://inputs/base_mode/move_left.tres" id="35_s8kjn"]
@@ -456,17 +457,17 @@ script = ExtResource("1_qmhk6")
action = ExtResource("32_s8kjn") action = ExtResource("32_s8kjn")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_v2ywt"), SubResource("Resource_s6d3g")]) input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_v2ywt"), SubResource("Resource_s6d3g")])
[sub_resource type="Resource" id="Resource_s4bc4"] [sub_resource type="Resource" id="Resource_vp8bw"]
script = ExtResource("30_cvxqo") script = ExtResource("30_cvxqo")
key = 4194305 key = 4194305
[sub_resource type="Resource" id="Resource_3exnu"] [sub_resource type="Resource" id="Resource_78qyx"]
script = ExtResource("15_fykw6") script = ExtResource("34_2ienm")
[sub_resource type="Resource" id="Resource_ai85f"] [sub_resource type="Resource" id="Resource_ai85f"]
script = ExtResource("3_yp12v") script = ExtResource("3_yp12v")
input = SubResource("Resource_s4bc4") input = SubResource("Resource_vp8bw")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_3exnu")]) triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_78qyx")])
[sub_resource type="Resource" id="Resource_jjamb"] [sub_resource type="Resource" id="Resource_jjamb"]
script = ExtResource("19_qkgmj") script = ExtResource("19_qkgmj")
@@ -498,10 +499,22 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_8e1uk") input = SubResource("Resource_8e1uk")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_k8i2y")]) triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_k8i2y")])
[sub_resource type="Resource" id="Resource_qrtf1"]
script = ExtResource("30_cvxqo")
key = 84
[sub_resource type="Resource" id="Resource_2ienm"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_4uwbh"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_qrtf1")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_2ienm")])
[sub_resource type="Resource" id="Resource_o5fur"] [sub_resource type="Resource" id="Resource_o5fur"]
script = ExtResource("1_qmhk6") script = ExtResource("1_qmhk6")
action = ExtResource("34_s8kjn") action = ExtResource("34_s8kjn")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ilhhf")]) input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ilhhf"), SubResource("Resource_4uwbh")])
[sub_resource type="Resource" id="Resource_kcylj"] [sub_resource type="Resource" id="Resource_kcylj"]
script = ExtResource("30_cvxqo") script = ExtResource("30_cvxqo")

View File

@@ -7,7 +7,7 @@
[ext_resource type="Script" uid="uid://rvttn472ix6v" path="res://addons/guide/inputs/guide_input_joy_button.gd" id="4_q6ncx"] [ext_resource type="Script" uid="uid://rvttn472ix6v" path="res://addons/guide/inputs/guide_input_joy_button.gd" id="4_q6ncx"]
[ext_resource type="Script" uid="uid://bl8rjl4oaldje" path="res://addons/guide/modifiers/guide_modifier.gd" id="5_vnf02"] [ext_resource type="Script" uid="uid://bl8rjl4oaldje" path="res://addons/guide/modifiers/guide_modifier.gd" id="5_vnf02"]
[ext_resource type="Script" uid="uid://x74mnwgr08a7" path="res://addons/guide/triggers/guide_trigger.gd" id="6_c647i"] [ext_resource type="Script" uid="uid://x74mnwgr08a7" path="res://addons/guide/triggers/guide_trigger.gd" id="6_c647i"]
[ext_resource type="Script" uid="uid://biiggjw6tv4uq" path="res://addons/guide/triggers/guide_trigger_released.gd" id="7_725x1"] [ext_resource type="Script" uid="uid://c76fmncyucwqc" path="res://addons/guide/triggers/guide_trigger_tap.gd" id="7_725x1"]
[ext_resource type="Script" uid="uid://b52rqq28tuqpg" path="res://addons/guide/triggers/guide_trigger_pressed.gd" id="7_m88dc"] [ext_resource type="Script" uid="uid://b52rqq28tuqpg" path="res://addons/guide/triggers/guide_trigger_pressed.gd" id="7_m88dc"]
[ext_resource type="Script" uid="uid://cw71o87tvdx3q" path="res://addons/guide/inputs/guide_input_key.gd" id="8_yfqfy"] [ext_resource type="Script" uid="uid://cw71o87tvdx3q" path="res://addons/guide/inputs/guide_input_key.gd" id="8_yfqfy"]
[ext_resource type="Resource" uid="uid://ds8quw8a7uh2u" path="res://inputs/menu_mode/select.tres" id="9_dsdj3"] [ext_resource type="Resource" uid="uid://ds8quw8a7uh2u" path="res://inputs/menu_mode/select.tres" id="9_dsdj3"]

View File

@@ -24,9 +24,6 @@ use_collision = true
size = Vector3(1, 17.5, 9.5) size = Vector3(1, 17.5, 9.5)
material = ExtResource("3_1qo78") material = ExtResource("3_1qo78")
[node name="Player" parent="." index="7" unique_id=1309399929]
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, 3, 0, 0)
[node name="GroundedSpawner" parent="." index="8" unique_id=580981173 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")] [node name="GroundedSpawner" parent="." index="8" unique_id=580981173 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 1, -42.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 1, -42.5)
EnemyToSpawn = ExtResource("5_iq67o") EnemyToSpawn = ExtResource("5_iq67o")
@@ -35,6 +32,7 @@ HealthInputs = ExtResource("7_ucbss")
DamageInputs = ExtResource("8_2brdd") DamageInputs = ExtResource("8_2brdd")
Target = NodePath("../Player") Target = NodePath("../Player")
SpawnInterval = 5.0 SpawnInterval = 5.0
IsActiveOnStart = false
[node name="GroundedSpawner2" parent="." index="9" unique_id=1026317919 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")] [node name="GroundedSpawner2" parent="." index="9" unique_id=1026317919 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 46.5, 11.5, -34.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 46.5, 11.5, -34.5)
@@ -44,6 +42,7 @@ HealthInputs = ExtResource("7_ucbss")
DamageInputs = ExtResource("8_2brdd") DamageInputs = ExtResource("8_2brdd")
Target = NodePath("../Player") Target = NodePath("../Player")
SpawnInterval = 5.0 SpawnInterval = 5.0
IsActiveOnStart = false
[node name="GroundedSpawner3" parent="." index="10" unique_id=241829575 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")] [node name="GroundedSpawner3" parent="." index="10" unique_id=241829575 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 44.5, 0, -3) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 44.5, 0, -3)
@@ -53,6 +52,7 @@ HealthInputs = ExtResource("7_ucbss")
DamageInputs = ExtResource("8_2brdd") DamageInputs = ExtResource("8_2brdd")
Target = NodePath("../Player") Target = NodePath("../Player")
SpawnInterval = 5.0 SpawnInterval = 5.0
IsActiveOnStart = false
[node name="FlyingSpawner" parent="." index="11" unique_id=962840208 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")] [node name="FlyingSpawner" parent="." index="11" unique_id=962840208 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.5, 19, -19.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.5, 19, -19.5)
@@ -62,6 +62,7 @@ HealthInputs = ExtResource("11_5jlg7")
DamageInputs = ExtResource("12_pjgox") DamageInputs = ExtResource("12_pjgox")
Target = NodePath("../Player") Target = NodePath("../Player")
SpawnInterval = 5.0 SpawnInterval = 5.0
IsActiveOnStart = false
[node name="FlyingSpawner2" parent="." index="12" unique_id=365997644 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")] [node name="FlyingSpawner2" parent="." index="12" unique_id=365997644 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 45.5, 25.5, -42.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 45.5, 25.5, -42.5)
@@ -71,6 +72,7 @@ HealthInputs = ExtResource("11_5jlg7")
DamageInputs = ExtResource("12_pjgox") DamageInputs = ExtResource("12_pjgox")
Target = NodePath("../Player") Target = NodePath("../Player")
SpawnInterval = 5.0 SpawnInterval = 5.0
IsActiveOnStart = false
[node name="Targets" type="Node3D" parent="." index="13" unique_id=1620747784] [node name="Targets" type="Node3D" parent="." index="13" unique_id=1620747784]
@@ -103,3 +105,6 @@ transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 27, 13.5, -9)
[node name="FixedDashthroughTarget3" parent="Targets" index="9" unique_id=1106453232 instance=ExtResource("13_iq67o")] [node name="FixedDashthroughTarget3" parent="Targets" index="9" unique_id=1106453232 instance=ExtResource("13_iq67o")]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 43, 6, -8.5) transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 43, 6, -8.5)
[node name="Player" parent="." index="14" unique_id=1309399929]
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, 3, 0, 0)

View File

@@ -20,9 +20,6 @@ size = Vector3(10.5, 12.5, 7.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_hocby"] [sub_resource type="BoxShape3D" id="BoxShape3D_hocby"]
size = Vector3(3, 12.5, 7.5) size = Vector3(3, 12.5, 7.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_ovxxa"]
size = Vector3(3, 12.5, 6)
[sub_resource type="BoxShape3D" id="BoxShape3D_5ibpd"] [sub_resource type="BoxShape3D" id="BoxShape3D_5ibpd"]
size = Vector3(3.5, 7, 10.5) size = Vector3(3.5, 7, 10.5)
@@ -37,11 +34,6 @@ size = Vector3(3, 6.5, 5.5)
[node name="DirectionalLight3D" parent="." index="5" unique_id=1357990191] [node name="DirectionalLight3D" parent="." index="5" unique_id=1357990191]
transform = Transform3D(-0.1772511, 0.44628847, 0.87715954, 0.49540228, -0.72966087, 0.4713508, 0.85038733, 0.51809436, -0.09175911, 0, 0, 0) transform = Transform3D(-0.1772511, 0.44628847, 0.87715954, 0.49540228, -0.72966087, 0.4713508, 0.85038733, 0.51809436, -0.09175911, 0, 0, 0)
[node name="Player" parent="." index="6" unique_id=1309399929]
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, -0.5, 0.4102497, 0.5415039)
HasSword = false
HasParry = false
[node name="Greybox" type="CSGCombiner3D" parent="." index="7" unique_id=2082385716] [node name="Greybox" type="CSGCombiner3D" parent="." index="7" unique_id=2082385716]
use_collision = true use_collision = true
collision_layer = 256 collision_layer = 256
@@ -78,9 +70,9 @@ size = Vector3(38, 16.5, 2)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D10" type="CSGBox3D" parent="Greybox" index="5" unique_id=427936811] [node name="CSGBox3D10" type="CSGBox3D" parent="Greybox" index="5" unique_id=427936811]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.25, 8.5, -35) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.25, 8.5, -35)
use_collision = true use_collision = true
size = Vector3(21.5, 17, 2) size = Vector3(19.5, 17, 2)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D3" type="CSGBox3D" parent="Greybox" index="6" unique_id=1254886602] [node name="CSGBox3D3" type="CSGBox3D" parent="Greybox" index="6" unique_id=1254886602]
@@ -198,9 +190,9 @@ size = Vector3(6.5, 2.5, 11.5)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D11" type="CSGBox3D" parent="Greybox" index="15" unique_id=316945013] [node name="CSGBox3D11" type="CSGBox3D" parent="Greybox" index="15" unique_id=316945013]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.75, 6.5, -35.25) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 6.5, -34)
use_collision = true use_collision = true
size = Vector3(10.5, 1, 13.5) size = Vector3(11, 1, 16)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D23" type="CSGBox3D" parent="Greybox" index="16" unique_id=1942257779] [node name="CSGBox3D23" type="CSGBox3D" parent="Greybox" index="16" unique_id=1942257779]
@@ -222,117 +214,117 @@ size = Vector3(25, 7.5, 41)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D12" type="CSGBox3D" parent="Greybox" index="19" unique_id=1227474775] [node name="CSGBox3D12" type="CSGBox3D" parent="Greybox" index="19" unique_id=1227474775]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.5, 10.25, -37.75) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.5, 10.25, -37.75)
use_collision = true use_collision = true
size = Vector3(2, 13.5, 7.5) size = Vector3(2, 13.5, 7.5)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D13" type="CSGBox3D" parent="Greybox" index="20" unique_id=1383851577] [node name="CSGBox3D13" type="CSGBox3D" parent="Greybox" index="20" unique_id=110274826]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.5, 8, -31.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 9.75, -27.25)
use_collision = true use_collision = true
size = Vector3(2, 16, 5) size = Vector3(3, 5.5, 4.5)
material = ExtResource("5_r26ni")
[node name="CSGBox3D15" type="CSGBox3D" parent="Greybox" index="21" unique_id=238418660]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.5, 8, -31.5)
use_collision = true
size = Vector3(2, 16, 5)
material = ExtResource("5_r26ni")
[node name="CSGBox3D14" type="CSGBox3D" parent="Greybox" index="22" unique_id=437211444]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 8, -27)
use_collision = true
size = Vector3(7, 16, 4)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D20" type="CSGBox3D" parent="Greybox" index="23" unique_id=1913472587] [node name="CSGBox3D15" type="CSGBox3D" parent="Greybox" index="21" unique_id=2074031011]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 16.5, -8.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.5, 8.25, -28.75)
use_collision = true use_collision = true
size = Vector3(9, 1, 39) size = Vector3(4, 2.5, 7.5)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D30" type="CSGBox3D" parent="Greybox" index="24" unique_id=1594042498] [node name="CSGBox3D22" type="CSGBox3D" parent="Greybox" index="22" unique_id=1005993604]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 7.5, -30)
use_collision = true
size = Vector3(7, 1, 10)
material = ExtResource("2_lpm4c")
[node name="CSGBox3D14" type="CSGBox3D" parent="Greybox" index="23" unique_id=437211444]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 8, -25.5)
use_collision = true
size = Vector3(7, 16, 1)
material = ExtResource("2_lpm4c")
[node name="CSGBox3D20" type="CSGBox3D" parent="Greybox" index="24" unique_id=1913472587]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 16.5, -7)
use_collision = true
size = Vector3(9, 1, 36)
material = ExtResource("2_lpm4c")
[node name="CSGBox3D30" type="CSGBox3D" parent="Greybox" index="25" unique_id=1594042498]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 16.5, 17.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 16.5, 17.5)
use_collision = true use_collision = true
size = Vector3(5, 1, 3) size = Vector3(5, 1, 3)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D54" type="CSGBox3D" parent="Greybox" index="25" unique_id=157354874] [node name="CSGBox3D54" type="CSGBox3D" parent="Greybox" index="26" unique_id=157354874]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16, 15.5, 22.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16, 15.5, 22.5)
use_collision = true use_collision = true
size = Vector3(5, 7, 3) size = Vector3(5, 7, 3)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D38" type="CSGBox3D" parent="Greybox" index="26" unique_id=348698998] [node name="CSGBox3D38" type="CSGBox3D" parent="Greybox" index="27" unique_id=348698998]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6, 18.5, 17.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6, 18.5, 17.5)
use_collision = true use_collision = true
size = Vector3(1, 1, 13) size = Vector3(1, 1, 13)
material = ExtResource("3_u8sr4") material = ExtResource("3_u8sr4")
[node name="CSGBox3D39" type="CSGBox3D" parent="Greybox" index="27" unique_id=850320525] [node name="CSGBox3D39" type="CSGBox3D" parent="Greybox" index="28" unique_id=850320525]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 13.75, 17.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 13.75, 17.5)
use_collision = true use_collision = true
size = Vector3(7, 10.5, 14) size = Vector3(7, 10.5, 14)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D60" type="CSGBox3D" parent="Greybox" index="28" unique_id=177087863] [node name="CSGBox3D60" type="CSGBox3D" parent="Greybox" index="29" unique_id=177087863]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -34, 22, 17.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -34, 22, 17.5)
use_collision = true use_collision = true
size = Vector3(1, 1, 13) size = Vector3(1, 1, 13)
material = ExtResource("3_u8sr4") material = ExtResource("3_u8sr4")
[node name="CSGBox3D61" type="CSGBox3D" parent="Greybox" index="29" unique_id=16972982] [node name="CSGBox3D61" type="CSGBox3D" parent="Greybox" index="30" unique_id=16972982]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -38, 17.25, 14.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -38, 17.25, 14.5)
use_collision = true use_collision = true
size = Vector3(7, 10.5, 20) size = Vector3(7, 10.5, 20)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D37" type="CSGBox3D" parent="Greybox" index="30" unique_id=1733162117] [node name="CSGBox3D37" type="CSGBox3D" parent="Greybox" index="31" unique_id=1733162117]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.75, 9.5, 17.75) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.75, 9.5, 17.75)
use_collision = true use_collision = true
size = Vector3(22.5, 1, 14.5) size = Vector3(22.5, 1, 14.5)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D56" type="CSGBox3D" parent="Greybox" index="31" unique_id=790895849] [node name="CSGBox3D56" type="CSGBox3D" parent="Greybox" index="32" unique_id=790895849]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26.25, 11.5, 17.75) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26.25, 11.5, 17.75)
use_collision = true use_collision = true
size = Vector3(24.5, 1, 14.5) size = Vector3(24.5, 1, 14.5)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D34" type="CSGBox3D" parent="Greybox" index="32" unique_id=2008368941] [node name="CSGBox3D34" type="CSGBox3D" parent="Greybox" index="33" unique_id=2008368941]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.5, 12.5, 14.75) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.5, 12.5, 14.75)
use_collision = true use_collision = true
size = Vector3(6, 7, 8.5) size = Vector3(6, 7, 8.5)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D43" type="CSGBox3D" parent="Greybox" index="33" unique_id=1975028151] [node name="CSGBox3D43" type="CSGBox3D" parent="Greybox" index="34" unique_id=1975028151]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 12.5, 17.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 12.5, 17.5)
use_collision = true use_collision = true
size = Vector3(4, 7, 3) size = Vector3(4, 7, 3)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D44" type="CSGBox3D" parent="Greybox" index="34" unique_id=177387693] [node name="CSGBox3D44" type="CSGBox3D" parent="Greybox" index="35" unique_id=177387693]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 10.5, 17.25) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 10.5, 17.25)
use_collision = true use_collision = true
size = Vector3(3, 3, 13.5) size = Vector3(3, 3, 13.5)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D35" type="CSGBox3D" parent="Greybox" index="35" unique_id=570122850] [node name="CSGBox3D35" type="CSGBox3D" parent="Greybox" index="36" unique_id=570122850]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11, 16.5, 17.25) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11, 16.5, 17.25)
use_collision = true use_collision = true
size = Vector3(5, 1, 13.5) size = Vector3(5, 1, 13.5)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D21" type="CSGBox3D" parent="Greybox" index="36" unique_id=2094633204]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 16.5, -29.5)
use_collision = true
size = Vector3(1, 1, 9)
material = ExtResource("2_lpm4c")
[node name="CSGBox3D24" type="CSGBox3D" parent="Greybox" index="37" unique_id=761197989] [node name="CSGBox3D24" type="CSGBox3D" parent="Greybox" index="37" unique_id=761197989]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 18.75, -29.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 14.25, -29.5)
use_collision = true use_collision = true
size = Vector3(1, 5.5, 9) size = Vector3(1, 14.5, 9)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D26" type="CSGBox3D" parent="Greybox" index="38" unique_id=258581541] [node name="CSGBox3D26" type="CSGBox3D" parent="Greybox" index="38" unique_id=258581541]
@@ -504,33 +496,33 @@ size = Vector3(3, 1, 6.5)
material = ExtResource("5_u8sr4") material = ExtResource("5_u8sr4")
[node name="CSGBox3D25" type="CSGBox3D" parent="Greybox" index="66" unique_id=1000059913] [node name="CSGBox3D25" type="CSGBox3D" parent="Greybox" index="66" unique_id=1000059913]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16, 18.75, -29.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16, 14, -29.5)
use_collision = true use_collision = true
size = Vector3(1, 5.5, 9) size = Vector3(1, 15, 9)
material = ExtResource("2_lpm4c") material = ExtResource("2_lpm4c")
[node name="CSGBox3D22" type="CSGBox3D" parent="Greybox" index="67" unique_id=1623594342] [node name="CSGBox3D16" type="CSGBox3D" parent="Greybox" index="67" unique_id=1660129006]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15, 16.5, -29.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 16.5, -25.5)
use_collision = true use_collision = true
size = Vector3(1, 1, 9) size = Vector3(7, 1, 1)
material = ExtResource("2_lpm4c")
[node name="CSGBox3D16" type="CSGBox3D" parent="Greybox" index="68" unique_id=1660129006]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 16.5, -28.5)
use_collision = true
size = Vector3(5, 1, 1)
material = ExtResource("3_u8sr4") material = ExtResource("3_u8sr4")
[node name="CSGBox3D18" type="CSGBox3D" parent="Greybox" index="69" unique_id=528606233] [node name="CSGBox3D18" type="CSGBox3D" parent="Greybox" index="68" unique_id=410504645]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 16.5, -31.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 13, -27.75)
use_collision = true use_collision = true
size = Vector3(1, 1, 5) size = Vector3(3, 1, 3.5)
material = ExtResource("3_u8sr4") material = ExtResource("3_u8sr4")
[node name="CSGBox3D19" type="CSGBox3D" parent="Greybox" index="70" unique_id=533984919] [node name="CSGBox3D19" type="CSGBox3D" parent="Greybox" index="69" unique_id=1692291429]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 16.5, -31.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.5, 10, -29.25)
use_collision = true use_collision = true
size = Vector3(1, 1, 5) size = Vector3(4, 1, 6.5)
material = ExtResource("3_u8sr4")
[node name="CSGBox3D21" type="CSGBox3D" parent="Greybox" index="70" unique_id=16284901]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 7.5, -35.5)
use_collision = true
size = Vector3(7, 1, 1)
material = ExtResource("3_u8sr4") material = ExtResource("3_u8sr4")
[node name="CSGBox3D36" type="CSGBox3D" parent="Greybox" index="71" unique_id=1460670998] [node name="CSGBox3D36" type="CSGBox3D" parent="Greybox" index="71" unique_id=1460670998]
@@ -937,17 +929,7 @@ tuto_text = "Double jump"
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.25, -1.75) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.25, -1.75)
shape = SubResource("BoxShape3D_hocby") shape = SubResource("BoxShape3D_hocby")
[node name="TutoTrigger4" parent="Tutorials" index="3" unique_id=903897281 instance=ExtResource("7_r26ni")] [node name="TutoTrigger5" parent="Tutorials" index="3" unique_id=1703929757 instance=ExtResource("7_r26ni")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 7.5, -30.5)
first_input_texture = ExtResource("8_6c6r2")
complex_input_text = "against wall"
tuto_text = "Wall jump"
[node name="CollisionShape3D" type="CollisionShape3D" parent="Tutorials/TutoTrigger4" index="1" unique_id=1224334781]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.25, -1)
shape = SubResource("BoxShape3D_ovxxa")
[node name="TutoTrigger5" parent="Tutorials" index="4" unique_id=1703929757 instance=ExtResource("7_r26ni")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.5, 18.5, -30.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.5, 18.5, -30.5)
first_input_texture = ExtResource("9_v7818") first_input_texture = ExtResource("9_v7818")
complex_input_text = "with speed" complex_input_text = "with speed"
@@ -957,7 +939,7 @@ tuto_text = "Slide"
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.75, 0.5, 12.25) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.75, 0.5, 12.25)
shape = SubResource("BoxShape3D_5ibpd") shape = SubResource("BoxShape3D_5ibpd")
[node name="TutoTrigger6" parent="Tutorials" index="5" unique_id=1739438130 instance=ExtResource("7_r26ni")] [node name="TutoTrigger6" parent="Tutorials" index="4" unique_id=1739438130 instance=ExtResource("7_r26ni")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 19, 19) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 19, 19)
first_input_texture = ExtResource("8_6c6r2") first_input_texture = ExtResource("8_6c6r2")
complex_input_text = "double tap during mantle" complex_input_text = "double tap during mantle"
@@ -967,7 +949,7 @@ tuto_text = "Improved jump"
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.25, -1.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.25, -1.5)
shape = SubResource("BoxShape3D_6rkcg") shape = SubResource("BoxShape3D_6rkcg")
[node name="TutoTrigger7" parent="Tutorials" index="6" unique_id=1993844947 instance=ExtResource("7_r26ni")] [node name="TutoTrigger7" parent="Tutorials" index="5" unique_id=1993844947 instance=ExtResource("7_r26ni")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -17.5, 21, 24) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -17.5, 21, 24)
first_input_texture = ExtResource("8_6c6r2") first_input_texture = ExtResource("8_6c6r2")
complex_input_text = "double tap during mantle" complex_input_text = "double tap during mantle"
@@ -977,7 +959,7 @@ tuto_text = "Try to wall run"
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.25, 0.25, -1.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.25, 0.25, -1.5)
shape = SubResource("BoxShape3D_6rkcg") shape = SubResource("BoxShape3D_6rkcg")
[node name="TutoTrigger8" parent="Tutorials" index="7" unique_id=540710346 instance=ExtResource("7_r26ni")] [node name="TutoTrigger8" parent="Tutorials" index="6" unique_id=540710346 instance=ExtResource("7_r26ni")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -37, 25, 10) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -37, 25, 10)
first_input_texture = ExtResource("10_hocby") first_input_texture = ExtResource("10_hocby")
tuto_text = "dash" tuto_text = "dash"
@@ -986,7 +968,7 @@ tuto_text = "dash"
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -3.75) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -3.75)
shape = SubResource("BoxShape3D_p8dgc") shape = SubResource("BoxShape3D_p8dgc")
[node name="TutoTrigger9" parent="Tutorials" index="8" unique_id=2062889854 instance=ExtResource("7_r26ni")] [node name="TutoTrigger9" parent="Tutorials" index="7" unique_id=2062889854 instance=ExtResource("7_r26ni")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -37, 25, -6) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -37, 25, -6)
first_input_texture = ExtResource("10_hocby") first_input_texture = ExtResource("10_hocby")
tuto_text = "dash" tuto_text = "dash"
@@ -994,3 +976,8 @@ tuto_text = "dash"
[node name="CollisionShape3D" type="CollisionShape3D" parent="Tutorials/TutoTrigger9" index="1" unique_id=192598019] [node name="CollisionShape3D" type="CollisionShape3D" parent="Tutorials/TutoTrigger9" index="1" unique_id=192598019]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -3.75) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -3.75)
shape = SubResource("BoxShape3D_p8dgc") shape = SubResource("BoxShape3D_p8dgc")
[node name="Player" parent="." index="11" unique_id=1309399929]
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, -0.5, 0.4102497, 0.5415039)
HasSword = false
HasParry = false

View File

@@ -61,16 +61,13 @@ size = Vector3(5, 2.25, 3.75)
size = Vector3(5.5, 4.5, 2) size = Vector3(5.5, 4.5, 2)
[sub_resource type="BoxShape3D" id="BoxShape3D_prjj8"] [sub_resource type="BoxShape3D" id="BoxShape3D_prjj8"]
size = Vector3(2, 3.25, 1.25) size = Vector3(2, 3.25, 5.25)
[sub_resource type="BoxShape3D" id="BoxShape3D_1opdv"] [sub_resource type="BoxShape3D" id="BoxShape3D_1opdv"]
size = Vector3(8.25, 3.25, 2.75) size = Vector3(8.25, 3.25, 2.75)
[node name="Main" unique_id=955321579 instance=ExtResource("1_8n6bu")] [node name="Main" unique_id=955321579 instance=ExtResource("1_8n6bu")]
[node name="Player" parent="." index="6" unique_id=1309399929]
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] [node name="Playground" type="Node3D" parent="." index="7" unique_id=2099606598]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -8.25, 13, 58.5) transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -8.25, 13, 58.5)
@@ -429,7 +426,7 @@ second_input_texture = ExtResource("13_nwk5u")
tuto_text = "throw weapon" tuto_text = "throw weapon"
[node name="CollisionShape3D" type="CollisionShape3D" parent="Tutorial/Triggers/TutoTrigger7" index="1" unique_id=1932556219] [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) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.875, 4)
shape = SubResource("BoxShape3D_prjj8") shape = SubResource("BoxShape3D_prjj8")
[node name="TutoTrigger8" parent="Tutorial/Triggers" index="7" unique_id=36196488 instance=ExtResource("10_dkfm7")] [node name="TutoTrigger8" parent="Tutorial/Triggers" index="7" unique_id=36196488 instance=ExtResource("10_dkfm7")]
@@ -620,9 +617,9 @@ size = Vector3(5, 1, 11)
material = ExtResource("3_wsc2c") material = ExtResource("3_wsc2c")
[node name="CSGBox3D141" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="29" unique_id=1207463075] [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) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 21.487345, 70.125)
use_collision = true use_collision = true
size = Vector3(5, 1, 3.25) size = Vector3(5, 1, 6.25)
material = ExtResource("3_wsc2c") material = ExtResource("3_wsc2c")
[node name="CSGBox3D121" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="30" unique_id=302433684] [node name="CSGBox3D121" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="30" unique_id=302433684]
@@ -721,26 +718,38 @@ use_collision = true
size = Vector3(9, 5.5, 2) size = Vector3(9, 5.5, 2)
material = ExtResource("3_wsc2c") material = ExtResource("3_wsc2c")
[node name="CSGBox3D118" type="CSGBox3D" parent="Tutorial" index="20" unique_id=1950738925] [node name="CSGBox3D123" type="CSGBox3D" parent="Tutorial" index="20" unique_id=765166179]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.625, 6)
use_collision = true
size = Vector3(9, 2.25, 2)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D118" type="CSGBox3D" parent="Tutorial" index="21" unique_id=1950738925]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -7.75, -10) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -7.75, -10)
use_collision = true use_collision = true
size = Vector3(9, 2.5, 2) size = Vector3(9, 2.5, 2)
material = ExtResource("3_wsc2c") material = ExtResource("3_wsc2c")
[node name="CSGBox3D120" type="CSGBox3D" parent="Tutorial" index="21" unique_id=1024529143] [node name="CSGBox3D120" type="CSGBox3D" parent="Tutorial" index="22" unique_id=1024529143]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -21.75, -11.75) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -21.75, -11.75)
use_collision = true use_collision = true
size = Vector3(9, 25.5, 37.5) size = Vector3(9, 25.5, 37.5)
material = ExtResource("3_wsc2c") material = ExtResource("3_wsc2c")
[node name="CSGBox3D122" type="CSGBox3D" parent="Tutorial" index="22" unique_id=1261455320] [node name="CSGBox3D122" type="CSGBox3D" parent="Tutorial" index="23" unique_id=1261455320]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15.5, 16.5, -28.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15.5, 16.5, -28.5)
use_collision = true use_collision = true
size = Vector3(3, 1, 4) size = Vector3(3, 1, 4)
material = ExtResource("3_wsc2c") material = ExtResource("3_wsc2c")
[node name="CSGBox3D143" type="CSGBox3D" parent="Tutorial" index="23" unique_id=1090375546] [node name="CSGBox3D143" type="CSGBox3D" parent="Tutorial" index="24" unique_id=1090375546]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 27.625, 34) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 27.625, 34)
use_collision = true use_collision = true
size = Vector3(2, 3.25, 1) size = Vector3(2, 3.25, 1)
material = ExtResource("3_wsc2c") material = ExtResource("3_wsc2c")
[node name="Player" parent="." index="9" unique_id=1309399929]
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, -0.5, 0, 0)
[node name="PlayerFellRespawn" parent="." index="10" unique_id=479136076]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 1.5, 0)

View File

@@ -159,8 +159,9 @@ WallHugDownwardMaxSpeed = 4.0
WallHugHorizontalDeceleration = 1.0 WallHugHorizontalDeceleration = 1.0
WallRunUpwardVelocityFactor = 0.5 WallRunUpwardVelocityFactor = 0.5
MinimumWallRunUpwardSpeed = 4.0 MinimumWallRunUpwardSpeed = 4.0
MinimumWallRunHorizontalSpeed = 8.0
WallRunAltitudeLossSpeed = 8.0 WallRunAltitudeLossSpeed = 8.0
WallRunSpeedThreshold = 2.0 WallRunSpeedThreshold = 1.0
[node name="CHealth" parent="." unique_id=1244478698 instance=ExtResource("3_q7bng")] [node name="CHealth" parent="." unique_id=1244478698 instance=ExtResource("3_q7bng")]
RHealth = ExtResource("4_m8gvy") RHealth = ExtResource("4_m8gvy")
@@ -1119,8 +1120,8 @@ delay_in_seconds = "0.0"
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall" unique_id=342055859] [node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall" unique_id=342055859]
script = ExtResource("28_n7qhm") script = ExtResource("28_n7qhm")
to = NodePath("../../Jump/SimpleJump") to = NodePath("../../Jump/DoubleJump")
event = &"jump" event = &"wall_jump"
delay_in_seconds = "0.0" delay_in_seconds = "0.0"
[node name="OnDash" type="Node" parent="StateChart/Root/Movement/OnWall" unique_id=43147957] [node name="OnDash" type="Node" parent="StateChart/Root/Movement/OnWall" unique_id=43147957]
@@ -1156,6 +1157,12 @@ script = ExtResource("27_34snm")
[node name="Running" type="Node" parent="StateChart/Root/Movement/OnWall" unique_id=766545186] [node name="Running" type="Node" parent="StateChart/Root/Movement/OnWall" unique_id=766545186]
script = ExtResource("27_34snm") script = ExtResource("27_34snm")
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall/Running" unique_id=1699673966]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/SimpleJump")
event = &"wall_jump"
delay_in_seconds = "0.0"
[node name="OnLeaveWall" type="Node" parent="StateChart/Root/Movement/OnWall/Running" unique_id=73239479] [node name="OnLeaveWall" type="Node" parent="StateChart/Root/Movement/OnWall/Running" unique_id=73239479]
script = ExtResource("28_n7qhm") script = ExtResource("28_n7qhm")
to = NodePath("../../../Airborne/CoyoteEnabled") to = NodePath("../../../Airborne/CoyoteEnabled")

View File

@@ -245,7 +245,7 @@ public partial class PlayerController : CharacterBody3D,
public float MinimumWallRunHorizontalSpeed { get; set; } = 12f; public float MinimumWallRunHorizontalSpeed { get; set; } = 12f;
[Export(PropertyHint.Range, "1,20,0.1,or_greater")] [Export(PropertyHint.Range, "1,20,0.1,or_greater")]
public float WallRunAltitudeLossSpeed { get; set; } = 10f; public float WallRunAltitudeLossSpeed { get; set; } = 10f;
[Export(PropertyHint.Range, "1,20,0.1,or_greater")] [Export(PropertyHint.Range, "0,20,0.1,or_greater")]
public float WallRunSpeedThreshold { get; set; } = 8f; public float WallRunSpeedThreshold { get; set; } = 8f;
/////////////////////////// ///////////////////////////
@@ -360,6 +360,7 @@ public partial class PlayerController : CharacterBody3D,
private Transition _onJumpFromWall; private Transition _onJumpFromWall;
private Transition _onJumpFromWallFalling; private Transition _onJumpFromWallFalling;
private Transition _onJumpFromWallRunning;
private Transition _onLeaveWallFromRun; private Transition _onLeaveWallFromRun;
private Transition _onAirborneToGrounded; private Transition _onAirborneToGrounded;
@@ -502,6 +503,7 @@ public partial class PlayerController : CharacterBody3D,
_mantling = StateChartState.Of(GetNode("StateChart/Root/Movement/Mantling")); _mantling = StateChartState.Of(GetNode("StateChart/Root/Movement/Mantling"));
_onJumpFromWall = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/OnJump")); _onJumpFromWall = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/OnJump"));
_onJumpFromWallFalling = Transition.Of(GetNode("StateChart/Root/Movement/Airborne/Falling/OnWallJump")); _onJumpFromWallFalling = Transition.Of(GetNode("StateChart/Root/Movement/Airborne/Falling/OnWallJump"));
_onJumpFromWallRunning = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/Running/OnJump"));
_onWall = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall")); _onWall = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall"));
_onWallHugging = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Hugging")); _onWallHugging = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Hugging"));
_onWallHanging = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Hanging")); _onWallHanging = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Hanging"));
@@ -629,6 +631,7 @@ public partial class PlayerController : CharacterBody3D,
_onJumpFromWall.Taken += OnJumpFromWall; _onJumpFromWall.Taken += OnJumpFromWall;
_onJumpFromWallFalling.Taken += OnJumpFromWall; _onJumpFromWallFalling.Taken += OnJumpFromWall;
_onJumpFromWallRunning.Taken += OnJumpFromWall;
_onLeaveWallFromRun.Taken += OnLeaveWallFromRun; _onLeaveWallFromRun.Taken += OnLeaveWallFromRun;
_onAirborneToGrounded.Taken += OnAirborneToGrounded; _onAirborneToGrounded.Taken += OnAirborneToGrounded;
@@ -869,16 +872,16 @@ public partial class PlayerController : CharacterBody3D,
_playerState.SendEvent("grounded"); _playerState.SendEvent("grounded");
if (IsTryingToMantle()) _playerState.SendEvent("mantle"); if (IsTryingToMantle()) _playerState.SendEvent("mantle");
if (!WallHugSystem.IsWallHugging()) if (!WallHugSystem.IsWallHugging())
{ {
_isWallJumpAvailable = true; // reset wall jump if we left the wall _isWallJumpAvailable = true; // reset wall jump if we left the wall
return; return;
} }
// Going upwards, we stay simply airborne // // Going upwards, we stay simply airborne
if (Velocity.AngleTo(Vector3.Up) < Math.PI / 4) // if (Velocity.AngleTo(Vector3.Up) < Math.PI / 4)
return; // return;
// Should we start a wall run // Should we start a wall run
if (ShouldStartWallRun()) if (ShouldStartWallRun())
@@ -1188,15 +1191,19 @@ public partial class PlayerController : CharacterBody3D,
} }
public void OnWallDetected() public void OnWallDetected()
{ {
if (!_onWall.Active) // if (!_onWall.Active)
return; // return;
var newWallNormal = WallHugSystem.WallHugNormal.UnwrapOr(Vector3.Up); var newWallNormal = WallHugSystem.WallHugNormal.UnwrapOr(Vector3.Up);
if (newWallNormal.AngleTo(_wallHugStartNormal) > Mathf.Pi/4) return; if (newWallNormal.AngleTo(_wallHugStartNormal) > Mathf.Pi/4 && _onWall.Active) return;
_wallHugStartNormal = newWallNormal; _wallHugStartNormal = newWallNormal;
} }
private float _timeOnWall;
public void OnWallStarted() public void OnWallStarted()
{ {
_timeOnWall = 0f;
if (_simpleDashCooldownTimer.IsStopped()) if (_simpleDashCooldownTimer.IsStopped())
_canDash = true; _canDash = true;
else else
@@ -1212,6 +1219,7 @@ public partial class PlayerController : CharacterBody3D,
} }
public void OnWallStopped() public void OnWallStopped()
{ {
_timeOnWall = 0f;
} }
public void OnLeaveWallFromRun() public void OnLeaveWallFromRun()
{ {
@@ -1221,16 +1229,20 @@ public partial class PlayerController : CharacterBody3D,
{ {
// _canDash = true; // _canDash = true;
// _canDashAirborne = true; // _canDashAirborne = true;
_timeOnWall += delta;
WallHug(delta); if (IsInputTowardsWall(_wallHugStartNormal))
if (ShouldStartWallRun()) WallHug(delta);
{ else
_playerState.SendEvent("wall_run"); MoveInAir(delta, IsGroundLike());
return; // if (ShouldStartWallRun())
} // {
// _playerState.SendEvent("wall_run");
// return;
// }
if (isOnFloorCustom()) if (isOnFloorCustom())
_playerState.SendEvent("grounded"); _playerState.SendEvent("grounded");
if (!WallHugSystem.IsWallHugging() || !IsInputTowardsWall(_wallHugStartNormal)) if (!WallHugSystem.IsWallHugging())
_playerState.SendEvent("start_falling"); _playerState.SendEvent("start_falling");
} }
public void HandleWallHanging(float delta) public void HandleWallHanging(float delta)
@@ -1252,6 +1264,7 @@ public partial class PlayerController : CharacterBody3D,
{ {
// _canDash = false; // _canDash = false;
// _canDashAirborne = false; // _canDashAirborne = false;
_timeOnWall += delta;
// Find horizontal velocity projected on the current wall // Find horizontal velocity projected on the current wall
var hvel = new Vector3(Velocity.X, 0, Velocity.Z); var hvel = new Vector3(Velocity.X, 0, Velocity.Z);
@@ -1263,7 +1276,7 @@ public partial class PlayerController : CharacterBody3D,
// Adapt vertical speed // Adapt vertical speed
var verticalSpeed = Velocity.Y - WallRunAltitudeLossSpeed * delta; var verticalSpeed = Velocity.Y - WallRunAltitudeLossSpeed * delta;
Velocity = finalHVel + Vector3.Up*verticalSpeed; Velocity = finalHVel + Vector3.Up*verticalSpeed;
// Velocity *= 0.999f; Velocity *= 0.999f;
_currentWallContactPoint = WallHugSystem.WallHugLocation.UnwrapOr(Vector3.Zero); _currentWallContactPoint = WallHugSystem.WallHugLocation.UnwrapOr(Vector3.Zero);
@@ -1273,7 +1286,7 @@ public partial class PlayerController : CharacterBody3D,
_playerState.SendEvent("grounded"); _playerState.SendEvent("grounded");
if (!WallHugSystem.IsWallHugging()) if (!WallHugSystem.IsWallHugging())
_playerState.SendEvent("start_falling"); _playerState.SendEvent("start_falling");
if (Velocity.Length() < WallRunSpeedThreshold / 2f) if (!CanKeepWallRun())
_playerState.SendEvent("wall_hug"); _playerState.SendEvent("wall_hug");
} }
@@ -1286,27 +1299,88 @@ public partial class PlayerController : CharacterBody3D,
public bool ShouldStartWallRun() public bool ShouldStartWallRun()
{ {
var wallNormal = WallHugSystem.WallHugNormal.UnwrapOr(Vector3.Zero); if (_wallHugStartNormal.Length() < Mathf.Epsilon)
var isIndeedWall = wallNormal.Y < 0.1; {
var isThereInput = GetMoveInput().Length() > Mathf.Epsilon; // GD.Print("No wall normal");
var hvel = new Vector3(Velocity.X, 0, Velocity.Z); return false;
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}\n";
debugText += $"Is looking in direction of run? {isLookingInDirectionOfRun}\n";
debugText += "--------------\n";
GD.Print(debugText);
return shouldStart; var isIndeedWall = _wallHugStartNormal.Y < 0.1;
if (!isIndeedWall)
{
// GD.Print("Not a wall");
return false;
}
var isThereInput = GetMoveInput().Length() > Mathf.Epsilon;
if (!isThereInput)
{
// GD.Print("No input");
return false;
}
if (!IsInputForwardOrTowardsWall())
{
// GD.Print("Input isn't forward or towards wall");
return false;
}
var canUseVelocity = Velocity.Length() > WallRunSpeedThreshold;
if (!canUseVelocity)
{
// GD.Print("Not enough speed");
return false;
}
var hvel = new Vector3(Velocity.X, 0, Velocity.Z);
var hvelProjected = hvel.Slide(_wallHugStartNormal);
var haveEnoughSpeed = hvelProjected.Length() > WallRunSpeedThreshold;
if (!haveEnoughSpeed)
{
// GD.Print("Not enough projected speed");
return false;
}
var isCoplanarEnough = Math.Abs(Velocity.Normalized().Dot(_wallHugStartNormal)) < 0.9;
if (!isCoplanarEnough)
{
// GD.Print("Not coplanar enough");
return false;
}
var isGoingDownwards = Velocity.Normalized().Dot(Vector3.Down) > 0.7;
if (isGoingDownwards)
{
// GD.Print("Going down");
return false;
}
var isLookingInDirectionOfRun = hvelProjected.Normalized().Dot(-HeadSystem.GetForwardHorizontalVector()) > 0.5;
if (!isLookingInDirectionOfRun)
{
// GD.Print("Not looking in direction of run");
return false;
}
return true;
}
public bool IsInputForwardOrTowardsWall()
{
return IsPlayerInputtingForward() || IsInputTowardsWall(_wallHugStartNormal);
}
public bool CanKeepWallRun()
{
var isThereInput = GetMoveInput().Length() > Mathf.Epsilon;
if (!isThereInput) return false;
if (!IsInputForwardOrTowardsWall()) return false;
var haveEnoughSpeed = Velocity.Length() > WallRunSpeedThreshold;
if (!haveEnoughSpeed) return false;
return true;
} }
public void WallHug(float delta) public void WallHug(float delta)
@@ -1319,6 +1393,7 @@ public partial class PlayerController : CharacterBody3D,
} }
public void WallHang(float delta) public void WallHang(float delta)
{ {
_timeOnWall += 1; // Consider we've already spent quite some time on wall
Velocity = Vector3.Zero; Velocity = Vector3.Zero;
GlobalPosition = _wallHugStartLocation; GlobalPosition = _wallHugStartLocation;
} }
@@ -1365,11 +1440,15 @@ public partial class PlayerController : CharacterBody3D,
_playerState.SendEvent("mantle"); _playerState.SendEvent("mantle");
return; return;
} }
if (WallHugSystem.IsWallHugging()) if (_onWall.Active) // Always allow jumping out of wall run and hang
{ {
_playerState.SendEvent("wall_jump"); _playerState.SendEvent("wall_jump");
return;
} }
// Regular jump
_playerState.SendEvent("jump"); _playerState.SendEvent("jump");
} }
@@ -1465,13 +1544,13 @@ public partial class PlayerController : CharacterBody3D,
SetHorizontalVelocity(currentHorizontalVelocity + wallJumpHorizontalVelocity); SetHorizontalVelocity(currentHorizontalVelocity + wallJumpHorizontalVelocity);
} }
public void OnJumpFromWall() public void OnJumpFromWall()
{ {
if (!IsFacingWall() || (!_isWallJumpAvailable && IsFacingWall())) if (!IsFacingWall() || (!_isWallJumpAvailable && IsFacingWall()) || _onWallRunning.Active)
{
ComputeJumpFromWallHSpeed(WallJumpStartVelocity); ComputeJumpFromWallHSpeed(WallJumpStartVelocity);
}
// OnJumpStarted(DoubleJumpStartVelocity);
// Remove the ability to dash straight away so you cannot scale up the wall // Remove the ability to dash straight away so you cannot scale up the wall
// _canDashAirborne = false; // _canDashAirborne = false;
_airborneDashCooldownTimer.Start(); _airborneDashCooldownTimer.Start();

View File

@@ -1,4 +1,5 @@
extends Area3D extends Area3D
class_name TutoTrigger
@onready var control: Control = $Control @onready var control: Control = $Control