[lane C] L4 Small Intestine: the long maze — the campaign doubles in length
The first new level since L2, and the campaign's endurance beat. 7 segments, 6000 units,
63 events, ~10 minutes. Authored entirely from systems that already exist — no new engine work.
The three acts are anatomy, not invention: duodenal bulb -> descending duodenum (the ampulla,
where bile enters) -> jejunum -> deep jejunum -> ileum -> terminal ileum -> ileocecal valve.
Giardia really colonises the duodenum/jejunum and Peyer's patches really concentrate in the
ileum, so the difficulty curve IS the gut's own immune gradient: you fly from the quiet
absorptive end into the lymphoid end and the walls get angrier.
Identity vs L2: flow 8-10 against L2's 12-20, curviness up to 0.70, fog 0.050. L2 punishes bad
reflexes; L4 punishes bad reading. Segmentation ring gates (the small bowel's real motility)
teach at 70% open and test at 43% in an 8-unit lumen.
Three catalogue rows carry the new fiction onto existing archetypes — chyme_clump (floater),
neutrophil_hunter (seeker), bifido_colony (flora). The ileocecal biofilm gate at s5500 is the
first time the reputation loop pays out at a level's END rather than mid-level.
C's own tooling verifies it: selfcheck 4/4 valid, and --sim reports par 600s vs par-pace 576s
("par is reachable at par-pace throttle"), a pressure curve of 1.00/1.43/1.90/2.46/1.65/2.69/
1.63, min clearance 3.62 vs the 2.5 law, all 22 checkpoint gaps <= 29.3s. Driven end-to-end
in-engine: all six entity types spawn, biofilm fires at 5500, valve gate completes to L5.
The GDD's Tapeworm miniboss is not here — no boss framework exists yet. It goes in at ~5500
when that lands; the level notes say so.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
fb08d7895b
commit
1e4775ab12
156
web/js/levels/L4_small_intestine.json
Normal file
156
web/js/levels/L4_small_intestine.json
Normal file
@ -0,0 +1,156 @@
|
||||
{
|
||||
"schema": 2,
|
||||
"id": "L4_small_intestine",
|
||||
"name": "Small Intestine",
|
||||
"tagline": "The long maze",
|
||||
"seed": 20260720,
|
||||
"par": { "time": 600, "score": 10000, "samples": 3 },
|
||||
"next": "L5_large_intestine",
|
||||
"design": {
|
||||
"owner": "Lane C",
|
||||
"identity": "The endurance beat. Where L2 is a 3-minute sprint down a straight pipe, L4 is ten minutes of occluded, writhing maze at half the speed - the campaign's longest level and its slowest. Nothing here is faster than you; everything here is closer than you would like.",
|
||||
"anatomy": "Real small bowel, real order: duodenal bulb -> descending duodenum (the ampulla, where bile and pancreatic juice enter) -> jejunum -> deep jejunum -> ileum -> terminal ileum -> ileocecal valve. The three acts are anatomical, not invented: Giardia colonises the duodenum and jejunum, and Peyer's patches (the antibody turrets) concentrate in the ileum. The level's difficulty curve IS the gut's own immune gradient - you fly from the quiet absorptive end into the lymphoid end, and the walls get angrier as you go.",
|
||||
"scale": "Lumen radius 8-11 units (~2-2.5cm at 1 unit : 1mm) - genuinely narrower than the esophagus, and the biome's wave amp 1.5 eats more of it. 6000 units total, dilated as ever; the real jejunum+ileum is ~6m.",
|
||||
"curve": "breather -> teach -> the maze -> pressure -> the lymphoid gauntlet -> SPIKE -> cash-out + valve. No single spike as sharp as L2's hiatus: L4's difficulty is CUMULATIVE. It wins by attrition, which is what an endurance level is for.",
|
||||
"speed_identity": "flow 8-10 vs L2's 12-20. This is deliberate and it is the whole level: at 9 u/s you have time to look, and the fog (0.050, densest in the game outside the colon) plus curviness 0.65-0.70 means looking is exactly what you must do. L2 punishes bad reflexes; L4 punishes bad reading.",
|
||||
"teach_then_test": "chyme (b1 solo -> b3 fields in the maze) / giardia (b2 solo in open water -> b6 three at once in the tightest tube) / segmentation ring (b2 open 70% -> b4 53% -> b6 43%) / peyers turret (b2 one on a clear sightline -> b5 three arcs at once, twice) / neutrophil (b2 three in the open -> b7 five on the run-in).",
|
||||
"no_miniboss_yet": "The GDD's Tapeworm chase belongs at this level's end. There is no boss framework in the tree yet (the Pyloric Guardian is the first one being built), so L4 currently ends at the ileocecal valve gate with the biofilm cash-out as its finale. When the boss lane lands, the Tapeworm goes in at ~5500 and this note comes out."
|
||||
},
|
||||
"segments": [
|
||||
{
|
||||
"biome": "small_intestine",
|
||||
"name": "Duodenal Bulb",
|
||||
"length": 700,
|
||||
"radius": { "base": 11, "wobble": 0.12 },
|
||||
"curviness": 0.2,
|
||||
"flow": 8,
|
||||
"note": "BEAT 1 - breather. You are squeezed through the pylorus into the widest, calmest stretch of the level. Slowest flow in the game so far: after the stomach this reads as decompression, and it buys the player the seconds needed to learn that villi occlude and the tube bends."
|
||||
},
|
||||
{
|
||||
"biome": "small_intestine",
|
||||
"name": "Descending Duodenum",
|
||||
"length": 900,
|
||||
"radius": { "base": 10, "wobble": 0.18 },
|
||||
"curviness": 0.35,
|
||||
"flow": 9,
|
||||
"note": "BEAT 2 - the teaching floor. Real: bile and pancreatic juice enter at the ampulla, so this is where the biome starts working on your coat. Every enemy type in the level is introduced here, alone, with a clear sightline - the same contract L2's cervical stretch honours."
|
||||
},
|
||||
{
|
||||
"biome": "small_intestine",
|
||||
"name": "Jejunum",
|
||||
"length": 1100,
|
||||
"radius": { "base": 10, "wobble": 0.22 },
|
||||
"curviness": 0.65,
|
||||
"flow": 10,
|
||||
"note": "BEAT 3 - THE MAZE, and the level's identity. Highest curviness in the campaign so far: the tube writhes, fog 0.050 closes the sightline to a few segments, and everything you were taught 400 units ago is now behind a bend. Fastest flow in the level, because a maze you can stop and read is not a maze."
|
||||
},
|
||||
{
|
||||
"biome": "small_intestine",
|
||||
"name": "Deep Jejunum",
|
||||
"length": 900,
|
||||
"radius": { "base": 9.5, "wobble": 0.25 },
|
||||
"curviness": 0.7,
|
||||
"flow": 10,
|
||||
"note": "BEAT 4 - pressure. The maze tightens by half a unit and adds the segmentation ring at a real duty cycle. This is the beat that decides whether a player has learned to read the tube or has been getting away with reflexes."
|
||||
},
|
||||
{
|
||||
"biome": "small_intestine",
|
||||
"name": "Ileum",
|
||||
"length": 1000,
|
||||
"radius": { "base": 10, "wobble": 0.2 },
|
||||
"curviness": 0.5,
|
||||
"flow": 9,
|
||||
"note": "BEAT 5 - the lymphoid gauntlet, and the most anatomically honest beat in the game. Peyer's patches really are concentrated in the ileum, so this is where the antibody turrets live in numbers: two banks of three, each covering three arcs. The tube straightens out a little on purpose - the challenge here is arc denial, not sightlines, and stacking both would be a wall."
|
||||
},
|
||||
{
|
||||
"biome": "small_intestine",
|
||||
"name": "Terminal Ileum",
|
||||
"length": 800,
|
||||
"radius": { "base": 8, "wobble": 0.15 },
|
||||
"curviness": 0.4,
|
||||
"flow": 9,
|
||||
"note": "BEAT 6 - SPIKE. The tightest tube in the level (8 base, and the biome's 1.5 wave takes a real bite out of it). The segmentation ring at its meanest duty cycle, turrets on the walls, and three Giardia in a lumen with nowhere to dodge - the latch is worst exactly where the room is smallest, which is the point."
|
||||
},
|
||||
{
|
||||
"biome": "small_intestine",
|
||||
"name": "Ileocecal Approach",
|
||||
"length": 600,
|
||||
"radius": { "base": 9, "wobble": 0.18 },
|
||||
"curviness": 0.3,
|
||||
"flow": 8,
|
||||
"note": "BEAT 7 - the run-in. Opens back out and slows down for the cash-out: if you tended the bifido colonies and the akkermansia on the way through, the biofilm parts here and you cross the valve with an escort. If you sprayed them, you cross alone. Then the ileocecal valve - the one-way door into the colon."
|
||||
}
|
||||
],
|
||||
"arenas": [],
|
||||
"events": [
|
||||
{ "s": 20, "type": "checkpoint", "name": "Duodenal Bulb" },
|
||||
{ "s": 120, "type": "pickup", "kind": "nutrient_orb", "count": 3, "spread": 40, "note": "The orb line teaches the racing line before it pays anything - same opening contract as L2." },
|
||||
{ "s": 200, "type": "spawn", "enemy": "bifido_colony", "count": 3, "spread": 80, "rho": 0.7, "note": "TEACH commensal, first thing in the level. Cyan off the racing line: brushing it sheds coat and banks BIOME STANDING, shooting it is the trap. L4 opens with the friend because its finale is the biofilm cash-out." },
|
||||
{ "s": 290, "type": "checkpoint", "name": "Bulb Exit" },
|
||||
{ "s": 360, "type": "spawn", "enemy": "chyme_clump", "count": 1, "note": "TEACH chyme: one clump, slow, unmissable, harmless if you steer. The L4 bolus." },
|
||||
{ "s": 500, "type": "spawn", "enemy": "chyme_clump", "count": 3, "spread": 100, "note": "TEST chyme (mild): a small field in the widest tube of the level." },
|
||||
{ "s": 555, "type": "checkpoint", "name": "Duodenal Flexure" },
|
||||
{ "s": 640, "type": "pickup", "kind": "mucin_glob", "count": 1, "note": "Coat top-up as the bile stretch begins - the game pays you right before it charges you." },
|
||||
|
||||
{ "s": 720, "type": "spawn", "enemy": "giardia_latch", "count": 1, "note": "TEACH the latch, in its real home: Giardia colonises the duodenum. One, in open water, with room to boost. The player learns 'boost shakes it off' here or learns it at s5120 with three of them in a 8-unit tube." },
|
||||
{ "s": 830, "type": "checkpoint", "name": "Ampulla" },
|
||||
{ "s": 900, "type": "pickup", "kind": "antacid_ammo", "count": 2, "spread": 20, "note": "Bile and pancreatic juice enter at the ampulla; the level arms you where the chemistry changes." },
|
||||
{ "s": 950, "type": "hazard", "kind": "ring_gate", "period": 4.0, "open": 2.8, "warn": 2.5, "note": "TEACH segmentation. Real: the small bowel's signature motion is segmentation - rhythmic ring contractions that churn rather than push. Open 70% of the time at flow 9, so you clear it without thinking. Its evil twin is at s4840." },
|
||||
{ "s": 1000, "type": "spawn", "enemy": "chyme_clump", "count": 4, "spread": 120 },
|
||||
{ "s": 1120, "type": "checkpoint", "name": "Duodenojejunal Flexure" },
|
||||
{ "s": 1200, "type": "spawn", "enemy": "neutrophil_hunter", "count": 3, "spread": 50, "note": "TEACH immune hunters: three, open water, nothing else happening. Same lesson L2 taught with eosinophils - you cannot outrun them, you shoot or you bank." },
|
||||
{ "s": 1300, "type": "pickup", "kind": "biopsy_sample", "count": 1, "theta": 2.36, "rho": 0.9, "note": "SAMPLE 1/3. Cost = proximity: wall-pinned in the tail of the hunter wave, so you take it while something is chasing you. Visible from the racing line the whole way in - the visible-but-costly law." },
|
||||
{ "s": 1420, "type": "checkpoint", "name": "Jejunal Entry" },
|
||||
{ "s": 1500, "type": "spawn", "enemy": "peyers_turret", "count": 1, "theta": 0, "note": "TEACH the turret on the straightest wall left in the level, with a clear 200-unit sightline. From here on they come in banks and behind bends." },
|
||||
|
||||
{ "s": 1700, "type": "checkpoint", "name": "Jejunum" },
|
||||
{ "s": 1760, "type": "spawn", "enemy": "chyme_clump", "count": 4, "spread": 140, "note": "Traffic entering the maze: the clumps are the same as beat 1, the sightlines are not." },
|
||||
{ "s": 1850, "type": "spawn", "enemy": "peyers_turret", "count": 2, "theta": [1.2, 4.5], "note": "TEST turret: two arcs covered, and at curviness 0.65 each one is a surprise on a blind bend. This is the beat that makes the maze a mechanic." },
|
||||
{ "s": 1980, "type": "checkpoint", "name": "Jejunal Loop" },
|
||||
{ "s": 2040, "type": "spawn", "enemy": "giardia_latch", "count": 2, "spread": 60, "note": "TEST the latch: two, in the writhing tube. Boosting one off while the other closes is the read." },
|
||||
{ "s": 2150, "type": "spawn", "enemy": "akkermansia", "count": 2, "spread": 30, "rho": 0.5, "note": "The CHOICE node, on the racing line so it cannot be ignored: Akkermansia grazes your coat but banks standing fastest. In a level that ends at a biofilm gate, that trade finally has somewhere to be spent." },
|
||||
{ "s": 2260, "type": "checkpoint", "name": "Mid Jejunum" },
|
||||
{ "s": 2320, "type": "spawn", "enemy": "neutrophil_hunter", "count": 4, "spread": 70 },
|
||||
{ "s": 2420, "type": "pickup", "kind": "mucin_glob", "count": 2, "spread": 30 },
|
||||
{ "s": 2540, "type": "checkpoint", "name": "Jejunal Coils" },
|
||||
{ "s": 2600, "type": "spawn", "enemy": "chyme_clump", "count": 5, "spread": 150 },
|
||||
|
||||
{ "s": 2820, "type": "checkpoint", "name": "Deep Jejunum" },
|
||||
{ "s": 2880, "type": "spawn", "enemy": "peyers_turret", "count": 2, "theta": [0.4, 3.6], "note": "Opposite arcs: there is no free side, only a timed one." },
|
||||
{ "s": 2950, "type": "spawn", "enemy": "giardia_latch", "count": 2, "spread": 50 },
|
||||
{ "s": 3100, "type": "checkpoint", "name": "Deep Coils" },
|
||||
{ "s": 3160, "type": "hazard", "kind": "ring_gate", "period": 3.4, "open": 1.8, "warn": 2.5, "note": "TEST segmentation: 53% open. Same verb as s950, two-thirds the window, and now there is traffic in the lane." },
|
||||
{ "s": 3250, "type": "spawn", "enemy": "neutrophil_hunter", "count": 5, "spread": 80, "note": "They chase you THROUGH the ring: arriving on a closed beat with five on your tail is the beat's worst case, and it is survivable if you read the ring early." },
|
||||
{ "s": 3380, "type": "checkpoint", "name": "Jejunoileal Junction" },
|
||||
{ "s": 3440, "type": "pickup", "kind": "biopsy_sample", "count": 1, "theta": 5.5, "rho": 0.88, "note": "SAMPLE 2/3. Cost = the ring: it sits wall-side just past the segmentation gate, so you either take the gate wide and wrong, or come back for it against the current." },
|
||||
{ "s": 3500, "type": "spawn", "enemy": "chyme_clump", "count": 4, "spread": 120 },
|
||||
|
||||
{ "s": 3660, "type": "checkpoint", "name": "Ileum" },
|
||||
{ "s": 3720, "type": "spawn", "enemy": "peyers_turret", "count": 3, "theta": [0.3, 2.4, 4.7], "note": "THE SIGNATURE BEAT. Peyer's patches concentrate in the ileum - so here are three, evenly spaced around the cross-section, covering every arc. The tube straightens here precisely so this is readable: it is an arc-denial puzzle, not an ambush." },
|
||||
{ "s": 3850, "type": "pickup", "kind": "mucin_glob", "count": 1 },
|
||||
{ "s": 3940, "type": "checkpoint", "name": "Ileal Loop" },
|
||||
{ "s": 4000, "type": "spawn", "enemy": "neutrophil_hunter", "count": 4, "spread": 60 },
|
||||
{ "s": 4100, "type": "spawn", "enemy": "giardia_latch", "count": 2, "spread": 40 },
|
||||
{ "s": 4220, "type": "checkpoint", "name": "Mid Ileum" },
|
||||
{ "s": 4280, "type": "spawn", "enemy": "peyers_turret", "count": 3, "theta": [1.0, 3.1, 5.2], "note": "The second bank, rotated off the first: a player who learned one safe arc at s3720 finds it covered here." },
|
||||
{ "s": 4400, "type": "spawn", "enemy": "bifido_colony", "count": 3, "spread": 80, "rho": 0.6, "note": "The last commensals before the gate. Deliberately placed inside the turret gauntlet: the biome's help sits in the most dangerous room, and spraying wildly here costs you the escort you are about to need." },
|
||||
{ "s": 4500, "type": "checkpoint", "name": "Ileal Exit" },
|
||||
|
||||
{ "s": 4620, "type": "spawn", "enemy": "chyme_clump", "count": 5, "spread": 130, "note": "Traffic funnelling into the narrowest stretch - a wall of debris, not a sprinkle." },
|
||||
{ "s": 4780, "type": "checkpoint", "name": "Terminal Ileum" },
|
||||
{ "s": 4840, "type": "hazard", "kind": "ring_gate", "period": 3.0, "open": 1.3, "warn": 2.5, "note": "THE SKILL CHECK: 43% open, in an 8-unit tube. Same verb as s950 at 70%, now at its meanest. This is L4's hiatus." },
|
||||
{ "s": 4950, "type": "spawn", "enemy": "peyers_turret", "count": 2, "theta": [0.8, 4.0] },
|
||||
{ "s": 5060, "type": "checkpoint", "name": "Terminal Coils" },
|
||||
{ "s": 5120, "type": "spawn", "enemy": "giardia_latch", "count": 3, "spread": 60, "note": "The latch at its worst: three of them in the tightest lumen in the level, where a boost-dodge costs you your line. Everything beat 2 taught, in a room with no room." },
|
||||
{ "s": 5220, "type": "pickup", "kind": "biopsy_sample", "count": 1, "theta": 3.93, "rho": 0.85, "note": "SAMPLE 3/3, and the cruellest: wall-pinned in the tight tube with latchers live. The only one of the three that is a real decision rather than a detour." },
|
||||
{ "s": 5340, "type": "checkpoint", "name": "Ileocecal Run-in" },
|
||||
|
||||
{ "s": 5420, "type": "spawn", "enemy": "neutrophil_hunter", "count": 5, "spread": 90, "note": "The immune system's last word before the valve." },
|
||||
{ "s": 5500, "type": "biofilm", "need": 60, "allies": 3, "coat": 40, "note": "THE CASH-OUT. Ten minutes of deciding whether to spray the cyan resolves here: high BIOME STANDING and the ileocecal biofilm parts - three phage escorts and a coat refill for the run at the valve. Low, and it stays sealed and you finish alone. This is the reputation loop's first appearance at the END of a level rather than the middle of one." },
|
||||
{ "s": 5600, "type": "checkpoint", "name": "Ileocecal Approach" },
|
||||
{ "s": 5700, "type": "spawn", "enemy": "chyme_clump", "count": 3, "spread": 80 },
|
||||
{ "s": 5800, "type": "checkpoint", "name": "Valve Approach" },
|
||||
{ "s": 5900, "type": "pickup", "kind": "nutrient_orb", "count": 3, "spread": 40, "note": "A last line of orbs on the racing line - the level lets you leave at speed." },
|
||||
{ "s": 6000, "type": "gate", "id": "ileocecal_valve", "to": "L5_large_intestine", "note": "The ileocecal valve: a genuine one-way door in the real gut, which is exactly what a level gate is. You go through; the chyme does not come back." }
|
||||
]
|
||||
}
|
||||
@ -145,6 +145,29 @@ export const ENEMIES = Object.freeze({
|
||||
'pure payoff. A bright cyan gem, the special one of the commensal family.',
|
||||
},
|
||||
|
||||
// ---- L4 small intestine roster (the villi maze) ------------------------------------
|
||||
// All three map to archetypes Lane B already ships — L4 is authored from existing behaviour,
|
||||
// no new systems. The fiction is anatomically placed: Giardia colonises the duodenum/jejunum
|
||||
// and Peyer's patches concentrate in the ileum, which is what gives L4 its three acts.
|
||||
chyme_clump: {
|
||||
archetype: 'floater', biome: 'small_intestine', tint: 0xd9a13a, wall: false,
|
||||
note: 'Partly-digested chyme, tumbling through the villi. L4\'s traffic — the small ' +
|
||||
'intestine\'s bolus_chunk: it taxes the lane it sits in rather than chasing, which in ' +
|
||||
'a tube whose sightlines are already occluded by villi is pressure enough.',
|
||||
},
|
||||
neutrophil_hunter: {
|
||||
archetype: 'seeker', biome: 'small_intestine', tint: 0xff4d3d, wall: false,
|
||||
note: 'The GDD\'s "immune hunters" — neutrophils recruited into the mucosa, fast and ' +
|
||||
'single-minded. Same seeker that plays the eosinophil in L2, re-fictioned for its own ' +
|
||||
'biome: the immune system still cannot tell ENDO-1 from the infection it was called for.',
|
||||
},
|
||||
bifido_colony: {
|
||||
archetype: 'flora', biome: 'small_intestine', tint: 0x39e6ff, wall: false,
|
||||
note: 'Bifidobacterium — a friendly commensal of the small bowel. Carries the BIOME ' +
|
||||
'STANDING loop into L4 so the reputation you bank here can be spent at the ileocecal ' +
|
||||
'biofilm and, later, in the colon. Cyan: shooting it is still the trap.',
|
||||
},
|
||||
|
||||
// ---- passthrough: bare archetype names --------------------------------------------
|
||||
// Compatibility so the round-0 stub level's `enemy: 'floater'` style still resolves and
|
||||
// Lane B is never broken by this catalogue landing mid-round. Not for use in shipped
|
||||
|
||||
@ -57,7 +57,7 @@ export const SCHEMA = 2;
|
||||
export const SUPPORTED_SCHEMAS = new Set([1, 2]);
|
||||
|
||||
/** Campaign order. L4/L5/LS land in later rounds; the registry is the source of truth. */
|
||||
export const CAMPAIGN = ['L1_mouth', 'L2_esophagus', 'L3_stomach'];
|
||||
export const CAMPAIGN = ['L1_mouth', 'L2_esophagus', 'L3_stomach', 'L4_small_intestine'];
|
||||
|
||||
/** Booting with no ?lvl= gives you the vertical slice. Lane F: see LANE_C_NOTES §→ Lane F. */
|
||||
export const DEFAULT_LEVEL = 'L2_esophagus';
|
||||
|
||||
Loading…
Reference in New Issue
Block a user