Compare commits

..

6 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
5d49d6d681 player back at correct location for tuto sword
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 7m17s
Create tag and build when new code gets to main / Export (push) Successful in 9m40s
2026-02-10 09:11:09 +01:00
3 changed files with 150 additions and 20 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="Main" unique_id=955321579 instance=ExtResource("1_8n6bu")]
[node name="Player" parent="." index="6" unique_id=1309399929] [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) 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(1, 0, 0, 0, 1, 0, 0, 0, 1, 57.5, 0, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 57.5, 0, 0)
@@ -239,14 +239,14 @@ Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1") RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u") RMovement = SubResource("Resource_nwk5u")
[node name="Enemy27" parent="Playground/GroundedEnemies" index="18" unique_id=883912991 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")] [node name="Enemy7" parent="Playground/GroundedEnemies" index="18" unique_id=1389063523 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 13.5, 0, 1.1631908) transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 25.5, 4, -27.33681)
Target = NodePath("../../../Player") Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1") RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u") RMovement = SubResource("Resource_nwk5u")
[node name="Enemy7" parent="Playground/GroundedEnemies" index="19" unique_id=1389063523 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, 25.5, 4, -27.33681) transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 20, 0, -44.836807)
Target = NodePath("../../../Player") Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1") RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u") RMovement = SubResource("Resource_nwk5u")
@@ -286,20 +286,119 @@ use_collision = true
collision_layer = 256 collision_layer = 256
collision_mask = 65553 collision_mask = 65553
[node name="CSGBox3D109" type="CSGBox3D" parent="Tutorial" index="0" unique_id=531736596] [node name="DashWithMantle" type="CSGCombiner3D" parent="Tutorial" index="0" unique_id=128667834]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -4.75, -2.25) 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 use_collision = true
size = Vector3(19.5, 8.5, 14) size = Vector3(9, 8.5, 6)
material = ExtResource("3_wsc2c") material = ExtResource("3_wsc2c")
[node name="CSGBox3D110" type="CSGBox3D" parent="Tutorial" index="1" unique_id=731833071] [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, 4.5, -29.25) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -6.25, 0)
use_collision = true use_collision = true
size = Vector3(19.5, 27, 14) size = Vector3(9, 5.5, 2)
material = ExtResource("3_wsc2c") material = ExtResource("3_wsc2c")
[node name="CSGBox3D111" type="CSGBox3D" parent="Tutorial" index="2" unique_id=923535141] [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, -21.75, -18.75) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -7.75, -2)
use_collision = true 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") material = ExtResource("3_wsc2c")

View File

