Flight (js/flight/): tube-mode controller in spline space (s,x,y) — flow-locked forward motion, throttle as a spring-back lean, boost + i-frames, banking chase cam on the parallel-transport frame, arcade wall response (shove + graze damage, never a hard stop). Twin-stick input: WASD/left-stick moves the ship in the disc, mouse/right-stick aims, Shift/Ctrl is throttle. Gamepad supported. Combat (js/combat/): lysozyme cannon (pooled, instanced, heat-limited with hysteresis lockout) + antacid torpedo emitting level:neutralize. Enemy framework with floater/seeker/turret and turn-rate-limited homing darts, spawned from C's level:event. Coat/hull model and the full bus surface E builds against. Measured (deterministic stepper): flow-lock exact (3s at flow 14 -> s=44.0); boost peak 30.8 u/s; heat 4s fire -> 2s lockout; wall slam 13.3 coat at 11.3 u/s with forward speed untouched; 10 combat draws at 55 live enemies (budget <=80); 0.10 ms/frame CPU; 0 leaks over 20 create/dispose cycles. fps NOT claimed — rAF does not run in the automated pane. Evidence: docs/shots/laneB/. Three findings escalated in LANE_B_NOTES: - qa.sh gate #1 is a no-op: node --check silently exits 0 on ESM, so the syntax gate has never checked anything. I shipped a real SyntaxError past a GREEN qa. Fix + verification handed to F. - Surf is structurally broken: the peristalsis wave (13.64 u/s) is slower than the player (19.6 u/s), so level 2's signature mechanic loses to mashing throttle. Not tunable from this lane; escalated to A/F with options. - Custom ShaderMaterials need #include <colorspace_fragment>, else ART_BIBLE's hostile amber reaches the display as rgb(255,26,6). Fixed here; stub/walls inherit it. js/flight/dev.html is a dev harness (boot.js has no player wiring yet); it retires once F pastes the snippet in LANE_B_NOTES. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.7 KiB
Lane B — progress log
2026-07-16 · Round 1 — flight + first blood, on the stub
Built the whole Lane B round-1 slice against ?stub=1: flight/{tuning,input,player,ship,emissive}.js
and combat/{balance,weapons,enemies,index}.js. Round-1 asks 1–4 all landed; arena/6DOF deferred to
round 2 as instructed.
Shipped
- Tube controller in spline space
(s, x, y): flow-locked forward motion, throttle as a spring-back lean, boost + i-frames, banking chase cam on the parallel-transport frame, arcade wall response (shove + graze damage, never a hard stop). - Twin-stick input (WASD/left-stick = disc, mouse/right-stick = aim, Shift/Ctrl = throttle), gamepad supported. Throttle deliberately not on WASD.
- Lysozyme cannon (pooled, instanced, heat-limited with hysteresis lockout) + antacid torpedo emitting
level:neutralize. Enemy framework + floater/seeker/turret + turn-rate-limited homing darts. - Coat/hull model and the full bus surface E builds against.
Measured (deterministic fixed-timestep stepper): flow-lock exact (3 s at flow 14 → s=44.0);
boost peak 30.8 u/s; heat cycle 4 s fire → 2 s lockout; wall slam 13.3 coat at 11.3 u/s impact with
forward speed untouched; 10 combat draws at 55 live enemies (budget ≤80); ~5.7k combat tris;
0.10 ms/frame CPU; 0 leaks across 20 create→dispose cycles. fps deliberately not claimed — rAF
doesn't run in the automated pane. Evidence in docs/shots/laneB/.
Findings escalated (detail in LANE_B_NOTES):
tools/qa.shgate #1 never checks anything —node --checksilently exits 0 on ESM. I shipped a real SyntaxError past a GREEN qa. Fix + verification handed to F.- Surf is structurally broken — the peristalsis wave (13.64 u/s) is slower than the player
(19.6 u/s), so level 2's signature mechanic is a trap: riding a crest loses to mashing throttle.
Not tunable from my lane (measured: identical ~3.0 u gained at gain 0.4/0.75/1.2). Escalated to
A/F with two options and a request for
biome.waveSpeed. - Custom ShaderMaterials need
#include <colorspace_fragment>— without it ART_BIBLE's hostile amber#ff5a2areaches the display as rgb(255,26,6). Fixed in mine; F's stub and A's walls inherit it. flowPulsemissing from the TECH contract; nobody owns thelevel:eventemitter;world.sample()allocates on the hot path;player:state/combat:statebus additions needed for E's HUD.
Blocked on nothing. Built entirely against the stub per instructions; boot.js still has no player
wiring (F's file), so web/js/flight/dev.html is a dev harness that boots stub+player+combat. It
retires the moment F pastes the snippet in NOTES §→ Lane F #1.