PROTOTYPE + proposal, not wired into boot. Pickups are B's systems, their economy is C's, object art is D's — this is a renderer and an argument, offered to all three. Bench: web/dev/laneA_molecules.html · docs/MOLECULES.md THE PITCH: the pickups already in L2 ARE molecules. C authored `nutrient`, `mucin`, `B12` and `antacid ammo` before any of this existed — those are the real biochemistry of a digestive tract, and glucose/cobalamin/bicarbonate are real compounds with known shapes. We don't need to invent a pickup language; we need to stop hiding the one the fiction handed us. GUTS is already a science game (an eosinophil is a real white blood cell, candida a real yeast, the hiatus a real choke point) — it just doesn't LOOK like one, because everything on screen is tinted tissue. THE RULE THAT MAKES IT WORK: CPK is the scanner. Everything identified is drawn in the standard element palette (O red, N blue, P orange, metals pink); everything else stays monochrome tissue. Against six biomes of tinted wall a CPK molecule is the ONLY saturated foreign colour on screen — it reads as artificial, valuable and targetable with NO HUD marker. Proof: round2_molecules_in_canal.png. That's the ART_BIBLE's synthetic-scanner fiction paying rent, and it hands Lane E a free HUD palette. WHY PROCEDURAL AND NOT MODELBEAST — and I'm authorised to burn the GPU: a molecule's shape is already known exactly. Glucose is a hexagonal ring because it IS one. FLUX+TRELLIS gives a plausible blob in 3-8 min that a chemist clocks as wrong and that can never be re-derived. Ball-and-stick from an atom list is exact, rebuilds in ms, and is ONE DRAW CALL per molecule (measured: 7 molecules = 7 draws / 26.5k tris). The split is a principle: small molecules = procedural (exact geometry known); proteins/enzymes = MODELBEAST blobs (real ones are 3000-atom blobs nobody reads — and PIPELINE says blobby organics are TRELLIS's sweet spot); cells/creatures = MODELBEAST, D's lane, unaffected. BUILT: water (chaff) · bicarbonate (antacid ammo — HCO3- + HCl is the real neutralisation, it genuinely fizzes CO2) · glucose (nutrient/score) · caffeine (overdrive — really gut-absorbed, needs no tutorial) · ATP (boost — the orange triphosphate tail IS the charge, a pickup that's a diagram of its own mechanic) · capsaicin (burn hazard — long greasy tail reads wrong on sight) · B12 (rare treasure — a cobalt in a corrin cage, the only metal vitamin; C authored it as a pickup already). Size is a free rarity signal: `unit` mode keeps TRUE relative sizes, so water is a speck and B12 a chandelier. Found by rendering it, which is why the bench exists: fuseRing returns vertices starting adjacent to B, and bonding them from A instead draws a chord across the ring — still a valid 5-cycle so nothing errors, it just looked like a squashed pentagon. Fixed in caffeine + ATP's adenine, adjacency documented. Stated plainly: geometry is idealised (correct connectivity/rings/bond orders, believable angles, authored flat) NOT crystallographic — real glucose is a chair, not a hexagon. The B12 is a simplified corrin core. Untested above ~7 on screen; fifty would want instancing. qa GREEN. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
9.1 KiB
MOLECULES — a proposal (Lane A, round 2)
Status: PROTOTYPE + argument. Nothing here is wired into boot. Pickups are Lane B's systems, their economy is Lane C's, object art is Lane D's — this document is a pitch to all three, plus a working renderer they can take or leave.
Fly it: web/dev/laneA_molecules.html · code: web/js/world/molecule.js ·
evidence: docs/shots/laneA/round2_molecule_pickups.png, round2_molecules_in_canal.png,
round2_molecules_truescale.png
The pitch in one line
The pickups already in L2 are molecules — so draw them as molecules.
C authored nutrient, mucin, B12, antacid ammo before any of this existed. Those aren't
game-flavoured names; they're the actual biochemistry of a digestive tract. Glucose, cobalamin
and bicarbonate are real compounds with known shapes. We don't have to invent a pickup
language — we have to stop hiding the one the fiction already handed us.
Why this is free sciency-ness, and why it isn't educational
The game does not explain anything and should not start. Nobody needs to know what ATP is. But a purine reads as chemistry to anyone alive, the way a circuit diagram reads as electronics — because it is the real notation, not an impression of one. The game gets to feel sciency by not faking it, which is cheaper than faking it and better.
Consider what's already true: an eosinophil is a real white blood cell. Candida is a real yeast. A bolus is a real mass of chewed food. The hiatus is a real anatomical choke point. GUTS is already a science game — C built it that way. It just doesn't look like one yet, because everything on screen is tinted tissue.
The one rule that makes it all work: CPK is the scanner
Everything the ship's scanner has identified is drawn in CPK colours. Everything it hasn't is monochrome tinted tissue.
CPK is the standard element palette — oxygen red, nitrogen blue, phosphorus orange, sulfur
yellow, metals pink. Every chemistry textbook and protein viewer on earth uses it. Against six
biomes of tinted tissue, a CPK molecule is the only saturated foreign colour on screen, so
it reads as artificial, valuable and targetable at a glance — with no HUD marker
(round2_molecules_in_canal.png is the proof: a glucose in the esophagus, unmissable).
That's ART_BIBLE's synthetic-scanner fiction paying rent: the ship identifies a compound and colours it in. → Lane E: this is a free HUD language. Accent a readout in an element's CPK colour and it belongs to that compound with no legend.
Why procedural, not MODELBEAST — and where MODELBEAST is right
I'm authorised to burn GPU on this and I'm not going to, for one reason: a molecule's shape is already known exactly. Glucose is a hexagonal ring because it is a hexagonal ring. FLUX + TRELLIS would give a plausible blob, in 3–8 minutes, that a chemist clocks as wrong instantly and that can never be re-derived. Ball-and-stick from an atom list is exact, rebuilds in milliseconds, and is one draw call per molecule (measured: 7 molecules = 7 draws, 26.5k tris total; glucose alone is 3.7k tris / 1 draw).
The split, and it's a principle, not a preference:
| kind | how | why |
|---|---|---|
| Small molecules — glucose, ATP, caffeine, bicarbonate, capsaicin, B12, ions | procedural ball-and-stick | exact geometry is known; generation can only degrade it |
| Proteins / enzymes — pepsin, trypsin, lipase, mucin | MODELBEAST (flux → sf3d → trellis) | real ones are 3000-atom blobs; nobody reads their structure. A blob is the honest render, and PIPELINE says blobby organics are TRELLIS's sweet spot |
| Cells / creatures — eosinophil, candida, bolus, ENDO-1 | MODELBEAST (Lane D's round-2 headline, gated on concept sign-off) | organic, no canonical geometry, exactly what it's for |
So MODELBEAST still does the heavy lifting — on the things where invention is the right answer.
The library (built, rendering, in the sheet)
Every one of these is really in the human gut. That constraint does the design work: the pickup table is the biochemistry of digestion, so nothing has to be invented and the fiction is automatic.
| molecule | proposed role | why it's the right object |
|---|---|---|
Glucose C₆H₁₂O₆ |
nutrient / score | Food. The reason the canal exists. Common, stacks. |
ATP C₁₀H₁₆N₅O₁₃P₃ |
boost | Literally the cell's energy currency. The orange triphosphate tail is the charge — a body spends ATP by snapping one off. A boost pickup that visibly carries three charges is a diagram of its own mechanic. |
Bicarbonate HCO₃⁻ |
antacid ammo | Already in L2. HCO₃⁻ + HCl → salt + H₂O + CO₂ is the real reaction that neutralises stomach acid — fire it into the acid sea and it genuinely fizzes. |
Caffeine C₈H₁₀N₄O₂ |
overdrive | Really absorbed through the gut wall. Everyone knows what it does to a body: throttle up, twitchier, wears off badly. Needs no tutorial. |
Capsaicin C₁₈H₂₇NO₃ |
burn hazard | Chilli. Long greasy tail + aromatic ring = a silhouette that reads wrong across a room, and it tumbles unlike any compact pickup. Free readability. |
Vitamin B₁₂ C₆₃H₈₈CoN₁₄O₁₄P |
rare treasure | C already authored B12 as a pickup. It's the most complex vitamin and the only one with a metal at its heart — a cobalt in a corrin cage. It renders as a jewel in a setting. |
Water H₂O |
trickle / chaff | Everywhere, worth a sliver. The size floor. |
Size is a free rarity signal. buildMolecule(id, {unit}) keeps molecules at their TRUE
relative sizes: water is a speck, B12 is a chandelier (round2_molecules_truescale.png). The
player learns what's worth chasing before reading a single colour, and it costs nothing because
it's just true. ({fit} normalises them all to one size instead, if a pickup must occupy a
fixed box — B's call.)
Cheap next molecules, if this lands
- Ions as basic ammo/energy: Na⁺, K⁺, Cl⁻, Ca²⁺ — single coloured spheres, ~30 tris, and they're the real electrolytes. Violet, green, purple: instant colour-coded ammo types.
- Ethanol
C₂H₅OH— a powerdown. Controls drift, aim lags. Funny, real, gut-absorbed. - Vitamin C
C₆H₈O₆— coat repair (it's the antioxidant). Pairs with B12 as a vitamin tier. - Mucin — the coat itself, and it's already a pickup. It's a glycoprotein → MODELBEAST blob, not ball-and-stick. Good first test of the split above.
- HCl — the acid sea's own molecule. One green Cl, one white H. The sea could shed them.
Other ways to be sciency that cost ~nothing
- Show the real pH. L3's identity is "ambient pH drains the coat". Stomach pH really is
~1.5–3.5. A HUD readout ticking
pH 1.8as you descend is instantly sciency, is true, and is one number. → Lane E / C. - Name the real reaction when it fires. Antacid hit →
HCO₃⁻ + HCl → NaCl + H₂O + CO₂↑flashed for half a second in the feed. Never explained. Reads as an instrument log. - Let CO₂ be the fizz. The bicarbonate reaction really produces gas. Bubbles from a neutralised acid patch are the reaction being visible, not a particle effect.
- The enemies are already real — lean in.
eosinophil_swarmis a real immune response to an invader. The player IS the invader. That's the whole game's joke and it's science.
What I'd need from each lane
- → C: are these the roles you want? The economy is yours. If
nutrientshould be glucose andantacidbicarbonate, they're built. Tell me which molecules a level needs. - → B:
buildMolecule(id, {fit|unit, detail, material})returns oneTHREE.Mesh, one draw,.userDatacarries name/formula/role. Share ONE material across all of them (colour is per-vertex, so they still batch). Usedetail: 1for live pickups,2for hero/close. - → D: this doesn't touch your pack and doesn't want your GPU time. It asks for the split above — proteins and cells are yours, small molecules are arithmetic. Your round-2 hero list is unaffected.
- → E: CPK as the scanner's identification language is a free HUD palette.
ELEMENTSinmolecule.jsexports the hexes. - → F:
world/molecule.jssits in my dir because it's my dir, not because molecules are "world". If this is adopted it probably wants a sharedweb/js/fx/— your call.
Honest limitations
- Geometry is idealised, not crystallographic: correct connectivity, ring sizes and bond orders, believable angles, authored mostly flat because a flat ring reads instantly and spins well. Real molecules pucker (glucose is a chair, not a hexagon). This is a game, not PyMOL — but nobody should mistake this table for a structure database later.
- The B12 is a simplified corrin core — the real thing has a nucleotide tail and far more side chains. It reads as "jewel in a cage", which is the job.
- Not performance-tested at pickup density. 7 on screen is 7 draws / 26k tris. Fifty would want instancing or a merged batch, and neither exists yet.