{"version":3,"sources":["alien-peoples.mjs"],"sourcesContent":["// ALIEN PEOPLES (world version 17; the owner's confirmed plan of Oct 13: every rule on its recommendation, all eighteen\n// peoples approved). About one rocky world in a hundred whose climate fits one of six groups belongs to a people of its\n// own: one of three kinds (friendly, neutral, aggressive, even thirds), in one to three towns by the world's size, each\n// ringed by the people's settlement biome. Their residents walk routes and keep schedules worked out from the shared\n// clock, so every screen sees the same resident in the same place with nothing simulated. The whole world is theirs:\n// land, walk, look, use their services; nobody mines or builds on it.\n//\n// PURE AND TWIN-SAFE, as biomes.mjs and organics.mjs are: no DOM, no clock of its own (every time is handed in), only\n// + − × ÷, sqrt, floor and integer hashing, so the copies in functions/lib and zone-server/lib (byte-identical,\n// generate-version-hash.js checks) answer exactly as the page does. transient-shape.js lays the towns into the ground;\n// this module says who lives where, what their towns are made of, where each resident is at a moment, and the rules a\n// server re-checks (a catch, a bump, a hit, a barter, a request, shelter, the stash).\nimport { lifeChemistryOf } from './biomes.mjs';\nimport { planTown19, residentAt19, TOWNS19_SINCE } from './alien-towns.mjs';   // version 19: city layouts and town interiors (the owner, Oct 19)\n\nexport const ALIENS_SINCE = 17;                  // world version 17 (transient-shape.js ROCKY_GENERATORS)\nexport const ALIEN_RATE = 100;                   // one fitting world in a hundred (the owner: \"1 in 100 rocky worlds\")\nexport const KINDS = Object.freeze(['friendly', 'neutral', 'aggressive']);\n\n// ---- THE RULES' NUMBERS (the confirmed recommendations) ----------------------------------------------------------\nexport const RULES = Object.freeze({\n  leash: 16,                 // a raider gives up beyond 16 kubes of its route\n  sightLostS: 3,             // …or once it has not seen you for 3 s\n  chaseFraction: 0.9,        // at 90% of the player's run\n  runSpeed: 9,               // the walker's run (system-view.js WALK.speed 6 × runMult 1.5), kubes a second\n  hitDamage: 10,             // health a hit\n  hitEveryMs: 1000,          // at most once a second per raider\n  hitReach: 1.5,             // kubes, body centre to body centre (feet to feet, measured in 3D)\n  bumpReach: 0.85,           // a resident's 0.45 radius and the walker's 0.3, and a little: touching\n  bumpSpeed: 0.6,            // the player must be moving into it (kubes a second toward it): no crowding or lingering\n  bumpHostileMs: 60000,      // a bumped neutral (and its two nearest neighbours) stays hostile a minute\n  bumpSpread: 2,\n  worldDayMs: 1800000,       // a world-day: an average rocky world's day (sunlight.mjs PLANET_DAY, 30 minutes)\n  requestsMax: 3,            // up to three requests a friendly town at a time, new each world-day\n  offersMax: 3,              // a neutral stall's offers a world-day\n  useReach: 5,               // kubes from a service point, stall or stash a player may use it from\n  lodNear: 64,               // residents are drawn as figures within 64 kubes; farther, only their town's lights\n  walkSpeed: 1.3,            // a resident's walk, kubes a second\n  shelterHealS: 4,           // shelter heals over a few seconds\n  // THE SERVERS' SLACK: a report is checked against where the resident's route had it at that moment and where the\n  // server knows the player was; a resident that chases has left its route by at most the leash, the frames in flight\n  // move a runner a few kubes, and the clocks of two machines differ by a little.\n  slackKubes: 4,\n  slackMs: 8000,\n});\n// When world-day `n` starts and which one a moment is in (a pure function of wall-clock milliseconds since the epoch).\nexport const worldDayOf = (ms) => Math.floor(ms / RULES.worldDayMs);\n\n// ---- HASHES (integer only) -------------------------------------------------------------------------------------\nexport function hash01(s) {\n  let h = 2166136261;\n  for (let i = 0; i < s.length; i++) h = Math.imul(h ^ s.charCodeAt(i), 16777619);\n  h ^= h >>> 15; h = Math.imul(h, 0x2c1b3c6d); h ^= h >>> 12; h = Math.imul(h, 0x297a2d39); h ^= h >>> 15;\n  return (h >>> 0) / 4294967296;\n}\nexport function rngOf(s) {\n  let a = Math.floor(hash01(s) * 4294967296) >>> 0;\n  return () => {                                  // mulberry32\n    a = (a + 0x6D2B79F5) >>> 0;\n    let t = Math.imul(a ^ (a >>> 15), 1 | a);\n    t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n  };\n}\n\n// ---- THE SIX CLIMATE GROUPS (the proposal's CLIMATES), read the way biomes.mjs's world rules read a world ----------\n// `world` is what the biomes follow ({ addr, star, tempC, pressureMbar, airless, sea }, transient-shape.js\n// recordedWorldOf), `climate` its climate.mjs climateOf (for lifeChemistryOf's range). First match wins, in this order:\n// a methane sea, a furnace world's silicon life, a temperate living world, ice and snow, dry and hot, airless.\nconst mbarOf = (w) => (w.airless ? 0 : (+w.pressureMbar || 0));\nconst seaLiquid = (w) => !!(w.sea && w.sea.kind === 'liquid');\nconst waterSea = (w) => !!(w.sea && /Water/.test(w.sea.name || ''));\nexport const CLIMATE_GROUPS = Object.freeze([\n  { id: 'methane', name: 'Methane worlds', desc: 'Methane seas, -200 to -150 °C: tholin reefs, cryo ferns, bubble fens, methane mats',\n    fits: (w, chem) => seaLiquid(w) && /Methane/.test(w.sea.name || '') && w.tempC >= -200 && w.tempC <= -150 },\n  { id: 'furnace', name: 'Furnace worlds', desc: 'Silicon life on hot rock, 150-900 °C: spirit gardens, glass veinwood, glass shields, ash',\n    fits: (w, chem) => chem === 'silicon' && w.tempC >= 150 && w.tempC <= 900 },\n  { id: 'temperate', name: 'Temperate living worlds', desc: 'Carbon life, water, 0-40 °C, breathable: woods, bloom carpets, lichen steppe, arid parkland',\n    fits: (w, chem) => chem === 'carbon' && w.tempC >= 0 && w.tempC <= 40 && mbarOf(w) >= 100 },\n  { id: 'cold', name: 'Ice and snow', desc: 'Frozen water worlds, -150-0 °C: glaciers, firn fields, penitentes, rime woods, frost ferns',\n    fits: (w) => waterSea(w) && w.tempC >= -150 && w.tempC < 0 },\n  { id: 'arid', name: 'Dry and hot', desc: 'No liquid sea, 10-250 °C: dune seas, mesas, slot canyons, salt flats, banded scarps',\n    fits: (w) => !seaLiquid(w) && w.tempC >= 10 && w.tempC <= 250 && mbarOf(w) >= 10 },\n  { id: 'airless', name: 'Airless worlds', desc: 'Vacuum or a trace of air: regolith plains, crater fields, mineral mare and hills',\n    fits: (w) => mbarOf(w) < 10 && !seaLiquid(w) && w.tempC > -240 && w.tempC < 400 },\n]);\nexport function climateGroupOf(world, climate) {\n  if (!world || typeof world.tempC !== 'number') return null;\n  const chem = climate ? lifeChemistryOf(world, climate) : null;\n  for (const g of CLIMATE_GROUPS) if (g.fits(world, chem)) return g.id;\n  return null;\n}\n\n// ---- THE EIGHTEEN PEOPLES (the proposal's PEOPLES, every one approved) ------------------------------------------\n// `biome` is the settlement biome round its towns (biomes.mjs, since 17), `body` its body plan (alien-bodies.mjs),\n// `res` its residents' colour, `town` its layout. `goods` are what its towns give (gifts, barter), `wants` what they ask.\nconst P = (id, climate, kind, name, biome, biomeLabel, o) => Object.freeze({ id, climate, kind, name, biome, biomeLabel, ...o });\nexport const PEOPLES = Object.freeze([\n  P('loamwrights', 'temperate', 'friendly', 'Loamwrights', 'terraceGardens', 'terrace gardens', { body: 'short and broad, four-armed gardeners', res: '#e0c080',\n    text: 'Farmers who terrace hillsides into stepped gardens. Their well refills your air and heals you; they ask for seeds, wood and lanterns, and gift crafted kubes in return.',\n    wants: ['Verge Wood', 'Bloom Wood', 'Radiance Beacon Light', 'Silica', 'Copper'], goods: ['Arid Biolith Bricks', 'Solis Timber', 'Corona Biolith Herringbone', 'Reinforced Glass'] }),\n  P('driftherders', 'temperate', 'neutral', 'Driftherders', 'herdCommons', 'herd commons', { body: 'tall, long-necked herders', res: '#d8c8a0',\n    text: 'Herders who walk their flocks between fenced commons on fixed rounds. They trade one item for another at their stall, and only turn on you if you bump into one.',\n    wants: ['Iron', 'Copper', 'Steel'], goods: ['Drift Timber', 'Drift Wood', 'Arid Biolith Tiles', 'Scorched Biolith Flagstone'] }),\n  P('thornkin', 'temperate', 'aggressive', 'Thornkin', 'thornBastions', 'thorn bastions', { body: 'quick, spined hunters', res: '#c05040',\n    text: 'Raiders behind palisades in thorn thickets. Patrols leave the bastion on clock-set rounds; get caught and they hit you and grab a stack from your pack, then run home with it.',\n    wants: [], goods: [] }),\n  P('hearthfolk', 'cold', 'friendly', 'Hearthfolk', 'hearthHollows', 'hearth hollows', { body: 'round, furred and slow', res: '#c89060',\n    text: 'Villages of glowing igloos in sheltered bowls. Their hearth warms you against the cold and refills your suit; they ask for fuel and lanterns.',\n    wants: ['Carbon', 'Radiance Beacon Light', 'Cinder Beacon Light', 'Verge Wood'], goods: ['Gleam Biolith Bricks', 'Aerogel', 'Halo Biolith Herringbone', 'Lumina Biolith Flagstone'] }),\n  P('rimewalkers', 'cold', 'neutral', 'Rimewalkers', 'iceFisheries', 'ice fisheries', { body: 'tall, stilt-legged fishers', res: '#7a8ca0',\n    text: 'Fishers who cut holes in frozen lakes and stand at them for hours. They barter catch for metal.',\n    wants: ['Iron', 'Aluminum', 'Titanium', 'Steel'], goods: ['Water Ice', 'Drift Biolith Flagstone', 'Gleam Biolith Tiles', 'Aerogel'] }),\n  P('frostfang', 'cold', 'aggressive', 'Frostfang', 'fangRidges', 'fang ridges', { body: 'low, pale pack hunters', res: '#e8f0f8',\n    text: 'Packs that keep ice towers among penitente spikes. Their patrols cut across the snowfields; the spikes are the best cover.',\n    wants: [], goods: [] }),\n  P('shadecasters', 'arid', 'friendly', 'Shadecasters', 'shadeTerraces', 'shade terraces', { body: 'thin, wide-hooded', res: '#f0e0c0',\n    text: 'Cliff dwellers who carve homes into mesas and stretch shade between them. Their cisterns refill water and air; they ask for chiselled stone and lanterns.',\n    wants: ['Water Ice', 'Radiance Beacon Light', 'Silica', 'Halite'], goods: ['Arid Biolith Stacked Bricks', 'Corona Biolith Tiles', 'Solis Biolith Fluted', 'Arid Glass'] }),\n  P('dunecombers', 'arid', 'neutral', 'Dunecombers', 'caravanWells', 'caravan wells', { body: 'six-legged, low riders', res: '#8a5a30',\n    text: 'Caravans that move camp between wells on a set calendar. Barter at the camp.',\n    wants: ['Water Ice', 'Iron', 'Copper'], goods: ['Solis Timber', 'Corona Biolith Basketweave', 'Solis Biolith Herringbone', 'Halite'] }),\n  P('sandreavers', 'arid', 'aggressive', 'Sandreavers', 'reaverSlots', 'reaver slots', { body: 'lean, masked raiders', res: '#d06030',\n    text: 'Raiders in slot canyons with lookout towers on the rims. They see far across open sand; the canyons themselves are where you can lose them.',\n    wants: [], goods: [] }),\n  P('kilnborn', 'furnace', 'friendly', 'Kilnborn', 'kilnGardens', 'kiln gardens', { body: 'crystal-skinned, glowing silicon people', res: '#9fe8ff',\n    text: 'Silicon people who fire their homes like pottery and grow crystal gardens. Their forges recharge your suit; they ask for metals and give cut crystal.',\n    wants: ['Iron', 'Copper', 'Titanium', 'Aluminum'], goods: ['Glint Crystal', 'Halo Crystal', 'Scorched Biolith Bricks', 'Glint Glass'] }),\n  P('glassminders', 'furnace', 'neutral', 'Glassminders', 'tektiteFields', 'tektite fields', { body: 'slow, plated tenders', res: '#b8a0d0',\n    text: 'Tenders of the glass shields who walk the same slow loops every day, polishing. They barter tektite for anything cold.',\n    wants: ['Water Ice', 'Halite', 'Aerogel'], goods: ['Void Biolith Polished', 'Fathom Biolith Polished', 'Fathom Glass', 'Silicon Carbide'] }),\n  P('cinderhost', 'furnace', 'aggressive', 'Cinderhost', 'ashWarrens', 'ash warrens', { body: 'small, many, ember-bright', res: '#ff8c3a',\n    text: 'A swarm that boils out of warrens in the ash on a fixed rhythm. Each one hits lightly; the danger is many at once. Their warrens are mounds with vents.',\n    wants: [], goods: [] }),\n  P('weavers', 'methane', 'friendly', 'Tholin Weavers', 'weaverShores', 'weaver shores', { body: 'many-limbed weavers', res: '#ffd090',\n    text: 'They weave tholin into domed halls along methane shores. Their halls are warm inside and refill your suit; they ask for glow biomass and metal.',\n    wants: ['Radiance Beacon Light', 'Iron', 'Copper', 'Aluminum'], goods: ['Solis Biolith Basketweave', 'Corona Biolith Basketweave', 'Solis Glass', 'Hydrocarbon Ice'] }),\n  P('mistdrifters', 'methane', 'neutral', 'Mistdrifters', 'driftFens', 'drift fens', { body: 'floating, sail-finned', res: '#e8e0f0',\n    text: 'They drift over the methane fens on slow currents and moor at stilt platforms. They barter, and drift off if bumped (then come back angry).',\n    wants: ['Iron', 'Steel', 'Carbon'], goods: ['Lull Biolith Basketweave', 'Halo Biolith Basketweave', 'Methane Ice', 'Hydrocarbon Ice'] }),\n  P('hazeclaws', 'methane', 'aggressive', 'Hazeclaws', 'hazeReefs', 'haze reefs', { body: 'clawed ambushers', res: '#c06a40',\n    text: 'Ambushers who wait in the reefs where methane haze hangs thick, on a clock you can learn. Their reef forts are low and hard to see.',\n    wants: [], goods: [] }),\n  P('domekeepers', 'airless', 'friendly', 'Domekeepers', 'domeCraters', 'dome craters', { body: 'small, suited, quick', res: '#f0f0f0',\n    text: 'They live in sealed domes in crater floors, the one place on an airless world with air to spare. Their domes refill your oxygen and let you rest; they ask for ice and metal.',\n    wants: ['Water Ice', 'Iron', 'Titanium', 'Aluminum'], goods: ['Reinforced Glass', 'Titanium', 'Echo Biolith Tiles', 'Gleam Biolith Flagstone'] }),\n  P('dustminers', 'airless', 'neutral', 'Dustminers', 'dustQuarries', 'dust quarries', { body: 'heavy, wide-footed', res: '#c8b070',\n    text: 'Quarry workers who cut the regolith in terraces on a strict shift clock. They barter metals for ice.',\n    wants: ['Water Ice', 'Carbon'], goods: ['Iron', 'Aluminum', 'Titanium', 'Lull Biolith Bricks'] }),\n  P('corsairs', 'airless', 'aggressive', 'Crater Corsairs', 'corsairWrecks', 'corsair wrecks', { body: 'armoured scavengers', res: '#d04a3a',\n    text: 'Scavengers who build forts from wrecked ships. On a world with no air, being caught far from orbit is the danger; their wrecks give the best cover.',\n    wants: [], goods: [] }),\n]);\nconst PEOPLE_BY_ID = new Map(PEOPLES.map((p) => [p.id, p]));\nexport const peopleById = (id) => PEOPLE_BY_ID.get(id) || null;\nexport const peopleFor = (climate, kind) => PEOPLES.find((p) => p.climate === climate && p.kind === kind) || null;\nexport const SETTLEMENT_BIOMES = Object.freeze(PEOPLES.map((p) => p.biome));\nexport const peopleOfBiome = (biomeId) => PEOPLES.find((p) => p.biome === biomeId) || null;\n\n// ---- WHAT THEIR TOWNS ARE MADE OF: ONE TABLE ---------------------------------------------------------------------\n// Every role a town's cells take, per people, as the name of a catalogue kube: THE BUILDING KUBES (building-kubes.mjs,\n// the owner's 24 approved, merged Oct 13: Chiselled Bricks, Mineral Pillar, Buffed Mineral, Mineral Tiles, Dressed\n// Mineral, Rammed and Sintered Regolith, Regolith Concrete, Wood Panels and Slats, Tread Plate, Steel Grate, Corrugated\n// Aluminum, Vent Grille, Hazard Stripes, Ice Bricks, Snow Blocks, the Lantern Kube, Glow Strip Panels, Hull Plating, the\n// Honeycomb and Cor Inlaid Panels, Cut Crystal, Polished Tektite), each people's in the proposal's materials, with a few\n// of the world's own (regolith under a plot, glass, crops of its life). A town's cells are generated terrain, so a change\n// to this table once version 17 has shipped is a new world version (tests/aliens.test.mjs freezes them).\n//   wall, wall2  walls (wall2 the accent: a corner's course, a band; a Mineral Pillar there stacks as a pillar)\n//   roof         roofs and dome tops        trim   posts, door frames, fences, palisade posts\n//   floor        under a building           path   streets          plaza  the plaza and the service point's ring\n//   fill         ground laid under the levelled plot   ground  the plot's own top between streets, and the ramp's\n//   crop         fields' rows               glass  windows and dome glass   glow  lanterns, the service point's light\n//   stash        the raiders' stash (aggressive towns), the service point's rim (friendly and neutral)\nconst M = (wall, wall2, roof, trim, floor, path, plaza, fill, ground, crop, glass, glow, stash) =>\n  Object.freeze({ wall, wall2, roof, trim, floor, path, plaza, fill, ground, crop, glass, glow, stash });\nexport const PEOPLE_MATERIALS = Object.freeze({\n  // Rammed Regolith, Wood Panels, Lanterns, biolith bricks\n  loamwrights:  M('Arid Rammed Regolith', 'Solis Chiselled Bricks', 'Solis Wood Panels', 'Gloam Wood Slats', 'Solis Wood Panels', 'Arid Chiselled Bricks', 'Corona Mineral Tiles', 'Arid Regolith', 'Gloam Regolith', 'Verge Wood', 'Reinforced Glass', 'Lantern Kube', 'Lull Dressed Mineral'),\n  // Wood Slats, Rammed Regolith\n  driftherders: M('Drift Wood Slats', 'Gloam Wood Slats', 'Solis Wood Slats', 'Gloam Wood Panels', 'Arid Rammed Regolith', 'Scorched Rammed Regolith', 'Arid Mineral Tiles', 'Arid Regolith', 'Arid Regolith', 'Bloom Wood', 'Reinforced Glass', 'Lantern Kube', 'Lull Dressed Mineral'),\n  // Wood Slats, Hazard Stripes, Dressed Mineral\n  thornkin:     M('Gloam Wood Slats', 'Scorched Wood Slats', 'Void Wood Panels', 'Ignition Hazard Stripes', 'Veil Dressed Mineral', 'Haze Dressed Mineral', 'Veil Buffed Mineral', 'Scorched Regolith', 'Scorched Regolith', 'Verge Wood', 'Void Glass', 'Lantern Kube', 'Titan Plate'),\n  // Ice Bricks, Snow Blocks, Lanterns\n  hearthfolk:   M('Ice Bricks', 'Gleam Snow Blocks', 'Lumina Snow Blocks', 'Gleam Snow Blocks', 'Halo Buffed Mineral', 'Lumina Snow Blocks', 'Halo Buffed Mineral', 'Gleam Regolith', 'Lumina Snow Blocks', 'Halo Cut Crystal', 'Reinforced Glass', 'Lantern Kube', 'Echo Dressed Mineral'),\n  // Snow Blocks, Ice Bricks, Wood Slats\n  rimewalkers:  M('Drift Snow Blocks', 'Ice Bricks', 'Ice Bricks', 'Drift Wood Slats', 'Gleam Mineral Tiles', 'Gleam Snow Blocks', 'Drift Buffed Mineral', 'Drift Regolith', 'Drift Snow Blocks', 'Water Ice', 'Drift Glass', 'Lantern Kube', 'Echo Dressed Mineral'),\n  // Ice Bricks, Dressed Mineral\n  frostfang:    M('Ice Bricks', 'Echo Dressed Mineral', 'Glint Buffed Mineral', 'Echo Dressed Mineral', 'Drift Mineral Tiles', 'Echo Buffed Mineral', 'Drift Dressed Mineral', 'Echo Regolith', 'Gleam Snow Blocks', 'Water Ice', 'Glint Glass', 'Lantern Kube', 'Titan Plate'),\n  // Chiselled Mineral Bricks, Mineral Pillars, Large Mineral Tiles\n  shadecasters: M('Arid Chiselled Bricks', 'Solis Mineral Pillar', 'Corona Regolith Concrete', 'Solis Mineral Pillar', 'Arid Regolith Concrete', 'Corona Chiselled Bricks', 'Arid Mineral Tiles', 'Arid Regolith', 'Corona Rammed Regolith', 'Bloom Wood', 'Arid Glass', 'Lantern Kube', 'Scorched Dressed Mineral'),\n  // Tents, Wood Panels\n  dunecombers:  M('Solis Wood Panels', 'Scorched Wood Panels', 'Solis Wood Panels', 'Scorched Wood Slats', 'Arid Rammed Regolith', 'Arid Rammed Regolith', 'Solis Mineral Tiles', 'Arid Regolith', 'Arid Regolith', 'Bloom Wood', 'Arid Glass', 'Lantern Kube', 'Scorched Dressed Mineral'),\n  // Corrugated Aluminum, Steel Grate, Dressed Mineral\n  sandreavers:  M('Corrugated Aluminum', 'Scorched Buffed Mineral', 'Steel Grate', 'Scorched Dressed Mineral', 'Scorched Dressed Mineral', 'Scorched Rammed Regolith', 'Arid Dressed Mineral', 'Scorched Regolith', 'Scorched Regolith', 'Bloom Wood', 'Scorched Glass', 'Lantern Kube', 'Titan Plate'),\n  // Sintered Regolith, Cut Crystal, Lanterns\n  kilnborn:     M('Scorched Sintered Regolith', 'Cinder Sintered Regolith', 'Glint Cut Crystal', 'Halo Cut Crystal', 'Cinder Mineral Tiles', 'Scorched Chiselled Bricks', 'Cinder Buffed Mineral', 'Scorched Regolith', 'Scorched Sintered Regolith', 'Lumina Cut Crystal', 'Glint Glass', 'Lantern Kube', 'Gloam Dressed Mineral'),\n  // Polished Tektite, Sintered Regolith\n  glassminders: M('Void Polished Tektite', 'Spirit Mineral Pillar', 'Fathom Polished Tektite', 'Spirit Mineral Pillar', 'Void Mineral Tiles', 'Haze Sintered Regolith', 'Void Buffed Mineral', 'Haze Regolith', 'Haze Sintered Regolith', 'Spirit Cut Crystal', 'Fathom Glass', 'Spirit Glow Strip Panel', 'Haze Dressed Mineral'),\n  // Sintered Regolith, Vent Grilles\n  cinderhost:   M('Haze Sintered Regolith', 'Vent Grille', 'Cinder Sintered Regolith', 'Vent Grille', 'Slag', 'Haze Rammed Regolith', 'Slag', 'Haze Regolith', 'Haze Regolith', 'Slag', 'Cinder Glass', 'Lantern Kube', 'Titan Plate'),\n  // Honeycomb Panels, Glow Strips\n  weavers:      M('Honeycomb Panel', 'Solis Wood Slats', 'Honeycomb Panel', 'Solis Wood Slats', 'Corona Mineral Tiles', 'Solis Rammed Regolith', 'Corona Buffed Mineral', 'Solis Regolith', 'Solis Rammed Regolith', 'Hydrocarbon Ice', 'Solis Glass', 'Radiance Glow Strip Panel', 'Gloam Dressed Mineral'),\n  // Honeycomb Panels, Wood Slats\n  mistdrifters: M('Halo Wood Slats', 'Honeycomb Panel', 'Honeycomb Panel', 'Drift Wood Slats', 'Halo Wood Panels', 'Gloam Rammed Regolith', 'Lull Mineral Tiles', 'Gloam Regolith', 'Gloam Regolith', 'Hydrocarbon Ice', 'Halo Glass', 'Lantern Kube', 'Lull Dressed Mineral'),\n  // Dressed Mineral, Vent Grilles\n  hazeclaws:    M('Gloam Dressed Mineral', 'Vent Grille', 'Scorched Dressed Mineral', 'Vent Grille', 'Haze Mineral Tiles', 'Gloam Rammed Regolith', 'Haze Buffed Mineral', 'Gloam Regolith', 'Gloam Regolith', 'Hydrocarbon Ice', 'Gloam Glass', 'Lantern Kube', 'Titan Plate'),\n  // Hull Plating, Honeycomb Panels, Glow Strips, framed glass\n  domekeepers:  M('Hull Plating', 'Honeycomb Panel', 'Reinforced Glass', 'Honeycomb Panel', 'Cor Inlaid Panel', 'Lull Sintered Regolith', 'Gleam Buffed Mineral', 'Lull Regolith', 'Lull Sintered Regolith', 'Bloom Wood', 'Reinforced Glass', 'Aura Glow Strip Panel', 'Echo Dressed Mineral'),\n  // Sintered Regolith, Tread Plate, Corrugated Aluminum\n  dustminers:   M('Lull Sintered Regolith', 'Tread Plate', 'Corrugated Aluminum', 'Tread Plate', 'Tread Plate', 'Echo Rammed Regolith', 'Tread Plate', 'Lull Regolith', 'Lull Rammed Regolith', 'Lull Sintered Regolith', 'Reinforced Glass', 'Lantern Kube', 'Echo Dressed Mineral'),\n  // Hull Plating, Hazard Stripes, Corrugated Aluminum\n  corsairs:     M('Hull Plating', 'Radiance Hazard Stripes', 'Corrugated Aluminum', 'Radiance Hazard Stripes', 'Tread Plate', 'Haze Rammed Regolith', 'Tread Plate', 'Haze Regolith', 'Haze Regolith', 'Titan Plate', 'Reinforced Glass', 'Lantern Kube', 'Graphene Kube'),\n});\nexport const MATERIAL_ROLES = Object.freeze(['wall', 'wall2', 'roof', 'trim', 'floor', 'path', 'plaza', 'fill', 'ground', 'crop', 'glass', 'glow', 'stash']);\nconst ROLE_CODE = Object.freeze(Object.fromEntries(MATERIAL_ROLES.map((r, i) => [r, i + 1])));\n\n// ---- WHICH WORLDS ------------------------------------------------------------------------------------------------\n// A world's people, or null. Only from version 17, only for a world nobody holds (`world.free`: the page's own reading\n// of a world with no claim and no public record; a claimed world, or one whose record holds builds, never), only for a\n// climate that fits a group, and then one in ALIEN_RATE by the address. The kind is the address's second draw, in thirds.\nexport function peopleOf(addr, world, climate, version) {\n  if (!(version >= ALIENS_SINCE) || !world || world.free !== true || !addr) return null;\n  if (hash01(String(addr) + '#aliens17') * ALIEN_RATE >= 1) return null;\n  const group = climateGroupOf(world, climate);\n  if (!group) return null;\n  const kind = KINDS[Math.min(2, Math.floor(hash01(String(addr) + '#aliens17-kind') * 3))];\n  return peopleFor(group, kind);\n}\n\n// ---- HOW MANY TOWNS AND HOW BIG ----------------------------------------------------------------------------------\n// Under Ø48 one village; up to Ø72 a town and a village; larger a city (30-40 buildings) and two towns. A plot is 2N\n// columns square (N its half-size), and a face holds it with a margin on every side: on a small world the village is\n// smaller (Wd, the face's width in columns, says how much room there is).\nexport const TOWN_SIZES = Object.freeze({\n  village: { N: 12, buildings: [6, 10], plaza: 2, ring: false },\n  town: { N: 19, buildings: [12, 20], plaza: 3, ring: true },\n  city: { N: 24, buildings: [30, 40], plaza: 4, ring: true },\n});\nexport const PLOT_MARGIN = 4;                  // the ramp from the plot's level to the ground round it, a step a column\nexport const marginFor = (Wd) => (Wd >= 30 ? PLOT_MARGIN : 2);   // (half that on the smallest worlds, Ø24 and Ø32)\nexport const RING_WIDTH = 6;                   // the settlement biome beyond the ramp\nexport function townSizesFor(diameter) {\n  const d = Math.round(Math.max(24, Math.min(96, Number(diameter) || 24)));\n  return d < 48 ? ['village'] : d <= 72 ? ['town', 'village'] : ['city', 'town', 'town'];\n}\n// The half-size a plot of `size` takes on a face `Wd` columns wide (never under 4: a hamlet of a few huts).\nexport function plotHalfFor(size, Wd) {\n  const room = Math.floor((Wd - 2 * marginFor(Wd) - (Wd >= 30 ? 6 : 2)) / 2);\n  return Math.max(4, Math.min(TOWN_SIZES[size].N, room));\n}\n\n// ---- THE BUILDING KIT ----------------------------------------------------------------------------------------------\n// Each kit piece writes cells into a plan: [i, j, h, role] in the plot's own frame (i along the face's first tangent,\n// j its second, h the level above the plaza's top cell: h 0 is the paved top itself), and marks its footprint blocked\n// so streets and residents keep off it. Buildings are hollow with a door, so a resident can go home and a player in.\nfunction kit(plan) {\n  const cells = plan.cells, block = plan.block, N = plan.N;\n  const put = (i, j, h, role) => { if (i >= -N && i < N && j >= -N && j < N) cells.push(i, j, h, role); };\n  const blockAt = (i, j, v) => { if (i >= -N && i < N && j >= -N && j < N) block[(i + N) * 2 * N + (j + N)] = v; };\n  // A door on side `side` (0 -i, 1 +i, 2 -j, 3 +j) of a w x d footprint at (i0, j0): its cell in the wall, and the cell\n  // outside it.\n  const doorOf = (i0, j0, w, d, side) => {\n    const mi = i0 + (w >> 1), mj = j0 + (d >> 1);\n    if (side === 0) return { at: [i0, mj], out: [i0 - 1, mj], in: [i0 + 1, mj] };\n    if (side === 1) return { at: [i0 + w - 1, mj], out: [i0 + w, mj], in: [i0 + w - 2, mj] };\n    if (side === 2) return { at: [mi, j0], out: [mi, j0 - 1], in: [mi, j0 + 1] };\n    return { at: [mi, j0 + d - 1], out: [mi, j0 + d], in: [mi, j0 + d - 2] };\n  };\n  const box = (i0, j0, w, d, h0, h1, role, hollow, door, windows) => {\n    for (let i = i0; i < i0 + w; i++) for (let j = j0; j < j0 + d; j++) {\n      const edge = i === i0 || j === j0 || i === i0 + w - 1 || j === j0 + d - 1;\n      for (let h = h0; h <= h1; h++) {\n        if (hollow && !edge) continue;\n        if (door && h <= h0 + 1 && i === door.at[0] && j === door.at[1]) continue;\n        const corner = (i === i0 || i === i0 + w - 1) && (j === j0 || j === j0 + d - 1);\n        const win = windows && edge && !corner && h === h0 + 1 && ((i + j) & 1) === 1 && !(door && Math.abs(i - door.at[0]) + Math.abs(j - door.at[1]) <= 1);\n        put(i, j, h, win ? 'glass' : corner && role === 'wall' ? 'wall2' : role);\n      }\n    }\n  };\n  const floor = (i0, j0, w, d) => { for (let i = i0; i < i0 + w; i++) for (let j = j0; j < j0 + d; j++) { put(i, j, 0, 'floor'); blockAt(i, j, 1); } };\n  const pitched = (i0, j0, w, d, h, role) => {   // a stepped roof, each course a cell in from the last, over its long axis\n    const along = w >= d, n = Math.ceil((along ? d : w) / 2);\n    for (let s = 0; s < n; s++) for (let i = i0 + (along ? 0 : s); i < i0 + w - (along ? 0 : s); i++)\n      for (let j = j0 + (along ? s : 0); j < j0 + d - (along ? s : 0); j++) put(i, j, h + 1 + s, role);\n  };\n  return {\n    put, blockAt, doorOf,\n    hut(i0, j0, w, d, side, h = 2) {\n      const door = doorOf(i0, j0, w, d, side); floor(i0, j0, w, d);\n      box(i0, j0, w, d, 1, h, 'wall', true, door, true); pitched(i0, j0, w, d, h, 'roof');\n      return { door, inside: door.in, top: h + Math.ceil(Math.min(w, d) / 2) };\n    },\n    longhouse(i0, j0, w, d, side, h = 2) {\n      const door = doorOf(i0, j0, w, d, side); floor(i0, j0, w, d);\n      box(i0, j0, w, d, 1, h, 'wall', true, door, true);\n      for (let i = i0; i < i0 + w; i += 3) for (let j of [j0, j0 + d - 1]) put(i, j, h + 1, 'trim');\n      pitched(i0, j0, w, d, h, 'roof');\n      return { door, inside: door.in, top: h + Math.ceil(d / 2) };\n    },\n    tower(i0, j0, h, side) {             // 3 x 3, hollow at the foot, a lookout and its light on top\n      const door = doorOf(i0, j0, 3, 3, side); floor(i0, j0, 3, 3);\n      box(i0, j0, 3, 3, 1, h, 'wall', true, door, false);\n      for (let i = i0 - 1; i <= i0 + 3; i++) for (let j = j0 - 1; j <= j0 + 3; j++) if (i === i0 - 1 || j === j0 - 1 || i === i0 + 3 || j === j0 + 3) put(i, j, h + 1, 'trim');\n      for (let i = i0; i < i0 + 3; i++) for (let j = j0; j < j0 + 3; j++) put(i, j, h + 1, 'roof');\n      put(i0 + 1, j0 + 1, h + 2, 'glow');\n      return { door, inside: door.in, top: h + 2 };\n    },\n    dome(i0, j0, r, side, glassTop) {     // a (2r+1)-square footprint, a hollow shell, its upper half glass if asked\n      const w = 2 * r + 1, ci = i0 + r, cj = j0 + r, door = doorOf(i0, j0, w, w, side); floor(i0, j0, w, w);\n      for (let i = -r; i <= r; i++) for (let j = -r; j <= r; j++) for (let y = 0; y <= r; y++) {\n        const d2 = i * i + j * j + y * y;\n        if (d2 > (r + 0.35) * (r + 0.35) || d2 <= (r - 0.75) * (r - 0.75)) continue;\n        if (y <= 1 && ci + i === door.at[0] && cj + j === door.at[1]) continue;\n        if (y <= 1 && (Math.abs(ci + i - door.at[0]) + Math.abs(cj + j - door.at[1]) === 0)) continue;\n        put(ci + i, cj + j, y + 1, glassTop && y * 2 > r ? 'glass' : 'wall');\n      }\n      // the doorway through the shell's foot, two high, wherever the shell crosses its line\n      const di = door.out[0] - door.in[0], dj = door.out[1] - door.in[1];\n      for (let k = 0; k <= r + 1; k++) for (const y of [1, 2]) plan.carve.push(ci + di * k, cj + dj * k, y);\n      return { door, inside: [ci, cj], top: r + 1 };\n    },\n    igloo(i0, j0, r, side) { const b = this.dome(i0, j0, r, side, false); put(b.door.out[0], b.door.out[1], 0, 'path'); return b; },\n    tent(i0, j0, w, d, side) {             // cloth over poles, open at its ends\n      const door = doorOf(i0, j0, w, d, side); floor(i0, j0, w, d);\n      const along = w >= d, n = Math.ceil((along ? d : w) / 2);\n      for (let s = 0; s < n; s++) for (let i = i0 + (along ? 0 : s); i < i0 + w - (along ? 0 : s); i++)\n        for (let j = j0 + (along ? s : 0); j < j0 + d - (along ? s : 0); j++) {\n          const rim = along ? (j === j0 + s || j === j0 + d - 1 - s) : (i === i0 + s || i === i0 + w - 1 - s);\n          if (rim || s === n - 1) put(i, j, 1 + s, 'wall');\n        }\n      put(along ? i0 - 1 : i0 + (w >> 1), along ? j0 + (d >> 1) : j0 - 1, 1, 'trim'); put(along ? i0 - 1 : i0 + (w >> 1), along ? j0 + (d >> 1) : j0 - 1, 2, 'trim');\n      return { door, inside: [i0 + (w >> 1), j0 + (d >> 1)], top: n };\n    },\n    cliff(i0, j0, w, d, h, side) {         // a block carved into a mesa: rooms behind a face of windows and doors\n      const door = doorOf(i0, j0, w, d, side); floor(i0, j0, w, d);\n      box(i0, j0, w, d, 1, h, 'wall', true, door, false);\n      for (let i = i0; i < i0 + w; i++) for (let j = j0; j < j0 + d; j++) {\n        put(i, j, h + 1, 'roof');\n        const face = (side === 0 && i === i0) || (side === 1 && i === i0 + w - 1) || (side === 2 && j === j0) || (side === 3 && j === j0 + d - 1);\n        if (face) for (let y = 3; y <= h; y += 2) if (((side < 2 ? j : i) & 1) === 1) put(i, j, y, 'glass');\n      }\n      for (let i = i0 + 1; i < i0 + w - 1; i++) for (let j = j0 + 1; j < j0 + d - 1; j++) if (h >= 4) put(i, j, 3, 'floor');   // a second storey\n      return { door, inside: door.in, top: h + 1 };\n    },\n    stall(i0, j0, side) {                  // 3 x 2, four posts and an awning; its counter is the use cell\n      for (const [a, c] of [[0, 0], [2, 0], [0, 1], [2, 1]]) { put(i0 + a, j0 + c, 1, 'trim'); put(i0 + a, j0 + c, 2, 'trim'); blockAt(i0 + a, j0 + c, 1); }\n      for (let a = 0; a < 3; a++) for (let c = 0; c < 2; c++) put(i0 + a, j0 + c, 3, 'roof');\n      put(i0 + 1, j0, 1, 'stash'); blockAt(i0 + 1, j0, 1);\n      return { use: [i0 + 1, j0, 1], front: [i0 + 1, j0 - 1] };\n    },\n    well(ci, cj, kind) {                   // 3 x 3 rim round the light: the service point (well, hearth or dome hub)\n      for (let a = -1; a <= 1; a++) for (let c = -1; c <= 1; c++) {\n        blockAt(ci + a, cj + c, 1);\n        if (a === 0 && c === 0) { put(ci, cj, 1, 'glass'); continue; }\n        put(ci + a, cj + c, 1, 'stash');\n      }\n      put(ci - 1, cj - 1, 2, 'trim'); put(ci + 1, cj + 1, 2, 'trim'); put(ci - 1, cj + 1, 2, 'trim'); put(ci + 1, cj - 1, 2, 'trim');\n      put(ci, cj, 3, 'glow');\n      if (kind === 'hearth') for (const [a, c] of [[-1, -1], [1, 1], [-1, 1], [1, -1]]) put(ci + a, cj + c, 3, 'roof');\n      if (kind === 'dome') { for (let a = -1; a <= 1; a++) for (let c = -1; c <= 1; c++) put(ci + a, cj + c, 4, 'glass'); }\n      return { use: [ci, cj, 1] };\n    },\n    fields(i0, j0, w, d) {                 // crops in rows, walkable between\n      for (let i = i0; i < i0 + w; i++) for (let j = j0; j < j0 + d; j++) {\n        put(i, j, 0, 'ground');\n        if (((j - j0) & 1) === 0) { put(i, j, 1, 'crop'); blockAt(i, j, 1); }\n      }\n      return { work: [i0 + (w >> 1), j0 + 1] };\n    },\n    spire(i, j, h) { for (let y = 1; y <= h; y++) put(i, j, y, y === h ? 'glow' : 'wall2'); blockAt(i, j, 1); },\n    lamp(i, j) { put(i, j, 1, 'trim'); put(i, j, 2, 'trim'); put(i, j, 3, 'glow'); blockAt(i, j, 1); },\n    wallRun(i0, j0, i1, j1, h, gates) {    // a palisade, its posts a cell higher every third, with gaps for the gates\n      const n = Math.max(Math.abs(i1 - i0), Math.abs(j1 - j0));\n      for (let t = 0; t <= n; t++) {\n        const i = Math.round(i0 + (i1 - i0) * t / n), j = Math.round(j0 + (j1 - j0) * t / n);\n        if (gates && gates(i, j)) continue;\n        blockAt(i, j, 2);\n        for (let y = 1; y <= h + (t % 3 === 0 ? 1 : 0); y++) put(i, j, y, t % 3 === 0 ? 'trim' : 'wall');\n      }\n    },\n    mound(i0, j0, r, side) {               // an ash warren: a low mound with vents and a doorway\n      const b = this.dome(i0, j0, r, side, false);\n      put(i0 + r, j0 + r, r + 1, 'trim');\n      return b;\n    },\n  };\n}\n\n// WHICH PIECES A PEOPLE BUILDS: their homes, and what their town has besides (the proposal's town layouts).\nconst LAYOUT = Object.freeze({\n  loamwrights: { homes: ['hut', 'hut', 'longhouse'], fields: true, service: 'well' },\n  driftherders: { homes: ['hut', 'longhouse'], fences: true, service: 'well' },\n  thornkin: { homes: ['hut', 'longhouse'], walls: true, towers: true, service: 'well' },\n  hearthfolk: { homes: ['igloo'], service: 'hearth' },\n  rimewalkers: { homes: ['hut', 'igloo'], holes: true, service: 'hearth' },\n  frostfang: { homes: ['igloo', 'hut'], walls: true, towers: true, spires: true, service: 'hearth' },\n  shadecasters: { homes: ['cliff', 'hut'], service: 'well' },\n  dunecombers: { homes: ['tent'], service: 'well' },\n  sandreavers: { homes: ['hut', 'longhouse'], walls: true, towers: true, service: 'well' },\n  kilnborn: { homes: ['hut', 'dome'], fields: true, service: 'well' },\n  glassminders: { homes: ['dome', 'hut'], spires: true, service: 'well' },\n  cinderhost: { homes: ['mound'], walls: true, service: 'well' },\n  weavers: { homes: ['dome'], service: 'dome' },\n  mistdrifters: { homes: ['hut', 'tent'], fences: true, service: 'well' },\n  hazeclaws: { homes: ['mound', 'hut'], walls: true, towers: true, service: 'well' },\n  domekeepers: { homes: ['dome'], service: 'dome' },\n  dustminers: { homes: ['hut', 'longhouse'], fields: false, service: 'well' },\n  corsairs: { homes: ['longhouse', 'hut'], walls: true, towers: true, service: 'well' },\n});\nconst FOOT = { hut: [4, 4], longhouse: [7, 4], igloo: [5, 5], dome: [5, 5], tent: [4, 3], cliff: [6, 4], mound: [5, 5], tower: [3, 3] };\n\n// A TOWN'S PLAN, in the plot's own frame: its cells, its streets and blocked ground, its buildings, the use cells (the\n// service point, the stall, the stash), and its residents' routes. A pure function of the people, the size, the\n// plot's half-size and a seed (the world's address and the town's index), so a server rebuilds the same plan from the\n// little a town record holds.\nconst PLAN_MEMO = new Map();\n// `o` (version 18 on): { version, terr, liq } — the version the town was laid out at, its ground as the record holds it\n// (encodeTerr: the plot's own heights round its plaza, and which columns are wet) and the liquid its world's water is\n// (the canal's, or null). Without it, or below 18, the plan is version 17's to the cell.\nexport function planTown(peopleId, size, N, seed, o) {\n  if (o && o.version >= TOWNS18_SINCE) return planTown18(peopleId, size, N, seed, o.terr || '', o.liq || null);\n  return planTown17(peopleId, size, N, seed);\n}\n// The plan of a town record (transient-shape.js THE TOWNS, the zone's alienWorlds copy): what every side rebuilds a town from.\n// (version 19: the record is the plan's whole input, alien-towns.mjs planTown19)\nexport const planFor = (peopleId, t) => (t && t.v >= TOWNS19_SINCE ? planTown19(peopleId, t) : t ? planTown(peopleId, t.size, t.N, t.seed, t.v >= TOWNS18_SINCE ? { version: t.v, terr: t.terr, liq: t.liq } : null) : null);\nfunction planTown17(peopleId, size, N, seed) {\n  const key = peopleId + '|' + size + '|' + N + '|' + seed;\n  const memo = PLAN_MEMO.get(key);\n  if (memo) return memo;\n  const p = peopleById(peopleId), L = LAYOUT[peopleId], S = TOWN_SIZES[size];\n  if (!p || !L || !S) return null;\n  const W = 2 * N, rng = rngOf(key);\n  const plan = { people: peopleId, kind: p.kind, size, N, seed: String(seed), cells: [], carve: [], block: new Uint8Array(W * W),\n                 street: new Uint8Array(W * W), buildings: [], lamps: [], service: null, stall: null, stash: null, works: [], top: 3 };\n  const K = kit(plan), idx = (i, j) => (i + N) * W + (j + N), inPlot = (i, j) => i >= -N && i < N && j >= -N && j < N;\n  const plazaR = Math.max(1, Math.min(S.plaza, N >= 12 ? S.plaza : Math.floor(N / 4)));\n  const aggressive = p.kind === 'aggressive';\n  // THE STREETS: a cross through the plaza (two wide), and a ring road on a town or a city (inside the palisade on an\n  // aggressive one, where its patrols walk).\n  const wallD = N - 1, ringD = N - 2, ringed = (S.ring || aggressive) && N >= 9;\n  const bound = ringed ? N - 5 : N - 2;   // the farthest a footprint may reach (cheb): a cell inside the ring road\n  const cheb = (i, j) => Math.max(i < 0 ? -i - 1 : i, j < 0 ? -j - 1 : j);   // 0 for the four centre cells\n  for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n    const c = cheb(i, j), cross = (i === -1 || i === 0 || j === -1 || j === 0) && c < wallD;\n    const ring = ringed && (c === ringD || c === ringD - 1);\n    if (c <= plazaR || cross || ring) plan.street[idx(i, j)] = c <= plazaR ? 2 : 1;\n  }\n  // THE PALISADE (aggressive): round the plot's edge, a gate where each street of the cross leaves it.\n  if (aggressive && L.walls) {\n    const gate = (i, j) => i === -1 || i === 0 || j === -1 || j === 0;\n    const a = -wallD - 1, b = wallD;\n    K.wallRun(a, a, b, a, 2, gate); K.wallRun(b, a, b, b, 2, gate); K.wallRun(b, b, a, b, 2, gate); K.wallRun(a, b, a, a, 2, gate);\n  }\n  // THE SERVICE POINT at the plaza's heart (the centre cell's corner nearest -i -j is (−1, −1); the well's centre is\n  // (0, 0)'s cell), and the stall beside the plaza on the +i side.\n  const svc = K.well(0, 0, L.service);\n  plan.service = { kind: L.service, use: svc.use, front: [0, -2] };\n  if (p.kind !== 'aggressive') {\n    const st = K.stall(1, plazaR + 1, 2);\n    plan.stall = { use: st.use, front: st.front };\n  }\n  // THE LOTS. Every lot origin on a lattice outward from the plaza, a building wherever its footprint (and a cell of\n  // clearance) is free ground off the streets, until the town has its number.\n  const want = Math.round(S.buildings[0] + rng() * (S.buildings[1] - S.buildings[0]));\n  const free = (i0, j0, w, d, pad) => {\n    for (let i = i0 - pad; i < i0 + w + pad; i++) for (let j = j0 - pad; j < j0 + d + pad; j++) {\n      if (!inPlot(i, j)) return false;\n      const c = cheb(i, j);\n      if (c > bound + 1) return false;\n      if (plan.block[idx(i, j)] || (i >= i0 && i < i0 + w && j >= j0 && j < j0 + d && plan.street[idx(i, j)])) return false;\n    }\n    return true;\n  };\n  const sideToward = (i0, j0, w, d) => {   // the door faces the nearer street of the cross (or the plaza)\n    const mi = i0 + w / 2 - 0.5, mj = j0 + d / 2 - 0.5;\n    const di = Math.abs(mi + 0.5), dj = Math.abs(mj + 0.5);\n    if (di <= dj) return mi + 0.5 > 0 ? 0 : 1;   // nearer the j-street (i ≈ 0): face it along i\n    return mj + 0.5 > 0 ? 2 : 3;\n  };\n  // THE LOTS: a lattice in each quadrant between the streets, a lot every PITCH cells out from the cross (a cell of\n  // ground between neighbours), a home on each until the town has its number. A longhouse or a cliff dwelling takes\n  // two lots in a row; the lot at the plaza's corner moves out past the plaza.\n  const round = L.homes.every((h) => h === 'igloo' || h === 'dome' || h === 'mound');\n  const PITCH = round ? (N >= 8 ? 6 : 4) : (N >= 10 ? 5 : 4), LOT = PITCH - 1;   // (a hamlet's homes are a size smaller)\n  const lots = [];\n  for (const si of [1, -1]) for (const sj of [1, -1]) for (let a = 0; a * PITCH + LOT <= bound; a++)\n    for (let c = 0; c * PITCH + LOT <= bound; c++) lots.push([si, sj, a, c, rng()]);\n  const lotKey = (x) => x[2] + x[3] + (x[2] === 0 && x[3] === 0 ? 100 : 0);   // the plaza corner last: stepped out, it takes room from two lots\n  lots.sort((x, y) => lotKey(x) - lotKey(y) || x[4] - y[4]);\n  const lotOrigin = (si, a, w) => (si > 0 ? 1 + a * PITCH : -1 - a * PITCH - w);\n  let fieldsLeft = L.fields ? (size === 'city' ? 3 : size === 'town' ? 2 : 1) : 0, towersLeft = L.towers ? (size === 'village' ? 1 : 2) : 0;\n  let stashDone = false;\n  for (const [si, sj, a, c] of lots) {\n    if (plan.buildings.length >= want) break;\n    let type = L.homes[Math.floor(rng() * L.homes.length)];\n    if (aggressive && !stashDone) type = 'longhouse';\n    else if (towersLeft > 0 && rng() < 0.2) type = 'tower';\n    else if (fieldsLeft > 0 && a + c >= 1 && rng() < 0.35) type = 'fields';\n    const double = type === 'longhouse' || type === 'cliff', alongI = double && rng() < 0.5;\n    let w = type === 'tower' ? 3 : LOT, d = type === 'tower' ? 3 : LOT;\n    if (type === 'tent') d = 3;\n    if (double) { if (alongI) w = 2 * PITCH - 1; else d = 2 * PITCH - 1; }\n    let i0 = lotOrigin(si, a, w), j0 = lotOrigin(sj, c, d);\n    let ok = free(i0, j0, w, d, 1);\n    // the plaza's corner: the lot steps out along the diagonal till it clears the plaza\n    for (let s = 1; !ok && a === 0 && c === 0 && s <= plazaR + 1; s++) { if (free(i0 + si * s, j0 + sj * s, w, d, 1)) { i0 += si * s; j0 += sj * s; ok = true; } }\n    if (!ok && (double || type === 'tower' || type === 'fields')) {\n      type = L.homes.find((h) => h !== 'longhouse' && h !== 'cliff') || 'hut'; w = LOT; d = type === 'tent' ? 3 : LOT;\n      i0 = lotOrigin(si, a, w); j0 = lotOrigin(sj, c, d); ok = free(i0, j0, w, d, 1);\n      for (let s = 1; !ok && a === 0 && c === 0 && s <= plazaR + 1; s++) { if (free(i0 + si * s, j0 + sj * s, w, d, 1)) { i0 += si * s; j0 += sj * s; ok = true; } }\n    }\n    if (!ok) continue;\n    const side = sideToward(i0, j0, w, d);\n    let b;\n    if (type === 'fields') { b = K.fields(i0, j0, w, d); fieldsLeft--; plan.works.push(b.work); plan.buildings.push({ type, i0, j0, w, d }); continue; }\n    if (type === 'hut') b = K.hut(i0, j0, w, d, side, 2);\n    else if (type === 'longhouse') b = K.longhouse(i0, j0, w, d, side, 2);\n    else if (type === 'tower') { b = K.tower(i0, j0, size === 'village' ? 5 : 6 + Math.floor(rng() * 2), side); towersLeft--; }\n    else if (type === 'igloo') b = K.igloo(i0, j0, (Math.min(w, d) - 1) >> 1, side);\n    else if (type === 'dome') b = K.dome(i0, j0, (Math.min(w, d) - 1) >> 1, side, peopleId === 'domekeepers' || peopleId === 'weavers' || peopleId === 'kilnborn');\n    else if (type === 'mound') b = K.mound(i0, j0, (Math.min(w, d) - 1) >> 1, side);\n    else if (type === 'tent') b = K.tent(i0, j0, w, d, side);\n    else if (type === 'cliff') b = K.cliff(i0, j0, w, d, 5, side);\n    else continue;\n    const rec = { type, i0, j0, w, d, door: b.door.out, inside: b.inside };\n    if (aggressive && !stashDone && type === 'longhouse') {\n      // THE STASH: a block inside the longhouse by its door, where raiders bring what they take.\n      const s = [b.door.in[0], b.door.in[1]];\n      K.put(s[0], s[1], 1, 'stash');\n      plan.stash = { use: [s[0], s[1], 1], front: b.door.out };\n      rec.stash = true; stashDone = true;\n    }\n    plan.buildings.push(rec);\n    if (b.top > plan.top) plan.top = b.top;\n  }\n  if (aggressive && !plan.stash) {     // no room for the longhouse: the stash stands by the well\n    K.put(2, 2, 1, 'stash'); K.blockAt(2, 2, 1); plan.stash = { use: [2, 2, 1], front: [2, 3] };\n  }\n  // SPIRES (ice spikes, glass needles) and fishing holes, fences round a herd's commons, then LAMPS along the streets.\n  if (L.spires) for (let k = 0; k < (size === 'city' ? 10 : size === 'town' ? 6 : 3); k++) {\n    const i = Math.floor(-N + 2 + rng() * (W - 4)), j = Math.floor(-N + 2 + rng() * (W - 4));\n    if (free(i, j, 1, 1, 0)) K.spire(i, j, 3 + Math.floor(rng() * 4));\n  }\n  if (L.holes) for (let k = 0; k < (size === 'village' ? 2 : 4); k++) {\n    const i = Math.floor(-N + 3 + rng() * (W - 6)), j = Math.floor(-N + 3 + rng() * (W - 6));\n    if (free(i, j, 2, 2, 0)) { for (const [a, c] of [[0, 0], [1, 0], [0, 1], [1, 1]]) K.put(i + a, j + c, 0, 'glass'); plan.works.push([i - 1, j]); }\n  }\n  if (L.fences && N >= 9) {\n    const a = -N + 1, b = N - 2, gate = (i, j) => i === -1 || i === 0 || j === -1 || j === 0;\n    for (const [i0, j0, i1, j1] of [[a, a, b, a], [b, a, b, b], [b, b, a, b], [a, b, a, a]])\n      for (let t = 0, n = Math.max(Math.abs(i1 - i0), Math.abs(j1 - j0)); t <= n; t++) {\n        const i = Math.round(i0 + (i1 - i0) * t / n), j = Math.round(j0 + (j1 - j0) * t / n);\n        if (gate(i, j) || plan.block[idx(i, j)]) continue;\n        K.put(i, j, 1, 'trim'); K.blockAt(i, j, 2);\n      }\n  }\n  for (let i = -N + 1; i < N - 1; i++) for (let j = -N + 1; j < N - 1; j++) {\n    if (!plan.street[idx(i, j)] || plan.street[idx(i, j)] === 2) continue;\n    // a lamp beside the street every fifth cell along it, on free ground just off it\n    if ((i === 1 || i === -2) && j % 5 === 0 && !plan.street[idx(i + (i > 0 ? 1 : -1), j)] && !plan.block[idx(i + (i > 0 ? 1 : -1), j)] && cheb(i + (i > 0 ? 1 : -1), j) < N - 2) { K.lamp(i + (i > 0 ? 1 : -1), j); plan.lamps.push([i + (i > 0 ? 1 : -1), j]); }\n  }\n  for (const [i, j] of [[plazaR + 1, plazaR + 1], [-plazaR - 2, -plazaR - 2], [plazaR + 1, -plazaR - 2], [-plazaR - 2, plazaR + 1]])\n    if (inPlot(i, j) && !plan.block[idx(i, j)] && !plan.street[idx(i, j)] && cheb(i, j) < N - 2) { K.lamp(i, j); plan.lamps.push([i, j]); }\n  // THE GROUND: every column of the plot paved at level 0 by its role (a building's floor, a street, the plaza, a\n  // field's soil or the plot's own ground), the first write winning (a building's floor before the street under it).\n  const ground = new Uint8Array(W * W);\n  for (let k = 0; k < plan.cells.length; k += 4) if (plan.cells[k + 2] === 0) { const g = idx(plan.cells[k], plan.cells[k + 1]); if (!ground[g]) ground[g] = ROLE_CODE[plan.cells[k + 3]]; }\n  for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n    const g = idx(i, j);\n    if (!ground[g]) ground[g] = ROLE_CODE[plan.street[g] === 2 ? 'plaza' : plan.street[g] ? 'path' : 'ground'];\n  }\n  plan.ground = ground;\n  // THE CELLS ABOVE GROUND, by key, the last write winning (a window over a wall): what the overlay draws.\n  const above = new Map(), carve = new Set();\n  for (let k = 0; k < plan.carve.length; k += 3) carve.add(plan.carve[k] + ',' + plan.carve[k + 1] + ',' + plan.carve[k + 2]);\n  for (let k = 0; k < plan.cells.length; k += 4) {\n    const h = plan.cells[k + 2]; if (h <= 0) continue;\n    const ck = plan.cells[k] + ',' + plan.cells[k + 1] + ',' + h;\n    if (carve.has(ck)) continue;\n    above.set(ck, plan.cells[k + 3]);\n    if (h > plan.top) plan.top = h;\n  }\n  plan.above = above;\n  // Residents walk where nothing stands: the doorways count as open, and so does a dome's carved doorway.\n  for (const b of plan.buildings) if (b.door) { const [i, j] = b.door; if (inPlot(i, j) && plan.block[idx(i, j)] === 1 && !above.has(i + ',' + j + ',1')) plan.block[idx(i, j)] = 0; }\n  for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n    const solidAt = above.has(i + ',' + j + ',1') || above.has(i + ',' + j + ',2');\n    plan.block[idx(i, j)] = solidAt ? 1 : 0;\n  }\n  plan.residents = residentsOf(plan, rngOf(key + '#res'));\n  PLAN_MEMO.set(key, plan);\n  if (PLAN_MEMO.size > 64) PLAN_MEMO.delete(PLAN_MEMO.keys().next().value);\n  return plan;\n}\n\n// ---- RESIDENTS ---------------------------------------------------------------------------------------------------\n// About one a building, ten to sixty a town. Each lives in a building and walks one route the whole day, a closed\n// polyline in the plot's frame with stops on it, at a fixed pace from a phase of its own:\n//   errand   home → the plaza → a place of work (the stall, the well, a field, a fishing hole) → home, pausing at each\n//   loop     a round of the plaza, pausing at the service point\n//   patrol   (aggressive) the ring road inside the palisade, the whole way round\n// At night most go home and stay in (sleep); a few keep their routes (a patrol's half, a tenth of the others).\nfunction bfsFrom(plan, ti, tj) {\n  const N = plan.N, W = 2 * N, dist = new Int32Array(W * W).fill(-1), q = new Int32Array(W * W);\n  const ok = (i, j) => i >= -N && i < N && j >= -N && j < N && !plan.block[(i + N) * W + (j + N)];\n  let h = 0, t = 0;\n  const s = (ti + N) * W + (tj + N);\n  if (ti < -N || ti >= N || tj < -N || tj >= N) return dist;\n  dist[s] = 0; q[t++] = s;\n  while (h < t) {\n    const c = q[h++], ci = ((c / W) | 0) - N, cj = (c % W) - N;\n    for (const [a, b] of [[1, 0], [-1, 0], [0, 1], [0, -1]]) {\n      const ni = ci + a, nj = cj + b;\n      if (!ok(ni, nj)) continue;\n      const n = (ni + N) * W + (nj + N);\n      if (dist[n] >= 0) continue;\n      dist[n] = dist[c] + 1; q[t++] = n;\n    }\n  }\n  return dist;\n}\n// From (i, j) down a target's distance field to it: the cells' centres, straight runs merged.\nfunction descend(plan, dist, i, j) {\n  const N = plan.N, W = 2 * N, at = (a, b) => (a < -N || a >= N || b < -N || b >= N) ? -1 : dist[(a + N) * W + (b + N)];\n  if (at(i, j) < 0) return null;\n  const pts = [[i + 0.5, j + 0.5]];\n  let ci = i, cj = j, guard = 0;\n  while (at(ci, cj) > 0 && guard++ < 4 * W) {\n    let best = null;\n    for (const [a, b] of [[1, 0], [-1, 0], [0, 1], [0, -1]]) { const d = at(ci + a, cj + b); if (d >= 0 && d < at(ci, cj) && (!best || d < best[2])) best = [ci + a, cj + b, d]; }\n    if (!best) break;\n    ci = best[0]; cj = best[1];\n    pts.push([ci + 0.5, cj + 0.5]);\n  }\n  // merge collinear runs\n  const out = [pts[0]];\n  for (let k = 1; k < pts.length - 1; k++) {\n    const a = out[out.length - 1], b = pts[k], c = pts[k + 1];\n    if ((b[0] - a[0]) * (c[1] - b[1]) === (b[1] - a[1]) * (c[0] - b[0])) continue;\n    out.push(b);\n  }\n  if (pts.length > 1) out.push(pts[pts.length - 1]);\n  return out;\n}\nfunction nearestOpen(plan, i, j) {\n  const N = plan.N, W = 2 * N;\n  for (let r = 0; r < W; r++) for (let a = -r; a <= r; a++) for (let b = -r; b <= r; b++) {\n    if (Math.max(Math.abs(a), Math.abs(b)) !== r) continue;\n    const x = i + a, y = j + b;\n    if (x >= -N && x < N && y >= -N && y < N && !plan.block[(x + N) * W + (y + N)]) return [x, y];\n  }\n  return [0, -2];\n}\nfunction residentsOf(plan, rng) {\n  const N = plan.N, homes = plan.buildings.filter((b) => b.door);\n  const n = Math.max(10, Math.min(60, Math.round(plan.buildings.length * (plan.size === 'city' ? 1.2 : 1.1))));\n  const plazaPt = nearestOpen(plan, 0, -2);\n  const toPlaza = bfsFrom(plan, plazaPt[0], plazaPt[1]);\n  const works = [plan.stall && plan.stall.front, plan.service && plan.service.front, ...plan.works].filter(Boolean).map((w) => nearestOpen(plan, w[0], w[1]));\n  const workDist = works.map((w) => bfsFrom(plan, w[0], w[1]));\n  const out = [];\n  const pr = Math.max(1, Math.min(TOWN_SIZES[plan.size].plaza, N - 3)) + 1;   // just outside the plaza's own cells\n  const plazaLoop = [[-pr + 0.5, -pr + 0.5], [pr + 0.5 - 1, -pr + 0.5], [pr - 0.5, pr - 0.5], [-pr + 0.5, pr - 0.5]];\n  const ringD = N - 2, rr = ringD - 0.5;\n  const patrolLoop = [[-rr, -rr], [rr, -rr], [rr, rr], [-rr, rr]];\n  const patrolOk = N >= 9 && patrolLoop.every(([x, y]) => !plan.block[(Math.floor(x) + N) * 2 * N + (Math.floor(y) + N)]);\n  for (let k = 0; k < n; k++) {\n    const home = homes.length ? homes[k % homes.length] : null;\n    const dk = home ? nearestOpen(plan, home.door[0], home.door[1]) : plazaPt;\n    let role = plan.kind === 'aggressive' ? (k % 3 === 2 || !patrolOk ? 'loop' : 'patrol') : (k % 3 === 0 ? 'loop' : 'errand');\n    if (role === 'patrol' && !patrolOk) role = 'loop';\n    let pts = null, stops = null;\n    if (role === 'errand' && works.length) {\n      const w = (k >> 1) % works.length;\n      const a = descend(plan, toPlaza, dk[0], dk[1]);                 // home → plaza\n      const b = descend(plan, workDist[w], plazaPt[0], plazaPt[1]);   // plaza → work\n      const c = descend(plan, toPlaza, works[w][0], works[w][1]);     // work → plaza\n      const d = a ? a.slice().reverse() : null;                       // plaza → home\n      if (a && b && c && d) {\n        pts = [...a, ...b.slice(1), ...c.slice(1), ...d.slice(1)];\n        stops = new Map([[a.length - 1, 6], [a.length - 1 + b.length - 1, 20 + Math.floor(rng() * 30)], [0, 8]]);   // the plaza, work, home\n      }\n    }\n    if (!pts && role === 'patrol') { pts = patrolLoop.concat([patrolLoop[0]]); stops = new Map([[0, 2], [2, 2]]); }\n    if (!pts) { pts = plazaLoop.concat([plazaLoop[0]]); stops = new Map([[0, 5], [2, 3]]); role = role === 'errand' ? 'loop' : role; }\n    out.push(routeOf(pts, stops, {\n      k, role, home: home ? (home.inside || home.door) : dk, door: dk, jx: ((k * 7) % 5 - 2) * 0.17, jy: ((k * 3) % 5 - 2) * 0.17,\n      speed: RULES.walkSpeed * (role === 'patrol' ? 1.25 : 0.85 + rng() * 0.3),\n      phase: rng(), nightOut: role === 'patrol' ? (k % 2 === 0) : rng() < 0.1, sleepAt: 0.05 + rng() * 0.25,\n    }));\n  }\n  return out;\n}\n// A route as segments, with the time each one starts in its cycle (walking at `speed`, pausing `stop` seconds at a point).\nfunction routeOf(pts, stops, o) {\n  const seg = [];\n  let t = 0;\n  for (let k = 0; k < pts.length; k++) {\n    const dwell = stops && stops.get(k) ? stops.get(k) : 0;\n    if (dwell > 0) { seg.push({ t, dur: dwell, a: pts[k], b: pts[k], stop: true }); t += dwell; }\n    if (k + 1 < pts.length) {\n      const a = pts[k], b = pts[k + 1], dz = (b[2] || 0) - (a[2] || 0), len = Math.sqrt((b[0] - a[0]) * (b[0] - a[0]) + (b[1] - a[1]) * (b[1] - a[1]) + dz * dz);\n      if (len > 1e-9) { const dur = len / o.speed; seg.push({ t, dur, a, b, stop: false }); t += dur; }\n    }\n  }\n  return Object.freeze({ ...o, seg, cycle: Math.max(1, t) });\n}\n// WHERE RESIDENT `k` OF A PLAN IS at wall-clock `ms`, in the plot's frame: { x, y (the plot's i and j, fractional),\n// hx, hy (its heading), act ('walk', 'work', 'rest', 'patrol', 'sleep'), inside }. `light` is the caller's reading of\n// the sky at the town: the sine of its sun's height there (a number), or simply whether it is night (a boolean). Each\n// resident goes home at a height of its own, between a little before sunset and a while after it (sleepAt), so dusk\n// empties a town over a few minutes rather than in one frame, and two screens reading the same sky agree; one that keeps\n// its route at night (nightOut) never goes in.\nexport const asleepAt = (r, light) => (typeof light === 'number' ? light < 0.1 - r.sleepAt * 0.8 : !!light);\nexport function residentAt(plan, k, ms, light) {\n  if (plan && plan.version >= TOWNS19_SINCE) return residentAt19(plan, k, ms, light);\n  const r = plan && plan.residents[k];\n  if (!r) return null;\n  if (!r.nightOut && asleepAt(r, light)) return plan.version >= TOWNS18_SINCE ? { x: r.home[0] + 0.5, y: r.home[1] + 0.5, z: r.homeZ || 0, hx: 0, hy: 1, act: 'sleep', inside: true, moving: false }\n                                                                           : { x: r.home[0] + 0.5, y: r.home[1] + 0.5, hx: 0, hy: 1, act: 'sleep', inside: true, moving: false };\n  const s = ((ms / 1000 + r.phase * r.cycle) % r.cycle + r.cycle) % r.cycle;\n  let lo = 0, hi = r.seg.length - 1;\n  while (lo < hi) { const m = (lo + hi + 1) >> 1; if (r.seg[m].t <= s) lo = m; else hi = m - 1; }\n  const g = r.seg[lo], f = g.dur > 0 ? Math.min(1, (s - g.t) / g.dur) : 0;\n  // (version 18: a resident's day has it at home between its rounds, indoors where nobody walks into it)\n  if (g.inside) return { x: r.home[0] + 0.5, y: r.home[1] + 0.5, z: r.homeZ || 0, hx: 0, hy: 1, act: 'home', inside: true, moving: false };\n  let x = g.a[0] + (g.b[0] - g.a[0]) * f, y = g.a[1] + (g.b[1] - g.a[1]) * f;\n  // (version 18) its height over the plaza: a town's lanes climb by stairs, its patrols walk the wall's top\n  const za = g.a[2] || 0, z = za + ((g.b[2] || 0) - za) * f;\n  if (g.stop) { x += r.jx; y += r.jy; }   // at a stop, each where it stands in the cell, so a crowd is not one figure\n  let hx = g.b[0] - g.a[0], hy = g.b[1] - g.a[1];\n  if (g.stop) { const nx = r.seg[(lo + 1) % r.seg.length]; hx = nx.b[0] - nx.a[0]; hy = nx.b[1] - nx.a[1]; }\n  const hl = Math.sqrt(hx * hx + hy * hy) || 1;\n  const act = g.act && g.act !== 'wait' ? (g.stop ? g.act : g.act === 'patrol' ? 'patrol' : 'walk') : g.stop ? (r.role === 'errand' && lo > 0 && !g.act ? 'work' : 'rest') : r.role === 'patrol' ? 'patrol' : 'walk';\n  return plan.version >= TOWNS18_SINCE ? { x, y, z, hx: hx / hl, hy: hy / hl, act, inside: false, moving: !g.stop }\n                                       : { x, y, hx: hx / hl, hy: hy / hl, act, inside: false, moving: !g.stop };\n}\n\n// ======================= VERSION 18 TOWNS (generated block) =======================\n// =====================================================================================================================\n// VERSION 18, \"ALIEN TOWNS\" (the owner's round 4, confirmed Oct 13 14:18 UTC: \"confirmed and ready to implement\"; every\n// decision on its recommendation: rectangles with round forms only as landmarks, a storey of three kubes, packed wall to\n// wall, lanes main 3 / side 2 / alley 1 / plazas 4 to 6, all eighteen façade sets; the fifteen façade toggles and fifteen of\n// the sixteen layout toggles on, 'loops' off) and the owner's note: \"vary the building facades a little more. Keep the same\n// general shape but as an example, airless worlds have more grates, desert worlds look like tatooine, turfed roofs on\n// temperate worlds, and other concepts like those\".\n//\n// A town is laid out on its own ground: the record carries the plot's heights round its plaza (encodeTerr), so every side\n// lays the same town on the same terraces. It is built in BITS (half-kube cells, the game's own 0.5 bits on the bit-slot\n// lattice's corners) wherever a façade has detail, and in whole kubes everywhere else, from the game's building kubes,\n// bioliths and life materials; a cell whose eight bits are one material is that kube. Pure and twin-safe as the rest of\n// this file: integer hashing, + − × ÷, sqrt and floor, nothing else.\n// =====================================================================================================================\nexport const TOWNS18_SINCE = 18;\nexport const STOREY_KUBES = 3;                         // a storey is three kubes, six bits: a door 2 kubes, a course, a lintel\nexport const LANES18 = Object.freeze({ main: 3, side: 2, alley: 1, plazaMin: 4, plazaMax: 6 });\nconst HLO = -10, HHI = 54, HR = HHI - HLO;             // the kube levels a plan holds, over and under its plaza's top (P)\nconst FY0 = 2 * -HLO;                                  // the fine row of level 0's lower half\n\n// ---- THE GROUND IN THE RECORD -----------------------------------------------------------------------------------------\n// One character a plot column: its natural height over the plaza's level (−15..15) and whether water stands on it.\nconst T64 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_';\nexport const TERR_SPAN = 15;\nexport function encodeTerr(rel, wet) {\n  let s = '';\n  for (let k = 0; k < rel.length; k++) { const h = Math.max(-TERR_SPAN, Math.min(TERR_SPAN, Math.round(rel[k]))); s += T64[(h + TERR_SPAN) * 2 + (wet && wet[k] ? 1 : 0)]; }\n  return s;\n}\nexport function decodeTerr(s, n) {\n  const h = new Int8Array(n), wet = new Uint8Array(n);\n  for (let k = 0; k < n && k < (s ? s.length : 0); k++) { const v = T64.indexOf(s[k]); if (v < 0) continue; h[k] = (v >> 1) - TERR_SPAN; wet[k] = v & 1; }\n  return { h, wet };\n}\n\n// ---- EACH PEOPLE'S FAÇADE SET (the proposal's STY specs, t4main.js, as catalogue kubes) --------------------------------\n// Lists are what a building draws from (seeded, so no two neighbours match): base the ground storey, wall the middle,\n// top the last (empty: none). trim courses, cornices, quoins and sills; frame round windows and doors; shutter, beam\n// (brackets, lantern arms), roof (a flat roof's slab), pitch (a pitched roof's covering), awn (stripe pairs), box and\n// flowers (flower boxes), vine, pipe, vent, rail, crate, barrel, lampBit (a lantern: a beacon light's bit, which lights\n// round it at night), seam (a glowing course: glow biomass), strip (a glow strip band, whole kubes), pilaster, mono (a\n// monument), lmk and lmk2 (the landmark's two materials) and form (its shape, the one round thing in town).\nconst FAC = (o) => Object.freeze({ top: [], shutter: null, awn: null, box: null, flowers: null, vine: null, pipe: null, vent: null, seam: null, strip: null, pilaster: null,\n  jetty: 0, pitched: 0, chimney: 0, tank: 0, mast: 0, slit: false, cap: 5, cloth: null, ...o });\nexport const FACADES18 = Object.freeze({\n  loamwrights: FAC({ base: ['Lull Dressed Mineral', 'Gleam Chiselled Bricks', 'Echo Chiselled Bricks'], wall: ['Arid Rammed Regolith', 'Corona Rammed Regolith', 'Solis Rammed Regolith', 'Arid Chiselled Bricks'],\n    top: ['Solis Wood Panels', 'Gloam Wood Slats', 'Corona Regolith Concrete'], trim: 'Gleam Dressed Mineral', frame: 'Gloam Wood Slats', glass: 'Reinforced Glass',\n    shutter: ['Verge Wood Panels', 'Tide Wood Panels', 'Ether Wood Panels', 'Scorched Wood Panels'], beam: 'Gloam Wood Panels', roof: 'Lull Mineral Tiles', pitch: 'Scorched Chiselled Bricks',\n    awn: [['Ignition Buffed Mineral', 'Lumina Buffed Mineral'], ['Ether Buffed Mineral', 'Lumina Buffed Mineral'], ['Bloom Buffed Mineral', 'Corona Buffed Mineral']], box: 'Gloam Wood Slats',\n    flowers: ['Farout Petal', 'Radiance Petal', 'Wisp Petal', 'Ignition Petal', 'Surge Petal'], vine: 'Verge Leaf Biomass', rail: 'Gloam Wood Slats', crate: 'Solis Wood Slats', barrel: 'Gloam Wood Panels',\n    lampBit: 'Radiance Beacon Light', mono: 'Gleam Chiselled Bricks', lmk: 'Verge Wood', lmk2: 'Verge Leaf Biomass', form: 'trunk', jetty: 0.7, pitched: 0.35, chimney: 0.5 }),\n  driftherders: FAC({ base: ['Arid Rammed Regolith', 'Scorched Rammed Regolith'], wall: ['Drift Wood Slats', 'Gloam Wood Slats', 'Solis Wood Slats'], top: ['Solis Wood Panels', 'Drift Wood Panels'],\n    trim: 'Gloam Wood Panels', frame: 'Gloam Wood Slats', glass: 'Reinforced Glass', shutter: ['Void Wood Panels', 'Gloam Wood Panels'], beam: 'Void Wood Panels', roof: 'Arid Mineral Tiles', pitch: 'Solis Wood Slats',\n    awn: [['Radiance Buffed Mineral', 'Corona Buffed Mineral']], box: 'Gloam Wood Slats', flowers: ['Radiance Petal', 'Nova Petal', 'Starlight Petal'], vine: 'Bloom Leaf Biomass', rail: 'Gloam Wood Slats',\n    crate: 'Drift Wood Slats', barrel: 'Solis Wood Panels', lampBit: 'Radiance Beacon Light', mono: 'Arid Dressed Mineral', lmk: 'Drift Wood Slats', lmk2: 'Solis Wood Panels', form: 'dome',\n    jetty: 0.5, pitched: 0.75, chimney: 0.3, cap: 4 }),\n  thornkin: FAC({ base: ['Haze Dressed Mineral', 'Void Dressed Mineral'], wall: ['Veil Dressed Mineral', 'Haze Chiselled Bricks', 'Gloam Wood Slats'], top: ['Lull Dressed Mineral'],\n    trim: 'Lull Dressed Mineral', frame: 'Void Dressed Mineral', glass: 'Void Glass', beam: 'Void Wood Panels', roof: 'Veil Mineral Tiles', pitch: 'Haze Chiselled Bricks',\n    awn: [['Radiance Buffed Mineral', 'Void Buffed Mineral']], vine: 'Verge Leaf Biomass', rail: 'Void Wood Panels', crate: 'Scorched Wood Slats', barrel: 'Void Wood Panels', lampBit: 'Cinder Beacon Light',\n    mono: 'Void Dressed Mineral', lmk: 'Haze Dressed Mineral', lmk2: 'Ignition Hazard Stripes', banner: 'Ignition Hazard Stripes', form: 'spire', pitched: 0.2, chimney: 0.2, slit: true, cap: 4 }),\n  hearthfolk: FAC({ base: ['Ice Bricks', 'Drift Dressed Mineral'], wall: ['Lumina Snow Blocks', 'Gleam Snow Blocks', 'Ice Bricks'], top: ['Gleam Snow Blocks', 'Halo Buffed Mineral'],\n    trim: 'Lumina Buffed Mineral', frame: 'Drift Buffed Mineral', glass: 'Solis Glass', shutter: ['Drift Wood Panels', 'Echo Wood Panels'], beam: 'Gloam Wood Panels', roof: 'Lumina Snow Blocks', pitch: 'Gleam Snow Blocks',\n    rail: 'Drift Wood Slats', crate: 'Drift Wood Slats', barrel: 'Gloam Wood Panels', lampBit: 'Radiance Beacon Light', mono: 'Ice Bricks', lmk: 'Ice Bricks', lmk2: 'Lumina Snow Blocks', form: 'dome',\n    pitched: 0.4, chimney: 0.85, cap: 4 }),\n  rimewalkers: FAC({ base: ['Drift Wood Slats', 'Gloam Wood Panels'], wall: ['Drift Wood Slats', 'Echo Wood Slats', 'Halo Wood Slats'], top: ['Halo Wood Panels'],\n    trim: 'Gloam Wood Slats', frame: 'Gloam Wood Slats', glass: 'Drift Glass', beam: 'Gloam Wood Panels', roof: 'Drift Snow Blocks', pitch: 'Drift Wood Slats', rail: 'Gloam Wood Slats',\n    crate: 'Drift Wood Slats', barrel: 'Echo Wood Panels', lampBit: 'Radiance Beacon Light', mono: 'Ice Bricks', lmk: 'Ice Bricks', lmk2: 'Drift Dressed Mineral', form: 'spire', pitched: 0.7, chimney: 0.5, stilts: 0.6, cap: 3 }),\n  frostfang: FAC({ base: ['Echo Dressed Mineral', 'Drift Dressed Mineral'], wall: ['Ice Bricks', 'Glint Buffed Mineral', 'Echo Chiselled Bricks'], top: ['Glint Buffed Mineral'],\n    trim: 'Echo Dressed Mineral', frame: 'Echo Buffed Mineral', glass: 'Glint Glass', beam: 'Echo Dressed Mineral', roof: 'Glint Buffed Mineral', pitch: 'Ice Bricks', rail: 'Echo Dressed Mineral',\n    crate: 'Echo Wood Slats', barrel: 'Drift Wood Panels', lampBit: 'Cinder Beacon Light', mono: 'Ice Bricks', lmk: 'Ice Bricks', lmk2: 'Glint Cut Crystal', form: 'spire', pitched: 0.1, chimney: 0.3, mast: 0.6, slit: true }),\n  shadecasters: FAC({ base: ['Solis Chiselled Bricks', 'Arid Dressed Mineral'], wall: ['Arid Chiselled Bricks', 'Corona Chiselled Bricks', 'Corona Regolith Concrete'], top: ['Corona Rammed Regolith', 'Arid Regolith Concrete'],\n    trim: 'Corona Dressed Mineral', frame: 'Corona Buffed Mineral', glass: 'Arid Glass', shutter: ['Scorched Wood Panels', 'Solis Wood Panels'], beam: 'Scorched Wood Panels', roof: 'Arid Mineral Tiles', pitch: null,\n    awn: [['Cinder Buffed Mineral', 'Lumina Buffed Mineral'], ['Solis Buffed Mineral', 'Corona Buffed Mineral']], box: 'Scorched Wood Slats', flowers: ['Farout Petal', 'Radiance Petal'], rail: 'Scorched Wood Slats',\n    crate: 'Solis Wood Slats', barrel: 'Scorched Wood Panels', lampBit: 'Radiance Beacon Light', pilaster: 'Solis Mineral Pillar', mono: 'Solis Mineral Pillar', lmk: 'Arid Chiselled Bricks', lmk2: 'Cinder Buffed Mineral',\n    cloth: ['Cinder Buffed Mineral', 'Corona Buffed Mineral'], form: 'canopy', tank: 0.2, cap: 4 }),\n  dunecombers: FAC({ base: ['Scorched Rammed Regolith', 'Arid Rammed Regolith'], wall: ['Arid Rammed Regolith', 'Corona Rammed Regolith', 'Arid Regolith Concrete'],\n    trim: 'Solis Wood Slats', frame: 'Scorched Wood Slats', glass: 'Arid Glass', beam: 'Scorched Wood Panels', roof: 'Solis Mineral Tiles', pitch: null,\n    awn: [['Radiance Buffed Mineral', 'Lumina Buffed Mineral'], ['Solis Buffed Mineral', 'Lumina Buffed Mineral']], rail: 'Scorched Wood Slats', crate: 'Solis Wood Slats', barrel: 'Scorched Wood Panels',\n    lampBit: 'Radiance Beacon Light', mono: 'Arid Dressed Mineral', lmk: 'Solis Wood Panels', lmk2: 'Corona Buffed Mineral', cloth: ['Radiance Buffed Mineral', 'Lumina Buffed Mineral'], form: 'canopy', tank: 0.5, cap: 3 }),\n  sandreavers: FAC({ base: ['Scorched Dressed Mineral', 'Arid Dressed Mineral'], wall: ['Corrugated Aluminum', 'Scorched Rammed Regolith', 'Tread Plate'], top: ['Corrugated Aluminum'],\n    trim: 'Tread Plate', frame: 'Scorched Buffed Mineral', glass: 'Scorched Glass', beam: 'Tread Plate', roof: 'Tread Plate', pitch: null, awn: [['Radiance Buffed Mineral', 'Void Buffed Mineral']],\n    rail: 'Steel Grate', pipe: 'Steel', vent: 'Vent Grille', crate: 'Scorched Wood Slats', barrel: 'Corrugated Aluminum', lampBit: 'Cinder Beacon Light', mono: 'Scorched Dressed Mineral',\n    lmk: 'Corrugated Aluminum', lmk2: 'Radiance Hazard Stripes', banner: 'Radiance Hazard Stripes', form: 'spire', mast: 0.5, tank: 0.3, cap: 4 }),\n  kilnborn: FAC({ base: ['Void Sintered Regolith', 'Haze Sintered Regolith'], wall: ['Scorched Sintered Regolith', 'Cinder Sintered Regolith', 'Solis Sintered Regolith'], top: ['Solis Sintered Regolith', 'Scorched Chiselled Bricks'],\n    trim: 'Glint Cut Crystal', frame: 'Halo Cut Crystal', glass: 'Cinder Glass', beam: 'Void Sintered Regolith', roof: 'Cinder Mineral Tiles', pitch: null, rail: 'Glint Cut Crystal', pipe: 'Copper', vent: 'Vent Grille',\n    seam: 'Radiance Glow Biomass', crate: 'Scorched Sintered Regolith', barrel: 'Copper', lampBit: 'Cinder Beacon Light', mono: 'Glint Cut Crystal', lmk: 'Scorched Sintered Regolith', lmk2: 'Glint Cut Crystal',\n    form: 'dome', chimney: 0.8 }),\n  glassminders: FAC({ base: ['Void Polished Tektite', 'Haze Buffed Mineral'], wall: ['Void Buffed Mineral', 'Fathom Polished Tektite', 'Spirit Buffed Mineral'], top: ['Halo Buffed Mineral', 'Spirit Mineral Tiles'],\n    trim: 'Halo Buffed Mineral', frame: 'Void Polished Tektite', glass: 'Fathom Glass', beam: 'Haze Buffed Mineral', roof: 'Void Mineral Tiles', pitch: null, rail: 'Halo Buffed Mineral', vent: 'Vent Grille',\n    seam: 'Spirit Glow Biomass', crate: 'Haze Buffed Mineral', barrel: 'Void Polished Tektite', lampBit: 'Farout Beacon Light', pilaster: 'Spirit Mineral Pillar', mono: 'Spirit Mineral Pillar',\n    lmk: 'Spirit Cut Crystal', lmk2: 'Halo Cut Crystal', form: 'crystal', tall: true }),\n  cinderhost: FAC({ base: ['Haze Sintered Regolith', 'Void Sintered Regolith'], wall: ['Haze Sintered Regolith', 'Veil Sintered Regolith', 'Cinder Sintered Regolith'],\n    trim: 'Cinder Hazard Stripes', frame: 'Void Sintered Regolith', glass: 'Cinder Glass', beam: 'Slag', roof: 'Slag', pitch: null, rail: 'Iron', pipe: 'Iron', vent: 'Vent Grille', seam: 'Radiance Glow Biomass',\n    crate: 'Slag', barrel: 'Iron', lampBit: 'Cinder Beacon Light', mono: 'Slag', lmk: 'Haze Sintered Regolith', lmk2: 'Cinder Hazard Stripes', banner: 'Cinder Hazard Stripes', form: 'dome', chimney: 0.9, mast: 0.3, cap: 3 }),\n  weavers: FAC({ base: ['Solis Rammed Regolith', 'Gloam Wood Slats'], wall: ['Honeycomb Panel', 'Solis Wood Slats', 'Corona Rammed Regolith'], top: ['Honeycomb Panel'],\n    trim: 'Solis Wood Slats', frame: 'Gloam Wood Slats', glass: 'Solis Glass', shutter: ['Solis Wood Slats', 'Scorched Wood Slats'], beam: 'Gloam Wood Panels', roof: 'Corona Mineral Tiles', pitch: null,\n    rail: 'Solis Wood Slats', crate: 'Solis Wood Slats', barrel: 'Gloam Wood Panels', strip: 'Radiance Glow Strip Panel', lampBit: 'Radiance Beacon Light', mono: 'Honeycomb Panel', lmk: 'Honeycomb Panel', lmk2: 'Solis Glass',\n    form: 'dome', jetty: 0.4, stilts: 0.5 }),\n  mistdrifters: FAC({ base: ['Gloam Wood Panels', 'Halo Wood Panels'], wall: ['Halo Wood Panels', 'Halo Wood Slats', 'Drift Wood Panels'], top: ['Lumina Wood Panels'],\n    trim: 'Drift Wood Slats', frame: 'Gloam Wood Slats', glass: 'Halo Glass', beam: 'Gloam Wood Panels', roof: 'Lull Mineral Tiles', pitch: 'Halo Wood Slats', rail: 'Drift Wood Slats', crate: 'Drift Wood Slats',\n    barrel: 'Halo Wood Panels', strip: 'Spirit Glow Strip Panel', lampBit: 'Farout Beacon Light', mono: 'Honeycomb Panel', lmk: 'Halo Wood Slats', lmk2: 'Honeycomb Panel', form: 'spire', mast: 0.9, stilts: 0.8, pitched: 0.3, cap: 3 }),\n  hazeclaws: FAC({ base: ['Gloam Dressed Mineral', 'Haze Dressed Mineral'], wall: ['Gloam Dressed Mineral', 'Scorched Dressed Mineral', 'Gloam Chiselled Bricks'],\n    trim: 'Scorched Dressed Mineral', frame: 'Haze Dressed Mineral', glass: 'Gloam Glass', beam: 'Haze Dressed Mineral', roof: 'Haze Mineral Tiles', pitch: null, rail: 'Iron', vent: 'Vent Grille', pipe: 'Iron',\n    strip: 'Aura Glow Strip Panel', seam: 'Aura Glow Biomass', crate: 'Gloam Wood Slats', barrel: 'Iron', lampBit: 'Cinder Beacon Light', mono: 'Gloam Dressed Mineral', lmk: 'Gloam Dressed Mineral', lmk2: 'Aura Glow Biomass',\n    form: 'spire', slit: true, cap: 3 }),\n  domekeepers: FAC({ base: ['Tread Plate', 'Hull Plating'], wall: ['Hull Plating', 'Corrugated Aluminum', 'Gleam Buffed Mineral'], top: ['Gleam Buffed Mineral', 'Honeycomb Panel'],\n    trim: 'Echo Dressed Mineral', frame: 'Tread Plate', glass: 'Reinforced Glass', beam: 'Tread Plate', roof: 'Tread Plate', pitch: null, rail: 'Steel Grate', pipe: 'Aluminum', vent: 'Vent Grille',\n    strip: 'Aura Glow Strip Panel', flowers: ['Bloom Leaf Biomass', 'Verge Leaf Biomass'], box: 'Tread Plate', crate: 'Corrugated Aluminum', barrel: 'Aluminum', lampBit: 'Radiance Beacon Light', mono: 'Hull Plating',\n    lmk: 'Reinforced Glass', lmk2: 'Hull Plating', form: 'dome', mast: 0.6 }),\n  dustminers: FAC({ base: ['Tread Plate', 'Lull Sintered Regolith'], wall: ['Corrugated Aluminum', 'Lull Sintered Regolith', 'Echo Rammed Regolith'], top: ['Corrugated Aluminum'],\n    trim: 'Tread Plate', frame: 'Echo Dressed Mineral', glass: 'Reinforced Glass', beam: 'Tread Plate', roof: 'Tread Plate', pitch: null, awn: [['Radiance Buffed Mineral', 'Void Buffed Mineral']], rail: 'Steel Grate',\n    pipe: 'Aluminum', vent: 'Vent Grille', crate: 'Corrugated Aluminum', barrel: 'Aluminum', lampBit: 'Radiance Beacon Light', mono: 'Tread Plate', lmk: 'Tread Plate', lmk2: 'Radiance Hazard Stripes', banner: 'Radiance Hazard Stripes',\n    form: 'spire', tank: 0.7, mast: 0.3, cap: 4 }),\n  corsairs: FAC({ base: ['Tread Plate', 'Haze Rammed Regolith'], wall: ['Hull Plating', 'Corrugated Aluminum', 'Titan Plate', 'Radiance Hazard Stripes'], top: ['Corrugated Aluminum', 'Hull Plating'],\n    trim: 'Radiance Hazard Stripes', frame: 'Graphene Kube', glass: 'Reinforced Glass', beam: 'Tread Plate', roof: 'Tread Plate', pitch: null, awn: [['Radiance Buffed Mineral', 'Void Buffed Mineral']], rail: 'Steel Grate',\n    pipe: 'Steel', vent: 'Vent Grille', crate: 'Hull Plating', barrel: 'Steel', lampBit: 'Cinder Beacon Light', mono: 'Hull Plating', lmk: 'Hull Plating', lmk2: 'Radiance Hazard Stripes', banner: 'Radiance Hazard Stripes',\n    form: 'spire', mast: 0.9, jetty: 0.4, cap: 4 }),\n});\n\n// ---- THE CLIMATE THEMES (the owner's note): the same shapes, a look for each climate group, on top of each people's set\n//   temperate  TURFED ROOFS (the world's own turf on a regolith top), timber, flowers and vines\n//   arid       sand-plaster walls, softened roof edges and parapets, small windows, deep-set doors, dew masts, domed roof\n//              caps on some blocks, shade sails across the lanes (\"like Tatooine\")\n//   airless    steel grates everywhere (balconies, walkways, window guards, roof decks), hull bands, airlock doors, antennas\n//   cold       snow on the roofs, sills and cornices, icicles under the eaves, chimneys glowing at the top\n//   furnace    glowing seams between the wall bands, heat vents, dark sintered stone, crystal trims\n//   methane    tholin-stained walls, stilt foundations, honeycomb panels, glow strips\nexport const CLIMATE_THEMES = Object.freeze({\n  temperate: Object.freeze({ turfRoof: true, flowers: true, vines: true, timber: true }),\n  arid: Object.freeze({ soft: true, smallWin: true, deepDoor: true, dewMast: 0.18, domeCap: 0.3, shade: true, plaster: ['Corona Regolith Concrete', 'Arid Regolith Concrete', 'Arid Rammed Regolith'] }),\n  airless: Object.freeze({ grates: true, hull: 'Hull Plating', grate: 'Steel Grate', airlock: true, antenna: 0.7, roofDeck: true, airGlow: 'Aura Glow Strip Panel', hazard: 'Radiance Hazard Stripes' }),\n  cold: Object.freeze({ snow: 'Lumina Snow Blocks', icicles: 'Water Ice', glowChimney: 'Cinder Beacon Light' }),\n  furnace: Object.freeze({ seams: true, heatVents: true, dark: ['Void Sintered Regolith', 'Haze Sintered Regolith'], crystal: ['Glint Cut Crystal', 'Halo Cut Crystal', 'Spirit Cut Crystal'] }),\n  methane: Object.freeze({ tholin: ['Scorched Tholin Biomass', 'Solis Tholin Biomass', 'Cinder Tholin Biomass'], stilts: true, honey: 'Honeycomb Panel', strip: 'Radiance Glow Strip Panel' }),\n});\n// What a temperate roof's turf stands on (a regolith, so the game's turf draws on its top: system-view.js 't:').\nconst turfSoilOf = (pid) => { const g = PEOPLE_MATERIALS[pid].ground; return / Regolith$/.test(g) && !/ (Rammed|Sintered) Regolith$/.test(g) ? g : 'Gloam Regolith'; };\n// Kubes with no bit (the two building lights, the liquids): only ever laid whole.\nconst NO_BIT = (n) => n === 'Lantern Kube' || / Glow Strip Panel$/.test(n) || n === 'Water' || /^Liquid /.test(n);\n// The landmark's form a people builds (the round one: a dome, a spire, a canopy, a great trunk or crystal spires).\nexport const LANDMARK_FORMS = Object.freeze(Object.fromEntries(Object.entries(FACADES18).map(([id, f]) => [id, f.form])));\n\n// The sizes, in kubes: the plaza at the heart, the landmark's footprint, the storeys at the core, the fringe of fields.\nexport const TOWNS18 = Object.freeze({\n  village: Object.freeze({ plaza: 4, lmk: 5, maxS: 3, fringe: 2, plazas: 0, spans: 1, bridges: 1 }),\n  town: Object.freeze({ plaza: 5, lmk: 6, maxS: 4, fringe: 3, plazas: 1, spans: 2, bridges: 2 }),\n  city: Object.freeze({ plaza: 6, lmk: 8, maxS: 5, fringe: 3, plazas: 2, spans: 4, bridges: 3 }),\n});\n// Street classes (plan.street): what each column of the plot is.\n// (GARDEN, Oct 13: a yard no lane and no arch can reach, planted rather than paved: nobody's to walk into)\nexport const ST18 = Object.freeze({ NONE: 0, ALLEY: 1, SIDE: 2, MAIN: 3, PLAZA: 4, CANAL: 5, WALK: 6, TRACK: 7, WALL: 8, YARD: 9, FIELD: 10, LMK: 11, PASS: 12, BLDG: 13, POM: 14, BERM: 15, GARDEN: 16 });\nconst OPEN18 = new Set([ST18.ALLEY, ST18.SIDE, ST18.MAIN, ST18.PLAZA, ST18.WALK, ST18.TRACK, ST18.YARD, ST18.PASS, ST18.POM, ST18.FIELD]);\n\nconst D4 = [[1, 0], [-1, 0], [0, 1], [0, -1]];\n// A plan cell's index in plan.kcell, and what stands there: 0 nothing, > 0 a whole kube (plan.names[code - 1]), < 0 bits\n// (plan.bits from 8 × (−value − 1): eight material codes, corner k = di * 4 + dj * 2 + dh, di, dj, dh the halves along i, j\n// and up; 0 none).\nexport const kcellIndex = (plan, i, j, h) => (h < HLO || h >= HHI || i < -plan.N || i >= plan.N || j < -plan.N || j >= plan.N) ? -1 : ((i + plan.N) * 2 * plan.N + (j + plan.N)) * HR + (h - HLO);\nexport function cellOf18(plan, i, j, h) { const k = kcellIndex(plan, i, j, h); return k < 0 ? 0 : plan.kcell[k]; }\nexport const HLO18 = HLO, HHI18 = HHI;\n\nfunction planTown18(peopleId, size, N, seed, terr, liq) {\n  const key = '18|' + peopleId + '|' + size + '|' + N + '|' + seed + '|' + (liq || '') + '|' + terr;\n  const memo = PLAN_MEMO.get(key);\n  if (memo) return memo;\n  const p = peopleById(peopleId), F = FACADES18[peopleId], S = TOWNS18[size], PM = PEOPLE_MATERIALS[peopleId];\n  if (!p || !F || !S || !PM) return null;\n  const TH = CLIMATE_THEMES[p.climate] || {};\n  const W = 2 * N, WW = W * W, rng = rngOf(key), R = (a, b) => a + Math.floor(rng() * (b - a + 1)), pick = (xs) => xs[Math.floor(rng() * xs.length)];\n  const idx = (i, j) => (i + N) * W + (j + N), inP = (i, j) => i >= -N && i < N && j >= -N && j < N;\n  const cheb = (i, j) => Math.max(i < 0 ? -i - 1 : i, j < 0 ? -j - 1 : j);\n  const aggressive = p.kind === 'aggressive', walled = aggressive && N >= 9;\n  const living = p.climate === 'temperate' || p.climate === 'methane' || p.climate === 'furnace';\n  // ---- MATERIALS: a name table a plan, codes 1.. ----\n  const names = [], codeOf = new Map();\n  const M = (n) => { if (!n) return 0; let c = codeOf.get(n); if (c === undefined) { names.push(n); c = names.length; codeOf.set(n, c); } return c; };\n  const mPath = M(PM.path), mPlaza = M(PM.plaza), mGround = M(PM.ground), mFloor = M(PM.floor), mCrop = M(PM.crop), mStash = M(PM.stash), mGlass = M(F.glass);\n  const mTrim = M(F.trim), mFrame = M(F.frame), mBeam = M(F.beam), mRail = M(F.rail), mLampBit = M(F.lampBit), mLamp = M(PM.glow), mRetain = M(F.base[0]);\n  const mCrate = M(F.crate), mBarrel = M(F.barrel), mMono = M(F.mono), mLmk = M(F.lmk), mLmk2 = M(F.lmk2), mRoof = M(F.roof);\n  const mTurf = TH.turfRoof ? M(turfSoilOf(peopleId)) : 0, mSnow = TH.snow ? M(TH.snow) : 0, mIce = TH.icicles ? M(TH.icicles) : 0;\n  const mGrate = M(TH.grate || 'Steel Grate'), mLeaf = M(F.vine || 'Verge Leaf Biomass'), mLiquid = liq ? 1 : 0;   // (whether the world has water for a canal and fountains; never a kube's code: no kube of liquid is laid)\n\n  // ---- THE FINE GRID: bits (half kubes) over the plot, from level HLO to HHI ----\n  const FW = 2 * W, FH = 2 * HR, grid = new Uint8Array(FW * FW * FH);\n  // (Oct 13) FIXTURES: what is put while `fixing` is a thing that stands on a floor one walks on (a post, a stall, a crate, a\n  // stair's half step), which the headroom pass (13b) leaves; anything else in a walker's headroom it cuts back.\n  const fixM = new Uint8Array(FW * FW * FH);\n  let fixing = 0;\n  const fput = (fi, fj, fy, c) => { const I = fi + 2 * N, J = fj + 2 * N, Y = fy + FY0; if (I < 0 || I >= FW || J < 0 || J >= FW || Y < 0 || Y >= FH) return; const p0 = (I * FW + J) * FH + Y; grid[p0] = c; fixM[p0] = fixing && c ? 1 : 0; };\n  const fixAt = (fi, fj, fy) => { const I = fi + 2 * N, J = fj + 2 * N, Y = fy + FY0; if (I < 0 || I >= FW || J < 0 || J >= FW || Y < 0 || Y >= FH) return 0; return fixM[(I * FW + J) * FH + Y]; };\n  const fget = (fi, fj, fy) => { const I = fi + 2 * N, J = fj + 2 * N, Y = fy + FY0; if (I < 0 || I >= FW || J < 0 || J >= FW || Y < 0 || Y >= FH) return 0; return grid[(I * FW + J) * FH + Y]; };\n  const fbox = (a0, b0, y0, a1, b1, y1, c) => { for (let a = Math.min(a0, a1); a <= Math.max(a0, a1); a++) for (let b = Math.min(b0, b1); b <= Math.max(b0, b1); b++) for (let y = Math.min(y0, y1); y <= Math.max(y0, y1); y++) fput(a, b, y, c); };\n  const kbox = (i0, j0, h0, i1, j1, h1, c) => fbox(2 * i0, 2 * j0, 2 * h0, 2 * i1 + 1, 2 * j1 + 1, 2 * h1 + 1, c);\n  const under = new Map(), carve = new Set();   // cells at or under a column's ground: named, or opened\n  const waterCells = new Set();                  // \"i,j,h\": cells of the world's own water (the canal's), never kubes\n  const ukey = (i, j, h) => i + ',' + j + ',' + h;\n\n  // ---- 1. THE GROUND: the plot's own heights, smoothed, one kube a column at most between lanes' neighbours ----\n  const TR = decodeTerr(terr, WW), HM = size === 'city' ? 5 : size === 'town' ? 4 : 3;\n  let H = new Int16Array(WW);\n  for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n    let s = 0, n = 0;\n    for (let a = -2; a <= 2; a++) for (let b = -2; b <= 2; b++) if (inP(i + a, j + b)) { s += TR.h[idx(i + a, j + b)]; n++; }\n    H[idx(i, j)] = Math.max(-HM, Math.min(HM, Math.floor(s / n + 0.5)));\n  }\n  // the largest 1-Lipschitz field under it (two passes, the L1 distance), then the plaza flat at its centre's level\n  const env = (A) => {\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const k = idx(i, j); if (i > -N) A[k] = Math.min(A[k], A[idx(i - 1, j)] + 1); if (j > -N) A[k] = Math.min(A[k], A[idx(i, j - 1)] + 1); }\n    for (let i = N - 1; i >= -N; i--) for (let j = N - 1; j >= -N; j--) { const k = idx(i, j); if (i < N - 1) A[k] = Math.min(A[k], A[idx(i + 1, j)] + 1); if (j < N - 1) A[k] = Math.min(A[k], A[idx(i, j + 1)] + 1); }\n  };\n  env(H);\n  const PS = Math.max(3, Math.min(S.plaza, N - 5)), pi0 = -Math.floor(PS / 2), pi1 = pi0 + PS - 1, pj0 = pi0, pj1 = pi1;\n  const Lp = 0;   // the plaza is the town's level: P\n  for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n    const d = Math.max(0, pi0 - i, i - pi1) + Math.max(0, pj0 - j, j - pj1), k = idx(i, j);\n    H[k] = Math.max(Lp - d, Math.min(Lp + d, H[k]));\n  }\n  const g = new Int16Array(WW);                 // each column's ground level, over the plaza\n  for (let k = 0; k < WW; k++) g[k] = H[k];\n  const wet = TR.wet;\n\n  // ---- 2. THE STREETS, grown from the heart ----\n  const ST = new Uint8Array(WW), owner = new Int16Array(WW).fill(-1);\n  const st = (i, j) => (inP(i, j) ? ST[idx(i, j)] : 255);\n  const fringe = walled ? 0 : Math.max(1, Math.min(S.fringe, Math.floor(N / 5)));\n  const coreB = walled ? N - 4 : N - 1 - fringe;             // a core cell's cheb: no more than this\n  for (let i = pi0; i <= pi1; i++) for (let j = pj0; j <= pj1; j++) ST[idx(i, j)] = ST18.PLAZA;\n  // THE LANDMARK, at the heart: on the plaza's +i side, facing it.\n  const LS = N >= 9 ? Math.max(3, Math.min(S.lmk, coreB - pi1 - 2)) : 0;\n  const lmk = LS >= 3 ? { i0: pi1 + 1, j0: -Math.floor(LS / 2), w: LS, d: LS, form: F.form } : null;\n  if (lmk) for (let i = lmk.i0; i < lmk.i0 + lmk.w; i++) for (let j = lmk.j0; j < lmk.j0 + lmk.d; j++) if (inP(i, j)) { ST[idx(i, j)] = ST18.LMK; g[idx(i, j)] = Lp; }\n  // walls (aggressive): two kubes thick round the plot's edge, the patrol's walk on top; a lane inside them\n  const WALL_H = 4;\n  const wallStairs = [];\n  if (walled) {\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n      const c = cheb(i, j), k = idx(i, j);\n      if (c >= N - 2) ST[k] = ST18.WALL; else if (c === N - 3) ST[k] = ST18.POM;\n    }\n    // THE STAIRS UP TO THE WALK, in the lane inside the wall by the south-west corner: from the walk's own level, down a\n    // kube a cell, until they meet the lane's ground (Oct 13: they had stepped from the ground's level, which on a slope\n    // left two-kube rises in them)\n    let lv = H[idx(-N + 1, -N + 3)] + WALL_H;\n    for (let j = -N + 3; j < N - 3; j++) { const k = idx(-N + 2, j); if (ST[k] !== ST18.POM || lv <= H[k]) break; ST[k] = ST18.WALK; wallStairs.push([k, lv]); lv--; }\n  }\n  const lanes = [];   // every lane: { cls, pts: centre cells, dir, w }\n  const LANE_OK = (c) => c === ST18.NONE || c === ST18.FIELD;\n  const markLane = (i, j, cls) => { if (!inP(i, j)) return; const k = idx(i, j), c = ST[k];\n    if (c === ST18.NONE || c === ST18.FIELD || (c >= ST18.ALLEY && c <= ST18.MAIN && c < cls) || (c === ST18.TRACK && cls >= ST18.ALLEY)) ST[k] = cheb(i, j) > coreB && !walled ? (cls === ST18.MAIN ? ST18.MAIN : ST18.TRACK) : cls; };\n  // A lane from (i, j) along (di, dj), `w` wide (the cells beside its centre line toward +perp), bending a cell aside where\n  // the ground is gentler, until it meets another street (join), the plot's edge, or its length.\n  function grow(i, j, di, dj, w, cls, maxLen, o = {}) {\n    const pi = dj !== 0 ? 1 : 0, pj = di !== 0 ? 1 : 0, offs = w === 3 ? [-1, 0, 1] : w === 2 ? [0, 1] : [0];\n    const pts = [], lim = o.lim == null ? N - 1 : o.lim, bend = o.bend == null ? 0.4 : o.bend, pull = o.pull || 0;\n    let ci = i, cj = j, since = 0, crossing = false;\n    for (let s = 0; s < maxLen; s++) {\n      if (!inP(ci, cj) || cheb(ci, cj) > lim) break;\n      const here = st(ci, cj), lane = here === ST18.ALLEY || here === ST18.SIDE || here === ST18.MAIN;\n      // another lane: a crossroads (on through it) or a junction (it ends here); the canal and its quay it crosses on a bridge\n      if (s > 0 && lane && !crossing) crossing = !!(o.cross && o.cross(here, ci, cj)) || rng() < (o.through || 0);\n      if (!lane && !(o.cross && o.cross(here, ci, cj))) crossing = false;\n      if (s > 0 && !LANE_OK(here) && here !== ST18.TRACK && !crossing && !(o.cross && o.cross(here, ci, cj))) { pts.push([ci, cj, 'join']); break; }\n      if (here === ST18.PLAZA || here === ST18.LMK || here === ST18.WALL || here === ST18.POM) { if (s > 0) pts.push([ci, cj, 'join']); break; }\n      let blocked = false;\n      for (const o2 of offs) { const a = ci + o2 * pi, b = cj + o2 * pj, c = st(a, b); if (c === ST18.LMK || c === ST18.PLAZA) blocked = true; }\n      if (blocked && s > 0) { pts.push([ci, cj, 'join']); break; }\n      // never alongside another lane (side by side they would make a street wider than its class): where the ground ahead\n      // is open but a lane runs just past this one's edge, it joins that lane here\n      if (LANE_OK(here)) {\n        const lo = offs[0] - 1, hi = offs[offs.length - 1] + 1, isLane = (c) => c === ST18.ALLEY || c === ST18.SIDE || c === ST18.MAIN || c === ST18.TRACK;\n        if (isLane(st(ci + lo * pi, cj + lo * pj)) || isLane(st(ci + hi * pi, cj + hi * pj))) { pts.push([ci, cj, 'join']); break; }\n      }\n      for (const o2 of offs) markLane(ci + o2 * pi, cj + o2 * pj, cls);\n      pts.push([ci, cj]);\n      // the next step, straight on or a cell aside (never twice running, never off its pull toward a line)\n      const ni = ci + di, nj = cj + dj, h0 = g[idx(Math.max(-N, Math.min(N - 1, ci)), Math.max(-N, Math.min(N - 1, cj)))];\n      if (!crossing && since >= 3 && rng() < bend && cheb(ci, cj) < lim - 1) {\n        let best = null;\n        for (const sd of [0, -1, 1]) {\n          const ai = ni + sd * pi, aj = nj + sd * pj;\n          if (!inP(ai, aj)) continue;\n          const dh = Math.abs(g[idx(ai, aj)] - h0), off = pull ? Math.abs((pi ? ai : aj) - o.line) : 0;\n          const cost = dh + (sd === 0 ? -0.15 : 0.1) + off * pull + rng() * 0.5;\n          if (!best || cost < best.cost) best = { sd, cost };\n        }\n        if (best && best.sd !== 0) {\n          for (const o2 of offs) markLane(ci + (o2 + best.sd) * pi, cj + (o2 + best.sd) * pj, cls);\n          ci += best.sd * pi; cj += best.sd * pj; since = 0;\n        }\n      }\n      ci += di; cj += dj; since++;\n    }\n    const lane = { cls, pts, di, dj, w };\n    lanes.push(lane);\n    return lane;\n  }\n  // THE MAIN LANE (3 wide) through the plaza, out to a gate on each side.\n  const mainS = grow(0, pj0 - 1, 0, -1, 3, ST18.MAIN, 2 * N, { bend: 0.35, pull: 0.25, line: 0 });\n  const mainN = grow(0, pj1 + 1, 0, 1, 3, ST18.MAIN, 2 * N, { bend: 0.35, pull: 0.25, line: 0 });\n  const endOf = (ln) => ln.pts.filter((x) => !x[2]).slice(-1)[0] || [0, -N + 1];\n  // THE CANAL (where the world has water, in a town or a city): two kubes of water a level below its quay, a walkway lower\n  // still along one side (crossed by every lane on a bridge), parallel to the main lane on the plaza's −i side.\n  // (Oct 13: the canal is the world's own water, as a river's is: transient-shape.js lays its cells into the sea, so it is\n  // drawn, dipped and drunk as one. It ends inside the plot, short of its fields, against stone at both ends: a landing at\n  // the walkway's level across them, stairs climbing on from it, so no water ever stands against the open ground.)\n  let canal = null;\n  if (mLiquid && size !== 'village' && N >= 14 && !walled) {\n    const ic = pi0 - 9 - Math.floor(rng() * 2), cEnd = Math.max(3, fringe + 2);\n    if (ic - 2 > -coreB) {\n      canal = { iw: ic - 1, i0: ic, i1: ic + 1, j0: -N + cEnd, j1: N - 1 - cEnd, bridges: [], stairs: [] };\n      for (let j = -N; j < N; j++) {\n        if (j >= canal.j0 && j <= canal.j1) { ST[idx(ic - 1, j)] = ST18.WALK; ST[idx(ic, j)] = ST18.CANAL; ST[idx(ic + 1, j)] = ST18.CANAL; }\n        else if (j === canal.j0 - 1 || j === canal.j1 + 1) { ST[idx(ic - 1, j)] = ST18.WALK; ST[idx(ic, j)] = ST18.WALK; ST[idx(ic + 1, j)] = ST18.WALK; }\n        markLane(ic + 2, j, ST18.SIDE); markLane(ic + 3, j, ST18.SIDE);\n      }\n      // its levels, from the quay lane's ground: the walkway three kubes under the quay, the water a kube under that\n      let lo = 99; for (let j = canal.j0; j <= canal.j1; j++) for (const i of [canal.i1 + 1, canal.i1 + 2]) lo = Math.min(lo, H[idx(i, j)]);\n      canal.walk = lo - 3; canal.water = lo - 4; canal.bed = lo - 5;\n      // the walkway's stairs on past each landing, a kube a cell, up to the ground beside them\n      for (const s of [-1, 1]) {\n        let j = s < 0 ? canal.j0 - 2 : canal.j1 + 2, lv = canal.walk + 1;\n        while (inP(ic - 1, j) && cheb(ic - 1, j) <= coreB && lv <= H[idx(ic - 1, j)] && ST[idx(ic - 1, j)] === ST18.NONE) { ST[idx(ic - 1, j)] = ST18.WALK; canal.stairs.push([ic - 1, j, lv]); j += s; lv++; }\n      }\n      lanes.push({ cls: ST18.SIDE, pts: Array.from({ length: W }, (_, k) => [ic + 2, k - N]), di: 0, dj: 1, w: 2, quay: true });\n    }\n  }\n  // CAVERN QUARTERS (the Hearthfolk, the Kilnborn, the Glassminders, the Hazeclaws): rooms cut into a berm raised along the\n  // town's highest edge, their doors on a lane along its foot.\n  const CAVERN = peopleId === 'hearthfolk' || peopleId === 'kilnborn' || peopleId === 'glassminders' || peopleId === 'hazeclaws';\n  let cavern = null;\n  if (CAVERN && N >= (walled ? 14 : 10)) {\n    const sides = [[1, 0], [-1, 0], [0, 1]].map(([si, sj]) => { let s = 0, n = 0;\n      for (let t = -N; t < N; t++) { const i = si ? (si > 0 ? N - 1 : -N) : t, j = sj ? N - 1 : t; s += TR.h[idx(i, j)]; n++; } return { si, sj, m: s / n }; });\n    sides.sort((a, b) => b.m - a.m);\n    // (inside the walls of a raiders' town: the berm stands against the lane inside them)\n    const sd = sides[0], off = walled ? 3 : 0, depth = walled ? 4 : Math.max(3, Math.min(5, fringe + 2));\n    cavern = { si: sd.si, sj: sd.sj, depth: off + depth, rooms: [] };\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n      const e = sd.si > 0 ? N - 1 - i : sd.si < 0 ? i + N : N - 1 - j;   // columns from that edge\n      const k = idx(i, j);\n      if (ST[k] === ST18.WALL || ST[k] === ST18.POM) continue;\n      if (e >= off && e < off + depth && ST[k] !== ST18.MAIN && ST[k] !== ST18.TRACK && ST[k] !== ST18.CANAL && ST[k] !== ST18.WALK) { ST[k] = ST18.BERM; g[k] = Math.max(g[k], 0) + 4; cavern.berm = true; }\n      else if (e === off + depth || e === off + depth + 1) { if (ST[k] === ST18.NONE || ST[k] === ST18.FIELD) ST[k] = ST18.SIDE; }\n    }\n  }\n\n  const crossCanal = (c, i, j) => !!canal && j >= canal.j0 - 1 && j <= canal.j1 + 1 && (c === ST18.CANAL || c === ST18.WALK || i === canal.i1 + 1 || i === canal.i1 + 2);\n  // SIDE LANES (2 wide) off the main lane, every few cells, alternating sides; a few run on to the fields as tracks.\n  for (const arm of [mainS, mainN]) {\n    let next = R(2, 4), side = rng() < 0.5 ? 1 : -1;\n    for (let s = 0; s < arm.pts.length; s++) {\n      const [ci, cj, tag] = arm.pts[s];\n      if (tag || cheb(ci, cj) > coreB - 2) break;\n      if (s < next) continue;\n      next = s + R(5, 8);\n      const si = side > 0 ? ci + 2 : ci - 2;\n      grow(si, cj, side, 0, 2, ST18.SIDE, R(Math.floor(N / 2), 2 * N), { bend: 0.3, cross: crossCanal, through: 0.35 });\n      if (rng() < 0.45) grow(side > 0 ? ci - 2 : ci + 2, cj, -side, 0, 2, ST18.SIDE, R(4, N), { bend: 0.3, cross: crossCanal, through: 0.35 });\n      side = -side;\n    }\n  }\n  // …from the plaza's −i side, and either side of the landmark (lanes that end on it: the vistas).\n  grow(pi0 - 1, -1, -1, 0, 2, ST18.SIDE, 2 * N, { bend: 0.3, cross: crossCanal, through: 0.5 });\n  if (lmk) {\n    grow(lmk.i0, lmk.j0 - 2, 1, 0, 2, ST18.SIDE, 2 * N, { bend: 0.25 });\n    grow(lmk.i0, lmk.j0 + lmk.d, 1, 0, 2, ST18.SIDE, 2 * N, { bend: 0.25 });\n  }\n  // A CITY's side lanes branch again, along the main lane's way, some of them alleys.\n  if (size !== 'village') for (const ln of lanes.slice()) {\n    if (ln.cls !== ST18.SIDE || ln.quay) continue;\n    let next = R(4, 6);\n    for (let s = 0; s < ln.pts.length; s++) {\n      const [ci, cj, tag] = ln.pts[s];\n      if (tag || cheb(ci, cj) > coreB - 3) break;\n      if (s < next) continue;\n      next = s + R(6, 9);\n      const up = rng() < 0.5 ? 1 : -1, w = size === 'city' && rng() < 0.5 ? 2 : 1;\n      grow(ci, up > 0 ? cj + 2 : cj - 1, 0, up, w, w === 2 ? ST18.SIDE : ST18.ALLEY, R(4, 10), { bend: 0.25, cross: crossCanal, through: 0.2 });\n    }\n  }\n  // ALLEYS (1 wide) through any block too deep for a row of houses each side: from its deepest cell, both ways, to streets.\n  const isStreet = (c) => c === ST18.ALLEY || c === ST18.SIDE || c === ST18.MAIN || c === ST18.PLAZA || c === ST18.POM;\n  const coreFree = (i, j) => inP(i, j) && cheb(i, j) <= coreB && ST[idx(i, j)] === ST18.NONE;\n  for (let pass = 0; pass < 14; pass++) {\n    const dist = new Int16Array(WW).fill(-1), q = [];\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) if (isStreet(ST[idx(i, j)])) { dist[idx(i, j)] = 0; q.push(i, j); }\n    for (let h2 = 0; h2 < q.length; h2 += 2) { const i = q[h2], j = q[h2 + 1], d0 = dist[idx(i, j)];\n      for (const [a, b] of D4) { const ni = i + a, nj = j + b; if (!coreFree(ni, nj) || dist[idx(ni, nj)] >= 0) continue; dist[idx(ni, nj)] = d0 + 1; q.push(ni, nj); } }\n    let deep = null;\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const d0 = dist[idx(i, j)] < 0 ? 99 : dist[idx(i, j)]; if (coreFree(i, j) && d0 > 7 && (!deep || d0 > deep[2])) deep = [i, j, d0]; }\n    if (!deep) break;\n    const [di0, dj0] = deep, along = rng() < 0.5 ? [1, 0] : [0, 1];\n    for (const s of [1, -1]) for (let t = s > 0 ? 0 : 1; t < W; t++) {\n      const i = di0 + along[0] * t * s, j = dj0 + along[1] * t * s;\n      if (!inP(i, j) || cheb(i, j) > coreB) break;\n      if (!coreFree(i, j)) break;\n      ST[idx(i, j)] = ST18.ALLEY;\n    }\n  }\n  // COURTYARDS INSIDE THE BIG BLOCKS: the ground five and more cells from any lane is kept open (a yard), so the houses\n  // round a big block stand shoulder to shoulder round it and one of them is pierced by an arch to reach it.\n  { const dist = new Int16Array(WW).fill(-1), q = [];\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) if (isStreet(ST[idx(i, j)])) { dist[idx(i, j)] = 0; q.push(i, j); }\n    for (let h2 = 0; h2 < q.length; h2 += 2) { const i = q[h2], j = q[h2 + 1], d0 = dist[idx(i, j)];\n      for (const [a, b] of D4) { const ni = i + a, nj = j + b; if (!coreFree(ni, nj) || dist[idx(ni, nj)] >= 0) continue; dist[idx(ni, nj)] = d0 + 1; q.push(ni, nj); } }\n    const deep = (i, j) => coreFree(i, j) && dist[idx(i, j)] >= 5, seen = new Uint8Array(WW);\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n      if (!deep(i, j) || seen[idx(i, j)]) continue;\n      const cells = [], st2 = [[i, j]]; seen[idx(i, j)] = 1;\n      while (st2.length) { const [ci, cj] = st2.pop(); cells.push([ci, cj]); for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (deep(ni, nj) && !seen[idx(ni, nj)]) { seen[idx(ni, nj)] = 1; st2.push([ni, nj]); } } }\n      if (cells.length >= 6) for (const [ci, cj] of cells) ST[idx(ci, cj)] = ST18.YARD;\n    } }\n  // PLAZAS WHERE LANES MEET: a few more squares (4 x 4) at side lanes' mouths on the main lane, each with something in it.\n  const plazas = [{ i0: pi0, j0: pj0, i1: pi1, j1: pj1, main: true }];\n  for (let k = 0, tries = 0; k < S.plazas && tries < 40; tries++) {\n    const ln = lanes[Math.floor(rng() * lanes.length)];\n    if (!ln || ln.cls !== ST18.SIDE || ln.quay || ln.pts.length < 6) continue;\n    const [ci, cj] = ln.pts[Math.min(ln.pts.length - 1, R(2, 4))];\n    const i0 = ci - 1, j0 = cj - 1;\n    if (plazas.some((q) => !(i0 + 4 < q.i0 - 2 || i0 > q.i1 + 2 || j0 + 4 < q.j0 - 2 || j0 > q.j1 + 2))) continue;\n    let ok = true;\n    for (let i = i0; i < i0 + 4 && ok; i++) for (let j = j0; j < j0 + 4; j++) { const c = st(i, j); if (!(c === ST18.NONE || isStreet(c)) || c === ST18.PLAZA || cheb(i, j) > coreB) { ok = false; break; } }\n    if (!ok) continue;\n    for (let i = i0; i < i0 + 4; i++) for (let j = j0; j < j0 + 4; j++) ST[idx(i, j)] = ST18.PLAZA;\n    plazas.push({ i0, j0, i1: i0 + 3, j1: j0 + 3 });\n    k++;\n  }\n  // THE FRINGE (a town without walls): fields and pens past the core, tracks across them; outposts at the corners.\n  if (!walled) for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) if (cheb(i, j) > coreB && ST[idx(i, j)] === ST18.NONE) ST[idx(i, j)] = ST18.FIELD;\n  // THE CANAL'S BRIDGES, their levels first (Oct 13: before the blocks, so a house fronting a bridge's approach takes the\n  // level it will have, and nothing a façade hangs out is laid over a lane that rises after it): the lane's cells either\n  // side of the water at the higher of their levels, the deck at that level over the walkway and the water.\n  const canalSpans = [], bridgeOver = (j) => canalSpans.some((sp) => sp.js.includes(j));\n  if (canal) for (const ln of lanes) {\n    if (ln.di === 0) continue;\n    const offs = ln.w === 3 ? [-1, 0, 1] : ln.w === 2 ? [0, 1] : [0];\n    const span = ln.pts.filter(([ci, cj]) => ci >= canal.iw && ci <= canal.i1 && cj >= canal.j0 - 1 && cj <= canal.j1 + 1);\n    if (!span.length) continue;\n    const js = [...new Set(span.flatMap(([, cj]) => offs.map((o) => cj + o)))].filter((j) => j >= canal.j0 - 1 && j <= canal.j1 + 1);\n    if (!js.length) continue;\n    // (Oct 13) the deck steps a kube at most a cell from the quay's level to the far side's, at least three kubes over the\n    // walkway where it crosses it; the far side's lane climbs or falls to meet it a kube a cell (it had stood a cliff off it)\n    const lv = new Map();\n    for (const j of js) {\n      const L4 = g[idx(canal.i1 + 1, j)], L0 = inP(canal.iw - 1, j) ? g[idx(canal.iw - 1, j)] : L4;\n      const L1 = Math.max(canal.walk + 3, L4 - 2, Math.min(L4 + 2, L0));\n      const L3 = L4 + Math.sign(L1 - L4) * Math.min(1, Math.abs(L1 - L4)), L2 = Math.round((L1 + L3) / 2);\n      lv.set(j, [L1, L2, L3]);\n      let prev = L1;\n      for (let i = canal.iw - 1; inP(i, j) && isStreet(ST[idx(i, j)]); i--) { const k = idx(i, j), want = Math.max(prev - 1, Math.min(prev + 1, g[k])); if (want === g[k]) break; g[k] = want; prev = want; }\n    }\n    canalSpans.push({ js, lv });\n  }\n  // A LANE THAT MEETS THE CANAL'S WALKWAY from the far side steps down to it a kube a cell (Oct 13: it had ended at a drop\n  // of two kubes and more, which nobody climbs back up)\n  if (canal) for (let j = canal.j0 - 1; j <= canal.j1 + 1; j++) {\n    const i0w = canal.iw - 1; if (!inP(i0w, j) || !isStreet(ST[idx(i0w, j)]) || bridgeOver(j)) continue;\n    let prev = canal.walk;\n    for (let i = i0w; inP(i, j) && isStreet(ST[idx(i, j)]); i--) { const k = idx(i, j); if (g[k] <= prev + 1) break; g[k] = prev + 1; prev++; }\n  }\n  // ---- 3. THE BLOCKS: narrow plots shoulder to shoulder along every lane, deeper ones round courtyards ----\n  const RANK = { [ST18.PLAZA]: 5, [ST18.MAIN]: 4, [ST18.SIDE]: 3, [ST18.ALLEY]: 2, [ST18.POM]: 1 };\n  const free = (i, j) => inP(i, j) && cheb(i, j) <= coreB && ST[idx(i, j)] === ST18.NONE && owner[idx(i, j)] < 0;\n  const front = [];\n  for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n    if (!free(i, j)) continue;\n    let best = null;\n    D4.forEach(([a, b], dirI) => { const c = st(i + a, j + b), r = RANK[c] || 0; if (r && (!best || r > best.r)) best = { r, dirI, a, b }; });\n    if (best) front.push([i, j, best.r, best.dirI, best.a, best.b]);\n  }\n  // each frontage line in turn, the busiest streets first, along the line in order\n  front.sort((x, y) => y[2] - x[2] || x[3] - y[3] || (x[3] < 2 ? x[0] - y[0] || x[1] - y[1] : x[1] - y[1] || x[0] - y[0]));\n  const buildings = [];\n  const dirSide = (a, b) => (a < 0 ? 0 : a > 0 ? 1 : b < 0 ? 2 : 3);   // the side of the building the street is on\n  for (const [fi0, fj0, r, , a, b] of front) {\n    if (!free(fi0, fj0)) continue;\n    const ua = a !== 0 ? 0 : 1, ub = a !== 0 ? 1 : 0;   // along the façade: +j (when the street is along ±i), else +i\n    let avail = 0;\n    while (avail < 9) { const i = fi0 + ua * avail, j = fj0 + ub * avail; if (!free(i, j) || !(RANK[st(i + a, j + b)] > 0)) break; avail++; }\n    if (avail < 2) continue;\n    let w = r >= 4 ? R(3, 5) : R(3, 7);\n    if (avail - w > 0 && avail - w < 3) w = avail - w + w <= 7 ? avail : Math.max(3, avail - 3);\n    w = Math.min(w, avail);\n    let dt = size === 'city' ? R(5, 8) : R(4, 7), dd = 0;\n    while (dd < dt) { let ok = true; for (let t = 0; t < w; t++) if (!free(fi0 + ua * t - a * dd, fj0 + ub * t - b * dd)) { ok = false; break; } if (!ok) break; dd++; }\n    if (dd < 2 || (dd < 3 && w > 4)) continue;\n    const ia = [fi0, fi0 + ua * (w - 1), fi0 - a * (dd - 1)], ja = [fj0, fj0 + ub * (w - 1), fj0 - b * (dd - 1)];\n    const i0 = Math.min(...ia), i1 = Math.max(...ia), j0 = Math.min(...ja), j1 = Math.max(...ja);\n    const B = { id: buildings.length, i0, j0, w: i1 - i0 + 1, d: j1 - j0 + 1, front: dirSide(a, b), rank: r, kiosk: dd < 3 };\n    for (let i = i0; i <= i1; i++) for (let j = j0; j <= j1; j++) owner[idx(i, j)] = B.id;\n    buildings.push(B);\n  }\n  // L-SHAPES: a wing behind a building, into free ground at its back.\n  for (const B of buildings.slice()) {\n    if (B.kiosk || rng() < 0.45) continue;\n    const back = B.front ^ 1, bi = back === 0 ? -1 : back === 1 ? 1 : 0, bj = back === 2 ? -1 : back === 3 ? 1 : 0;\n    const len = back < 2 ? B.d : B.w, wl = Math.max(2, Math.min(len - 1, R(2, 4))), off = rng() < 0.5 ? 0 : len - wl;\n    let dd = 0;\n    while (dd < 4) { let ok = true; for (let t = 0; t < wl; t++) { const i = back < 2 ? (bi > 0 ? B.i0 + B.w + dd : B.i0 - 1 - dd) : B.i0 + off + t, j = back < 2 ? B.j0 + off + t : (bj > 0 ? B.j0 + B.d + dd : B.j0 - 1 - dd); if (!free(i, j)) { ok = false; break; } } if (!ok) break; dd++; }\n    if (dd < 2) continue;\n    const i0 = back < 2 ? (bi > 0 ? B.i0 + B.w : B.i0 - dd) : B.i0 + off, j0 = back < 2 ? B.j0 + off : (bj > 0 ? B.j0 + B.d : B.j0 - dd);\n    const Wg = { id: buildings.length, i0, j0, w: back < 2 ? dd : wl, d: back < 2 ? wl : dd, front: -1, rank: 0, wingOf: B.id };\n    for (let i = i0; i < i0 + Wg.w; i++) for (let j = j0; j < j0 + Wg.d; j++) owner[idx(i, j)] = Wg.id;\n    buildings.push(Wg);\n  }\n  // COURTYARDS: what is left inside a block. A big one is reached through an arch in a building between it and a lane.\n  const yards = [];\n  { const seen = new Uint8Array(WW);\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n      const yardOk = (x, y) => free(x, y) || (inP(x, y) && ST[idx(x, y)] === ST18.YARD && owner[idx(x, y)] < 0);\n      if (!yardOk(i, j) || seen[idx(i, j)]) continue;\n      const cells = [], q = [[i, j]]; seen[idx(i, j)] = 1;\n      while (q.length) { const [ci, cj] = q.pop(); cells.push([ci, cj]); for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (yardOk(ni, nj) && !seen[idx(ni, nj)]) { seen[idx(ni, nj)] = 1; q.push([ni, nj]); } } }\n      yards.push(cells);\n    } }\n  const passages = [];\n  for (const cells of yards) {\n    for (const [ci, cj] of cells) ST[idx(ci, cj)] = ST18.YARD;\n    const reach = cells.some(([ci, cj]) => D4.some(([a, b]) => isStreet(st(ci + a, cj + b))));\n    // a big yard gets its arch, even one a gap already reaches; one nothing reaches gets one whatever its size (Oct 13)\n    if (reach && (cells.length < 6 || rng() < 0.35)) continue;\n    // a building beside the yard whose depth runs straight from a lane to it\n    let done = false;\n    for (const [ci, cj] of cells) {\n      if (done) break;\n      for (const [a, b] of D4) {\n        const bi = ci + a, bj = cj + b; if (!inP(bi, bj)) continue;\n        const o2 = owner[idx(bi, bj)]; if (o2 < 0) continue;\n        const B = buildings[o2]; if (B.front < 0 || B.kiosk || B.passage) continue;\n        const fa = B.front === 0 ? -1 : B.front === 1 ? 1 : 0, fb = B.front === 2 ? -1 : B.front === 3 ? 1 : 0;\n        if (fa !== a || fb !== b) continue;     // the yard is at its back, the lane at its front (the far side)\n        const run = [];\n        let ti = bi, tj = bj;\n        while (inP(ti, tj) && owner[idx(ti, tj)] === o2) { run.push([ti, tj]); ti += fa; tj += fb; }\n        if (!isStreet(st(ti, tj))) continue;\n        for (const [pi, pj] of run) ST[idx(pi, pj)] = ST18.PASS;\n        B.passage = run; passages.push({ b: o2, run });\n        done = true; break;\n      }\n    }\n    if (!done && !reach) { for (const [ci, cj] of cells) ST[idx(ci, cj)] = ST18.GARDEN; cells.garden = true; }   // no way in: a garden\n  }\n  // Each building's levels: its floor is the lane's level at its door (a terrace a block); a yard's, its own ground.\n  const doorCellOf = (B) => {\n    const fa = B.front === 0 ? -1 : B.front === 1 ? 1 : 0, fb = B.front === 2 ? -1 : B.front === 3 ? 1 : 0;\n    const along = B.front < 2 ? B.d : B.w, mid = Math.floor(along / 2);\n    const ai = B.front < 2 ? (fa < 0 ? B.i0 : B.i0 + B.w - 1) : B.i0 + mid, aj = B.front < 2 ? B.j0 + mid : (fb < 0 ? B.j0 : B.j0 + B.d - 1);\n    return { at: [ai, aj], out: [ai + fa, aj + fb], in: [ai - fa, aj - fb], u: mid };\n  };\n  for (const B of buildings) {\n    if (B.front >= 0) { const dc = doorCellOf(B); B.door = dc.out; B.inside = dc.in; B.doorAt = dc.at; B.doorU = dc.u; B.level = g[idx(dc.out[0], dc.out[1])]; }\n    else { const P0 = buildings[B.wingOf]; B.level = P0.level; }\n  }\n  for (const B of buildings) {\n    if (B.front < 0) continue;\n    for (let i = B.i0; i < B.i0 + B.w; i++) for (let j = B.j0; j < B.j0 + B.d; j++) g[idx(i, j)] = B.level;\n    if (B.passage) for (const [pi, pj] of B.passage) g[idx(pi, pj)] = B.level;\n  }\n  for (const B of buildings) if (B.front < 0) for (let i = B.i0; i < B.i0 + B.w; i++) for (let j = B.j0; j < B.j0 + B.d; j++) g[idx(i, j)] = B.level;\n  for (const cells of yards) { // a courtyard stands at the level of the building it is reached through, else its mean\n    let lv = null; for (const ps of passages) { const B = buildings[ps.b], [li, lj] = ps.run[0];   // (the arch's yard end: Oct 13, it read the lane's)\n    if (cells.some(([ci, cj]) => Math.abs(ci - li) + Math.abs(cj - lj) === 1)) { lv = B.level; break; } }\n    // (Oct 13) else at the level of the street beside it that most of its edge meets, so it is walked into, not climbed to\n    if (lv == null && !cells.garden) { const cnt = new Map(); for (const [ci, cj] of cells) for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (isStreet(st(ni, nj))) { const z = g[idx(ni, nj)]; cnt.set(z, (cnt.get(z) || 0) + 1); } }\n      let best = null; for (const [z, n] of cnt) if (!best || n > best[1] || (n === best[1] && z < best[0])) best = [z, n]; if (best) lv = best[0]; }\n    if (lv == null) { let s = 0; for (const [ci, cj] of cells) s += g[idx(ci, cj)]; lv = Math.floor(s / cells.length + 0.5); }\n    for (const [ci, cj] of cells) g[idx(ci, cj)] = lv;\n  }\n  // wet columns: decks on piles, over the water\n  for (let k = 0; k < WW; k++) if (wet[k] && g[k] < 0) g[k] = 0;\n  // the walls' tops (a terrace of their own) and the canal's levels\n  if (walled) { for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const k = idx(i, j); if (ST[k] === ST18.WALL) g[k] = H[k] + WALL_H; } for (const [k, lv] of wallStairs) g[k] = lv; }\n  // THE FRINGE ON ITS OWN GROUND (the owner, Oct 13: \"remove the clearance rings around cities, they should border right up\n  // against the natural landscape\"): past the core, the fields lie on the plot's natural ground as the record has it, and\n  // a track across them climbs or falls with it a kube a cell at most from the lane it leaves; the core's edge meets them\n  // in terraces and retaining walls (transient-shape.js lays no ramp round a version 18 plot any more).\n  if (!walled) {\n    const ring = [];\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) if (cheb(i, j) > coreB) ring.push([i, j, cheb(i, j)]);\n    ring.sort((a, b) => a[2] - b[2] || a[0] - b[0] || a[1] - b[1]);\n    const TRACKY = new Set([ST18.TRACK, ST18.MAIN, ST18.SIDE, ST18.ALLEY, ST18.POM]);\n    for (const [i, j, c] of ring) {\n      const k = idx(i, j), nat = TR.h[k];\n      if (ST[k] === ST18.FIELD) { g[k] = nat; continue; }\n      if (!TRACKY.has(ST[k])) continue;\n      let lo2 = -99, hi2 = 99;\n      for (const [a, b] of D4) { const ni = i + a, nj = j + b; if (!inP(ni, nj) || cheb(ni, nj) >= c) continue; const nk = idx(ni, nj); if (!TRACKY.has(ST[nk]) && ST[nk] !== ST18.PLAZA) continue; lo2 = Math.max(lo2, g[nk] - 1); hi2 = Math.min(hi2, g[nk] + 1); }\n      if (lo2 > hi2) hi2 = lo2;\n      g[k] = Math.max(lo2, Math.min(hi2, nat));\n    }\n    for (const [i, j] of ring) { const k = idx(i, j); if (wet[k] && g[k] < 0) g[k] = 0; }   // (over water still a deck on piles)\n    // …and side by side with each other, a kube at most (a wide lane, a track beside a track)\n    for (let pass = 0; pass < 3; pass++) for (const [i, j] of ring) { const k = idx(i, j); if (!TRACKY.has(ST[k])) continue;\n      for (const [a, b] of D4) { const ni = i + a, nj = j + b; if (!inP(ni, nj)) continue; const nk = idx(ni, nj); if (TRACKY.has(ST[nk]) && g[nk] > g[k] + 1) g[k] = g[nk] - 1; } }\n  }\n  if (canal) {\n    for (let j = canal.j0 - 1; j <= canal.j1 + 1; j++) {\n      const end = j < canal.j0 || j > canal.j1;\n      g[idx(canal.iw, j)] = canal.walk; g[idx(canal.i0, j)] = end ? canal.walk : canal.bed; g[idx(canal.i1, j)] = end ? canal.walk : canal.bed;\n    }\n    for (const [si, sj, lv] of canal.stairs) g[idx(si, sj)] = lv;\n  }\n\n  // ---- 4. EACH BUILDING: its storeys, its district, its look (seeded, so no two neighbours match) ----\n  const maxS = Math.max(1, Math.min(S.maxS, F.cap));\n  // A TOWN'S PALETTE: two of its people's shutter colours and one or two awning sets (every material is a draw of its own)\n  const shutters = F.shutter ? [pick(F.shutter), pick(F.shutter)] : null, awnings = F.awn ? [pick(F.awn), pick(F.awn)] : null;\n  const stillsP = F.stilts || (TH.stilts ? 0.5 : 0);\n  let prev = null;\n  for (const B of buildings) {\n    const cx = B.i0 + B.w / 2, cy = B.j0 + B.d / 2, r = Math.max(Math.abs(cx), Math.abs(cy)) / N;\n    let n = Math.round(maxS - (maxS - 1) * Math.max(0, Math.min(1, (r - 0.12) / 0.72)) + (rng() - 0.5) * 1.2);\n    const edgeB = Math.max(cheb(B.i0, B.j0), cheb(B.i0 + B.w - 1, B.j0 + B.d - 1), cheb(B.i0, B.j0 + B.d - 1), cheb(B.i0 + B.w - 1, B.j0)) >= coreB - 1;\n    B.district = B.rank >= 4 ? 'shop' : edgeB ? 'workshop' : 'home';\n    if (B.district === 'workshop') n = Math.min(n, 2);\n    if (B.kiosk) n = 1;\n    if (B.front < 0) n = Math.max(1, buildings[B.wingOf].n - 1);\n    n = Math.max(1, Math.min(maxS, n));\n    if (B.w < 3 || B.d < 3) n = Math.min(n, 3);\n    const sty = { base: pick(F.base), wall: pick(F.wall), top: F.top.length && rng() < 0.6 ? pick(F.top) : null, shutter: shutters ? pick(shutters) : null,\n                  awn: awnings ? pick(awnings) : null, jetty: rng() < F.jetty, pitched: rng() < (p.climate === 'cold' ? Math.max(F.pitched, 0.45) : F.pitched),\n                  chimney: rng() < F.chimney, tank: rng() < F.tank, mast: rng() < Math.max(F.mast, TH.antenna || 0), win: rng() < 0.55 ? 4 : 6, balcony: rng() < 0.55,\n                  strip: !!F.strip && rng() < 0.75, stilts: rng() < stillsP, dew: rng() < (TH.dewMast || 0), cap: rng() < (TH.domeCap || 0), tower: rng() < 0.45 };\n    if (TH.plaster && rng() < 0.55) sty.wall = pick(TH.plaster);\n    if (TH.dark && rng() < 0.6) sty.base = pick(TH.dark);\n    if (TH.hull && rng() < 0.45) sty.base = TH.hull;\n    if (TH.honey && rng() < 0.45) sty.top = TH.honey;\n    // no two neighbours alike: a building beside the last one differs in its wall, or its height\n    if (prev && Math.abs(prev.i0 - B.i0) + Math.abs(prev.j0 - B.j0) <= 8 && prev.sty.wall === sty.wall) {\n      for (let t = 0; t < 4 && sty.wall === prev.sty.wall; t++) sty.wall = pick(F.wall.concat(TH.plaster || []));\n      if (sty.wall === prev.sty.wall && prev.n === n) n = n > 1 ? n - 1 : n + 1 <= maxS ? n + 1 : n;\n    }\n    if (B.front < 0) { const P0 = buildings[B.wingOf]; Object.assign(sty, { base: P0.sty.base, wall: P0.sty.wall, top: P0.sty.top, shutter: P0.sty.shutter, stilts: P0.sty.stilts }); }\n    sty.mBase = M(sty.base); sty.mWall = M(sty.wall); sty.mTop = sty.top ? M(sty.top) : 0; sty.mShut = sty.shutter ? M(sty.shutter) : 0;\n    sty.mAwn = sty.awn ? [M(sty.awn[0]), M(sty.awn[1])] : null;\n    B.n = n; B.sty = sty; B.Y0 = 2 * (B.level + 1) + (sty.stilts ? 2 : 0);\n    // its faces on streets: the front, and any other side a lane or a square runs along (a corner)\n    B.faces = [];\n    for (let s = 0; s < 4; s++) {\n      const along = s < 2 ? B.d : B.w; let on = 0;\n      for (let t = 0; t < along; t++) { const i = s === 0 ? B.i0 - 1 : s === 1 ? B.i0 + B.w : B.i0 + t, j = s < 2 ? B.j0 + t : s === 2 ? B.j0 - 1 : B.j0 + B.d; const c = st(i, j); if (isStreet(c) || c === ST18.TRACK || c === ST18.YARD || c === ST18.PASS) on++; }\n      if (s === B.front || on * 2 >= along) B.faces.push(s);\n    }\n    B.corner = B.faces.length >= 2 && B.front >= 0;\n    prev = B;\n  }\n  const OVER = new Set([ST18.ALLEY, ST18.SIDE, ST18.MAIN, ST18.PLAZA, ST18.TRACK, ST18.YARD, ST18.PASS, ST18.POM, ST18.WALK]);\n  const bandOf = (B, f) => (f === 0 ? B.sty.mBase : f === B.n - 1 && B.n >= 3 && B.sty.mTop ? B.sty.mTop : B.sty.mWall);\n  const sideMap = (B, s) => {\n    const fi0 = 2 * B.i0, fi1 = 2 * (B.i0 + B.w) - 1, fj0 = 2 * B.j0, fj1 = 2 * (B.j0 + B.d) - 1;\n    if (s === 0) return { L: 2 * B.d, at: (u, v) => [fi0 + v, fj0 + u] };\n    if (s === 1) return { L: 2 * B.d, at: (u, v) => [fi1 - v, fj0 + u] };\n    if (s === 2) return { L: 2 * B.w, at: (u, v) => [fi0 + u, fj0 + v] };\n    return { L: 2 * B.w, at: (u, v) => [fi0 + u, fj1 - v] };\n  };\n  // how wide the street is off side `s` of a building, at its middle\n  const laneWidthAt = (B, s) => {\n    const along = s < 2 ? B.d : B.w, t = Math.floor(along / 2), di = s === 0 ? -1 : s === 1 ? 1 : 0, dj = s === 2 ? -1 : s === 3 ? 1 : 0;\n    let i = s === 0 ? B.i0 - 1 : s === 1 ? B.i0 + B.w : B.i0 + t, j = s < 2 ? B.j0 + t : s === 2 ? B.j0 - 1 : B.j0 + B.d, n2 = 0;\n    while (n2 < 6) { const c = st(i, j); if (!(isStreet(c) || c === ST18.TRACK || c === ST18.YARD)) break; n2++; i += di; j += dj; }\n    return n2;\n  };\n  const mHaz = M(TH.hazard || F.banner || 'Radiance Hazard Stripes'), mAirGlow = TH.airGlow ? M(TH.airGlow) : 0, mStrip = F.strip ? M(F.strip) : 0;\n  const mSeam = F.seam ? M(F.seam) : 0, mPipe = F.pipe ? M(F.pipe) : 0, mVent = F.vent ? M(F.vent) : 0, mBox = F.box ? M(F.box) : mBeam;\n  const mFlowers = (F.flowers || []).map(M), mBanner = F.banner ? M(F.banner) : 0, mLeaf2 = M('Bloom Leaf Biomass'), mTholin = (TH.tholin || []).map(M);\n  const mCrystal = TH.crystal ? M(pick(TH.crystal)) : 0, mGlowChim = TH.glowChimney ? M(TH.glowChimney) : 0, mPilaster = F.pilaster ? M(F.pilaster) : 0;\n  const flowersOn = mFlowers.length > 0 && (TH.flowers || p.climate === 'arid' || p.climate === 'airless');\n  const stats = { windows: 0, doors: 0, lanterns: 0, balconies: 0, awnings: 0, vines: 0, pipes: 0, roofs: 0, jetties: 0, courtyards: passages.length, spans: 0, bridges: 0, lamps: 0 };\n\n  function shell(B) {\n    const n = B.n, Y0 = B.Y0, Hb = 6 * n, fi0 = 2 * B.i0, fi1 = 2 * (B.i0 + B.w) - 1, fj0 = 2 * B.j0, fj1 = 2 * (B.j0 + B.d) - 1;\n    for (let a = fi0; a <= fi1; a++) for (let b = fj0; b <= fj1; b++) {\n      const edge = a <= fi0 + 1 || a >= fi1 - 1 || b <= fj0 + 1 || b >= fj1 - 1;\n      for (let f = 0; f < n; f++) for (let y = 6 * f; y < 6 * f + 6; y++) {\n        if (edge) fput(a, b, Y0 + y, bandOf(B, f));\n        else if (f < n - 1 && y >= 6 * f + 4) fput(a, b, Y0 + y, mFloor);      // the floor of the storey above\n      }\n      fput(a, b, Y0 + Hb, mRoof); fput(a, b, Y0 + Hb + 1, mRoof);              // the roof's slab\n    }\n    // the stilts under a raised floor: a post at each corner and every third kube\n    if (B.sty.stilts) { fbox(fi0, fj0, Y0 - 1, fi1, fj1, Y0 - 1, mFloor);\n      for (let a = fi0; a <= fi1; a += 1) for (let b = fj0; b <= fj1; b += 1) { const ka = a - fi0, kb = b - fj0;\n        if ((ka === 0 || a === fi1 || ka % 6 === 0) && (kb === 0 || b === fj1 || kb % 6 === 0)) fput(a, b, Y0 - 2, mBeam); } }\n    // quoins: the corners' kubes in trim, every other kube up\n    for (const [a, b] of [[fi0, fj0], [fi1 - 1, fj0], [fi0, fj1 - 1], [fi1 - 1, fj1 - 1]]) for (let k = 1; k < 3 * n; k += 2) fbox(a, b, Y0 + 2 * k, a + 1, b + 1, Y0 + 2 * k + 1, mTrim);\n    // inside: a lamp in each storey's ceiling (the windows glow at night), a table on the ground floor\n    if (B.w >= 3 && B.d >= 3) {\n      const ci = B.i0 + Math.floor(B.w / 2), cj = B.j0 + Math.floor(B.d / 2);\n      if (rng() < 0.6) fbox(2 * ci, 2 * cj, Y0 + 4, 2 * ci + 1, 2 * cj + 1, Y0 + 5, mLamp);                          // a lamp in the ground floor's ceiling\n      if (n >= 3 && rng() < 0.4) fbox(2 * ci, 2 * cj, Y0 + 6 * (n - 2) + 4, 2 * ci + 1, 2 * cj + 1, Y0 + 6 * (n - 2) + 5, mLamp);   // …and one upstairs\n      // (Oct 13: the table stands in one corner kube, where it leaves the room round it free to walk; none in a room a\n      // kube wide, where it would close it)\n      const ti = 2 * (B.i0 + 1), tj = 2 * (B.j0 + 1);\n      if (B.w >= 4 && B.d >= 4) { fbox(ti, tj, Y0 + 1, ti + 1, tj + 1, Y0 + 1, mBeam); fput(ti, tj, Y0, mBeam); }\n    }\n  }\n  function facade(B, s) {\n    const sm = sideMap(B, s), L = sm.L, n = B.n, sty = B.sty, Hb = 6 * n, isFront = s === B.front;\n    const lw = laneWidthAt(B, s), roomy = lw >= 2, wide = lw >= 3 || B.rank >= 4;\n    // a JETTY steps the upper storeys out a whole kube over a wide lane or a square (the street's cell, so it costs no bits)\n    const jet = sty.jetty && isFront && lw >= 3 && n >= 2, jv = (f) => (jet && f >= 1 ? -2 : 0);\n    // Nothing a façade puts out over a street hangs within two kubes of that street's own level (a lane may climb beside a\n    // building by stairs): a resident and a walker pass under every sill, awning, lantern and jetty. A step (`low`) may.\n    const P = (u, v, y, c, low) => { const ab = sm.at(u, v), Y = B.Y0 + y;\n      if (v < 0 && c && !low) { const ci = ab[0] >> 1, cj = ab[1] >> 1; if (inP(ci, cj)) { const k = idx(ci, cj); if (owner[k] < 0 && OVER.has(ST[k]) && Y < 2 * (g[k] + 1) + 4) return; } }\n      if (low) fixing++; fput(ab[0], ab[1], Y, c); if (low) fixing--; };\n    const G = (u, v, y) => { const ab = sm.at(u, v); return fget(ab[0], ab[1], B.Y0 + y); };\n    if (jet) { stats.jetties++;\n      for (let f = 1; f < n; f++) { for (let y = 6 * f; y < 6 * f + 6; y++) for (let u = 0; u < L; u++) { P(u, -1, y, bandOf(B, f)); P(u, -2, y, bandOf(B, f)); }\n        for (let u = 1; u < L - 1; u += 4) { P(u, -1, 6 * f - 1, mBeam); P(u, -2, 6 * f - 1, mBeam); P(u, -1, 6 * f - 2, mBeam); } } }   // and the brackets under it\n    // floor courses (glowing seams on a furnace world) and the cornice\n    const trimC = mCrystal || mTrim, course = (TH.seams && mSeam) ? mSeam : trimC;\n    for (let f = 1; f < n; f++) for (let u = -1; u <= L; u++) P(u, jv(f) - 1, 6 * f, course);\n    if (mSeam && !TH.seams) for (let f = 1; f < n; f++) for (let u = 0; u < L; u++) P(u, jv(f), 6 * f - 1, mSeam);\n    if (!TH.soft) for (let u = -1; u <= L; u++) { P(u, jv(n - 1) - 1, Hb, trimC); if (mSnow) P(u, jv(n - 1) - 1, Hb + 1, mSnow); }\n    // glow strips along the floor lines (whole kubes)\n    if (sty.strip && mStrip) for (let f = 1; f < n; f++) if (jv(f - 1) === 0) for (let u = 0; u < L; u += 2) for (const v of [0, 1]) { P(u, v, 6 * f - 2, mStrip); P(u + 1, v, 6 * f - 2, mStrip); P(u, v, 6 * f - 1, mStrip); P(u + 1, v, 6 * f - 1, mStrip); }\n    // pilasters (whole kubes, a column of pillar at each end and between bays)\n    if (mPilaster && isFront && L >= 8) for (const u of [0, L - 2]) for (let y = 0; y < Hb; y++) { P(u, 0, y, mPilaster); P(u + 1, 0, y, mPilaster); P(u, 1, y, mPilaster); P(u + 1, 1, y, mPilaster); }\n    // THE DOOR: an opening two kubes tall (two wide on a bigger front, its top an arch of bits), its jambs and lintel whole\n    // kubes of the frame (an airlock's hazard-striped, a glow strip over it), a step before it, a lantern by it; the\n    // passage to a courtyard the same, through the building.\n    let du = -99, dw = 2;\n    // (Oct 13: an opening two and a half kubes tall, its lintel the storey's last half kube, so a walker stepping in off a\n    // stair's half step still clears it: \"1x2 clearances everywhere\")\n    const frameKubes = (u0, w2, mF, mL) => { for (const v of [0, 1]) { for (let y = 0; y <= 4; y++) for (const u of [u0 - 2, u0 - 1, u0 + w2, u0 + w2 + 1]) P(u, v, y, mF); for (let u = u0 - 2; u <= u0 + w2 + 1; u++) P(u, v, 5, mL); } };\n    if (isFront) {\n      dw = L >= 12 && (B.rank >= 3 || rng() < 0.4) ? 4 : 2; du = 2 * B.doorU - (dw === 4 ? 2 : 0);\n      if (du < 2) du = 2; if (du + dw > L - 2) du = Math.max(2, L - 2 - dw);\n      if (TH.airlock && mAirGlow) frameKubes(du, dw, mHaz, mAirGlow); else frameKubes(du, dw, mFrame, mFrame);\n      for (let y = 0; y <= 4; y++) for (let u = du; u < du + dw; u++) { P(u, 0, y, 0); P(u, 1, y, 0); }\n      if (TH.deepDoor) for (let u = du - 1; u <= du + dw; u++) P(u, -1, 5, mFrame);                         // a hood over a deep-set door\n      // a half step up to a raised floor (the walker takes the rest); a door at the lane's level has none (Oct 13: a\n      // step before a two-kube door put the lintel at a walker's head, so nobody could go in)\n      // (Oct 13: in the door's own wall, not on the lane, where a half step stacked on a stair's made a kube's rise)\n      if (sty.stilts) for (let u = du; u < du + dw; u++) { P(u, 0, -1, 0); P(u, 0, -2, mBeam, true); }\n      // a lantern on a bracket by the door (every shop's, half the homes'), its bracket over it: lit at night\n      const lit = B.district === 'shop' || B.corner || rng() < 0.5;\n      if (lit && du - 3 >= 0) { P(du - 3, -1, 5, mLampBit); P(du - 3, -1, 6, mBeam); stats.lanterns++; }   // (over the heads of the lane)\n      stats.doors++;\n    }\n    if (B.passage && isFront) {   // the arch through to the courtyard\n      const [pi, pj] = B.passage[0], pu = 2 * (s < 2 ? pj - B.j0 : pi - B.i0);\n      frameKubes(pu, 2, mFrame, mFrame);\n      for (let y = 0; y <= 4; y++) for (let u = pu; u <= pu + 1; u++) for (const v of [0, 1]) P(u, v, y, 0);\n      B.passFU = pu;\n      if (du > -99) for (let y = 0; y <= 4; y++) for (let u = du; u < du + dw; u++) { P(u, 0, y, 0); P(u, 1, y, 0); }   // (an arch's jamb never stands in the door beside it)\n    }\n    // WINDOWS, in the storey's middle kube: in the wall's own plane a sill kube, the glass, a lintel kube (whole kubes, so a\n    // street of them costs no bits); framed round in bits a bit proud of the wall (the glass reads set back in its frame)\n    // wherever that is over the heads of the street; shutters, grates (an airless world's window guards) or a flower box.\n    // A raider's are slits (a bit wide); a jettied storey's sit in the jetty's plane.\n    for (let f = 0; f < n; f++) {\n      const v0 = jv(f), y0 = 6 * f;\n      for (let u = 2; u + 1 <= L - 3; u += sty.win) {\n        if (f === 0 && isFront && u + 1 >= du - 3 && u <= du + dw + 2) continue;\n        if (f === 0 && B.passFU != null && isFront && u + 1 >= B.passFU - 2 && u <= B.passFU + 3) continue;\n        if (f === 0 && !roomy && rng() < 0.5) continue;\n        const wu = F.slit ? [u] : [u, u + 1], top = F.tall ? 5 : 3;\n        if (F.slit) { for (let y = 1; y <= 4; y++) for (const v of [v0, v0 + 1]) P(u, v, y0 + y, y === 1 || y === 4 ? mFrame : mGlass); }\n        else if ((v0 & 1) === 0) {\n          for (const uu of wu) for (const v of [v0, v0 + 1]) {\n            P(uu, v, y0, f === 0 ? mFrame : trimC); P(uu, v, y0 + 1, f === 0 ? mFrame : trimC);\n            for (let y = 2; y <= top; y++) P(uu, v, y0 + y, mGlass);\n            if (top < 5) { P(uu, v, y0 + 4, mFrame); P(uu, v, y0 + 5, mFrame); }\n          }\n        } else for (const uu of wu) { for (let y = 2; y <= 3; y++) { P(uu, v0, y0 + y, mGlass); P(uu, v0 + 1, y0 + y, mGlass); } P(uu, v0, y0 + 1, trimC); P(uu, v0, y0 + 4, mFrame); }\n        // the frame round it, a bit proud\n        if (!F.slit && (f >= 1 || wide)) for (const uu of wu) { P(uu, v0 - 1, y0 + 1, trimC); P(uu, v0 - 1, y0 + 4, mFrame); }\n        if (f >= 1 || wide) {\n          if (TH.grates && f >= 1) for (const y of [2, 3]) for (const uu of wu) P(uu, v0 - 1, y0 + y, mGrate);\n          else if (sty.mShut && !F.slit && rng() < 0.75) for (const y of [2, 3]) { P(u - 2, v0 - 1, y0 + y, sty.mShut); P(u + 3, v0 - 1, y0 + y, sty.mShut); }\n        }\n        if (f >= 1 && flowersOn && rng() < 0.55) { const fl = mFlowers[Math.floor(rng() * mFlowers.length)];\n          for (const uu of wu) { P(uu, v0 - 2, y0 + 1, mBox); P(uu, v0 - 2, y0 + 2, rng() < 0.3 ? mLeaf : fl); } }\n        else if (f >= 1 && mSnow) for (const uu of wu) P(uu, v0 - 1, y0 + 2, mSnow);\n        stats.windows++;\n      }\n    }\n    // BALCONIES on an upper floor, railed (grates on an airless world); round a corner on a corner building\n    if (sty.balcony && n >= 3 && B.front >= 0 && (B.district !== 'workshop') && roomy && !jet) {\n      const f = 2, v0 = jv(f), y0 = 6 * f, deck = TH.grates ? mGrate : mBeam, ua = B.corner ? -2 : 1, ub = B.corner ? L + 1 : L - 2;\n      for (let u = ua; u <= ub; u++) { P(u, v0 - 1, y0, deck); P(u, v0 - 2, y0, deck); if ((u & 1) === 0 || TH.grates) P(u, v0 - 2, y0 + 1, mRail); P(u, v0 - 2, y0 + 2, mRail); }\n      stats.balconies++;\n    }\n    // SHOP AWNINGS on the main lane and the squares, striped\n    if (B.district === 'shop' && sty.mAwn && isFront) { for (let u = 0; u < L; u++) { const c = ((u >> 1) & 1) ? sty.mAwn[0] : sty.mAwn[1]; P(u, -1, 5, c); P(u, -2, 5, c); P(u, -3, 4, c); } stats.awnings++;\n    }\n    // a corner lantern on the first floor up\n    if (B.corner && n >= 2 && L >= 8 && s !== B.front) { P(0, jv(1) - 1, 8, mLampBit); P(0, jv(1) - 1, 9, mBeam); stats.lanterns++; }\n    // VINES AND MOSS on a living world\n    if (F.vine && rng() < 0.55) for (let k = 0; k < Math.max(1, Math.floor(L / 10)); k++) {\n      const u = Math.floor(rng() * L), top = Hb - Math.floor(rng() * 4), len = 3 + Math.floor(rng() * 6);\n      for (let y = top; y > top - len && y >= 4; y--) P(u, jv(Math.floor(y / 6)) - 1, y, rng() < 0.25 ? mLeaf2 : mLeaf);\n      stats.vines++;\n    }\n    // PIPES AND VENTS (the sci-fi peoples)\n    if (mPipe && roomy && L >= 6 && rng() < 0.55) { const pu = L - 3; for (let y = 4; y < Hb; y++) P(pu, jv(Math.floor(y / 6)) - 1, y, mPipe); for (let y = 6; y < Hb; y += 6) P(pu - 1, jv(Math.floor(y / 6)) - 1, y, mPipe); stats.pipes++; }\n    if ((mVent || TH.heatVents) && L >= 8) for (let f = 1; f < n; f++) if (rng() < 0.7) { const vu = 4, v0 = jv(f); for (const u of [vu, vu + 1]) for (const v of [v0, v0 + 1]) { P(u, v, 6 * f + 2, mVent || M('Vent Grille')); P(u, v, 6 * f + 3, mVent || M('Vent Grille')); } }\n    // TOLIN on the lower walls of a methane world: whole kubes of it, here and there\n    if (mTholin.length) for (let u = 0; u + 1 < L; u += 2) for (let y = 0; y < Math.min(Hb, 12); y += 2) if (rng() < 0.14) {\n      let ok = true; for (const uu of [u, u + 1]) for (const yy of [y, y + 1]) for (const v of [jv(Math.floor(yy / 6)), jv(Math.floor(yy / 6)) + 1]) if (G(uu, v, yy) !== bandOf(B, Math.floor(yy / 6))) ok = false;\n      if (ok) { const c = mTholin[Math.floor(rng() * mTholin.length)]; for (const uu of [u, u + 1]) for (const yy of [y, y + 1]) for (const v of [jv(Math.floor(yy / 6)), jv(Math.floor(yy / 6)) + 1]) P(uu, v, yy, c); }\n    }\n    // BANNERS on a raider's front\n    if (mBanner && isFront && n >= 2 && L >= 6) { const bu = Math.floor(L / 2) - 1; for (let y = Hb - 1; y >= Math.max(5, Hb - 8); y--) { P(bu, jv(n - 1) - 1, y, mBanner); P(bu + 1, jv(n - 1) - 1, y, mBanner); } }\n    // ICICLES under the cornice of a cold world\n    if (mIce) for (let u = 0; u < L; u += 2 + Math.floor(rng() * 3)) { P(u, jv(n - 1) - 1, Hb - 1, mIce); if (rng() < 0.5) P(u, jv(n - 1) - 1, Hb - 2, mIce); }\n  }\n  function roof(B) {\n    const n = B.n, Y0 = B.Y0, Hb = 6 * n, sty = B.sty, fi0 = 2 * B.i0, fi1 = 2 * (B.i0 + B.w) - 1, fj0 = 2 * B.j0, fj1 = 2 * (B.j0 + B.d) - 1, top = Y0 + Hb + 2;\n    stats.roofs++;\n    if (mTurf) fbox(fi0, fj0, Y0 + Hb, fi1, fj1, Y0 + Hb + 1, mTurf);   // TURFED ROOFS (temperate): the slab is soil, the world's turf on it\n    if (sty.pitched && !B.kiosk) {\n      const alongI = B.w >= B.d, short = alongI ? B.d : B.w, cover = mTurf || mSnow || M(F.pitch || F.roof);\n      for (let s = 0; 2 * s < short; s++) {\n        if (alongI) fbox(fi0, fj0 + 2 * s, top + 2 * s, fi1, fj1 - 2 * s, top + 2 * s + 1, cover);\n        else fbox(fi0 + 2 * s, fj0, top + 2 * s, fi1 - 2 * s, fj1, top + 2 * s + 1, cover);\n      }\n      // the eaves, a bit out over the long walls\n      for (let t = alongI ? fi0 - 1 : fj0 - 1; t <= (alongI ? fi1 + 1 : fj1 + 1); t++) for (const e of alongI ? [fj0 - 1, fj1 + 1] : [fi0 - 1, fi1 + 1]) {\n        if (alongI) fput(t, e, top - 1, mBeam); else fput(e, t, top - 1, mBeam);\n        if (mIce && rng() < 0.35) { if (alongI) fput(t, e, top - 2, mIce); else fput(e, t, top - 2, mIce); }\n      }\n      return;\n    }\n    // A FLAT ROOF: a parapet round it (whole kubes; softened on a desert world; grates on an airless one), snow lying in it,\n    // and its clutter: a chimney, a tank, a mast, a dew mast, a domed cap\n    if (!mTurf && !B.kiosk) {\n      const par = TH.grates && rng() < 0.4 ? mGrate : B.sty.mTop || mTrim;   // (an airless roof's railing a grate on some)\n      for (let a = fi0; a <= fi1; a++) for (let b = fj0; b <= fj1; b++) {\n        const edge = a <= fi0 + 1 || a >= fi1 - 1 || b <= fj0 + 1 || b >= fj1 - 1; if (!edge) continue;\n        fput(a, b, top, par); fput(a, b, top + 1, par);\n        if (TH.soft) { const outer = a === fi0 || a === fi1 || b === fj0 || b === fj1, corner = (a <= fi0 + 1 || a >= fi1 - 1) && (b <= fj0 + 1 || b >= fj1 - 1); if (outer || corner) fput(a, b, top + 1, 0); }\n      }\n      if (mSnow) fbox(fi0 + 2, fj0 + 2, top, fi1 - 2, fj1 - 2, top + 1, mSnow);\n    } else if (mTurf) {   // a turf roof's timber eave\n      if (B.w >= B.d) { for (let a = fi0 - 1; a <= fi1 + 1; a++) for (const b of [fj0 - 1, fj1 + 1]) fput(a, b, top - 2, mBeam); }\n      else for (let b = fj0 - 1; b <= fj1 + 1; b++) for (const a of [fi0 - 1, fi1 + 1]) fput(a, b, top - 2, mBeam);\n    }\n    if (B.kiosk || B.w < 3 || B.d < 3) return;\n    const ri = 2 * (B.i0 + 1), rj = 2 * (B.j0 + 1), ci = 2 * (B.i0 + Math.floor(B.w / 2)), cj = 2 * (B.j0 + Math.floor(B.d / 2));\n    if (sty.chimney) { fbox(ri, rj, top, ri + 1, rj + 1, top + 3, sty.mBase); if (mGlowChim && rng() < 0.5) fbox(ri, rj, top + 4, ri + 1, rj + 1, top + 4, mGlowChim); else fbox(ri, rj, top + 4, ri + 1, rj + 1, top + 4, mTrim); }\n    if (sty.tank && B.w >= 4 && B.d >= 4) { const ti = 2 * (B.i0 + B.w - 3), tj = 2 * (B.j0 + B.d - 3); fbox(ti, tj, top, ti + 3, tj + 3, top + 3, mBarrel); for (const [a, b] of [[ti, tj], [ti + 3, tj], [ti, tj + 3], [ti + 3, tj + 3]]) for (let y = top; y <= top + 3; y++) fput(a, b, y, y === top ? mBeam : 0); }\n    if (sty.mast) { const mi = 2 * (B.i0 + B.w - 1) - 1, mj = 2 * (B.j0 + 1); for (let y = top; y < top + 12; y++) fput(mi, mj, y, mRail); fput(mi - 1, mj, top + 9, mRail); fput(mi + 1, mj, top + 9, mRail); fput(mi, mj, top + 12, mLampBit); }\n    if (sty.dew) { for (let y = top; y < top + 14; y++) fput(ci, cj, y, mRail); for (const y of [top + 5, top + 8, top + 11]) for (const [a, b] of [[1, 0], [-1, 0], [0, 1], [0, -1]]) fput(ci + a, cj + b, y, mGrate); fput(ci, cj, top + 14, mLampBit); }\n    if (sty.cap && B.w >= 4 && B.d >= 4) dome(ci + 1, cj + 1, top, Math.min(B.w, B.d) - 1, sty.mWall, 0, -1);\n    // a CORNER TOWER: a storey more over the corner the two streets meet at\n    if (B.corner && sty.tower && n < maxS + 1) {\n      const s2 = B.faces.find((x) => x !== B.front), ti = (s2 === 1 || B.front === 1) ? fi1 - 3 : fi0, tj = (s2 === 3 || B.front === 3) ? fj1 - 3 : fj0;\n      fbox(ti, tj, top, ti + 3, tj + 3, top + 5, B.sty.mWall);                                  // two by two kubes, a storey\n      fbox(ti, tj, top + 2, ti + 3, tj + 3, top + 3, mGlass); fbox(ti + 1, tj + 1, top + 2, ti + 2, tj + 2, top + 3, B.sty.mWall);   // glazed all round\n      fbox(ti, tj, top + 6, ti + 3, tj + 3, top + 7, B.sty.mTop || mTrim); fput(ti + 1, tj + 1, top + 8, mLampBit);\n    }\n  }\n  // A DOME (a landmark's, or a cap on a roof): a hemisphere of fine radius `r` over (ci, cj) from row y0 (fine), a shell two\n  // bits thick, glass in its upper half when asked, an opening on side `door` (0 −i, 1 +i, 2 −j, 3 +j, −1 none).\n  function dome(ci, cj, y0, r, mat, glass, door) {\n    for (let a = -r; a < r; a++) for (let b = -r; b < r; b++) for (let y = 0; y < r; y++) {\n      const x = a + 0.5, z = b + 0.5, h = y + 0.5, d2 = x * x + z * z + h * h;\n      if (d2 > r * r || d2 < (r - 2) * (r - 2)) continue;\n      if (door >= 0 && y < 8) { const ax = door < 2 ? x * (door === 0 ? -1 : 1) : z * (door === 2 ? -1 : 1), lat = door < 2 ? z : x; if (ax > 0 && Math.abs(lat) < 2.5) continue; }\n      fput(ci + a, cj + b, y0 + y, glass && y * 2 > r ? glass : mat);\n    }\n  }\n  // A ROUND TOWER (a spire): a ring two bits thick, its windows in bands, a cone of `cap` over it.\n  function tower(ci, cj, y0, r, hgt, mat, cap, door) {\n    for (let a = -r; a < r; a++) for (let b = -r; b < r; b++) {\n      const x = a + 0.5, z = b + 0.5, d2 = x * x + z * z;\n      if (d2 > r * r || d2 < (r - 2) * (r - 2)) continue;\n      for (let y = 0; y < hgt; y++) {\n        if (door >= 0 && y < 8) { const ax = door < 2 ? x * (door === 0 ? -1 : 1) : z * (door === 2 ? -1 : 1), lat = door < 2 ? z : x; if (ax > 0 && Math.abs(lat) < 2.5) continue; }\n        const win = y % 12 >= 4 && y % 12 <= 6 && (Math.abs(x) < 1.5 || Math.abs(z) < 1.5);\n        fput(ci + a, cj + b, y0 + y, win ? mGlass : (y % 12 === 0 ? mTrim : mat));\n      }\n    }\n    if (cap) for (let y = 0; y < 2 * r + 2; y++) { const rr = r + 1 - y / 2; if (rr <= 0) break;\n      for (let a = -r - 1; a <= r; a++) for (let b = -r - 1; b <= r; b++) { const x = a + 0.5, z = b + 0.5; if (x * x + z * z <= rr * rr) fput(ci + a, cj + b, y0 + hgt + y, cap); } }\n  }\n  // THE LANDMARK: the one round thing in town, at its heart, the tallest, lit at the top.\n  let landmark = null;\n  if (lmk) {\n    const ci = 2 * lmk.i0 + lmk.w, cj = 2 * lmk.j0 + lmk.d, y0 = 2 * (Lp + 1), r = lmk.w, tall = 6 * maxS + 6;\n    for (let i = lmk.i0; i < lmk.i0 + lmk.w; i++) for (let j = lmk.j0; j < lmk.j0 + lmk.d; j++) g[idx(i, j)] = Lp;\n    if (lmk.form === 'dome') {\n      tower(ci, cj, y0, r, 6 * Math.max(1, maxS - 1), mLmk, 0, 0);\n      dome(ci, cj, y0 + 6 * Math.max(1, maxS - 1), r, mLmk, (peopleId === 'domekeepers' || peopleId === 'weavers' || peopleId === 'kilnborn') ? mGlass : 0, -1);\n      fbox(ci - 1, cj - 1, y0 + 6 * Math.max(1, maxS - 1) + r - 1, ci, cj, y0 + 6 * Math.max(1, maxS - 1) + r + 2, mLmk2); fput(ci, cj, y0 + 6 * Math.max(1, maxS - 1) + r + 3, mLampBit);\n    } else if (lmk.form === 'spire') {\n      const rs = Math.max(3, r - 2);\n      tower(ci, cj, y0, rs, tall, mLmk, mLmk2, 0);\n      fput(ci, cj, y0 + tall + 2 * rs + 2, mLampBit);\n    } else if (lmk.form === 'canopy') {\n      const cl = (F.cloth || [F.lmk2, F.lmk]).map(M), hc = 6 * maxS;\n      const canopy = (cx, cz, yy, rr) => { for (let a = -rr; a < rr; a++) for (let b = -rr; b < rr; b++) { const x = a + 0.5, z = b + 0.5, d2 = x * x + z * z; if (d2 > rr * rr) continue;\n        const sec = (x > 0 ? 4 : 0) + (z > 0 ? 2 : 0) + (Math.abs(x) > Math.abs(z) ? 1 : 0); fput(cx + a, cz + b, d2 > (rr - 1.5) * (rr - 1.5) ? yy - 1 : yy, cl[sec & 1]); } };\n      fbox(ci - 1, cj - 1, y0, ci, cj, y0 + hc, mLmk); canopy(ci, cj, y0 + hc + 1, r + 2); fput(ci, cj, y0 + hc + 2, mLampBit);\n      for (const [a, b] of [[-r + 1, -r + 1], [r - 2, -r + 1], [-r + 1, r - 2], [r - 2, r - 2]]) { fbox(ci + a, cj + b, y0, ci + a, cj + b, y0 + hc - 8, mLmk); canopy(ci + a, cj + b, y0 + hc - 7, Math.max(2, Math.floor(r / 2))); }\n    } else if (lmk.form === 'trunk') {\n      const ht = 6 * maxS + 4;\n      for (let a = -6; a < 6; a++) for (let b = -6; b < 6; b++) { const x = a + 0.5, z = b + 0.5, d2 = x * x + z * z;\n        for (let y = 0; y < ht; y++) { const rr = y < 2 ? 5 : y < 4 ? 4 : 3; if (d2 <= rr * rr) fput(ci + a, cj + b, y0 + y, mLmk); } }\n      const ctop = y0 + ht;\n      for (const [a, b, yy, rr] of [[0, 0, 4, 7], [-5, 2, 0, 5], [5, -2, 1, 5], [2, 5, -1, 5], [-2, -5, 2, 5], [0, 0, 9, 5]])\n        for (let x = -rr; x < rr; x++) for (let z = -rr; z < rr; z++) for (let y = -rr; y < rr; y++) { const X = x + 0.5, Z = z + 0.5, Y = y + 0.5; if (X * X + Y * Y + Z * Z <= rr * rr) fput(ci + a + x, cj + b + z, ctop + yy + y, mLmk2); }\n      for (const [a, b] of [[-4, 0], [4, 1], [0, 4], [1, -4]]) fput(ci + a, cj + b, ctop - 3, mLampBit);\n    } else {   // crystal spires\n      const k8 = r / 8, parts = [[0, 0, tall, 3], [-4, -3, tall - 10, 2], [4, -2, tall - 6, 2], [-3, 4, tall - 14, 2], [3, 4, tall - 8, 2], [0, -5, tall - 16, 2]].map(([a, b, hh, rr]) => [Math.round(a * k8), Math.round(b * k8), hh, rr]);\n      for (const [a, b, hh, rr] of parts) for (let x = -rr; x < rr; x++) for (let z = -rr; z < rr; z++) { const X = x + 0.5, Z = z + 0.5;\n        for (let y = 0; y < hh + 2 * rr; y++) { const taper = y < hh ? rr : rr - (y - hh) / 2; if (X * X + Z * Z <= taper * taper) fput(ci + a + x, cj + b + z, y0 + y, y > hh ? mLmk2 : mLmk); } }\n      fput(ci, cj, y0 + tall + 6, mLampBit);\n    }\n    landmark = { form: lmk.form, i0: lmk.i0, j0: lmk.j0, w: lmk.w, d: lmk.d, front: [lmk.i0 - 1, lmk.j0 + Math.floor(lmk.d / 2)] };\n  }\n  for (const B of buildings) shell(B);\n  for (const B of buildings) for (const s of B.faces) facade(B, s);\n  for (const B of buildings) roof(B);\n  // the passages through to courtyards: the ground storey opened along the way\n  for (const ps of passages) { const B = buildings[ps.b]; for (const [pi, pj] of ps.run) fbox(2 * pi, 2 * pj, B.Y0, 2 * pi + 1, 2 * pj + 1, B.Y0 + 4, 0);\n    // (Oct 13) a raised floor's arch keeps its floor, and each end of it steps down to the lane and the yard by a half step\n    // in its own outer half, as its door does\n    if (B.sty.stilts) { const fa = B.front === 0 ? -1 : B.front === 1 ? 1 : 0, fb = B.front === 2 ? -1 : B.front === 3 ? 1 : 0;\n      for (const [[ei, ej], s] of [[ps.run[0], -1], [ps.run[ps.run.length - 1], 1]]) {\n        const da = fa * s, db = fb * s;   // the way out of this end\n        for (let a = 0; a <= 1; a++) for (let b = 0; b <= 1; b++) {\n          const fi = 2 * ei + a, fj = 2 * ej + b, outer = (da > 0 ? a === 1 : da < 0 ? a === 0 : true) && (db > 0 ? b === 1 : db < 0 ? b === 0 : true);\n          if (!outer) continue;\n          fput(fi, fj, B.Y0 - 1, 0); fixing++; fput(fi, fj, B.Y0 - 2, mBeam); fixing--;\n        } } } }\n\n  const doorCells = new Set(buildings.filter((B) => B.door).map((B) => idx(B.door[0], B.door[1])));   // every door's doorstep\n  // …and the lane cell before every arch (Oct 13: a lamp post there had halved one)\n  for (const ps of passages) { const B = buildings[ps.b], [li, lj] = ps.run[ps.run.length - 1], fa = B.front === 0 ? -1 : B.front === 1 ? 1 : 0, fb = B.front === 2 ? -1 : B.front === 3 ? 1 : 0;\n    if (inP(li + fa, lj + fb)) doorCells.add(idx(li + fa, lj + fb)); }\n  // ---- 5. WALLS AND GATES (aggressive): two kubes thick, a patrol's walk on top, a gate where the main lane comes in ----\n  const gates = [], patrolZ = new Map();\n  const tower3 = (ci, cj, hTop, openings) => {   // a 3 x 3 tower centred on (ci, cj), hollow at the walk, open along it\n    fixing++;   // (it stands on the walk: the headroom pass leaves it)\n    let base = 99; for (let a = -1; a <= 1; a++) for (let b = -1; b <= 1; b++) if (inP(ci + a, cj + b)) base = Math.min(base, g[idx(ci + a, cj + b)]);\n    const gc = g[idx(ci, cj)];\n    for (let a = -1; a <= 1; a++) for (let b = -1; b <= 1; b++) { const i = ci + a, j = cj + b; if (!inP(i, j) || ST[idx(i, j)] !== ST18.WALL) continue;   // (on the wall only: Oct 13, its inner row had closed the lane inside it)\n      const gg = g[idx(i, j)], wallC = a !== 0 || b !== 0;\n      for (let h = gg + 1; h <= hTop; h++) {\n        if (!wallC && h <= gc + 3) continue;\n        if (wallC && (a === 0 || b === 0) && openings.some(([oa, ob]) => oa === a && ob === b) && h <= gg + 3) continue;   // (three kubes over its own floor: a walk climbs through it)\n        kbox(i, j, h, i, j, h, h === hTop ? mTrim : (h - gc) % 4 === 2 && (a === 0 || b === 0) ? mGlass : mRetain);\n      } }\n    for (let a = -1; a <= 1; a++) for (let b = -1; b <= 1; b++) if ((a + b) % 2 === 0 && (a || b) && inP(ci + a, cj + b) && ST[idx(ci + a, cj + b)] === ST18.WALL) fbox(2 * (ci + a), 2 * (cj + b), 2 * (hTop + 1), 2 * (ci + a) + 1, 2 * (cj + b) + 1, 2 * (hTop + 1), mTrim);\n    fput(2 * ci, 2 * cj, 2 * (hTop + 1), mLampBit); fput(2 * ci + 1, 2 * cj + 1, 2 * (hTop + 1), mLampBit);\n    fixing--;\n  };\n  if (walled) {\n    for (const arm of [mainS, mainN]) {\n      const last = endOf(arm), dj = arm === mainS ? -1 : 1, ci = last[0];\n      for (let j = last[1] + dj; j >= -N && j < N; j += dj) for (const o of [-1, 0, 1]) { if (!inP(ci + o, j)) continue; const k = idx(ci + o, j), was = ST[k];\n        if (was === ST18.WALL || was === ST18.POM || was === ST18.NONE) { ST[k] = ST18.MAIN; g[k] = H[k]; if (was === ST18.WALL) { kbox(ci + o, j, H[k] + WALL_H, ci + o, j, H[k] + WALL_H, mRetain); patrolZ.set(k, H[k] + WALL_H); } } }\n      gates.push({ i: ci, j: dj < 0 ? -N : N - 1, dj });\n      // a tower either side of the gate, on the wall\n      const wj = dj < 0 ? -N + 1 : N - 2;\n      for (const ti of [ci - 3, ci + 3]) if (inP(ti, wj) && ST[idx(ti, wj)] === ST18.WALL) tower3(ti, wj, g[idx(ti, wj)] + 4, [[-1, 0], [1, 0]]);\n    }\n    for (const [ci, cj] of [[-N + 1, -N + 1], [N - 2, -N + 1], [N - 2, N - 2], [-N + 1, N - 2]]) tower3(ci, cj, g[idx(ci, cj)] + 5, [[ci < 0 ? 1 : -1, 0], [0, cj < 0 ? 1 : -1]]);\n    // merlons on the wall's outer edge, a bit thick, two bits long, two apart\n    fixing++;\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const k = idx(i, j); if (ST[k] !== ST18.WALL || cheb(i, j) !== N - 1) continue;\n      const out = i === -N ? [0, -1] : i === N - 1 ? [0, 1] : null, alongJ = !!out, fo = i === -N ? 2 * i : i === N - 1 ? 2 * i + 1 : j === -N ? 2 * j : 2 * j + 1;\n      if (((alongJ ? j : i) & 1) !== 0) continue;\n      for (let t = 0; t < 2; t++) for (const y of [2 * (g[k] + 1), 2 * (g[k] + 1) + 1]) { if (alongJ) fput(fo, 2 * j + t, y, mTrim); else fput(2 * i + t, fo, y, mTrim); } }\n    fixing--;\n  }\n  // ---- 6. THE CANAL: its water, and a bridge wherever a lane crosses it ----\n  const bridgeZ = new Map();\n  if (canal) {\n    // the water is the world's own (plan.water: transient-shape.js lays it into the sea), not kubes\n    for (let j = canal.j0; j <= canal.j1; j++) for (const i of [canal.i0, canal.i1]) waterCells.add(i + ',' + j + ',' + canal.water);\n    for (const { js, lv } of canalSpans) {\n      const j0 = Math.min(...js), j1 = Math.max(...js);\n      fixing++;\n      for (const j of js) {\n        const L = lv.get(j), at = (i) => (i === canal.iw - 1 ? g[idx(i, j)] : i === canal.i1 + 1 ? g[idx(i, j)] : L[i - canal.iw]);\n        for (let i = canal.iw; i <= canal.i1; i++) { const z = L[i - canal.iw]; kbox(i, j, z, i, j, z, mPath); bridgeZ.set(idx(i, j), z); }\n        // a half step wherever the way across rises a kube (on the lower cell's near half, as in the lanes)\n        for (let i = canal.iw - 1; i <= canal.i1; i++) {\n          const za = at(i), zb = at(i + 1);\n          if (zb === za + 1) { fput(2 * i + 1, 2 * j, 2 * (za + 1), mPath); fput(2 * i + 1, 2 * j + 1, 2 * (za + 1), mPath); }\n          else if (za === zb + 1) { fput(2 * (i + 1), 2 * j, 2 * (zb + 1), mPath); fput(2 * (i + 1), 2 * j + 1, 2 * (zb + 1), mPath); }\n        }\n        for (let i = canal.iw; i <= canal.i1; i++) { const z = L[i - canal.iw]; for (const a of [2 * i, 2 * i + 1]) { if (j === j0) fput(a, 2 * j0, 2 * (z + 1), mRail); if (j === j1) fput(a, 2 * j1 + 1, 2 * (z + 1), mRail); } }\n      }\n      fixing--;\n      for (const j of js) { const L = lv.get(j); for (const [a, i] of [[2 * canal.i0, canal.i0], [2 * canal.i1 + 1, canal.i1]]) for (const b of [2 * j, 2 * j + 1]) fput(a, b, 2 * L[i - canal.iw] - 1, mRetain); }   // the arch's springing\n      canal.bridges.push({ j0, j1, level: lv.get(j0)[0] }); stats.bridges++;\n    }\n  }\n  // ---- 7. THE FRINGE: fields in rows, a pen or two, an outpost at each corner ----\n  const works = [];\n  if (!walled) {\n    const penP = peopleId === 'driftherders' ? 0.7 : p.kind === 'neutral' ? 0.35 : 0.2;\n    const sides = [0, 1, 2, 3].map(() => rng() < penP ? 'pen' : 'field');\n    const mCropTop = (p.climate === 'temperate' || p.climate === 'methane') ? mLeaf : mCrop;\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n      const k = idx(i, j); if (ST[k] !== ST18.FIELD) continue;\n      const sd = Math.abs(i + 0.5) >= Math.abs(j + 0.5) ? (i < 0 ? 0 : 1) : (j < 0 ? 2 : 3), along = sd < 2 ? j : i, across = sd < 2 ? i : j;\n      const y0 = 2 * (g[k] + 1);\n      if (sides[sd] === 'field') { if ((across & 1) === 0) { fput(2 * i, 2 * j, y0, mCrop); fput(2 * i + 1, 2 * j + 1, y0, mCrop); fput((along & 1) ? 2 * i : 2 * i + 1, (along & 1) ? 2 * j + 1 : 2 * j, y0 + 1, mCropTop); }\n        else if ((along % 7 + 7) % 7 === 3) works.push([i, j]); }\n      else if (cheb(i, j) === N - 1 || cheb(i, j) === coreB + 1) { if ((along & 1) === 0) { fput(2 * i, 2 * j, y0, mRail); fput(2 * i, 2 * j, y0 + 1, mRail); fput(2 * i, 2 * j, y0 + 2, mRail); } else fput(2 * i, 2 * j, y0 + 2, mRail); }\n    }\n    // outposts: a mast at each corner (a dew mast on a desert world, an antenna on an airless one), a lamp on top\n    for (const [ci, cj] of [[-N + 1, -N + 1], [N - 2, -N + 1], [N - 2, N - 2], [-N + 1, N - 2]]) {\n      if (!inP(ci, cj)) continue; const y0 = 2 * (g[idx(ci, cj)] + 1), hh = 16;\n      kbox(ci, cj, g[idx(ci, cj)] + 1, ci, cj, g[idx(ci, cj)] + 1, mMono);\n      for (let y = y0 + 2; y < y0 + hh; y++) fput(2 * ci, 2 * cj, y, mRail);\n      if (TH.dewMast || TH.grates) for (const y of [y0 + 7, y0 + 10, y0 + 13]) for (const [a, b] of [[1, 0], [-1, 0], [0, 1], [0, -1]]) fput(2 * ci + a, 2 * cj + b, y, mGrate);\n      fput(2 * ci, 2 * cj, y0 + hh, mLampBit);\n    }\n  }\n  // ---- 8. THE PLAZA: the service point at its heart, the stall at its edge (the stash for raiders); the other squares ----\n  fixing++;   // (8 and 9: what stands in the squares and the lanes)\n  const svcKind = LAYOUT[peopleId].service, wr = PS >= 5 ? 1 : 0;\n  for (let a = -wr; a <= wr; a++) for (let b = -wr; b <= wr; b++) if (a || b) kbox(a, b, Lp + 1, a, b, Lp + 1, mStash);\n  kbox(0, 0, Lp + 1, 0, 0, Lp + 1, svcKind === 'hearth' ? M(F.lampBit) : mGlass);   // (a well's water a pane of glass: a kube of liquid would stand as a hole)\n  // four posts at the rim's corners and a canopy over the rim alone (a hearth's a stone hood, a dome hub's glass), its lamp on top\n  for (const [a, b] of [[-2 * wr, -2 * wr], [2 * wr + 1, -2 * wr], [-2 * wr, 2 * wr + 1], [2 * wr + 1, 2 * wr + 1]]) for (let y = 2 * (Lp + 2); y <= 2 * (Lp + 3) + 1; y++) fput(a, b, y, mBeam);\n  fixing--;   // (what hangs over, a canopy, an awning, a crown, a lantern on its arm, is no fixture: it is cut back where it reaches a walker's head)\n  for (let a = -2 * wr; a <= 2 * wr + 1; a++) for (let b = -2 * wr; b <= 2 * wr + 1; b++) if (svcKind !== 'dome' || b >= 0) fput(a, b, 2 * (Lp + 4), svcKind === 'dome' ? mGlass : svcKind === 'hearth' ? mRetain : mRoof);\n  fput(0, 0, 2 * (Lp + 4) + 1, mLampBit); fput(1, 1, 2 * (Lp + 4) + 1, mLampBit);\n  fixing++;\n  const service = { kind: svcKind, use: [0, 0, Lp + 1], front: [0, -(wr + 1)] };\n  let stall = null, stash = null;\n  if (!aggressive) {\n    // its counter at a corner of the square (a five-wide square has none to spare: on the main lane beside it), off every doorstep\n    const cands = PS === 5 ? [[-1, pj1 + 2, 0, pj1 + 2], [1, pj1 + 2, 0, pj1 + 2], [-1, pj0 - 2, 0, pj0 - 2], [1, pj0 - 2, 0, pj0 - 2]]\n                           : [[pi0, pj1, pi0 + 1, pj1], [pi0, pj0, pi0 + 1, pj0], [pi1, pj1, pi1 - 1, pj1], [pi1, pj0, pi1 - 1, pj0]];\n    const okC = ([a, b, c, d]) => (st(a, b) === ST18.PLAZA || st(a, b) === ST18.MAIN) && !doorCells.has(idx(a, b)) && !doorCells.has(idx(c, d)) && !(lmk && a >= lmk.i0 && a < lmk.i0 + lmk.w && b >= lmk.j0 && b < lmk.j0 + lmk.d);\n    const pickC = cands.find(okC) || cands[0], si = pickC[0], sj = pickC[1], fr = [pickC[2], pickC[3]];\n    if (st(si, sj) === ST18.PLAZA || st(si, sj) === ST18.MAIN) {\n      const gs = g[idx(si, sj)];\n      kbox(si, sj, gs + 1, si, sj, gs + 1, mStash);\n      const aw = F.awn ? F.awn[0].map(M) : [mBeam, mTrim];\n      for (const [a, b] of [[2 * si - 1, 2 * sj - 1], [2 * si + 2, 2 * sj - 1], [2 * si - 1, 2 * sj + 2], [2 * si + 2, 2 * sj + 2]]) for (let y = 2 * (gs + 1); y <= 2 * (gs + 3); y++) fput(a, b, y, mBeam);\n      fixing--; for (let a = 2 * si - 2; a <= 2 * si + 3; a++) for (let b = 2 * sj - 2; b <= 2 * sj + 3; b++) fput(a, b, 2 * (gs + 3) + 1, ((a + 100) >> 1) & 1 ? aw[0] : aw[1]); fixing++;\n      stall = { use: [si, sj, gs + 1], front: fr };\n    }\n  } else {\n    let best = null;\n    for (const B of buildings) if (B.front >= 0 && B.inside && !B.passage && B.w >= 4 && B.d >= 4) { const d0 = Math.abs(B.door[0]) + Math.abs(B.door[1]); if (!best || d0 < best.d0) best = { B, d0 }; }\n    // (Oct 13: in a corner of the room, where it closes no way in; it had stood just inside the door)\n    if (best) { const B = best.B, h = B.Y0 >> 1, cs = [[B.i0 + 1, B.j0 + 1], [B.i0 + B.w - 2, B.j0 + 1], [B.i0 + 1, B.j0 + B.d - 2], [B.i0 + B.w - 2, B.j0 + B.d - 2]];\n      // (the corner nearest its door that is not the cell just inside it: by the way in, and in nobody's way)\n      const dd = (c) => Math.abs(c[0] - B.door[0]) + Math.abs(c[1] - B.door[1]), inR = (c) => c[0] > B.i0 && c[0] < B.i0 + B.w - 1 && c[1] > B.j0 && c[1] < B.j0 + B.d - 1;\n      const side = B.front < 2 ? [[B.inside[0], B.inside[1] - 1], [B.inside[0], B.inside[1] + 1]] : [[B.inside[0] - 1, B.inside[1]], [B.inside[0] + 1, B.inside[1]]];\n      const cs2 = [...side.filter(inR), ...cs.filter((c) => c[0] !== B.inside[0] || c[1] !== B.inside[1])];\n      const far = cs2.reduce((a2, c) => (dd(c) < dd(a2) ? c : a2), cs2[0]);\n      if (B.w >= 4 && B.d >= 4) fbox(2 * (B.i0 + 1), 2 * (B.j0 + 1), B.Y0, 2 * (B.i0 + 1) + 1, 2 * (B.j0 + 1) + 1, B.Y0 + 1, 0);   // (the table makes way)\n      kbox(far[0], far[1], h, far[0], far[1], h, mStash); stash = { use: [far[0], far[1], h], front: B.door }; B.stash = true; }\n    else { kbox(pi0, pj1, Lp + 1, pi0, pj1, Lp + 1, mStash); stash = { use: [pi0, pj1, Lp + 1], front: [pi0 + 1, pj1] }; }\n  }\n  for (let k = 1; k < plazas.length; k++) {   // a fountain (where there is water) or a monument in each lesser square\n    const q = plazas[k], ci = q.i0 + 1, cj = q.j0 + 1, gq = g[idx(ci, cj)];\n    if (mLiquid) { for (let a = 2 * ci - 1; a <= 2 * ci + 4; a++) for (let b = 2 * cj - 1; b <= 2 * cj + 4; b++) { const rim = a === 2 * ci - 1 || a === 2 * ci + 4 || b === 2 * cj - 1 || b === 2 * cj + 4; fput(a, b, 2 * (gq + 1), rim ? mTrim : mGlass); }\n      fbox(2 * ci + 1, 2 * cj + 1, 2 * (gq + 1), 2 * ci + 2, 2 * cj + 2, 2 * (gq + 3), mMono); fput(2 * ci + 1, 2 * cj + 1, 2 * (gq + 3) + 1, mLampBit); }\n    else { kbox(ci, cj, gq + 1, ci + 1, cj + 1, gq + 1, mMono); fbox(2 * ci + 1, 2 * cj + 1, 2 * (gq + 2), 2 * ci + 2, 2 * cj + 2, 2 * (gq + 4) + 1, mMono); fbox(2 * ci + 1, 2 * cj + 1, 2 * (gq + 5), 2 * ci + 2, 2 * cj + 2, 2 * (gq + 5), mLmk2); fput(2 * ci + 1, 2 * cj + 1, 2 * (gq + 5) + 1, mLampBit); }\n    works.push([q.i0, q.j0]);\n  }\n  // crates, barrels and planters in the main square's corners (where the stall is not)\n  for (const [ci, cj] of [[pi1, pj0], [pi1, pj1], [pi0, pj0]]) { if (st(ci, cj) !== ST18.PLAZA || (stall && stall.use[0] === ci && stall.use[1] === cj)) continue; if (Math.max(Math.abs(ci + 0.5), Math.abs(cj + 0.5)) <= wr + 1.5) continue;\n    const y0 = 2 * (g[idx(ci, cj)] + 1); if (living && flowersOn) { fbox(2 * ci, 2 * cj, y0, 2 * ci + 1, 2 * cj + 1, y0, mBox); fput(2 * ci, 2 * cj, y0 + 1, mLeaf); fput(2 * ci + 1, 2 * cj + 1, y0 + 1, mFlowers[0] || mLeaf); }\n    else { fbox(2 * ci, 2 * cj, y0, 2 * ci + 1, 2 * cj + 1, y0 + 1, mCrate); fput(2 * ci, 2 * cj, y0 + 2, mBarrel); } }\n  // ---- 9. A RHYTHM OF LIGHTS: a lamp post every few kubes along the main lane, a lamp at each square's corner ----\n  const lamps = [];\n  for (const arm of [mainS, mainN]) { let side = 1;\n    for (let s = 2; s < arm.pts.length; s += 4) { const [ci, cj, tag] = arm.pts[s]; if (tag) break; if (cheb(ci, cj) > coreB) break;\n      const ei = ci + side, k = idx(ei, cj); if (!inP(ei, cj) || ST[k] !== ST18.MAIN || doorCells.has(k)) { side = -side; continue; }\n      const I = side > 0 ? 2 * ei + 1 : 2 * ei, J = 2 * cj, y0 = 2 * (g[k] + 1);\n      for (let y = y0; y <= y0 + 6; y++) fput(I, J, y, mRail);\n      fixing--; fput(I - side, J, y0 + 6, mRail); fput(I - side, J, y0 + 5, mLampBit); fixing++;\n      lamps.push([ei, cj]); stats.lamps++; side = -side; } }\n  fixing--;\n  // ---- 10. OVERHEAD: rooms spanning the narrow lanes, bridges between upper floors, shade sails on a desert world ----\n  const across = [];\n  for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n    const c = ST[idx(i, j)]; if (c !== ST18.ALLEY && c !== ST18.SIDE) continue;\n    for (const [a, b] of [[1, 0], [0, 1]]) {\n      const A = inP(i - a, j - b) ? owner[idx(i - a, j - b)] : -1; if (A < 0) continue;\n      let k2 = 0; while (k2 < 4 && inP(i + a * k2, j + b * k2) && (ST[idx(i + a * k2, j + b * k2)] === ST18.ALLEY || ST[idx(i + a * k2, j + b * k2)] === ST18.SIDE)) k2++;\n      const Bo = inP(i + a * k2, j + b * k2) ? owner[idx(i + a * k2, j + b * k2)] : -1;\n      if (Bo < 0 || k2 < 1 || k2 > 3) continue;\n      across.push({ i, j, a, b, k: k2, A: buildings[A], B: buildings[Bo] });\n    }\n  }\n  across.sort((x, y) => (x.i * 7 + x.j * 13) % 17 - (y.i * 7 + y.j * 13) % 17 || x.i - y.i || x.j - y.j);\n  const usedSpan = [];\n  const farFrom = (x) => usedSpan.every((u) => Math.abs(u.i - x.i) + Math.abs(u.j - x.j) > 6);\n  let spans = 0, bridgesUp = 0, sails = 0;\n  for (const x of across) {\n    const gl = Math.max(...Array.from({ length: x.k }, (_, t) => g[idx(x.i + x.a * t, x.j + x.b * t)]));\n    const lvl = Math.max(gl, x.A.level, x.B.level), y1 = 2 * (lvl + 1) + 6, y2 = 2 * (lvl + 1) + 12;\n    // across the lane: fine X0..X1; along it: from the cell's own A0 (two kubes, A0..A0 + 3)\n    const X0 = 2 * (x.a ? x.i : x.j), X1 = 2 * ((x.a ? x.i : x.j) + x.k) - 1, A0 = 2 * (x.a ? x.j : x.i);\n    const put = (xf, af, y, c) => (x.a ? fput(xf, af, y, c) : fput(af, xf, y, c));\n    const laneAt = (t, e) => { const ci = x.i + x.a * t + x.b * e, cj = x.j + x.b * t + x.a * e; return inP(ci, cj) && (ST[idx(ci, cj)] === ST18.ALLEY || ST[idx(ci, cj)] === ST18.SIDE); };\n    const twoAlong = Array.from({ length: x.k }, (_, t) => laneAt(t, 0) && laneAt(t, 1)).every(Boolean);\n    if (spans < S.spans && x.k <= 2 && twoAlong && x.A.n >= 2 && x.B.n >= 2 && farFrom(x) && rng() < 0.6) {\n      // A ROOM OVER THE LANE a storey up: its floor, its roof, its two end walls each with a window, an arch's springing under it\n      const mW = x.A.sty.mWall;\n      for (let xf = X0; xf <= X1; xf++) for (let af = A0; af <= A0 + 3; af++) { put(xf, af, y1, mFloor); put(xf, af, y1 + 5, mRoof); put(xf, af, y1 + 6, mRoof); }\n      for (let xf = X0; xf <= X1; xf++) for (const af of [A0, A0 + 3]) for (let y = y1 + 1; y <= y1 + 4; y++) put(xf, af, y, (y === y1 + 2 || y === y1 + 3) && xf > X0 && xf < X1 ? mGlass : mW);\n      for (let af = A0; af <= A0 + 3; af++) { put(X0, af, y1 - 1, mW); put(X1, af, y1 - 1, mW); }\n      usedSpan.push(x); spans++; stats.spans++; continue;\n    }\n    if (bridgesUp < S.bridges && twoAlong && x.A.n >= 3 && x.B.n >= 3 && farFrom(x) && rng() < 0.5) {\n      // A BRIDGE BETWEEN UPPER FLOORS: a deck two kubes wide (a grate on an airless world), railed both sides\n      const deck = TH.grates ? mGrate : mBeam;\n      for (let xf = X0; xf <= X1; xf++) { for (let af = A0; af <= A0 + 3; af++) put(xf, af, y2, deck); for (const af of [A0, A0 + 3]) { put(xf, af, y2 + 2, mRail); if ((xf & 1) === 0 || TH.grates) put(xf, af, y2 + 1, mRail); } }\n      usedSpan.push(x); bridgesUp++; stats.bridges++; continue;\n    }\n    if (TH.shade && sails < 6 && farFrom(x) && rng() < 0.5) {\n      // A SHADE SAIL across the lane (a desert world), striped, high over the street\n      const aw = F.cloth ? F.cloth.map(M) : F.awn ? F.awn[0].map(M) : [mBeam, mTrim];\n      for (let xf = X0; xf <= X1; xf++) for (let af = A0 - 1; af <= A0 + 4; af++) put(xf, af, 2 * (lvl + 1) + 9, ((af + 64) >> 1) & 1 ? aw[0] : aw[1]);\n      usedSpan.push(x); sails++; continue;\n    }\n  }\n  // ---- 11. COURTYARDS: a tree on a living world, a cistern elsewhere; barrels and crates in the yards ----\n  fixing++;\n  for (const cells of yards) {\n    if (cells.garden) {   // a garden: low growth over its soil, a flower here and there (its own colours: the world's)\n      for (const [ci, cj] of cells) { const y0 = 2 * (g[idx(ci, cj)] + 1); for (let a = 0; a <= 1; a++) for (let b = 0; b <= 1; b++) fput(2 * ci + a, 2 * cj + b, y0, (a + b + ci + cj) % 3 === 0 && mFlowers.length ? mFlowers[(ci * 7 + cj * 3 + 99) % mFlowers.length] : mLeaf); }\n      continue;\n    }\n    // (Oct 13) what stands in a yard stands where it closes no way through it: a cell with yard all round it, or a dead end\n    const inYard = new Set(cells.map(([ci, cj]) => ci + ',' + cj)), yd = (ci, cj) => inYard.has(ci + ',' + cj);\n    const roomy = ([ci, cj]) => { for (let a = -1; a <= 1; a++) for (let b = -1; b <= 1; b++) if (!yd(ci + a, cj + b)) return false; return true; };\n    const deadEnd = ([ci, cj]) => D4.filter(([a, b]) => yd(ci + a, cj + b)).length <= 1 && !D4.some(([a, b]) => isStreet(st(ci + a, cj + b)) || st(ci + a, cj + b) === ST18.PASS);\n    if (cells.length < 4) { const c0 = cells.find(deadEnd); if (c0 && cells.length > 1) { const [ci, cj] = c0, y0 = 2 * (g[idx(ci, cj)] + 1); fbox(2 * ci, 2 * cj, y0, 2 * ci + 1, 2 * cj + 1, y0 + 1, mCrate); } continue; }\n    let si = 0, sj = 0; for (const [ci, cj] of cells) { si += ci; sj += cj; }\n    const near = (c) => Math.abs(c[0] - si / cells.length) + Math.abs(c[1] - sj / cells.length);\n    const spots = cells.filter(roomy).sort((x, y) => near(x) - near(y)), ends = cells.filter(deadEnd);\n    const mc = spots[0] || ends[0];\n    if (!mc) continue;\n    const [ci, cj] = mc, y0 = 2 * (g[idx(ci, cj)] + 1);\n    if (F.vine || p.climate === 'methane') { fbox(2 * ci, 2 * cj, y0, 2 * ci + 1, 2 * cj + 1, y0 + 6, M(p.climate === 'methane' ? 'Solis Wood' : 'Verge Wood'));\n      fixing--; for (let x = -3; x < 3; x++) for (let z = -3; z < 3; z++) for (let y = -2; y < 3; y++) { const X = x + 0.5, Z = z + 0.5, Y = y + 0.5; if (X * X + Z * Z + Y * Y * 1.6 <= 9) fput(2 * ci + 1 + x, 2 * cj + 1 + z, y0 + 9 + y, p.climate === 'methane' ? M('Solis Tholin Biomass') : mLeaf); } fixing++; }\n    else { for (let a = 0; a <= 1; a++) for (let b = 0; b <= 1; b++) fput(2 * ci + a, 2 * cj + b, y0, mTrim); fput(2 * ci, 2 * cj, y0 + 1, mGlass); fput(2 * ci + 1, 2 * cj + 1, y0 + 1, mGlass); }   // a cistern\n    works.push([ci, cj]);\n    const bc = ends.find((c) => c !== mc) || spots.find((c) => c !== mc && Math.abs(c[0] - ci) + Math.abs(c[1] - cj) > 2);\n    if (bc) { const [bi, bj] = bc, yb = 2 * (g[idx(bi, bj)] + 1); fbox(2 * bi, 2 * bj, yb, 2 * bi + 1, 2 * bj + 1, yb + 2, mBarrel); }\n  }\n  fixing--;\n  // ---- 12. CAVERN QUARTERS: rooms dug into the berm, a door and a window on the lane at its foot, a lamp inside ----\n  const caves = [];\n  if (cavern && cavern.berm) {\n    const along = cavern.si ? [0, 1] : [1, 0], inward = cavern.si ? [cavern.si, 0] : [0, 1];   // into the berm\n    const faceE = cavern.depth - 1;\n    for (let t = -N + 3; t + 3 < N - 2; t += 5) {\n      const ci = cavern.si > 0 ? N - 1 - faceE : cavern.si < 0 ? -N + faceE : t, cj = cavern.si ? t : N - 1 - faceE;   // the face cell at t\n      const li = ci - inward[0], lj = cj - inward[1];\n      if (!inP(li, lj) || ST[idx(li, lj)] !== ST18.SIDE) continue;\n      const gl = g[idx(li, lj)], gb = g[idx(ci, cj)];\n      if (gb < gl + 4) continue;\n      // (Oct 13: three kubes tall, the room and its door, so a walker stepping in off a stair's half step clears its lintel)\n      const hTop = gl + 3;\n      for (let a = 0; a < 3; a++) for (let d2 = 1; d2 <= 3; d2++) for (let h = gl + 1; h <= hTop; h++) carve.add(ukey(ci + along[0] * (a - 1) + inward[0] * d2, cj + along[1] * (a - 1) + inward[1] * d2, h));\n      for (let h = gl + 1; h <= hTop; h++) carve.add(ukey(ci, cj, h));\n      if (gb >= gl + 5) under.set(ukey(ci, cj, gl + 4), mFrame);\n      under.set(ukey(ci + along[0], cj + along[1], gl + 2), mGlass);\n      under.set(ukey(ci + inward[0] * 4, cj + inward[1] * 4, gl + 2), mLamp);   // a lamp set in the back wall\n      caves.push({ type: 'cave', i0: Math.min(ci - along[0], ci + inward[0] * 3), j0: Math.min(cj - along[1], cj + inward[1] * 3), w: cavern.si ? 3 : 3, d: 3, door: [li, lj], inside: [ci + inward[0], cj + inward[1]], level: gl, n: 1 });\n    }\n  }\n  // ---- 13. STAIRS: where a lane climbs a kube, a half step in the lower cell's near half ----\n  const STAIRY = new Set([ST18.ALLEY, ST18.SIDE, ST18.MAIN, ST18.PLAZA, ST18.TRACK, ST18.YARD, ST18.PASS, ST18.POM, ST18.WALK, ST18.WALL]);\n  const pave = (c) => (c === ST18.PLAZA || c === ST18.YARD ? mPlaza : c === ST18.TRACK || c === ST18.FIELD || c === ST18.BERM ? mGround : mPath);\n  const step = new Uint8Array(WW);\n  fixing++;\n  for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n    const k = idx(i, j); if (!STAIRY.has(ST[k]) || bridgeZ.has(k)) continue;\n    for (const [a, b] of D4) {\n      const ni = i + a, nj = j + b; if (!inP(ni, nj)) continue; const nk = idx(ni, nj);\n      if (!STAIRY.has(ST[nk]) || g[nk] !== g[k] + 1 || bridgeZ.has(nk) || (ST[nk] === ST18.WALL) !== (ST[k] === ST18.WALL) || (ST[k] === ST18.WALL && (cheb(i, j) !== N - 2 || cheb(ni, nj) !== N - 2))) continue;   // (the walk is climbed by its stairs, not off the lane beside it, and steps along itself, not off its battlements)\n      const y = 2 * (g[k] + 1), c = pave(ST[k]);\n      const cellsF = a ? [[a > 0 ? 2 * i + 1 : 2 * i, 2 * j], [a > 0 ? 2 * i + 1 : 2 * i, 2 * j + 1]] : [[2 * i, b > 0 ? 2 * j + 1 : 2 * j], [2 * i + 1, b > 0 ? 2 * j + 1 : 2 * j]];\n      for (const [A2, B2] of cellsF) if (!fixAt(A2, B2, y)) fput(A2, B2, y, c);   // (over whatever hangs there, a stair is a stair; not through a stall)\n      step[k] = 1;\n    }\n  }\n  // …and round the wall's walk where it crosses a gate on its lintels (Oct 13): a half step wherever it rises a kube\n  if (walled) {\n    const r0 = -N + 1, r1 = N - 2, ring = [];\n    for (let i = r0; i < r1; i++) ring.push([i, r0]);\n    for (let j = r0; j < r1; j++) ring.push([r1, j]);\n    for (let i = r1; i > r0; i--) ring.push([i, r1]);\n    for (let j = r1; j > r0; j--) ring.push([r0, j]);\n    const fl = (c) => { const k = idx(c[0], c[1]); return patrolZ.has(k) ? patrolZ.get(k) : g[k]; };\n    for (let t = 0; t < ring.length; t++) {\n      const A2 = ring[t], B2 = ring[(t + 1) % ring.length], ka = idx(A2[0], A2[1]), kb = idx(B2[0], B2[1]);\n      if (!patrolZ.has(ka) && !patrolZ.has(kb)) continue;\n      const za = fl(A2), zb = fl(B2); if (Math.abs(za - zb) !== 1) continue;\n      const [lo2, hi2] = za < zb ? [A2, B2] : [B2, A2], zl = Math.min(za, zb), di = hi2[0] - lo2[0], dj = hi2[1] - lo2[1];\n      const cellsF = di ? [[di > 0 ? 2 * lo2[0] + 1 : 2 * lo2[0], 2 * lo2[1]], [di > 0 ? 2 * lo2[0] + 1 : 2 * lo2[0], 2 * lo2[1] + 1]] : [[2 * lo2[0], dj > 0 ? 2 * lo2[1] + 1 : 2 * lo2[1]], [2 * lo2[0] + 1, dj > 0 ? 2 * lo2[1] + 1 : 2 * lo2[1]]];\n      for (const [A3, B3] of cellsF) fput(A3, B3, 2 * (zl + 1), mPath);\n    }\n  }\n  fixing--;\n  // ---- 13b. HEADROOM (the owner, Oct 13: \"there should be 1x2 clearances everywhere so players can explore cities\") ----\n  // Over every cell one walks on (a lane, an alley, a square, a courtyard, an arch, a stair, the walkway, a bridge's deck),\n  // nothing but what stands on its own floor (a post, a stall, a crate: a column of solid from the floor up) is inside two\n  // and a half kubes over it (two, and the half a stair's tread lifts a walker by), nor over the higher floor of a cell a step beside it, which is where the walker's head is as it steps\n  // down: a sill, an awning, a lantern, a jetty, a bracket, an eave, an icicle or a vine reaching lower is cut back.\n  const WALKF = new Set([ST18.ALLEY, ST18.SIDE, ST18.MAIN, ST18.PLAZA, ST18.TRACK, ST18.YARD, ST18.PASS, ST18.POM, ST18.WALK, ST18.WALL]);\n  const floorsOf = (k) => { const z = [g[k]]; if (bridgeZ.has(k)) z.push(bridgeZ.get(k)); return z; };\n  for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n    const k = idx(i, j); if (!WALKF.has(ST[k]) || (owner[k] >= 0 && ST[k] !== ST18.PASS)) continue;\n    for (const z of floorsOf(k)) {\n      let zHi = z;\n      // (the eight round it: a walker half a kube over a cell's edge stands on the highest floor under it, a diagonal's too)\n      for (let a = -1; a <= 1; a++) for (let b = -1; b <= 1; b++) { const ni = i + a, nj = j + b; if ((!a && !b) || !inP(ni, nj)) continue; const nk = idx(ni, nj); if (!WALKF.has(ST[nk]) || (owner[nk] >= 0 && ST[nk] !== ST18.PASS)) continue;\n        for (const zn of floorsOf(nk)) if (zn > zHi && zn - z <= 2) zHi = zn; }\n      let yTop = 2 * (zHi + 1) + 4;   // (two kubes, and the half a step's tread raises the head by)\n      if (bridgeZ.has(k) && z < bridgeZ.get(k)) yTop = Math.min(yTop, 2 * bridgeZ.get(k) - 1);   // (under a bridge: up to its deck)\n      // (kept: a fixture standing on this floor, a solid run from the floor up; a fixture's crown or awning reaching over\n      // from beside it is no more a column here than a sill is)\n      for (let a = 2 * i; a <= 2 * i + 1; a++) for (let b = 2 * j; b <= 2 * j + 1; b++) {\n        let rooted = true;\n        for (let y = 2 * (z + 1); y <= yTop; y++) { if (!fget(a, b, y)) { rooted = false; continue; } if (!rooted || !fixAt(a, b, y)) { rooted = false; fput(a, b, y, 0); } }\n      }\n    }\n  }\n  // nothing laid into a column's own ground (a façade's bracket or lantern beside a lane that stands higher than its house)\n  for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const top = 2 * g[idx(i, j)] + 1; for (let a = 2 * i; a <= 2 * i + 1; a++) for (let b = 2 * j; b <= 2 * j + 1; b++) for (let y = 2 * HLO; y <= top; y++) if (fget(a, b, y)) fput(a, b, y, 0); }\n  // ---- 14. INTO KUBES AND BITS: a cell whose eight bits are one material is that kube ----\n  const kcell = new Int32Array(WW * HR), bitsL = [], NB = names.map(NO_BIT), c8 = new Uint8Array(8);\n  const subFor = (c) => (/^Liquid |^Water$/.test(names[c - 1]) ? mGlass : mLampBit);\n  let nFull = 0, nBitCells = 0, nBits = 0, top = 1;\n  for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n    const I0 = 2 * (i + N), J0 = 2 * (j + N);\n    for (let h = HLO; h < HHI; h++) {\n      const Y0 = 2 * (h - HLO);\n      let any = 0, same = true;\n      for (let q = 0; q < 8; q++) { const v = grid[((I0 + (q >> 2)) * FW + (J0 + ((q >> 1) & 1))) * FH + Y0 + (q & 1)]; c8[q] = v; if (v) any++; if (v !== c8[0]) same = false; }\n      if (!any) continue;\n      const ki = ((i + N) * W + (j + N)) * HR + (h - HLO);\n      if (same) { kcell[ki] = c8[0]; nFull++; }\n      else { for (let q = 0; q < 8; q++) { if (c8[q] && NB[c8[q] - 1]) c8[q] = subFor(c8[q]); bitsL.push(c8[q]); } kcell[ki] = -(nBitCells + 1); nBitCells++; nBits += any; }\n      if (h + 1 > top) top = h + 1;\n    }\n  }\n  const bits = Uint8Array.from(bitsL);\n  // ---- 15. EACH COLUMN'S GROUND: what paves it, and the level the ramp round the plot starts from ----\n  const ground = new Uint8Array(WW), edge = new Int16Array(WW);\n  for (let k = 0; k < WW; k++) {\n    const c = ST[k];\n    ground[k] = owner[k] >= 0 && c !== ST18.PASS ? mFloor : c === ST18.CANAL ? mRetain : c === ST18.WALL ? mPath : c === ST18.NONE || c === ST18.GARDEN ? mGround : c === ST18.LMK ? mPlaza : pave(c);\n    edge[k] = c === ST18.WALL || c === ST18.CANAL || c === ST18.WALK ? H[k] : g[k];\n  }\n  // ---- 16. WHERE ONE CAN WALK: a street's (a bridge's, a wall's) top with nothing at body height ----\n  const walk = new Float32Array(WW).fill(NaN), block = new Uint8Array(WW);\n  const WALKY = new Set([ST18.ALLEY, ST18.SIDE, ST18.MAIN, ST18.PLAZA, ST18.TRACK, ST18.YARD, ST18.PASS, ST18.POM, ST18.WALK, ST18.FIELD, ST18.WALL]);\n  const bitHigh = (ki) => { const v = kcell[ki]; if (v >= 0) return v > 0; const o = (-v - 1) * 8; for (let q = 0; q < 8; q++) if (bits[o + q] && (q & 1)) return true; return false; };\n  for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n    const k = idx(i, j), z = bridgeZ.has(k) ? bridgeZ.get(k) : WALKY.has(ST[k]) ? g[k] : null;\n    if (z == null || z + 2 >= HHI) { block[k] = 1; continue; }\n    const k1 = ((i + N) * W + (j + N)) * HR + (z + 1 - HLO), k2 = k1 + 1;\n    if (bitHigh(k1) || kcell[k2] !== 0) { block[k] = 1; continue; }\n    walk[k] = z;\n  }\n  // the gate a landing puts you at, open street just inside the plot\n  const gEnd = endOf(mainS);\n  let gate = walled ? [gEnd[0], -N + 3] : [gEnd[0], -N + 1];\n  if (!(walk[idx(gate[0], gate[1])] === walk[idx(gate[0], gate[1])])) { for (let j = gate[1]; j < 0; j++) if (walk[idx(gate[0], j)] === walk[idx(gate[0], j)]) { gate = [gate[0], j]; break; } }\n  const outB = buildings.map((B) => ({ type: B.kiosk ? 'kiosk' : B.front < 0 ? 'wing' : 'house', i0: B.i0, j0: B.j0, w: B.w, d: B.d, n: B.n, district: B.district, level: B.level, corner: !!B.corner,\n    door: B.door || null, inside: B.inside || null, homeZ: B.sty.stilts ? B.level + 1 : B.level, stash: !!B.stash, passage: !!B.passage, look: { base: B.sty.base, wall: B.sty.wall, top: B.sty.top } })).concat(caves.map((c) => ({ ...c, homeZ: c.level })));\n  for (const B of outB) if (B.district === 'workshop' && B.door) works.push(B.door);\n  if (canal) for (let j = -coreB + 2; j < coreB - 2; j += 7) works.push([canal.iw, j]);\n  const plan = { version: TOWNS18_SINCE, people: peopleId, kind: p.kind, size, N, seed: String(seed), climate: p.climate, names: Object.freeze(names.slice()),\n                 g, H, ground, edge, street: ST, owner, kcell, bits, under, carve, wet, walk, block, water: waterCells, bridgeZ, hlo: HLO, hhi: HHI, buildings: outB, landmark, service, stall, stash, gate,\n                 gates, plazas, canal, cavern: cavern ? { si: cavern.si, sj: cavern.sj, depth: cavern.depth, rooms: caves.length } : null, walled, lamps, works,\n                 top, fill: M(PM.fill), retain: mRetain, liquid: liq || null, lanes: lanes.map((l) => ({ cls: l.cls, w: l.w, cells: l.pts.filter((x) => !x[2]).length, quay: !!l.quay })), plazaSide: PS,\n                 stats: { ...stats, buildings: outB.length, cells: nFull, bitCells: nBitCells, bits: nBits, names: names.length } };\n  plan.fill = codeOf.get(PM.fill) || M(PM.fill); plan.names = Object.freeze(names.slice());\n  // THE PATROL (walled towns): round the wall's walk, over the gates' lintels\n  let patrol = null;\n  if (walled) {\n    const ring = [];\n    const r0 = -N + 1, r1 = N - 2;\n    for (let i = r0; i < r1; i++) ring.push([i, r0]);\n    for (let j = r0; j < r1; j++) ring.push([r1, j]);\n    for (let i = r1; i > r0; i--) ring.push([i, r1]);\n    for (let j = r1; j > r0; j--) ring.push([r0, j]);\n    patrol = ring.map(([i, j]) => { const k = idx(i, j); return [i + 0.5, j + 0.5, patrolZ.has(k) ? patrolZ.get(k) : g[k]]; });\n    patrol.push(patrol[0].slice());\n  }\n  plan.patrol = patrol;\n  plan.residents = residentsOf18(plan, rngOf(key + '#res'), { patrol, wr });\n  PLAN_MEMO.set(key, plan);\n  if (PLAN_MEMO.size > 64) PLAN_MEMO.delete(PLAN_MEMO.keys().next().value);\n  return plan;\n}\n\n// ---- VERSION 18'S RESIDENTS: the same roles and clock as 17's, on the new lanes (and stairs, and the wall's walk) --------\nfunction bfs18(plan, ti, tj) {\n  const N = plan.N, W = 2 * N, walk = plan.walk, dist = new Int32Array(W * W).fill(-1), q = new Int32Array(W * W);\n  if (ti < -N || ti >= N || tj < -N || tj >= N) return dist;\n  const s = (ti + N) * W + (tj + N);\n  if (!(walk[s] === walk[s])) return dist;\n  let h = 0, t = 0; dist[s] = 0; q[t++] = s;\n  while (h < t) {\n    const c = q[h++], ci = ((c / W) | 0) - N, cj = (c % W) - N;\n    for (const [a, b] of D4) {\n      const ni = ci + a, nj = cj + b;\n      if (ni < -N || ni >= N || nj < -N || nj >= N) continue;\n      const n = (ni + N) * W + (nj + N);\n      if (dist[n] >= 0 || !(walk[n] === walk[n]) || Math.abs(walk[n] - walk[c]) > 1.01) continue;\n      dist[n] = dist[c] + 1; q[t++] = n;\n    }\n  }\n  return dist;\n}\nfunction descend18(plan, dist, i, j) {\n  const N = plan.N, W = 2 * N, at = (a, b) => (a < -N || a >= N || b < -N || b >= N) ? -1 : dist[(a + N) * W + (b + N)], z = (a, b) => plan.walk[(a + N) * W + (b + N)];\n  if (at(i, j) < 0) return null;\n  const pts = [[i + 0.5, j + 0.5, z(i, j)]];\n  let ci = i, cj = j, guard = 0;\n  while (at(ci, cj) > 0 && guard++ < 4 * W) {\n    let best = null;\n    for (const [a, b] of D4) { const d = at(ci + a, cj + b); if (d >= 0 && d < at(ci, cj) && (!best || d < best[2])) best = [ci + a, cj + b, d]; }\n    if (!best) break;\n    ci = best[0]; cj = best[1];\n    pts.push([ci + 0.5, cj + 0.5, z(ci, cj)]);\n  }\n  const out = [pts[0]];\n  for (let k = 1; k < pts.length - 1; k++) {\n    const a = out[out.length - 1], b = pts[k], c = pts[k + 1];\n    if ((b[0] - a[0]) * (c[1] - b[1]) === (b[1] - a[1]) * (c[0] - b[0]) && a[2] === b[2] && b[2] === c[2]) continue;\n    out.push(b);\n  }\n  if (pts.length > 1) out.push(pts[pts.length - 1]);\n  return out;\n}\nfunction nearestOpen18(plan, i, j) {\n  const N = plan.N, W = 2 * N, walk = plan.walk;\n  for (let r = 0; r < W; r++) for (let a = -r; a <= r; a++) for (let b = -r; b <= r; b++) {\n    if (Math.max(Math.abs(a), Math.abs(b)) !== r) continue;\n    const x = i + a, y = j + b;\n    if (x >= -N && x < N && y >= -N && y < N) { const k = (x + N) * W + (y + N); if (walk[k] === walk[k]) return [x, y]; }\n  }\n  return [0, -2];\n}\n// NOBODY WALKS INTO ANYBODY (the owner, Oct 13: \"aliens should never occupy the same space as another alien\"). A town's\n// residents keep one day of their own (DAY18 seconds, the same for all of them, so the whole town repeats as one), and\n// that day is laid out once, with the plan, by a reservation of cells in time: each resident in turn, patrols first,\n// takes the cells of its round for the moments it is in them (a cell it stands in, both cells while it steps from one\n// to the next), waiting in the cell it is in where the next is taken and leaving home later where waiting would not\n// do. No two hold a cell at once, and a body (RES_R, its radius) is never more than half a cell from the line between\n// the centres of the two cells it holds, so two bodies are always a cell's width apart: farther than their radii.\n// Everything is a function of the clock and the plan: two screens, the zone and the Cloud Functions agree.\nexport const RES_R = 0.45;\nconst DAY_MIN = 240;\nfunction cellPath18(plan, dist, i, j) {\n  const N = plan.N, W = 2 * N, at = (a, b) => (a < -N || a >= N || b < -N || b >= N) ? -1 : dist[(a + N) * W + (b + N)], zz = (a, b) => plan.walk[(a + N) * W + (b + N)];\n  if (at(i, j) < 0) return null;\n  const out = [[i, j]];\n  let ci = i, cj = j, guard = 0;\n  while (at(ci, cj) > 0 && guard++ < 4 * W) {\n    let best = null;\n    // (a step the search itself could take: a cell nearer the goal that is also no more than a kube up or down)\n    for (const [a, b] of D4) { const d = at(ci + a, cj + b); if (d >= 0 && d < at(ci, cj) && Math.abs(zz(ci + a, cj + b) - zz(ci, cj)) <= 1.01 && (!best || d < best[2])) best = [ci + a, cj + b, d]; }\n    if (!best) break;\n    ci = best[0]; cj = best[1]; out.push([ci, cj]);\n  }\n  return out;\n}\nfunction residentsOf18(plan, rng, o) {\n  const N = plan.N, W = 2 * N, zAt = (c) => plan.walk[(c[0] + N) * W + (c[1] + N)];\n  const homes = plan.buildings.filter((b) => b.door && b.inside);\n  const n = Math.max(10, Math.min(60, Math.round(homes.length * (plan.size === 'city' ? 1.2 : 1.1))));\n  const plazaPt = nearestOpen18(plan, plan.service.front[0], plan.service.front[1]);\n  const toPlaza = bfs18(plan, plazaPt[0], plazaPt[1]);\n  const reach = (c) => toPlaza[(c[0] + N) * W + (c[1] + N)] >= 0;\n  const works = [plan.stall && plan.stall.front, plan.service.front, plan.landmark && plan.landmark.front, ...plan.works].filter(Boolean)\n    .map((w) => nearestOpen18(plan, w[0], w[1])).filter(reach);\n  const workDist = works.map((w) => bfs18(plan, w[0], w[1]));\n  const rr = o.wr + 1, ringOk = (() => { for (let t = -rr; t <= rr; t++) for (const [i, j] of [[t, -rr], [t, rr], [-rr, t], [rr, t]]) if (!(zAt([i, j]) === zAt([i, j]))) return false; return true; })();\n  // the service point's round, a cell out from its rim, cell by cell\n  const ring = [];\n  if (ringOk) { for (let t = -rr; t < rr; t++) ring.push([t, -rr]); for (let t = -rr; t < rr; t++) ring.push([rr, t]); for (let t = rr; t > -rr; t--) ring.push([t, rr]); for (let t = rr; t > -rr; t--) ring.push([-rr, t]); }\n  // ---- each resident's round: [cell, dwell s, act] steps (a patrol's is its wall's ring) ----\n  const rounds = [];\n  for (let k = 0; k < n; k++) {\n    const home = homes.length ? homes[k % homes.length] : null;\n    let dk = home ? nearestOpen18(plan, home.door[0], home.door[1]) : plazaPt;\n    if (!reach(dk)) dk = plazaPt;\n    let role = plan.kind === 'aggressive' ? (k % 3 === 2 || !o.patrol ? 'loop' : 'patrol') : (k % 3 === 0 ? 'loop' : 'errand');\n    const speed = RULES.walkSpeed * (role === 'patrol' ? 1.25 : 0.85 + rng() * 0.3), phase = rng(), nightOut = role === 'patrol' ? (k % 2 === 0) : rng() < 0.1, sleepAt = 0.05 + rng() * 0.25;\n    const dwellW = 20 + Math.floor(rng() * 30);\n    let steps = null;\n    const join = (...legs) => { const out = []; for (const leg of legs) { if (!leg) return null; for (const s of leg) { const last = out[out.length - 1]; if (last && last[0][0] === s[0][0] && last[0][1] === s[0][1]) { last[1] += s[1]; if (s[2]) last[2] = s[2]; } else out.push([s[0].slice(), s[1], s[2] || null]); } } return out; };\n    const leg = (dist, from) => { const p = cellPath18(plan, dist, from[0], from[1]); return p ? p.map((c) => [c, 0, null]) : null; };\n    if (role === 'patrol') steps = o.patrol.slice(0, -1).map((p) => [[Math.floor(p[0]), Math.floor(p[1])], 0, 'patrol']);\n    else if (role === 'errand' && works.length) {\n      // (straight there and back: Oct 13, every round had gone by the one cell before the service point, a queue a day long)\n      const w = (k >> 1) % works.length, toW = workDist[w], toHome = bfs18(plan, dk[0], dk[1]);\n      const a = leg(toW, dk), d = leg(toHome, works[w]);\n      if (a && d) { a[a.length - 1][1] = dwellW; a[a.length - 1][2] = 'work'; steps = join(a, d); }\n    }\n    if (!steps) {   // a round of the service point (or of the plaza's front), from home and back\n      role = role === 'errand' ? 'loop' : role;\n      const toHome = bfs18(plan, dk[0], dk[1]);\n      if (ring.length) {\n        const e = (k * 5) % ring.length, ring2 = [...ring.slice(e), ...ring.slice(0, e), ring[e]], toRing = bfs18(plan, ring[e][0], ring[e][1]);\n        const a = leg(toRing, dk), d = leg(toHome, ring[e]);\n        if (a && d) steps = join(a, ring2.map((c, t) => [c, t % rr === 0 ? 3 : 0, 'rest']), d);\n      } else { const a = leg(toPlaza, dk), d = leg(toHome, plazaPt); if (a && d) { a[a.length - 1][1] = 5; a[a.length - 1][2] = 'rest'; steps = join(a, d); } }\n    }\n    rounds.push({ k, role, home, dk, speed, phase, nightOut, sleepAt, steps });\n  }\n  // ---- the day, and the reservations ----\n  const tau = (r) => 1 / r.speed;\n  let longest = 0;\n  for (const r of rounds) if (r.steps && r.role !== 'patrol') { let t = 0; for (const s of r.steps) t += s[1] + tau(r); longest = Math.max(longest, t); }\n  let T = Math.max(DAY_MIN, Math.ceil(longest * 1.6 + 30));\n  const patrols = rounds.filter((r) => r.role === 'patrol' && r.steps && r.steps.length > 4);\n  const lap = patrols.length ? patrols[0].steps.length / patrols[0].speed : 0;\n  if (lap > 0) T = lap * Math.ceil(T / lap);\n  const held = new Map(), MARGIN = 0.05;\n  const keyOf = (c) => ((c[0] + N) * W + (c[1] + N)) * 256 + (Math.round(zAt(c)) + 128);\n  const clash = (key, a, b) => { const L = held.get(key); if (!L) return null; let hit = null;\n    for (const [c, d] of L) for (const s of [-T, 0, T]) if (a < d + s && c + s < b && (!hit || c + s < hit[0])) hit = [c + s, d + s]; return hit; };\n  const hold = (key, a, b) => { let L = held.get(key); if (!L) held.set(key, L = []); L.push([a - MARGIN, b + MARGIN]); };\n  const out = [];\n  // patrols: evenly spaced round their ring, never waiting (none of the others walks it at the same moment as one)\n  patrols.forEach((r, p) => {\n    const L = r.steps.length, tc = tau(r), off = (p * L / patrols.length) * tc;\n    for (let lapK = 0; lapK * lap < T - 1e-9; lapK++) for (let m = 0; m < L; m++) {\n      const t0 = off + lapK * lap + m * tc;\n      hold(keyOf(r.steps[m][0]), t0 - tc, t0 + tc);\n    }\n    const segs = [];\n    for (let m = 0; m < L; m++) { const a = r.steps[m][0], b = r.steps[(m + 1) % L][0]; segs.push({ t: m * tc, dur: tc, a: [a[0] + 0.5, a[1] + 0.5, zAt(a)], b: [b[0] + 0.5, b[1] + 0.5, zAt(b)], stop: false, act: 'patrol' }); }\n    r.out = { segs, cycle: lap, phase: ((lap - off % lap) % lap) / lap };\n  });\n  // the others, in turn: a start at its own phase of the day, or a little later, until its round fits among the rest\n  for (const r of rounds) {\n    if (r.role === 'patrol' && r.out) continue;\n    if (!r.steps || r.role === 'patrol') { r.out = null; continue; }\n    const S = r.steps, tc = tau(r), MAXW = 12, L = S.length;\n    let plan1 = null;\n    const enterA = new Float64Array(L), arriveA = new Float64Array(L), depA = new Float64Array(L), minDep = new Float64Array(L);\n    for (let tryK = 0; tryK < 60 && !plan1; tryK++) {\n      const start = (r.phase * T + tryK * 4.1) % T;\n      minDep.fill(-1e9); enterA[0] = start; arriveA[0] = start;\n      // step by step; where a cell it stands in is wanted by somebody already on their way, it goes back a step and\n      // waits there instead, to come in after them (so it never stands in another's way, and never in a narrow lane\n      // facing one: it waits where the lane is clear)\n      let m = 0, ok = true, guard = 0;\n      while (m < L) {\n        if (++guard > 40 * L) { ok = false; break; }\n        const cur = S[m][0], kc = keyOf(cur), ready = arriveA[m] + S[m][1];\n        if (m === L - 1) {\n          const h = clash(kc, enterA[m], ready + MARGIN);\n          if (!h) { depA[m] = ready; m++; continue; }\n          if (m === 0) { ok = false; break; }\n          minDep[m - 1] = Math.max(minDep[m - 1], h[1] + MARGIN); m--; continue;\n        }\n        const nx = S[m + 1][0], kn = keyOf(nx), need = tc + S[m + 1][1] + tc;\n        let dep = Math.max(ready, minDep[m]), back = false;\n        for (let w = 0; ; w++) {\n          const hc = clash(kc, enterA[m], dep + tc);\n          if (hc) { if (m === 0) { ok = false; } else { minDep[m - 1] = Math.max(minDep[m - 1], hc[1] + MARGIN); back = true; } break; }\n          const hn = clash(kn, dep, dep + need);\n          if (!hn) break;\n          dep = hn[1] + MARGIN;\n          if (dep - ready > MAXW || w > 40) { ok = false; break; }\n        }\n        if (!ok) break;\n        if (back) { m--; continue; }\n        depA[m] = dep; enterA[m + 1] = dep; arriveA[m + 1] = dep + tc; m++;\n        if (arriveA[m - 1] - start > T - 4) { ok = false; break; }\n      }\n      if (!ok) continue;\n      const end = depA[L - 1];\n      if (end - start >= T - 2) continue;\n      const occ = [], segs = [];\n      for (let q = 0; q < L; q++) {\n        const cur = S[q][0];\n        if (q === L - 1) { occ.push([keyOf(cur), enterA[q], end]); if (end - arriveA[q] > 1e-9) segs.push({ t: arriveA[q], dur: end - arriveA[q], a: cur, b: cur, stop: true, act: S[q][2] }); break; }\n        if (depA[q] - arriveA[q] > 1e-9) segs.push({ t: arriveA[q], dur: depA[q] - arriveA[q], a: cur, b: cur, stop: true, act: S[q][2] || (depA[q] > arriveA[q] + S[q][1] + 1e-9 ? 'wait' : 'rest') });\n        segs.push({ t: depA[q], dur: tc, a: cur, b: S[q + 1][0], stop: false, act: null });\n        occ.push([keyOf(cur), enterA[q], depA[q] + tc]);\n      }\n      plan1 = { start, occ, segs, end };\n    }\n    if (!plan1) { r.out = null; continue; }\n    for (const [kc, a, b] of plan1.occ) hold(kc, a, b);\n    // the whole day: home (indoors) until it sets out, its round, home again\n    const segs = [], pt = (c) => [c[0] + 0.5, c[1] + 0.5, zAt(c)];\n    for (const s of plan1.segs) segs.push({ t: s.t - plan1.start, dur: s.dur, a: pt(s.a), b: pt(s.b), stop: s.stop, act: s.act });\n    segs.push({ t: plan1.end - plan1.start, dur: T - (plan1.end - plan1.start), a: pt(r.dk), b: pt(r.dk), stop: true, inside: true, act: 'home' });\n    r.out = { segs, cycle: T, phase: ((T - plan1.start % T) % T) / T };\n  }\n  for (const r of rounds) {\n    const home = r.home, base = { k: r.k, role: r.role, home: home ? (home.inside || home.door) : r.dk, homeZ: home ? home.homeZ : zAt(r.dk), door: r.dk, jx: 0, jy: 0, speed: r.speed, phase: 0, nightOut: r.nightOut, sleepAt: r.sleepAt, day: T };\n    if (!r.out) { const p = [r.dk[0] + 0.5, r.dk[1] + 0.5, zAt(r.dk)]; out.push(Object.freeze({ ...base, seg: Object.freeze([Object.freeze({ t: 0, dur: T, a: p, b: p, stop: true, inside: true, act: 'home' })]), cycle: T })); continue; }\n    // (the clock reads the day from where this resident's round starts: phase is that start's share of its cycle)\n    out.push(Object.freeze({ ...base, phase: r.out.phase, seg: Object.freeze(r.out.segs.map((s) => Object.freeze(s))), cycle: r.out.cycle }));\n  }\n  return out;\n}\n// THE BIT A PLAN CELL'S CORNER IS, as the game seats it (bit-slot.js: steps 0 or 2 on each grid axis). `fr` is the town's\n// frame (townFrame): the plot's i is its first tangent, j its second, h the face's up (toward −axis on a − face).\nexport function cornerSlot(fr, q) {\n  const s = [0, 0, 0];\n  s[fr.ua] = (q >> 2) & 1 ? 2 : 0; s[fr.va] = (q >> 1) & 1 ? 2 : 0;\n  s[fr.ax] = fr.neg ? ((q & 1) ? 0 : 2) : ((q & 1) ? 2 : 0);\n  return (s[0] * 3 + s[1]) * 3 + s[2];\n}\n// The kube name a bit of material `name` is (products.json: \"<kube> Bit\").\nexport const bitNameOf = (name) => name + ' Bit';\n// (version 19, alien-towns.mjs, lays its towns with the same kit: what version 18 keeps to itself, read-only)\nexport { LAYOUT as LAYOUT18, turfSoilOf, NO_BIT };\n// ======================= END VERSION 18 TOWNS =======================\n\n// ---- A TOWN ON ITS WORLD -----------------------------------------------------------------------------------------\n// A town record: { k, size, N, fi (its face, 0..5 as +X −X +Y −Y +Z −Z), cu, cv (the plot centre's column on that\n// face), P (the plaza's level: the L∞ radius of its paved top cell), seed }. transient-shape.js chooses it; a server\n// gets it from the world's alienWorlds record. The face's first tangent axis is (ax + 1) % 3, its second (ax + 2) % 3;\n// a cell's column there is its tangent coordinate + refR.\nexport function townFrame(town, refR) {\n  if (town && town.v >= TOWNS19_SINCE) return townFrame19(town, refR);\n  const ax = town.fi >> 1, neg = (town.fi & 1) === 1, ua = (ax + 1) % 3, va = (ax + 2) % 3;\n  const u0 = town.cu - refR, v0 = town.cv - refR;   // the tangent coordinates of the plot's (0, 0) cell\n  return {\n    ax, neg, ua, va, u0, v0,\n    // the grid cell of plot cell (i, j) at level h over the plaza's top\n    cell(i, j, h, out) { const c = out || [0, 0, 0], r = town.P + h; c[ax] = neg ? -r : r - 1; c[ua] = u0 + i; c[va] = v0 + j; return c; },\n    // a point on the plaza's surface (feet) for plot coordinates (x, y), fractional, lifted `lift` kubes\n    feet(x, y, lift, out) { const c = out || [0, 0, 0]; c[ax] = neg ? -(town.P + lift) : town.P + lift; c[ua] = u0 + x; c[va] = v0 + y; return c; },\n    // a grid point back to the plot's frame: [x, y, height over the plaza's surface]\n    local(p) { return [p[ua] - u0, p[va] - v0, neg ? -p[ax] - town.P : p[ax] - town.P]; },\n    up: (() => { const u = [0, 0, 0]; u[ax] = neg ? -1 : 1; return u; })(),\n  };\n}\n// VERSION 19: A TOWN OVER A CUBE EDGE (edge = walk). Its plot is laid out flat, the neighbouring face unfolded beside its\n// own: plot columns past the edge (`town.edge`: s the plot's side, 0 −i, 1 +i, 2 −j, 3 +j, e the first column past it)\n// stand on that face, counted away from the edge, at the same height over the plaza (an L∞ radius is a radius on every\n// face). Without an edge it is version 18's frame. Besides cell / feet / local / up it answers:\n//   part(i, j)        0 the town's own face, 1 the one past the edge\n//   upAt(x, y)        the up at a plot point (it turns over the edge)\n//   toPlan(x, y, z)   a grid cell back to [i, j, r] (r its L∞ radius), the face it is on read as columnOf does (a cell past\n//                     a face's reference square counts in that face's edge column), or null off the plot's two faces\n//   slot(part, q)     the bit seat corner q of a plot cell takes in its grid cell (cornerSlot, on either face)\nexport function townFrame19(town, refR) {\n  const ax = town.fi >> 1, neg = (town.fi & 1) === 1, ua = (ax + 1) % 3, va = (ax + 2) % 3, sA = neg ? -1 : 1;\n  const u0 = town.cu - refR, v0 = town.cv - refR, P = town.P, N = town.N;\n  const ed = town.edge && Number.isInteger(town.edge.s) ? town.edge : null;\n  const s = ed ? ed.s : 3, e = ed ? ed.e : 1e9, X = s < 2 ? ua : va, Y = s < 2 ? va : ua, sgnX = (s & 1) ? 1 : -1, o0 = s < 2 ? v0 : u0;\n  const qOf = (i, j) => (s < 2 ? i : j), oOf = (i, j) => (s < 2 ? j : i);\n  const past = (q) => !!ed && (sgnX > 0 ? q >= e : q < e);\n  const upA = [0, 0, 0], upB = [0, 0, 0]; upA[ax] = sA; upB[X] = sgnX;\n  const fiA = town.fi, fiB = 2 * X + (sgnX < 0 ? 1 : 0);\n  const clampT = (v) => (v < -refR ? -refR : v > refR - 1 ? refR - 1 : v);\n  const bit = (b) => (b ? 2 : 0), nbit = (b) => (b ? 0 : 2);\n  return {\n    ax, neg, ua, va, u0, v0, edge: ed, fiA, fiB: ed ? fiB : -1,\n    part: (i, j) => (past(qOf(i, j)) ? 1 : 0),\n    cell(i, j, h, out) { const c = out || [0, 0, 0], r = P + h, q = qOf(i, j);\n      if (!past(q)) { c[ax] = neg ? -r : r - 1; c[ua] = u0 + i; c[va] = v0 + j; return c; }\n      const t = sgnX > 0 ? q - e : e - 1 - q; c[X] = sgnX > 0 ? r - 1 : -r; c[ax] = sA > 0 ? refR - 1 - t : -refR + t; c[Y] = o0 + oOf(i, j); return c; },\n    feet(x, y, lift, out) { const c = out || [0, 0, 0], q = s < 2 ? x : y;\n      if (!past(Math.floor(q))) { c[ax] = sA * (P + lift); c[ua] = u0 + x; c[va] = v0 + y; return c; }\n      const t = sgnX > 0 ? q - e : e - q; c[X] = sgnX * (P + lift); c[ax] = sA > 0 ? refR - t : -refR + t; c[Y] = o0 + (s < 2 ? y : x); return c; },\n    local(p) {\n      if (!ed || Math.abs(p[ax]) >= Math.abs(p[X])) return [p[ua] - u0, p[va] - v0, sA * p[ax] - P];\n      const t = sA > 0 ? refR - p[ax] : p[ax] + refR, q = sgnX > 0 ? e + t : e - t, o = p[Y] - o0;\n      return s < 2 ? [q, o, sgnX * p[X] - P] : [o, q, sgnX * p[X] - P]; },\n    up: upA,\n    upAt: (x, y) => (past(Math.floor(s < 2 ? x : y)) ? upB : upA),\n    toPlan(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      let fi, c = [x, y, z];\n      if (aX >= aY && aX >= aZ) fi = cx > 0 ? 0 : 1; else if (aY >= aZ) fi = cy > 0 ? 2 : 3; else fi = cz > 0 ? 4 : 5;\n      const r = Math.round(aX > aY ? (aX > aZ ? aX : aZ) : (aY > aZ ? aY : aZ));\n      let i, j;\n      if (fi === fiA) { i = clampT(c[ua]) - u0; j = clampT(c[va]) - v0; if (past(qOf(i, j))) return null; }\n      else if (ed && fi === fiB) { const a = clampT(c[ax]), t = sA > 0 ? refR - 1 - a : a + refR, q = sgnX > 0 ? e + t : e - 1 - t, o = clampT(c[Y]) - o0;\n        if (s < 2) { i = q; j = o; } else { i = o; j = q; } if (!past(q)) return null; }\n      else return null;\n      if (i < -N || i >= N || j < -N || j >= N) return null;\n      return [i, j, r];\n    },\n    slot(prt, q) {\n      const di = (q >> 2) & 1, dj = (q >> 1) & 1, dh = q & 1, sl = [0, 0, 0];\n      if (!prt) { sl[ua] = bit(di); sl[va] = bit(dj); sl[ax] = neg ? nbit(dh) : bit(dh); }\n      else { const dq = s < 2 ? di : dj, dO = s < 2 ? dj : di;\n        sl[Y] = bit(dO); sl[X] = sgnX > 0 ? bit(dh) : nbit(dh);\n        // along the plot's q the columns run away from the edge: on the A face's axis that is down for +A, up for −A\n        sl[ax] = (sgnX > 0) === (sA > 0) ? nbit(dq) : bit(dq); }\n      return (sl[0] * 3 + sl[1]) * 3 + sl[2];\n    },\n  };\n}\n// A resident's feet in grid coordinates (the voxel grid's own frame: system-view's walker and the zone's positions).\nexport function residentPos(town, plan, k, ms, night, refR) {\n  const a = residentAt(plan, k, ms, night);\n  if (!a) return null;\n  const p = townFrame(town, refR).feet(a.x, a.y, a.z || 0);\n  return { pos: p, at: a };\n}\nconst d3 = (a, b) => { const x = a[0] - b[0], y = a[1] - b[1], z = a[2] - b[2]; return Math.sqrt(x * x + y * y + z * z); };\nexport const dist3 = d3;\n// The grid cell of a use cell (the service point's, the stall's or the stash's), its centre.\nexport function useCellCentre(town, plan, which, refR) {\n  const u = plan[which] && plan[which].use;\n  if (!u) return null;\n  const c = townFrame(town, refR).cell(u[0], u[1], u[2]);\n  return [c[0] + 0.5, c[1] + 0.5, c[2] + 0.5];\n}\n\n// ---- WHAT A SERVER RE-CHECKS -------------------------------------------------------------------------------------\n// A CATCH OR A HIT: at the moment it happened, the resident's route put it within the leash (and a hit's reach, and the\n// slack) of where the player was. Day or night: a resident that keeps its route at night is where the day has it, and\n// one that sleeps is at home, so either reading counts (the servers do not read the sky).\nexport function checkNear(town, plan, k, ms, playerPos, refR, reach) {\n  if (!plan || !plan.residents[k] || !Array.isArray(playerPos)) return { ok: false, why: 'no such resident' };\n  let best = Infinity;\n  for (const night of plan.version >= TOWNS19_SINCE ? [1, 0.02, -1] : [false, true]) {   // (version 19: day, dusk at table, asleep in bed)\n    const r = residentPos(town, plan, k, ms, night, refR);\n    if (r) best = Math.min(best, d3(r.pos, playerPos));\n  }\n  return best <= reach + RULES.slackKubes ? { ok: true, d: best } : { ok: false, d: best, why: 'that resident was not near you' };\n}\nexport const checkCatch = (town, plan, k, ms, pos, refR) => checkNear(town, plan, k, ms, pos, refR, RULES.leash + RULES.hitReach);\nexport const checkBump = (town, plan, k, ms, pos, refR) => checkNear(town, plan, k, ms, pos, refR, RULES.bumpReach);\n// The resident a bump turns, and its two nearest neighbours at that moment (by their route positions).\nexport function bumpGroup(plan, k, ms, night) {\n  const me = residentAt(plan, k, ms, night);\n  if (!me) return [];\n  const rest = [];\n  for (let j = 0; j < plan.residents.length; j++) {\n    if (j === k) continue;\n    const o = residentAt(plan, j, ms, night);\n    if (o && !o.inside) rest.push([j, (o.x - me.x) * (o.x - me.x) + (o.y - me.y) * (o.y - me.y)]);\n  }\n  rest.sort((a, b) => a[1] - b[1] || a[0] - b[0]);\n  return [k, ...rest.slice(0, RULES.bumpSpread).map((r) => r[0])];\n}\n// Near a use cell (the service point, the stall, the stash) within the reach a player may use it from.\nexport function nearUse(town, plan, which, pos, refR) {\n  const c = useCellCentre(town, plan, which, refR);\n  return !!(c && Array.isArray(pos) && d3(c, pos) <= RULES.useReach);\n}\n// Whether a hit is due: the raider's last accepted hit was at least a second ago.\nexport const hitDue = (lastMs, ms) => !(lastMs > 0) || ms - lastMs >= RULES.hitEveryMs;\n\n// ---- THE CHASE (the page runs it; it is a function of the route and the player's position) -----------------------\n// One raider's chase state, stepped by the page each frame: { mode: 'route' | 'chase' | 'return' | 'flee', pos (grid,\n// feet), lost (seconds out of sight), until (a bumped neutral's hostility end) }. `route` is where its route has it\n// now, `player` the player's feet, `seen` whether it can see them (line of sight through the voxels), `dt` seconds.\n// Inside its leash and in sight it closes at 90% of the player's run; out of sight 3 s, or the player past the leash\n// round its route, it walks back; a raider with a stolen stack runs it to the stash (`stash`) first.\nexport function chaseStep(st, route, player, seen, dt, o = {}) {\n  const speed = RULES.runSpeed * RULES.chaseFraction, leash = RULES.leash;\n  if (!st.pos) st.pos = route.slice();\n  // A step toward a target, stopping `stop` short of it, and not into a cell the world holds solid (o.blocked: a wall, a\n  // house), so a chase goes round what it cannot pass rather than through it: the step is tried whole, then along each\n  // of its axes alone.\n  const toward = (p, tgt, v, stop = 0, free = false) => {\n    const d = d3(p, tgt); if (d <= stop + 1e-6) return d;\n    const s = Math.min(1, v * dt / d, (d - stop) / d), q = [p[0] + (tgt[0] - p[0]) * s, p[1] + (tgt[1] - p[1]) * s, p[2] + (tgt[2] - p[2]) * s];\n    if (free || !o.blocked || !o.blocked(q)) { p[0] = q[0]; p[1] = q[1]; p[2] = q[2]; return d; }\n    for (let i = 0; i < 3; i++) { const r = p.slice(); r[i] = q[i]; if (r[i] !== p[i] && !o.blocked(r)) { p[i] = q[i]; return d; } }\n    return d;\n  };\n  const hostile = o.hostile !== false;\n  // KEEPING ITS DISTANCE (the owner, Oct 13: \"aliens should never occupy the same space as another alien\"): off its round, a\n  // resident is pushed clear of every other body (o.others, their feet; o.up the world's up there), sideways, never into\n  // a wall; one it cannot step clear of it does not walk into, and stays where it was.\n  const prev = st.pos ? st.pos.slice() : null;\n  const sep = 2 * RES_R, tall = 1.8;\n  const apart = (p) => {\n    if (!o.others || !o.others.length) return;\n    const up = o.up || [0, 1, 0];\n    for (let it = 0; it < 4; it++) {\n      let worst = null;\n      for (const q of o.others) {\n        const d = [p[0] - q[0], p[1] - q[1], p[2] - q[2]], dz = d[0] * up[0] + d[1] * up[1] + d[2] * up[2];\n        if (dz >= tall || dz <= -tall) continue;\n        const h = [d[0] - up[0] * dz, d[1] - up[1] * dz, d[2] - up[2] * dz], hl = Math.sqrt(h[0] * h[0] + h[1] * h[1] + h[2] * h[2]);\n        if (hl < sep - 1e-6 && (!worst || hl < worst.hl)) worst = { h, hl };\n      }\n      if (!worst) return;\n      let dir = worst.hl > 1e-6 ? worst.h.map((v) => v / worst.hl) : [up[1], up[2], up[0]];   // (exactly on top: any way sideways)\n      const push = sep - worst.hl + 1e-3, cand = [p[0] + dir[0] * push, p[1] + dir[1] * push, p[2] + dir[2] * push];\n      if (!o.blocked || !o.blocked(cand)) { p[0] = cand[0]; p[1] = cand[1]; p[2] = cand[2]; }\n      else break;\n    }\n    if (clashes(p) && prev && !clashes(prev)) { p[0] = prev[0]; p[1] = prev[1]; p[2] = prev[2]; }   // (no clear spot to step to: it stays where it was)\n  };\n  function clashes(p) {\n    const up = o.up || [0, 1, 0];\n    for (const q of o.others || []) { const d = [p[0] - q[0], p[1] - q[1], p[2] - q[2]], dz = d[0] * up[0] + d[1] * up[1] + d[2] * up[2]; if (dz >= tall || dz <= -tall) continue;\n      if (Math.hypot(d[0] - up[0] * dz, d[1] - up[1] * dz, d[2] - up[2] * dz) < sep - 1e-6) return true; }\n    return false;\n  }\n  if (st.mode === 'flee' && o.stash) {\n    if (toward(st.pos, o.stash, speed, 0, true) <= 0.6) { st.mode = 'return'; st.carrying = false; }\n    apart(st.pos);\n    return st;\n  }\n  const playerFromRoute = player ? d3(player, route) : Infinity;\n  if (hostile && player && playerFromRoute <= leash && (seen || (st.mode === 'chase' && st.lost < RULES.sightLostS))) {\n    st.mode = 'chase';\n    st.lost = seen ? 0 : (st.lost || 0) + dt;\n    toward(st.pos, player, speed, RULES.hitReach * 0.6);   // up to arm's length, not into you\n    if (d3(st.pos, route) > leash) { const d = d3(st.pos, route), s = leash / d; for (let i = 0; i < 3; i++) st.pos[i] = route[i] + (st.pos[i] - route[i]) * s; }\n    apart(st.pos);\n    return st;\n  }\n  if (st.mode === 'chase') { st.mode = 'return'; st.lost = 0; }\n  if (st.mode === 'return') { if (toward(st.pos, route, speed, 0, true) <= 0.4) st.mode = 'route'; else apart(st.pos); return st; }   // (home through anything: it never sticks)\n  st.mode = 'route'; st.pos[0] = route[0]; st.pos[1] = route[1]; st.pos[2] = route[2];\n  return st;\n}\n\n// ---- WHAT A THEFT TAKES ------------------------------------------------------------------------------------------\n// One stack from the BACKPACK (slots 10 to 39: never the hotbar, 0 to 9, never the suit, 40 to 43), never a tool and\n// never a suit part. Which, of those, by a hash of the raider and the moment, so the server's choice is its own.\nexport const BACKPACK = Object.freeze([10, 40]);\nexport function pickStolenSlot(slots, seed, isProtected) {\n  const cands = [];\n  for (let i = BACKPACK[0]; i < BACKPACK[1]; i++) {\n    const s = slots && slots[i];\n    if (!s || !s.n || !(s.c > 0) || (isProtected && isProtected(s.n))) continue;\n    cands.push(i);\n  }\n  if (!cands.length) return -1;\n  return cands[Math.min(cands.length - 1, Math.floor(hash01(String(seed)) * cands.length))];\n}\nexport const stashExpired = (entry, ms) => !entry || !(entry.at > 0) || ms - entry.at >= RULES.worldDayMs;\n\n// ---- BARTER (neutral) AND REQUESTS (friendly) --------------------------------------------------------------------\n// WHAT A WORLD LACKS, by its climate group: what a neutral stall pays well for (the owner: \"a desert town pays well for\n// ice, a cold one for fuel\"). Offers come from the seed and change each world-day.\nexport const LACKS = Object.freeze({\n  temperate: ['Iron', 'Copper', 'Titanium', 'Steel'],\n  cold: ['Carbon', 'Verge Wood', 'Cinder Beacon Light', 'Copper'],\n  arid: ['Water Ice', 'Verge Wood', 'Carbon'],\n  furnace: ['Water Ice', 'Halite', 'Aerogel', 'Methane Ice'],\n  methane: ['Iron', 'Copper', 'Steel', 'Radiance Beacon Light'],\n  airless: ['Water Ice', 'Carbon', 'Verge Wood'],\n});\n// A neutral town's offers on world-day `day`: [{ k, want: { n, c }, give: { n, c } }]: hand over `want`, receive `give`.\nexport function offersOf(peopleId, addr, townK, day) {\n  const p = peopleById(peopleId);\n  if (!p || p.kind !== 'neutral') return [];\n  const wants = [...new Set([...(LACKS[p.climate] || []), ...p.wants])], goods = p.goods;\n  const r = rngOf(addr + '#barter-' + townK + '-' + day), out = [];\n  for (let k = 0; k < RULES.offersMax; k++) {\n    const w = wants[Math.floor(r() * wants.length)], g = goods[(Math.floor(r() * goods.length) + k) % goods.length];\n    const lacking = (LACKS[p.climate] || []).indexOf(w) >= 0;\n    const wc = 1 + Math.floor(r() * (lacking ? 3 : 5)), gc = Math.max(1, Math.round(wc * (lacking ? 2 + r() * 2 : 0.8 + r() * 0.8)));\n    out.push({ k, want: { n: w, c: wc }, give: { n: g, c: gc } });\n  }\n  return out;\n}\n// A friendly town's requests on world-day `day` (up to three): [{ k, want, gift }], each paid in ITEMS, never tokens.\n// …AND THE LOAMWRIGHTS' SEEDLINGS (the owner's tree seedlings, Oct 22: \"they ask for seeds\"): given `seedlings`, the\n// seedlings of their own world's trees (seedlings.mjs worldSeedlingsOf), each of their towns also gives one to three of\n// them a day, for something they ask of you, as one request more (k = RULES.requestsMax), drawn from a stream of its\n// own so the others are what they were.\nexport function requestsOf(peopleId, addr, townK, day, seedlings = null) {\n  const p = peopleById(peopleId);\n  if (!p || p.kind !== 'friendly') return [];\n  const r = rngOf(addr + '#requests-' + townK + '-' + day), out = [];\n  const n = 1 + Math.floor(r() * RULES.requestsMax);\n  for (let k = 0; k < Math.min(RULES.requestsMax, n + 1); k++) {\n    const w = p.wants[(Math.floor(r() * p.wants.length) + k) % p.wants.length], g = p.goods[Math.floor(r() * p.goods.length)];\n    const wc = 2 + Math.floor(r() * 6), gc = 4 + Math.floor(r() * 9);\n    out.push({ k, want: { n: w, c: wc }, gift: { n: g, c: gc } });\n  }\n  if (peopleId === 'loamwrights' && Array.isArray(seedlings) && seedlings.length) {\n    const s = rngOf(addr + '#seedlings-' + townK + '-' + day);\n    const w = p.wants[Math.floor(s() * p.wants.length)], g = seedlings[Math.floor(s() * seedlings.length)];\n    out.push({ k: RULES.requestsMax, want: { n: w, c: 1 + Math.floor(s() * 4) }, gift: { n: g, c: 1 + Math.floor(s() * 3) } });\n  }\n  return out;\n}\nexport const requestKey = (addr, townK, day, k) => `${String(addr).replace(/\\./g, '_')}|${townK}|${day}|${k}`;\nexport const kindText = (kind) => kind === 'friendly' ? 'Friendly' : kind === 'neutral' ? 'Neutral' : kind === 'aggressive' ? 'Aggressive' : '';\nexport const belongsText = (people) => (people ? `This world belongs to the ${people.name}` : '');\n"],"mappings":"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","names":["M","lane","prev","edge","P","top","across","ci","cj","y0","out","leg","segs"],"file":"alien-peoples.mjs"}