{"version":3,"sources":["organics.mjs"],"sourcesContent":["// ORGANICS (WG-10, tools/terrain-evolve/BIOMES.md): trees, gilled towers, tidal growths, and the growths of silicon and\n// methane life, each BUILT OF BITS. A bit is half a kube, and each one here sits on bit-slot.js's lattice: its centre on\n// the half-cell grid, so it fills one of its cell's eight corner slots, which is what lets Phase B mine it as the bit it\n// is. A species is a deterministic grower (a seed and a size give the same shape on every side), and a world's biome\n// map says where each grows. Pure and twin-safe, as climate.mjs and biomes.mjs are: no imports beyond them, no DOM, no\n// clock, and only + − × ÷, sqrt, floor and integer hashing, so the servers' copies (functions/lib, zone-server/lib,\n// byte-identical) will name the same bit in the same place when organics are mined.\n//\n// THE MATERIALS are named for their pigment and their family, \"Solis Leaf Biomass\" off a K star's woods. Pigments are the\n// regolith palette's names (definitions/kubes.json): carbon life's leaves, wood and tidal growths take their star's\n// (Kiang et al. 2007: G green, F teal, K orange to rust, M black with a violet sheen, O B A pale silver-blue), petals and\n// glows are any world's, and silicon and methane life take the colours of the minerals and hazes they grow from.\n// The shapes and the names are Kubicor's own (the owner's originality rule): no creature of another game's biomes.\nimport { lifeChemistryOf, dimAt, PALETTE, LEAF_BY_CLASS, canopyOf, leafHex } from './biomes.mjs';\nimport { starClassOf } from './climate.mjs';\n\n// The regolith palette's colours, by name (a test holds them to kubes.json), and carbon life's pigments by its star's\n// class: both live in biomes.mjs now, which names a woods for its canopy (canopyOf).\nexport { PALETTE, LEAF_BY_CLASS };\n// Every leaf pigment there has ever been: the classes' handfuls, and the pale silver-blues O, B and A grew before Oct 1.\n// The twelve of before keep their order (anything that lists the materials lists them as it always did); the rest follow.\nconst LEAF_ALL = [...new Set(['Verge', 'Bloom', 'Tide', 'Glint', 'Solis', 'Scorched', 'Void', 'Gloam', 'Fathom', 'Drift', 'Halo', 'Echo',\n                              ...Object.values(LEAF_BY_CLASS).flat()])];\nconst CLASS_OF = {};\nfor (const [cls, vs] of Object.entries(LEAF_BY_CLASS)) for (const v of vs) (CLASS_OF[v] ||= new Set()).add(cls);\n\n// THE SIX PIGMENTS LIFE GROWS FROM VERSION 16 (the owner's biolith decision of Oct 13, \"add life that grows them\"): until\n// then no life on any world was Lull, Veil, Haze, Ignition, Surge or Reach, so no biolith of those pigments could be made.\n// They are not the palette's (PALETTE is the 26 that carbon life's leaves and the rest have always drawn from, and every\n// pick over it stays as it was); they are variants of three families from version 16 (`v16`, below): grey bone (Lull\n// Calcite), dark slime frames (Veil and Haze Slime Lattice) and red and blue flowers (Ignition, Surge and Reach Petal),\n// each drawn by a pick a world already makes (pigmentsOf), so nothing else moves. Their colours are their regoliths'.\nexport const LIFE_PIGMENTS_SINCE = 16;\n// THE BARK RULE'S VERSION (the owner's Tree Light and Bark picks, Oct 23, w_apply: \"a new world version\"): from version 23\n// a wood's bark is its own (barkOf below), not its leaves'. A world below it grows every wood it always grew.\nexport const BARK_SINCE = 23;\n// NO RIME ON THE CONIFERS (the owner, Oct 26, on an M giant's world whose black conifers wore near-white bands): from\n// version 24 a needle tree's rime rings (PART.FROST) are its own leaves, so a conifer is one colour on every world; every\n// shape and count is version 23's. A world below it keeps its pale Halo rime.\nexport const NO_RIME_SINCE = 24;\nconst PALETTE_V16 = Object.freeze({ Lull: '#808080', Veil: '#666666', Haze: '#4B4B4B', Ignition: '#FF0000', Surge: '#4169E1', Reach: '#00008B' });\n// A pigment's colour, the six of version 16 included.\nexport const pigmentHex = (v) => PALETTE[v] || PALETTE_V16[v] || null;\n// EVERY PIGMENT THERE IS: the palette's 26 and version 16's six, 32 in all (the owner's Oct 23 pick w_pal: \"all color\n// palette colors should be used … even if the frequency is far rarer for some\").\nexport const ALL_PIGMENTS = Object.freeze([...Object.keys(PALETTE), ...Object.keys(PALETTE_V16)]);\n// THE BARK'S COLOUR (w_tint, the owner's pick: 55%): its pigment mixed this far toward a bark brown.\nconst BARK_BROWN = '#5b4330', BARK_TINT = 0.55;\n// The nine pigments no tree's wood had been before version 23 (Arid, Radiance, Corona, and version 16's six): bark only.\nconst BARK_ONLY = ALL_PIGMENTS.filter((v) => !LEAF_ALL.includes(v));\n\nfunction mixHex(a, b, t) {\n  const p = (h, i) => parseInt(h.slice(1 + 2 * i, 3 + 2 * i), 16);\n  let s = '#';\n  for (let i = 0; i < 3; i++) s += Math.round(p(a, i) + (p(b, i) - p(a, i)) * t).toString(16).padStart(2, '0');\n  return s;\n}\n\n// THE FAMILIES, by chemistry: each its variants (regolith names), its colour, what it is and where it is found.\nexport const FAMILIES = Object.freeze({\n  leaf:     { chem: 'carbon',  suffix: 'Leaf Biomass',     variants: LEAF_ALL, hex: leafHex,\n              desc: (v) => `Leaves of the ${v} pigment, the colour plant life takes under the light of its star.`,\n              found: 'the canopies of woods and hothouse canopies' },\n  // WOOD IS ITS BARK'S, NOT ITS LEAVES' (the owner's Tree Light and Bark picks, Oct 23: \"decouple the wood and leaf\n  // colors\"; w_tint: 55% of the way to the bark brown, for EVERY wood, so the woods of before change colour too, as the\n  // owner chose). Until then a wood was \"${leaf} Wood\", 72% of the way from its leaves' colour to #5b4330 (Void 25%). Its\n  // variants are still LEAF_ALL's, in their order, and the nine pigments no tree's wood had ever been (BARK_ONLY) come\n  // after every other material (`v23`), so everything that lists the materials lists the rest as it always did.\n  wood:     { chem: 'carbon',  suffix: 'Wood',             variants: LEAF_ALL, v23: BARK_ONLY, hex: (v) => mixHex(pigmentHex(v), BARK_BROWN, BARK_TINT),\n              desc: (v) => `Wood of ${v} bark. A tree's bark takes its colour from the starlight on the face it grows on, not from its leaves: pale and silvery in strong light, brown in ordinary light, grey and near black in dim light, and now and then a vivid one.`,\n              found: 'the trunks, stilts and stalks of woods and hothouse canopies' },\n  fungal:   { chem: 'carbon',  suffix: 'Fungal Biomass',   variants: ['Gleam', 'Halo', 'Tide', 'Gloam', 'Echo'], v4: ['Solis', 'Scorched', 'Spirit'], hex: (v) => PALETTE[v],\n              desc: (v) => `${v} fungal flesh, from gill towers and glowcaps. Fungi need no starlight.`,\n              desc4: (v) => `${v} fungal flesh, from puffballs and the brackets of shelf fungi. Fungi need no starlight.`,\n              found: 'gill towers, and glowcap stands in the dark', found4: 'puffball domes and shelf terraces' },\n  petal:    { chem: 'carbon',  suffix: 'Petal',            variants: ['Farout', 'Starlight', 'Wisp', 'Radiance', 'Nova'], v16: ['Ignition', 'Surge', 'Reach'], hex: (v) => pigmentHex(v),\n              desc: (v) => `${v} petals, from the flowers of bloom carpets.`, found: 'bloom carpets and the flowers of other living ground' },\n  tidal:    { chem: 'carbon',  suffix: 'Tidal Biomass',    variants: LEAF_ALL, hex: (v) => mixHex(leafHex(v), '#e8d9c4', 0.25),\n              desc: (v) => `${v} tissue of the fans, tubes and plates of a tidal garden, coloured by its star.`,\n              found: 'tidal gardens, under liquid water' },\n  glow:     { chem: null,      suffix: 'Glow Biomass',     variants: ['Aura', 'Ether', 'Spirit', 'Flash', 'Radiance'], v4: ['Bloom'], hex: (v) => PALETTE[v], glow: true,\n              desc: (v) => `${v} bioluminescent tissue, which makes its own light and shows at night.`,\n              found: 'the gills of gill towers and the caps of glowcaps, and the tips of silicon and methane life where starlight is dim',\n              found4: 'the moss of glowmoss pillars and the drips of glow slime' },\n  crystal:  { chem: 'mineral', suffix: 'Crystal',          variants: ['Halo', 'Spirit', 'Wisp', 'Glint', 'Lumina'], since: 4, hex: (v) => PALETTE[v],\n              desc: (v) => `${v} crystal, the world's own minerals grown into prisms in its rare crystal fields.`,\n              found: 'crystal fields' },\n  silicate: { chem: 'silicon', suffix: 'Silicate Biomass', variants: ['Lumina', 'Glint', 'Spirit', 'Fathom', 'Radiance', 'Void', 'Cinder', 'Scorched', 'Nova'], v4: ['Echo'], hex: (v) => PALETTE[v],\n              desc: (v) => `${v} silicate tissue: life that grows as crystal on hot rock, coloured by the minerals it grows from.`,\n              found: 'silicon life on hot rocky worlds: Spirit gardens', found4: 'the spires of crystal warrens' },\n  tholin:   { chem: 'methane', suffix: 'Tholin Biomass',   variants: ['Solis', 'Scorched', 'Arid', 'Gloam', 'Corona', 'Cinder'], hex: (v) => PALETTE[v],\n              desc: (v) => `${v} tholin tissue, from life in the cold of a methane world, coloured by the haze it feeds on.`,\n              found: 'methane life at the shores of methane seas: tholin reefs' },\n  // THE ATLAS'S LATER LIFE (Sep 30, version 4 only: since 4), and two things that are not life: stone standing in bits\n  // (pillars and crags) and rime, frost grown out of the air.\n  coral:    { chem: 'carbon',  suffix: 'Coral',            variants: ['Flash', 'Aura', 'Cinder', 'Scorched'], since: 4, hex: (v) => mixHex(PALETTE[v], '#6a5a5a', 0.3),\n              desc: (v) => `${v} coral: the grown frame of a colony of carbon life, raised on land where the air is wet.`,\n              found: 'prism coral and vein coral' },\n  calcite:  { chem: 'carbon',  suffix: 'Calcite',          variants: ['Gleam', 'Echo', 'Corona', 'Halo'], v16: ['Lull'], since: 4, hex: (v) => mixHex(pigmentHex(v), '#b8b0a0', 0.3),\n              desc: (v) => `${v} calcite, the frames creatures leave: arches of bone, vaults of reef stone and fossils.`,\n              found: 'bone arches, vaulted reefs and fossil beds' },\n  kelp:     { chem: 'carbon',  suffix: 'Kelp',             variants: ['Fathom', 'Spirit', 'Wisp'], since: 4, hex: (v) => PALETTE[v],\n              desc: (v) => `${v} kelp: tall fronds that sway like a sea's, grown on land under air thick enough to hold them up.`,\n              found: 'land kelp' },\n  pod:      { chem: 'carbon',  suffix: 'Pod Flesh',        variants: ['Starlight', 'Farout', 'Wisp'], since: 4, hex: (v) => mixHex(PALETTE[v], '#8a4a60', 0.2),\n              desc: (v) => `${v} pod flesh, soft and glossy, from the swollen pods of warm, wet worlds.`,\n              found: 'flesh pods' },\n  slime:    { chem: 'carbon',  suffix: 'Slime Lattice',    variants: ['Void', 'Gloam'], v16: ['Veil', 'Haze'], since: 4, hex: (v) => mixHex(pigmentHex(v), '#1a2a1a', 0.3),\n              desc: (v) => `${v} slime lattice: the black frame a slime colony builds and drips from.`,\n              found: 'glow slime' },\n  stone:    { chem: 'mineral', suffix: 'Stone',            variants: ['Void', 'Gloam', 'Echo', 'Arid', 'Scorched', 'Corona', 'Gleam', 'Drift'], since: 4, hex: (v) => mixHex(PALETTE[v], '#5a5a5a', 0.35),\n              desc: (v) => `${v} stone, the world's rock standing in bits: pillars, crags, buttes, needles, towers and islands in the air.`,\n              found: 'glowmoss pillars, mat crags, banded scarps, needle peaks, karst towers, gem hollows, drift isles and Cor monoliths' },\n  rime:     { chem: 'mineral', suffix: 'Rime',             variants: ['Halo', 'Glint', 'Lumina', 'Drift'], since: 4, hex: (v) => mixHex(PALETTE[v], '#e8f0f8', 0.3),\n              desc: (v) => `${v} rime: water vapour frozen out of the air in dendrites, grown like ferns.`,\n              found: 'frost ferns' },\n  firn:     { chem: 'mineral', suffix: 'Firn',             variants: ['Lumina', 'Gleam', 'Drift'], since: 4, hex: (v) => mixHex(PALETTE[v], '#f4f8fc', 0.4),\n              desc: (v) => `${v} firn: snow packed hard by the wind, in ridges and drifts.`,\n              found: 'firn fields, needle peaks and cryovolcanic plains' },\n  // TEKTITE (the owner, Oct 13: \"rename all instances of obsidian to Tektite\"). The family's key stays 'obsidian' (it is\n  // only ever a key: textures, densities, picks); every name and word a player sees says Tektite, and the catalogue keeps\n  // each material's id and its former name (`aka`, tools/gen-life-catalogue.py), so nothing saved under it is lost.\n  obsidian: { chem: 'mineral', suffix: 'Tektite', formerSuffix: 'Obsidian', variants: ['Void', 'Fathom'], since: 4, hex: (v) => mixHex(PALETTE[v], '#101014', 0.65),\n              desc: (v) => `${v} tektite: natural glass, rock melted and cooled too fast to crystallise, black and glossy (not the smelter's glass).`,\n              found: 'glass shields' },\n  gem:      { chem: 'mineral', suffix: 'Gem',              variants: ['Aura', 'Glint', 'Ether', 'Spirit'], since: 4, hex: (v) => PALETTE[v], glow: true,\n              desc: (v) => `${v} gem, a crystal that lights itself, studding dark rock.`,\n              found: 'gem hollows' },\n  vein:     { chem: 'mineral', suffix: 'Vein',             variants: ['Scorched', 'Verge', 'Aura'], since: 4, hex: (v) => mixHex(PALETTE[v], '#4a4a4a', 0.25),\n              desc: (v) => `${v} vein: a streak of the world's ore where it breaks the surface, rust, green or cyan.`,\n              found: 'ore outcrops' },\n  sulfur:   { chem: 'mineral', suffix: 'Sulfur Crust',     variants: ['Nova', 'Radiance', 'Corona'], since: 4, hex: (v) => mixHex(PALETTE[v], '#c8a020', 0.3),\n              desc: (v) => `${v} sulfur crust, laid down by the vents of hot springs.`,\n              found: 'sulfur springs' },\n  // WHAT OTHERS LEFT (wave 4): the plate of ships and outposts, the lights still burning on them, and the Cor in a\n  // monolith's seam. Not grown, and not the world's: their own family ('relic').\n  alloy:    { chem: 'relic',   suffix: 'Alloy',            variants: ['Echo', 'Scorched', 'Gleam'], since: 4, hex: (v) => mixHex(PALETTE[v], '#6a6e74', 0.3),\n              desc: (v) => `${v} alloy: the plate and frame of a ship or an outpost, left by those who came before.`,\n              found: 'wreck fields, prospector relics, signal arrays and the methane oasis\\'s shelter' },\n  beacon:   { chem: 'relic',   suffix: 'Beacon Light',     variants: ['Cinder', 'Radiance', 'Farout'], since: 4, hex: (v) => PALETTE[v], glow: true,\n              desc: (v) => `${v} beacon light, still lit on something left behind.`,\n              found: 'wreck fields, prospector relics, signal arrays and the methane oasis\\'s shelter' },\n  cor:      { chem: 'relic',   suffix: 'Cor Seam',         variants: ['Aura', 'Glint'], since: 4, hex: (v) => mixHex(PALETTE[v], '#fff8e7', 0.3), glow: true,\n              desc: (v) => `${v} Cor seam: a vein of Cor's light up a monolith's face, faintly humming.`,\n              found: 'Cor monoliths' },\n  // BIOME WAVE 6 (world version 12, Oct 11): the banded rock of butte country and the clay of mudpot cones. Appended, so\n  // every older material keeps its place in the list.\n  sandstone: { chem: 'mineral', suffix: 'Sandstone',       variants: ['Cinder', 'Corona', 'Scorched', 'Solis', 'Arid'], since: 12, hex: (v) => mixHex(PALETTE[v], '#b07a52', 0.35),\n              desc: (v) => `${v} sandstone, laid down in bands and cut by the wind into steep-sided mesas and buttes.`,\n              found: 'butte country' },\n  clay:     { chem: 'mineral', suffix: 'Clay',             variants: ['Arid', 'Gloam', 'Echo'], since: 12, hex: (v) => mixHex(PALETTE[v], '#7d6e5e', 0.4),\n              desc: (v) => `${v} clay, the mud a hot spring throws up, dried into low cones round its vent.`,\n              found: 'mudpot fields' },\n});\n// REAL KUBES STANDING AS BITS (version 12): a penitente is Water Ice, a salt spire Halite, a basalt column the Slag its\n// ground is, a tar seep Carbon. They are the catalogue's own kubes, not life's materials: no entry of their own (they are\n// in kubes.json already, so ORGANIC_MATERIALS leaves them out), each mined as that kube's bit (\"Halite Bit\", life-seats.mjs)\n// and drawn in that kube's colour (kubeBitHex; tests/biomes-v12.test.mjs holds these to kubes.json).\nexport const KUBE_BITS = Object.freeze({ 'Water Ice': '#E0F7FA', Halite: '#F0F8FF', Slag: '#4F4A46', Carbon: '#333333' });\nexport const kubeBitHex = (name) => KUBE_BITS[name] || null;\n\n// EVERY ORGANIC MATERIAL, for the renderer and for Kubipedia: { name, family, variant, chem, hex, glow, desc, foundIn,\n// since }. `since` is the generator version that first grows it (a family's own, or 4 for a family's `v4` variants), so\n// Kubipedia lists it only once that version is the newest; the renderer knows every one.\n// VERSION 16'S SIX (LIFE_PIGMENTS_SINCE) come after every other material, so everything that lists the materials lists\n// the rest as it always did; and after them VERSION 23'S NINE BARKS (BARK_SINCE, the wood family's `v23`).\n// A wood is found under any star now (its bark follows its face's light, BARK RULE below), so only leaves and tidal\n// growths still say whose stars grow them.\nexport const ORGANIC_MATERIALS = Object.freeze([...Object.entries(FAMILIES).flatMap(([fam, F]) => [...F.variants, ...(F.v4 || [])].map((v) => {\n  const late = !F.variants.includes(v), classes = (fam === 'leaf' || fam === 'tidal') && CLASS_OF[v] ? [...CLASS_OF[v]].join(', ') : null;\n  return Object.freeze({ name: `${v} ${F.suffix}`, family: fam, variant: v, chem: F.chem, hex: F.hex(v), glow: !!F.glow,\n    desc: (late && F.desc4 ? F.desc4 : F.desc)(v), foundIn: (late ? F.found4 : F.found) + (classes ? `, under ${classes} stars` : ''),\n    since: late ? 4 : F.since || 0, ...(F.formerSuffix ? { aka: `${v} ${F.formerSuffix}` } : {}) });   // a renamed family's former name (tektite)\n})), ...Object.entries(FAMILIES).flatMap(([fam, F]) => (F.v16 || []).map((v) => Object.freeze({ name: `${v} ${F.suffix}`, family: fam, variant: v, chem: F.chem,\n  hex: F.hex(v), glow: !!F.glow, desc: F.desc(v), foundIn: F.found, since: LIFE_PIGMENTS_SINCE }))),\n  ...Object.entries(FAMILIES).flatMap(([fam, F]) => (F.v23 || []).map((v) => Object.freeze({ name: `${v} ${F.suffix}`, family: fam, variant: v, chem: F.chem,\n  hex: F.hex(v), glow: !!F.glow, desc: F.desc(v), foundIn: F.found, since: BARK_SINCE })))]);\nconst MAT_INDEX = new Map(ORGANIC_MATERIALS.map((m, i) => [m.name, i]));\nexport const organicMaterial = (name) => (MAT_INDEX.has(name) ? ORGANIC_MATERIALS[MAT_INDEX.get(name)] : null);\n\n// ---- A SEEDED STREAM and a hash, integer arithmetic only ----\nfunction rngOf(str) {\n  let h = 2166136261 >>> 0;\n  for (let i = 0; i < str.length; i++) h = Math.imul(h ^ str.charCodeAt(i), 16777619);\n  let a = h >>> 0 || 1;\n  return () => { a ^= a << 13; a >>>= 0; a ^= a >>> 17; a ^= a << 5; a >>>= 0; return a / 4294967296; };\n}\nexport function hash4(a, b, c, s) {\n  let h = Math.imul(a | 0, 0x27d4eb2d) ^ Math.imul(b | 0, 0x165667b1) ^ Math.imul(c | 0, 0x3c6ef372) ^ (s | 0);\n  h = Math.imul(h ^ (h >>> 15), 0x85ebca6b); h = Math.imul(h ^ (h >>> 13), 0xc2b2ae35); h ^= h >>> 16;\n  return (h >>> 0) / 4294967296;\n}\n// sin and cos by exact arithmetic (a short series is plenty for a crown's shape, and is the same on every engine).\nfunction sinA(a) {\n  const t = a - 6.283185307179586 * Math.floor(a / 6.283185307179586 + 0.5), t2 = t * t;\n  return t * (1 - t2 / 6 * (1 - t2 / 20 * (1 - t2 / 42 * (1 - t2 / 72 * (1 - t2 / 110)))));\n}\nconst cosA = (a) => sinA(a + 1.5707963267948966);\n\n// ---- THE GROWERS. Each draws on `r` (its own stream) and grows to size `k` (1 on the biggest worlds, less on small\n// ones), and lists its bits in half-cells in its own frame: y up from 0 (the half-cell just over the ground), x and z\n// across it, as [x, y, z, part, …]. A part is what the bit is (the placement makes it a material). ----\nexport const PART = Object.freeze({ WOOD: 0, LEAF: 1, PETAL: 2, GLOW: 3, CAP: 4, STALK: 5, TIDAL: 6, FROST: 7, BODY: 8, ACCENT: 9, MELT: 10 });\nconst P = PART;\nconst n0 = (x) => (x < 1 ? 1 : x);\nfunction line(o, x0, y0, z0, x1, y1, z1, p) {\n  const n = Math.max(Math.abs(x1 - x0), Math.abs(y1 - y0), Math.abs(z1 - z0)) || 1;\n  for (let i = 0; i <= n; i++) o.push(Math.round(x0 + (x1 - x0) * i / n), Math.round(y0 + (y1 - y0) * i / n), Math.round(z0 + (z1 - z0) * i / n), p);\n}\nfunction blob(o, cx, cy, cz, rx, ry, rz, p, r, holes, p2, share2) {\n  const X = Math.ceil(rx), Y = Math.ceil(ry), Z = Math.ceil(rz);\n  for (let x = -X; x <= X; x++) for (let y = -Y; y <= Y; y++) for (let z = -Z; z <= Z; z++) {\n    const q = (x * x) / (rx * rx) + (y * y) / (ry * ry) + (z * z) / (rz * rz);\n    if (q > 1 || (holes && q > 0.45 && r() < holes)) continue;\n    o.push(cx + x, cy + y, cz + z, p2 != null && r() < share2 ? p2 : p);\n  }\n}\nfunction disc(o, cx, cy, cz, rad, p, r, holes) {\n  const R = Math.ceil(rad);\n  for (let x = -R; x <= R; x++) for (let z = -R; z <= R; z++) if (x * x + z * z <= rad * rad && !(holes && r() < holes)) o.push(cx + x, cy, cz + z, p);\n}\nfunction ring(o, cx, cy, cz, rad, p) {\n  const R = Math.ceil(rad);\n  for (let x = -R; x <= R; x++) for (let z = -R; z <= R; z++) { const q = x * x + z * z; if (q <= rad * rad && q > (rad - 1) * (rad - 1)) o.push(cx + x, cy, cz + z, p); }\n}\nconst DIRS4 = [[1, 0], [-1, 0], [0, 1], [0, -1]];\n\nconst GROW = {\n  // WOODS: a canopy that reads its star; needle trees on cold ground, flat crowns on hot dry ground, stiltroots at a shore.\n  // SMALL, by the owner's word (Sep 30, on Kubipedia's woods: \"make all trees smaller. Like 4 bits tall trunk\"): every\n  // tree stands on a trunk FOUR BITS tall (two kubes) under a crown three bits across or so, three to four kubes in all\n  // on the biggest worlds. The first cut stood six to thirteen kubes with crowns up to six across; the second (Sep 29,\n  // \"short and slim\") four to six and a half. A trunk keeps its four bits on a small world; its crown shrinks with it.\n  crownTree(r, k) { const o = [], c = n0((1.2 + 0.6 * r()) * k);\n    line(o, 0, 0, 0, 0, 3, 0, P.WOOD); blob(o, 0, 4 + Math.floor(c), 0, c, c + 0.2, c, P.LEAF, r, 0.18); return o; },\n  needleTree(r, k) { const o = [], H = 6 + (r() < 0.5 ? 0 : 1), base = n0((1.3 + 0.4 * r()) * k);   // four bits bare, then the cone\n    line(o, 0, 0, 0, 0, H, 0, P.WOOD);\n    for (let y = 4; y <= H + 1; y++) disc(o, 0, y, 0, base * (H + 2 - y) / (H - 2), y % 2 === 0 && r() < 0.4 ? P.FROST : P.LEAF, r, 0.1);\n    return o; },\n  flatCrown(r, k) { const o = [], lean = r() < 0.5 ? 1 : -1, c = n0((1.5 + 0.5 * r()) * k);\n    line(o, 0, 0, 0, lean, 3, 0, P.WOOD); line(o, lean, 3, 0, lean + 1, 4, 1, P.WOOD); line(o, lean, 3, 0, lean - 1, 4, -1, P.WOOD);\n    disc(o, lean, 5, 0, c, P.LEAF, r, 0.12); return o; },\n  stiltroot(r, k) { const o = [], c = n0((1.1 + 0.5 * r()) * k);\n    for (const [dx, dz] of DIRS4) line(o, dx * 2, 0, dz * 2, 0, 2, 0, P.WOOD);\n    line(o, 0, 2, 0, 0, 3, 0, P.WOOD); blob(o, 0, 4 + Math.round(c * 0.8), 0, c + 0.3, c * 0.8, c + 0.3, P.LEAF, r, 0.15); return o; },\n  // HOTHOUSE CANOPY: still the tallest of the trees, on the same four bits of bare trunk: a crown in two layers, vines\n  // hanging from each; hollow segmented reedspires.\n  hothouseTree(r, k) { const o = [], c = n0((1.3 + 0.5 * r()) * k);\n    line(o, 0, 0, 0, 0, 6, 0, P.WOOD);\n    for (let layer = 0; layer < 2; layer++) { const y = 7 - layer * 3, rad = c * (0.75 + 0.3 * layer);\n      disc(o, 0, y, 0, rad + 0.5, P.LEAF, r, 0.15);\n      const vines = 1 + Math.floor(r() * 2);\n      for (let i = 0; i < vines; i++) { const a = r() * 6.2832, x = Math.round(rad * cosA(a)), z = Math.round(rad * sinA(a)), L = 1 + Math.floor(r() * 2); line(o, x, y - 1, z, x, y - L, z, P.LEAF); } }\n    return o; },\n  reedspire(r, k) { const o = [], n = 3 + Math.floor(r() * 4);\n    for (let i = 0; i < n; i++) { const x = Math.floor(r() * 5) - 2, z = Math.floor(r() * 5) - 2, H = Math.round((2 + 2 * r()) * k) + 2;\n      for (let y = 0; y <= H; y++) o.push(x, y, z, y % 4 === 3 ? P.LEAF : P.WOOD);\n      o.push(x + 1, H, z, P.LEAF, x - 1, H + 1, z, P.LEAF, x, H + 1, z + 1, P.LEAF); }\n    return o; },\n  // GILL TOWERS: short pale ribbed stalks, four or five bits, under one or two gilled plates whose gills glow faintly;\n  // glowcap stands, short stems crowned in glowing teal.\n  gillTower(r, k) { const o = [], H = 4 + (r() < 0.5 ? 0 : 1), plates = 1 + (r() < 0.5 ? 0 : 1), c = n0((1.6 + 0.6 * r()) * k);\n    for (let y = 0; y <= H; y++) { o.push(0, y, 0, P.STALK); if (y % 3 === 0) o.push(1, y, 0, P.STALK, -1, y, 0, P.STALK); }   // the ribs\n    for (let i = 0; i < plates; i++) { const y = H - i * 2, rad = c * (1 - 0.25 * i);\n      disc(o, 0, y + 1, 0, rad + 0.5, P.CAP, r, 0); ring(o, 0, y, 0, rad, P.GLOW); }                                  // a plate, its gills under it\n    return o; },\n  glowcapStand(r, k) { const o = [], n = 3 + Math.floor(r() * 4);\n    for (let i = 0; i < n; i++) { const x = Math.floor(r() * 5) - 2, z = Math.floor(r() * 5) - 2, H = Math.round((1 + 2 * r()) * k) + 1;\n      line(o, x, 0, z, x, H, z, P.STALK); o.push(x, H + 1, z, P.GLOW, x + 1, H + 1, z, P.GLOW, x, H + 1, z + 1, P.GLOW); }\n    return o; },\n  // NIGHTSIDE: siphon tubes (upright tube organisms, their mouths open and glowing) and resin lattices. Grown nowhere\n  // since Sep 30 (the owner: nightside glow keeps only its flora); kept so a later biome can take them up.\n  siphonTube(r, k) { const o = [], n = 2 + Math.floor(r() * 3);\n    for (let i = 0; i < n; i++) { const x = Math.floor(r() * 5) - 2, z = Math.floor(r() * 5) - 2, H = Math.round((3 + 4 * r()) * k) + 2;\n      for (let y = 0; y <= H; y++) for (const [dx, dz] of [[0, 0], [1, 0], [0, 1], [1, 1]]) o.push(x + dx, y, z + dz, y >= H - 1 ? P.GLOW : P.BODY); }\n    return o; },\n  resinLattice(r, k) { const o = [], S = Math.max(2, Math.round((3 + 2 * r()) * k));\n    for (let y = 0; y <= S * 2; y++) for (let x = -S; x <= S; x++) { const on = ((x + y) & 1) === 0 && ((x + 2 * y) % 3 !== 0); if (on) o.push(x, y, 0, (x * 7 + y * 3) % 5 === 0 ? P.GLOW : P.BODY); }\n    return o; },\n  // TIDAL GARDENS: fans, tubes and plates, under the water, in their star's colours.\n  tideFan(r, k) { const o = [], R = n0((2 + r()) * k), along = r() < 0.5;\n    o.push(0, 0, 0, P.TIDAL);\n    for (let a = -Math.ceil(R); a <= Math.ceil(R); a++) for (let y = 1; y <= Math.ceil(R) + 1; y++)\n      if (a * a + (y - 1) * (y - 1) <= R * R && r() > 0.3) o.push(along ? a : 0, y, along ? 0 : a, P.TIDAL);\n    return o; },\n  tideTube(r, k) { const o = [], n = 2 + Math.floor(r() * 4);\n    for (let i = 0; i < n; i++) { const x = Math.floor(r() * 4) - 2, z = Math.floor(r() * 4) - 2, H = Math.round((1.5 + 1.5 * r()) * k) + 1; line(o, x, 0, z, x, H, z, P.TIDAL); o.push(x, H + 1, z, P.ACCENT); }\n    return o; },\n  tidePlate(r, k) { const o = [], H = Math.round((2 + 2 * r()) * k) + 1;\n    line(o, 0, 0, 0, 0, H, 0, P.TIDAL);\n    for (let y = 1; y <= H; y += 2) disc(o, (y & 2) ? 1 : -1, y, 0, n0((1.5 + r()) * k), P.TIDAL, r, 0.15);\n    return o; },\n  // SILICON, Spirit gardens: life that grows as crystal.\n  spiritColony(r, k) { const o = [], n = 5 + Math.floor(r() * 5);\n    for (let i = 0; i < n; i++) { const a = r() * 6.2832, lean = r() * 0.8, L = Math.round((1.5 + 2.5 * r()) * k) + 1;\n      const ex = Math.round(L * lean * cosA(a)), ez = Math.round(L * lean * sinA(a));\n      line(o, 0, 0, 0, ex, L, ez, P.BODY); o.push(ex, L + 1, ez, P.ACCENT); }\n    return o; },\n  quartzDendrite(r, k) { const o = [], H = 4 + Math.floor(2 * r());\n    line(o, 0, 0, 0, 0, H, 0, P.BODY);\n    for (let y = 2; y < H; y += 2) { const L = Math.max(1, Math.round((H - y) * 0.45)), [dx, dz] = DIRS4[(y / 2 | 0) % 4];\n      line(o, 0, y, 0, dx * L, y + L, dz * L, P.BODY); o.push(dx * L, y + L + 1, dz * L, P.ACCENT); }\n    return o; },\n  silicateRosette(r, k) { const o = [], n = 4 + Math.floor(r() * 3), R = n0((2.5 + r()) * k);\n    o.push(0, 0, 0, P.ACCENT);\n    for (let i = 0; i < n; i++) { const a = i * 6.2832 / n, cx = Math.round(R * cosA(a)), cz = Math.round(R * sinA(a));\n      line(o, 0, 0, 0, cx, Math.round(R * 0.8), cz, P.BODY); o.push(cx, Math.round(R * 0.8) + 1, cz, P.BODY); }\n    return o; },\n  glassVeinwood(r, k) { const o = [], H = 4 + Math.floor(2 * r());\n    for (let y = 0; y <= H; y++) o.push(0, y, 0, y % 3 === 1 ? P.MELT : P.BODY);\n    const n = 3 + Math.floor(r() * 3);\n    for (let i = 0; i < n; i++) { const [dx, dz] = DIRS4[Math.floor(r() * 4)], y = 1 + Math.floor(r() * H), L = 1 + Math.floor(r() * 3); line(o, 0, y, 0, dx * L, y + L, dz * L, P.BODY); }\n    return o; },\n  latticeColony(r, k) { const o = [], S = Math.max(2, Math.round((2 + r()) * k));\n    const frame = (x0, y0, z0, s) => { for (let a = 0; a <= s; a++) for (const [x, y, z] of [[a, 0, 0], [a, s, 0], [a, 0, s], [a, s, s], [0, a, 0], [s, a, 0], [0, a, s], [s, a, s], [0, 0, a], [s, 0, a], [0, s, a], [s, s, a]]) o.push(x0 + x, y0 + y, z0 + z, P.BODY); };\n    frame(-(S >> 1), 0, -(S >> 1), S); const t = Math.max(1, S - 1); frame(-(t >> 1) + 1, S, -(t >> 1), t);\n    o.push(0, S + t + 1, 0, P.ACCENT); return o; },\n  sulfurBloom(r, k) { const o = [], R = n0((2 + 0.8 * r()) * k);\n    const h = Math.ceil(R * 0.6);                           // a dome on the ground, not half in it\n    blob(o, 0, h, 0, R, R * 0.6, R, P.BODY, r, 0.2);\n    for (let i = 0; i < 4; i++) { const [dx, dz] = DIRS4[i]; o.push(dx * Math.round(R * 0.7), h + Math.round(R * 0.6) + 1, dz * Math.round(R * 0.7), P.ACCENT); }\n    return o; },\n  rustSpire(r, k) { const o = [], H = 5 + Math.floor(3 * r());\n    for (let y = 0; y <= H; y++) { const w = y < H * 0.4 ? 1 : 0; for (let x = 0; x <= w; x++) for (let z = 0; z <= w; z++) o.push(x, y, z, y % 4 === 0 ? P.ACCENT : P.BODY); }\n    return o; },\n  // METHANE, tholin reefs: Titan-cold life.\n  tholinStalks(r, k) { const o = [], n = 3 + Math.floor(r() * 4);\n    for (let i = 0; i < n; i++) { const x = Math.floor(r() * 5) - 2, z = Math.floor(r() * 5) - 2, H = Math.round((2 + 2 * r()) * k) + 2; line(o, x, 0, z, x, H, z, P.BODY); o.push(x, H + 1, z, P.ACCENT); }\n    return o; },\n  cryoFern(r, k) { const o = [], n = 4 + Math.floor(r() * 3), L = Math.round((2 + 1.5 * r()) * k) + 2;\n    for (let i = 0; i < n; i++) { const a = i * 6.2832 / n, ex = Math.round(L * cosA(a)), ez = Math.round(L * sinA(a));\n      line(o, 0, 0, 0, Math.round(ex * 0.5), L, Math.round(ez * 0.5), P.BODY); line(o, Math.round(ex * 0.5), L, Math.round(ez * 0.5), ex, L - 2, ez, P.ACCENT); }\n    return o; },\n  discMat(r, k) { const o = []; disc(o, 0, 0, 0, n0((2.5 + r()) * k), P.BODY, r, 0.1); disc(o, 0, 0, 0, 1, P.ACCENT, r, 0); return o; },\n  hollowTower(r, k) { const o = [], H = Math.round((2 + 2 * r()) * k) + 2;\n    for (let y = 0; y <= H; y++) ring(o, 0, y, 0, 2, y === H ? P.ACCENT : P.BODY);\n    return o; },\n  tholinThicket(r, k) { const o = [], c = n0((1.2 + 0.6 * r()) * k);   // a tree as the woods' are: four bits of trunk\n    line(o, 0, 0, 0, 0, 3, 0, P.WOOD); blob(o, 0, 4 + Math.floor(c * 0.8), 0, c + 0.3, c * 0.8, c + 0.3, P.BODY, r, 0.3, P.ACCENT, 0.25); return o; },\n  bubbleDome(r, k) { const o = [], R = n0((1.5 + 0.8 * r()) * k) + 0.5, C = Math.ceil(R);\n    for (let x = -C; x <= C; x++) for (let y = 0; y <= C; y++) for (let z = -C; z <= C; z++) { const q = x * x + y * y + z * z; if (q <= R * R && q > (R - 1.1) * (R - 1.1)) o.push(x, y, z, r() < 0.15 ? P.ACCENT : P.BODY); }\n    return o; },\n  fringeGrowth(r, k) { const o = [], R = Math.max(2, Math.round((2 + r()) * k));\n    for (let x = -R; x <= R; x++) for (let z = -R; z <= R; z++) { const q = x * x + z * z; if (q <= R * R && q >= (R - 1) * (R - 1) && r() < 0.8) { o.push(x, 0, z, P.BODY); if (r() < 0.5) o.push(x, 1, z, P.ACCENT); } }\n    return o; },\n  // CRYSTAL FIELDS (the owner, Sep 30: \"make crystals in crystal fields out of bits\"): the world's own minerals grown\n  // into prisms, in clusters, lone spires and low scatters of shards, each tipped paler. Not life: they grow on any world\n  // a crystal field finds, of any chemistry, and only where the generator asks for them (version 4, organicsOf).\n  crystalCluster(r, k) { const o = [], n = 3 + Math.floor(r() * 3);\n    o.push(0, 0, 0, P.BODY, 1, 0, 0, P.BODY, 0, 0, 1, P.BODY, 1, 0, 1, P.BODY);\n    for (let i = 0; i < n; i++) { const a = i * 6.2832 / n + r() * 0.8, lean = 0.25 + 0.35 * r(), L = Math.round((2 + 4 * r()) * Math.max(0.7, k)) + 1;\n      const ex = Math.round(L * lean * cosA(a)), ez = Math.round(L * lean * sinA(a));\n      line(o, 0, 0, 0, ex, L, ez, P.BODY); o.push(ex, L + 1, ez, P.ACCENT); }\n    return o; },\n  crystalSpire(r, k) { const o = [], H = 5 + Math.floor(3 * r());\n    for (let y = 0; y <= H; y++) { const w = y < H - 1 ? 1 : 0; for (let x = 0; x <= w; x++) for (let z = 0; z <= w; z++) o.push(x, y, z, y >= H - 1 ? P.ACCENT : P.BODY); }\n    for (let i = 0; i < 2; i++) { const [dx, dz] = DIRS4[Math.floor(r() * 4)], L = 2 + Math.floor(r() * 2); line(o, dx * 2, 0, dz * 2, dx * (2 + L), L, dz * (2 + L), P.BODY); }\n    return o; },\n  crystalShards(r, k) { const o = [], n = 4 + Math.floor(r() * 4);\n    for (let i = 0; i < n; i++) { const x = Math.floor(r() * 7) - 3, z = Math.floor(r() * 7) - 3, H = 1 + Math.floor(r() * 3);\n      for (let y = 0; y < H; y++) o.push(x, y, z, y === H - 1 ? P.ACCENT : P.BODY); }\n    return o; },  // THE ATLAS'S LATER GROWERS (Sep 30, version 4 only), each within nine bits: puffballs on tangled roots, shelf fungi\n  // in terraces, dark stone pillars furred with glowing moss, coral grown on land, bone arches hung with roots, land\n  // kelp, reef vaults at a shore, flesh pods, slime lattices, broken crags under mats of life, ferns of rime and the\n  // crystal warrens of silicon life.\n  puffball(r, k) { const o = [], R = n0((1.7 + 0.9 * r()) * k) + 0.4, n = Math.floor(r() * 3);\n    for (const [dx, dz] of DIRS4) { const L = Math.ceil(R) + 1 + Math.floor(r() * 2), w = Math.floor(r() * 3) - 1; line(o, 0, 0, 0, dx * L + (dz ? w : 0), 0, dz * L + (dx ? w : 0), P.STALK); }   // the tangled roots\n    blob(o, 0, Math.ceil(R), 0, R, R * 0.9, R, P.BODY, r, 0, P.ACCENT, 0.1);\n    for (let i = 0; i < n; i++) { const [dx, dz] = DIRS4[Math.floor(r() * 4)], s = 0.8 + 0.6 * r(), d = Math.ceil(R) + 2, w = Math.floor(r() * 3) - 1;   // …and the small ones by it\n      blob(o, dx * d + (dz ? w : 0), Math.ceil(s), dz * d + (dx ? w : 0), s, s, s, P.BODY, r, 0, P.ACCENT, 0.1); }\n    return o; },\n  shelfFungus(r, k) { const o = [], H = 5 + Math.floor(r() * 3), n = 3 + Math.floor(r() * 2);   // a stump five to seven bits tall, two across\n    for (let y = 0; y < H; y++) for (let x = 0; x <= 1; x++) for (let z = 0; z <= 1; z++) o.push(x, y, z, P.STALK);\n    for (let i = 0; i < n; i++) {                            // brackets up it in terraces, the widest at its foot\n      const y = 1 + Math.floor((H - 2) * i / n), [dx, dz] = DIRS4[(i + Math.floor(r() * 2)) % 4], R = n0((2.6 - 0.35 * i + 0.5 * r()) * k) + 0.4;\n      for (let a = -3; a <= 4; a++) for (let b = 1; b <= 3; b++) {\n        const c = a - 0.5;\n        if (c * c + (b - 0.5) * (b - 0.5) > R * R) continue;\n        const x = dx ? (dx > 0 ? 1 + b : -b) : a, z = dz ? (dz > 0 ? 1 + b : -b) : a, q = r();\n        o.push(x, y, z, P.BODY, x, y + 1, z, q < 0.45 ? P.BODY : q < 0.75 ? P.ACCENT : P.CAP);   // its top shining like oil on water\n      }\n    }\n    return o; },\n  glowmossPillar(r, k) { const o = [], H = 6 + Math.floor(r() * 3);   // six to eight bits of dark stone, two across\n    for (let y = 0; y < H; y++) for (let x = 0; x <= 1; x++) for (let z = 0; z <= 1; z++) o.push(x, y, z, P.BODY);\n    for (let y = 1; y < H; y++) for (const [x, z] of [[-1, 0], [-1, 1], [2, 0], [2, 1], [0, -1], [1, -1], [0, 2], [1, 2]]) if (r() < 0.12 + 0.55 * y / H) o.push(x, y, z, P.GLOW);   // furred with moss, thickest high up\n    for (let x = 0; x <= 1; x++) for (let z = 0; z <= 1; z++) if (r() < 0.75) o.push(x, H, z, P.GLOW);\n    if (r() < 0.6) { const [dx, dz] = DIRS4[Math.floor(r() * 4)]; o.push(dx * 3, 0, dz * 3, P.BODY); }   // a fallen piece at its foot\n    return o; },\n  prismCoral(r, k) { const o = [], n = 5 + Math.floor(r() * 4);\n    for (let i = 0; i < n; i++) { const x = Math.floor(r() * 5) - 2, z = Math.floor(r() * 5) - 2, H = Math.round((2 + 5 * r()) * Math.max(0.6, k)) + 1, p = (i & 1) ? P.ACCENT : P.BODY;\n      for (let y = 0; y < H; y++) o.push(x, y, z, y === H - 1 ? P.BODY + P.ACCENT - p : p); }   // magenta spires tipped cyan, cyan tipped magenta\n    return o; },\n  boneArch(r, k) { const o = [], along = r() < 0.5, n = 2 + (r() < 0.5 ? 0 : 1);\n    const seg = (a0, y0, a1, y1, b, p) => (along ? line(o, a0, y0, b, a1, y1, b, p) : line(o, b, y0, a0, b, y1, a1, p));\n    for (let j = 0; j < n; j++) {                            // a rib cage: two or three arches in a row, each smaller\n      const S = 4 - j + (r() < 0.5 ? 0 : 1), Hh = 7 - j - (r() < 0.4 ? 1 : 0), b = 3 * j - 3;\n      let px = -S, py = 0;\n      for (let i = 1; i <= 12; i++) { const x = Math.round(-S * cosA(3.14159265 * i / 12)), y = Math.round(Hh * sinA(3.14159265 * i / 12)); seg(px, py, x, y, b, P.BODY); px = x; py = y; }\n      for (let a = 2 - S; a <= S - 2; a++) if (r() < 0.35) {   // dark roots hanging from it\n        const top = Math.round(Hh * Math.sqrt(1 - (a * a) / (S * S))), L = 1 + Math.floor(r() * 3);\n        for (let d = 1; d <= L && top - d > 0; d++) seg(a, top - d, a, top - d, b, P.WOOD);\n      }\n    }\n    return o; },\n  landKelp(r, k) { const o = [], n = 2 + Math.floor(r() * 3);\n    for (let i = 0; i < n; i++) {\n      const x = Math.floor(r() * 3) - 1, z = Math.floor(r() * 3) - 1, H = 5 + Math.floor(r() * 3), ph = r() * 6.2832, side = r() < 0.5 ? 1 : -1;\n      for (let y = 0; y < H; y++) {\n        const sx = x + Math.round(0.9 * sinA(ph + y * 0.8));\n        o.push(sx, y, z, P.STALK);\n        if (y >= 2 && ((y + i) & 1)) { const d = ((y >> 1) & 1) ? side : -side; o.push(sx + d, y, z, P.BODY); if (r() < 0.5) o.push(sx + d, y, z + d, P.BODY); }   // its blades, on alternate sides\n      }\n      o.push(x + Math.round(0.9 * sinA(ph + H * 0.8)), H, z, P.ACCENT);                  // a float at its tip\n    }\n    return o; },\n  veinCoral(r, k) { const o = [0, 0, 0, P.BODY], n = 3 + Math.floor(r() * 3);\n    const walk = (x, z, a, L) => { for (let s = 0; s < L; s++) { a += (r() - 0.5) * 0.9; x += cosA(a); z += sinA(a); const X = Math.round(x), Z = Math.round(z); o.push(X, 0, Z, P.BODY); if (r() < 0.2) o.push(X, 1, Z, P.BODY); } return [x, z, a]; };\n    for (let i = 0; i < n; i++) {                            // veins spreading flat over the stone, now and then a knot\n      const [x, z, a] = walk(0, 0, i * 6.2832 / n + r() * 0.5, Math.round((3 + 4 * r()) * Math.max(0.6, k)));\n      o.push(Math.round(x), 1, Math.round(z), P.ACCENT);\n      if (r() < 0.6) walk(x * 0.5, z * 0.5, a + (r() < 0.5 ? 0.9 : -0.9), 2 + Math.floor(r() * 3));   // a branch from its middle\n    }\n    return o; },\n  reefVault(r, k) { const o = [], H = 5 + Math.floor(r() * 4), [dx, dz] = DIRS4[Math.floor(r() * 4)], S = 2 + Math.floor(r() * 2), A = 3 + Math.floor(r() * 2);\n    for (let y = 0; y < H; y++) { const w = y < H - 2 ? 1 : 0; for (let x = 0; x <= w; x++) for (let z = 0; z <= w; z++) o.push(x, y, z, y === H - 1 ? P.ACCENT : P.BODY); }   // a spire of reef stone\n    const x0 = dx > 0 ? 2 : dx < 0 ? -1 : 0, z0 = dz > 0 ? 2 : dz < 0 ? -1 : 0;   // …and an arch from its foot, out and back to the ground\n    let px = x0, pz = z0, py = 0;\n    for (let i = 1; i <= 2 * S; i++) { const f = (i - S) / S, x = x0 + dx * i, z = z0 + dz * i, y = Math.round(A * Math.sqrt(1 - f * f)); line(o, px, py, pz, x, y, z, P.BODY); px = x; pz = z; py = y; }\n    return o; },\n  fleshPod(r, k) { const o = [], n = 1 + Math.floor(r() * 3);\n    for (let i = 0; i < n; i++) {\n      const R = n0((1.3 + 1.1 * r()) * k) + 0.4, cx = i ? (r() < 0.5 ? -1 : 1) * (3 + Math.floor(r() * 2)) : 0, cz = i ? Math.floor(r() * 5) - 2 : 0, cy = Math.ceil(R), C = Math.ceil(R) + 1;\n      blob(o, cx, cy, cz, R, R, R, P.BODY, r, 0);\n      for (const [dx, dz] of DIRS4) if (r() < 0.6) line(o, cx, cy + Math.floor(R), cz, cx + dx * C, 0, cz + dz * C, P.ACCENT);   // tendrils wound over it to the ground\n    }\n    return o; },\n  slimeLattice(r, k) { const o = [], S = Math.max(2, Math.round((2 + r()) * k)) + 1, T = S + 1 + Math.floor(r() * 2), h = S >> 1;\n    for (let y = 0; y <= T; y++) for (const [x, z] of [[0, 0], [S, 0], [0, S], [S, S]]) o.push(x - h, y, z - h, P.BODY);   // a black lattice: four posts…\n    for (const y of [T >> 1, T]) for (let a = 1; a < S; a++) for (const [x, z] of [[a, 0], [a, S], [0, a], [S, a]]) {       // …two rings of bars…\n      o.push(x - h, y, z - h, P.BODY);\n      if (r() < 0.3) { const L = 1 + Math.floor(r() * 2); for (let d = 1; d <= L && y - d > 0; d++) o.push(x - h, y - d, z - h, P.GLOW); }   // …dripping slime\n    }\n    for (let i = 0; i < 3; i++) o.push(1 + Math.floor(r() * (S - 1)) - h, 0, 1 + Math.floor(r() * (S - 1)) - h, P.GLOW);   // pools of it under the lattice\n    return o; },\n  matCrag(r, k) { const o = [], cols = [], at = new Map(), n = 2 + Math.floor(r() * 3);\n    for (let i = 0; i < n; i++) {                            // broken blocks, side by side, of their own heights\n      const w = 2 + Math.floor(r() * 3), d = 2 + Math.floor(r() * 3), h = Math.round((2 + 4 * r()) * Math.max(0.6, k)), x0 = Math.floor(r() * 5) - 3, z0 = Math.floor(r() * 5) - 3;\n      for (let x = x0; x < x0 + w; x++) for (let z = z0; z < z0 + d; z++) { const key = x * 64 + z; if (!at.has(key)) { at.set(key, cols.length); cols.push([x, z, h]); } else if (cols[at.get(key)][2] < h) cols[at.get(key)][2] = h; }\n    }\n    for (const [x, z, h] of cols) {\n      for (let y = 0; y < h; y++) o.push(x, y, z, P.BODY);\n      if (r() < 0.5) o.push(x, h, z, P.LEAF);                 // mats of life over the tops, in its star's colour…\n      if (h > 2 && r() < 0.2) o.push(x, h - 1, z, P.LEAF);    // …and down the sides\n    }\n    return o; },\n  frostFern(r, k) { const o = [], n = 2 + Math.floor(r() * 3);\n    for (let i = 0; i < n; i++) {\n      const a = i * 6.2832 / n + r() * 0.8, dx = cosA(a), dz = sinA(a), L = 3 + Math.floor(r() * 3);\n      for (let s = 0; s <= L; s++) {\n        const x = Math.round(dx * s * 0.7), z = Math.round(dz * s * 0.7);\n        if (s >= 1 && s < L - 1) for (const q of [1, -1]) line(o, x, s, z, Math.round(dx * s * 0.7 - dz * q * (L - s) * 0.7), s, Math.round(dz * s * 0.7 + dx * q * (L - s) * 0.7), P.BODY);   // its fronds, shorter up the stem\n        o.push(x, s, z, s === L ? P.ACCENT : P.BODY);\n      }\n    }\n    return o; },\n  crystalWarren(r, k) { const o = [], R = Math.max(3, Math.round((3 + 1.5 * r()) * k)) + 0.5, C = Math.ceil(R), H = 6 + Math.floor(r() * 3), alongX = r() < 0.5;\n    for (let x = -C; x <= C; x++) for (let z = -C; z <= C; z++) for (let y = 0; y <= C; y++) {\n      const q = x * x + z * z + 2 * y * y;\n      if (q > R * R || q <= (R - 1.2) * (R - 1.2)) continue;                         // a hollow mound of mixed crystal…\n      if (y <= 1 && (alongX ? Math.abs(z) <= 1 : Math.abs(x) <= 1)) continue;       // …its caves open at both ends\n      o.push(x, y, z, r() < 0.35 ? P.ACCENT : P.BODY);\n    }\n    for (let y = 0; y < H; y++) { const w = y < 3 ? 1 : 0; for (let x = 0; x <= w; x++) for (let z = 0; z <= w; z++) o.push(x, y, z, P.STALK); }   // a grey spire from its middle\n    return o; },  // WAVE 3 OF THE ATLAS (Sep 30, version 4 only): landforms and ground built of bits, none of them alive. Banded buttes,\n  // rock needles with snow at their feet, karst towers (standing in the shallows as well), black glass domes ringed with\n  // melt, glowing gems, ore veins breaking the surface, sulfur vents, snow ridges and the vents of cold geysers.\n  butte(r, k) { const o = [], w = 2 + Math.floor(r() * 3), d = 2 + Math.floor(r() * 3), H = 5 + Math.floor(r() * 4), band = [P.BODY, P.ACCENT, P.CAP];\n    for (let y = 0; y < H; y++) {                            // flat-topped, in bands of the world's colours, a talus skirt at its foot\n      const e = y < 2 ? 1 : 0;\n      for (let x = -e; x < w + e; x++) for (let z = -e; z < d + e; z++) {\n        if (e && (x < 0 || z < 0 || x >= w || z >= d) && r() < 0.45) continue;\n        o.push(x - (w >> 1), y, z - (d >> 1), band[Math.floor(y / 2) % 3]);\n      }\n    }\n    return o; },\n  rockNeedle(r, k) { const o = [], n = 1 + Math.floor(r() * 3);\n    for (let i = 0; i < n; i++) {\n      const x0 = i ? Math.floor(r() * 5) - 2 : 0, z0 = i ? Math.floor(r() * 5) - 2 : 0, H = 4 + Math.floor(r() * 5);\n      for (let y = 0; y < H; y++) { const w = y < H / 3 ? 1 : 0; for (let x = 0; x <= w; x++) for (let z = 0; z <= w; z++) o.push(x0 + x, y, z0 + z, P.BODY); }\n      for (const [dx, dz] of DIRS4) if (r() < 0.7) o.push(x0 + (dx > 0 ? 2 : dx), 0, z0 + (dz > 0 ? 2 : dz), P.FROST);   // snow packed at its foot\n    }\n    return o; },\n  karstTower(r, k) { const o = [], s = 2 + Math.floor(r() * 2), H = 5 + Math.floor(r() * 4), h = s >> 1;\n    for (let y = 0; y < H; y++) for (let x = 0; x < s; x++) for (let z = 0; z < s; z++) {\n      if (y === 1 && s === 3 && x !== 1 && z !== 1) continue;     // undercut a little at its foot, where water ate at it\n      o.push(x - h, y, z - h, P.BODY);\n    }\n    for (let x = 0; x < s; x++) for (let z = 0; z < s; z++) if (r() < 0.7) o.push(x - h, H, z - h, P.LEAF);   // life on its top\n    return o; },\n  glassDome(r, k) { const o = [], R = n0((2.3 + 1.2 * r()) * k) + 0.5, C = Math.ceil(R) + 1;\n    for (let x = -C; x <= C; x++) for (let z = -C; z <= C; z++) {\n      const q = x * x + z * z;\n      if (q <= R * R) { const hh = Math.floor(Math.sqrt(R * R - q) * 0.8); for (let y = 0; y <= hh; y++) o.push(x, y, z, P.BODY); }   // a low dome of black glass…\n      else if (q <= (R + 1.2) * (R + 1.2) && r() < 0.75) o.push(x, 0, z, P.MELT);                                                // …ringed with glowing melt\n    }\n    return o; },\n  gemCluster(r, k) { const o = [], n = 3 + Math.floor(r() * 4);\n    blob(o, 0, 1, 0, 1.6, 1.2, 1.6, P.BODY, r, 0);           // a knot of dark rock…\n    for (let i = 0; i < n; i++) {                            // …studded with gems that light themselves\n      const a = i * 6.2832 / n + r(), x = Math.round(1.6 * cosA(a)), z = Math.round(1.6 * sinA(a)), H = 1 + Math.floor(r() * 3);\n      line(o, x, Math.floor(r() * 2), z, Math.round(x * 1.6), H, Math.round(z * 1.6), P.GLOW);\n    }\n    return o; },\n  oreFleck(r, k) { const o = [], n = 2 + Math.floor(r() * 2);\n    for (let i = 0; i < n; i++) {                            // a vein of ore breaking the surface, a streak of flecks\n      const a = r() * 6.2832, L = 4 + Math.floor(r() * 5), dx = cosA(a), dz = sinA(a), p = r() < 0.5 ? P.BODY : P.ACCENT;\n      for (let s = -(L >> 1); s <= L >> 1; s++) { const x = Math.round(dx * s), z = Math.round(dz * s); o.push(x, 0, z, p); if (r() < 0.3) o.push(x, 1, z, p); }\n    }\n    return o; },\n  sulfurVent(r, k) { const o = [], R = 2 + Math.floor(r() * 2);\n    for (let y = 0; y < R; y++) ring(o, 0, y, 0, R - y + 0.5, y === R - 1 ? P.ACCENT : P.BODY);   // a crusted cone, open at its top\n    for (let x = -R - 2; x <= R + 2; x++) for (let z = -R - 2; z <= R + 2; z++) { const q = x * x + z * z; if (q > (R + 0.5) * (R + 0.5) && q <= (R + 2) * (R + 2) && r() < 0.5) o.push(x, 0, z, P.BODY); }   // its crust, stepped out round it\n    return o; },\n  sastrugi(r, k) { const o = [], along = r() < 0.5, n = 2 + Math.floor(r() * 2);\n    for (let i = 0; i < n; i++) {                            // ridges of wind-packed snow, sharp-crested\n      const L = 5 + Math.floor(r() * 4), off = i * 3 - n, ph = r() * 6.2832;\n      for (let s = -(L >> 1); s <= L >> 1; s++) {\n        const w = off + Math.round(0.8 * sinA(ph + s * 0.6)), hh = s === -(L >> 1) || s === L >> 1 ? 1 : 2;\n        for (let y = 0; y < hh; y++) (along ? o.push(s, y, w, y ? P.ACCENT : P.BODY) : o.push(w, y, s, y ? P.ACCENT : P.BODY));\n      }\n    }\n    return o; },\n  geyserVent(r, k) { const o = [], [dx, dz] = DIRS4[Math.floor(r() * 4)];\n    ring(o, 0, 0, 0, 2, P.FROST); ring(o, 0, 1, 0, 1.2, P.FROST);   // a low cone of pale ice…\n    for (let j = -1; j <= 1; j++) {                          // …and a fan of dark streaks laid downwind of it\n      const L = 5 + Math.floor(r() * 5);\n      for (let s = 2; s < L; s++) { const sp = Math.round(j * s * 0.35); o.push(dx * s + (dz ? sp : 0), 0, dz * s + (dx ? sp : 0), P.BODY); }\n    }\n    return o; },  // WAVE 4 OF THE ATLAS (Sep 30, version 4 only): new materials and the remains. Shards of black tektite at a void\n  // rift, islands of Drift stone floating over the ground, and what others left: Cor monoliths, wrecks, drill rigs and\n  // outposts, fossils, antennas turned to one point in the sky, and a prospector's shelter by a methane lake.\n  riftShard(r, k) { const o = [], n = 2 + Math.floor(r() * 3);\n    for (let i = 0; i < n; i++) {                            // black shards leaning out of the crust, tipped with violet light\n      const a = i * 6.2832 / n + r(), L = 3 + Math.floor(r() * 4), ex = Math.round(1.5 * cosA(a)), ez = Math.round(1.5 * sinA(a));\n      line(o, 0, 0, 0, ex, L, ez, P.BODY); o.push(ex, L + 1, ez, P.GLOW);\n    }\n    return o; },\n  driftIsle(r, k) { const o = [], R = 2 + Math.floor(r() * 2), base = 4 + Math.floor(r() * 2);\n    for (let y = base; y <= 8; y++) {                        // an island of Drift stone hanging over the ground: its top flat,\n      const rad = y === 8 ? R + 0.5 : Math.max(0.5, R + 0.5 - (8 - y) * 0.9);   // its underside a cone\n      for (let x = -R - 1; x <= R + 1; x++) for (let z = -R - 1; z <= R + 1; z++) if (x * x + z * z <= rad * rad && !(y < 8 && r() < 0.12)) o.push(x, y, z, y === 8 ? P.ACCENT : P.BODY);\n    }\n    return o; },\n  monolith(r, k) { const o = [], along = r() < 0.5;\n    for (let y = 0; y < 8; y++) for (let a = 0; a < 2; a++) {   // two bits wide, one thick, eight tall, a seam of light up one side\n      const seam = a === 0 && y >= 1 && y <= 6 && (y & 1);\n      along ? o.push(a, y, 0, seam ? P.GLOW : P.BODY) : o.push(0, y, a, seam ? P.GLOW : P.BODY);\n    }\n    along ? o.push(0, 0, -1, P.BODY, 1, 0, 1, P.BODY) : o.push(-1, 0, 0, P.BODY, 1, 0, 1, P.BODY);   // its footing\n    return o; },\n  wreck(r, k) { const o = [], along = r() < 0.5, L = 5 + Math.floor(r() * 3), put = (a, y, b, p) => (along ? o.push(a, y, b, p) : o.push(b, y, a, p));\n    for (let a = -(L >> 1); a <= L >> 1; a++) {              // a hull section, half buried and broken off at one end\n      const cut = a > (L >> 1) - 2 && r() < 0.5;\n      for (let t = 0; t <= 6; t++) { const ang = 3.14159265 * t / 6, y = Math.round(2.4 * sinA(ang)), b = Math.round(-2.4 * cosA(ang)); if (!(cut && y > 1)) put(a, y, b, (a + t) % 4 === 0 ? P.ACCENT : P.BODY); }\n    }\n    for (let i = 0; i < 4; i++) put(Math.floor(r() * 9) - 4, 0, 4 + Math.floor(r() * 2), P.ACCENT);   // debris beside it\n    put(0, 3, 0, P.GLOW);                                    // a light still blinking\n    return o; },\n  drillRig(r, k) { const o = [], H = 6 + Math.floor(r() * 3);\n    for (let y = 0; y < H; y++) for (const [x, z] of [[-1, -1], [1, -1], [-1, 1], [1, 1]]) if (y < H - 1 || (x < 0 && z < 0)) o.push(x, y, z, P.BODY);   // four legs\n    for (let y = 2; y < H; y += 3) for (const [x, z] of [[0, -1], [0, 1], [-1, 0], [1, 0]]) o.push(x, y, z, P.ACCENT);   // their braces\n    for (let y = 0; y < H - 1; y++) if (r() < 0.8) o.push(0, y, 0, P.STALK);   // the drill string down its middle\n    o.push(-1, H, -1, P.GLOW);                               // its beacon\n    return o; },\n  outpostRuin(r, k) { const o = [], w = 4 + Math.floor(r() * 3), d = 3 + Math.floor(r() * 3);\n    for (let x = 0; x < w; x++) for (let z = 0; z < d; z++) {   // two walls of a half-built outpost, broken down in places\n      if (x !== 0 && z !== 0) continue;\n      const h = 1 + Math.floor(r() * 3);\n      for (let y = 0; y < h; y++) o.push(x - (w >> 1), y, z - (d >> 1), y === 0 ? P.BODY : P.ACCENT);\n    }\n    if (r() < 0.6) o.push(1 - (w >> 1), 0, 1 - (d >> 1), P.GLOW);   // a beacon left on the floor\n    return o; },\n  fossilRibs(r, k) { const o = [], L = 5 + Math.floor(r() * 4), along = r() < 0.5, put = (a, y, b, p) => (along ? o.push(a, y, b, p) : o.push(b, y, a, p));\n    for (let a = 0; a < L; a++) put(a - (L >> 1), 0, 0, P.BODY);   // a spine lying in the rock…\n    for (let a = 1; a < L - 1; a += 2) for (const s of [1, -1]) { put(a - (L >> 1), 0, s, P.BODY); put(a - (L >> 1), 1, 2 * s, P.BODY); put(a - (L >> 1), 0, 3 * s, P.BODY); }   // …its ribs arched over it\n    const sx = -(L >> 1) - 2; put(sx, 0, 0, P.ACCENT); put(sx, 1, 0, P.ACCENT); put(sx - 1, 0, 0, P.ACCENT); put(sx, 0, 1, P.ACCENT); put(sx, 0, -1, P.ACCENT);   // its skull\n    return o; },\n  antenna(r, k) { const o = [], H = 4 + Math.floor(r() * 2);\n    for (let y = 0; y <= H; y++) o.push(0, y, 0, P.BODY);    // a mast…\n    for (let a = -2; a <= 2; a++) for (let b = -2; b <= 2; b++) if (a * a + b * b <= 5) o.push(1 + (a * a + b * b > 2 ? 1 : 0), H + 1 + a, b, P.ACCENT);   // …its dish turned to +x, one point in the sky\n    o.push(0, H + 1, 0, P.GLOW);                             // and a light\n    return o; },\n  shelter(r, k) { const o = [], w = 4, d = 4;\n    for (let x = 0; x < w; x++) for (let z = 0; z < d; z++) for (let y = 0; y < 3; y++) {   // a prospector's shelter: walls, a door, a roof\n      const wall = x === 0 || z === 0 || x === w - 1 || z === d - 1;\n      if (!wall || (z === 0 && x === 1 && y < 2)) continue;\n      o.push(x - 2, y, z - 2, P.BODY);\n    }\n    for (let x = 0; x < w; x++) for (let z = 0; z < d; z++) o.push(x - 2, 3, z - 2, P.ACCENT);\n    o.push(1, 4, 1, P.GLOW);                                 // its beacon on the roof\n    return o; },\n  // THE TREE FORMS (the owner's pool, Oct 2: thirteen kept of twenty, tools/tree-forms; version 7 grows them, each biome\n  // one to three: BIOME_ORGANICS v7). Every one stands on the four-bit trunk and is ROOTED (growOrganic): a bit stays only\n  // if it is joined face to face to the trunk's foot, so no leaf floats, as some of the earlier trees' did.\n  treeRound(r, k) { const o = [], c = n0((1.5 + 0.5 * r()) * k);\n    tLine(o, 0, 0, 0, 0, 4, 0, P.WOOD); blob(o, 0, 4 + Math.round(c), 0, c + 0.3, c + 0.2, c + 0.3, P.LEAF, r, 0.15); return o; },\n  treeOval(r, k) { const o = [], c = n0((1.2 + 0.3 * r()) * k);\n    tLine(o, 0, 0, 0, 0, 5, 0, P.WOOD); blob(o, 0, 4 + Math.round(c * 1.8), 0, c + 0.2, c * 2 + 0.3, c + 0.2, P.LEAF, r, 0.12); return o; },\n  treeCone(r, k) { const o = [], H = 8 + (r() < 0.5 ? 0 : 1), b = n0((2 + 0.4 * r()) * k);\n    tLine(o, 0, 0, 0, 0, H, 0, P.WOOD); for (let y = 3; y <= H; y++) tDisc(o, 0, y, 0, b * (H + 1 - y) / (H - 2), y % 2 === 0 && r() < 0.3 ? P.FROST : P.LEAF, r, 0.08); o.push(0, H + 1, 0, P.LEAF); return o; },\n  treeUmbrella(r, k) { const o = [], c = n0((2.6 + 0.5 * r()) * k), a0 = r() * 6.2832;\n    tLine(o, 0, 0, 0, 0, 3, 0, P.WOOD); for (let i = 0; i < 3; i++) { const a = a0 + i * 2.0944; tLine(o, 0, 3, 0, Math.round(1.8 * cosA(a)), 5, Math.round(1.8 * sinA(a)), P.WOOD); }\n    tDisc(o, 0, 6, 0, c, P.LEAF, r, 0.06); tDisc(o, 0, 7, 0, c * 0.6, P.LEAF, r, 0.1); return o; },\n  treeDome(r, k) { const o = [], c = n0((2.4 + 0.4 * r()) * k);\n    tLine(o, 0, 0, 0, 0, 4, 0, P.WOOD); for (let y = 0; y <= 3; y++) tDisc(o, 0, 4 + y, 0, c * Math.sqrt(1 - (y / 3.6) * (y / 3.6)), P.LEAF, r, 0.06); return o; },\n  treeTiered(r, k) { const o = [], c = n0((2.4 + 0.3 * r()) * k);\n    tLine(o, 0, 0, 0, 0, 9, 0, P.WOOD); tDisc(o, 0, 4, 0, c, P.LEAF, r, 0.1); tDisc(o, 0, 6, 0, c * 0.72, P.LEAF, r, 0.1); tDisc(o, 0, 8, 0, c * 0.45, P.LEAF, r, 0.1); o.push(0, 10, 0, P.LEAF); return o; },\n  treePalm(r, k) { const o = [], lean = r() < 0.5 ? 1 : -1, n = 5 + Math.floor(r() * 2), a0 = r() * 6.2832, L = 3 * n0(k);\n    tLine(o, 0, 0, 0, 0, 3, 0, P.WOOD); tLine(o, 0, 3, 0, lean, 7, 0, P.WOOD); o.push(lean, 8, 0, P.LEAF);\n    for (let i = 0; i < n; i++) { const a = a0 + i * 6.2832 / n, x1 = lean + Math.round(L * 0.7 * cosA(a)), z1 = Math.round(L * 0.7 * sinA(a));\n      tLine(o, lean, 8, 0, x1, 8, z1, P.LEAF); tLine(o, x1, 8, z1, lean + Math.round(L * cosA(a)), 6, Math.round(L * sinA(a)), P.LEAF); } return o; },\n  treeWeeping(r, k) { const o = [], c = n0((2 + 0.4 * r()) * k), n = 8;\n    tLine(o, 0, 0, 0, 0, 5, 0, P.WOOD); blob(o, 0, 6, 0, c + 0.3, 1.6, c + 0.3, P.LEAF, r, 0.08);\n    for (let i = 0; i < n; i++) { const a = i * 6.2832 / n + r() * 0.3, x = Math.round((c + 0.3) * cosA(a)), z = Math.round((c + 0.3) * sinA(a)); tLine(o, x, 6, z, x, 2 + Math.floor(r() * 2), z, P.LEAF); } return o; },\n  treeFork(r, k) { const o = [], c = n0((1.1 + 0.3 * r()) * k), a = r() * 3.1416, dx = Math.round(2 * cosA(a)), dz = Math.round(2 * sinA(a));\n    tLine(o, 0, 0, 0, 0, 2, 0, P.WOOD); tLine(o, 0, 2, 0, dx, 5, dz, P.WOOD); tLine(o, 0, 2, 0, -dx, 5, -dz, P.WOOD);\n    blob(o, dx, 6, dz, c + 0.3, c, c + 0.3, P.LEAF, r, 0.1); blob(o, -dx, 6, -dz, c + 0.3, c, c + 0.3, P.LEAF, r, 0.1); return o; },\n  treeShrub(r, k) { const o = [], c = n0((2.2 + 0.4 * r()) * k);\n    tLine(o, 0, 0, 0, 0, 2, 0, P.WOOD); blob(o, 0, 3, 0, c + 0.3, 1.8, c + 0.3, P.LEAF, r, 0.15); return o; },\n  treeBirch(r, k) { const o = [], a0 = r() * 6.2832;\n    tLine(o, 0, 0, 0, 0, 8, 0, P.WOOD); blob(o, 0, 9, 0, 1, 1, 1, P.LEAF, r, 0);\n    for (let i = 0; i < 3; i++) { const a = a0 + i * 2.2, y = 4 + i * 2, x = Math.round(1.5 * cosA(a)), z = Math.round(1.5 * sinA(a)); tLine(o, 0, y, 0, x, y + 1, z, P.WOOD); blob(o, x, y + 1, z, 1, 0.8, 1, P.LEAF, r, 0); } return o; },\n  treeCloud(r, k) { const o = [], s = r() < 0.5 ? 1 : -1;   // a methane world's grows its crown as tholin tissue (materialsFor: BODY)\n    tLine(o, 0, 0, 0, 0, 2, 0, P.WOOD); tLine(o, 0, 2, 0, s * 2, 4, 0, P.WOOD); tLine(o, s * 2, 4, 0, -s, 7, 0, P.WOOD);\n    tDisc(o, s * 2, 5, 0, n0(1.6 * k), P.BODY, r, 0); tDisc(o, -s, 8, 0, n0(1.9 * k), P.BODY, r, 0); tDisc(o, 0, 3, 1, 1, P.BODY, r, 0); return o; },\n  treeBlossom(r, k) { const o = [], c = n0((1.6 + 0.4 * r()) * k);\n    tLine(o, 0, 0, 0, 0, 4, 0, P.WOOD); blob(o, 0, 4 + Math.round(c), 0, c + 0.4, c + 0.1, c + 0.4, P.LEAF, r, 0.12, P.PETAL, 0.3); return o; },\n  // BIOME WAVE 6 (world version 12, Oct 11), each within nine bits: mudpots' cones, a column coast's basalt, salt spires and\n  // blades, mesas and buttes in bands, trunks buried in ash and turned to stone, rows of penitentes leaning to the star, tar seeps, the\n  // banded mounds of stromatolites, and thorn scrub's low shrubs.\n  mudCone(r, k) { const o = [], R = 2 + Math.floor(r() * 2), Hc = R + 1 + Math.floor(r() * 2);\n    for (let y = 0; y < Hc; y++) { const rad = 0.6 + (R - 0.1) * (1 - y / Hc); if (y < Hc - 1) disc(o, 0, y, 0, rad, P.BODY, r, 0); else ring(o, 0, y, 0, rad + 0.6, P.ACCENT); }   // a cone, its vent open at the top\n    for (let x = -R - 2; x <= R + 2; x++) for (let z = -R - 2; z <= R + 2; z++) { const q = x * x + z * z; if (q > (R + 0.5) * (R + 0.5) && q <= (R + 2) * (R + 2) && r() < 0.25) o.push(x, 0, z, P.ACCENT); }   // splashes of wet mud\n    return o; },\n  basaltColumns(r, k) { const o = [], N = 2 + Math.floor(r() * 2);\n    // Columns a kube across (two bits by two), packed in rows offset by a bit each, so each touches six: a hexagonal set.\n    // Tallest in the middle, stepped down to the edge, each its own height; a few have fallen.\n    for (let j = -N; j <= N; j++) for (let i = -N; i <= N; i++) {\n      const cx = 2 * i + (j & 1), cz = 2 * j, d = Math.sqrt(cx * cx + cz * cz) / (2 * N + 1);\n      if (d > 1 || r() < 0.12) continue;\n      const H = Math.max(1, Math.min(9, Math.round(2 + 7 * (1 - d) - 2.5 * r())));\n      for (let y = 0; y < H; y++) for (let a = 0; a < 2; a++) for (let b = 0; b < 2; b++) o.push(cx + a - 1, y, cz + b - 1, y === H - 1 ? P.ACCENT : P.BODY);\n    }\n    return o; },\n  saltSpire(r, k) { const o = [], n = 2 + Math.floor(r() * 3);\n    for (let i = 0; i < n; i++) {\n      const x0 = i ? Math.floor(r() * 7) - 3 : 0, z0 = i ? Math.floor(r() * 7) - 3 : 0, H = 4 + Math.floor(r() * 5);\n      if (r() < 0.5) {                                       // a pillar, two bits across, a bit across at its top\n        for (let y = 0; y < H; y++) { const w = y < H * 0.5 ? 1 : 0; for (let x = 0; x <= w; x++) for (let z = 0; z <= w; z++) o.push(x0 + x, y, z0 + z, y === H - 1 ? P.ACCENT : P.BODY); }\n      } else {                                               // a blade, a bit thick, narrowing to its edge\n        const along = r() < 0.5, half = 1 + (r() < 0.5 ? 1 : 0);\n        for (let y = 0; y < H; y++) { const w = Math.round(half * (1 - y / H)); for (let a = -w; a <= w; a++) (along ? o.push(x0 + a, y, z0, P.BODY) : o.push(x0, y, z0 + a, P.BODY)); }\n      }\n    }\n    return o; },\n  mesa(r, k) { const o = [], w = 6 + Math.floor(r() * 4), d = 5 + Math.floor(r() * 4), H = 6 + Math.floor(r() * 4);\n    // Steep-sided and flat-topped, in bands two bits deep under a darker cap rock, its corners worn round, talus at its foot.\n    for (let y = 0; y < H; y++) for (let x = 0; x < w; x++) for (let z = 0; z < d; z++) {\n      const ex = Math.min(x, w - 1 - x), ez = Math.min(z, d - 1 - z);\n      if (ex + ez < (y >= H - 2 ? 2 : 1)) continue;\n      o.push(x - (w >> 1), y, z - (d >> 1), y === H - 1 ? P.CAP : (Math.floor(y / 2) & 1) ? P.ACCENT : P.BODY);\n    }\n    for (let x = -1; x <= w; x++) for (let z = -1; z <= d; z++) if ((x < 0 || z < 0 || x >= w || z >= d) && r() < 0.4) o.push(x - (w >> 1), 0, z - (d >> 1), P.ACCENT);\n    return o; },\n  mesaButte(r, k) { const o = [], s = 2 + Math.floor(r() * 2), H = 7 + Math.floor(r() * 3);\n    for (let y = 0; y < H; y++) for (let x = 0; x < s; x++) for (let z = 0; z < s; z++) o.push(x - (s >> 1), y, z - (s >> 1), y === H - 1 ? P.CAP : (Math.floor(y / 2) & 1) ? P.ACCENT : P.BODY);\n    for (const [dx, dz] of DIRS4) if (r() < 0.6) o.push(dx * 2, 0, dz * 2, P.ACCENT);\n    return o; },\n  buriedTrunk(r, k) { const o = [];\n    if (r() < 0.5) {                                         // a stump standing out of the ash, a broken limb on it\n      const H = 2 + Math.floor(r() * 3); tLine(o, 0, 0, 0, 0, H, 0, P.BODY);\n      const [dx, dz] = DIRS4[Math.floor(r() * 4)]; tLine(o, 0, H - 1, 0, dx * 2, H, dz * 2, P.ACCENT);\n    } else {                                                 // a fallen trunk, half buried\n      const L = 5 + Math.floor(r() * 3), along = r() < 0.5;\n      for (let a = 0; a < L; a++) { const x = a - (L >> 1); (along ? o.push(x, 0, 0, a === 0 ? P.ACCENT : P.BODY) : o.push(0, 0, x, a === 0 ? P.ACCENT : P.BODY)); if (r() < 0.3) (along ? o.push(x, 1, 0, P.BODY) : o.push(0, 1, x, P.BODY)); }\n    }\n    return o; },\n  penitenteRow(r, k) { const o = [], rows = 1 + (r() < 0.6 ? 1 : 0), n = 4 + Math.floor(r() * 3), lean = 0.3 + 0.2 * r();\n    // Rows of ice blades a bit thick and two wide, a few kubes tall, each layer leaning further along +x (organicsOf turns\n    // +x toward the star: LEAN_TO_STAR), their tips sharpened to a bit.\n    for (let row = 0; row < rows; row++) for (let i = 0; i < n; i++) {\n      const x0 = row * 3 - (rows - 1) * 2, z0 = i * 2 - n, H = 5 + Math.floor(r() * 5);\n      for (let y = 0; y < H && y < 9; y++) { const x = x0 + Math.floor(y * lean), wz = y < H - 2 ? 2 : 1; for (let b = 0; b < wz; b++) o.push(x, y, z0 + b, y >= H - 1 ? P.ACCENT : P.BODY); }\n    }\n    return o; },\n  tarSeep(r, k) { const o = [], n = 2 + Math.floor(r() * 3);\n    blob(o, 0, 1, 0, 1.6, 1.1, 1.6, P.BODY, r, 0);           // a bubble of tar swelling out of its seep...\n    for (let i = 0; i < n; i++) o.push(Math.floor(r() * 7) - 3, 0, Math.floor(r() * 7) - 3, P.BODY);   // ...and smaller ones by it\n    return o; },\n  stromatolite(r, k) { const o = [], n = 1 + Math.floor(r() * 3);\n    for (let i = 0; i < n; i++) {                            // rounded mounds in bands, a living mat over each\n      const cx = i ? Math.floor(r() * 7) - 3 : 0, cz = i ? Math.floor(r() * 7) - 3 : 0, R = 1.5 + 1.5 * r(), H = 2 + Math.floor(r() * 4);\n      for (let y = 0; y < H; y++) { const f = y / (H + 0.5), rad = R * Math.sqrt(1 - f * f);\n        disc(o, cx, y, cz, rad < 0.5 ? 0.5 : rad, y === H - 1 ? P.TIDAL : (y & 1) ? P.ACCENT : P.BODY, r, 0); }\n    }\n    return o; },\n  thornShrub(r, k) { const o = [], n = 3 + Math.floor(r() * 3);\n    tLine(o, 0, 0, 0, 0, 1, 0, P.WOOD);                       // a short stem, and thorny twigs spreading low from it\n    for (let i = 0; i < n; i++) {\n      const a = i * 6.2832 / n + r() * 0.6, L = 2 + Math.floor(r() * 2), ex = Math.round(L * cosA(a)), ez = Math.round(L * sinA(a)), ey = 2 + Math.floor(r() * 2);\n      tLine(o, 0, 1, 0, ex, ey, ez, P.WOOD);\n      if (r() < 0.7) o.push(ex, ey + 1, ez, P.LEAF);\n      if (r() < 0.5) o.push(Math.round(ex * 0.5), ey, Math.round(ez * 0.5), P.LEAF);\n    }\n    return o; },\n};\n// The tree forms' own strokes (tools/tree-forms/forms.mjs): a line whose diagonal steps are filled in, so a branch is\n// joined face to face all along it, and a disc whose holes spare its middle, so a tier always meets its trunk.\nfunction tLine(o, x0, y0, z0, x1, y1, z1, p) {\n  const n = Math.max(Math.abs(x1 - x0), Math.abs(y1 - y0), Math.abs(z1 - z0)) || 1;\n  let px = null, py = null, pz = null;\n  for (let i = 0; i <= n; i++) {\n    const x = Math.round(x0 + (x1 - x0) * i / n), y = Math.round(y0 + (y1 - y0) * i / n), z = Math.round(z0 + (z1 - z0) * i / n);\n    if (px !== null) { if (x !== px && y !== py) o.push(x, py, pz, p); if (z !== pz && (x !== px || y !== py)) o.push(x, y, pz, p); }\n    o.push(x, y, z, p); px = x; py = y; pz = z;\n  }\n}\nfunction tDisc(o, cx, cy, cz, rad, p, r, holes) {\n  const R = Math.ceil(rad);\n  for (let x = -R; x <= R; x++) for (let z = -R; z <= R; z++) if (x * x + z * z <= rad * rad && !(holes && x * x + z * z > 1 && r() < holes)) o.push(cx + x, cy, cz + z, p);\n}\n// ROOTED: only the bits joined, face to face, to the foot of the trunk (0, 0, 0). The tree forms' guarantee.\nconst TREE_FORMS = new Set(['treeRound', 'treeOval', 'treeCone', 'treeUmbrella', 'treeDome', 'treeTiered', 'treePalm', 'treeWeeping', 'treeFork', 'treeShrub', 'treeBirch', 'treeCloud', 'treeBlossom']);\nfunction rootedBits(bits) {\n  const at = new Map();\n  for (let i = 0; i < bits.length; i += 4) at.set(bits[i] + ',' + bits[i + 1] + ',' + bits[i + 2], i);\n  if (!at.has('0,0,0')) return bits;\n  const seen = new Set(['0,0,0']), queue = [[0, 0, 0]];\n  while (queue.length) {\n    const [x, y, z] = queue.pop();\n    for (const [dx, dy, dz] of [[1, 0, 0], [-1, 0, 0], [0, 1, 0], [0, -1, 0], [0, 0, 1], [0, 0, -1]]) {\n      const key = (x + dx) + ',' + (y + dy) + ',' + (z + dz);\n      if (at.has(key) && !seen.has(key)) { seen.add(key); queue.push([x + dx, y + dy, z + dz]); }\n    }\n  }\n  const out = [];\n  for (let i = 0; i < bits.length; i += 4) if (seen.has(bits[i] + ',' + bits[i + 1] + ',' + bits[i + 2])) out.push(bits[i], bits[i + 1], bits[i + 2], bits[i + 3]);\n  return out;\n}\n\n// THE SPECIES: what each is, its chemistry, and where it grows (under water, afloat on a sea, at a shore, on dry ground).\nexport const SPECIES = Object.freeze([\n  ['crownTree', 'crown tree', 'carbon', 'land'], ['needleTree', 'frosted needle tree', 'carbon', 'land'], ['flatCrown', 'flat-crown tree', 'carbon', 'land'],\n  ['stiltroot', 'stiltroot tree', 'carbon', 'shore'], ['hothouseTree', 'hothouse tree', 'carbon', 'land'], ['reedspire', 'reedspire stand', 'carbon', 'land'],\n  ['gillTower', 'gill tower', 'carbon', 'land'], ['glowcapStand', 'glowcap stand', 'carbon', 'land'], ['siphonTube', 'siphon tubes', 'carbon', 'land'],\n  ['resinLattice', 'resin lattice', 'carbon', 'land'], ['tideFan', 'tide fan', 'carbon', 'under'], ['tideTube', 'tide tubes', 'carbon', 'under'],\n  ['tidePlate', 'tide plates', 'carbon', 'under'],\n  ['spiritColony', 'Spirit colony', 'silicon', 'land'], ['quartzDendrite', 'quartz dendrite', 'silicon', 'land'], ['silicateRosette', 'silicate rosette', 'silicon', 'land'],\n  ['glassVeinwood', 'glass veinwood', 'silicon', 'land'], ['latticeColony', 'lattice colony', 'silicon', 'land'], ['sulfurBloom', 'sulfur bloom', 'silicon', 'land'],\n  ['rustSpire', 'rust spire', 'silicon', 'land'],\n  ['tholinStalks', 'tholin stalks', 'methane', 'shore'], ['cryoFern', 'cryo fern', 'methane', 'land'], ['discMat', 'disc mat', 'methane', 'afloat'],\n  ['hollowTower', 'hollow tower', 'methane', 'under'], ['tholinThicket', 'tholin thicket tree', 'methane', 'land'], ['bubbleDome', 'bubble dome', 'methane', 'shore'],\n  ['fringeGrowth', 'fringe growth', 'methane', 'land'],\n  ['crystalCluster', 'crystal cluster', 'mineral', 'land'], ['crystalSpire', 'crystal spire', 'mineral', 'land'], ['crystalShards', 'crystal shards', 'mineral', 'land'],\n  ['puffball', 'puffball', 'carbon', 'land'], ['shelfFungus', 'shelf fungus', 'carbon', 'land'], ['glowmossPillar', 'glowmoss pillar', 'carbon', 'land'],\n  ['prismCoral', 'prism coral', 'carbon', 'land'], ['boneArch', 'bone arch', 'carbon', 'land'], ['landKelp', 'land kelp', 'carbon', 'land'],\n  ['veinCoral', 'vein coral', 'carbon', 'land'], ['reefVault', 'reef vault', 'carbon', 'shore'], ['fleshPod', 'flesh pod', 'carbon', 'land'],\n  ['slimeLattice', 'slime lattice', 'carbon', 'land'], ['matCrag', 'mat crag', 'carbon', 'land'], ['frostFern', 'frost fern', 'mineral', 'land'],\n  ['crystalWarren', 'crystal warren', 'silicon', 'land'],\n  ['butte', 'banded butte', 'mineral', 'land'], ['rockNeedle', 'rock needle', 'mineral', 'land'], ['karstTower', 'karst tower', 'mineral', 'rise'],\n  ['glassDome', 'glass dome', 'mineral', 'land'], ['gemCluster', 'gem cluster', 'mineral', 'land'], ['oreFleck', 'ore vein', 'mineral', 'land'],\n  ['sulfurVent', 'sulfur vent', 'mineral', 'land'], ['sastrugi', 'snow ridges', 'mineral', 'land'], ['geyserVent', 'geyser vent', 'mineral', 'land'],\n  ['riftShard', 'rift shards', 'mineral', 'land'], ['driftIsle', 'drift isle', 'mineral', 'land'], ['monolith', 'Cor monolith', 'mineral', 'land'],\n  ['wreck', 'wreck', 'mineral', 'land'], ['drillRig', 'drill rig', 'mineral', 'land'], ['outpostRuin', 'outpost ruin', 'mineral', 'land'],\n  ['fossilRibs', 'fossil', 'mineral', 'land'], ['antenna', 'antenna', 'mineral', 'land'], ['shelter', 'prospector\\'s shelter', 'mineral', 'shore'],\n  // The tree forms (version 7): the owner's pool, appended so every older species keeps its index.\n  ['treeRound', 'round-crown tree', 'carbon', 'land'], ['treeOval', 'upright oval tree', 'carbon', 'land'], ['treeCone', 'conifer', 'carbon', 'land'],\n  ['treeUmbrella', 'umbrella tree', 'carbon', 'land'], ['treeDome', 'dome tree', 'carbon', 'land'], ['treeTiered', 'tiered tree', 'carbon', 'land'],\n  ['treePalm', 'palm', 'carbon', 'land'], ['treeWeeping', 'weeping tree', 'carbon', 'shore'], ['treeFork', 'twin-fork tree', 'carbon', 'land'],\n  ['treeShrub', 'shrub tree', 'carbon', 'land'], ['treeBirch', 'clumped birch', 'carbon', 'land'], ['treeCloud', 'cloud thicket tree', 'methane', 'land'],\n  ['treeBlossom', 'blossom tree', 'carbon', 'land'],\n  // Biome wave 6 (version 12): appended likewise. 'shallows': standing in water no more than two cells deep.\n  ['mudCone', 'mud cone', 'mineral', 'land'], ['basaltColumns', 'basalt columns', 'mineral', 'rise'], ['saltSpire', 'salt spires', 'mineral', 'land'],\n  ['mesa', 'table rock', 'mineral', 'land'], ['mesaButte', 'butte', 'mineral', 'land'], ['buriedTrunk', 'buried trunk', 'mineral', 'land'],\n  ['penitenteRow', 'penitentes', 'mineral', 'land'], ['tarSeep', 'tar seep', 'mineral', 'land'], ['stromatolite', 'stromatolite', 'carbon', 'shallows'],\n  ['thornShrub', 'thorn shrub', 'carbon', 'land'],\n].map(([id, label, chem, habitat]) => Object.freeze({ id, label, chem, habitat })));\nexport const SPECIES_IDS = Object.freeze(SPECIES.map((s) => s.id));\nconst SPECIES_BY_ID = new Map(SPECIES.map((s) => [s.id, s]));\n\n// Grow one: the species' bits for a seed and a size, in its own frame (see GROW). Where two parts name one place the\n// last wins (a crown's leaf over the trunk's top), so a bit is one bit.\nexport function growOrganic(speciesId, seed, k) {\n  const g = GROW[speciesId];\n  if (!g) return [];\n  const raw0 = g(rngOf(seed), k), raw = TREE_FORMS.has(speciesId) ? rootedBits(raw0) : raw0, last = new Map();\n  for (let i = 0; i < raw.length; i += 4) last.set(raw[i] + ',' + raw[i + 1] + ',' + raw[i + 2], i);\n  const out = [];\n  for (const i of [...last.values()].sort((a, b) => a - b)) out.push(raw[i], raw[i + 1], raw[i + 2], raw[i + 3]);\n  return out;\n}\n\n// WHERE EACH SPECIES GROWS: a biome's organics, as [species, weight] by the ground's temperature, and how many candidate\n// spots in a hundred hold one (`model`: how many in Kubipedia's model of it, ctx.model, where a rare thing is gathered\n// close enough to be seen in sixteen kubes). Within the woods: needle trees where it is cold (the rime woods), flat crowns where it is\n// hot and the world holds no liquid sea (the arid parkland), stiltroots at a shore (the fens). Nightside glow grows none:\n// its life is its flora, carpets and threads of light (the owner, Sep 30: \"just keeping fixtures\").\nconst BIOME_ORGANICS = {\n  crystalFields:  { density: 45, species: () => [['crystalCluster', 4], ['crystalSpire', 3], ['crystalShards', 3]] },   // version 4 only: ctx.crystalBits\n  // THE ATLAS'S LATER BIOMES (Sep 30, version 4 only: ctx.atlas4), each growing what it was named for; their parents'\n  // own lists (`v4`) keep only their core kind there, so a biome varies in colour alone.\n  rimeWoods:       { density: 55, species: () => [['needleTree', 1]], v7: () => [['treeCone', 2], ['treeTiered', 1]] },\n  aridParkland:    { density: 30, species: () => [['flatCrown', 1]], v7: () => [['treeUmbrella', 2], ['treeShrub', 1]] },\n  stiltrootFens:   { density: 50, species: () => [['stiltroot', 1]], v7: () => [['treeWeeping', 2], ['treeBirch', 1]] },\n  reedspireStands: { density: 60, species: () => [['reedspire', 1]] },\n  glowcapStands:   { density: 50, species: () => [['glowcapStand', 1]] },\n  siphonTubes:     { density: 40, species: () => [['siphonTube', 1]] },\n  resinLattices:   { density: 35, species: () => [['resinLattice', 1]] },\n  quartzDendrites: { density: 40, species: () => [['quartzDendrite', 1]] },\n  silicateShells:  { density: 40, species: () => [['silicateRosette', 1]] },\n  glassVeinwood:   { density: 35, species: () => [['glassVeinwood', 1]] },\n  latticeColonies: { density: 35, species: () => [['latticeColony', 1]] },\n  sulfurBlooms:    { density: 40, species: () => [['sulfurBloom', 1]] },\n  rustSpires:      { density: 40, species: () => [['rustSpire', 1]] },\n  cryoFerns:       { density: 40, species: () => [['cryoFern', 1]] },\n  methaneMats:     { density: 50, species: () => [['discMat', 3], ['hollowTower', 2]] },\n  tholinThickets:  { density: 55, species: () => [['tholinThicket', 1]], v7: () => [['treeCloud', 1]] },\n  bubbleFens:      { density: 45, species: () => [['bubbleDome', 1]] },\n  rimeFringe:      { density: 45, species: () => [['fringeGrowth', 1]] },\n  // Wave 2 of the atlas (Sep 30): new growers of their own.\n  puffballDomes:   { density: 45, species: () => [['puffball', 1]] },\n  shelfTerraces:   { density: 45, species: () => [['shelfFungus', 1]] },\n  glowmossPillars: { density: 45, species: () => [['glowmossPillar', 1]] },\n  prismCoral:      { density: 50, species: () => [['prismCoral', 1]] },\n  boneArches:      { density: 18, species: () => [['boneArch', 1]] },\n  landKelp:        { density: 60, species: () => [['landKelp', 1]] },\n  veinCoral:       { density: 45, species: () => [['veinCoral', 1]] },\n  vaultedReefs:    { density: 45, species: () => [['reefVault', 1]] },\n  fleshPods:       { density: 40, species: () => [['fleshPod', 1]] },\n  glowSlime:       { density: 30, species: () => [['slimeLattice', 1]] },\n  matCrags:        { density: 45, species: () => [['matCrag', 1]] },\n  frostFerns:      { density: 50, species: () => [['frostFern', 1]] },\n  crystalWarrens:  { density: 35, species: () => [['crystalWarren', 1]] },\n  // Wave 3: ground and landforms, not life (so on a world of any chemistry).\n  bandedScarps:    { density: 25, species: () => [['butte', 1]] },\n  needlePeaks:     { density: 40, species: () => [['rockNeedle', 1]] },\n  karstTowers:     { density: 30, species: () => [['karstTower', 1]] },\n  glassShields:    { density: 20, species: () => [['glassDome', 1]] },\n  gemHollows:      { density: 35, species: () => [['gemCluster', 1]] },\n  oreOutcrops:     { density: 50, species: () => [['oreFleck', 1]] },\n  sulfurSprings:   { density: 20, species: () => [['sulfurVent', 1]] },\n  firnFields:      { density: 35, species: () => [['sastrugi', 1]] },\n  cryovolcanicPlains: { density: 15, species: () => [['geyserVent', 1]] },\n  methaneOasis:    { density: 45, species: () => [['tholinStalks', 2], ['fringeGrowth', 1], ['discMat', 1], ['shelter', 0.06]] },\n  // Wave 4: void rifts, drift isles and the remains.\n  voidRifts:       { density: 20, model: 45, species: () => [['riftShard', 1]] },\n  driftIsles:      { density: 12, model: 25, species: () => [['driftIsle', 1]] },\n  corMonoliths:    { density: 4,  model: 25, species: () => [['monolith', 1]] },\n  wreckFields:     { density: 6,  model: 25, species: () => [['wreck', 1]] },\n  prospectorRelics: { density: 6, model: 30, species: () => [['drillRig', 1], ['outpostRuin', 2]] },\n  fossilBeds:      { density: 10, model: 30, species: () => [['fossilRibs', 1]] },\n  signalArrays:    { density: 25, species: () => [['antenna', 1]] },\n  // Biome wave 6 (version 12).\n  mudpots:         { density: 25, species: () => [['mudCone', 1]] },\n  columns:         { density: 30, species: () => [['basaltColumns', 1]] },\n  halite:          { density: 22, species: () => [['saltSpire', 1]] },\n  mesas:           { density: 14, model: 40, species: () => [['mesa', 2], ['mesaButte', 1]] },\n  ash:             { density: 12, model: 60, species: () => [['buriedTrunk', 1]] },\n  penitentes:      { density: 60, species: () => [['penitenteRow', 1]] },\n  pitch:           { density: 18, model: 60, species: () => [['tarSeep', 1]] },\n  stroma:          { density: 65, species: () => [['stromatolite', 1]] },\n  thorns:          { density: 24, species: () => [['thornShrub', 1]] },\n  // WOODS BY THE WORLD'S AVERAGE (version 12, the owner, Oct 11: \"world\"): needle trees on a cold world, broadleaf on a\n  // warm one and a mix between, read from the world's mean temperature (ctx.treeT), not each column's: up to 2 C all\n  // conifers and tiered needles, from 16 C all round crowns, ovals and forks. (A turning world's woods need carbon life,\n  // which needs it above freezing somewhere: with one temperature, a mean of 0 C or more. A locked world's may be colder.)\n  woods:          { density: 55, v12: (t) => { const c = smooth01((16 - t) / 14); return [['treeCone', 2 * c], ['treeTiered', c], ['treeRound', 3 * (1 - c)], ['treeOval', 2 * (1 - c)], ['treeFork', 1 - c]]; },\n                    v4: () => [['crownTree', 1]], v7: () => [['treeRound', 3], ['treeOval', 2], ['treeFork', 1]], species: (t, dry) => [['crownTree', t < -2 ? 1 : 5], ['needleTree', t < 6 ? 8 : 0.5], ['flatCrown', t > 26 && dry ? 5 : 0], ['stiltroot', 4]] },\n  bloomCarpets:   { density: 3,  species: () => [['crownTree', 1]], v7: () => [['treeBlossom', 1]] },\n  gillTowers:     { density: 45, v4: () => [['gillTower', 1]], species: () => [['gillTower', 5], ['glowcapStand', 3]] },\n  tidalGardens:   { density: 55, species: () => [['tideFan', 2], ['tideTube', 2], ['tidePlate', 2]] },\n  hothouseCanopy: { density: 70, v4: () => [['hothouseTree', 1]], v7: () => [['treePalm', 2], ['treeDome', 1]], species: () => [['hothouseTree', 6], ['reedspire', 3], ['stiltroot', 3]] },\n  spiritGardens:  { density: 40, v4: () => [['spiritColony', 1]], species: () => [['spiritColony', 5], ['quartzDendrite', 3], ['silicateRosette', 2], ['latticeColony', 2],\n                                                  ['glassVeinwood', 2], ['sulfurBloom', 1.5], ['rustSpire', 1.5]] },\n  tholinReefs:    { density: 45, v4: () => [['tholinStalks', 1]], species: () => [['tholinStalks', 3], ['discMat', 3], ['hollowTower', 2], ['tholinThicket', 3],\n                                                  ['bubbleDome', 2], ['fringeGrowth', 2], ['cryoFern', 2]] },\n};\nexport const ORGANIC_BIOMES = Object.freeze(Object.keys(BIOME_ORGANICS));\nexport const MAX_ORGANIC_BITS = 48000;   // on the biggest world: the budget the deck's frame time was measured against\nconst BLOCK = 3;                          // one candidate spot in each 3 × 3 block of columns\nconst smooth01 = (t) => (t <= 0 ? 0 : t >= 1 ? 1 : t * t * (3 - 2 * t));\n// WHAT LEANS TO THE STAR (version 12): a penitente's blades lean along +x as grown, turned at its spot toward where its\n// star stands: a locked world's day point, or a turning world's equator (its noon sun), across the face it stands on.\nconst LEAN_TO_STAR = new Set(['penitenteRow']);\n\n// THE UP SIDE OF A CELL (version 10, the owner, Oct 8: \"ensure that they plan their footprint on what is considered the up\n// side of a kube\"). A cell's up is the outward axis of the world face it belongs to: the largest of its centre's three\n// coordinates, X before Y before Z on a tie. It is the walker's gravity and turf's top (bit-slot.js cellUpFace, turf.mjs\n// upOf), inlined so this twin stays import-free of them. Returns the face, 0..5 (+X −X +Y −Y +Z −Z).\nexport function upFaceOf(x, y, z) {\n  const cx = x + 0.5, cy = y + 0.5, cz = z + 0.5, ax = cx < 0 ? -cx : cx, ay = cy < 0 ? -cy : cy, az = cz < 0 ? -cz : cz;\n  if (ax >= ay && ax >= az) return cx >= 0 ? 0 : 1;\n  if (ay >= az) return cy >= 0 ? 2 : 3;\n  return cz >= 0 ? 4 : 5;\n}\n// How far a structure may move in from a face's edge to fit on its face (version 10), in columns: further than its\n// widest footprint (a bone arch's, five half-cells either side) and the low ground that leans onto the next face.\nexport const EDGE_SHIFT = 4;\n\n// A WORLD'S PIGMENTS: its leaves by its star (the first, for a woods' canopy), a petal and a glow for the world, so a\n// woods reads as one and a world's flowers agree.\n// `v16` (a world of version 16 or later, LIFE_PIGMENTS_SINCE): its petal, its bone and its slime may be one of version\n// 16's pigments (pickPlus), from the same draws (one each, in the same order), so every other pick a world makes, and\n// every shape and count of what grows, is what it was; only those three colours can differ, and most worlds keep even\n// those (a world keeps its old pick unless its draw falls in the new pigments' share).\nexport function pigmentsOf(world, v16 = false) {\n  const cls = starClassOf(world.star) || 'M', r = rngOf((world.addr || '') + '#pigments'), c = canopyOf(world);\n  r();                                                         // the draw that once picked leaf2, kept so every later pick stands\n  const plus = (list, fam) => (v16 ? pickPlus(r(), list, FAMILIES[fam].v16) : list[Math.floor(r() * list.length)]);\n  return { leaf: c.leaf, leaf2: c.leaf2, petal: plus(FAMILIES.petal.variants, 'petal'),\n           glow: FAMILIES.glow.variants[Math.floor(r() * 5)], crystal: FAMILIES.crystal.variants[Math.floor(r() * 4)], cls,\n           // the atlas's later life (version 4): each world its own colour of each, drawn after the rest so they hold\n           stone: pick(r, ['Echo', 'Arid', 'Scorched']), dark: pick(r, ['Void', 'Gloam']), rime: pick(r, FAMILIES.rime.variants),\n           pod: pick(r, FAMILIES.pod.variants), bone: plus(['Gleam', 'Echo'], 'calcite'), reef: pick(r, ['Corona', 'Halo']),\n           slime: plus(FAMILIES.slime.variants, 'slime'),\n           lime: pick(r, ['Gleam', 'Corona']), glass: pick(r, FAMILIES.obsidian.variants), gem: pick(r, FAMILIES.gem.variants), vein: pick(r, FAMILIES.vein.variants) };\n}\nconst pick = (r, a) => a[Math.floor(r() * a.length)];\n// ONE DRAW, THE OLD PICK OR A NEW PIGMENT (version 16): the draw u picks from `list` as it always did (floor(u × n)), and\n// the remainder of that, uniform in [0, 1), hands the pick to one of `extra` when it falls in their share, so every\n// pigment of the two lists is equally likely and a world whose remainder misses keeps exactly its old pick.\nfunction pickPlus(u, list, extra) {\n  const x = u * list.length, i = Math.floor(x), f = x - i, share = extra.length / (list.length + extra.length);\n  return f < share ? extra[Math.floor((f / share) * extra.length)] : list[i];\n}\n\n// ─────────────────────────────── THE BARK RULE (version 23) ───────────────────────────────\n// THE OWNER'S PICKS OF OCT 23 (\"decouple the wood and leaf colors. Leaf colors should use the current logic but wood\n// colors should have a different logic … like starlight … all color palette colors should be used … even if the frequency\n// is far rarer for some\"): w_rule STARLIGHT, w_scope PER FORM BY ITS FACE'S LIGHT, w_pal ALL 32. The light a tree's face\n// gets sets how pale its bark is, as birch and aspen keep pale and cool under a high sun: the strongest light grows pale,\n// silvery barks, ordinary light the browns, dim light weathered greys and the dimmest near black, to drink what light\n// there is. The star's colour leans the pick within each family, warm under cool stars and cool under hot ones, and one\n// tree form in eighteen takes a vivid bark instead (warm vivid under cool stars, cool vivid under hot ones, three times\n// in four). Leaves are untouched: they keep their star's handful (pigmentsOf, pgFor).\n//   EACH FORM BY ITS FACE: one bark per species and face of a world, seeded by the world, the species and the face, so a\n//   woods of one form reads as one, a locked world's day and night sides differ, and the servers and the page agree.\n//   THE LIGHT is the dose the survey ranked (scratchpad wood-survey.mjs, 600 carbon-life worlds of galaxies 930718,\n//   875150, 821577 and 664289, Oct 23): the world's starlight, its flux at the world (1 at the habitable-zone centre, as\n//   the suit charges by: sunlight.mjs) times 1 − dimAt on that face (biomes.mjs: the star class's dimming, and a locked\n//   world's night). The proposal drew the families from the trees' RANKS by that dose (over 0.86 pale, over 0.72 pale or\n//   grey, over 0.3 brown, over 0.12 grey, else dark), because the flux varies fifty-fold among life's worlds (the median is\n//   0.25); a world cannot be ranked against the others as it is generated, so those ranks are turned into the doses they\n//   stood at in the survey (its 10,854 trees: each world's forms on each of its six faces), hard-coded here.\nexport const BARK_DOSE = Object.freeze({ dark: 0.0155, grey: 0.047, brown: 0.392, pale: 0.815 });   // the doses at ranks 0.12, 0.30, 0.72 and 0.86\n// A world whose record carries no flux (one recorded before version 23, a Kubipedia model, a test's) is lit as the\n// survey's median life world.\nexport const BARK_FLUX_UNKNOWN = 0.25;\n// The families: every one of the 32 pigments is in exactly one (pale, grey, brown and dark listed cool to warm).\nexport const BARK_FAMILIES = Object.freeze({\n  pale: Object.freeze(['Lumina', 'Gleam', 'Halo', 'Glint', 'Drift', 'Corona']),\n  grey: Object.freeze(['Echo', 'Lull', 'Veil', 'Haze']),\n  brown: Object.freeze(['Arid', 'Solis', 'Scorched', 'Gloam']),\n  dark: Object.freeze(['Void', 'Fathom']),\n  warmVivid: Object.freeze(['Cinder', 'Ignition', 'Radiance', 'Nova', 'Starlight', 'Farout']),\n  coolVivid: Object.freeze(['Flash', 'Wisp', 'Spirit', 'Bloom', 'Verge', 'Tide', 'Aura', 'Ether', 'Surge', 'Reach']),\n});\n// How warm a star is, for the lean: a hot star slides a family's pick toward its cool end, a cool one toward its warm end.\nconst BARK_HEAT = { O: 0, B: 0.1, A: 0.25, F: 0.45, G: 0.55, K: 0.75, M: 0.95 };\nconst barkSlide = (u, h) => Math.min(0.999, Math.max(0, 0.55 * u + 0.45 * h + (u - 0.5) * 0.2));\nconst barkPick = (list, u) => list[Math.min(list.length - 1, Math.floor(u * list.length))];\nconst BARK_FACE = [[1, 0, 0], [-1, 0, 0], [0, 1, 0], [0, -1, 0], [0, 0, 1], [0, 0, -1]];   // +x −x +y −y +z −z (upFaceOf)\n// THE DOSE ON FACE fi of `world` (its record's flux, recorded from version 23: transient-shape.js worldRecordOf).\nexport function barkDoseOf(world, climate, fi) {\n  const f = world && Number.isFinite(world.flux) && world.flux >= 0 ? world.flux : BARK_FLUX_UNKNOWN, n = BARK_FACE[fi] || BARK_FACE[0];\n  return f * (1 - dimAt(climate, world, n[0], n[1], n[2]));\n}\n// THE BARK of species `speciesId` on face `fi` of `world` (climate: its climate.mjs climateOf, as organicsOf has it).\nexport function barkOf(world, climate, speciesId, fi) {\n  const u = rngOf(`${(world && world.addr) || ''}#bark#${speciesId}#${fi}`), h = BARK_HEAT[starClassOf(world && world.star) || 'M'];\n  if (u() < 1 / 18) {                                          // the vivid tail\n    const warm = h >= 0.5, F = BARK_FAMILIES;\n    return barkPick(u() < 0.75 ? (warm ? F.warmVivid : F.coolVivid) : (warm ? F.coolVivid : F.warmVivid), u());\n  }\n  const p = barkDoseOf(world, climate, fi), D = BARK_DOSE, F = BARK_FAMILIES;\n  const fam = p > D.pale ? F.pale : p > D.brown ? (u() < 0.5 ? F.pale : F.grey) : p > D.grey ? F.brown : p > D.dark ? F.grey : F.dark;\n  return barkPick(fam, barkSlide(u(), h));\n}\n\n// THE MATERIALS a grown organic's parts take. `glowy` turns the tips of silicon and methane life to living light, the\n// dimmer its ground the likelier (organicsOf). No tree glows, nor a gill tower's plates (the owner, Sep 30): the living\n// light of the carbon biomes is their gills, their glowcaps and their flora.\nconst SIL = { spiritColony: ['Spirit', 'Radiance'], quartzDendrite: ['Lumina', 'Glint'], silicateRosette: ['Lumina', 'Spirit'], glassVeinwood: ['Void', 'Void'],\n              latticeColony: ['Glint', 'Lumina'], sulfurBloom: ['Nova', 'Radiance'], rustSpire: ['Cinder', 'Scorched'], crystalWarren: ['Spirit', 'Radiance'] };\nconst THO = { tholinStalks: ['Scorched', 'Solis'], cryoFern: ['Corona', 'Arid'], discMat: ['Gloam', 'Solis'], hollowTower: ['Scorched', 'Cinder'],\n              tholinThicket: ['Solis', 'Arid'], bubbleDome: ['Corona', 'Arid'], fringeGrowth: ['Arid', 'Corona'], treeCloud: ['Solis', 'Arid'] };\n// `bark` (version 23, barkOf): the pigment of its wood, where its bark is its own; null below version 23, where a wood is\n// its leaves' pigment, as it always was.\nfunction materialsFor(sp, pg, glowy, bark = null, rime = false) {\n  const m = [];\n  m[P.WOOD] = sp.chem === 'methane' ? 'Gloam Tholin Biomass' : `${bark || pg.leaf} Wood`;\n  m[P.LEAF] = `${sp.id === 'reedspire' ? pg.leaf2 : pg.leaf} Leaf Biomass`;   // no tree glows (the owner, Sep 30)\n  m[P.PETAL] = `${pg.petal} Petal`;\n  m[P.GLOW] = `${pg.glow} Glow Biomass`;\n  m[P.STALK] = sp.id === 'glowcapStand' ? 'Tide Fungal Biomass' : 'Gleam Fungal Biomass';\n  m[P.CAP] = 'Halo Fungal Biomass';                    // a gill tower's plate stays pale; its gills (GLOW) are what glow\n  m[P.TIDAL] = `${pg.leaf} Tidal Biomass`;\n  m[P.FROST] = rime ? 'Halo Leaf Biomass' : m[P.LEAF];   // a needle tree's rime: pale needles below version 24 (NO_RIME_SINCE), its own leaves since\n  if (sp.chem === 'mineral') { m[P.BODY] = `${pg.crystal} Crystal`; m[P.ACCENT] = 'Lumina Crystal'; }\n  else if (sp.chem === 'silicon') { const [a, b] = SIL[sp.id]; m[P.BODY] = `${a} Silicate Biomass`; m[P.ACCENT] = glowy ? `${pg.glow} Glow Biomass` : `${b} Silicate Biomass`; }\n  else if (sp.chem === 'methane') { const [a, b] = THO[sp.id]; m[P.BODY] = `${a} Tholin Biomass`; m[P.ACCENT] = glowy ? `${pg.glow} Glow Biomass` : `${b} Tholin Biomass`; }\n  else { m[P.BODY] = sp.id === 'resinLattice' ? `${bark || pg.leaf} Wood` : `${pg.leaf} Tidal Biomass`; m[P.ACCENT] = `${pg.petal} Petal`; }\n  m[P.MELT] = 'melt';                                     // glass veinwood's veins: the lava's own look, not a material of their own\n  const own = OWN[sp.id];\n  if (own) for (const [part, name] of Object.entries(own(pg))) m[part] = name;\n  return m;\n}\n// The atlas's later growers' own materials (version 4), by part, over the rest; a mat crag's mats are its star's leaves.\nconst OWN = {\n  puffball:       () => ({ [P.BODY]: 'Solis Fungal Biomass', [P.ACCENT]: 'Gleam Fungal Biomass', [P.STALK]: 'Gloam Fungal Biomass' }),\n  shelfFungus:    () => ({ [P.BODY]: 'Scorched Fungal Biomass', [P.ACCENT]: 'Spirit Fungal Biomass', [P.CAP]: 'Tide Fungal Biomass', [P.STALK]: 'Gloam Fungal Biomass' }),\n  glowmossPillar: (pg) => ({ [P.BODY]: `${pg.dark} Stone`, [P.GLOW]: 'Ether Glow Biomass' }),\n  prismCoral:     () => ({ [P.BODY]: 'Flash Coral', [P.ACCENT]: 'Aura Coral' }),\n  boneArch:       (pg) => ({ [P.BODY]: `${pg.bone} Calcite`, [P.WOOD]: 'Gloam Wood' }),\n  landKelp:       () => ({ [P.STALK]: 'Fathom Kelp', [P.BODY]: 'Spirit Kelp', [P.ACCENT]: 'Wisp Kelp' }),\n  veinCoral:      () => ({ [P.BODY]: 'Cinder Coral', [P.ACCENT]: 'Scorched Coral' }),\n  reefVault:      (pg) => ({ [P.BODY]: `${pg.reef} Calcite`, [P.ACCENT]: 'Gleam Calcite' }),\n  fleshPod:       (pg) => ({ [P.BODY]: `${pg.pod} Pod Flesh`, [P.ACCENT]: `${pg.pod === 'Farout' ? 'Wisp' : 'Farout'} Pod Flesh` }),\n  slimeLattice:   (pg) => ({ [P.BODY]: `${pg.slime} Slime Lattice`, [P.GLOW]: 'Bloom Glow Biomass' }),\n  matCrag:        (pg) => ({ [P.BODY]: `${pg.stone} Stone` }),\n  frostFern:      (pg) => ({ [P.BODY]: `${pg.rime} Rime`, [P.ACCENT]: `${pg.rime === 'Lumina' ? 'Glint' : 'Lumina'} Rime` }),\n  crystalWarren:  () => ({ [P.STALK]: 'Echo Silicate Biomass' }),\n  butte:          () => ({ [P.BODY]: 'Arid Stone', [P.ACCENT]: 'Scorched Stone', [P.CAP]: 'Corona Stone' }),\n  rockNeedle:     () => ({ [P.BODY]: 'Echo Stone', [P.FROST]: 'Lumina Firn' }),\n  karstTower:     (pg) => ({ [P.BODY]: `${pg.lime} Stone` }),\n  glassDome:      (pg) => ({ [P.BODY]: `${pg.glass} ${FAMILIES.obsidian.suffix}` }),\n  gemCluster:     (pg) => ({ [P.BODY]: 'Void Stone', [P.GLOW]: `${pg.gem} Gem` }),\n  oreFleck:       (pg) => { const v = FAMILIES.vein.variants, i = v.indexOf(pg.vein); return { [P.BODY]: `${pg.vein} Vein`, [P.ACCENT]: `${v[(i + 1) % v.length]} Vein` }; },\n  sulfurVent:     () => ({ [P.BODY]: 'Nova Sulfur Crust', [P.ACCENT]: 'Radiance Sulfur Crust' }),\n  sastrugi:       () => ({ [P.BODY]: 'Gleam Firn', [P.ACCENT]: 'Lumina Firn' }),\n  geyserVent:     () => ({ [P.BODY]: 'Gloam Stone', [P.FROST]: 'Drift Firn' }),\n  riftShard:      () => ({ [P.BODY]: `Void ${FAMILIES.obsidian.suffix}`, [P.GLOW]: 'Spirit Gem' }),\n  driftIsle:      () => ({ [P.BODY]: 'Drift Stone', [P.ACCENT]: 'Gleam Stone' }),\n  monolith:       () => ({ [P.BODY]: 'Void Stone', [P.GLOW]: 'Aura Cor Seam' }),\n  wreck:          () => ({ [P.BODY]: 'Echo Alloy', [P.ACCENT]: 'Scorched Alloy', [P.GLOW]: 'Cinder Beacon Light' }),\n  drillRig:       () => ({ [P.BODY]: 'Scorched Alloy', [P.ACCENT]: 'Echo Alloy', [P.STALK]: 'Gleam Alloy', [P.GLOW]: 'Radiance Beacon Light' }),\n  outpostRuin:    () => ({ [P.BODY]: 'Echo Alloy', [P.ACCENT]: 'Gleam Alloy', [P.GLOW]: 'Radiance Beacon Light' }),\n  fossilRibs:     () => ({ [P.BODY]: 'Gleam Calcite', [P.ACCENT]: 'Halo Calcite' }),\n  antenna:        () => ({ [P.BODY]: 'Echo Alloy', [P.ACCENT]: 'Gleam Alloy', [P.GLOW]: 'Farout Beacon Light' }),\n  shelter:        () => ({ [P.BODY]: 'Scorched Alloy', [P.ACCENT]: 'Echo Alloy', [P.GLOW]: 'Radiance Beacon Light' }),\n  // Biome wave 6 (version 12): four of them real kubes standing as bits (KUBE_BITS).\n  mudCone:        () => ({ [P.BODY]: 'Gloam Clay', [P.ACCENT]: 'Echo Clay' }),\n  basaltColumns:  () => ({ [P.BODY]: 'Slag', [P.ACCENT]: 'Slag' }),\n  saltSpire:      () => ({ [P.BODY]: 'Halite', [P.ACCENT]: 'Halite' }),\n  mesa:           () => ({ [P.BODY]: 'Scorched Sandstone', [P.ACCENT]: 'Solis Sandstone', [P.CAP]: 'Arid Sandstone' }),\n  mesaButte:      () => ({ [P.BODY]: 'Scorched Sandstone', [P.ACCENT]: 'Solis Sandstone', [P.CAP]: 'Arid Sandstone' }),\n  buriedTrunk:    () => ({ [P.BODY]: 'Echo Stone', [P.ACCENT]: 'Void Stone' }),   // turned to stone under the ash\n  penitenteRow:   () => ({ [P.BODY]: 'Water Ice', [P.ACCENT]: 'Water Ice' }),\n  tarSeep:        () => ({ [P.BODY]: 'Carbon' }),\n  stromatolite:   () => ({ [P.BODY]: 'Corona Calcite', [P.ACCENT]: 'Echo Calcite' }),\n  thornShrub:     () => ({ [P.WOOD]: 'Gloam Wood' }),\n};\n\n// WHAT A BIOME GROWS, for Kubipedia (the atlas's biomes, version 4): the materials its species are made of, in the\n// pigments of `world` (the biome's model's world, biome-diorama.mjs, under the star the panel shows), so the list names\n// what the model shows. Each species' parts are read from three of its growths.\nexport function biomeMaterials(id, world) {\n  const B = BIOME_ORGANICS[id];\n  if (!B) return [];\n  const pg = pigmentsOf(world), out = [];\n  for (const [s, w] of (B.v12 || B.v7 || B.v4 || B.species)(15, false)) {   // the newest version's (Kubipedia shows the newest)\n    if (!(w > 0)) continue;\n    const sp = SPECIES_BY_ID.get(s), mats = materialsFor(sp, pg, false), parts = new Set();\n    for (let k = 0; k < 3; k++) { const g = growOrganic(s, `kubipedia#${s}#${k}`, 1); for (let i = 3; i < g.length; i += 4) parts.add(g[i]); }\n    for (const p of [...parts].sort((a, b) => a - b)) { const n = mats[p]; if (n && n !== 'melt' && !out.includes(n)) out.push(n); }\n  }\n  return out;\n}\n\n// A grown structure's bits turned on its face so that its +x leans toward the star (LEAN_TO_STAR): the star's way across\n// the face at direction d, a locked world's day point (climate.dir) or a turning world's equator, from the hemisphere d\n// is in. Its x runs along the face's first tangent axis and z its second (organicsOf's placing), so a quarter turn or a\n// mirror lays +x along whichever of them that way is most.\nfunction leanToStar(bits, climate, d, fi) {\n  const a = climate.dir || [0, 0, 0], mu = d[0] * a[0] + d[1] * a[1] + d[2] * a[2];\n  const g = climate.regime === 'locked' ? 1 : (mu > 0 ? -1 : 1), ax = fi >> 1, sA = g * a[(ax + 1) % 3], sB = g * a[(ax + 2) % 3];\n  const mode = (sA < 0 ? -sA : sA) >= (sB < 0 ? -sB : sB) ? (sA >= 0 ? 0 : 1) : (sB >= 0 ? 2 : 3);\n  if (mode === 0) return bits;\n  const out = bits.slice();\n  for (let i = 0; i < out.length; i += 4) {\n    const x = bits[i], z = bits[i + 2];\n    if (mode === 1) out[i] = -x; else if (mode === 2) { out[i] = z; out[i + 2] = x; } else { out[i] = z; out[i + 2] = -x; }\n  }\n  return out;\n}\n\n// THE SIZE A WORLD GROWS ITS LIFE AT: 1 on the biggest worlds (R 48 and more), 0.45 on the smallest, between in proportion.\n// A planted seedling's tree (seedlings.mjs) grows at its world's, so it matches the trees the seed grew there.\nexport const sizeKOf = (R) => (R >= 48 ? 1 : R <= 12 ? 0.45 : 0.45 + 0.55 * (R - 12) / 36);\n\n// A WORLD'S ORGANICS: every bit of every organic, placed. `ctx` is the generator's (transient-shape.js, version 3):\n//   { R, refR, HALF, world, climate, biomeAt(fi, iu, iv) → biome id | null, top(fi, iu, iv) → the column's height (its\n//     L∞ radius), tempAt(fi, iu, iv), dir(fi, iu, iv), isSolid(x, y, z), seaAt(x, y, z) → whether a cell is liquid sea,\n//     or null (no liquid sea), blockedAt(x, y, z) → whether an ice sheet fills it, or null, seaLevel | null }.\n// A spot is one column in each BLOCK × BLOCK block of a face, jittered; its biome decides whether anything grows there\n// and what, of its world's chemistry; a species that lives under water, afloat or at a shore goes only where the sea\n// puts it. Its bits map from its own frame onto the face it stands on (up is the face's outward axis), and a bit is\n// dropped where the ground is solid. THE BUDGET: a first pass finds every spot and what would grow there, and when all\n// of them together would pass MAX_ORGANIC_BITS (reckoned by each species' own size), each spot is kept by its own hash\n// at the share that fits, so a big world's woods thin evenly rather than stopping at one face. Returns { n, pos:\n// Int32Array [hx, hy, hz, …] in half-cells of the grid, mat: Uint8Array (indices into `names`; 'melt' is glass\n// veinwood's glowing veins), names, species: { id: count }, chem, pigments, org: Int32Array (each bit's organism, 0 up,\n// in the order they grow), lvl: Int16Array (each bit's height in its organism, in half-cells up from its root), faces:\n// Uint8Array (each organism's face, whose outward axis is its up) }. The last three are for mining (life-seats.mjs):\n// which bits fall together when a structure is felled, and which of them it stands on.\nexport function organicsOf(ctx) {\n  const { R, refR, HALF, world, climate } = ctx;\n  const chem = lifeChemistryOf(world, climate), pg = pigmentsOf(world, !!ctx.lifePigments);   // version 16: the six pigments' life too\n  const k = sizeKOf(R);\n  const Wd = 2 * refR, nb = Math.ceil(Wd / BLOCK), seedI = Math.floor(rngOf((world.addr || '') + '#organics')() * 2147483647);\n  const dry = !(world.sea && world.sea.kind === 'liquid');\n  const sizeOf = new Map(), size = (id) => {                  // a species' bits at this size, the mean of six of its growths\n    if (!sizeOf.has(id)) { let n = 0; for (let i = 0; i < 6; i++) n += growOrganic(id, `size#${id}#${i}`, k).length / 4; sizeOf.set(id, n / 6); }\n    return sizeOf.get(id); };\n  // WHERE A COLUMN'S GROUND STANDS and what the sea does there: its top t, the cell just over it (`above`), whether that\n  // is sea (`wet`), how many more cells of sea stand over it (`depth`, up to 12) and whether the water ended under that\n  // (`topped`: the cell over its surface is open), or null under an ice sheet, where nothing roots.\n  const cellOn = (fi, iu, iv, t, h) => { const ax = fi >> 1, c = [0, 0, 0]; c[ax] = (fi & 1) ? -t - 1 - h : t + h; c[(ax + 1) % 3] = iu - refR; c[(ax + 2) % 3] = iv - refR; return c; };\n  const standAt = (fi, iu, iv) => {\n    const t = ctx.top(fi, iu, iv), above = cellOn(fi, iu, iv, t, 0), wet = ctx.seaAt ? ctx.seaAt(above[0], above[1], above[2]) : 0;\n    if (ctx.blockedAt && ctx.blockedAt(above[0], above[1], above[2])) return null;\n    let depth = 0, topped = !wet;\n    if (wet) while (depth < 12) { const c = cellOn(fi, iu, iv, t, depth + 1); if (!ctx.seaAt(c[0], c[1], c[2])) { topped = true; break; } depth++; }\n    return { t, above, wet, depth, topped };\n  };\n  const habitatOk = (hab, st) => (hab === 'under' ? st.wet && st.depth >= 2 : hab === 'afloat' ? !!st.wet : hab === 'rise' ? !st.wet || st.depth <= 3\n    : hab === 'shallows' ? !!st.wet && st.depth <= 1\n    : hab === 'shore' ? (st.wet ? st.depth <= 1 : ctx.seaLevel != null && st.t <= ctx.seaLevel + 1) : !st.wet);\n  // THE SPOTS: [fi, iu, iv, species index, depth], and what they would come to.\n  const spots = [];\n  let want = 0;\n  for (let fi = 0; fi < 6; fi++) for (let bu = 0; bu < nb; bu++) for (let bv = 0; bv < nb; bv++) {\n    const iu = Math.min(Wd - 1, bu * BLOCK + Math.floor(hash4(fi, bu, bv, seedI) * BLOCK)), iv = Math.min(Wd - 1, bv * BLOCK + Math.floor(hash4(fi, bv, bu, seedI + 1) * BLOCK));\n    const id = ctx.biomeAt(fi, iu, iv), B = id && BIOME_ORGANICS[id];\n    if (!B || (id === 'crystalFields' && !ctx.crystalBits) || hash4(fi, iu, iv, seedI + 2) * 100 >= (ctx.model && B.model ? B.model : B.density)) continue;\n    const list = (ctx.v12 && B.v12 ? B.v12 : ctx.trees7 && B.v7 ? B.v7 : ctx.atlas4 && B.v4 ? B.v4 : B.species)(ctx.treeT != null ? ctx.treeT : ctx.tempAt(fi, iu, iv), dry).filter(([s, w]) => w > 0 && (SPECIES_BY_ID.get(s).chem === chem || SPECIES_BY_ID.get(s).chem === 'mineral'));\n    if (!list.length) continue;\n    // Where it stands: the column's top, and what the sea does there.\n    const st = standAt(fi, iu, iv);\n    if (!st) continue;                                                                    // under an ice sheet: nothing roots\n    const { t, depth } = st;\n    const fits = list.filter(([s]) => habitatOk(SPECIES_BY_ID.get(s).habitat, st));\n    if (!fits.length) continue;\n    let sum = 0;\n    for (const [, w] of fits) sum += w;\n    let x = hash4(fi, iu, iv, seedI + 3) * sum, pick = fits[fits.length - 1][0];\n    for (const [s, w] of fits) { if (x < w) { pick = s; break; } x -= w; }\n    spots.push(fi, iu, iv, SPECIES_IDS.indexOf(pick), depth, t);\n    want += size(pick);\n  }\n  const keep = want > 0.9 * MAX_ORGANIC_BITS ? 0.9 * MAX_ORGANIC_BITS / want : 1;   // a tenth spare, for spots larger than their species' mean\n  // PLANNED ON ITS UP SIDE (version 10, ctx.edgeUp; the owner, Oct 8). A structure grows up its anchor's face, so the\n  // whole of it must stand on that face: the cell it grows from (`above`, or the open cell over the water for what floats)\n  // must have that face's up (upFaceOf) and stand on ground, or on the water, along it; every bit's column must be one of\n  // the face's own columns (none hangs out past the edge over the land rolling away under it); and every bit's cell must\n  // be the face's (none reaches across the diagonal onto the next face's ground, sideways to its gravity, or into it). A\n  // spot near an edge whose structure does not fit moves in, a column at a time (EDGE_SHIFT at most), first just far\n  // enough that its footprint's columns are the face's, then on where the low ground there leans onto the next face; it\n  // keeps its shape, its seed and its species, and goes only where its biome and its habitat still hold. And it must\n  // stand: some bit of its lowest layer on the ground under it (or on the water), not an arch's two feet both over a dip.\n  // Where it cannot fit it is not grown. Before version 10 a spot grew where it was put, along its face's axis: on seven\n  // worlds measured, 91 of 3,968 structures reached onto the next face and 271 hung bits out past the edge, some afoot in air.\n  const planUpSide = (fi, iu, iv, sp, bio, bits, ju, jv) => {\n    let lu = 1e9, hu = -1e9, lv = 1e9, hv = -1e9;\n    for (let i = 0; i < bits.length; i += 4) { const a = bits[i], b = bits[i + 2]; if (a < lu) lu = a; if (a > hu) hu = a; if (b < lv) lv = b; if (b > hv) hv = b; }\n    // A bit at half-cell 2·u + j + b lies in column iu + floor((j + b) / 2): the anchor's columns that keep all of them on the face.\n    const uLo = -Math.floor((ju + lu) / 2), uHi = Wd - 1 - Math.floor((ju + hu) / 2), vLo = -Math.floor((jv + lv) / 2), vHi = Wd - 1 - Math.floor((jv + hv) / 2);\n    if (uLo > uHi || vLo > vHi) return null;\n    const su = iu < uLo ? uLo : iu > uHi ? uHi : iu, sv = iv < vLo ? vLo : iv > vHi ? vHi : iv;\n    // Further in, a column at a time, along the axes whose edge is near (where low ground leans onto the next face).\n    const eu = su < EDGE_SHIFT ? 1 : su >= Wd - EDGE_SHIFT ? -1 : 0, ev = sv < EDGE_SHIFT ? 1 : sv >= Wd - EDGE_SHIFT ? -1 : 0;\n    const ax = fi >> 1, sg = (fi & 1) ? -1 : 1, hp = [0, 0, 0];\n    for (let k = 0; k <= EDGE_SHIFT; k++) {\n      if (k > 0 && !eu && !ev) break;\n      const cu = su + k * eu, cv = sv + k * ev;\n      if (cu < uLo || cu > uHi || cv < vLo || cv > vHi || Math.abs(cu - iu) > EDGE_SHIFT || Math.abs(cv - iv) > EDGE_SHIFT) break;\n      if ((cu !== iu || cv !== iv) && ctx.biomeAt(fi, cu, cv) !== bio) continue;\n      const st = standAt(fi, cu, cv);\n      if (!st || !habitatOk(sp.habitat, st)) continue;\n      const afloat = sp.habitat === 'afloat', lift = afloat ? st.depth + 1 : 0;\n      if (afloat && !st.topped) continue;                                               // it floats on the water's top\n      const anchor = cellOn(fi, cu, cv, st.t, lift), foot = cellOn(fi, cu, cv, st.t, lift - 1);\n      if (upFaceOf(anchor[0], anchor[1], anchor[2]) !== fi) continue;                   // its cell's up is the next face's\n      if (afloat ? !ctx.seaAt(foot[0], foot[1], foot[2]) : !ctx.isSolid(foot[0], foot[1], foot[2])) continue;   // on ground, or on the water\n      const baseH = sg > 0 ? 2 * (st.t + lift) : -2 * (st.t + lift) - 1, hu0 = 2 * (cu - refR) + ju, hv0 = 2 * (cv - refR) + jv;\n      let onFace = true, stands = false;\n      for (let i = 0; i < bits.length && onFace; i += 4) {\n        hp[ax] = baseH + sg * bits[i + 1]; hp[(ax + 1) % 3] = hu0 + bits[i]; hp[(ax + 2) % 3] = hv0 + bits[i + 2];\n        const x = Math.floor(hp[0] / 2), y = Math.floor(hp[1] / 2), z = Math.floor(hp[2] / 2);\n        if (upFaceOf(x, y, z) !== fi) onFace = false;\n        else if (!stands && bits[i + 1] <= 1 && !ctx.isSolid(x, y, z)) {          // a bit of its lowest layer, on what holds it up\n          const b = [x, y, z]; b[ax] -= sg;\n          stands = afloat ? !!ctx.seaAt(b[0], b[1], b[2]) : ctx.isSolid(b[0], b[1], b[2]);\n        }\n      }\n      if (onFace && stands) return { iu: cu, iv: cv, t: st.t, depth: st.depth };\n    }\n    return null;\n  };\n  // THE GROWTH, of the spots kept.\n  const names = [], nameIdx = new Map(), pos = [], mat = [], count = {}, org = [], lvl = [], faces = [], orgSp = [];\n  const matOf = (name) => { let i = nameIdx.get(name); if (i == null) { i = names.length; names.push(name); nameIdx.set(name, i); } return i; };\n  // EACH TREE FORM ITS OWN LEAVES (the owner, Oct 2: \"mix and match leaf types among those that can exist for a given star\n  // … a separate selection for each tree geometry on a world\"). On a version 7 world every tree form draws its own\n  // pigment from its star's handful (LEAF_BY_CLASS), seeded by the world and the form, so one world's round crowns,\n  // ovals and forks may be three different greens; its wood is its own leaves' (materialsFor). A model (Kubipedia's,\n  // ctx.model) keeps one canopy for every tree, the one its swatch row shows.\n  const treePg = new Map();\n  const pgFor = (sp) => {\n    if (!(ctx.trees7 && TREE_FORMS.has(sp.id) && sp.chem === 'carbon') || (world && world.canopy) || ctx.model) return pg;   // a model shows its swatch's one\n    let q = treePg.get(sp.id);\n    if (!q) { const leafs = LEAF_BY_CLASS[pg.cls] || [pg.leaf];\n      q = { ...pg, leaf: leafs[Math.floor(rngOf((world.addr || '') + '#treeLeaf#' + sp.id)() * leafs.length)] }; treePg.set(sp.id, q); }\n    return q;\n  };\n  // EACH FORM ITS OWN BARK, BY ITS FACE'S LIGHT (version 23, ctx.bark: the BARK RULE above), worked out once per species\n  // and face; null below version 23, where a wood is its leaves' (materialsFor).\n  const barkMemo = new Map();\n  const barkAt = (id, fi) => {\n    if (!ctx.bark) return null;\n    const k = id + '|' + fi;\n    if (!barkMemo.has(k)) barkMemo.set(k, barkOf(world, climate, id, fi));\n    return barkMemo.get(k);\n  };\n  for (let s = 0; s < spots.length && pos.length < 3 * MAX_ORGANIC_BITS; s += 6) {\n    const fi = spots[s], iu = spots[s + 1], iv = spots[s + 2], sp = SPECIES[spots[s + 3]];\n    let depth = spots[s + 4], t = spots[s + 5];\n    if (keep < 1 && hash4(fi, iu, iv, seedI + 8) >= keep) continue;\n    const ax = fi >> 1, sg = (fi & 1) ? -1 : 1;\n    let bits = growOrganic(sp.id, `${world.addr || ''}#${fi}.${iu}.${iv}`, k);\n    if (LEAN_TO_STAR.has(sp.id)) bits = leanToStar(bits, climate, ctx.dir(fi, iu, iv), fi);\n    const ju = hash4(fi, iu, iv, seedI + 6) < 0.5 ? 0 : 1, jv = hash4(fi, iu, iv, seedI + 7) < 0.5 ? 0 : 1;\n    let u = iu - refR, v = iv - refR;\n    if (ctx.edgeUp) {                                                    // version 10: planned on its up side (planUpSide)\n      const p = planUpSide(fi, iu, iv, sp, ctx.biomeAt(fi, iu, iv), bits, ju, jv);\n      if (!p) continue;\n      u = p.iu - refR; v = p.iv - refR; t = p.t; depth = p.depth;\n    }\n    // Its light: the dimmer the ground, the likelier its tips glow, by the square of how dim (a K star's here and there,\n    // an M dwarf's much of the time, a locked world's night side and a rogue world all of it).\n    const d = ctx.dir(fi, iu, iv), dm = dimAt(climate, world, d[0], d[1], d[2]), glowy = hash4(fi, iu, iv, seedI + 4) < dm * dm;\n    const mats = materialsFor(sp, pgFor(sp), glowy, sp.chem === 'carbon' ? barkAt(sp.id, fi) : null, !ctx.noRime);\n    // Afloat: on the sea's top; under the water and on land: from the ground.\n    const lift = sp.habitat === 'afloat' ? depth + 1 : 0;\n    const hu0 = 2 * u + ju, hv0 = 2 * v + jv;\n    const baseH = sg > 0 ? 2 * (t + lift) : -2 * (t + lift) - 1;\n    let placed = 0;\n    for (let i = 0; i < bits.length; i += 4) {\n      const hp = [0, 0, 0];\n      hp[ax] = baseH + sg * bits[i + 1]; hp[(ax + 1) % 3] = hu0 + bits[i]; hp[(ax + 2) % 3] = hv0 + bits[i + 2];\n      const cx = Math.floor(hp[0] / 2), cy = Math.floor(hp[1] / 2), cz = Math.floor(hp[2] / 2);\n      if (cx < -HALF || cx >= HALF || cy < -HALF || cy >= HALF || cz < -HALF || cz >= HALF || ctx.isSolid(cx, cy, cz)) continue;\n      if (sp.habitat === 'under' && !ctx.seaAt(cx, cy, cz)) continue;      // a tidal growth stays under the surface\n      pos.push(hp[0], hp[1], hp[2]); mat.push(matOf(mats[bits[i + 3]])); org.push(faces.length); lvl.push(bits[i + 1]); placed++;\n    }\n    if (placed) { count[sp.id] = (count[sp.id] || 0) + 1; faces.push(fi); orgSp.push(spots[s + 3]); }\n  }\n  const n = Math.min(pos.length / 3, MAX_ORGANIC_BITS);\n  return { n, pos: Int32Array.from(pos.slice(0, 3 * n)), mat: Uint8Array.from(mat.slice(0, n)), names, species: count, chem, pigments: pg,\n           org: Int32Array.from(org.slice(0, n)), lvl: Int16Array.from(lvl.slice(0, n)), faces: Uint8Array.from(faces),\n           orgSp: Uint16Array.from(orgSp),     // each organism's species (an index into SPECIES): what the crosshair names it\n           // …and the bark a tree of a species grows on a face of this world (version 23: barkOf), for a seedling planted\n           // with no bark of its own (seedlings.mjs); null below version 23.\n           barkOf: ctx.bark ? barkAt : null };\n}\n"],"mappings":"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","names":["F","n","pick","k"],"file":"organics.mjs"}