guts/web/js/levels
type-two 7455c03ae3 [lane B+C+E+F] Playtest blockers: the game never taught its controls, deleted bosses on death, and shipped an unwinnable tutorial
A five-way audit of the shipped build found the first thirty seconds are broken in three
independent ways. All three are verified, not inferred.

1. THE CONTROLS WERE NEVER STATED. The title said "press any key", and aim + fire are both gated
   on pointer lock (input.js:45 onMouseMove early-returns unlocked; input.js:50 the first
   mousedown only REQUESTS the lock) — so a player who dismissed with a key got no mouse look and
   a cannon that silently did nothing. Worse: in an ARENA the forward axis belongs solely to
   intent.throttle (player.js), so an untaught player coasts to a dead stop in front of L1's Mast
   Cell and reasonably concludes the game is broken. Six arenas across L1/L3/L5/LS are the same
   trap. The card now says CLICK TO FLY, takes the pointer lock on any dismissal, and prints the
   legend that has existed — written and styled — in flight/dev.html since round 1, visible only
   to whoever was running Lane B's harness.

2. DYING DELETED THE BOSS. boot's pump advanced `_ei` monotonically and never rewound. That
   reasoning is right for `spawn` and `pickup` (re-firing double-spawns survivors and resurrects
   banked pickups) but it silently applied to `boss` as well: die to any of the five, respawn,
   fly through an empty lair, cross the gate, and collect a graded medal for a fight that never
   happened. Dying was the fastest route past every boss in the game. Now a REARM set ({boss,
   acid}) re-fires on respawn while everything else is retired into `_spent`. Verified by event
   trace: start:mast_cell -> end:wipe -> start:mast_cell. Also despawns the sentinel's body on a
   wipe, which the fix exposed as a duplicate (1 -> 2 Mast Cells per death).

3. L1'S TIDE WAS UNWINNABLE, AND MINE. I authored it this morning at speed 5 in a flow-2 segment,
   reasoning "5 against 2 catches a dawdler". The player ceiling there is 2.8 u/s sustained
   (throttleMax 1.4 x flow 2); boost peaks 5.2 for 0.55s on a 2.4s cooldown. C's own --sim prints
   the verdict in plain text — "required 2.50x UNWINNABLE" — and I never ran it. Because
   hazards.js grazes on gap<=catchRadius and the gap stays negative once passed, it was a ~74 dps
   loop back onto the s=475 checkpoint: a brand-new player, in the default level, hard-stopped
   three minutes in. Retuned to 2.4 (required 1.20x — the same shape as L2's teaching burp).

   The validator was exempting it: `if (!c.lethal) continue` in levels/index.js meant qa.sh went
   green over a death loop. An unwinnable chase is a design failure whatever its lethality — a
   non-lethal one you cannot outrun is a continuous-damage trap. That exemption is gone, and all
   six levels still validate.

Also: DEFAULT_LEVEL was still 'L2_esophagus' from when L2 was the only finished level, so every
new player skipped the tutorial entirely and started mid-campaign. LANE_C_NOTES §→ Lane F #2
said "change it if you would rather it be L1". It is L1 now.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-26 19:04:25 +10:00
..
difficulty.js [lane C] Round 1: schema v1, levels registry + selfcheck + pacing sim, L2 vertical slice 2026-07-16 08:53:34 +10:00
enemies.js [lane B+C] The Tapeworm and the churn: both deferrals closed, campaign ready for playtest 2026-07-26 12:48:06 +10:00
index.js [lane B+C+E+F] Playtest blockers: the game never taught its controls, deleted bosses on death, and shipped an unwinnable tutorial 2026-07-26 19:04:25 +10:00
L1_mouth.json [lane B+C+E+F] Playtest blockers: the game never taught its controls, deleted bosses on death, and shipped an unwinnable tutorial 2026-07-26 19:04:25 +10:00
L2_esophagus.json [lane B+C+F] The biofilm gate: the reputation cash-out, "it helps you in level 5" made real 2026-07-20 00:16:12 +10:00
L3_stomach.json [lane B+C] The Tapeworm and the churn: both deferrals closed, campaign ready for playtest 2026-07-26 12:48:06 +10:00
L4_small_intestine.json [lane B+C] The Tapeworm and the churn: both deferrals closed, campaign ready for playtest 2026-07-26 12:48:06 +10:00
L5_large_intestine.json [lane B+C] L5 Large Intestine: the dark, the gas, and The Blockage — the campaign is complete 2026-07-26 11:35:28 +10:00
LS_appendix.json [lane B+C+F] The Appendix Sovereign: the secret boss, and a reputation you cannot fake 2026-07-25 23:25:36 +10:00