feat: lighter air control (steer + stronger strafe) and 2-charge dash

- Air: direct steering bends existing velocity toward input without changing
  its magnitude (air_steer_rate), on top of Quake accelerate with raised
  gains (air_strafe_accel 55->90, per-tick cap 1.2->2.5). No-input air drag
  nearly removed so held momentum carries. Steering skips opposing input to
  avoid flipping through zero.
- Dash: charge system on the machine — dash_charges (2) spend instantly,
  each recharges in dash_cooldown (2 s). get_dash_cooldown_remaining() now
  reports time to the NEXT charge (0 while one is banked) so existing HUDs
  keep working; get_dash_charges() added for pips.
- Tests: dash tests updated to the charge API + new coverage for
  spend-2-then-recharge; 11/11 pass, spawn smoke clean.

Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
Nicholas Butzke
2026-07-17 13:32:01 -04:00
co-authored by Claude Fable 5
parent 198345177a
commit 2c7b5a1aca
9 changed files with 90 additions and 15 deletions
+7 -3
View File
@@ -22,8 +22,11 @@ class_name MovementParams
# ── Air Strafe (Quake-style) ──────────────────────────────────────────────────
# Classic accelerate: only the velocity component along wish_dir is capped, so
# turning while strafing genuinely gains speed (up to max_air_speed overall).
@export var air_strafe_accel: float = 55.0
@export var air_wish_speed_cap: float = 1.2 # per-tick projection cap (m/s), quake-style
@export var air_strafe_accel: float = 90.0
@export var air_wish_speed_cap: float = 2.5 # per-tick projection cap (m/s), quake-style
# Direct steering: bends existing horizontal velocity toward the input without
# changing its magnitude, so air direction changes feel light and responsive.
@export var air_steer_rate: float = 5.0
# ── Bunny Hop ─────────────────────────────────────────────────────────────────
@export var bunny_hop_impulse: float = 1.1
@@ -82,7 +85,8 @@ class_name MovementParams
# ── Dash ──────────────────────────────────────────────────────────────────────
@export var dash_speed: float = 13.0
@export var dash_duration: float = 0.18
@export var dash_cooldown: float = 2.0
@export var dash_charges: int = 2 # dashes available before recharging
@export var dash_cooldown: float = 2.0 # seconds to regain ONE charge
@export var dash_invulnerability_time: float = 0.1
# ── Landing feel ──────────────────────────────────────────────────────────────