Compare commits

..

5 Commits

Author SHA1 Message Date
aaa9b102c1 started working on sword dash tutorial and bullet time is now unlimited while aiming in air
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 6m44s
Create tag and build when new code gets to main / Export (push) Successful in 8m17s
2026-02-10 16:44:45 +01:00
cb348667f5 recover weapon if walking on it 2026-02-10 15:27:30 +01:00
8d23a95c68 ci back
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Test (push) Successful in 6m13s
Create tag and build when new code gets to main / Export (push) Successful in 8m45s
2026-02-10 09:41:44 +01:00
a9809abc27 removing sa mere
Some checks failed
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) Failing after 5m10s
2026-02-10 09:35:26 +01:00
db65c02e75 trying a simpler workflow 2026-02-10 09:26:09 +01:00
3 changed files with 157 additions and 21 deletions

View File

@@ -22,7 +22,7 @@ metadata/_custom_type_script = "uid://baiapod3csndf"
[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, 59.5, 0, 0)
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)
@@ -245,31 +245,37 @@ Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u")
[node name="Enemy10" parent="Playground/GroundedEnemies" index="19" unique_id=836898496 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
[node name="Enemy27" parent="Playground/GroundedEnemies" index="19" unique_id=854456486 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 20, 0, -44.836807)
Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u")
[node name="Enemy10" parent="Playground/GroundedEnemies" index="20" unique_id=836898496 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 30.5, 11, -33.336807)
Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u")
[node name="Enemy8" parent="Playground/GroundedEnemies" index="20" unique_id=1015624071 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
[node name="Enemy8" parent="Playground/GroundedEnemies" index="21" unique_id=1015624071 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 34.5, 1.5, -27.33681)
Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u")
[node name="Enemy9" parent="Playground/GroundedEnemies" index="21" unique_id=827865590 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
[node name="Enemy9" parent="Playground/GroundedEnemies" index="22" unique_id=827865590 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 46.5, 0, -27.33681)
Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u")
[node name="Enemy5" parent="Playground/GroundedEnemies" index="22" unique_id=1267116862 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
[node name="Enemy5" parent="Playground/GroundedEnemies" index="23" unique_id=1267116862 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4, 0, -18.33681)
Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u")
[node name="Enemy6" parent="Playground/GroundedEnemies" index="23" unique_id=1147823180 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
[node name="Enemy6" parent="Playground/GroundedEnemies" index="24" unique_id=1147823180 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 16.5, 7, -17.33681)
Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1")
@@ -280,20 +286,119 @@ use_collision = true
collision_layer = 256
collision_mask = 65553
[node name="CSGBox3D109" type="CSGBox3D" parent="Tutorial" index="0" unique_id=531736596]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -4.75, -2.25)
[node name="DashWithMantle" type="CSGCombiner3D" parent="Tutorial" index="0" 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]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -4.75, 4)
use_collision = true
size = Vector3(19.5, 8.5, 14)
size = Vector3(9, 8.5, 6)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D110" type="CSGBox3D" parent="Tutorial" index="1" unique_id=731833071]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4.5, -29.25)
[node name="CSGBox3D112" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="1" unique_id=565292599]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -6.25, 0)
use_collision = true
size = Vector3(19.5, 27, 14)
size = Vector3(9, 5.5, 2)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D111" type="CSGBox3D" parent="Tutorial" index="2" unique_id=923535141]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -21.75, -18.75)
[node name="CSGBox3D113" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="2" unique_id=28433553]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -7.75, -2)
use_collision = true
size = Vector3(19.5, 25.5, 35)
size = Vector3(9, 2.5, 2)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D110" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="3" unique_id=731833071]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 6, -12.125)
use_collision = true
size = Vector3(5, 1, 4.75)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D115" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="4" unique_id=173458015]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 5.625, -14)
use_collision = true
size = Vector3(9, 29.25, 1)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D116" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="5" unique_id=1750512788]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 7, -12.125)
use_collision = true
size = Vector3(1, 1, 4.75)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D117" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="6" unique_id=391729778]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, 7, -12.125)
use_collision = true
size = Vector3(1, 1, 4.75)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D119" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="7" 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="8" 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="CSGBox3D111" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="9" 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="1" 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="2" unique_id=720911926]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 12.75, -11.75)
use_collision = true
size = Vector3(18, 22, 37.5)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D115" type="CSGBox3D" parent="Tutorial" index="3" 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="4" 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="5" 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="6" 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="7" 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="8" unique_id=1024529143]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -21.75, -11.625)
use_collision = true
size = Vector3(9, 25.5, 37.75)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D122" type="CSGBox3D" parent="Tutorial" index="9" unique_id=1261455320]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15.5, 16.5, -27.5)
use_collision = true
size = Vector3(3, 1, 6)
material = ExtResource("3_wsc2c")

View File

@@ -77,6 +77,9 @@ radius = 0.45
[sub_resource type="SphereShape3D" id="SphereShape3D_q14ux"]
radius = 1.0
[sub_resource type="SphereShape3D" id="SphereShape3D_u8rdp"]
radius = 1.5
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nodcl"]
transparency = 1
albedo_color = Color(0, 0.627451, 0.6313726, 0.49019608)
@@ -328,6 +331,14 @@ gravity_scale = 3.0
ThrowForce = 300.0
StraightThrowDuration = 0.05
[node name="SwordPickup" type="Area3D" parent="." unique_id=1990087390]
collision_layer = 0
collision_mask = 65536
[node name="CollisionShape3D" type="CollisionShape3D" parent="SwordPickup" unique_id=547241277]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
shape = SubResource("SphereShape3D_u8rdp")
[node name="DashIndicator" type="Node3D" parent="." unique_id=1279477982]
visible = false
@@ -384,6 +395,10 @@ shape = SubResource("SphereShape3D_ue7xq")
[node name="InvincibilityTime" type="Timer" parent="." unique_id=1244463585]
one_shot = true
[node name="WeaponThrowUncatchable" type="Timer" parent="." unique_id=2141801011]
wait_time = 0.2
one_shot = true
[node name="AttackCooldown" type="Timer" parent="." unique_id=1620959518]
wait_time = 0.3
one_shot = true
@@ -400,7 +415,7 @@ wait_time = 2.0
one_shot = true
[node name="TimeScaleAimInAir" type="Timer" parent="." unique_id=1346687662]
wait_time = 2.0
wait_time = 5.0
one_shot = true
ignore_time_scale = true
@@ -409,6 +424,7 @@ offset_left = 1524.0
offset_top = 1.0
offset_right = -8.0
offset_bottom = 1.0
enabled = false
initial_node_to_watch = NodePath("../StateChart")
[node name="UI" type="Control" parent="." unique_id=856532641]
@@ -1158,3 +1174,4 @@ delay_in_seconds = "0.0"
[connection signal="input_slide_ended" from="InputController" to="." method="OnInputSlideEnded"]
[connection signal="input_slide_started" from="InputController" to="." method="OnInputSlideStarted"]
[connection signal="WallDetected" from="WallHugSystem" to="." method="OnWallDetected"]
[connection signal="body_entered" from="SwordPickup" to="." method="WalkOnWeapon"]

View File

@@ -317,6 +317,7 @@ public partial class PlayerController : CharacterBody3D,
// Timers
private Timer _timeScaleAimInAirTimer;
private Timer _weaponThrowUncatchableTimer;
private Timer _simpleDashCooldownTimer;
private Timer _airborneDashCooldownTimer;
private Timer _powerCooldownTimer;
@@ -516,6 +517,7 @@ public partial class PlayerController : CharacterBody3D,
// State timers
_powerCooldownTimer = GetNode<Timer>("PowerCooldown");
_weaponThrowUncatchableTimer = GetNode<Timer>("WeaponThrowUncatchable");
_timeScaleAimInAirTimer = GetNode<Timer>("TimeScaleAimInAir");
_simpleDashCooldownTimer = GetNode<Timer>("DashCooldown");
_airborneDashCooldownTimer = GetNode<Timer>("AirborneDashCooldown");
@@ -711,11 +713,11 @@ public partial class PlayerController : CharacterBody3D,
{
_isWallJumpAvailable = true;
_canDashAirborne = true;
ResetTimeScale();
if (_simpleDashCooldownTimer.IsStopped())
_simpleDashCooldownTimer.Start();
if (_bufferedAction == BufferedActions.MantleJump)
{
_playerState.SendEvent("jump");
@@ -1825,7 +1827,7 @@ public partial class PlayerController : CharacterBody3D,
public void ReduceTimeScaleWhileAiming()
{
Engine.SetTimeScale(TimeScaleAimInAir);
_timeScaleAimInAirTimer.Start();
// _timeScaleAimInAirTimer.Start();
}
public void ResetTimeScale()
{
@@ -1892,7 +1894,7 @@ public partial class PlayerController : CharacterBody3D,
var plannedDashLocation = targetable.GetTargetGlobalPosition() + Vector3.Down*_playerHeight/2;
travel = plannedDashLocation - GlobalPosition;
_dashDirection = travel.Normalized();
var postDashLocation = plannedDashLocation + 2*_dashDirection;
var postDashLocation = plannedDashLocation + _dashDirection;
var wallBehindQuery = PhysicsRayQueryParameters3D.Create(GlobalPosition + Vector3.Up*HeadSystem.Position.Y, postDashLocation, GroundDetector.CollisionMask);
var wallBehindResult = _spaceState.IntersectRay(wallBehindQuery);
shouldRebound = wallBehindResult.Count > 0;
@@ -1960,6 +1962,7 @@ public partial class PlayerController : CharacterBody3D,
public void ThrowWeapon()
{
_audioStream.SwitchToClipByName("attacks");
_weaponThrowUncatchableTimer.Start();
_playerState.SendEvent("cancel_aim");
RemoveChildNode(WeaponSystem);
@@ -1980,6 +1983,7 @@ public partial class PlayerController : CharacterBody3D,
HeadSystem.ShowWeapon();
WeaponSystem.ResetWeapon();
RecoverChildNode(WeaponSystem);
_audioStream.SwitchToClipByName("parry");
}
public void DashToFlyingWeapon()
@@ -2061,6 +2065,16 @@ public partial class PlayerController : CharacterBody3D,
_playerState.SendEvent(resultingEvent);
}
public void WalkOnWeapon(Node3D other)
{
if (_weaponDash.Active) return; // Don't recover weapon if already dashing to it
if (WeaponSystem.InHandState.Active) return; // Don't recover weapon if in hand
if (!_weaponThrowUncatchableTimer.IsStopped()) return; // Don't get weapon back if timer is still running
if (WeaponSystem.PlantObject is ITargetable) return; // Don't recover weapon planted in target
RecoverWeapon();
WeaponSystem.PlantObject = null;
}
public void ManageAttackedEnemyPostDash(Node enemy)
{
@@ -2229,7 +2243,7 @@ public partial class PlayerController : CharacterBody3D,
var travel = plannedDashLocation - GlobalPosition;
_dashDirection = travel.Normalized();
var postDashLocation = plannedDashLocation + 2*_dashDirection;
var postDashLocation = plannedDashLocation + _dashDirection;
var wallBehindQuery = PhysicsRayQueryParameters3D.Create(GlobalPosition + Vector3.Up*HeadSystem.Position.Y, postDashLocation, GroundDetector.CollisionMask);
var wallBehindResult = _spaceState.IntersectRay(wallBehindQuery);
var shouldRebound = wallBehindResult.Count > 0;
@@ -2293,7 +2307,7 @@ public partial class PlayerController : CharacterBody3D,
if (_onWallHanging.Active) return;
if (_aiming.Active && WeaponSystem.InHandState.Active)
if (_aiming.Active && WeaponSystem.InHandState.Active && CanPerformEmpoweredAction())
{
ThrowWeapon();
return;