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

121 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 squeeze** → **diaphragmatic 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.