guts/docs/GDD.md
jing 1b5ec767cd [lane C] Round 1: schema v1, levels registry + selfcheck + pacing sim, L2 vertical slice
Data spine:
- Schema v1 ratified (TECH.md, C-owned). Additive over v0: schema/par/next, segment
  name, cross-section placement (theta/rho as a FRACTION of safe radius), spread, span,
  pickup+gate event types, hazard params. STUB_LEVEL synced (that const only, per
  ROUND1 §Lane C.1) — world.hash() unchanged (1bdf001), geometry provably untouched.
- levels/index.js: registry + loader (node+browser, no THREE), real schema selfcheck
  (qa's --selfcheck hook is now live) and a pacing simulator (--sim). Consumes the other
  lanes' contracts live rather than restating them: A's biomes.js for ids and
  wave.amp+breathe, A's SKIN, B's tuning.js hull radius, B's balance.js for scores.
- levels/enemies.js (fiction id -> archetype join table), levels/difficulty.js.

L2_esophagus — the vertical slice, complete: 3600 units, 7 beats, 47 events, 65 enemies,
10 checkpoints, 3 samples, reflux-surge finale. L1/L3 skeletons (shape only).
Anatomy is the level designer: the three real esophageal constrictions are the three
setpieces, and all three enemies are real esophageal pathology (bolus chunk, eosinophilic
esophagitis, candida esophagitis).

Measured (node web/js/levels/index.js --selfcheck|--sim; qa GREEN):
- selfcheck 3/3 valid, exit 0.
- pressure curve 0.27 -> 2.14 -> 4.35 -> 0.69 -> 4.53 -> 6.35 -> 4.40 (breather/pressure/
  spike/breather/pressure/peak/finale).
- par 3:30 vs measured 2:47 speedrun / 3:19 par-pace / 4:22 timid; par.score 9000 of a
  9400 kill budget (95%), computed from B's scores.
- all 10 checkpoint gaps within the <=30s death-cost law (max 28.8s); min clearance 2.73.

Two contract collisions found and resolved (LANE_C_NOTES):
- Biome ids: authored mouth/pharynx/cardia/pylorus; A's registry has six canonical ids and
  rejected all four. A is right — biome = look, segments[].name = anatomy. Conformed.
- Balance: my first enemies.js restated hp/size/speed/score that B owns in balance.js.
  Cut to a join table; index.js reads B's scores via scoreFor().

Caught live: A raised esophagus wave.amp 0.9 -> 1.4 mid-session, making the diaphragmatic
hiatus unflyable (2.33 vs the 2.5 floor). Widened 6.5 -> 6.8. The invariant also failed my
own aortic constriction's first draft (radius 7, symmetric squeeze) -> radius 9, directional.

No in-engine flythrough: ?stub=1&lvl= does not compose (snippet offered to F) and the stub
is single-segment, so it could only render beat 1. The pacing evidence is a kinematic model,
not a playtest — it proves L2 is flyable, paced and survivable, not that it feels good.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 08:53:34 +10:00

7.7 KiB
Raw Blame History

GUTS — Game Design Document (v1, round 1)

Owner: Lane C (with F sign-off). This v1 settles the open questions from the original concept discussion; C refines numbers/encounters in-lane, but the decisions below are integrator-settled for v1.

⚠ Lane C round-1 refinements (2026-07-16) — changed in place, per charter:

  • §Structure — "610 min/level" replaced with per-level targets. L2 is deliberately the short one: it is the speed level, and a 6-minute esophagus is a corridor.
  • §Enemies — esophagus roster filled in (eosinophil swarm, candida bloom). All three L2 enemies are real esophageal pathology; see LANE_C_NOTES.md §L2 roster.
  • §Structure — L2's signature mechanic now names the three real anatomical constrictions, which are the level's three setpieces.

Not changed, and not up for relitigation in-lane: the flow-locked hybrid, the 5+1 level structure, the coat/hull split, the boss roster. Boss specs (phases/telegraphs/windows) are in LANE_C_NOTES.md §Boss specs and fold into the GDD once F signs them off.

Fantasy & tone

You are ENDO-1, a one-pilot micro-probe injected to clear a patient's digestive tract of a hostile infestation, mouth to exit. Tone: playful-gross medical sci-fi — Fantastic Voyage wonder, Star Fox arcade flow, a wink of Osmos-y biology-nerd humor. The body is not the enemy; it's the weather. Enemies are the infestation + an immune system that can't tell you're friendly.

DECISION — movement model: "flow-locked" hybrid

Neither pure rail nor pure 6DOF — the anatomy picks the mode:

  • Tube mode (esophagus, intestines): peristalsis is a forward current you cannot fully fight. Base flow speed comes from the biome (world.biomeAt(s).flow); throttle gives ±40%, boost gives short +120% bursts. Full analog movement in the cross-section disc (mouse/stick aims, ship banks). You steer within the tube; the tube carries you. This is the Star Fox layer: readable, forward, fast.
  • Arena mode (oral cavity, stomach, boss lairs): the same controller unlocked to free 6DOF, Descent-style, no gravity. Slower, spatial, exploratory. This is where fights and secrets breathe.
  • Transitions are diegetic: sphincters are literal gates between modes.

Rationale: pure rail wastes the stomach; pure 6DOF makes the esophagus a boring corridor. The hybrid also keeps collision cheap in the 90% case (tube = radius test).

DECISION — structure: 5 levels + gates + 1 secret

Each level ends at a real anatomical valve, staged as a gate ritual or boss:

# level mode signature mechanic exit gate
1 Oral Cavity arena (tutorial) dodging molar crush-cycles, saliva tides Epiglottis — timing gate: dive on the swallow
2 Esophagus tube (speed run) surf peristalsis crests for boost; the three real constrictions (aortic squeezediaphragmatic ring gate) as setpieces; reflux surge chase finale Cardiac sphincter — outrun the acid wall through it
3 Stomach arena (the acid sea) pH as environmental damage; mucus shallows are safe lanes; churn cyclones BOSS: Pyloric Guardian — the sphincter itself
4 Small Intestine tube (the long maze) villi forest occludes sightlines; bile slicks; immune hunters MINIBOSS: Tapeworm chase → ileocecal valve
5 Large Intestine tube→arena (gas swamps) flammable gas pockets: shooting inside one detonates it (hurts everyone — risk/reward); darkness + your scanner light BOSS: The Blockage — then triumphant ejection finale
S Appendix (secret) arena hidden lair off the cecum, bonus loot + lore

Per-level targets (C, round 1 — replaces a flat "610 min/level", which flattened the levels into each other). Length is an identity, not a budget: the campaign should breathe.

# level par first playthrough why
1 Oral Cavity 5:00 ~6 min tutorial: slow, safe, over-explained on purpose
2 Esophagus 3:30 ~45 min the sprint. Shortest level in the game. You cannot stop in a flow-locked tube, so its length is bounded by physics: even a timid run is 4:22 and a full-throttle run is 2:47 (measured — levels/index.js --sim)
3 Stomach 9:00 ~10 min the big room + first real boss; arenas need time to breathe
4 Small Intestine 10:00 ~11 min the long maze — the campaign's endurance beat
5 Large Intestine 9:00 ~10 min darkness, gas risk/reward, the final boss

~45 min campaign including deaths and retries. Built to replay for medals.

Player systems

  • Hull (HP, pickups only) + Mucus coat (regenerating shield; drained continuously by ambient pH/enzymes — biome-dependent — and by hits). The coat is the pH mechanic: in the stomach open acid, coat drain is brutal; hugging mucus shallows pauses it.
  • Weapons: primary lysozyme cannon (fast pellet stream, infinite, heat-limited); secondary antacid torpedo (limited ammo, AoE, also neutralizes an acid zone for ~10 s — the dual-use is the interesting bit).
  • Boost with a short i-frame window at spend; recharges from nutrient orbs.
  • Pickups: nutrient orbs (score+boost), mucin globs (coat refill), B12 cell (hull), antacid ammo, biopsy samples (3 hidden per level — the collectible).

Enemies (v1 roster — B implements behaviors, D makes them pretty later)

All emissive-coded (ART_BIBLE): hostile = hot amber/red, projectiles = white-hot, neutral flora = cyan (turns hostile if shot).

enemy biome behavior archetype
amylase droplet mouth slow floater, corrosive contact aura
bolus chunk esophagus tumbling debris in the flow (crush). Drifts slower than the current, so it reads as traffic you overtake, never as a chaser
eosinophil swarm esophagus small fast seekers (eosinophilic esophagitis: immune cells that mistake ENDO-1 for the parasite they were built for). Faster than the flow — you cannot outrun them, only shoot or bank
candida bloom esophagus wall-mounted plaque colony firing spore clusters (candida esophagitis). Owns an arc of the cross-section: turns "which side do I fly" into a decision
pepsin swarm stomach small fast seekers, dissolve on kill
churn cyclone stomach environmental vortex, flings you
macrophage small int. big slow hunter; grab → mash to escape; eats other corpses to grow
antibody turret (Peyer's patch) small int. wall-mounted, fires homing Y-shaped darts
gut flora colony large int. neutral biofilm; shot ⇒ angry E. coli swarm
gas vent large int. hazard: thrust-shove + flammable cloud

Bosses: Pyloric Guardian (armored sphincter; destroy mucosal nodes during open-cycles while dodging acid spouts, arena slowly churns), Tapeworm (tube chase; shoot segment weak-points as it coils around the canal ahead/behind), The Blockage (compacted-mass fortress with embedded turrets and gas pockets; peel it layer by layer, finale = the canal itself expels you both).

Scoring & replay

Star-Fox-style medals per level: score (kills × style multiplier, chained kills), par time, biopsy samples, damageless-gate bonus. Combo meter feeds the music layer (E). Endless "colonoscopy run" mode is V2 (see V2_IDEAS.md).

Difficulty & assists

Three difficulties scale coat-drain, enemy density, boss timing windows. Assist toggles (flow auto-center, aim magnetism) — arcade games live or die on feel accessibility.

Open for C to design in-lane (not settled)

Exact level lengths/pacing curves, encounter tables per segment, par times, pickup economy, boss phase timings, secret placement, tutorialization beats of level 1.