@@ -77,6 +77,9 @@ radius = 0.45
[sub_resource type="SphereShape3D" id="SphereShape3D_q14ux"] [sub_resource type="SphereShape3D" id="SphereShape3D_q14ux"]
radius = 1.0 radius = 1.0
[sub_resource type="SphereShape3D" id="SphereShape3D_u8rdp"]
radius = 1.5
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nodcl"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nodcl"]
transparency = 1 transparency = 1
albedo_color = Color(0, 0.627451, 0.6313726, 0.49019608) albedo_color = Color(0, 0.627451, 0.6313726, 0.49019608)
@@ -328,6 +331,14 @@ gravity_scale = 3.0
ThrowForce = 300.0 ThrowForce = 300.0
StraightThrowDuration = 0.05 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] [node name="DashIndicator" type="Node3D" parent="." unique_id=1279477982]
visible = false visible = false
@@ -384,6 +395,10 @@ shape = SubResource("SphereShape3D_ue7xq")
[node name="InvincibilityTime" type="Timer" parent="." unique_id=1244463585] [node name="InvincibilityTime" type="Timer" parent="." unique_id=1244463585]
one_shot = true 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] [node name="AttackCooldown" type="Timer" parent="." unique_id=1620959518]
wait_time = 0.3 wait_time = 0.3
one_shot = true one_shot = true
@@ -400,7 +415,7 @@ wait_time = 2.0
one_shot = true one_shot = true
[node name="TimeScaleAimInAir" type="Timer" parent="." unique_id=1346687662] [node name="TimeScaleAimInAir" type="Timer" parent="." unique_id=1346687662]
wait_time = 2.0 wait_time = 5.0
one_shot = true one_shot = true
ignore_time_scale = true ignore_time_scale = true
@@ -409,6 +424,7 @@ offset_left = 1524.0
offset_top = 1.0 offset_top = 1.0
offset_right = -8.0 offset_right = -8.0
offset_bottom = 1.0 offset_bottom = 1.0
enabled = false
initial_node_to_watch = NodePath("../StateChart") initial_node_to_watch = NodePath("../StateChart")
[node name="UI" type="Control" parent="." unique_id=856532641] [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_ended" from="InputController" to="." method="OnInputSlideEnded"]
[connection signal="input_slide_started" from="InputController" to="." method="OnInputSlideStarted"] [connection signal="input_slide_started" from="InputController" to="." method="OnInputSlideStarted"]
[connection signal="WallDetected" from="WallHugSystem" to="." method="OnWallDetected"] [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 // Timers
private Timer _timeScaleAimInAirTimer; private Timer _timeScaleAimInAirTimer;
private Timer _weaponThrowUncatchableTimer;
private Timer _simpleDashCooldownTimer; private Timer _simpleDashCooldownTimer;
private Timer _airborneDashCooldownTimer; private Timer _airborneDashCooldownTimer;
private Timer _powerCooldownTimer; private Timer _powerCooldownTimer;
@@ -516,6 +517,7 @@ public partial class PlayerController : CharacterBody3D,
// State timers // State timers
_powerCooldownTimer = GetNode<Timer>("PowerCooldown"); _powerCooldownTimer = GetNode<Timer>("PowerCooldown");
_weaponThrowUncatchableTimer = GetNode<Timer>("WeaponThrowUncatchable");
_timeScaleAimInAirTimer = GetNode<Timer>("TimeScaleAimInAir"); _timeScaleAimInAirTimer = GetNode<Timer>("TimeScaleAimInAir");
_simpleDashCooldownTimer = GetNode<Timer>("DashCooldown"); _simpleDashCooldownTimer = GetNode<Timer>("DashCooldown");
_airborneDashCooldownTimer = GetNode<Timer>("AirborneDashCooldown"); _airborneDashCooldownTimer = GetNode<Timer>("AirborneDashCooldown");
@@ -711,11 +713,11 @@ public partial class PlayerController : CharacterBody3D,
{ {
_isWallJumpAvailable = true; _isWallJumpAvailable = true;
_canDashAirborne = true; _canDashAirborne = true;
ResetTimeScale();
if (_simpleDashCooldownTimer.IsStopped()) if (_simpleDashCooldownTimer.IsStopped())
_simpleDashCooldownTimer.Start(); _simpleDashCooldownTimer.Start();
if (_bufferedAction == BufferedActions.MantleJump) if (_bufferedAction == BufferedActions.MantleJump)
{ {
_playerState.SendEvent("jump"); _playerState.SendEvent("jump");
@@ -1825,7 +1827,7 @@ public partial class PlayerController : CharacterBody3D,
public void ReduceTimeScaleWhileAiming() public void ReduceTimeScaleWhileAiming()
{ {
Engine.SetTimeScale(TimeScaleAimInAir); Engine.SetTimeScale(TimeScaleAimInAir);
_timeScaleAimInAirTimer.Start(); // _timeScaleAimInAirTimer.Start();
} }
public void ResetTimeScale() public void ResetTimeScale()
{ {
@@ -1892,7 +1894,7 @@ public partial class PlayerController : CharacterBody3D,
var plannedDashLocation = targetable.GetTargetGlobalPosition() + Vector3.Down*_playerHeight/2; var plannedDashLocation = targetable.GetTargetGlobalPosition() + Vector3.Down*_playerHeight/2;
travel = plannedDashLocation - GlobalPosition; travel = plannedDashLocation - GlobalPosition;
_dashDirection = travel.Normalized(); _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 wallBehindQuery = PhysicsRayQueryParameters3D.Create(GlobalPosition + Vector3.Up*HeadSystem.Position.Y, postDashLocation, GroundDetector.CollisionMask);
var wallBehindResult = _spaceState.IntersectRay(wallBehindQuery); var wallBehindResult = _spaceState.IntersectRay(wallBehindQuery);
shouldRebound = wallBehindResult.Count > 0; shouldRebound = wallBehindResult.Count > 0;
@@ -1960,6 +1962,7 @@ public partial class PlayerController : CharacterBody3D,
public void ThrowWeapon() public void ThrowWeapon()
{ {
_audioStream.SwitchToClipByName("attacks"); _audioStream.SwitchToClipByName("attacks");
_weaponThrowUncatchableTimer.Start();
_playerState.SendEvent("cancel_aim"); _playerState.SendEvent("cancel_aim");
RemoveChildNode(WeaponSystem); RemoveChildNode(WeaponSystem);
@@ -1980,6 +1983,7 @@ public partial class PlayerController : CharacterBody3D,
HeadSystem.ShowWeapon(); HeadSystem.ShowWeapon();
WeaponSystem.ResetWeapon(); WeaponSystem.ResetWeapon();
RecoverChildNode(WeaponSystem); RecoverChildNode(WeaponSystem);
_audioStream.SwitchToClipByName("parry");
} }
public void DashToFlyingWeapon() public void DashToFlyingWeapon()
@@ -2061,6 +2065,16 @@ public partial class PlayerController : CharacterBody3D,
_playerState.SendEvent(resultingEvent); _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) public void ManageAttackedEnemyPostDash(Node enemy)
{ {
@@ -2229,7 +2243,7 @@ public partial class PlayerController : CharacterBody3D,
var travel = plannedDashLocation - GlobalPosition; var travel = plannedDashLocation - GlobalPosition;
_dashDirection = travel.Normalized(); _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 wallBehindQuery = PhysicsRayQueryParameters3D.Create(GlobalPosition + Vector3.Up*HeadSystem.Position.Y, postDashLocation, GroundDetector.CollisionMask);
var wallBehindResult = _spaceState.IntersectRay(wallBehindQuery); var wallBehindResult = _spaceState.IntersectRay(wallBehindQuery);
var shouldRebound = wallBehindResult.Count > 0; var shouldRebound = wallBehindResult.Count > 0;
@@ -2293,7 +2307,7 @@ public partial class PlayerController : CharacterBody3D,
if (_onWallHanging.Active) return; if (_onWallHanging.Active) return;
if (_aiming.Active && WeaponSystem.InHandState.Active) if (_aiming.Active && WeaponSystem.InHandState.Active && CanPerformEmpoweredAction())
{ {
ThrowWeapon(); ThrowWeapon();
return; return;