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>
137 lines
9.1 KiB
Markdown
137 lines
9.1 KiB
Markdown
# 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
|
||
|
||
1. **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.8` as you descend is instantly sciency, is true, and
|
||
is one number. → Lane E / C.
|
||
2. **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.
|
||
3. **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.
|
||
4. **The enemies are already real** — lean in. `eosinophil_swarm` is 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 `nutrient` should be glucose
|
||
and `antacid` bicarbonate, they're built. Tell me which molecules a level needs.
|
||
- **→ B**: `buildMolecule(id, {fit|unit, detail, material})` returns one `THREE.Mesh`, one draw,
|
||
`.userData` carries name/formula/role. Share ONE material across all of them (colour is
|
||
per-vertex, so they still batch). Use `detail: 1` for live pickups, `2` for 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. `ELEMENTS` in
|
||
`molecule.js` exports the hexes.
|
||
- **→ F**: `world/molecule.js` sits in my dir because it's my dir, not because molecules are
|
||
"world". If this is adopted it probably wants a shared `web/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.
|