{"version":3,"sources":["alien-towns.mjs"],"sourcesContent":["// ALIEN TOWNS, WORLD VERSION 19: CITY LAYOUTS AND TOWN INTERIORS (the owner's two proposals of Oct 19, both confirmed\n// 20:28 UTC, every decision on its recommendation: \"confirmed both of the proposals\").\n//\n// CITY LAYOUTS (artifact ACBRVWxdb2yikM9weQRxG1): a town's outline is GROWN FROM THE LAND (every column classed walkable,\n// steep, cliff or water; a seed on the best ground for the people's form; its reach spreading over walkable ground, paying\n// for every kube it climbs, stopped by cliffs and water, until it holds its share); THE LAND CHOOSES between each people's\n// two FORMS (ridge spine, harbour crescent, valley strip, terraced amphitheatre, hilltop citadel, medina cluster, market\n// street, hamlets and footpaths, cliff and canyon); a town GROWS a core square with the landmark, a main street along the\n// land's line, side lanes every 6 to 10 kubes, then DISTRICTS (their own 4 to 5 kube square) 24 or more kubes from the\n// last square; towns within 16 kubes JOIN into one city of up to 4 districts (transient-shape.js chooses the sites); the\n// built town takes at most 10% of the world's surface (fields up to 5% more); STREETS CROSS A CUBE EDGE (2 paved columns\n// either side, never a building; 6 columns round a corner stay open land); squares in a rhythm (a 6 x 6 core, 4 to 5 at\n// each district, 4 x 4 at a junction about every 24 kubes of street); density falls off from each core (4 to 5 storeys\n// wall to wall, 2 to 3 round courtyards, 1 to 2 with gardens, then fields); steep streets climb as stairs with a landing\n// every 3 kubes of rise; streets for walking, lanes 3 / 2 / 1.\n//\n// TOWN INTERIORS (artifact Se7otHMS52jtwqK9C1zFHw): eight building kinds (home, workshop, forge, market hall, inn,\n// storehouse, the temple that is the landmark, the watch post), each with its rooms; a storey of 3 kubes, a half-kube floor\n// under 2.5 kubes clear, stairs of 6 half steps over 3 kubes along a wall; FURNITURE as the new kube-sized machines players\n// craft too (the owner's note: \"try to work most of these into new kube-sized machines that are craftable by players too.\n// pass on rug/lockers for now\": no rug, no visitor locker); windows in the world's glass, lamps where a room has none;\n// residents by the clock at their beds, tables and benches; in friendly towns the machines work as the player's own (the\n// Quantum Assembler, the Chemical Synthesizer, the Induction Smelter; beds and Suit Docks heal and set where you come back);\n// containers hold 1 to 3 stacks from their building's table, full again for each player each world-day, free in a friendly\n// town and taken at the risk of being SEEN elsewhere (an awake resident within 12 kubes, inside its 140 degree view, with a\n// clear line through the voxels); about one building in five has a SECRET (a false wall, a trapdoor under a crate, a shelf\n// over a hidden stair, a roof cache) that closes again after 30 s; the whole world stays read-only but for taking,\n// using and opening. Interiors are part of the world's own cells, drawn like every other cell: the render plan's rule\n// (nothing on screen changes with distance) holds because they are always there, never swapped in.\n//\n// PURE AND TWIN-SAFE, as alien-peoples.mjs is (functions/lib and zone-server/lib hold byte-identical copies,\n// generate-version-hash.js checks): integer hashing, + − × ÷, sqrt and floor only.\nimport { peopleById, rngOf, hash01, FACADES18, PEOPLE_MATERIALS, CLIMATE_THEMES, TOWNS18, decodeTerr, RULES, RES_R, LAYOUT18, turfSoilOf, NO_BIT } from './alien-peoples.mjs';\n\nexport const TOWNS19_SINCE = 19;\n// WORLD VERSION 20, TOWN BUILDINGS (artifact 7ofXTRpfLwoD8aJqwkhnqG, confirmed Oct 20 14:34 UTC with the owner's notes):\n// houses on a 5-kube module, shoulder to shoulder with SHARED PARTY WALLS (a row's first building a kube wider for its\n// closing wall), 7 kubes deep; every storey 3 kubes floor to ceiling over a 1-kube floor (\"each new floor resides 4 kubes\n// above the previous\"); a U STAIR in a 2 x 2 well in a back corner, one turn a storey, so every floor keeps at least 15\n// square kubes to stand on; flush columns at every party wall, a stone ground storey under a trim course, 1 x 2 windows\n// set back half a kube with sills, a balcony on about one house in three, the door to one side, the roof a kube out over\n// the street, a lantern at every door and a sign over every shop showing what it sells; inns 5 to 7 x 8, the market hall\n// a 7 x 8 arcade, the storehouse 7 x 8 with a hoist, the forge and the workshop (with its yard) 5 x 8, the watch post a\n// 5 x 5 lookout; corner buildings 7 wide; a regular GRID of blocks wherever the ground is flat enough, blocks a mix of back\n// yards, back alleys and back to back; streets of 1 kube only as back alleys, never a building's front; squares paved in\n// a two-kube checker; no villages or hamlets (every settlement a town or a city).\nexport const TOWNS20_SINCE = 20;\nexport const TOWN20 = Object.freeze({ storey: 4, clear: 3, front: 5, depth: 7, minFloor: 15, well: 2, gaps: [3, 1, 0], blockHouses: [2, 4] });\n// VERSION 21 (Oct 20, fixing 20): every town big enough for its smallest whole layout (two blocks and the square).\n// Version 20 left the towns of most worlds under 72 kubes empty, a square and its landmark with no buildings. The owner's\n// answers (Oct 20): towns may cover a FIFTH of every world (\"adjust 10% limit to 20%\", for every world), and a world\n// whose face is too narrow for two blocks each way has its town WRAP OVER THE FACE EDGE (\"wrap over the face edge\"). So:\n// a world's fifth goes to fewer towns where its shares would each be too small (minShare built columns); a plot too small\n// to centre the blocks on its core lays them out from a corner (the core square and a block either way still inside it);\n// a face under foldBelow columns folds its town's plot over an edge (transient-shape foldOf: foldHalf along the fold, its\n// rows held to the face, oLim), the blocks a row over the edge where two bands will not fit across.\nexport const TOWNS21_SINCE = 21;\n// VERSION 22 (the owner's confirmed doors-and-rungs proposal, Oct 20: \"towns now\", for doors and for rungs): every\n// building's front door gets a door in its people's look (a wooden Door on a living world, a metal one on a furnace,\n// methane or airless one; a Double Door where the doorway is two kubes wide), the doorway's half-kube lintel filled so it\n// is the door's two kubes; a watch tower gets rungs up a side to its lookout; a roof cache rungs up a wall to its roof;\n// a hidden cellar a hatch over its shaft and rungs down it, for the six half steps. plan.doors and plan.rungs say where;\n// the page draws and works them (system-view.js townDoors), and in a neutral or aggressive town opening a door is seen,\n// as looting is (functions/aliens.js doorPlan).\nexport const TOWNS22_SINCE = 22;\nconst DOOR_MATS22 = { temperate: ['Drift Wood', 'Verge Wood', 'Bloom Wood', 'Halo Wood'], cold: ['Drift Wood', 'Fathom Wood', 'Gloam Wood', 'Echo Wood'],\n  arid: ['Solis Wood', 'Scorched Wood', 'Halo Wood'], furnace: ['Iron', 'Steel', 'Copper'], methane: ['Titanium', 'Aluminum'], airless: ['Steel', 'Titanium', 'Iron'] };\nexport const doorMaterial22 = (peopleId, climate) => { const l = DOOR_MATS22[climate] || DOOR_MATS22.temperate; return l[Math.floor(hash01(peopleId + '#door22') * l.length) % l.length]; };\nexport const TOWN21 = Object.freeze({ builtShare: 0.20, minShare: 1000, foldBelow: 40, foldHalf: 28, foldRows: 18 });\nexport function townShares21(diameter, builtCap) {\n  const base = townSizes20(diameter), sh = { 1: [1], 2: [0.65, 0.35], 3: [0.5, 0.25, 0.25] };\n  let n = base.length;\n  while (n > 1 && builtCap * sh[n][n - 1] < TOWN21.minShare) n--;\n  const sizes = n === base.length ? base : n === 2 ? [base[0], 'town'] : [base[0] === 'city' && builtCap >= 2 * TOWN21.minShare ? 'city' : 'town'];\n  return { sizes, shares: sh[n] };\n}\n// ---- THE NUMBERS (the confirmed recommendations) ----------------------------------------------------------------------\nexport const CITY19 = Object.freeze({\n  builtShare: 0.10,          // the built town (streets, squares, buildings, courtyards) of the world's surface, at most\n  fieldShare: 0.05,          // fields and pens beyond the outline, up to this much more\n  joinKubes: 16,             // towns whose outlines come within this join into one city\n  maxDistricts: 4,\n  districtApart: 24,         // a new district's square at least this far from the last\n  sideEvery: [6, 10],        // side lanes off a main street\n  junctionEvery: 24,         // a 4 x 4 square at a junction about every this many kubes of street\n  coreSquare: 6, districtSquare: [4, 5], junctionSquare: 4,\n  edgeWalk: 2,               // paved columns either side of a cube edge: no building stands in them\n  cornerOpen: 6,             // columns round a corner where three faces meet that stay open land\n  landingRise: 3,            // a stair rises at most this many kubes before a landing\n  storey: 3, clear: 2.5,     // a storey's height, and the headroom over its half-kube floor\n});\nexport const INTERIOR19 = Object.freeze({\n  seenReach: 12, seenCos: 0.3420201433256687,   // cos 70 degrees: half of a 140 degree view\n  hostileMs: 60000, seenSpread: 2,              // a neutral who saw, and its two nearest, hostile a minute\n  secretOpenMs: 30000, secretShare: 0.2,        // about one building in five\n  lootStacks: [1, 3], useReach: 5,\n  buildRadius: 96,                              // (the proposal's number; here every interior is always built: see above)\n});\nexport const FORMS19 = Object.freeze(['ridge', 'harbour', 'valley', 'amph', 'citadel', 'medina', 'market', 'hamlets', 'cliff']);\nexport const FORMS20 = Object.freeze(['ridge', 'harbour', 'valley', 'amph', 'citadel', 'medina', 'market', 'grid', 'cliff']);   // (no hamlets: the owner, Oct 20)\nexport const FORM_NAMES19 = Object.freeze({ ridge: 'Ridge spine', harbour: 'Harbour crescent', valley: 'Valley strip', amph: 'Terraced amphitheatre', citadel: 'Hilltop citadel',\n  medina: 'Medina cluster', market: 'Market street', hamlets: 'Hamlets and footpaths', cliff: 'Cliff and canyon' });\n// EACH PEOPLE'S TWO FORMS (the proposal's table, every people 'both'): the land chooses between them, the first on the\n// best ground there is when neither finds its own.\nexport const PEOPLE_FORMS = Object.freeze({\n  loamwrights: ['amph', 'hamlets'], driftherders: ['hamlets', 'market'], thornkin: ['citadel', 'medina'],\n  hearthfolk: ['amph', 'cliff'], rimewalkers: ['harbour', 'hamlets'], frostfang: ['ridge', 'citadel'],\n  shadecasters: ['cliff', 'amph'], dunecombers: ['market', 'hamlets'], sandreavers: ['cliff', 'ridge'],\n  kilnborn: ['medina', 'valley'], glassminders: ['citadel', 'hamlets'], cinderhost: ['medina', 'hamlets'],\n  weavers: ['harbour', 'valley'], mistdrifters: ['harbour', 'hamlets'], hazeclaws: ['cliff', 'medina'],\n  domekeepers: ['amph', 'hamlets'], dustminers: ['amph', 'market'], corsairs: ['citadel', 'hamlets'],\n});\n// THE EIGHT BUILDING KINDS, and which a town of each size has (a village: homes, a workshop and an inn; a city all eight)\nexport const KINDS19 = Object.freeze(['home', 'workshop', 'forge', 'market', 'inn', 'store', 'temple', 'watch']);\nexport const KIND_NAMES19 = Object.freeze({ home: 'Home', workshop: 'Workshop', forge: 'Forge', market: 'Market hall', inn: 'Inn', store: 'Storehouse', temple: 'Temple', watch: 'Watch post' });\nconst KINDS_BY_SIZE = { village: ['workshop', 'inn'], town: ['workshop', 'forge', 'market', 'inn', 'store', 'watch'], city: ['workshop', 'workshop', 'forge', 'market', 'inn', 'store', 'watch', 'watch', 'workshop'] };\n// the footprint a kind asks for, in kubes [along its front, its depth], and its storeys (the proposal's sizes)\nconst KIND_LOT = { workshop: [6, 8, 2], forge: [6, 6, 2], market: [8, 10, 2], inn: [7, 9, 3], store: [6, 9, 2], watch: [5, 5, 3] };\n// version 20's: [front on the module, depth, storeys] (the owner's sizes; a kind stands first on its street, so it carries\n// both its walls and takes one kube more than its module front: a 5 x 8 is 6 wide on the ground). The inn 5, 6 or 7.\nconst KIND_LOT20 = { workshop: [5, 8, 2], forge: [5, 8, 2], market: [7, 8, 2], inn: [7, 8, 3], store: [7, 8, 3], watch: [5, 5, 5] };   // (city blocks: 2 to 3 storeys; the watch tower the one excused)\n\n// ---- THE FURNITURE: the new kube-sized machines (catalogue: products.json; storage-machines.mjs FURNITURE) -------------\n// Wooden pieces in the twelve woods, the stove, lamp and trough in the five metals: \"<Piece> (<Material>)\" is the variant\n// a town lays, in its people's own wood and metal. The Cabinet was the Chest until the owner, Oct 21 (\"i want to remove\n// chests and just use cabinets of varying wood color instead\"): the same item ids, so a town lays the same cells.\n// THE STORAGE OF OCT 21 (the owner): the Packing Crate is gone, so a town's crate is a Cabinet of its wood (a kube, as the\n// crate was, so it fits wherever the crate stood); and the Wardrobe is the LOCKER, two kubes high: a town stands one with its\n// Locker Upper above it, only where both cells are free (place's `tall`), and a cabinet where one is not.\nexport const FURNITURE19 = Object.freeze({ bed: 'Bed', table: 'Table', bench: 'Bench', shelf: 'Shelf', cabinet: 'Cabinet', barrel: 'Barrel', crate: 'Cabinet',\n  counter: 'Counter', workbench: 'Workbench', wardrobe: 'Locker', planter: 'Planter', hearth: 'Hearth', lamp: 'Lamp Post', trough: 'Trough' });\nexport const LOCKER_UPPER19 = 'Locker Upper';\nconst METAL_PIECES = new Set(['hearth', 'lamp', 'trough']);\nexport const PEOPLE_WOOD = Object.freeze({ loamwrights: 'Gloam Wood', driftherders: 'Drift Wood', thornkin: 'Void Wood', hearthfolk: 'Drift Wood', rimewalkers: 'Echo Wood',\n  frostfang: 'Echo Wood', shadecasters: 'Scorched Wood', dunecombers: 'Solis Wood', sandreavers: 'Scorched Wood', kilnborn: 'Scorched Wood', glassminders: 'Void Wood',\n  cinderhost: 'Scorched Wood', weavers: 'Solis Wood', mistdrifters: 'Halo Wood', hazeclaws: 'Gloam Wood', domekeepers: 'Glint Wood', dustminers: 'Echo Wood', corsairs: 'Void Wood' });\nexport const PEOPLE_METAL = Object.freeze({ loamwrights: 'Iron', driftherders: 'Iron', thornkin: 'Iron', hearthfolk: 'Copper', rimewalkers: 'Iron', frostfang: 'Steel',\n  shadecasters: 'Copper', dunecombers: 'Copper', sandreavers: 'Steel', kilnborn: 'Copper', glassminders: 'Titanium', cinderhost: 'Iron', weavers: 'Copper',\n  mistdrifters: 'Aluminum', hazeclaws: 'Iron', domekeepers: 'Aluminum', dustminers: 'Steel', corsairs: 'Titanium' });\nexport const furnitureName19 = (peopleId, piece) => `${FURNITURE19[piece]} (${METAL_PIECES.has(piece) ? PEOPLE_METAL[peopleId] : PEOPLE_WOOD[peopleId]})`;\n// What each container holds (the proposal's table), by its building's kind: [name, min, max] draws, the people's own goods\n// where it says so. A container gives 1 to 3 of its table's stacks, the same for every player on a world-day, again the next.\nconst PEOPLE_GOODS = (p) => p.goods && p.goods.length ? p.goods : ['Iron', 'Carbon'];\nexport const LOOT19 = Object.freeze({\n  home: (p, w) => [[w, 4, 8], [p.climate === 'temperate' || p.climate === 'methane' ? 'Verge Leaf Biomass' : 'Carbon', 4, 8], ['Radiance Beacon Light Bit', 1, 2], ['Water Ice', 2, 6]],\n  workshop: () => [['Iron', 4, 12], ['Copper', 4, 12], ['Aluminum', 4, 12], ['Reinforced Glass', 2, 6], ['Circuit Board', 1, 2]],\n  forge: () => [['Iron', 4, 12], ['Copper', 4, 12], ['Steel', 4, 12], ['Carbon', 8, 16]],\n  market: (p) => PEOPLE_GOODS(p).map((g) => [g, 2, 6]),\n  inn: () => [['Water Ice', 4, 10], ['Carbon', 4, 10], ['Radiance Beacon Light', 1, 2]],\n  store: (p, w, ground) => [[ground, 8, 24], ['Water Ice', 8, 24], ['Carbon', 8, 24], [PEOPLE_GOODS(p)[0], 8, 24]],\n  temple: (p) => [[PEOPLE_GOODS(p).find((g) => / Crystal$| Glass$/.test(g)) || 'Reinforced Glass', 1, 3]],\n  watch: () => [['Radiance Beacon Light', 1, 3], ['Radiance Glow Biomass', 2, 6]],\n  secret: (p) => [['Titanium', 4, 10], ['Glint Cut Crystal', 2, 6], [PEOPLE_GOODS(p)[0], 4, 12], [PEOPLE_GOODS(p)[PEOPLE_GOODS(p).length - 1], 4, 12]],\n});\n\nconst D4 = [[1, 0], [-1, 0], [0, 1], [0, -1]];\nconst HLO = -24, HHI = 56, HR = HHI - HLO;   // the kube levels a version 19 plan holds over and under its plaza's top\nexport const HLO19 = HLO, HHI19 = HHI;\nconst FY0 = 2 * -HLO;\n// Street classes are version 18's (ST18), with one more: EDGE, the paved walk either side of a cube edge.\n// (written out, not spread from ST18: alien-peoples.mjs imports this module, so its exports are not yet there while this one loads)\nexport const ST19 = 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, EDGE: 17, NAT: 18 });\nconst S = ST19;\nconst LANE = new Set([S.ALLEY, S.SIDE, S.MAIN, S.TRACK]);\nconst STREETY = new Set([S.ALLEY, S.SIDE, S.MAIN, S.PLAZA, S.POM, S.EDGE, S.TRACK, S.WALK]);\n\n// ---- WHICH FORM THE LAND CHOOSES (formpick = land) --------------------------------------------------------------------\n// transient-shape.js reads a candidate site's ground (siteStats: how much is water, how steep, how high its middle stands\n// over its ring, whether a cliff line crosses it) and asks each of the people's two forms how well it fits, 0 to 1. The\n// better wins; when neither reaches FORM_MIN the first form takes the best ground there is.\nexport const FORM_MIN = 0.3;\nexport function formFit19(form, st) {\n  const clamp = (v) => (v < 0 ? 0 : v > 1 ? 1 : v);\n  switch (form) {\n    case 'harbour': return st.water > 0.06 && st.water < 0.55 ? clamp(0.5 + st.shore * 3) : 0;\n    case 'valley': return st.water > 0.015 && st.water < 0.25 ? clamp(0.45 + st.water * 2) : st.water === 0 && st.trough > 1.5 ? 0.35 : 0;\n    case 'ridge': return clamp((st.crest - 1) / 4) * (st.steep < 0.35 ? 1 : 0.6);\n    case 'citadel': return clamp((st.dome - 1.5) / 4);\n    case 'amph': return clamp(Math.max((st.bowl - 1) / 4, (st.slope - 0.08) * 4));\n    case 'medina': return clamp((3 - st.spread) / 2.5) * (st.water < 0.05 ? 1 : 0.4);\n    case 'market': return clamp((4 - st.spread) / 3) * (st.water < 0.1 ? 1 : 0.5);\n    case 'hamlets': return clamp(0.3 + (st.spread > 1.5 && st.spread < 7 ? 0.12 : 0));\n    case 'cliff': return st.cliff > 0.015 && st.cliff < 0.3 ? clamp(0.5 + st.cliff * 4) : 0;\n    default: return 0;\n  }\n}\n// VERSION 20: each people's forms with 'grid' where they had 'hamlets'; a regular grid of blocks wins wherever the ground\n// is flat enough (\"a regular grid wherever the ground is flat enough\"), whatever the people's forms.\nexport const PEOPLE_FORMS20 = Object.freeze(Object.fromEntries(Object.entries(PEOPLE_FORMS).map(([k, v]) => [k, Object.freeze(v.map((f) => (f === 'hamlets' ? 'grid' : f)))])));\nexport const GRID_MIN20 = 0.55;\nexport function formFit20(form, st) {\n  if (form !== 'grid') return formFit19(form, st);\n  const clamp = (v) => (v < 0 ? 0 : v > 1 ? 1 : v);\n  return clamp((3.6 - st.spread) / 2.4) * clamp(1 - st.cliff * 6) * clamp(1 - st.steep * 1.5) * (st.water < 0.1 ? 1 : 0.4);\n}\nexport function pickForm20(peopleId, st) {\n  const g = formFit20('grid', st);\n  if (g >= GRID_MIN20) return { form: 'grid', fit: g };\n  const [a, b] = PEOPLE_FORMS20[peopleId] || ['grid', 'grid'], fa = formFit20(a, st), fb = formFit20(b, st);\n  if (fa < FORM_MIN && fb < FORM_MIN) return { form: a, fit: fa };\n  return fb > fa ? { form: b, fit: fb } : { form: a, fit: fa };\n}\n// every settlement a town or a city from version 20 (no villages)\nexport const townSizes20 = (diameter) => { const d = Math.round(Math.max(24, Math.min(96, Number(diameter) || 24))); return d < 48 ? ['town'] : d <= 72 ? ['town', 'town'] : ['city', 'town', 'town']; };\nexport function pickForm19(peopleId, st) {\n  const [a, b] = PEOPLE_FORMS[peopleId] || ['hamlets', 'hamlets'], fa = formFit19(a, st), fb = formFit19(b, st);\n  if (fa < FORM_MIN && fb < FORM_MIN) return { form: a, fit: fa };\n  return fb > fa ? { form: b, fit: fb } : { form: a, fit: fa };\n}\n\n// ---- THE DISTRICTS' NAMES -----------------------------------------------------------------------------------------------\nconst SYL = ['ar', 'el', 'om', 'ka', 'ri', 'tal', 'un', 've', 'shi', 'dor', 'ma', 'lun', 'or', 'zen', 'ith', 'ba', 'qua', 'sel'];\nexport function cityName19(seed) { const r = rngOf(String(seed) + '#name19'); let s = ''; const n = 2 + Math.floor(r() * 2); for (let k = 0; k < n; k++) s += SYL[Math.floor(r() * SYL.length)]; return s[0].toUpperCase() + s.slice(1); }\nconst DISTRICT_WORDS = { core: ['Old Town', 'the Core', 'the Hearth'], high: ['the Heights', 'Ridge', 'Upper Town'], low: ['Lower Bank', 'the Quay', 'Low Town'], gate: ['Gate', 'the Market', 'Crossways'] };\n\n// ---- A SMALL BINARY HEAP (integer keys), for the reach and the routes ----------------------------------------------------\nfunction heap() {\n  const k = [], v = [];\n  return {\n    get size() { return k.length; },\n    push(key, val) { let i = k.length; k.push(key); v.push(val); while (i > 0) { const p = (i - 1) >> 1; if (k[p] < k[i] || (k[p] === k[i] && v[p] <= v[i])) break; [k[p], k[i]] = [k[i], k[p]]; [v[p], v[i]] = [v[i], v[p]]; i = p; } },\n    pop() { const top = [k[0], v[0]], lk = k.pop(), lv = v.pop(); if (k.length) { k[0] = lk; v[0] = lv; let i = 0; for (;;) { const l = 2 * i + 1, r = l + 1; let m = i;\n      if (l < k.length && (k[l] < k[m] || (k[l] === k[m] && v[l] < v[m]))) m = l; if (r < k.length && (k[r] < k[m] || (k[r] === k[m] && v[r] < v[m]))) m = r; if (m === i) break;\n      [k[m], k[i]] = [k[i], k[m]]; [v[m], v[i]] = [v[i], v[m]]; i = m; } } return top; },\n  };\n}\n\n// =========================================================================================================================\n// A VERSION 19 TOWN'S PLAN. `rec` is its record (transient-shape.js THE TOWNS, version 19; the zone's alienWorlds copy):\n// { size, N (the plot's half-size), seed, terr (its ground, every plot column, over a cube edge too), liq, form, cores\n// (each district's seed, plot cells), edge (null, or the cube edge it crosses: s the plot side, e the first column past\n// it), target (built columns it may take), fields (field columns it may take) }. The same shape as version 18's plan, so\n// everything that reads one (the overlay, the walker's world, the servers' checks) reads this, with what is new beside it:\n// districts, kinds, rooms, furniture, containers, machines, secrets, the edge.\n// =========================================================================================================================\nconst PLAN_MEMO19 = new Map();\n// PLANS MADE ELSEWHERE (the owner's play review 2, Oct 24, s9): the page's look worker (world-look-worker.mjs) runs a world's\n// generator off the main thread, and hands the plans it laid out back to the page's memo, under the same keys, so the\n// world's build on the page finds them made (a city's plan was 1.5-1.9 s of one frame, measured on the M1). A pure function\n// of its key, so the same plan. planMemo19Mark/Since read what a run added; primePlan19 adds one.\nlet _plan19Seq = 0;\nconst _plan19At = new Map();\nconst plan19Put = (key, plan) => { PLAN_MEMO19.set(key, plan); _plan19At.set(key, ++_plan19Seq);\n  while (PLAN_MEMO19.size > 24) { const k = PLAN_MEMO19.keys().next().value; PLAN_MEMO19.delete(k); _plan19At.delete(k); } };\nexport const planMemo19Mark = () => _plan19Seq;\nexport function planMemo19Since(mark) { const out = []; for (const [k, p] of PLAN_MEMO19) if ((_plan19At.get(k) || 0) > mark) out.push([k, p]); return out; }\nexport function primePlan19(key, plan) { if (typeof key === 'string' && plan && typeof plan === 'object' && !PLAN_MEMO19.has(key)) plan19Put(key, plan); }\nexport function planTown19(peopleId, rec) {\n  if (!rec) return null;\n  const N = rec.N | 0, size = rec.size, seed = String(rec.seed || ''), terr = rec.terr || '', liq = rec.liq || null;\n  const p = peopleById(peopleId), F = FACADES18[peopleId], SZ = TOWNS18[size], PM = PEOPLE_MATERIALS[peopleId];\n  if (!p || !F || !SZ || !PM || !(N >= 6)) return null;\n  const V20 = (rec.v | 0) >= TOWNS20_SINCE;   // version 20: town buildings on the 5-kube module (see TOWN20)\n  const V21 = (rec.v | 0) >= TOWNS21_SINCE;   // version 21: every town big enough for two blocks and its square (see TOWN21)\n  const V22 = (rec.v | 0) >= TOWNS22_SINCE;   // version 22: doors in the doorways, rungs on towers, roofs and cellars (see TOWNS22_SINCE)\n  const SP = V20 ? 2 * TOWN20.storey : 6;      // a storey's height in bits (20: 3 kubes clear over a 1-kube floor)\n  const form = (V20 ? FORMS20 : FORMS19).includes(rec.form) ? rec.form : (V20 ? PEOPLE_FORMS20 : PEOPLE_FORMS)[peopleId][0];\n  const edge = rec.edge && Number.isInteger(rec.edge.s) && Number.isInteger(rec.edge.e) && rec.edge.s >= 0 && rec.edge.s < 4 ? { s: rec.edge.s, e: rec.edge.e } : null;\n  const cores0 = Array.isArray(rec.cores) && rec.cores.length ? rec.cores.slice(0, CITY19.maxDistricts).map((c) => (Array.isArray(c) ? [c[0] | 0, c[1] | 0] : [c.i | 0, c.j | 0])) : [[0, 0]];   // (a Firestore record holds them as { i, j })\n  const W = 2 * N, WW = W * W;\n  const target = rec.target > 0 ? rec.target | 0 : Math.round(WW * 0.42), fieldsCap = rec.fields > 0 ? rec.fields | 0 : Math.round(target * 0.4);\n  const key = (V22 ? '22|' : V21 ? '21|' : V20 ? '20|' : '19|') + peopleId + '|' + size + '|' + N + '|' + seed + '|' + (liq || '') + '|' + form + '|' + cores0.map((c) => c.join(',')).join(';') + '|' + (edge ? edge.s + ':' + edge.e : '') + '|' + target + '|' + fieldsCap + '|' + terr + (V21 && Array.isArray(rec.oLim) ? '|o' + rec.oLim.join(',') : '');\n  const memo = PLAN_MEMO19.get(key);\n  if (memo) return memo;\n  const TH = CLIMATE_THEMES[p.climate] || {};\n  const rng = rngOf(key), R = (a, b) => a + Math.floor(rng() * (b - a + 1)), pick = (xs) => xs[Math.floor(rng() * xs.length)];\n  // (21: a folded plot's rows past its face are no part of it: oLim)\n  const oLim = (rec.v | 0) >= TOWNS21_SINCE && Array.isArray(rec.oLim) && rec.oLim.length === 2 ? [rec.oLim[0] | 0, rec.oLim[1] | 0] : null;\n  const idx = (i, j) => (i + N) * W + (j + N), inP = oLim ? (i, j) => i >= -N && i < N && j >= -N && j < N && i >= oLim[0] && i <= oLim[1] : (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', friendly = p.kind === 'friendly';\n  const living = p.climate === 'temperate' || p.climate === 'methane' || p.climate === 'furnace';\n\n  // ---- THE CUBE EDGE (edge = walk): the seam between plot columns q = e − 1 and q = e on the axis the side crosses ----\n  const sAx = edge ? (edge.s < 2 ? 0 : 1) : -1, sDir = edge ? ((edge.s & 1) ? 1 : -1) : 0, sE = edge ? edge.e : 0;\n  const qOf = (i, j) => (sAx === 0 ? i : j);\n  const partOf = (i, j) => (!edge ? 0 : sDir > 0 ? (qOf(i, j) >= sE ? 1 : 0) : (qOf(i, j) < sE ? 1 : 0));\n  const inBand = (i, j) => !!edge && qOf(i, j) >= sE - CITY19.edgeWalk && qOf(i, j) <= sE + CITY19.edgeWalk - 1;\n  const onSeam = (i, j) => !!edge && (qOf(i, j) === sE - 1 || qOf(i, j) === sE);\n  const crosses = (i, j, a, b) => !!edge && partOf(i, j) !== partOf(a, b);\n\n  // ---- MATERIALS (version 18's table, and the furniture) ----\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');\n  const furnCodes = new Set();\n  const FX = (piece) => { const c = M(furnitureName19(peopleId, piece)); furnCodes.add(c); return c; };\n  const MACH = (name) => { const c = M(name); furnCodes.add(c); return c; };\n\n  // ---- THE FINE GRID (bits, half kubes) as version 18's ----\n  const FW = 2 * W, FH = 2 * HR, grid = new Uint8Array(FW * FW * FH), 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 kput = (i, j, h, c) => { fixing++; kbox(i, j, h, i, j, h, c); fixing--; };      // a whole kube standing on a floor (furniture, a machine)\n  const kAny = (i, j, h) => { for (let q = 0; q < 8; q++) if (fget(2 * i + (q >> 2), 2 * j + ((q >> 1) & 1), 2 * h + (q & 1))) return true; return false; };\n  const under = new Map(), carve = new Set(), ukey = (i, j, h) => i + ',' + j + ',' + h;\n  const waterCells = new Set();\n\n  // ---- 1. READ THE LAND: every column walkable (a step of 1 or less to its neighbours), steep (2), cliff (3+), water ----\n  const TR = decodeTerr(terr, WW), H = TR.h, wet = TR.wet;\n  const cls = new Uint8Array(WW);\n  for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n    const k = idx(i, j); if (wet[k]) { cls[k] = 3; continue; }\n    let m = 0; for (const [a, b] of D4) { const ni = i + a, nj = j + b; if (!inP(ni, nj)) continue; const n = idx(ni, nj); if (wet[n]) continue; const d = Math.abs(H[n] - H[k]); if (d > m) m = d; }\n    cls[k] = m <= 1 ? 0 : m === 2 ? 1 : 2;\n  }\n  const margin = 2, okPlot = (i, j) => inP(i, j) && cheb(i, j) <= N - 1 - margin;\n  // distance to water and to a cliff, over the whole plot (the harbour, the valley and the cliff read them)\n  const fieldFrom = (seedF, maxD) => { const d = new Int16Array(WW).fill(-1), q = []; for (let k = 0; k < WW; k++) if (seedF(k)) { d[k] = 0; q.push(k); }\n    for (let h2 = 0; h2 < q.length; h2++) { const c = q[h2], ci = ((c / W) | 0) - N, cj = (c % W) - N; if (d[c] >= maxD) continue;\n      for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (!inP(ni, nj)) continue; const n = idx(ni, nj); if (d[n] >= 0) continue; d[n] = d[c] + 1; q.push(n); } } return d; };\n  const dw = fieldFrom((k) => wet[k] === 1, 60), dcl = fieldFrom((k) => cls[k] === 2, 60);\n  const hasWater = dw.some((v) => v === 0);\n\n  // ---- 2. THE CORES (each district's seed, from the record) on the nearest good ground ----\n  const goodCore = (i, j) => okPlot(i, j) && cheb(i, j) <= N - 6 && cls[idx(i, j)] === 0 && !inBand(i, j) && !onSeam(i, j);\n  const snap = (ci, cj) => { for (let r = 0; r < W; r++) for (let a = -r; a <= r; a++) for (let b = -r; b <= r; b++) { if (Math.max(Math.abs(a), Math.abs(b)) !== r) continue; if (goodCore(ci + a, cj + b)) return [ci + a, cj + b]; } return null; };\n  const cores = [];\n  // a harbour's core square at the head of its water, a cliff town's at the foot of its cliff (the seed on the best ground\n  // for the form: \"here a riverbank, for a valley strip\")\n  { const f0 = form, near = (test) => { let b2 = null; for (let i = -N + 6; i < N - 6; i++) for (let j = -N + 6; j < N - 6; j++) { if (!goodCore(i, j) || !test(i, j)) continue; const d = Math.abs(i - cores0[0][0]) + Math.abs(j - cores0[0][1]); if (!b2 || d < b2[2]) b2 = [i, j, d]; } return b2; };\n    let b2 = null;\n    if ((f0 === 'harbour' || f0 === 'valley') && hasWater) b2 = near((i, j) => dw[idx(i, j)] >= 4 && dw[idx(i, j)] <= 6);\n    if (f0 === 'cliff') b2 = near((i, j) => { if (dcl[idx(i, j)] < 4 || dcl[idx(i, j)] > 6) return false; for (const [a, b] of D4) for (let t = 4; t <= 8; t++) { const x = i + a * t, y = j + b * t; if (inP(x, y) && cls[idx(x, y)] === 2 && H[idx(x, y)] >= H[idx(i, j)] + 2) return true; } return false; });\n    if (b2 && b2[2] <= N) cores0[0] = [b2[0], b2[1]]; }\n  for (const c of cores0) { const s = snap(Math.max(-N + 6, Math.min(N - 7, c[0])), Math.max(-N + 6, Math.min(N - 7, c[1]))); if (s && cores.every((o) => Math.abs(o[0] - s[0]) + Math.abs(o[1] - s[1]) >= 10)) cores.push(s); }\n  if (!cores.length) cores.push(snap(0, 0) || [0, 0]);\n\n  // ---- 3. GROW THE REACH (outline = grow): from every core over walkable and steep ground, paying for each kube climbed\n  // and more on steep ground, stopped by cliffs and water, until it holds the town's share (and room for its streets) ----\n  const reachCost = new Int32Array(WW).fill(-1), reachD = new Int8Array(WW).fill(-1);\n  { const hp = heap(), best = new Int32Array(WW).fill(2147483647), want = Math.round(target * 1.45);\n    cores.forEach((c, d) => { const k = idx(c[0], c[1]); best[k] = 0; reachD[k] = d; hp.push(0, k); });\n    let got = 0;\n    while (hp.size && got < want) {\n      const [c0, k] = hp.pop(); if (reachCost[k] >= 0 || c0 > best[k]) continue;\n      reachCost[k] = c0; got++;\n      const ci = ((k / W) | 0) - N, cj = (k % W) - N;\n      for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (!okPlot(ni, nj)) continue; const n = idx(ni, nj); if (reachCost[n] >= 0 || cls[n] >= 2) continue;\n        const nc = c0 + 10 + 26 * Math.abs(H[n] - H[k]) + (cls[n] === 1 ? 15 : 0); if (nc < best[n]) { best[n] = nc; reachD[n] = reachD[k]; hp.push(nc, n); } }\n    } }\n  const RM = (i, j) => inP(i, j) && reachCost[idx(i, j)] >= 0;\n\n  // ---- 4. THE STREETS: squares, a main street along the land's line, its lanes (growth = districts; squares = rhythm) ----\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 isLane = (c) => c === S.ALLEY || c === S.SIDE || c === S.MAIN;\n  const lanes = [], squares = [];\n  const mark = (i, j, c, o = {}) => { if (!inP(i, j)) return false; const k = idx(i, j), was = ST[k];\n    if (!(RM(i, j) || (o.cliff && cls[k] === 2 && okPlot(i, j)))) return false;\n    if (was === S.PLAZA || was === S.LMK || was === S.WALL || was === S.WALK) return false; if (isLane(was) && was >= c) return false; ST[k] = c; return true; };\n  // a line of cells (4-connected centres), `w` wide (offsets across it: 3 → −1..1, 2 → 0..1, 1 → 0), of class `c`\n  function layLine(pts, w, c, o = {}) {\n    if (!pts || pts.length < 2) return null;\n    const offs = w === 3 ? [-1, 0, 1] : w === 2 ? [0, 1] : [0];\n    for (let t = 0; t < pts.length; t++) {\n      const [ci, cj] = pts[t], dirs = [];\n      if (t + 1 < pts.length) dirs.push([pts[t + 1][0] - ci, pts[t + 1][1] - cj]);\n      if (t > 0) dirs.push([ci - pts[t - 1][0], cj - pts[t - 1][1]]);\n      for (const [a, b] of dirs) { const pi = b !== 0 ? 1 : 0, pj = a !== 0 ? 1 : 0; for (const oo of offs) mark(ci + oo * pi, cj + oo * pj, c, o); }\n    }\n    const lane = { cls: c, w, pts: pts.map((x) => x.slice(0, 2)), di: pts[1][0] - pts[0][0], dj: pts[1][1] - pts[0][1] };\n    lanes.push(lane);\n    return lane;\n  }\n  // A WALK OVER THE LAND from (si, sj) heading (di, dj): each step straight on or a quarter turn (never back, never twice\n  // in a row), to the cell `score` likes best (lowest), until it leaves the reach, meets another street or square (a\n  // junction: it ends on it) or reaches its length. Never alongside another lane (that would make a street wider than its\n  // class): where one runs just past its edge, it joins it there.\n  function steer(si, sj, di, dj, maxLen, score, o = {}) {\n    const pts = [], seen = new Set(), w = o.w || 1, turnC = o.turn == null ? 0.6 : o.turn, minRun = o.minRun || 2;\n    let ci = si, cj = sj, since = 99;\n    const okc = (i, j) => okPlot(i, j) && (RM(i, j) || (o.cliff && cls[idx(i, j)] === 2)) && !seen.has(idx(i, j));\n    for (let s = 0; s < maxLen; s++) {\n      if (!okc(ci, cj)) break;\n      const here = ST[idx(ci, cj)];\n      if (s > 0 && (isLane(here) || here === S.PLAZA || here === S.LMK)) { pts.push([ci, cj]); break; }\n      if (s > 1 && !o.loose) { const pi = dj !== 0 ? 1 : 0, pj = di !== 0 ? 1 : 0, lo = w === 3 ? -2 : -1, hi = w === 3 ? 2 : w === 2 ? 2 : 1;\n        if (isLane(st(ci + lo * pi, cj + lo * pj)) || isLane(st(ci + hi * pi, cj + hi * pj))) { pts.push([ci, cj]); break; } }\n      pts.push([ci, cj]); seen.add(idx(ci, cj));\n      let best = null;\n      const cands = [[di, dj, 0]]; if (since >= minRun) cands.push([-dj, di, 1], [dj, -di, 1]);\n      for (const [a, b, tn] of cands) { const ni = ci + a, nj = cj + b; if (!okPlot(ni, nj) || seen.has(idx(ni, nj))) continue;\n        if (!(RM(ni, nj) || (o.cliff && cls[idx(ni, nj)] === 2) || isLane(st(ni, nj)) || st(ni, nj) === S.PLAZA)) continue;\n        const sc = score(ni, nj, a, b) + tn * turnC + (o.noise ? rng() * o.noise : 0); if (!best || sc < best[3]) best = [a, b, tn, sc]; }\n      if (!best) break;\n      if (best[2]) { di = best[0]; dj = best[1]; since = 0; } else since++;\n      ci += di; cj += dj;\n    }\n    return pts;\n  }\n  // A ROUTE between two cells over the reach and the streets already laid (cheaper along them), as 4-connected centres.\n  function route(a, b, o = {}) {\n    const hp = heap(), best = new Int32Array(WW).fill(2147483647), from = new Int32Array(WW).fill(-1), s0 = idx(a[0], a[1]), t0 = idx(b[0], b[1]);\n    best[s0] = 0; hp.push(0, s0);\n    while (hp.size) { const [c0, k] = hp.pop(); if (c0 > best[k]) continue; if (k === t0) break; const ci = ((k / W) | 0) - N, cj = (k % W) - N;\n      for (const [x, y] of D4) { const ni = ci + x, nj = cj + y; if (!okPlot(ni, nj)) continue; const n = idx(ni, nj);\n        if (!(RM(ni, nj) || isLane(ST[n]) || ST[n] === S.PLAZA) || ST[n] === S.LMK || (o.noSeam && crosses(ci, cj, ni, nj))) continue;\n        const nc = c0 + 10 + 30 * Math.abs(H[n] - H[k]) - (isLane(ST[n]) ? 5 : 0) + (o.noise ? Math.floor(rng() * o.noise) : 0); if (nc < best[n]) { best[n] = nc; from[n] = k; hp.push(nc, n); } } }\n    if (best[t0] === 2147483647) return null;\n    const pts = []; for (let k = t0; k >= 0; k = from[k]) { pts.push([((k / W) | 0) - N, (k % W) - N]); if (k === s0) break; }\n    return pts.reverse();\n  }\n  // A SQUARE of `s` kubes about (ci, cj), smaller where the ground will not hold it; never in the edge walk.\n  function square(ci, cj, s, kind, d) {\n    for (let z = s; z >= 4; z--) {\n      const i0 = ci - (z >> 1), j0 = cj - (z >> 1);\n      let ok = true;\n      for (let i = i0; i < i0 + z && ok; i++) for (let j = j0; j < j0 + z; j++) { if (!okPlot(i, j) || !RM(i, j) || cls[idx(i, j)] > 1 || inBand(i, j) || ST[idx(i, j)] === S.PLAZA || ST[idx(i, j)] === S.LMK) { ok = false; break; } }\n      if (!ok) continue;\n      if (squares.some((q) => !(i0 + z + 1 < q.i0 || i0 > q.i1 + 1 || j0 + z + 1 < q.j0 || j0 > q.j1 + 1))) continue;\n      for (let i = i0; i < i0 + z; i++) for (let j = j0; j < j0 + z; j++) ST[idx(i, j)] = S.PLAZA;\n      const q = { i0, j0, i1: i0 + z - 1, j1: j0 + z - 1, s: z, kind, d, ci: i0 + (z >> 1), cj: j0 + (z >> 1) };\n      squares.push(q); return q;\n    }\n    return null;\n  }\n  const sqEdgeCell = (q, di, dj) => [di > 0 ? q.i1 + 1 : di < 0 ? q.i0 - 1 : q.ci, dj > 0 ? q.j1 + 1 : dj < 0 ? q.j0 - 1 : q.cj];\n  const hAt = (i, j) => H[idx(i, j)];\n  const DIRS = [[1, 0], [-1, 0], [0, 1], [0, -1]];\n  const aheadMean = (ci, cj, a, b, n) => { let s = 0, m = 0; for (let t = 1; t <= n; t++) { const i = ci + a * t, j = cj + b * t; if (!inP(i, j)) break; s += hAt(i, j); m++; } return m ? s / m : -99; };\n  const aheadRun = (ci, cj, a, b, n) => { let t = 0; while (t < n && RM(ci + a * (t + 1), cj + b * (t + 1))) t++; return t; };\n\n  // THE DISTRICTS' SQUARES: the first core's the core square (6 x 6), the others 4 to 5. The city's landmark stands by the\n  // square on its highest ground (\"one landmark for the city, on its highest ground\").\n  const districts = [];\n  if (!V20) cores.forEach((c, d) => {\n    let sq = square(c[0], c[1], d === 0 ? (N >= 10 ? CITY19.coreSquare : 4) : (size === 'city' ? 5 : 4), d === 0 ? 'core' : 'district', d);\n    if (!sq) sq = square(c[0], c[1], 4, d === 0 ? 'core' : 'district', d);\n    if (sq) districts.push({ d: districts.length, core: c, sq, name: '' });\n  });\n  if (!V20 && !districts.length) { const c = cores[0]; for (let i = c[0] - 1; i <= c[0] + 1; i++) for (let j = c[1] - 1; j <= c[1] + 1; j++) if (inP(i, j)) ST[idx(i, j)] = S.PLAZA;\n    const q = { i0: c[0] - 1, j0: c[1] - 1, i1: c[0] + 1, j1: c[1] + 1, s: 3, kind: 'core', d: 0, ci: c[0], cj: c[1] }; squares.push(q); districts.push({ d: 0, core: c, sq: q, name: '' }); }\n  const highD = V20 ? null : districts.reduce((a, x) => (hAt(x.sq.ci, x.sq.cj) > hAt(a.sq.ci, a.sq.cj) ? x : a), districts[0]);\n  let lmk = null;\n  if (!V20 && N >= 9) {\n    const q = highD.sq;\n    for (let LS = Math.min(SZ.lmk, 8); LS >= 3 && !lmk; LS--) for (const [di, dj] of DIRS) {\n      const i0 = di > 0 ? q.i1 + 1 : di < 0 ? q.i0 - LS : q.ci - (LS >> 1), j0 = dj > 0 ? q.j1 + 1 : dj < 0 ? q.j0 - LS : q.cj - (LS >> 1);\n      let ok = true; for (let i = i0; i < i0 + LS && ok; i++) for (let j = j0; j < j0 + LS; j++) if (!okPlot(i, j) || !RM(i, j) || cls[idx(i, j)] > 1 || inBand(i, j) || ST[idx(i, j)]) { ok = false; break; }\n      if (!ok) continue;\n      lmk = { i0, j0, w: LS, d: LS, form: F.form, side: [di, dj], sq: q, front: [di > 0 ? q.i1 : di < 0 ? q.i0 : q.ci, dj > 0 ? q.j1 : dj < 0 ? q.j0 : q.cj] };\n      for (let i = i0; i < i0 + LS; i++) for (let j = j0; j < j0 + LS; j++) ST[idx(i, j)] = S.LMK;\n      break;\n    }\n  }\n\n  // ---- THE FORMS: each district's streets along the land's own lines --------------------------------------------------\n  const ALT = (V20 ? PEOPLE_FORMS20 : PEOPLE_FORMS)[peopleId] || [form, form];\n  const anyCliff = dcl.some((v, k) => v === 0 && cheb(((k / W) | 0) - N, (k % W) - N) <= N - 4);\n  let formUsed = V20 ? 'grid' : form;   // (20: every town a grid of blocks; its people's form chose where it stands)\n  if (!V20 && (form === 'harbour') && !hasWater) formUsed = ALT.find((x) => x !== form && x !== 'valley') || 'amph';\n  if (!V20 && form === 'cliff' && !anyCliff) formUsed = ALT.find((x) => x !== 'cliff') || 'amph';\n  if (formUsed === 'harbour' && !hasWater) formUsed = 'amph';\n  if (formUsed === 'cliff' && !anyCliff) formUsed = 'amph';\n  const piers = [], caveSites = [], greens = [];\n  let walled = V20 ? (form === 'citadel' || form === 'medina' || aggressive) : formUsed === 'citadel' || formUsed === 'medina' || aggressive;\n  const stepDir = (pts, s) => { const a = pts[Math.min(s + 1, pts.length - 1)], b = pts[Math.max(s - 1, 0)]; const di = Math.sign(a[0] - b[0]), dj = Math.sign(a[1] - b[1]); return di && dj ? [di, 0] : [di, dj]; };\n  const flat = (i, j, h0) => Math.abs(hAt(i, j) - h0);\n  // side lanes off a lane, every 6 to 10 kubes, alternating sides (`width` 2 or 1), each steered by `score`\n  function branches(L, mainW, width, cls2, len, score, o = {}) {\n    let next = R(2, 5), side = rng() < 0.5 ? 1 : -1, n = 0;\n    for (let s = 0; s < L.length; s++) {\n      if (s < next) continue;\n      next = s + R(CITY19.sideEvery[0], CITY19.sideEvery[1]);\n      const [ci, cj] = L[s], [di, dj] = stepDir(L, s), si = di ? 0 : side, sj = di ? side : 0;\n      if (!di && !dj) continue;\n      const off = mainW === 3 ? 2 : mainW === 2 ? (side > 0 ? 2 : 1) : 1;\n      const a = [ci + si * off, cj + sj * off];\n      if (!RM(a[0], a[1]) || ST[idx(a[0], a[1])]) { side = -side; continue; }\n      const pts = steer(a[0], a[1], si, sj, len(), score, { w: width, turn: o.turn == null ? 0.9 : o.turn, noise: o.noise });\n      if (pts.length >= 3) { layLine([[ci + si * (off - 1), cj + sj * (off - 1)], ...pts], width, cls2); n++; if (o.after) o.after(pts, si, sj); }\n      if (!o.oneSide) side = -side;\n    }\n    return n;\n  }\n  const mains = [], linkLanes = [];   // (the links between districts and the street over the edge: never cut back by the cap)\n  function lineBoth(q, a, b, score, w, c, o = {}) {\n    const out = [];\n    for (const sg of [1, -1]) { const e = sqEdgeCell(q, a * sg, b * sg), pts = steer(e[0], e[1], a * sg, b * sg, o.len || 2 * N, score, { w, turn: o.turn == null ? 0.8 : o.turn, noise: o.noise });\n      const ln = layLine(pts, w, c); if (ln) { out.push(pts); if (c === S.MAIN) mains.push(ln); } }\n    return out;\n  }\n  const bestAxis = (q, fn) => { let best = null; for (const [a, b] of [[1, 0], [0, 1]]) { const v = fn(a, b); if (!best || v > best[2]) best = [a, b, v]; } return best; };\n  const FORMS = {\n    ridge(D) {   // the main street along the crest, stair alleys falling off both sides to a contour lane on each flank\n      const q = D.sq, h0 = hAt(q.ci, q.cj);\n      const [a, b] = bestAxis(q, (a2, b2) => aheadMean(q.ci, q.cj, a2, b2, 10) + aheadMean(q.ci, q.cj, -a2, -b2, 10) + 0.2 * (aheadRun(q.ci, q.cj, a2, b2, 14) + aheadRun(q.ci, q.cj, -a2, -b2, 14)));\n      const arms = lineBoth(q, a, b, (i, j) => -hAt(i, j) + 0.15 * flat(i, j, h0), 3, S.MAIN, { turn: 0.9 });\n      for (const L of arms) branches(L, 3, 1, S.ALLEY, () => R(6, 12), (i, j) => hAt(i, j), { turn: 1.4, after: (pts, si, sj) => {\n        const e = pts[pts.length - 1], lv = hAt(e[0], e[1]);\n        for (const sg of [1, -1]) { const da = si ? 0 : sg, db = si ? sg : 0, s0 = [e[0] + da, e[1] + db];\n          if (RM(s0[0], s0[1]) && !ST[idx(s0[0], s0[1])]) layLine([e, ...steer(s0[0], s0[1], da, db, 2 * N, (i, j) => 2 * Math.abs(hAt(i, j) - lv), { w: 2, turn: 0.5 })], 2, S.SIDE); } } });\n    },\n    harbour(D) {   // a quay round the bay, spokes up from it, two more arcs up the slope, piers out over the water\n      const q = D.sq; let s0 = null;\n      for (let i = q.i0 - 14; i <= q.i1 + 14; i++) for (let j = q.j0 - 14; j <= q.j1 + 14; j++) if (RM(i, j) && dw[idx(i, j)] === 2 && !ST[idx(i, j)]) { const d = Math.abs(i - q.ci) + Math.abs(j - q.cj); if (!s0 || d < s0[2]) s0 = [i, j, d]; }\n      if (!s0) { FORMS.amph(D); return; }\n      const link = route(sqEdgeCell(q, Math.sign(s0[0] - q.ci), s0[0] === q.ci ? Math.sign(s0[1] - q.cj) : 0), [s0[0], s0[1]]);\n      if (link) layLine(link, 2, S.SIDE);\n      const quays = [];\n      for (const [a, b] of DIRS) { if (Math.abs(dw[idx(Math.max(-N, Math.min(N - 1, s0[0] + a)), Math.max(-N, Math.min(N - 1, s0[1] + b)))] - 2) > 0) continue;\n        const pts = steer(s0[0] + a, s0[1] + b, a, b, 3 * N, (i, j) => 3 * Math.abs(dw[idx(i, j)] - 2), { w: 3, turn: 0.4 }); if (pts.length > 4) { const ln = layLine([[s0[0], s0[1]], ...pts], 3, S.MAIN); if (ln) { mains.push(ln); quays.push(pts); } } }\n      for (const L of quays) {\n        branches(L, 3, 2, S.SIDE, () => R(8, 16), (i, j) => -dw[idx(i, j)], { turn: 1.5 });\n        // piers: straight out over the water from the quay, two wide, a platform house at the end\n        for (let s = R(3, 6); s < L.length && piers.length < (size === 'city' ? 4 : size === 'town' ? 2 : 1); s += R(10, 16)) {\n          const [ci, cj] = L[s]; let wd = null; for (const [a, b] of DIRS) { const n = idx(Math.max(-N, Math.min(N - 1, ci + 2 * a)), Math.max(-N, Math.min(N - 1, cj + 2 * b))); if (wet[n] && (!wd || dw[n] < wd[2])) wd = [a, b, dw[n]]; }\n          if (!wd) continue;\n          const [a, b] = wd, pi = b ? 1 : 0, pj = a ? 1 : 0, cells = [];\n          let t = 2, ok = true;\n          for (; t < 2 + R(6, 9); t++) { for (const o of [0, 1]) { const i = ci + a * t + o * pi, j = cj + b * t + o * pj; if (!okPlot(i, j) || !wet[idx(i, j)] || inBand(i, j)) ok = false; else cells.push([i, j]); } if (!ok) break; }\n          if (t < 6) continue;\n          for (const [i, j] of cells) ST[idx(i, j)] = S.WALK;\n          piers.push({ end: [ci + a * t, cj + b * t], dir: [a, b], from: [ci + a, cj + b] });\n        }\n      }\n      for (const tgt of [10, 18]) { let done = 0;\n        for (let i = -N; i < N && done < 2; i++) for (let j = -N; j < N && done < 2; j++) { const k = idx(i, j); if (dw[k] !== tgt || !RM(i, j) || !isLane(ST[k])) continue;\n          for (const [a, b] of DIRS) { const ni = i + a, nj = j + b; if (!RM(ni, nj) || ST[idx(ni, nj)] || dw[idx(ni, nj)] !== tgt) continue;\n            const pts = steer(ni, nj, a, b, 3 * N, (x, y) => 2 * Math.abs(dw[idx(x, y)] - tgt) + 0.3 * flat(x, y, hAt(i, j)), { w: tgt === 10 ? 2 : 1, turn: 0.4 });\n            if (pts.length > 5) { layLine([[i, j], ...pts], tgt === 10 ? 2 : 1, tgt === 10 ? S.SIDE : S.ALLEY); done++; } } } }\n    },\n    valley(D) {   // a street on each bank, bridges every 25 to 30 kubes with a square at each bridgehead, stairs up the sides\n      const q = D.sq;\n      if (!hasWater) { const [a, b] = bestAxis(q, (a2, b2) => -(aheadMean(q.ci, q.cj, a2, b2, 10) + aheadMean(q.ci, q.cj, -a2, -b2, 10)));\n        for (const L of lineBoth(q, a, b, (i, j) => hAt(i, j) + 0.3 * flat(i, j, hAt(q.ci, q.cj)), 3, S.MAIN)) branches(L, 3, 1, S.ALLEY, () => R(6, 12), (i, j) => -hAt(i, j), { turn: 1.4 });\n        return; }\n      let s0 = null;\n      for (let i = q.i0 - 16; i <= q.i1 + 16; i++) for (let j = q.j0 - 16; j <= q.j1 + 16; j++) if (RM(i, j) && dw[idx(i, j)] === 3 && !ST[idx(i, j)]) { const d = Math.abs(i - q.ci) + Math.abs(j - q.cj); if (!s0 || d < s0[2]) s0 = [i, j, d]; }\n      if (!s0) { FORMS.amph(D); return; }\n      const link = route(sqEdgeCell(q, Math.sign(s0[0] - q.ci), s0[0] === q.ci ? Math.sign(s0[1] - q.cj) : 0), [s0[0], s0[1]]);\n      if (link) layLine(link, 2, S.SIDE);\n      const banks = [];\n      for (const [a, b] of DIRS) { const n = [s0[0] + a, s0[1] + b]; if (!inP(n[0], n[1]) || dw[idx(n[0], n[1])] !== 3) continue;\n        const pts = steer(n[0], n[1], a, b, 3 * N, (i, j) => 3 * Math.abs(dw[idx(i, j)] - 3) + 0.3 * flat(i, j, hAt(s0[0], s0[1])), { w: 3, turn: 0.4 });\n        if (pts.length > 4) { const ln = layLine([[s0[0], s0[1]], ...pts], 3, S.MAIN); if (ln) { mains.push(ln); banks.push(pts); } } }\n      for (const L of banks) {\n        branches(L, 3, 1, S.ALLEY, () => R(6, 12), (i, j) => -hAt(i, j), { turn: 1.4 });\n        for (let s = R(8, 14); s < L.length; s += R(25, 30)) {   // a bridge across: straight over the water to the far bank's ground\n          const [ci, cj] = L[s]; let wd = null; for (const [a, b] of DIRS) { const ni = ci + 2 * a, nj = cj + 2 * b; if (inP(ni, nj) && (!wd || dw[idx(ni, nj)] < wd[2])) wd = [a, b, dw[idx(ni, nj)]]; }\n          if (!wd) continue;\n          const [a, b] = wd, pi = b ? 1 : 0, pj = a ? 1 : 0, deck = [];\n          let t = 2, land = null;\n          for (; t < 18; t++) { const i = ci + a * t, j = cj + b * t; if (!okPlot(i, j) || !okPlot(i + pi, j + pj)) break; const k = idx(i, j);\n            if (wet[k] || wet[idx(i + pi, j + pj)]) { deck.push([i, j], [i + pi, j + pj]); continue; }\n            if (deck.length && dw[k] >= 2 && cls[k] <= 1) { land = [i, j]; break; }\n            if (deck.length) deck.push([i, j], [i + pi, j + pj]); }\n          if (!land || deck.length < 4 || deck.length > 24) continue;\n          for (const [i, j] of deck) { const k = idx(i, j); if (wet[k]) ST[k] = S.WALK; else if (!ST[k]) { reachCost[k] = Math.max(0, reachCost[k]); ST[k] = S.SIDE; } }\n          reachCost[idx(land[0], land[1])] = Math.max(0, reachCost[idx(land[0], land[1])]);\n          // the far bank: a square at the bridgehead, a street along it both ways\n          const sq = square(land[0] + 2 * a, land[1] + 2 * b, 4, 'bridge', D.d);\n          for (const [x, y] of [[-b, a], [b, -a]]) { const pts = steer(land[0] + x, land[1] + y, x, y, 2 * N, (i, j) => 3 * Math.abs(dw[idx(i, j)] - 3), { w: 2, turn: 0.4 }); layLine([land, ...pts], 2, S.SIDE); }\n          if (sq) { const r2 = route(land, sqEdgeCell(sq, -a, -b)); if (r2) layLine(r2, 2, S.SIDE); }\n        }\n      }\n    },\n    amph(D) {   // curved terraces round the bowl, each a lane with a row of houses, crossed by stairs down to the square\n      const q = D.sq, base = hAt(q.ci, q.cj);\n      let terraces = 0;\n      for (let k2 = 1; k2 <= 4; k2++) {\n        const L = base + 3 * k2, w = [2, 3, 2, 1][k2 - 1], c = [S.SIDE, S.MAIN, S.SIDE, S.ALLEY][k2 - 1];\n        let seedC = null;\n        for (const [a, b] of DIRS) { const e = sqEdgeCell(q, a, b), up = steer(e[0], e[1], a, b, N, (i, j) => -hAt(i, j), { loose: true, turn: 0.3 });\n          for (const cc of up) if (hAt(cc[0], cc[1]) >= L && !ST[idx(cc[0], cc[1])]) { seedC = [cc[0], cc[1], a, b]; break; } if (seedC) break; }\n        if (!seedC) break;\n        const [ci, cj, a, b] = seedC;\n        for (const [x, y] of [[-b, a], [b, -a]]) { const pts = steer(ci, cj, x, y, 3 * N, (i, j) => 2 * Math.abs(hAt(i, j) - L), { w, turn: 0.3 }); if (pts.length > 4) { const ln = layLine(pts, w, c); if (ln && c === S.MAIN) mains.push(ln); terraces++; } }\n      }\n      // the stairs: straight up the slope from the square's sides, all pointing down to it\n      let n2 = 0;\n      for (const [a, b] of DIRS) for (const off of [-2, 0, 2]) {\n        const e = sqEdgeCell(q, a, b), s0 = [e[0] + (a ? 0 : off), e[1] + (a ? off : 0)];\n        if (!RM(s0[0], s0[1]) || ST[idx(s0[0], s0[1])]) continue;\n        const pts = steer(s0[0], s0[1], a, b, 2 * N, (i, j) => -hAt(i, j) * 0.5, { w: 1, turn: 2.5, loose: true });\n        if (pts.length > 4) { layLine([[s0[0] - a, s0[1] - b], ...pts], n2 % 3 === 0 ? 2 : 1, n2 % 3 === 0 ? S.SIDE : S.ALLEY); n2++; }\n      }\n      if (!terraces) FORMS.citadel(D, true);\n    },\n    citadel(D, ringsOnly) {   // rings round the hill, stair cuts straight up to the summit and its landmark, a wall round the steep part\n      const q = D.sq, cx = q.ci + 0.5 * ((q.s & 1) ? 0 : -1) + 0.5, cy = q.cj + 0.5 * ((q.s & 1) ? 0 : -1) + 0.5;\n      const rad = (i, j) => Math.sqrt((i + 0.5 - cx) * (i + 0.5 - cx) + (j + 0.5 - cy) * (j + 0.5 - cy));\n      const rings = size === 'city' ? [q.s / 2 + 5, q.s / 2 + 12, q.s / 2 + 19] : size === 'town' ? [q.s / 2 + 5, q.s / 2 + 12] : [q.s / 2 + 5];\n      rings.forEach((r, n) => {\n        const i0 = Math.round(cx + r), j0 = Math.round(cy); if (!RM(i0, j0)) return;\n        const w = n === rings.length - 1 && !ringsOnly ? 3 : 2, c = w === 3 ? S.MAIN : S.SIDE;\n        for (const sg of [1, -1]) { const pts = steer(i0, j0, 0, sg, Math.round(7 * r), (i, j) => 3 * Math.abs(rad(i, j) - r), { w, turn: 0.2, loose: true });\n          if (pts.length > 4) { const ln = layLine(pts, w, c); if (ln && c === S.MAIN) mains.push(ln); } }\n      });\n      for (const [a, b] of DIRS) { const e = sqEdgeCell(q, a, b); if (!RM(e[0], e[1]) || ST[idx(e[0], e[1])]) continue;\n        const pts = steer(e[0], e[1], a, b, Math.round(rings[rings.length - 1] + 6), (i, j) => -rad(i, j), { w: 1, turn: 3, loose: true }); layLine([[e[0] - a, e[1] - b], ...pts], 1, S.ALLEY); }\n      if (!ringsOnly) walled = true;\n    },\n    medina(D) {   // courtyard houses packed close; a few lanes wind in from the gates to the square; blind alleys; a wall round it\n      const q = D.sq;\n      for (const [a, b] of DIRS) {\n        const e = sqEdgeCell(q, a, b); let g = null;\n        for (let t = 0; t < 2 * N; t++) { const i = e[0] + a * t, j = e[1] + b * t; if (!RM(i, j)) break; g = [i, j]; }\n        if (!g || Math.abs(g[0] - e[0]) + Math.abs(g[1] - e[1]) < 5) continue;\n        const pts = route(e, g, { noise: 40 }); if (pts) layLine([[e[0] - a, e[1] - b], ...pts], 2, S.SIDE);\n      }\n      const laneCells = []; for (let k = 0; k < WW; k++) if (ST[k] === S.SIDE) laneCells.push(k);\n      const nAl = Math.round((laneCells.length + 30) / 4);\n      for (let t = 0; t < nAl && laneCells.length; t++) {\n        const k = laneCells[Math.floor(rng() * laneCells.length)], ci = ((k / W) | 0) - N, cj = (k % W) - N, [a, b] = pick(DIRS), s0 = [ci + 2 * a, cj + 2 * b];\n        if (!RM(s0[0], s0[1]) || ST[idx(s0[0], s0[1])]) continue;\n        const pts = steer(s0[0], s0[1], a, b, R(4, 11), () => rng(), { w: 1, turn: 0.3, minRun: 3 });\n        if (pts.length >= 3) layLine([[ci + a, cj + b], ...pts], 1, S.ALLEY);\n      }\n      walled = true;\n    },\n    market(D) {   // one long, gently bending main street between a well square and a gate square, a market place halfway,\n      // unbroken frontage both sides, alleys every 6 kubes to a back lane on each side\n      const q = D.sq, h0 = hAt(q.ci, q.cj);\n      const flatRun = (a, b) => -[1, -1].reduce((s, sg) => { let t = 0, sum = 0; for (; t < 14; t++) { const i = q.ci + a * sg * t, j = q.cj + b * sg * t; if (!RM(i, j)) break; sum += Math.abs(hAt(i, j) - h0); } return s + sum / Math.max(1, t) - t * 0.2; }, 0);\n      const [a, b] = bestAxis(q, flatRun);\n      const line0 = a ? q.cj : q.ci;\n      const arms = lineBoth(q, a, b, (i, j) => 0.6 * flat(i, j, h0) + 0.25 * Math.abs((a ? j : i) - line0), 3, S.MAIN, { turn: 1.4 });\n      arms.forEach((L, n) => { if (L.length > 6) { const e = L[L.length - 1]; square(e[0], e[1], n === 0 ? 5 : 4, n === 0 ? 'well' : 'gate', D.d); } });\n      const mainCells = new Set(); for (const L of arms) for (const c of L) mainCells.add(idx(c[0], c[1]));\n      const dm = fieldFrom((k) => mainCells.has(k), 14);\n      for (const sg of [1, -1]) {\n        const L = arms[0] && arms[0].length > 4 ? arms[0] : arms[1]; if (!L) continue;\n        const s0 = [q.ci + (a ? 0 : 9 * sg), q.cj + (a ? 9 * sg : 0)];\n        if (!RM(s0[0], s0[1])) continue;\n        for (const dd of [1, -1]) { const pts = steer(s0[0], s0[1], a * dd, b * dd, 3 * N, (i, j) => 2 * Math.abs(dm[idx(i, j)] - 9) + 0.3 * flat(i, j, h0), { w: 2, turn: 0.5 }); layLine(pts, 2, S.SIDE); }\n      }\n      for (const L of arms) branches(L, 3, 1, S.ALLEY, () => 9, (i, j) => 0.2 * flat(i, j, h0), { turn: 3 });\n    },\n    hamlets(D) {   // small clusters round greens on knolls, joined by footpaths across the fields and a track\n      if (D.d > 0) return;\n      const want = size === 'city' ? 6 : size === 'town' ? 4 : 3, cand = [];\n      for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { if (!RM(i, j) || cls[idx(i, j)] || inBand(i, j)) continue; let top = true;\n        for (let a = -3; a <= 3 && top; a++) for (let b = -3; b <= 3; b++) if (inP(i + a, j + b) && hAt(i + a, j + b) > hAt(i, j)) { top = false; break; }\n        if (top) cand.push([i, j, hAt(i, j) + rng() * 0.5]); }\n      cand.sort((x, y) => y[2] - x[2]);\n      const spots = districts.map((x) => [x.sq.ci, x.sq.cj]);\n      for (const c of cand) { if (greens.length + districts.length >= want + 1) break; if (spots.some((s) => Math.abs(s[0] - c[0]) + Math.abs(s[1] - c[1]) < 13)) continue;\n        const g = square(c[0], c[1], 4, 'green', 0); if (g) { greens.push(g); spots.push([g.ci, g.cj]); } }\n      const all = [...districts.map((x) => x.sq), ...greens], joined = [all[0]];\n      for (const g of all.slice(1)) {\n        let best = null; for (const h of joined) { const d = Math.abs(h.ci - g.ci) + Math.abs(h.cj - g.cj); if (!best || d < best[1]) best = [h, d]; }\n        const h = best[0], a = sqEdgeCell(g, Math.sign(h.ci - g.ci), h.ci === g.ci ? Math.sign(h.cj - g.cj) : 0), b = sqEdgeCell(h, Math.sign(g.ci - h.ci), g.ci === h.ci ? Math.sign(g.cj - h.cj) : 0);\n        const pts = RM(a[0], a[1]) && RM(b[0], b[1]) ? route(a, b, { noise: 8 }) : null; if (pts) layLine(pts, 1, S.ALLEY);\n        joined.push(g);\n      }\n      if (all.length >= 3) { let far = null; for (const x of all) for (const y of all) { const d = Math.abs(x.ci - y.ci) + Math.abs(x.cj - y.cj); if (!far || d > far[2]) far = [x, y, d]; }\n        const a = sqEdgeCell(far[0], 0, 1), b = sqEdgeCell(far[1], 0, -1); const pts = RM(a[0], a[1]) && RM(b[0], b[1]) ? route(a, b, { noise: 4 }) : null; if (pts) layLine(pts, 2, S.TRACK); }\n    },\n    cliff(D) {   // a street along the foot of a cliff and another along its rim, switchback stairs up the face, rooms cut into it\n      const q = D.sq; let s0 = null;\n      for (let i = q.i0 - 18; i <= q.i1 + 18; i++) for (let j = q.j0 - 18; j <= q.j1 + 18; j++) if (RM(i, j) && dcl[idx(i, j)] === 2 && !ST[idx(i, j)]) { const d = Math.abs(i - q.ci) + Math.abs(j - q.cj) + hAt(i, j) * 0.5; if (!s0 || d < s0[2]) s0 = [i, j, d]; }\n      if (!s0) { FORMS[ALT.find((x) => x !== 'cliff') || 'amph'](D); return; }\n      const link = route(sqEdgeCell(q, Math.sign(s0[0] - q.ci), s0[0] === q.ci ? Math.sign(s0[1] - q.cj) : 0), [s0[0], s0[1]]);\n      if (link) layLine(link, 2, S.SIDE);\n      const feet = [];\n      for (const [a, b] of DIRS) { const n = [s0[0] + a, s0[1] + b]; if (!RM(n[0], n[1]) || Math.abs(dcl[idx(n[0], n[1])] - 2) > 0) continue;\n        const pts = steer(n[0], n[1], a, b, 3 * N, (i, j) => 3 * Math.abs(dcl[idx(i, j)] - 2) + 0.4 * hAt(i, j), { w: 3, turn: 0.4 });\n        if (pts.length > 4) { const ln = layLine([[s0[0], s0[1]], ...pts], 3, S.MAIN); if (ln) { mains.push(ln); feet.push(pts); } } }\n      let flights = 0;\n      for (const L of feet) for (let s = 2; s < L.length; s++) {\n        const [ci, cj] = L[s], k = idx(ci, cj);\n        // the face beside the foot: which way the cliff is, and how high it stands\n        let face = null; for (const [a, b] of DIRS) { const i = ci + 2 * a, j = cj + 2 * b; if (inP(i, j) && cls[idx(i, j)] === 2 && hAt(i, j) >= hAt(ci, cj) + 3) face = [a, b]; }\n        if (!face) continue;\n        const [a, b] = face;\n        if (s % 5 === 0) caveSites.push({ at: [ci, cj], dir: [a, b] });\n        if (flights < (size === 'village' ? 1 : 2) && s % 11 === 6) {   // switchback flights up the face, a landing every 3 kubes of rise\n          const pts = [[ci, cj]]; let x = ci, y = cj, along = [b ? 1 : 0, a ? 1 : 0], dirA = 1, guard = 0, top = null;\n          while (guard++ < 14) {\n            for (let t = 0; t < 1; t++) { x += a; y += b; if (!okPlot(x, y)) break; pts.push([x, y]); }\n            for (let t = 0; t < 3; t++) { x += along[0] * dirA; y += along[1] * dirA; if (!okPlot(x, y)) break; pts.push([x, y]); }\n            dirA = -dirA;\n            const ahead = [x + a, y + b]; if (inP(ahead[0], ahead[1]) && RM(ahead[0], ahead[1]) && cls[idx(ahead[0], ahead[1])] < 2 && hAt(ahead[0], ahead[1]) >= hAt(ci, cj) + 3) { top = ahead; pts.push(ahead); break; }\n          }\n          if (top) { for (const [i, j] of pts) { const kk = idx(i, j); if (cls[kk] === 2) reachCost[kk] = Math.max(0, reachCost[kk]); } layLine(pts, 1, S.ALLEY, { cliff: true }); flights++;\n            const lv = hAt(top[0], top[1]); for (const sg of [1, -1]) { const d2 = [along[0] * sg, along[1] * sg]; const r2 = steer(top[0] + d2[0], top[1] + d2[1], d2[0], d2[1], 2 * N, (i, j) => 2 * Math.abs(hAt(i, j) - lv) + Math.abs(dcl[idx(i, j)] - 2), { w: 2, turn: 0.5 }); layLine([top, ...r2], 2, S.SIDE); } }\n        }\n      }\n      for (const L of feet) branches(L, 3, 2, S.SIDE, () => R(6, 12), (i, j) => -dcl[idx(i, j)] + 0.3 * hAt(i, j), { turn: 1.2 });\n    },\n  };\n  if (!V20) for (const D of districts) (FORMS[formUsed] || FORMS.amph)(D);\n  // ==== VERSION 20, CITY BLOCKS (artifact PETURaiWtrRMtCukcBrdCL, confirmed Oct 20 15:46 UTC) ==============================\n  // Every block four buildings, two by two, about square: two 6-wide buildings a row sharing a wall (a 7 and a 6 on the\n  // ground, 13 along), 7 deep, back to back (14) or with a 1-kube alley between the rows (15), or an alley between the pair\n  // instead (6 + 1 + 6, each its own walls); a block left open is a square (the core square, a city's market square, a\n  // joined district's). Bands of blocks run across the town, the core square's band in the middle; main streets 3 wide frame\n  // the core square both ways, the rest 2. The grid bends to the land: each band, either side of the main streets, steps\n  // along a kube to three to sit its blocks on the ground. Whole blocks are laid nearest the core first while the town is\n  // short of its share (cap = blocks; never fewer than two blocks and the square); at the edge, half blocks (a row of two)\n  // and lone buildings round it off. Each block stands on one level.\n  const blocks20 = [], places20 = [];\n  if (V20) {\n    const c0 = cores[0], DEP = TOWN20.depth, BWk = 13;\n    let ci = c0[0], cj = c0[1];\n    // (21: a plot too small to hold a band and a block column either side of the core is laid out from the corner that\n    // keeps the core square and a block each way on the most good ground: band 0 is rows ci-7..ci+6, band 1 runs to\n    // ci+24, band -1 from ci-24; column 0 is cj-6..cj+6, column 1 runs to cj+25 with its bend, column -1 from cj-24)\n    // (and a folded plot's rows are its face's, oLim: there the blocks keep to them, a band or two across, a row over the edge)\n    const pI0 = oLim ? Math.max(-N + 2, oLim[0]) : -N + 2, pI1 = oLim ? Math.min(N - 3, oLim[1]) : N - 3, pJ0 = -N + 2, pJ1 = N - 3;\n    if (V21 && (!(ci + 24 <= pI1 || ci - 24 >= pI0) || !(cj + 25 <= pJ1 || cj - 24 >= pJ0) || ci - 7 < pI0 || ci + 6 > pI1)) {\n      // each way: [lowest core, highest core, the rows (columns) it then covers]; a band (column) either side, else the core's alone\n      const waysOf = (lo, hi, ways, alone) => { const w = ways.map(([L, H]) => [lo + L, hi - H, -L, H]).filter((x) => x[0] <= x[1]); return w.length ? w : [[lo + alone[0], hi - alone[1], -alone[0], alone[1]]].filter((x) => x[0] <= x[1]); };\n      const wI = waysOf(pI0, pI1, [[7, 24], [24, 6]], [7, 6]), wJ = waysOf(pJ0, pJ1, [[6, 25], [24, 6]], [6, 6]);\n      let best = null;\n      for (const [iA, iB, i0r, i1r] of wI) for (const [jA, jB, j0r, j1r] of wJ) {\n        const ti = Math.max(iA, Math.min(iB, ci)), tj = Math.max(jA, Math.min(jB, cj));\n        let good = 0; for (let i = ti + i0r; i <= ti + i1r; i++) for (let j = tj + j0r; j <= tj + j1r; j++) if (okPlot(i, j) && cls[idx(i, j)] <= 1 && !wet[idx(i, j)]) good++;\n        const d0 = Math.abs(ti - ci) + Math.abs(tj - cj);\n        if (!best || good > best[0] || (good === best[0] && d0 < best[3])) best = [good, ti, tj, d0]; }\n      if (best) { ci = best[1]; cj = best[2]; } }\n    const landOK = (i, j) => okPlot(i, j) && cls[idx(i, j)] <= 1 && !wet[idx(i, j)] && !inBand(i, j);\n    const streetOK = (i, j) => okPlot(i, j) && !wet[idx(i, j)];\n    // the bands: [top row, depth, back alley?]; band 0 is the core square's (14 deep)\n    const bands = new Map(); bands.set(0, { r0: ci - 7, d: 14, alley: false });   // rows ci-7..ci+6; the main street ci+7..ci+9, a side street ci-9..ci-8\n    { let r0 = ci + 10; for (let b = 1; b <= 6; b++) { const alley = hash01(seed + '#ba' + b) < 0.5, d = alley ? 15 : 14; bands.set(b, { r0, d, alley }); r0 += d + 2; } }\n    { let r1 = ci - 10; for (let b = 1; b <= 6; b++) { const alley = hash01(seed + '#ba' + -b) < 0.5, d = alley ? 15 : 14, r0 = r1 - d + 1; bands.set(-b, { r0, d, alley }); r1 = r0 - 3; } }\n    // a band's block c: the core column cj-6..cj+6 (main streets cj-9..cj-7 and cj+7..cj+9), then every 15 kubes either side, stepped by the band's offset\n    const blockAt = (b, c, off) => { const B1 = bands.get(b);\n      const j0 = c === 0 ? cj - 6 : c > 0 ? cj + 10 + off + (c - 1) * (BWk + 2) : cj - 9 - off - (-c - 1) * (BWk + 2) - BWk + 1;\n      return { b, c, i0: B1.r0, i1: B1.r0 + B1.d - 1, j0, j1: j0 + BWk - 1, alley: B1.alley }; };\n    // the places of a block: [i0, j0, i1, j1, row, pos]; and its kind: 'back' (an alley between the rows), 'pair' (between the pair), 'b2b'\n    const placesOf = (bk) => { const kind = bk.alley ? 'back' : hash01(seed + '#bp' + bk.b + ':' + bk.c) < 0.5 ? 'pair' : 'b2b'; bk.kind = kind;\n      const rows = [[bk.i0, bk.i0 + DEP - 1], [bk.i1 - DEP + 1, bk.i1]], out = [];\n      rows.forEach(([a0, a1], r) => { if (kind === 'pair') { out.push([a0, bk.j0, a1, bk.j0 + 5, r, 0], [a0, bk.j0 + 7, a1, bk.j1, r, 1]); } else out.push([a0, bk.j0, a1, bk.j0 + 6, r, 0], [a0, bk.j0 + 7, a1, bk.j1, r, 1]); });\n      return out; };\n    const placeOK = ([a0, b0, a1, b1]) => { for (let i = a0; i <= a1; i++) for (let j = b0; j <= b1; j++) if (!landOK(i, j)) return false; let lo = 1e9, hi = -1e9; for (let i = a0; i <= a1; i++) for (let j = b0; j <= b1; j++) { const h = hAt(i, j); if (h < lo) lo = h; if (h > hi) hi = h; } return hi - lo <= 3; };\n    // (21: a ring cell past the plot's edge counts for nothing: the street there is simply not laid)\n    const ringOK = (bk) => { let bad = 0, n = 0; for (let i = bk.i0 - 2; i <= bk.i1 + 2; i++) for (let j = bk.j0 - 2; j <= bk.j1 + 2; j++) { if (i >= bk.i0 && i <= bk.i1 && j >= bk.j0 && j <= bk.j1) continue; if (V21 && !okPlot(i, j)) continue; n++; if (!streetOK(i, j)) bad++; } return bad <= n * 0.25; };\n    // the bend: each band's offset either side of the main streets, the one that sits most of its blocks on the ground\n    const offs = new Map();\n    for (const [b] of bands) for (const sg of [1, -1]) { let best = [0, -1];\n      for (let off = 0; off <= 3; off++) { let n2 = 0; for (let k = 1; k <= 6; k++) { const bk = blockAt(b, sg * k, off); if (bk.j0 < pJ0 || bk.j1 > pJ1) break; const ps = placesOf(bk); n2 += ps.filter(placeOK).length; } if (n2 > best[1]) best = [off, n2]; }\n      offs.set(b + ':' + sg, best[0]); }\n    const all = [];\n    for (const [b] of bands) for (let c = -6; c <= 6; c++) { const bk = blockAt(b, c, c === 0 ? 0 : offs.get(b + ':' + Math.sign(c)));\n      if (bk.i0 < pI0 || bk.i1 > pI1 || bk.j0 < pJ0 || bk.j1 > pJ1) continue;\n      bk.off = c === 0 ? 0 : offs.get(b + ':' + Math.sign(c)); bk.places = placesOf(bk); bk.ok = bk.places.map(placeOK); bk.ring = ringOK(bk); bk.dist = Math.abs((bk.i0 + bk.i1) / 2 - ci) + Math.abs((bk.j0 + bk.j1) / 2 - cj); all.push(bk); }\n    const core = all.find((x) => x.b === 0 && x.c === 0);\n    const adj = (x, y) => (x.b === y.b && Math.abs(x.c - y.c) === 1) || (x.c === y.c && Math.abs(x.b - y.b) === 1) || (Math.abs(x.b - y.b) === 1 && Math.abs(x.c - y.c) <= 1 && x.c !== 0 && y.c !== 0 && Math.sign(x.c) === Math.sign(y.c));\n    const cost = (x, n) => (BWk + 2) * (x.i1 - x.i0 + 3) * (n / 4);\n    const budget = target * (walled ? 0.84 : 0.97);\n    let got = core ? cost(core, 4) : 0;\n    if (core) { core.square = 'core'; blocks20.push(core); }\n    const cand = all.filter((x) => x !== core).sort((x, y) => x.dist - y.dist || x.b - y.b || x.c - y.c);\n    // whole blocks, nearest first, each touching one already laid\n    for (let pass = 0; pass < 3; pass++) for (const x of cand) { if (x.used || !(x.ok.every(Boolean) && x.ring)) continue;\n      const nFull = blocks20.filter((y) => !y.square).length;\n      if (got + cost(x, 4) > budget && nFull >= 2) continue;\n      if (!blocks20.some((y) => adj(x, y))) continue;\n      x.used = true; x.take = [true, true, true, true]; blocks20.push(x); got += cost(x, 4); }\n    // squares: a city's market square and each joined district's, an open block next to the core's\n    const sqWant = (size === 'city' ? 1 : 0);\n    for (let t = 0; t < sqWant; t++) { const x = blocks20.find((y) => !y.square && adj(y, core)); if (x) x.square = 'market'; }\n    // the edge: half blocks (a whole row of two) and lone buildings (cuts = half; a lone building at the edge)\n    for (const x of cand) { if (x.used || !x.ring) continue; if (!blocks20.some((y) => adj(x, y))) continue;\n      const row0 = x.ok[0] && x.ok[1], row1 = x.ok[2] && x.ok[3];\n      if (row0 || row1) { if (got + cost(x, 2) > budget) continue; x.used = true; x.take = row0 ? [true, true, false, false] : [false, false, true, true]; x.half = true; blocks20.push(x); got += cost(x, 2); continue; }\n      const k1 = x.ok.findIndex(Boolean); if (k1 >= 0 && got + cost(x, 1) <= budget) { x.used = true; x.take = x.ok.map((v, k) => k === k1); x.lone = true; blocks20.push(x); got += cost(x, 1); } }\n    // the squares and the landmark, in the core square\n    for (const x of blocks20) if (x.square) {\n      for (let i = x.i0; i <= x.i1; i++) for (let j = x.j0; j <= x.j1; j++) if (okPlot(i, j) && !wet[idx(i, j)]) { ST[idx(i, j)] = S.PLAZA; reachCost[idx(i, j)] = Math.max(0, reachCost[idx(i, j)]); }\n      const q = { i0: x.i0, j0: x.j0, i1: x.i1, j1: x.j1, s: Math.min(x.i1 - x.i0 + 1, BWk), kind: x.square, d: x.square === 'core' ? 0 : -1, ci: (x.i0 + x.i1) >> 1, cj: (x.j0 + x.j1) >> 1, block: x };\n      squares.push(q); if (x.square === 'core' || x.square === 'district') districts.push({ d: districts.length, core: [q.ci, q.cj], sq: q, name: '' }); }\n    if (!districts.length) { const q = { i0: ci - 2, j0: cj - 2, i1: ci + 2, j1: cj + 2, s: 5, kind: 'core', d: 0, ci, cj }; for (let i = q.i0; i <= q.i1; i++) for (let j = q.j0; j <= q.j1; j++) if (inP(i, j)) ST[idx(i, j)] = S.PLAZA; squares.push(q); districts.push({ d: 0, core: [ci, cj], sq: q, name: '' }); }\n    // (the landmark in the back of the core square, the service point before it: the square's middle is its open front)\n    if (core && N >= 9) { const LS = Math.min(SZ.lmk, 8), q = squares[0], i0 = q.i1 - LS, j0 = q.cj - (LS >> 1);\n      q.ci = q.i0 + 2; lmk = { i0, j0, w: LS, d: LS, form: F.form, side: [1, 0], sq: q, front: [i0 - 1, q.cj] };\n      for (let i = i0; i < i0 + LS; i++) for (let j = j0; j < j0 + LS; j++) ST[idx(i, j)] = S.LMK; }\n    // the streets round every block (2 wide; 3 for the main streets framing the core square), its alleys inside\n    const mainI = (i) => i >= ci + 7 && i <= ci + 9, mainJ = (j) => j >= cj + 7 && j <= cj + 9;   // (one main street each way past the core square, 3 wide)\n    for (const x of blocks20) {\n      for (let i = x.i0 - 3; i <= x.i1 + 3; i++) for (let j = x.j0 - 3; j <= x.j1 + 3; j++) {\n        if (!inP(i, j) || (i >= x.i0 && i <= x.i1 && j >= x.j0 && j <= x.j1)) continue;\n        const dI = i < x.i0 ? x.i0 - i : i > x.i1 ? i - x.i1 : 0, dJ = j < x.j0 ? x.j0 - j : j > x.j1 ? j - x.j1 : 0, mI = mainI(i), mJ = mainJ(j);\n        const wide = (dI && mI) || (dJ && mJ) || (dI && dJ && (mI || mJ));\n        const toMain = Math.abs(x.c) === 1 && dJ && ((x.c > 0 && j < x.j0) || (x.c < 0 && j > x.j1)) ? x.off : 0;\n        if (Math.max(dI, dJ - toMain) > (wide ? 3 : 2) || !streetOK(i, j)) continue;\n        const k = idx(i, j); if (ST[k] === S.PLAZA || ST[k] === S.LMK) continue;\n        const c2 = wide ? S.MAIN : S.SIDE; if (ST[k] !== S.MAIN) ST[k] = c2; reachCost[k] = Math.max(0, reachCost[k]); }\n      if (!x.square) { if (x.kind === 'back') for (let j = x.j0; j <= x.j1; j++) { const k = idx(x.i0 + DEP, j); if (streetOK(x.i0 + DEP, j)) ST[k] = S.ALLEY; }\n        if (x.kind === 'pair') for (let i = x.i0; i <= x.i1; i++) { const k = idx(i, x.j0 + 6); if (streetOK(i, x.j0 + 6)) ST[k] = S.ALLEY; } }\n      if (x.square) continue;\n      x.places.forEach((pl, k) => { if (!x.take[k]) return; for (let i = pl[0]; i <= pl[2]; i++) for (let j = pl[1]; j <= pl[3]; j++) reachCost[idx(i, j)] = Math.max(0, reachCost[idx(i, j)]); places20.push({ x, pl, k }); });\n    }\n    // the main streets as lanes (the lamp posts along them)\n    const iLo = Math.min(...blocks20.map((x) => x.i0)) - 3, iHi = Math.max(...blocks20.map((x) => x.i1)) + 3, jLo = Math.min(...blocks20.map((x) => x.j0)) - 3, jHi = Math.max(...blocks20.map((x) => x.j1)) + 3;\n    for (const r of [ci + 8]) { const pts = []; for (let j = jLo; j <= jHi; j++) if (inP(r, j) && ST[idx(r, j)] === S.MAIN) pts.push([r, j]); else if (pts.length > 3) { lanes.push({ cls: S.MAIN, w: 3, pts: pts.splice(0), di: 0, dj: 1 }); mains.push(lanes[lanes.length - 1]); } else pts.length = 0; if (pts.length > 3) { lanes.push({ cls: S.MAIN, w: 3, pts, di: 0, dj: 1 }); mains.push(lanes[lanes.length - 1]); } }\n    for (const cc of [cj + 8]) { const pts = []; for (let i = iLo; i <= iHi; i++) if (inP(i, cc) && ST[idx(i, cc)] === S.MAIN) pts.push([i, cc]); else if (pts.length > 3) { lanes.push({ cls: S.MAIN, w: 3, pts: pts.splice(0), di: 1, dj: 0 }); mains.push(lanes[lanes.length - 1]); } else pts.length = 0; if (pts.length > 3) { lanes.push({ cls: S.MAIN, w: 3, pts, di: 1, dj: 0 }); mains.push(lanes[lanes.length - 1]); } }\n  }\n  // A MAIN STREET THAT FOUND NO BRANCHES gets side lanes every 6 to 10 kubes (growth: core, main street, side lanes)\n  for (const ln of mains.slice()) { if (ln.pts.length < 12 || (V20 && formUsed === 'grid')) continue; branches(ln.pts, 3, 2, S.SIDE, () => R(Math.max(4, N >> 2), N), (i, j) => 0.4 * Math.abs(hAt(i, j) - hAt(ln.pts[0][0], ln.pts[0][1])), { turn: 0.9 }); }\n  // the street network's distance from the squares (walking), for the districts, the junctions and the density\n  const streetDist = () => { const d = new Int16Array(WW).fill(-1), q2 = [];\n    for (const sq of squares) for (let i = sq.i0; i <= sq.i1; i++) for (let j = sq.j0; j <= sq.j1; j++) { const k = idx(i, j); if (d[k] < 0) { d[k] = 0; q2.push(k); } }\n    for (let h2 = 0; h2 < q2.length; h2++) { const c = q2[h2], ci = ((c / W) | 0) - N, cj = (c % W) - N;\n      for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (!inP(ni, nj)) continue; const n = idx(ni, nj); if (d[n] >= 0 || !STREETY.has(ST[n])) continue; d[n] = d[c] + 1; q2.push(n); } }\n    return d; };\n  // NEW DISTRICTS where a street reaches good ground 24 or more kubes from the last square (towns and cities)\n  { const maxD = V20 && formUsed === 'grid' ? 0 : size === 'city' ? CITY19.maxDistricts : size === 'town' ? 2 : 1;   // (20: a grid's blocks are its growth)\n    for (let tries = 0; tries < 6 && districts.length < maxD; tries++) {\n      const d = streetDist(); let best = null;\n      for (const ln of lanes) { if (ln.cls !== S.MAIN && ln.cls !== S.SIDE) continue; const e = ln.pts[ln.pts.length - 1], k = idx(e[0], e[1]); if (d[k] < CITY19.districtApart) continue;\n        if (squares.some((q) => Math.abs(q.ci - e[0]) + Math.abs(q.cj - e[1]) < CITY19.districtApart)) continue;\n        let room = 0; for (let a = -4; a <= 4; a++) for (let b = -4; b <= 4; b++) if (RM(e[0] + a, e[1] + b) && !ST[idx(e[0] + a, e[1] + b)]) room++;\n        if (room >= 40 && (!best || d[k] > best[1])) best = [e, d[k]]; }\n      if (!best) break;\n      const sq = square(best[0][0], best[0][1], size === 'city' ? 5 : 4, 'district', districts.length);\n      if (!sq) { reachCost[idx(best[0][0], best[0][1])] = reachCost[idx(best[0][0], best[0][1])]; break; }\n      const Dn = { d: districts.length, core: [sq.ci, sq.cj], sq, name: '', grown: true }; districts.push(Dn);\n      for (const [a, b] of DIRS) { const e2 = sqEdgeCell(sq, a, b); if (!RM(e2[0], e2[1]) || ST[idx(e2[0], e2[1])]) continue; const pts = steer(e2[0], e2[1], a, b, R(8, 16), (i, j) => 0.5 * Math.abs(hAt(i, j) - hAt(sq.ci, sq.cj)), { w: 2, turn: 0.8 }); layLine([[e2[0] - a, e2[1] - b], ...pts], 2, S.SIDE); }\n    } }\n  // EVERY DISTRICT JOINED by a street to the first (towns within 16 kubes join into one city)\n  for (const D of districts.slice(1)) {\n    const d = streetDist(), reach0 = (() => { const seen2 = new Uint8Array(WW), q2 = []; const s0 = districts[0].sq; for (let i = s0.i0; i <= s0.i1; i++) for (let j = s0.j0; j <= s0.j1; j++) { seen2[idx(i, j)] = 1; q2.push(idx(i, j)); }\n      for (let h2 = 0; h2 < q2.length; h2++) { const c = q2[h2], ci = ((c / W) | 0) - N, cj = (c % W) - N; for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (!inP(ni, nj)) continue; const n = idx(ni, nj); if (seen2[n] || !STREETY.has(ST[n])) continue; seen2[n] = 1; q2.push(n); } } return seen2; })();\n    if (reach0[idx(D.sq.ci, D.sq.cj)]) continue;\n    const a = sqEdgeCell(D.sq, Math.sign(districts[0].sq.ci - D.sq.ci), districts[0].sq.ci === D.sq.ci ? Math.sign(districts[0].sq.cj - D.sq.cj) : 0);\n    const b = sqEdgeCell(districts[0].sq, Math.sign(D.sq.ci - districts[0].sq.ci), D.sq.ci === districts[0].sq.ci ? Math.sign(D.sq.cj - districts[0].sq.cj) : 0);\n    const pts = route(a, b); if (pts) { const ln = layLine(pts, 2, S.SIDE); if (ln) linkLanes.push(ln); }\n    void d;\n  }\n  // A STREET OVER THE EDGE (edge = walk): where the town reaches past it, one street at least carries straight across\n  if (edge) {\n    let crossing = false;\n    for (let i = -N; i < N && !crossing; i++) for (let j = -N; j < N; j++) { if (qOf(i, j) !== sE - 1) continue; const a2 = sAx === 0 ? [sE, j] : [i, sE]; if (STREETY.has(ST[idx(i, j)]) && inP(a2[0], a2[1]) && STREETY.has(ST[idx(a2[0], a2[1])])) { crossing = true; break; } }\n    if (!crossing) {\n      let far = null; for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { if (!RM(i, j) || partOf(i, j) !== (partOf(districts[0].sq.ci, districts[0].sq.cj) ^ 1) || ST[idx(i, j)]) continue; const t = Math.abs(qOf(i, j) - sE); if (t >= 3 && t <= 9 && (!far || t < far[2] || (t === far[2] && Math.abs((sAx === 0 ? j : i) - (sAx === 0 ? districts[0].sq.cj : districts[0].sq.ci)) < far[3]))) far = [i, j, t, Math.abs((sAx === 0 ? j : i) - (sAx === 0 ? districts[0].sq.cj : districts[0].sq.ci))]; }\n      if (far) { const near = sqEdgeCell(districts[0].sq, sAx === 0 ? sDir * (partOf(districts[0].sq.ci, districts[0].sq.cj) ? -1 : 1) : 0, sAx === 1 ? sDir * (partOf(districts[0].sq.ci, districts[0].sq.cj) ? -1 : 1) : 0);\n        const pts = route(near, [far[0], far[1]]); if (pts) { const ln = layLine(pts, 2, S.SIDE); if (ln) linkLanes.push(ln); } }\n    }\n  }\n  // JUNCTION SQUARES, about every 24 kubes of street (squares = rhythm): a 4 x 4 where three streets meet, far enough from any square\n  if (!V20) { const d = streetDist(), want = (SZ.plazas | 0) + districts.length; let made = 0;\n    const cand = [];\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const k = idx(i, j); if (!isLane(ST[k]) || d[k] < CITY19.junctionEvery - 4) continue;\n      let n = 0; for (const [a, b] of D4) if (isLane(st(i + a, j + b)) || st(i + a, j + b) === S.PLAZA) n++; if (n >= 3) cand.push([i, j, d[k]]); }\n    cand.sort((x, y) => y[2] - x[2] || x[0] - y[0] || x[1] - y[1]);\n    for (const [i, j] of cand) { if (made >= want) break; if (squares.some((q) => Math.abs(q.ci - i) + Math.abs(q.cj - j) < CITY19.junctionEvery - 4)) continue; if (square(i, j, CITY19.junctionSquare, 'junction', -1)) made++; } }\n  // THE EDGE WALK: the two columns either side of the edge, where the town reaches them, are paving (never a building)\n  if (edge) for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const k = idx(i, j); if (!inBand(i, j) || !RM(i, j) || ST[k] || cls[k] > 1) continue;\n    let near = false; for (let t = -4; t <= 4 && !near; t++) { const a = sAx === 0 ? i : i + t, b = sAx === 0 ? j + t : j; if (inP(a, b) && inBand(a, b) && STREETY.has(ST[idx(a, b)])) near = true; }\n    if (near) ST[k] = S.EDGE; }\n\n  // ---- 5. THE BLOCKS: lots along every street, the kinds first, density falling off from each square ----------------\n  const isStreet = (c) => c === S.ALLEY || c === S.SIDE || c === S.MAIN || c === S.PLAZA || c === S.POM || c === S.EDGE || c === S.WALK;\n  const RANK = { [S.PLAZA]: 5, [S.MAIN]: 4, [S.SIDE]: 3, [S.ALLEY]: V20 ? 0 : 2, [S.POM]: 1, [S.TRACK]: 1 };   // (20: a 1-kube alley is a back alley, nobody's front)\n  const free = (i, j) => okPlot(i, j) && RM(i, j) && ST[idx(i, j)] === S.NONE && owner[idx(i, j)] < 0 && !inBand(i, j) && cls[idx(i, j)] <= 1 && !wet[idx(i, j)];\n  // ALLEYS through any block too deep for a row of houses each side (version 18's rule, in the reach)\n  for (let pass = 0; pass < (V20 ? 0 : 10); 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 (!free(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)]; if (free(i, j) && d0 > (V20 ? 2 * TOWN20.depth - 4 : 8) && (!deep || d0 > deep[2])) deep = [i, j, d0]; }\n    if (!deep) break;\n    const along = rng() < 0.5 ? [1, 0] : [0, 1];\n    for (const sg of [1, -1]) for (let t = sg > 0 ? 0 : 1; t < W; t++) { const i = deep[0] + along[0] * t * sg, j = deep[1] + along[1] * t * sg; if (!free(i, j)) break; ST[idx(i, j)] = S.ALLEY; }\n  }\n  const sd0 = streetDist();\n  const hamlet = formUsed === 'hamlets', dense = formUsed === 'medina';\n  // density by walking distance from the nearest square (gradient): 1 at a core, 0.6 in the middle, 0.3 at the edge\n  const densAt = (i, j) => { if (hamlet) return 0.25; let best = 99; for (const [a, b] of [[0, 0], ...D4]) { const ni = i + a, nj = j + b; if (!inP(ni, nj)) continue; const d = sd0[idx(ni, nj)]; if (d >= 0 && d < best) best = d; }\n    const base = best <= 8 ? 1 : best <= 20 ? 0.62 : 0.3; return dense ? Math.max(0.85, base) : base; };\n  const buildings = [];\n  const dirSide = (a, b) => (a < 0 ? 0 : a > 0 ? 1 : b < 0 ? 2 : 3);   // the side of the building its street is on\n  // a lot of `w` along a street on side (a, b) of the cell (fi0, fj0), `dd` deep: its rectangle, or null where it does not fit\n  const lotRect = (fi0, fj0, a, b, w, dd, shift) => {\n    const ua = a !== 0 ? 0 : 1, ub = a !== 0 ? 1 : 0, s0 = shift || 0;\n    for (let t = 0; t < w; t++) for (let u = 0; u < dd; u++) if (!free(fi0 + ua * (t + s0) - a * u, fj0 + ub * (t + s0) - b * u)) return null;\n    for (let t = 0; t < w; t++) { const i = fi0 + ua * (t + s0), j = fj0 + ub * (t + s0); if (!(RANK[st(i + a, j + b)] > 0) && !(t > 0 && t < w - 1)) return null; }\n    const ia = [fi0 + ua * s0, fi0 + ua * (w - 1 + s0), fi0 + ua * s0 - a * (dd - 1)], ja = [fj0 + ub * s0, fj0 + ub * (w - 1 + s0), fj0 + ub * s0 - b * (dd - 1)];\n    return { i0: Math.min(...ia), j0: Math.min(...ja), i1: Math.max(...ia), j1: Math.max(...ja) };\n  };\n  const addB = (r, a, b, rank, extra) => { const B = { id: buildings.length, i0: r.i0, j0: r.j0, w: r.i1 - r.i0 + 1, d: r.j1 - r.j0 + 1, front: dirSide(a, b), rank, kind: 'home', ...(extra || {}) };\n    if (V20 && (B.kind === 'watch' || B.pile)) B.ownWalls = true;\n    for (let i = B.i0; i < B.i0 + B.w; i++) for (let j = B.j0; j < B.j0 + B.d; j++) owner[idx(i, j)] = B.id; buildings.push(B); return B; };\n  // every free cell with a street beside it, the busiest streets first\n  const frontsOf = () => { const out = []; for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { if (!free(i, j)) continue; let best = null;\n    D4.forEach(([a, b], dI) => { const c = st(i + a, j + b), r = RANK[c] || 0; if (r && (!best || r > best.r)) best = { r, dI, a, b }; }); if (best) out.push([i, j, best.r, best.dI, best.a, best.b]); }\n    out.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])); return out; };\n  // THE KINDS FIRST (the eight building kinds): each on the street it belongs to, at the size it asks for\n  const placeKind = (kind, want) => {\n    const [w0, d0] = V20 ? kindLot20(kind) : KIND_LOT[kind], fr = frontsOf();\n    const q0 = districts[0].sq, gateish = (i, j) => { let m = 0; for (const D of districts) m = Math.max(m, Math.abs(D.sq.ci - i) + Math.abs(D.sq.cj - j)); return m; };\n    const score = (f) => { const [i, j, r] = f, d = sd0[idx(i + f[4], j + f[5])];\n      if (kind === 'market') { const dq = Math.max(0, q0.i0 - i, i - q0.i1) + Math.max(0, q0.j0 - j, j - q0.j1); return dq <= 8 && r >= 3 ? dq * 3 - r - (st(i + f[4], j + f[5]) === S.PLAZA ? 10 : 0) : 1e9; }\n      if (kind === 'inn') return d >= 0 && d <= 12 ? d - r : 1e9;\n      if (kind === 'store') return hasWater && dw[idx(i, j)] <= 4 ? dw[idx(i, j)] : -gateish(i, j) * 0.5 + 40;\n      if (kind === 'workshop' || kind === 'forge') return d >= 0 ? -d - r * 0.5 + (kind === 'forge' && buildings.some((B) => B.kind === 'workshop' && Math.abs(B.i0 - i) + Math.abs(B.j0 - j) < 14) ? -20 : 0) : 1e9;\n      if (kind === 'watch') return d >= 0 ? -d * 1.5 : 1e9;\n      return 0; };\n    const ranked = fr.map((f) => [f, score(f)]).filter((x) => x[1] < 1e8).sort((x, y) => x[1] - y[1]);\n    const wLo = V20 ? (kind === 'inn' ? TOWN20.front + 1 : w0) : Math.max(4, w0 - 2), dLo = V20 ? Math.min(d0, TOWN20.depth) : Math.max(5, d0 - 3);\n    for (let w = w0; w >= wLo; w--) for (let dd = d0; dd >= dLo; dd--) for (const [f] of ranked.slice(0, 80)) {\n      const [fi0, fj0, r, , a, b] = f;\n      for (const sh of [0, -1, -2, 1 - w]) { const rc = lotRect(fi0, fj0, a, b, w, dd, sh); if (!rc) continue; const B = addB(rc, a, b, r, { kind, want });\n        // (20) the workshop's yard: 4 kubes behind it, its width, where the ground is free\n        if (V20 && kind === 'workshop') { const cells = []; let ok = true;\n          const bi = -a, bj = -b, back0 = a > 0 ? rc.i0 : a < 0 ? rc.i1 : b > 0 ? rc.j0 : rc.j1;\n          for (let t = 0; t < (a ? rc.j1 - rc.j0 + 1 : rc.i1 - rc.i0 + 1) && ok; t++) for (let u = 1; u <= 4; u++) {\n            const ci = a ? back0 + bi * u : rc.i0 + t, cj = a ? rc.j0 + t : back0 + bj * u;\n            if (!free(ci, cj)) { ok = false; break; } cells.push([ci, cj]); }\n          if (ok && cells.length) { for (const [ci, cj] of cells) ST[idx(ci, cj)] = S.YARD; B.yard = cells; B.yardBack = back0; B.yardDir = [bi, bj]; } }\n        return B; }\n    }\n    return null;\n  };\n  // version 20's kind lots: the module front and a kube for the second wall (watch posts have their own walls, 5 x 5)\n  const kindLot20 = (kind) => { const [f0, d0, n0] = KIND_LOT20[kind]; const f = kind === 'inn' ? TOWN20.front + Math.floor(rng() * 3) : f0; return [kind === 'watch' ? f : f + 1, d0, n0]; };\n  const kindsWanted = V20 && size !== 'city' && target < 900 ? ['workshop', 'inn', 'store'] : KINDS_BY_SIZE[size] || [];\n  if (!V20) for (const kd of kindsWanted) placeKind(kd);\n  // PLATFORM HOUSES at the piers' ends, on piles over the water\n  for (const pr of piers) { const [a, b] = pr.dir, i0 = pr.end[0] + (a < 0 ? -3 : 0) + (a === 0 ? -1 : 0), j0 = pr.end[1] + (b < 0 ? -3 : 0) + (b === 0 ? -1 : 0);\n    let ok = true; for (let i = i0; i < i0 + 4 && ok; i++) for (let j = j0; j < j0 + 4; j++) if (!okPlot(i, j) || !wet[idx(i, j)] || ST[idx(i, j)] || owner[idx(i, j)] >= 0 || inBand(i, j)) { ok = false; break; }\n    if (ok) addB({ i0, j0, i1: i0 + 3, j1: j0 + 3 }, -a, -b, 2, { pile: true }); }\n  // VERSION 20, THE BLOCKS' BUILDINGS: four places a block; the kinds nearest the core square (the market hall a row of two\n  // facing it, the rest a place each, a kind a block); each building's door on the wider of its streets (doors = main);\n  // the second of a row sharing the first's wall. Watch towers (5 storeys) stand alone at the town's edge.\n  const widthOut = (i, j, a, b) => { let n = 0; for (let t = 1; t <= 4; t++) { const c = st(i + a * t, j + b * t); if (c === S.MAIN || c === S.SIDE || c === S.PLAZA || c === S.EDGE) n++; else break; } return n; };\n  const doorSide20 = (r) => { const sides = [[-1, 0, r.i0, (r.j0 + r.j1) >> 1], [1, 0, r.i1, (r.j0 + r.j1) >> 1], [0, -1, (r.i0 + r.i1) >> 1, r.j0], [0, 1, (r.i0 + r.i1) >> 1, r.j1]];\n    let best = null; for (const [a, b, i, j] of sides) { const w = widthOut(i, j, a, b) + (st(i + a, j + b) === S.PLAZA ? 0.5 : 0) + hash01(seed + '#ds' + i + ',' + j) * 0.1; if (w >= 1 && (!best || w > best[2])) best = [a, b, w]; } return best; };\n  if (V20) {\n    const byBlock = new Map(); for (const P of places20) { if (!byBlock.has(P.x)) byBlock.set(P.x, []); byBlock.get(P.x).push(P); }\n    const blist = [...byBlock.keys()].sort((x, y) => x.dist - y.dist);\n    const want = kindsWanted.filter((k) => k !== 'watch'), kindAt = new Map(), mergeAt = new Set();\n    if (want.includes('market')) for (const x of blist) { if (x.kind === 'pair' || x.lone) continue; const ps = byBlock.get(x);\n      const r = [0, 1].find((rr) => ps.filter((P) => P.pl[4] === rr).length === 2); if (r == null) continue;\n      const two = ps.filter((P) => P.pl[4] === r); kindAt.set(two[0], 'market'); mergeAt.add(two[1]); x.hasKind = true; break; }\n    for (const kd of want.filter((k) => k !== 'market')) { const x = blist.find((y) => !y.hasKind); if (!x) break; const P = byBlock.get(x).find((Q) => !kindAt.has(Q) && !mergeAt.has(Q)); if (!P) continue; kindAt.set(P, kd); x.hasKind = true; }\n    for (const x of blist) { const ps = byBlock.get(x).slice().sort((P, Q) => P.pl[4] - Q.pl[4] || P.pl[5] - Q.pl[5]); let prev = null;\n      for (const P of ps) { if (mergeAt.has(P)) continue;\n        const kd = kindAt.get(P) || 'home', [a0, b0, a1, b1, row, pos] = P.pl;\n        const rect = kd === 'market' ? { i0: a0, j0: x.j0, i1: a1, j1: x.j1 } : { i0: a0, j0: b0, i1: a1, j1: b1 };\n        const ds = doorSide20(rect); if (!ds) continue;\n        const leanOn = pos === 1 && prev && prev.row === row && x.kind !== 'pair' && prev.B.kind !== 'market' && kd !== 'market' ? prev.B : null;\n        const oi = ds[0] < 0 ? rect.i0 - 1 : ds[0] > 0 ? rect.i1 + 1 : (rect.i0 + rect.i1) >> 1, oj = ds[1] < 0 ? rect.j0 - 1 : ds[1] > 0 ? rect.j1 + 1 : (rect.j0 + rect.j1) >> 1;\n        const B = addB(rect, ds[0], ds[1], RANK[st(oi, oj)] || 3,\n          { kind: kd, lean: leanOn ? leanOn.id : null, leanSide0: leanOn ? 2 : null, block20: x, cornerLot: true, ...(kd === 'market' ? { ownWalls: true } : {}) });\n        prev = { B, row }; } }\n    // the watch towers: alone, 5 x 5, outside the town's edge street, as far from the core and each other as can be\n    const nW = kindsWanted.filter((k) => k === 'watch').length, towers = [];\n    for (let t = 0; t < nW; t++) { let best = null;\n      for (let i = -N + 3; i < N - 8; i++) for (let j = -N + 3; j < N - 8; j++) {\n        let ok = true; for (let a = 0; a < 5 && ok; a++) for (let b = 0; b < 5; b++) { const ii = i + a, jj = j + b; if (!okPlot(ii, jj) || cls[idx(ii, jj)] > 1 || wet[idx(ii, jj)] || inBand(ii, jj) || ST[idx(ii, jj)] !== S.NONE || owner[idx(ii, jj)] >= 0) { ok = false; break; } }\n        if (!ok) continue;\n        const ds = doorSide20({ i0: i, j0: j, i1: i + 4, j1: j + 4 }); if (!ds || ds[2] < 2) continue;\n        const sc = Math.abs(i + 2 - cores[0][0]) + Math.abs(j + 2 - cores[0][1]) + Math.min(99, ...towers.map((T2) => 2 * (Math.abs(T2.i0 - i) + Math.abs(T2.j0 - j))));\n        if (!best || sc > best[0]) best = [sc, i, j, ds]; }\n      if (!best) break;\n      const [, i, j, ds] = best; for (let a = 0; a < 5; a++) for (let b = 0; b < 5; b++) reachCost[idx(i + a, j + b)] = Math.max(0, reachCost[idx(i + a, j + b)]);\n      towers.push(addB({ i0: i, j0: j, i1: i + 4, j1: j + 4 }, ds[0], ds[1], 3, { kind: 'watch' })); }\n  }\n  // THE REST: narrow plots shoulder to shoulder along every street (version 18's grammar), deeper and taller near a square\n  if (!V20) for (const [fi0, fj0, r, , a, b] of frontsOf()) {\n    if (!free(fi0, fj0)) continue;\n    const dn = densAt(fi0 + a, fj0 + b);\n    if (hamlet && !squares.some((q) => q.kind === 'green' || q.kind === 'core' || q.kind === 'district' ? Math.max(q.i0 - fi0, fi0 - q.i1, q.j0 - fj0, fj0 - q.j1) <= 7 : false)) continue;\n    if (dn < 0.5 && rng() > dn + 0.35) continue;                                         // the edge: gaps, gardens between\n    const ua = a !== 0 ? 0 : 1, ub = a !== 0 ? 1 : 0;\n    let avail = 0; 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 < 3) continue;\n    let w = dn >= 0.9 ? R(4, 6) : dn >= 0.6 ? R(4, 7) : R(4, 5);\n    if (avail - w > 0 && avail - w < 4) w = avail - w + w <= 7 ? avail : Math.max(4, avail - 4);\n    w = Math.min(w, avail); if (w < 3) continue;\n    const dt = dn >= 0.9 ? R(6, 8) : dn >= 0.6 ? R(5, 7) : R(4, 5);\n    let dd = 0; 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 < 3 || (dd < 4 && w > 4)) continue;\n    const rc = lotRect(fi0, fj0, a, b, w, dd, 0); if (!rc) continue;\n    const B = addB(rc, a, b, r, { dens: dn });\n    // a garden behind a house at the edge (1 to 2 storeys with gardens)\n    if (dn < 0.5) { const bi = -a, bj = -b; for (let t = 0; t < w; t++) for (let u = dd; u < dd + 2; u++) { const i = fi0 + ua * t + bi * u, j = fj0 + ub * t + bj * u; if (free(i, j) && rng() < 0.8) ST[idx(i, j)] = S.GARDEN; } }\n    void B;\n  }\n  // L-SHAPES: a wing behind a building, into free ground at its back (the core and the middle)\n  for (const B of buildings.slice()) {\n    if (V20 || B.kind !== 'home' || B.pile || (B.dens || 1) < 0.6 || 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(3, 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 < 3) 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, kind: 'home' };\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: free ground enclosed inside a block (version 18's), reached through an arch; free ground that runs out to the\n  // town's edge is the land's own, and stays as it was\n  const yards = [], passages = [];\n  // (20) a house's ground floor with an arch through it: its inside, less the stair well and the arch's run\n  const archCost20 = (B) => { const along = B.front < 2 ? B.d : B.w, deep = B.front < 2 ? B.w : B.d, iw = along - (B.lean != null ? 1 : 2), id = deep - 2; return iw * id - TOWN20.well * TOWN20.well - id; };\n  { const seen = new Uint8Array(WW);\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) {\n      if (!free(i, j) || seen[idx(i, j)]) continue;\n      const cells = [], q = [[i, j]]; seen[idx(i, j)] = 1; let open = false;\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 (!inP(ni, nj) || !RM(ni, nj) || inBand(ni, nj)) { open = true; continue; }\n        const n = idx(ni, nj); if (ST[n] === S.NONE && owner[n] < 0 && !free(ni, nj)) open = true; if (free(ni, nj) && !seen[n]) { seen[n] = 1; q.push([ni, nj]); } } }\n      if (open || cells.length > (V20 ? 140 : 60)) continue;\n      yards.push(cells);\n    } }\n  for (const cells of yards) {\n    for (const [ci, cj] of cells) ST[idx(ci, cj)] = S.YARD;\n    const reach = cells.some(([ci, cj]) => D4.some(([a, b]) => isStreet(st(ci + a, cj + b))));\n    if (reach && (cells.length < 6 || rng() < 0.35)) continue;\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.passage || B.kind !== 'home' || B.pile || (V20 && archCost20(B) < TOWN20.minFloor)) continue;   // (20: an arch only where the ground floor keeps 15 after it and the stair)\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;\n        const run = []; 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)] = S.PASS;\n        B.passage = run; passages.push({ b: o2, run }); done = true; break;\n      }\n    }\n    if (!done && !reach) { for (const [ci, cj] of cells) ST[idx(ci, cj)] = S.GARDEN; cells.garden = true; }\n  }\n  // ---- 6. THE CAP (cap = built): streets, squares, buildings and courtyards within the town's share of the 10% ----\n  const builtAt = (k) => (ST[k] !== S.NONE && ST[k] !== S.FIELD && ST[k] !== S.NAT) || owner[k] >= 0;\n  const countBuilt = () => { let n = 0; for (let k = 0; k < WW; k++) if (builtAt(k)) n++; return n; };\n  if (!V20) { let n = countBuilt(); const target0 = target, targetW = walled ? Math.round(target * 0.76) : target;   // (a wall round the town counts too)\n    { const target = targetW;\n    if (n > target) {\n      // From the outside in, by what it cost the reach to get there: the farthest street ends that front nothing are cut\n      // back a cell at a time, and when none is left, the farthest house goes, and its street end after it.\n      const cover = new Int16Array(WW), ends = [];\n      for (const L of lanes) {\n        const offs = L.w === 3 ? [-1, 0, 1] : L.w === 2 ? [0, 1] : [0];\n        L.cellsAt = L.pts.map((pt, t) => { const out = new Set(), dirs = [];\n          if (t + 1 < L.pts.length) dirs.push([L.pts[t + 1][0] - pt[0], L.pts[t + 1][1] - pt[1]]); if (t > 0) dirs.push([pt[0] - L.pts[t - 1][0], pt[1] - L.pts[t - 1][1]]);\n          for (const [a, b] of dirs) { const pi = b !== 0 ? 1 : 0, pj = a !== 0 ? 1 : 0; for (const oo of offs) { const i = pt[0] + oo * pi, j = pt[1] + oo * pj; if (inP(i, j) && isLane(ST[idx(i, j)])) out.add(idx(i, j)); } }\n          for (const k of out) cover[k]++; return [...out]; });\n        L.len = L.pts.length;\n      }\n      const fronts = (k) => { const ci = ((k / W) | 0) - N, cj = (k % W) - N; for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (inP(ni, nj) && owner[idx(ni, nj)] >= 0 && !buildings[owner[idx(ni, nj)]].dead) return true; } return false; };\n      const keepL = new Set(mains), linkL = new Set(linkLanes); let mainsToo = false;\n      const prune = () => { let cut = 0;\n        for (let changed = true; changed && n > target;) { changed = false;\n          const cand = lanes.filter((L) => L.len > 1 && !linkL.has(L) && (mainsToo || !keepL.has(L))).map((L) => { const e = L.pts[L.len - 1]; return [L, reachCost[idx(e[0], e[1])]]; }).sort((x, y) => y[1] - x[1]);\n          for (const [L] of cand) { const cells = L.cellsAt[L.len - 1];\n            if (cells.some((k) => cover[k] === 1 && fronts(k))) continue;\n            // (only an end: the cell it would cut must not be another lane's way through)\n            for (const k of cells) { cover[k]--; if (cover[k] <= 0 && isLane(ST[k])) { ST[k] = S.NONE; n--; } }\n            L.len--; cut++; changed = true; if (n <= target) break; } }\n        return cut; };\n      prune();\n      const order = buildings.filter((B) => B.front >= 0 && B.kind === 'home').map((B) => [B, B.door ? reachCost[idx(B.door[0], B.door[1])] : V20 ? reachCost[idx(B.i0 + (B.w >> 1), B.j0 + (B.d >> 1))] : 0]).sort((x, y) => y[1] - x[1]);   // (20: the farthest first)\n      const leanersOf = (B) => { const out = []; const q = [B.id]; while (q.length) { const id = q.pop(); for (const x of buildings) if (x.lean === id && !x.dead && !out.includes(x)) { out.push(x); q.push(x.id); } } return out; };   // (20)\n      for (const [B] of order) { if (n <= target) break; if (B.dead) continue;\n        for (const W2 of [B, ...buildings.filter((x) => x.wingOf === B.id), ...(V20 ? leanersOf(B) : [])]) { if (W2.dead) continue; W2.dead = true; for (let i = W2.i0; i < W2.i0 + W2.w; i++) for (let j = W2.j0; j < W2.j0 + W2.d; j++) { const k = idx(i, j); if (owner[k] === W2.id) { owner[k] = -1; if (ST[k] === S.PASS) ST[k] = S.NONE; n--; } } }\n        // its garden goes back to the land with it\n        for (let i = B.i0 - 3; i < B.i0 + B.w + 3; i++) for (let j = B.j0 - 3; j < B.j0 + B.d + 3; j++) if (inP(i, j) && ST[idx(i, j)] === S.GARDEN && !D4.some(([a, b]) => inP(i + a, j + b) && owner[idx(i + a, j + b)] >= 0 && !buildings[owner[idx(i + a, j + b)]].dead)) { ST[idx(i, j)] = S.NONE; n--; }\n        prune();\n      }\n      if (n > target) { mainsToo = true; prune(); }\n      for (const L of lanes) { L.pts.length = Math.max(1, L.len); delete L.cellsAt; }\n      for (let k = lanes.length - 1; k >= 0; k--) if (lanes[k].pts.length < 2) lanes.splice(k, 1);\n      for (let k = mains.length - 1; k >= 0; k--) if (mains[k].pts.length < 2) mains.splice(k, 1);\n    } }\n    void target0;\n    // the dead buildings leave the list (ids renumbered), every owner mark following\n    const live = buildings.filter((B) => !B.dead), remap = new Map(); live.forEach((B, k2) => { remap.set(B.id, k2); });\n    for (let k = 0; k < WW; k++) if (owner[k] >= 0) owner[k] = remap.has(owner[k]) ? remap.get(owner[k]) : -1;\n    for (const B of live) { B.id = remap.get(B.id); if (B.wingOf != null) B.wingOf = remap.has(B.wingOf) ? remap.get(B.wingOf) : null; if (B.lean != null) B.lean = remap.has(B.lean) ? remap.get(B.lean) : null; }\n    buildings.length = 0; for (const B of live) if (B.wingOf !== null || B.front >= 0) buildings.push(B);\n    if (buildings.length !== live.length) { const rm2 = new Map(); buildings.forEach((B, k2) => rm2.set(B.id, k2)); for (let k = 0; k < WW; k++) if (owner[k] >= 0) owner[k] = rm2.has(owner[k]) ? rm2.get(owner[k]) : -1; for (const B of buildings) { B.id = rm2.get(B.id); if (B.wingOf != null) B.wingOf = rm2.get(B.wingOf); if (B.lean != null) B.lean = rm2.has(B.lean) ? rm2.get(B.lean) : null; } }\n    for (const ps of passages.slice()) if (!buildings.some((B) => B.passage === ps.run)) { for (const [pi, pj] of ps.run) if (ST[idx(pi, pj)] === S.PASS) ST[idx(pi, pj)] = S.NONE; passages.splice(passages.indexOf(ps), 1); }\n    for (const ps of passages) ps.b = buildings.findIndex((B) => B.passage === ps.run);\n  }\n  // (20) STREETS TO NOWHERE GO BACK TO THE LAND: a dead end of street that fronts no building, yard, arch or square is\n  // taken up, cell by cell, until every street end leads somewhere (the cap only cut while the town was over its share)\n  if (V20) { const near = new Uint8Array(WW);   // (20) a street ends at, or just past, the last building, square or gate (the owner's note)\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const k = idx(i, j); if (!(owner[k] >= 0 || ST[k] === S.PLAZA || ST[k] === S.LMK || ST[k] === S.YARD)) continue;\n      for (let a = -3; a <= 3; a++) for (let b = -3; b <= 3; b++) if (inP(i + a, j + b)) near[idx(i + a, j + b)] = 1; }\n    for (let k = 0; k < WW; k++) if (isLane(ST[k]) && !near[k]) ST[k] = S.NONE; }\n  if (V20) for (let changed = true, guard = 0; changed && guard < 400; guard++) { changed = false;\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const k = idx(i, j); if (!isLane(ST[k]) || inBand(i, j)) continue;\n      let nb = 0, fronts = false;\n      for (const [a, b] of D4) { const ni = i + a, nj = j + b; if (!inP(ni, nj)) continue; const n = idx(ni, nj), c = ST[n];\n        if (isLane(c) || c === S.PLAZA || c === S.EDGE || c === S.TRACK || c === S.WALK) nb++;\n        if ((owner[n] >= 0 && !buildings[owner[n]].dead) || c === S.YARD || c === S.PASS || c === S.LMK) fronts = true; }\n      if (!fronts && nb <= 1) { ST[k] = S.NONE; changed = true; } } }\n  // ---- ONE TOWN, EVERY STREET JOINED: a run of streets the cap or the land left on its own is joined to the core's by the\n  // shortest way (an alley), or, too short to be worth a lane, given back to the land ----\n  { const STR = (k) => isStreet(ST[k]) || ST[k] === S.TRACK || ST[k] === S.YARD || ST[k] === S.PASS;\n    for (let pass = 0; pass < 8; pass++) {\n      const comp = new Int32Array(WW).fill(-1), sizes2 = []; let nComp = 0;\n      for (let k0 = 0; k0 < WW; k0++) { if (comp[k0] >= 0 || !STR(k0)) continue; const q = [k0]; comp[k0] = nComp; let n2 = 0;\n        for (let h2 = 0; h2 < q.length; h2++) { const c = q[h2], ci = ((c / W) | 0) - N, cj = (c % W) - N; n2++;\n          for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (!inP(ni, nj)) continue; const n = idx(ni, nj); if (comp[n] >= 0 || !STR(n)) continue; comp[n] = nComp; q.push(n); } }\n        sizes2.push(n2); nComp++; }\n      const main = comp[idx(districts[0].sq.ci, districts[0].sq.cj)];\n      if (main < 0 || nComp <= 1) break;\n      let changed = false;\n      for (let c2 = 0; c2 < nComp; c2++) {\n        if (c2 === main) continue;\n        const cells = []; for (let k = 0; k < WW; k++) if (comp[k] === c2) cells.push(k);\n        // its cell nearest the core's network, and the way there over open ground (never through a building)\n        const hp = heap(), best = new Int32Array(WW).fill(2147483647), from = new Int32Array(WW).fill(-1);\n        for (const k of cells) { best[k] = 0; hp.push(0, k); }\n        let hitK = -1;\n        while (hp.size) { const [c0, k] = hp.pop(); if (c0 > best[k]) continue; if (comp[k] === main) { hitK = k; break; } if (c0 > 400) break; const ci = ((k / W) | 0) - N, cj = (k % W) - N;\n          for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (!okPlot(ni, nj)) continue; const n = idx(ni, nj); if (owner[n] >= 0 || ST[n] === S.LMK || ST[n] === S.WALL || wet[n] || cls[n] >= 2) continue;\n            const nc = c0 + 10 + 30 * Math.abs(H[n] - H[k]); if (nc < best[n]) { best[n] = nc; from[n] = k; hp.push(nc, n); } } }\n        if (hitK >= 0) {\n          for (let k = from[hitK]; k >= 0 && comp[k] !== c2; k = from[k]) { if (!STR(k)) { ST[k] = S.ALLEY; reachCost[k] = Math.max(0, reachCost[k]); } }\n          changed = true;\n        } else { for (const k of cells) if (isLane(ST[k]) || ST[k] === S.TRACK) { ST[k] = S.NONE; changed = true; } }\n      }\n      if (!changed) break;\n    } }\n  // ---- 7. WALLS (the citadel's and the medina's, and every raiders' town): two kubes thick round the outline, a gate where\n  // a street comes out, the wall's walk on top ----\n  const WALL_H = 4, gates = [];\n  if (walled && !V20) {\n    const dOut = new Int16Array(WW).fill(-1), q = [];\n    for (let k = 0; k < WW; k++) if (builtAt(k)) { dOut[k] = 0; q.push(k); }\n    for (let h2 = 0; h2 < q.length; h2++) { const c = q[h2]; if (dOut[c] >= 2) continue; const ci = ((c / W) | 0) - N, cj = (c % W) - N;\n      for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (!inP(ni, nj)) continue; const n = idx(ni, nj); if (dOut[n] >= 0) continue; dOut[n] = dOut[c] + 1; q.push(n); } }\n    // (round the outside only: ground the plot's rim reaches without crossing the town)\n    const outside = new Uint8Array(WW), oq = []; for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) if (cheb(i, j) === N - 1 && !builtAt(idx(i, j))) { outside[idx(i, j)] = 1; oq.push(idx(i, j)); }\n    for (let h2 = 0; h2 < oq.length; h2++) { const c = oq[h2], ci = ((c / W) | 0) - N, cj = (c % W) - N; for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (!inP(ni, nj)) continue; const n = idx(ni, nj); if (outside[n] || builtAt(n)) continue; outside[n] = 1; oq.push(n); } }\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const k = idx(i, j); if (!outside[k] || dOut[k] !== 1 || !okPlot(i, j) || cls[k] > 1 || wet[k] || inBand(i, j) || ST[k] !== S.NONE) continue; ST[k] = S.WALL; }\n    // gates: every street that runs out to the wall carries on through it\n    for (const ln of lanes) { if (ln.cls < S.SIDE) continue; for (const e of [ln.pts[0], ln.pts[ln.pts.length - 1]]) {\n      for (const [a, b] of D4) { const n1 = [e[0] + a, e[1] + b]; if (!inP(n1[0], n1[1]) || ST[idx(n1[0], n1[1])] !== S.WALL) continue;\n        let t = 1, through = []; for (; t <= 3; t++) { const c = [e[0] + a * t, e[1] + b * t]; if (!inP(c[0], c[1]) || ST[idx(c[0], c[1])] !== S.WALL) break; through.push(c); }\n        const beyond = [e[0] + a * t, e[1] + b * t]; if (!inP(beyond[0], beyond[1]) || ST[idx(beyond[0], beyond[1])] === S.WALL) continue;\n        const pi = b ? 1 : 0, pj = a ? 1 : 0, wd = ln.w === 3 ? [-1, 0, 1] : [0, 1];\n        for (const c of through) for (const o of wd) { const x = c[0] + o * pi, y = c[1] + o * pj; if (inP(x, y) && ST[idx(x, y)] === S.WALL) { ST[idx(x, y)] = ln.cls; reachCost[idx(x, y)] = Math.max(0, reachCost[idx(x, y)]); } }\n        gates.push({ i: e[0] + a * 2, j: e[1] + b * 2, di: a, dj: b }); } } }\n    if (!gates.length) walled = false;\n  }\n  // (20) THE CITY WALL (walled towns): \"the outer sides of buildings should be considered part of the city wall\", \"gates only\n  // at the end of streets\". The street round the outside of the outer blocks is not laid: where a street ran along an\n  // outer building with the land beyond, the land comes up to the building; every street that reaches the edge ends in a\n  // gate; the wall closes what is left (an alley's end, a corner) a kube from the town.\n  if (walled && V20) {\n    const outside = (i, j) => inP(i, j) && ST[idx(i, j)] !== S.WALL && (ST[idx(i, j)] === S.NONE || ST[idx(i, j)] === S.FIELD || ST[idx(i, j)] === S.NAT) && owner[idx(i, j)] < 0;\n    const isRoad = (c) => c === S.SIDE || c === S.MAIN, droppedW = new Map();\n    for (let pass = 0; pass < 3; pass++) { const drop = [];\n      for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const k = idx(i, j); if (!isRoad(ST[k])) continue;\n        for (const [a, b] of D4) { if (!outside(i + a, j + b)) continue; let hit = false; for (let t = 1; t <= 3; t++) { const ii = i - a * t, jj = j - b * t; if (!inP(ii, jj)) break; const kk = idx(ii, jj); if (owner[kk] >= 0) { hit = true; break; } if (!isRoad(ST[kk])) break; }\n          if (hit) { drop.push(k); break; } } }\n      for (const k of drop) { droppedW.set(k, ST[k]); ST[k] = S.NONE; } if (!drop.length) break; }\n    // (a building the dropped street left with no street at all keeps the one before its front: its door is there)\n    const roadSide = (B, f) => { const along = f < 2 ? B.d : B.w; for (let t = 0; t < along; t++) { const i = f === 0 ? B.i0 - 1 : f === 1 ? B.i0 + B.w : B.i0 + t, j = f < 2 ? B.j0 + t : f === 2 ? B.j0 - 1 : B.j0 + B.d; if (inP(i, j) && (isRoad(ST[idx(i, j)]) || ST[idx(i, j)] === S.PLAZA)) return true; } return false; };\n    for (const B of buildings) { if (B.dead || [0, 1, 2, 3].some((f) => roadSide(B, f))) continue;\n      const f = B.front, a = f === 0 ? -1 : f === 1 ? 1 : 0, b = f === 2 ? -1 : f === 3 ? 1 : 0, along = f < 2 ? B.d : B.w;\n      for (let t = -2; t < along + 2; t++) for (let u = 1; u <= 3; u++) { const i = f < 2 ? (a < 0 ? B.i0 - u : B.i0 + B.w - 1 + u) : B.i0 + t, j = f < 2 ? B.j0 + t : (b < 0 ? B.j0 - u : B.j0 + B.d - 1 + u);\n        if (inP(i, j) && droppedW.has(idx(i, j))) ST[idx(i, j)] = droppedW.get(idx(i, j)); } }\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { if (!outside(i, j) || !okPlot(i, j) || wet[idx(i, j)] || inBand(i, j)) continue;\n      let wallIt = false;\n      for (const [a, b] of D4) { const ni = i + a, nj = j + b; if (!inP(ni, nj)) continue; const c = ST[idx(ni, nj)];\n        if (isRoad(c) && inP(ni + a, nj + b) && isRoad(ST[idx(ni + a, nj + b)])) { gates.push({ i, j, di: -a, dj: -b }); continue; }   // a street's end: its gate\n        if (isRoad(c) || c === S.ALLEY || c === S.PLAZA || c === S.YARD) wallIt = true; }\n      if (wallIt && !gates.some((gt) => gt.i === i && gt.j === j)) ST[idx(i, j)] = S.WALL; }\n    if (!gates.length) walled = false;\n  }\n  // ---- FIELDS beyond the outline (up to the town's share of 5% more): rows of crops on the land's own ground ----\n  { const dOut = new Int16Array(WW).fill(-1), q = []; let made = 0;\n    for (let k = 0; k < WW; k++) if (builtAt(k)) { dOut[k] = 0; q.push(k); }\n    for (let h2 = 0; h2 < q.length && made < fieldsCap; h2++) { const c = q[h2], ci = ((c / W) | 0) - N, cj = (c % W) - N; if (dOut[c] >= 7) continue;\n      for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (!okPlot(ni, nj)) continue; const n = idx(ni, nj); if (dOut[n] >= 0) continue; dOut[n] = dOut[c] + 1; q.push(n);\n        if (ST[n] === S.NONE && owner[n] < 0 && cls[n] <= 1 && !wet[n] && !inBand(ni, nj) && dOut[n] >= (walled ? 3 : 1) && made < fieldsCap) { ST[n] = S.FIELD; made++; } } } }\n\n  // ---- 8. THE LEVELS (stairs = stairs): the town's ground follows the land but never climbs more than 3 kubes in 4, so a\n  // street is half-step stairs with a landing at least every 3 kubes of rise; every square flat; the two columns either\n  // side of a cube edge at one level; outside the outline the land's own ground ----\n  const g = new Int16Array(WW);\n  for (let k = 0; k < WW; k++) g[k] = H[k];\n  const inTG = (k) => builtAt(k) && ST[k] !== S.WALL;\n  const partnerK = (i, j) => { if (!onSeam(i, j)) return -1; const q = qOf(i, j), o = q === sE ? sE - 1 : sE; return sAx === 0 ? idx(o, j) : idx(i, o); };\n  // min-plus envelopes on the town's ground graph (seam pairs one node): L ≤ F, slope 3 quarter kubes a step\n  const envelope = (F4, sign, step) => {\n    const out = new Int32Array(WW).fill(2147483647), hp = heap();\n    for (let k = 0; k < WW; k++) if (inTG(k) && F4[k] !== null && F4[k] !== undefined && F4[k] === F4[k]) { out[k] = sign * F4[k]; hp.push(out[k], k); }\n    while (hp.size) { const [v, k] = hp.pop(); if (v > out[k]) continue; const ci = ((k / W) | 0) - N, cj = (k % W) - N;\n      const nb = []; for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (inP(ni, nj) && inTG(idx(ni, nj)) && !(edge && crosses(ci, cj, ni, nj))) nb.push([idx(ni, nj), step]); }\n      const pk = partnerK(ci, cj); if (pk >= 0 && inTG(pk)) nb.push([pk, 0]);\n      for (const [n, c] of nb) { const nv = v + c; if (nv < out[n]) { out[n] = nv; hp.push(nv, n); } } }\n    for (let k = 0; k < WW; k++) if (out[k] !== 2147483647) out[k] = sign * out[k];\n    return out; };\n  { const F4 = new Array(WW).fill(NaN);\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const k = idx(i, j); if (!inTG(k) || wet[k]) continue;\n      let s2 = 0, n2 = 0; for (let a = -1; a <= 1; a++) for (let b = -1; b <= 1; b++) { const ni = i + a, nj = j + b; if (!inP(ni, nj) || wet[idx(ni, nj)] || (edge && crosses(i, j, ni, nj))) continue; s2 += H[idx(ni, nj)]; n2++; }\n      F4[k] = Math.round(4 * s2 / n2); }\n    const L4 = envelope(F4, 1, 3), U4 = envelope(F4, -1, 3), h8 = new Int32Array(WW);\n    for (let k = 0; k < WW; k++) if (inTG(k)) h8[k] = L4[k] !== 2147483647 && U4[k] !== 2147483647 ? L4[k] + U4[k] : 8 * H[k];\n    // the squares (and the landmark, at its square's level) flat, each a cone of the same slope round it\n    const conesBFS = (cells) => { const d = new Int16Array(WW).fill(-1), q = []; for (const k of cells) { d[k] = 0; q.push(k); }\n      for (let h2 = 0; h2 < q.length; h2++) { const c = q[h2], ci = ((c / W) | 0) - N, cj = (c % W) - N; const nb = [];\n        for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (inP(ni, nj) && inTG(idx(ni, nj)) && !(edge && crosses(ci, cj, ni, nj))) nb.push([idx(ni, nj), 1]); }\n        const pk = partnerK(ci, cj); if (pk >= 0 && inTG(pk)) nb.push([pk, 0]);\n        for (const [n, c2] of nb) { if (d[n] >= 0 && d[n] <= d[c] + c2) continue; d[n] = d[c] + c2; if (c2 === 0) q.splice(h2 + 1, 0, n); else q.push(n); } }\n      return d; };\n    // over a cube edge the town's ground stands clear of the reference cube (rec.seamMin, the record's: so the edge between\n    // its two faces is one the land rolls over, outward), and climbs to it as stairs do\n    if (edge && Number.isFinite(rec.seamMin)) { const sc = []; for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) if (onSeam(i, j) && inTG(idx(i, j))) sc.push(idx(i, j));\n      if (sc.length) { const d = conesBFS(sc); for (let k = 0; k < WW; k++) if (inTG(k) && d[k] >= 0) { const a = 8 * rec.seamMin - 6 * d[k]; if (h8[k] < a) h8[k] = a; } } }\n    const pins = [];\n    // (20) each block on one level (slopes = level): its buildings and its alley pinned flat, as a square is\n    const blockPins20 = [];\n    if (V20) for (const x of blocks20) { if (x.square) continue; const cells = [];\n      for (let i = x.i0; i <= x.i1; i++) for (let j = x.j0; j <= x.j1; j++) { const k = idx(i, j); if ((owner[k] >= 0 && buildings[owner[k]].block20 === x) || ST[k] === S.ALLEY) cells.push(k); }\n      if (!cells.length) continue; const c1 = cells[cells.length >> 1]; const q = { cells, ci: ((c1 / W) | 0) - N, cj: (c1 % W) - N, block: x }; x.pinQ = q; blockPins20.push(q); }\n    for (const q of V20 ? [...squares, ...blockPins20] : squares) {\n      const cells = q.cells ? q.cells.slice() : []; if (!q.cells) for (let i = q.i0; i <= q.i1; i++) for (let j = q.j0; j <= q.j1; j++) cells.push(idx(i, j));\n      if (lmk && q === lmk.sq) for (let i = lmk.i0; i < lmk.i0 + lmk.w; i++) for (let j = lmk.j0; j < lmk.j0 + lmk.d; j++) cells.push(idx(i, j));\n      let lo = -1e9, hi = 1e9; const c0 = idx(q.ci, q.cj);\n      for (const pn of pins) { const d = pn.d[c0]; if (d < 0) continue; lo = Math.max(lo, 8 * pn.L - 6 * d); hi = Math.min(hi, 8 * pn.L + 6 * d); }\n      let L = Math.floor(h8[c0] / 8); if (8 * L < lo) L = Math.ceil(lo / 8); if (8 * L > hi) L = Math.floor(hi / 8);\n      // (20) a block beside a square never stands under it: its doors on the square would open below the paving\n      if (q.block && q.cells) for (const pn of pins) if (pn.q.kind && q.cells.some((k) => pn.d[k] >= 0 && pn.d[k] <= 3)) L = Math.max(L, pn.L);\n      const d = conesBFS(cells); pins.push({ L, d, q });\n      for (let k = 0; k < WW; k++) if (inTG(k) && d[k] >= 0) { const a = 8 * L - 6 * d[k], b = 8 * L + 6 * d[k]; if (h8[k] < a) h8[k] = a; else if (h8[k] > b) h8[k] = b; }\n      q.level = L;\n    }\n    for (let k = 0; k < WW; k++) if (inTG(k)) g[k] = Math.floor(h8[k] / 8);\n    for (const pn of pins) { const q = pn.q; if (q.cells) { for (const k of q.cells) g[k] = q.level; continue; } for (let i = q.i0; i <= q.i1; i++) for (let j = q.j0; j <= q.j1; j++) g[idx(i, j)] = q.level; }\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++) g[idx(i, j)] = lmk.sq.level;\n  }\n  const Lp = districts[0].sq.level;   // (the core square's level: the town's own \"P\" is the record's, this is the plaza over it)\n  // VERSION 20, THE SHARED WALLS: a building leaning on the one before it in its row has no wall of its own on that side\n  // (sh[side]; shA[side] the building whose wall it is), its rooms running to its edge. A building whose neighbour the cap\n  // took back takes in the column that wall stood on, where it is free; and each building's stair well (and so its door)\n  // in a back corner on one side or the other.\n  const shareWalls20 = () => {\n    for (const B of buildings) {\n      B.sh = [false, false, false, false]; B.shA = [-1, -1, -1, -1];\n      if (!V20) continue;\n      if (B.wellSide == null) B.wellSide = hash01(seed + '#ws' + B.i0 + ',' + B.j0) < 0.5 ? 'lo' : 'hi';\n      const A = B.lean != null ? buildings[B.lean] : null;\n      const s0 = !A ? -1 : A.i0 + A.w === B.i0 ? 0 : B.i0 + B.w === A.i0 ? 1 : A.j0 + A.d === B.j0 ? 2 : B.j0 + B.d === A.j0 ? 3 : -1;\n      const covers = s0 < 0 ? false : s0 < 2 ? A.j0 <= B.j0 && A.j0 + A.d >= B.j0 + B.d : A.i0 <= B.i0 && A.i0 + A.w >= B.i0 + B.w;\n      if (covers) { B.sh[s0] = true; B.shA[s0] = A.id; continue; }\n      B.lean = null;\n      if (B.leanSide0 == null || B.leanFixed) continue;\n      // its neighbour is gone: it takes in the column that wall stood on, where that is free\n      const sd = B.leanSide0, cells = [];\n      for (let t = 0; t < (sd < 2 ? B.d : B.w); t++) cells.push(sd === 0 ? [B.i0 - 1, B.j0 + t] : sd === 1 ? [B.i0 + B.w, B.j0 + t] : sd === 2 ? [B.i0 + t, B.j0 - 1] : [B.i0 + t, B.j0 + B.d]);\n      B.leanFixed = true;\n      if (cells.every(([i, j]) => okPlot(i, j) && owner[idx(i, j)] < 0 && (ST[idx(i, j)] === S.NONE || ST[idx(i, j)] === S.GARDEN) && !wet[idx(i, j)] && !inBand(i, j))) {\n        for (const [i, j] of cells) { owner[idx(i, j)] = B.id; ST[idx(i, j)] = S.NONE; }\n        if (sd === 0) { B.i0--; B.w++; } else if (sd === 1) B.w++; else if (sd === 2) { B.j0--; B.d++; } else B.d++;\n      }\n    }\n  };\n  shareWalls20();\n  // the room's bounds: inside the walls (a shared side's wall is the neighbour's, outside the lot)\n  const roomBounds = (B) => { const sh = B.sh || [false, false, false, false]; return { i0: B.i0 + (sh[0] ? 0 : 1), i1: B.i0 + B.w - 1 - (sh[1] ? 0 : 1), j0: B.j0 + (sh[2] ? 0 : 1), j1: B.j0 + B.d - 1 - (sh[3] ? 0 : 1) }; };\n  // Each building's floor is the street's level at its door (a terrace a block); a wing its main building's\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;\n    let mid = Math.floor(along / 2);\n    if (V20 && B.sh) { const rb = roomBounds(B), lo = B.front < 2 ? rb.j0 - B.j0 : rb.i0 - B.i0, hi = B.front < 2 ? rb.j1 - B.j0 : rb.i1 - B.i0; mid = B.wellSide === 'lo' ? lo : hi; }   // (20: beside the stair)\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  // (a building whose street the cap took back, or the wall stands on, turns its door to a side that has one)\n  { const OPEN = (i, j) => { const c = st(i, j); return V20 ? c === S.SIDE || c === S.MAIN || c === S.PLAZA || c === S.EDGE || c === S.WALK : isStreet(c) || c === S.YARD || c === S.TRACK || c === S.PASS; };\n    for (const B of buildings) { if (!(B.front >= 0)) continue; const o0 = doorCellOf(B).out; if (OPEN(o0[0], o0[1])) continue;\n      const was = B.front, ws0 = B.wellSide; let found = false;\n      // (20: first the other end of the same front, then the other sides, each at either end: the stair well goes with the door)\n      for (const f of [was, 0, 1, 2, 3]) { if (found) break; for (const ws of V20 ? ['lo', 'hi'] : [ws0]) { if (f === was && ws === ws0) continue; B.front = f; B.wellSide = ws; const o = doorCellOf(B).out; if (OPEN(o[0], o[1])) { found = true; break; } } }\n      if (!found) { B.front = was; B.wellSide = ws0; B.dead = true; } }   // (…and one with no street at all is not built: an empty lot)\n    // (20) …and every house leaning on a lot left empty goes with it (its wall was that house's)\n    if (V20) for (let changed = true; changed;) { changed = false; for (const B of buildings) if (!B.dead && B.lean != null && buildings[B.lean] && buildings[B.lean].dead) { B.dead = true; changed = true; } }\n    if (buildings.some((B) => B.dead)) {\n      for (const B of buildings) if (B.wingOf != null && buildings[B.wingOf].dead) B.dead = true;\n      for (let k = 0; k < WW; k++) if (owner[k] >= 0 && buildings[owner[k]].dead) owner[k] = -1;\n      const live = buildings.filter((B) => !B.dead), remap = new Map(); live.forEach((B, k2) => remap.set(B.id, k2));\n      for (let k = 0; k < WW; k++) if (owner[k] >= 0) owner[k] = remap.get(owner[k]);\n      for (const B of live) { B.id = remap.get(B.id); if (B.wingOf != null) B.wingOf = remap.get(B.wingOf); if (B.lean != null) B.lean = remap.has(B.lean) ? remap.get(B.lean) : null; }\n      buildings.length = 0; for (const B of live) buildings.push(B);\n      for (const ps of passages.slice()) if (!buildings.some((B) => B.passage === ps.run)) { for (const [pi, pj] of ps.run) if (ST[idx(pi, pj)] === S.PASS) ST[idx(pi, pj)] = S.NONE; passages.splice(passages.indexOf(ps), 1); }\n      for (const ps of passages) ps.b = buildings.findIndex((B) => B.passage === ps.run);\n      shareWalls20();\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      if (V20 && B.block20 && B.block20.pinQ && B.block20.pinQ.level != null) { B.level = B.block20.pinQ.level; B.stepDoor = g[idx(dc.out[0], dc.out[1])] < B.level; } }\n    else B.level = buildings[B.wingOf].level;\n  }\n  for (const B of buildings) { 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; if (B.passage) for (const [pi, pj] of B.passage) g[idx(pi, pj)] = B.level; if (B.yard) for (const [yi, yj] of B.yard) g[idx(yi, yj)] = B.level; }\n  for (const cells of yards) {\n    let lv = null; for (const ps of passages) { const B = buildings[ps.b]; if (!B) continue; const [li, lj] = ps.run[0];\n      if (cells.some(([ci, cj]) => Math.abs(ci - li) + Math.abs(cj - lj) === 1)) { lv = B.level; break; } }\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 s2 = 0; for (const [ci, cj] of cells) s2 += g[idx(ci, cj)]; lv = Math.floor(s2 / cells.length + 0.5); }\n    // (a long yard between streets at different levels keeps the town's eased ground, stairs and all: flat, it would\n    // leave a kube or more of cliff at one of its ends)\n    let far = false; for (const [ci, cj] of cells) for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (inP(ni, nj) && isStreet(st(ni, nj)) && Math.abs(g[idx(ni, nj)] - lv) > 1) far = true; }\n    // (…and so does one a door opens on at another level: the door's floor was set by the ground before the yard)\n    for (const B of buildings) if (B.door && B.level !== lv && cells.some(([ci, cj]) => ci === B.door[0] && cj === B.door[1])) far = true;\n    if (far) continue;\n    for (const [ci, cj] of cells) g[idx(ci, cj)] = lv;\n  }\n  // THE WALLS' TOP: the land and four kubes, stepping down to a gate's street a kube a cell (with a landing every three),\n  // so the walk is climbed at every gate\n  const patrolZ = new Map();\n  if (walled) {\n    const F4 = new Array(WW).fill(NaN);\n    for (let k = 0; k < WW; k++) if (ST[k] === S.WALL) F4[k] = 4 * (H[k] + WALL_H);\n    const wallG = (k) => ST[k] === S.WALL;\n    const env = (sign) => { const out = new Int32Array(WW).fill(2147483647), hp = heap();\n      for (let k = 0; k < WW; k++) if (wallG(k)) { out[k] = sign * F4[k]; hp.push(out[k], k); }\n      while (hp.size) { const [v, k] = hp.pop(); if (v > out[k]) continue; const ci = ((k / W) | 0) - N, cj = (k % W) - N;\n        for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (!inP(ni, nj)) continue; const n = idx(ni, nj); if (!wallG(n)) continue; if (v + 4 < out[n]) { out[n] = v + 4; hp.push(v + 4, n); } } }\n      return out; };\n    const lo = env(1), hi = env(-1);\n    for (let k = 0; k < WW; k++) if (wallG(k)) g[k] = Math.floor(((lo[k] === 2147483647 ? F4[k] : lo[k]) - (hi[k] === 2147483647 ? -F4[k] : hi[k])) / 8);\n    // the gate's ends: where a wall cell meets a gate's street, it stands a kube over it, and the next ones climb\n    for (let pass = 0; pass < 2 * WALL_H + 4; pass++) for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const k = idx(i, j); if (!wallG(k)) continue;\n      let cap = 1e9; for (const [a, b] of D4) { const ni = i + a, nj = j + b; if (!inP(ni, nj)) continue; const n = idx(ni, nj); if (isStreet(ST[n]) || ST[n] === S.TRACK) cap = Math.min(cap, g[n] + 1); else if (wallG(n)) cap = Math.min(cap, g[n] + 1); }\n      let floorV = -1e9; for (const [a, b] of D4) { const ni = i + a, nj = j + b; if (inP(ni, nj) && wallG(idx(ni, nj))) floorV = Math.max(floorV, g[idx(ni, nj)] - 1); }\n      if (g[k] > cap) g[k] = cap; if (g[k] < H[k] + 1) g[k] = Math.min(cap, H[k] + 1); void floorV; }\n    for (let k = 0; k < WW; k++) if (wallG(k)) patrolZ.set(k, g[k]);\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(SZ.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    // (version 19) the storeys by the density where it stands (gradient: 4 to 5 at a core, 2 to 3 in the middle, 1 to 2 at\n    // the edge), a kind's own by its rooms; a building too narrow for a stair inside is one storey\n    const dn = B.dens != null ? B.dens : B.door ? densAt(B.door[0], B.door[1]) : 0.6;\n    let n = dn >= 0.9 ? maxS - (rng() < 0.4 ? 1 : 0) : dn >= 0.6 ? 2 + (rng() < 0.5 ? 1 : 0) : 1 + (rng() < 0.5 ? 1 : 0);\n    // (version 20, height = grad: cities 4 to 5 round their squares, 3 in the middle, 2 at the edge; towns a storey less;\n    // nothing under 2)\n    if (V20) { let busy = false; for (let i = B.i0 - 1; i <= B.i0 + B.w && !busy; i++) for (let j = B.j0 - 1; j <= B.j0 + B.d; j++) { const c = st(i, j); if (c === S.PLAZA || c === S.MAIN) { busy = true; break; } } n = busy ? 3 : 2; }   // (heights = core)\n    if (V20 ? KIND_LOT20[B.kind] : KIND_LOT[B.kind]) n = (V20 ? KIND_LOT20 : KIND_LOT)[B.kind][2];\n    B.district = B.kind === 'workshop' || B.kind === 'forge' ? 'workshop' : B.kind === 'market' || (B.kind === 'home' && (B.rank >= 4 || (V20 && B.cornerLot))) ? 'shop' : 'home';\n    if (hamlet && B.kind === 'home') n = Math.min(n, 2);\n    if (B.front < 0) n = Math.max(1, buildings[B.wingOf].n - 1);\n    n = Math.max(1, Math.min(KIND_LOT[B.kind] ? 5 : maxS, n));\n    if (V20) { if (B.pile) n = Math.min(n, 2); }   // (20: the U stair fits every lot; a platform house on a pier stays low)\n    else if (Math.min(B.w, B.d) < 4 || Math.max(B.w, B.d) < 6) n = 1;\n    else if (Math.min(B.w, B.d) < 5) n = Math.min(n, 2);   // (a room two kubes across holds one stair: two storeys)\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 (V20) { sty.jetty = false; sty.pitched = false; sty.tower = false; sty.stilts = false; sty.balcony = rng() < 0.34; sty.win = 0;\n      sty.pat = ['pairs', 'single', 'loggia'][Math.floor(rng() * 3)]; sty.hood = rng() < 0.35; sty.planter = rng() < 0.3; }\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      if (V20 && !B.pile && !KIND_LOT20[B.kind]) n = Math.max(2, Math.min(3, 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    if (V20) { if (B.kind === 'market') B.arcade = true; if (B.kind === 'store') { B.hoist = true; B.loadDoors = true; }\n      if (B.kind === 'workshop' || B.kind === 'forge') { B.wideDoor = true; B.noGroundWin = true; } if (B.kind === 'forge') { sty.chimney = true; B.noShopWin = true; } }\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 === S.TRACK || c === S.YARD || c === S.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([S.ALLEY, S.SIDE, S.MAIN, S.PLAZA, S.TRACK, S.YARD, S.PASS, S.POM, S.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 === S.TRACK || c === S.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        // (version 19) the floor of the storey above, HALF a kube (2.5 kubes clear under it); a forge one tall room; a market\n        // hall's gallery round an open centre\n        else if (f < n - 1 && y === 6 * f + 5 && B.kind !== 'forge' && !(B.kind === 'market' && a >= fi0 + 6 && a <= fi1 - 6 && b >= fj0 + 6 && b <= fj1 - 6)) fput(a, b, Y0 + y, mFloor);\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    // (version 19: the rooms, their stairs, lamps and furniture are laid by INTERIORS, below)\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\n  // ==== VERSION 20'S BUILDINGS: the shell, the fronts and the roof (TOWN20) =============================================\n  // A storey is SP bits: 3 kubes clear (rows 0..5) over the floor of the next (rows 6..7, a whole kube); the top storey's\n  // floor is the roof. Walls a kube thick but on a shared side (the neighbour's); above a lower neighbour the wall goes on.\n  const signs = [];\n  const doors22 = [], rungs22 = [], doorMat22 = V22 ? doorMaterial22(peopleId, p.climate) : null;   // (22) the towns' doors and rungs\n  const OUT4 = [[-1, 0], [1, 0], [0, -1], [0, 1]];   // a building's side s, outward in the plan (0 −i, 1 +i, 2 −j, 3 +j)\n  const bandOf20 = (B, f) => (f === 0 ? B.sty.mBase : f === B.n - 1 && B.n >= 3 && B.sty.mTop ? B.sty.mTop : B.sty.mWall);\n  function shell20(B) {\n    const n = B.n, Y0 = B.Y0, Hb = SP * n, fi0 = 2 * B.i0, fi1 = 2 * (B.i0 + B.w) - 1, fj0 = 2 * B.j0, fj1 = 2 * (B.j0 + B.d) - 1, sh = B.sh;\n    const wallAt = (a, b) => (!sh[0] && a <= fi0 + 1) || (!sh[1] && a >= fi1 - 1) || (!sh[2] && b <= fj0 + 1) || (!sh[3] && b >= fj1 - 1);\n    const roofM = mTurf || mRoof;\n    for (let a = fi0; a <= fi1; a++) for (let b = fj0; b <= fj1; b++) {\n      const e = wallAt(a, b);\n      for (let f = 0; f < n; f++) for (let y = SP * f; y < SP * f + SP; y++) {\n        if (e) fput(a, b, Y0 + y, bandOf20(B, f));\n        else if (y >= SP * f + SP - 2) fput(a, b, Y0 + y, f === n - 1 ? roofM : mFloor);\n      }\n    }\n    // a shared side over a lower neighbour: this building's wall on the neighbour's column, from its roof up\n    for (let s0 = 0; s0 < 4; s0++) { if (!sh[s0]) continue; const A = buildings[B.shA[s0]]; if (!A) continue;\n      const yA = A.Y0 + SP * A.n, cols = s0 === 0 ? [fi0 - 2, fi0 - 1] : s0 === 1 ? [fi1 + 1, fi1 + 2] : s0 === 2 ? [fj0 - 2, fj0 - 1] : [fj1 + 1, fj1 + 2];\n      for (let y = Math.max(Y0, yA); y < Y0 + Hb; y++) { const m = bandOf20(B, Math.floor((y - Y0) / SP));\n        if (s0 < 2) { for (const a of cols) for (let b = fj0; b <= fj1; b++) fput(a, b, y, m); }\n        else for (const b of cols) for (let a = fi0; a <= fi1; a++) fput(a, b, y, m); } }\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  }\n  // the sides of a building along one face: which ends are its own walls, and the kube columns between them\n  const faceCols20 = (B, s) => { const along = s < 2 ? B.d : B.w, loW = s < 2 ? !B.sh[2] : !B.sh[0], hiW = s < 2 ? !B.sh[3] : !B.sh[1];\n    const inner = []; for (let t = loW ? 1 : 0; t <= along - 1 - (hiW ? 1 : 0); t++) inner.push(t); return { along, loW, hiW, inner }; };\n  const winCols20 = (B, inner) => { const m = inner.length, pat = B.sty.pat;\n    if (m >= 5) return pat === 'loggia' ? inner.filter((t, k) => k % 2 === 0 && k !== (m >> 1)).concat([inner[m >> 1]]) : inner.filter((t, k) => k % 2 === 0);\n    if (pat === 'single' || pat === 'loggia') return m >= 4 ? [inner[1], inner[2]] : [inner[(m - 1) >> 1]];\n    return m >= 2 ? [inner[0], inner[m - 1]] : inner; };\n  function facade20(B, s) {\n    const sm = sideMap(B, s), n = B.n, sty = B.sty, Hb = SP * n, isFront = s === B.front;\n    const lw = laneWidthAt(B, s), roomy = lw >= 2;\n    const { along, loW, hiW, inner } = faceCols20(B, s);\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 trimC = mCrystal || mTrim, colM = mPilaster || mFrame, course = (TH.seams && mSeam) ? mSeam : trimC;\n    // the columns at its own wall ends, ground to roof (whole kubes in the wall's plane: no bits)\n    for (const t of [loW ? 0 : -1, hiW ? along - 1 : -1]) if (t >= 0) for (let y = 0; y < Hb; y++) for (const u of [2 * t, 2 * t + 1]) for (const v of [0, 1]) P(u, v, y, colM);\n    // the trim course over the ground storey (whole kubes); a glowing seam on a furnace world\n    if (n >= 2) for (const t of inner) for (const u of [2 * t, 2 * t + 1]) for (const v of [0, 1]) for (const y of [SP - 2, SP - 1]) P(u, v, y, course);\n    if (sty.strip && mStrip) for (let f = 1; f < n; f++) for (const t of inner) for (const u of [2 * t, 2 * t + 1]) P(u, -1, SP * f - 1, mStrip);\n    const glassAt = (u, y) => { P(u, 0, y, 0); P(u, 1, y, mGlass); };   // the glass half a kube back in its opening\n    // THE UPPER STOREYS: 1 x 2 windows (a pair at the sides, a double in the middle, or a loggia), sills, a balcony\n    const wc = winCols20(B, inner), lt = sty.pat === 'loggia' && inner.length >= 5 && isFront ? inner[inner.length >> 1] : null;\n    const balS = n >= 4 ? 2 : 1, bal = sty.balcony && n >= 3 && isFront && roomy && B.kind === 'home';\n    for (let f = 1; f < n; f++) {\n      const y0 = SP * f, balHere = bal && f === balS;\n      for (const t of B.loadDoors && isFront ? [inner[(inner.length - 1) >> 1]] : wc) for (const u of [2 * t, 2 * t + 1]) {\n        if (B.loadDoors && isFront) { for (let y = y0; y <= y0 + 4; y++) { P(u, 0, y, 0); P(u, 1, y, mFrame); } P(u, 0, y0 + 5, mFrame); continue; }\n        if (t === lt) {   // a loggia: the bay a kube deep, glass at its back, a rail across its front\n          for (let y = y0; y <= y0 + 5; y++) { P(u, 0, y, 0); P(u, 1, y, 0); }\n          for (let y = y0 + 1; y <= y0 + 5; y++) P(u, 3, y, mGlass);\n          P(u, 0, y0, mRail); P(u, 0, y0 + 1, mRail);\n          continue;\n        }\n        for (let y = y0 + (balHere ? 0 : 2); y <= y0 + 5; y++) glassAt(u, y);\n        if (!balHere) P(u, -1, y0 + 1, trimC);   // the sill, half a kube out\n        if (TH.grates) for (const y of [y0 + 3, y0 + 4]) P(u, -1, y, mGrate);\n        if (flowersOn && rng() < 0.4 && !balHere) P(u, -1, y0 + 2, mFlowers[Math.floor(rng() * mFlowers.length)]);\n        else if (mSnow && !balHere) P(u, -1, y0 + 2, mSnow);\n      }\n      if (sty.mShut && !TH.grates) for (const t of wc) { if (t === lt || (B.loadDoors && isFront)) continue; for (let y = y0 + 2; y <= y0 + 5; y++) { P(2 * t - 1, -1, y, sty.mShut); P(2 * t + 2, -1, y, sty.mShut); } }\n      if (lt != null) { const cells = [], u0 = 2 * lt; const ab = sm.at(u0, 2); cells.push([ab[0] >> 1, ab[1] >> 1]); (B.loggias = B.loggias || []).push(...cells); }\n      if (balHere) { const ua = 2 * inner[0], ub = 2 * inner[inner.length - 1] + 1, deck = TH.grates ? mGrate : mBeam;\n        for (let u = ua; u <= ub; u++) { P(u, -1, y0 - 2, deck); P(u, -1, y0 - 1, deck); P(u, -2, y0 - 2, deck); P(u, -2, y0 - 1, deck); P(u, -2, y0, mRail); if (!((u & 1) && !TH.grates)) P(u, -2, y0 + 1, mRail); }\n        for (const u of [ua, ub]) { P(u, -1, y0, mRail); P(u, -1, y0 + 1, mRail); }\n        stats.balconies++; }\n      if (mSeam && !TH.seams) for (const t of inner) for (const u of [2 * t, 2 * t + 1]) P(u, 0, y0 - 1, mSeam);\n    }\n    // THE GROUND STOREY: on the front, the door beside the stair (1 kube wide, 2.5 tall, its lintel half a kube), a shop's\n    // window and sign, or a home's two windows; a lantern by the door, a hood over some; on another street side, windows\n    const hh = SP;\n    if (isFront && !B.arcade) {\n      const dT = B.doorT != null ? B.doorT : (B.wellSide === 'lo' ? inner[0] : inner[inner.length - 1]), dws = B.wideDoor ? [dT, dT === inner[0] ? dT + 1 : dT - 1] : [dT];\n      for (const t of dws) for (const u of [2 * t, 2 * t + 1]) { for (let y = 0; y <= 4; y++) { P(u, 0, y, 0); P(u, 1, y, 0); } P(u, 0, 5, mFrame); P(u, 1, 5, mFrame);\n        if (sty.stilts) { P(u, 0, -1, 0); P(u, 0, -2, mBeam, true); }   // (a raised floor: a half step in the door's own wall, as version 19's)\n        if (B.stepDoor && !sty.stilts) P(u, -1, -2, mPath, true); }   // (20: a block a kube over its street: a half step on the street before the door)\n      const rest = inner.filter((t) => !dws.includes(t) && Math.abs(t - dT) >= 1);\n      const shop = B.district === 'shop' || B.kind === 'market' || B.kind === 'inn' || B.kind === 'store';\n      if (shop && !B.noShopWin) {\n        for (const t of rest) for (const u of [2 * t, 2 * t + 1]) { for (let y = 1; y <= 4; y++) glassAt(u, y); P(u, 0, 5, mFrame); P(u, 1, 5, mFrame); }\n        // the shop's sign over its window, on the course: what it sells (drawn by the game from the item's own icon)\n        if (rest.length && n >= 2) { const tm = rest[rest.length >> 1], ab = sm.at(2 * tm, -1), ab2 = sm.at(2 * tm + 1, -1);\n          signs.push({ b: B.id, i: Math.min(ab[0], ab2[0]) >> 1, j: Math.min(ab[1], ab2[1]) >> 1, h: (B.Y0 + SP - 2) >> 1, face: s, item: signItem20(B) }); }\n        if (sty.mAwn && lw >= 2 && rest.length) { const ua = 2 * rest[0], ub = 2 * rest[rest.length - 1] + 1; for (let u = ua; u <= ub; u++) { const c = ((u >> 1) & 1) ? sty.mAwn[0] : sty.mAwn[1]; P(u, -1, 5, c); P(u, -2, 5, c); if (lw >= 3) P(u, -3, 4, c); } stats.awnings++; }\n      } else if (!B.noGroundWin) for (const t of rest.slice(-2)) for (const u of [2 * t, 2 * t + 1]) for (let y = 2; y <= 5; y++) glassAt(u, y);\n      // the lantern on a bracket beside the door (every door), lit at night; a hood over some homes' doors\n      const lu = dT === inner[0] ? 2 * dT - 1 : 2 * dT + 2; P(lu, -1, 5, mLampBit); P(lu, -1, 6, mBeam); stats.lanterns++;\n      if (sty.hood && !shop) for (let u = 2 * Math.min(...dws) - 1; u <= 2 * Math.max(...dws) + 2; u++) { P(u, -1, 6, mBeam); P(u, -2, 6, mBeam); }\n      if (V22) {   // (22) a door in the doorway: the lintel filled to the door's two kubes, the door recorded where it stands\n        for (const t of dws) for (const u of [2 * t, 2 * t + 1]) { P(u, 0, 4, mFrame); P(u, 1, 4, mFrame); }\n        const cells = dws.slice().sort((a, b) => a - b).map((t) => { const ab = sm.at(2 * t, 0); return [ab[0] >> 1, ab[1] >> 1]; });\n        doors22.push({ b: B.id, kind: cells.length > 1 ? 'double' : 'door', cells, h0: B.Y0, out: OUT4[s], mat: doorMat22 });\n      }\n      stats.doors++;\n      // a Planter on the street beside some doors, where the street is 3 or more across\n      if (sty.planter && lw >= 3 && rest.length) { const tp = rest[rest.length - 1], ab = sm.at(2 * tp, -1), ci = ab[0] >> 1, cj = ab[1] >> 1;\n        if (inP(ci, cj)) { const k = idx(ci, cj); if (owner[k] < 0 && (ST[k] === S.MAIN || ST[k] === S.PLAZA) && !inBand(ci, cj)) planters20.push([ci, cj, B.id]); } }\n    } else if (isFront && B.arcade) {   // the market's arcade: its front open between piers a kube wide\n      const piers = new Set(inner.filter((t, k) => k > 0 && k < inner.length - 1 && k % 3 === 2));\n      for (const t of inner) for (const u of [2 * t, 2 * t + 1]) for (let y = 0; y < SP - 2; y++) { if (piers.has(t)) { P(u, 0, y, colM); P(u, 1, y, colM); } else if (y <= 4) { P(u, 0, y, 0); P(u, 1, y, 0); } else { P(u, 0, y, trimC); P(u, 1, y, trimC); } }\n      if (B.stepDoor) for (const t of inner) if (!piers.has(t)) for (const u of [2 * t, 2 * t + 1]) P(u, -1, -2, mPath, true);   // (a kube over its street: a half step before every bay)\n      const ab = sm.at(2 * inner[inner.length >> 1], -1); signs.push({ b: B.id, i: ab[0] >> 1, j: ab[1] >> 1, h: (B.Y0 + SP - 2) >> 1, face: s, item: signItem20(B) });\n    } else if (!isFront) for (const t of wc) for (const u of [2 * t, 2 * t + 1]) for (let y = 2; y <= 5; y++) glassAt(u, y);\n    // the climate's touches, as version 19's: vines and moss, pipes and vents, banners, icicles, tholin\n    if (F.vine && rng() < 0.55) for (let k = 0; k < Math.max(1, Math.floor(along / 5)); k++) {\n      const u = 2 * inner[Math.floor(rng() * inner.length)], top = Hb - Math.floor(rng() * 4), len = 3 + Math.floor(rng() * 6);\n      for (let y = top; y > top - len && y >= 6; y--) P(u, -1, y, rng() < 0.25 ? mLeaf2 : mLeaf);\n      stats.vines++; }\n    if (mPipe && roomy && inner.length >= 3 && rng() < 0.55) { const pu = 2 * inner[inner.length - 1] + 1; for (let y = 6; y < Hb; y++) P(pu, -1, y, mPipe); stats.pipes++; }\n    if ((mVent || TH.heatVents) && inner.length >= 3) for (let f = 1; f < n; f++) if (rng() < 0.5) { const t = inner[1]; if (wc.includes(t)) continue; for (const u of [2 * t, 2 * t + 1]) for (const v of [0, 1]) { P(u, v, SP * f + 2, mVent || M('Vent Grille')); P(u, v, SP * f + 3, mVent || M('Vent Grille')); } }\n    if (mBanner && isFront && n >= 2 && inner.length >= 3) { const bu = 2 * inner[inner.length >> 1]; for (let y = Hb - 3; y >= Math.max(SP + 2, Hb - 10); y--) { P(bu, -1, y, mBanner); P(bu + 1, -1, y, mBanner); } }\n    if (mIce) for (let u = 0; u < 2 * along; u += 2 + Math.floor(rng() * 3)) { P(u, -3, Hb - 3, mIce); if (rng() < 0.5) P(u, -3, Hb - 4, mIce); }\n    if (mTholin.length) for (const t of inner) for (let y = 0; y < Math.min(Hb, 12); y += 2) if (rng() < 0.14) {\n      let ok = true; for (const u of [2 * t, 2 * t + 1]) for (const yy of [y, y + 1]) for (const v of [0, 1]) if (G20(sm, B, u, v, yy) !== bandOf20(B, Math.floor(yy / SP))) ok = false;\n      if (ok) { const c = mTholin[Math.floor(rng() * mTholin.length)]; for (const u of [2 * t, 2 * t + 1]) for (const yy of [y, y + 1]) for (const v of [0, 1]) P(u, v, yy, c); } }\n  }\n  // the workshop's way into its yard: through its back wall at the end away from its stair well\n  const yardDoorOf = (B) => { if (!B.yard) return null; const rb = roomBounds(B), [bi, bj] = B.yardDir, alongJ = bi !== 0;\n    const t = B.wellSide === 'lo' ? (alongJ ? rb.j1 : rb.i1) : (alongJ ? rb.j0 : rb.i0);\n    const wall = alongJ ? [B.yardBack, t] : [t, B.yardBack]; return { wall, out: [wall[0] + bi, wall[1] + bj], in: [wall[0] - bi, wall[1] - bj] }; };\n  const G20 = (sm, B, u, v, y) => { const ab = sm.at(u, v); return fget(ab[0], ab[1], B.Y0 + y); };\n  const planters20 = [];\n  // what a shop's sign shows: the first thing its kind's containers hold (the market and a shop house: the people's goods)\n  const signItem20 = (B) => { const tab = (LOOT19[B.kind === 'home' ? 'market' : B.kind] || LOOT19.market)(p, furnitureName19(peopleId, 'cabinet'), PM.ground); return (tab[Math.floor(hash01(seed + '#sign' + B.i0 + ',' + B.j0) * tab.length)] || tab[0])[0]; };\n  function roof20(B) {\n    const n = B.n, Y0 = B.Y0, Hb = SP * 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;\n    stats.roofs++;\n    // the roof's edge a whole kube out over every street it fronts (eaves = over); a watch post's battlements instead\n    if (B.kind === 'watch') { const pm = TH.grates ? mGrate : B.sty.mTop || mTrim;\n      for (let a = fi0; a <= fi1; a++) for (let b = fj0; b <= fj1; b++) { const edge = a <= fi0 + 1 || a >= fi1 - 1 || b <= fj0 + 1 || b >= fj1 - 1; if (!edge) continue; fput(a, b, top, pm); if ((((a >> 1) + (b >> 1)) & 1) === 0) fput(a, b, top + 1, pm); }\n    } else for (const s of B.faces) { const sm = sideMap(B, s), L = sm.L;\n      for (let u = 0; u < L; u++) for (const v of [-1, -2]) for (const y of [Hb - 2, Hb - 1]) { const ab = sm.at(u, v); fput(ab[0], ab[1], Y0 + y, mRoof); } }\n    if (mSnow && B.kind !== 'watch') fbox(fi0, fj0, top, fi1, fj1, top, mSnow);\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 || B.kind === 'forge') { const hc = B.kind === 'forge' ? 7 : 3; fbox(ri, rj, top, ri + 1, rj + 1, top + 2 * hc - 1, sty.mBase); if (mGlowChim && (B.kind === 'forge' || rng() < 0.5)) fbox(ri, rj, top + 2 * hc, ri + 1, rj + 1, top + 2 * hc, mGlowChim); else fbox(ri, rj, top + 2 * hc, ri + 1, rj + 1, top + 2 * hc, mTrim); }\n    if (sty.tank && B.w >= 4 && B.d >= 4 && B.kind !== 'forge') { 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); }\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    // the storehouse's hoist: a beam out over the street under its roof's edge, a rope and a crate on it\n    if (B.hoist && B.front >= 0) { const sm = sideMap(B, B.front), { inner } = faceCols20(B, B.front), u = 2 * inner[(inner.length - 1) >> 1];\n      for (let v = -1; v >= -4; v--) { const ab = sm.at(u, v); fput(ab[0], ab[1], Y0 + Hb - 3, mBeam); }\n      const ab = sm.at(u, -4); for (let y = Y0 + Hb - 4; y >= Y0 + Hb - 8; y--) fput(ab[0], ab[1], y, mRail);\n      const c0 = sm.at(u - 1, -3), c1 = sm.at(u + 1, -5); fbox(Math.min(c0[0], c1[0]), Math.min(c0[1], c1[1]), Y0 + Hb - 10, Math.max(c0[0], c1[0]), Math.max(c0[1], c1[1]), Y0 + Hb - 9, mCrate); }\n    // the workshop's yard behind it: a low wall round it, a way through the back wall\n    if (B.yard) { const yc = new Set(B.yard.map(([i, j]) => i + ',' + j));\n      for (const [i, j] of B.yard) for (const [a, b] of D4) { const ni = i + a, nj = j + b; if (yc.has(ni + ',' + nj) || (owner[idx(ni, nj)] === B.id)) continue;\n        const fa = a > 0 ? 2 * i + 1 : a < 0 ? 2 * i : null, fb = b > 0 ? 2 * j + 1 : b < 0 ? 2 * j : null, yy = 2 * (g[idx(i, j)] + 1);\n        for (let t = 0; t < 2; t++) for (const y of [yy, yy + 1, yy + 2]) { if (fa != null) fput(fa, 2 * j + t, y, sty.mBase); else fput(2 * i + t, fb, y, sty.mBase); } }\n      const yd = yardDoorOf(B); if (yd) fbox(2 * yd.wall[0], 2 * yd.wall[1], Y0, 2 * yd.wall[0] + 1, 2 * yd.wall[1] + 1, Y0 + 4, 0); }\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  const lmkDoor = !lmk ? -1 : lmk.side[0] > 0 ? 0 : lmk.side[0] < 0 ? 1 : lmk.side[1] > 0 ? 2 : 3;   // (its door faces its square)\n  if (lmk) {\n    const ci = 2 * lmk.i0 + lmk.w, cj = 2 * lmk.j0 + lmk.d, y0 = 2 * (lmk.sq.level + 1), r = lmk.w, tall = SP * 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)] = lmk.sq.level;\n    if (lmk.form === 'dome') {\n      const tb = SP * Math.max(1, maxS - 1);\n      tower(ci, cj, y0, r, tb, mLmk, 0, lmkDoor);\n      dome(ci, cj, y0 + tb, r, mLmk, (peopleId === 'domekeepers' || peopleId === 'weavers' || peopleId === 'kilnborn') ? mGlass : 0, -1);\n      fbox(ci - 1, cj - 1, y0 + tb + r - 1, ci, cj, y0 + tb + r + 2, mLmk2); fput(ci, cj, y0 + tb + 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, lmkDoor);\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 = SP * 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 = SP * 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.front, door: lmkDoor };\n  }\n  for (const B of buildings) (V20 ? shell20 : shell)(B);\n  for (const B of buildings) for (const s of B.faces) (V20 ? facade20 : facade)(B, s);\n  for (const B of buildings) (V20 ? roof20 : roof)(B);\n  const isDoorCellK20 = (i, j) => buildings.some((B) => B.door && B.door[0] === i && B.door[1] === j);\n  // (20) the Planters on the street, where nothing else stands\n  fixing++;\n  for (const [ci, cj] of planters20) { const k = idx(ci, cj); if (isDoorCellK20(ci, cj)) continue; kput(ci, cj, g[k] + 1, FX('planter')); }\n  fixing--;\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\n  // ---- 9. THE WALLS' MERLONS: on the wall's outer edge, a bit thick, two bits long, two apart ----\n  if (walled) {\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] !== S.WALL) continue;\n      for (const [a, b] of D4) { const ni = i + a, nj = j + b; if (!inP(ni, nj)) continue; const n = idx(ni, nj); if (ST[n] === S.WALL || builtAt(n)) continue;\n        if ((((a ? j : i) % 2) + 2) % 2) continue;\n        const fo = a > 0 ? 2 * i + 1 : a < 0 ? 2 * i : b > 0 ? 2 * j + 1 : 2 * j;\n        for (let t = 0; t < 2; t++) for (const y of [2 * (g[k] + 1), 2 * (g[k] + 1) + 1]) { if (a) fput(fo, 2 * j + t, y, mTrim); else fput(2 * i + t, fo, y, mTrim); } } }\n    fixing--;\n  }\n  // ---- 10. THE SQUARES: the service point at the core square's heart, the stall at its edge (the stash for raiders); a\n  // fountain or a monument in every other square; the greens planted ----\n  const works = [];\n  fixing++;\n  const q0 = districts[0].sq, Lq = q0.level, svcKind = LAYOUT18[peopleId].service, wr = q0.s >= 5 ? 1 : 0, sci = q0.ci, scj = q0.cj, fi0s = 2 * sci, fj0s = 2 * scj;\n  for (let a = -wr; a <= wr; a++) for (let b = -wr; b <= wr; b++) if (a || b) kbox(sci + a, scj + b, Lq + 1, sci + a, scj + b, Lq + 1, mStash);\n  kbox(sci, scj, Lq + 1, sci, scj, Lq + 1, svcKind === 'hearth' ? M(F.lampBit) : mGlass);\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 * (Lq + 2); y <= 2 * (Lq + 3) + 1; y++) fput(fi0s + a, fj0s + b, y, mBeam);\n  fixing--;\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(fi0s + a, fj0s + b, 2 * (Lq + 4), svcKind === 'dome' ? mGlass : svcKind === 'hearth' ? mRetain : mRoof);\n  fput(fi0s, fj0s, 2 * (Lq + 4) + 1, mLampBit); fput(fi0s + 1, fj0s + 1, 2 * (Lq + 4) + 1, mLampBit);\n  fixing++;\n  const service = { kind: svcKind, use: [sci, scj, Lq + 1], front: [sci, scj - (wr + 1)] };\n  let stall = null, stash = null;\n  const isDoorCell = (i, j) => buildings.some((B) => B.door && B.door[0] === i && B.door[1] === j);\n  if (!aggressive) {\n    const cands = [[q0.i0, q0.j1, q0.i0 + 1, q0.j1], [q0.i0, q0.j0, q0.i0 + 1, q0.j0], [q0.i1, q0.j1, q0.i1 - 1, q0.j1], [q0.i1, q0.j0, q0.i1 - 1, q0.j0]];\n    const okC = ([a, b, c, d]) => st(a, b) === S.PLAZA && !isDoorCell(a, b) && !isDoorCell(c, d) && Math.max(Math.abs(a - sci), Math.abs(b - scj)) > wr + 1;\n    const pc = cands.find(okC);\n    if (pc) { const [si, sj] = pc, 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: [pc[2], pc[3]] }; }\n  }\n  for (const q of squares) {\n    if (q === q0) continue;\n    const ci = q.i0 + 1, cj = q.j0 + 1, gq = g[idx(ci, cj)];\n    if (q.kind === 'green') {   // a green: grass and flowers round a planter\n      fixing--; for (let i = q.i0; i <= q.i1; i++) for (let j = q.j0; j <= q.j1; j++) { if ((i + j) % 3) continue; fput(2 * i, 2 * j, 2 * (g[idx(i, j)] + 1), mFlowers.length ? mFlowers[(i * 7 + j * 3 + 99) % mFlowers.length] : mLeaf); } fixing++;\n      kput(ci, cj, gq + 1, FX('planter')); works.push([q.i0, q.j0]); continue;\n    }\n    if (liq) { 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  // ---- 11. A RHYTHM OF LIGHTS: a lamp post every few kubes along the main streets ----\n  const lamps = [];\n  for (const ln of mains) { let side = 1;\n    for (let s = 2; s < ln.pts.length; s += 4) { const [ci, cj] = ln.pts[s], [di, dj] = stepDir(ln.pts, s);\n      const ei = ci + (dj ? side : 0), ej = cj + (di ? side : 0); if (!inP(ei, ej)) continue; const k = idx(ei, ej);\n      if (ST[k] !== S.MAIN || isDoorCell(ei, ej) || inBand(ei, ej)) { side = -side; continue; }\n      const I = dj ? (side > 0 ? 2 * ei + 1 : 2 * ei) : 2 * ei, J = di ? (side > 0 ? 2 * ej + 1 : 2 * ej) : 2 * ej, y0 = 2 * (g[k] + 1);\n      for (let y = y0; y <= y0 + 6; y++) fput(I, J, y, mRail);\n      fixing--; fput(I - (dj ? side : 0), J - (di ? side : 0), y0 + 6, mRail); fput(I - (dj ? side : 0), J - (di ? side : 0), y0 + 5, mLampBit); fixing++;\n      lamps.push([ei, ej]); stats.lamps++; side = -side; } }\n  fixing--;\n  // ---- 12. 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 !== S.ALLEY && c !== S.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)] === S.ALLEY || ST[idx(i + a * k2, j + b * k2)] === S.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      let band = false; for (let t = 0; t < k2; t++) for (const e of [0, 1]) if (inBand(i + a * t + b * e, j + b * t + a * e)) band = true;\n      if (band) 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) + SP, y2 = 2 * (lvl + 1) + 2 * SP;\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)] === S.ALLEY || ST[idx(ci, cj)] === S.SIDE); };\n    const twoAlong = Array.from({ length: x.k }, (_, t) => laneAt(t, 0) && laneAt(t, 1)).every(Boolean);\n    if (spans < SZ.spans && x.k <= 2 && twoAlong && x.A.n >= 2 && x.B.n >= 2 && farFrom(x) && rng() < 0.6) {\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 < SZ.bridges && twoAlong && x.A.n >= 3 && x.B.n >= 3 && farFrom(x) && rng() < 0.5) {\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      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  // ---- 13. COURTYARDS AND GARDENS: a tree on a living world, a cistern elsewhere; a barrel in the yard ----\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] !== S.GARDEN) continue; const y0 = 2 * (g[k] + 1);\n    for (let a = 0; a <= 1; a++) for (let b = 0; b <= 1; b++) fput(2 * i + a, 2 * j + b, y0, (a + b + i + j) % 3 === 0 && mFlowers.length ? mFlowers[(i * 7 + j * 3 + 99) % mFlowers.length] : mLeaf); }\n  for (const cells of yards) {\n    if (cells.garden) continue;\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) === S.PASS);\n    if (cells.length < 4) 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 { kput(ci, cj, g[idx(ci, cj)] + 1, FX('trough')); }   // a trough (the cistern, a furniture piece)\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; kput(bi, bj, g[idx(bi, bj)] + 1, FX('barrel')); }\n  }\n  fixing--;\n  // ---- 14. ROOMS CUT INTO A CLIFF (the cliff and canyon form): a door and a window on the street at its foot ----\n  const caves = [];\n  for (const cs of caveSites) {\n    const [li, lj] = cs.at, [a, b] = cs.dir, ci = li + a, cj = lj + b, along = [b ? 1 : 0, a ? 1 : 0];\n    if (!inP(ci, cj) || caves.some((c) => Math.abs(c.door[0] - li) + Math.abs(c.door[1] - lj) < 4)) continue;\n    const gl = g[idx(li, lj)];\n    let ok = true;\n    for (let t = -1; t <= 1 && ok; t++) for (let d2 = 0; d2 <= 4; d2++) { const i = ci + along[0] * t + a * d2, j = cj + along[1] * t + b * d2; if (!okPlot(i, j) || builtAt(idx(i, j)) || ST[idx(i, j)] || g[idx(i, j)] < gl + 4) { ok = false; break; } }\n    if (!ok) continue;\n    const hTop = gl + 3;\n    for (let t = -1; t <= 1; t++) for (let d2 = 1; d2 <= 3; d2++) for (let h = gl + 1; h <= hTop; h++) carve.add(ukey(ci + along[0] * t + a * d2, cj + along[1] * t + b * d2, h));\n    for (let h = gl + 1; h <= hTop; h++) carve.add(ukey(ci, cj, h));\n    under.set(ukey(ci + along[0], cj + along[1], gl + 2), mGlass);\n    under.set(ukey(ci + a * 4, cj + b * 4, gl + 2), mLamp);\n    const room = []; for (let t = -1; t <= 1; t++) for (let d2 = 1; d2 <= 3; d2++) room.push([ci + along[0] * t + a * d2, cj + along[1] * t + b * d2]);\n    caves.push({ type: 'cave', kind: 'home', i0: Math.min(...room.map((c) => c[0])), j0: Math.min(...room.map((c) => c[1])), w: a ? 3 : 3, d: 3, door: [li, lj], inside: [ci + a, cj + b], level: gl, n: 1, room, dir: [a, b] });\n  }\n\n  // ---- 15. INTERIORS: stairs between storeys, a lamp in each ceiling, each kind's furniture, the containers, the town's\n  // machines, the residents' beds, seats and benches, and about one building in five a secret ----\n  const containers = [], machines = [], secrets = [], spotsOf = new Map();\n  const STATION = { 'Quantum Assembler': 'quantum-assembler', 'Chemical Synthesizer': 'chemical-synthesizer', 'Induction Smelter': 'induction-smelter' };\n  const homesForRes = buildings.filter((B) => B.front >= 0 && B.door && B.kind === 'home' && !B.pile);\n  const nRes = Math.max(10, Math.min(60, Math.round((homesForRes.length + caves.length) * (size === 'city' ? 1.2 : 1.1))));\n  const homeList = [...homesForRes, ...caves];\n  const perHome = new Map(); for (let k = 0; k < nRes; k++) { const h = homeList.length ? homeList[k % homeList.length] : null; if (h) perHome.set(h, (perHome.get(h) || 0) + 1); }\n  const hF = (B, f) => (B.Y0 >> 1) + (SP >> 1) * f;            // the kube a storey's furniture stands in\n  const isMetal = (piece) => METAL_PIECES.has(piece);\n  // A STOREY'S ROOM: its interior kubes, what is reserved (the door's way in, the stairs and their ends, the openings)\n  function roomOf(B, f) {\n    const rb = roomBounds(B), cells = []; for (let i = rb.i0; i <= rb.i1; i++) for (let j = rb.j0; j <= rb.j1; j++) cells.push([i, j]);\n    return { B, f, cells, used: new Set(), keep: new Set(), h: hF(B, f), rb };\n  }\n  const ck = (i, j) => i + ',' + j;\n  // the room's free cells stay one piece (every door, stair end and piece's front reachable): checked after each piece\n  function connectedOK(rm) {\n    const free = rm.cells.filter(([i, j]) => !rm.used.has(ck(i, j)));\n    if (!free.length) return false;\n    const set = new Set(free.map(([i, j]) => ck(i, j))), seen = new Set([ck(...free[0])]), q = [free[0]];\n    while (q.length) { const [i, j] = q.pop(); for (const [a, b] of D4) { const k2 = ck(i + a, j + b); if (set.has(k2) && !seen.has(k2)) { seen.add(k2); q.push([i + a, j + b]); } } }\n    if (seen.size !== set.size) return false;\n    for (const k2 of rm.keep) if (!set.has(k2)) return false;\n    for (const u of rm.used) { if (rm.walls && rm.walls.has(u)) continue; const [i, j] = u.split(',').map(Number); if (!D4.some(([a, b]) => set.has(ck(i + a, j + b)))) return false; }\n    return true;\n  }\n  const atWall = (rm, i, j) => { if (V20) { if (!rm.cellSet) rm.cellSet = new Set(rm.cells.map(([a, b]) => ck(a, b))); return D4.some(([a, b]) => !rm.cellSet.has(ck(i + a, j + b))); }   // (20: every machine against a wall, the owner's note)\n    return i === rm.B.i0 + 1 || i === rm.B.i0 + rm.B.w - 2 || j === rm.B.j0 + 1 || j === rm.B.j0 + rm.B.d - 2; };\n  // PLACE A PIECE against a wall where it keeps the room open; returns its cell and the free cell before it (its front)\n  function place(rm, code, o = {}) {\n    const order = rm.cells.filter(([i, j]) => !rm.used.has(ck(i, j)) && !rm.keep.has(ck(i, j)) && (o.anywhere || atWall(rm, i, j)))\n      .map(([i, j]) => [i, j, hash01(seed + '#pl' + rm.B.id + ':' + rm.f + ':' + i + ',' + j + ':' + code)]).sort((x, y) => x[2] - y[2]);\n    for (const [i, j] of order) {\n      if (o.tall && kAny(i, j, rm.h + 1)) continue;\n      rm.used.add(ck(i, j));\n      if (!connectedOK(rm)) { rm.used.delete(ck(i, j)); continue; }\n      kput(i, j, rm.h, code); if (o.tall) kput(i, j, rm.h + 1, o.tall);\n      const fr = D4.map(([a, b]) => [i + a, j + b]).find(([a, b]) => rm.cells.some(([x, y]) => x === a && y === b) && !rm.used.has(ck(a, b)));\n      if (fr) rm.keep.add(ck(fr[0], fr[1]));   // (its front stays free: whoever uses it stands there)\n      return { cell: [i, j, rm.h], front: fr ? [fr[0], fr[1], rm.h - 1] : null };\n    }\n    return null;\n  }\n  const lootOn = (B, piece, at, kind, extra) => { if (!at || !at.front) return; containers.push({ id: containers.length, b: B.id, kind: kind || B.kind, piece, cell: at.cell, front: at.front, ...(extra || {}) }); };\n  const machineOn = (B, name, at, kind) => { if (!at || !at.front) return; machines.push({ id: machines.length, b: B.id, name, kind, station: STATION[name] || null, cell: at.cell, front: at.front }); };\n  const spot = (B, kind, at) => { if (!at || !at.front) return; let s = spotsOf.get(B); if (!s) spotsOf.set(B, s = { beds: [], seats: [], works: [], stands: [], fronts: new Set() });\n    if (kind !== 'beds') { const fk = at.front.join(','); if (s.fronts.has(fk)) return; s.fronts.add(fk); } s[kind].push(at); };\n  // the free floor of a home once furnished, each cell a place for one more resident to stand (none on a piece's front or the way in)\n  const standsOf = (B, rm) => { for (const [i, j] of rm.cells) if (!rm.used.has(ck(i, j)) && !rm.keep.has(ck(i, j))) spot(B, 'stands', { cell: [i, j, rm.h], front: [i, j, rm.h - 1] }); };\n  // A STAIR from storey f to f + 1 along a wall: 6 half steps over 3 kubes, a kube wide, entered and left from the side\n  function stairIn(B, f, rmLo, rmHi, prefer) {\n    const w = B.w - 2, d = B.d - 2, alongI = w >= d, longN = alongI ? w : d, shortN = alongI ? d : w;\n    if (longN < 4 || shortN < 2) return null;\n    const rows = prefer === 1 ? [shortN - 1, 0] : [0, shortN - 1];\n    // (entered straight on at its low end: a walker a kube across meets one half step at a time; left from the side or straight on)\n    const starts = []; for (let st0 = 0; st0 + 3 <= longN; st0++) starts.push(st0);\n    for (const r of rows) for (const start of starts) for (const dir of [1, -1]) {\n      if (dir > 0 ? start < 1 : start + 3 > longN - 1) continue;\n      const run = [0, 1, 2].map((t) => (alongI ? [B.i0 + 1 + start + t, B.j0 + 1 + r] : [B.i0 + 1 + r, B.j0 + 1 + start + t]));\n      if (run.some(([i, j]) => rmLo.used.has(ck(i, j)) || rmLo.keep.has(ck(i, j)) || rmHi.used.has(ck(i, j)) || rmHi.keep.has(ck(i, j)))) continue;\n      const cr = r === 0 ? 1 : r - 1;   // the corridor row beside it\n      const lowEnd = dir > 0 ? run[0] : run[2], highEnd = dir > 0 ? run[2] : run[0];\n      const side = (c) => (alongI ? [c[0], B.j0 + 1 + cr] : [B.i0 + 1 + cr, c[1]]);\n      const ax2 = alongI ? [1, 0] : [0, 1], appr = dir > 0 ? [lowEnd[0] - ax2[0], lowEnd[1] - ax2[1]] : [lowEnd[0] + ax2[0], lowEnd[1] + ax2[1]], exit = side(highEnd);\n      for (const c of run) { rmLo.used.add(ck(...c)); rmHi.used.add(ck(...c)); }\n      rmLo.walls = rmLo.walls || new Set(); rmHi.walls = rmHi.walls || new Set(); for (const c of run) { rmLo.walls.add(ck(...c)); rmHi.walls.add(ck(...c)); }\n      rmLo.keep.add(ck(...appr)); rmHi.keep.add(ck(...exit));\n      if (!connectedOK(rmLo) || !connectedOK(rmHi)) { for (const c of run) { rmLo.used.delete(ck(...c)); rmHi.used.delete(ck(...c)); rmLo.walls.delete(ck(...c)); rmHi.walls.delete(ck(...c)); } rmLo.keep.delete(ck(...appr)); rmHi.keep.delete(ck(...exit)); continue; }\n      // the steps (fixtures: they stand on the floor) and the opening over them, a rail across its low end upstairs\n      const Yf = B.Y0 + 6 * f;\n      fixing++;\n      for (let k2 = 0; k2 < 6; k2++) {\n        const t = dir > 0 ? k2 : 5 - k2, u = (alongI ? 2 * (run[0][0]) : 2 * (run[0][1])) + t, v0 = alongI ? 2 * run[0][1] : 2 * run[0][0];\n        for (const v of [v0, v0 + 1]) { const [fi, fj] = alongI ? [u, v] : [v, u]; for (let y = Yf; y <= Yf + k2; y++) fput(fi, fj, y, mFloor); for (let y = Yf + k2 + 1; y <= Yf + 5; y++) fput(fi, fj, y, 0); }\n      }\n      const u0 = (alongI ? 2 * run[0][0] : 2 * run[0][1]) + (dir > 0 ? 0 : 5), v0 = alongI ? 2 * run[0][1] : 2 * run[0][0];\n      // (no rail across its low end: it stood where the head of a walker on the first steps passes)\n      // the opening runs half a kube past the low end, over the head of a walker stepping on to the first step\n      const uX = dir > 0 ? u0 - 1 : u0 + 1;\n      for (const v of [v0, v0 + 1]) { const [fi, fj] = alongI ? [uX, v] : [v, uX]; fput(fi, fj, Yf + 5, 0); }\n      fixing--;\n      return { run, appr, exit, f };\n    }\n    return null;\n  }\n  // VERSION 20, THE U STAIR: a 2 x 2 well in a back corner (the door's side), climbed round and round, one turn a storey.\n  // Its sixteen half-kube columns each carry one step a flight, a slab half a kube thick, at the heights WELL20 gives\n  // (in half kubes over the storey's floor): a walker a kube square going round the well moves half a kube at a time and\n  // climbs half a kube each move, eight moves a turn, four kubes a storey, with two and a half kubes over its head the\n  // whole way (the flight above stands a storey higher in the same columns). It is entered and left from the room beside\n  // it, along the row: in at the front half of the well, out half a kube further back. Every floor gives the well its 4\n  // kubes and keeps the rest (at least 15).\n  //   x: 0..3 toward the side wall; y: 0..3 toward the back wall\n  const WELL20 = [[1, 8, 7, 7], [1, 8, 6, 6], [2, 2, 4, 5], [3, 3, 4, 5]];   // WELL20[x][y]\n  function wellIn20(B, rooms) {\n    const rb = roomBounds(B), fr = B.front >= 0 ? B.front : 0, ddir = fr === 0 || fr === 2 ? 1 : -1, alongJ = fr < 2;\n    const frontRow = fr === 0 ? rb.i0 : fr === 1 ? rb.i1 : fr === 2 ? rb.j0 : rb.j1, back = fr === 0 ? rb.i1 : fr === 1 ? rb.i0 : fr === 2 ? rb.j1 : rb.j0, back2 = back - ddir;\n    const lo = alongJ ? rb.j0 : rb.i0, hi = alongJ ? rb.j1 : rb.i1;\n    if (hi - lo < 2 || Math.abs(back - frontRow) < 2) return null;\n    const hiSide = B.wellSide !== 'lo', cOut = hiSide ? hi : lo, cIn = hiSide ? hi - 1 : lo + 1, cRoom = hiSide ? hi - 2 : lo + 2;\n    const at = (c, r) => (alongJ ? [r, c] : [c, r]);\n    const well = [at(cOut, back2), at(cOut, back), at(cIn, back), at(cIn, back2)];\n    const entry = at(cRoom, back2), exit2 = at(cRoom, back);\n    for (let f = 0; f < rooms.length; f++) { const rm = rooms[f]; rm.walls = rm.walls || new Set(); for (const c of well) { rm.used.add(ck(...c)); rm.walls.add(ck(...c)); }\n      rm.keep.add(ck(...entry)); if (f > 0) rm.keep.add(ck(...exit2)); }\n    // the fine index of x (along) and y (depth) in the well\n    const xF = (x) => (hiSide ? 2 * cIn + x : 2 * cIn + 1 - x), yF = (y) => (ddir > 0 ? 2 * back2 + y : 2 * back2 + 1 - y);\n    const flights = [];\n    fixing++;\n    for (let f = 0; f + 1 < rooms.length; f++) {\n      const Yf = B.Y0 + SP * f;\n      for (const c of well) fbox(2 * c[0], 2 * c[1], Yf, 2 * c[0] + 1, 2 * c[1] + 1, Yf + SP - 1, 0);\n      for (let x = 0; x < 4; x++) for (let y = 0; y < 4; y++) { const a = xF(x), d = yF(y), [fi, fj] = alongJ ? [d, a] : [a, d]; fput(fi, fj, Yf + WELL20[x][y] - 1, mFloor); }\n      flights.push({ run: well, appr: entry, exit: exit2, f });\n    }\n    fixing--;\n    return flights;\n  }\n  const doorway = (B, A) => {   // a way through from a building into its wing: an opening a kube wide and 2.5 tall in both walls\n    let cells = null;\n    if (A.i0 === B.i0 + B.w || B.i0 === A.i0 + A.w) { const j0 = Math.max(A.j0, B.j0) + 1, j1 = Math.min(A.j0 + A.d, B.j0 + B.d) - 2; if (j1 >= j0) { const j = (j0 + j1) >> 1, iA = A.i0 === B.i0 + B.w ? [B.i0 + B.w - 1, A.i0] : [B.i0, A.i0 + A.w - 1]; cells = iA.map((i) => [i, j]); } }\n    else { const i0 = Math.max(A.i0, B.i0) + 1, i1 = Math.min(A.i0 + A.w, B.i0 + B.w) - 2; if (i1 >= i0) { const i = (i0 + i1) >> 1, jA = A.j0 === B.j0 + B.d ? [B.j0 + B.d - 1, A.j0] : [B.j0, A.j0 + A.d - 1]; cells = jA.map((j) => [i, j]); } }\n    if (!cells) return false;\n    for (const [i, j] of cells) fbox(2 * i, 2 * j, B.Y0, 2 * i + 1, 2 * j + 1, B.Y0 + 4, 0);\n    return true;\n  };\n  const SECRET_KINDS = ['wall', 'stair', 'roof'], SECRET_P = Math.min(1, INTERIOR19.secretShare * 1.3);   // (forges and watch posts keep none; some find no room)\n  let secretN = 0;\n  const lampIn = (rm) => { const B = rm.B, ci = B.i0 + (B.w >> 1), cj = B.j0 + (B.d >> 1); if (B.w < 3 || B.d < 3) return;\n    for (const [a, b] of [[0, 0], [-1, 0], [0, -1], [1, 0], [0, 1]]) { const i = ci + a, j = cj + b; if (rm.used.has(ck(i, j))) continue; const up = rm.up; if (up && up.used.has(ck(i, j)) && up.walls && up.walls.has(ck(i, j))) continue;\n      kbox(i, j, rm.h + 2, i, j, rm.h + 2, mLamp); return; } };\n  for (const B of buildings) {\n    if (B.front < 0) { if (B.wingOf != null) doorway(buildings[B.wingOf], B); }\n    if (B.w < 3 || B.d < 3) continue;\n    const rooms = []; for (let f = 0; f < B.n; f++) rooms.push(roomOf(B, f));\n    for (let f = 0; f + 1 < B.n; f++) rooms[f].up = rooms[f + 1];\n    if (B.inside && B.front >= 0) rooms[0].keep.add(ck(B.inside[0], B.inside[1]));\n    if (B.passage) for (const [pi, pj] of B.passage) rooms[0].used.add(ck(pi, pj)), (rooms[0].walls = rooms[0].walls || new Set()).add(ck(pi, pj));\n    // the wings' doorways stay clear\n    for (const A of buildings) if (A.wingOf === B.id || (B.wingOf != null && A.id === B.wingOf)) for (let i = B.i0 + 1; i <= B.i0 + B.w - 2; i++) for (let j = B.j0 + 1; j <= B.j0 + B.d - 2; j++) {\n      if (D4.some(([a, b]) => { const x = i + 2 * a, y = j + 2 * b; return x >= A.i0 && x < A.i0 + A.w && y >= A.j0 && y < A.j0 + A.d && (i + a < B.i0 + 1 || i + a > B.i0 + B.w - 2 || j + b < B.j0 + 1 || j + b > B.j0 + B.d - 2); })) rooms[0].keep.add(ck(i, j)); }\n    // stairs, alternating walls up the building (a forge is one tall room)\n    B.stairs = [];\n    if (V20) { if (B.loggias) for (let f = 1; f < rooms.length; f++) for (const [li, lj] of B.loggias) { rooms[f].used.add(ck(li, lj)); (rooms[f].walls = rooms[f].walls || new Set()).add(ck(li, lj)); }\n      const yd = yardDoorOf(B); if (yd) rooms[0].keep.add(ck(...yd.in));\n      if (B.n >= 2) { const fl = wellIn20(B, rooms); if (fl) B.stairs.push(...fl); }\n      if (B.passage) for (const [pi, pj] of B.passage) { rooms[0].used.add(ck(pi, pj)); (rooms[0].walls = rooms[0].walls || new Set()).add(ck(pi, pj)); }\n      B.floors = rooms.map((rm) => rm.cells.filter(([i, j]) => !(rm.walls && rm.walls.has(ck(i, j)))).length); }\n    else if (B.kind !== 'forge') for (let f = 0; f + 1 < B.n; f++) { const s2 = stairIn(B, f, rooms[f], rooms[f + 1], f & 1); if (!s2) { B.n = Math.min(B.n, f + 1); break; } B.stairs.push(s2); }\n    const kind = B.kind, R0 = rooms[0], top = rooms[rooms.length - 1], beds = perHome.get(B) || 0;\n    const P2 = (rm, piece, o) => (piece === 'wardrobe' ? place(rm, FX(piece), { ...(o || {}), tall: MACH(LOCKER_UPPER19) }) || place(rm, FX('cabinet'), o) : place(rm, FX(piece), o));   // a Locker with its upper half, or a cabinet where two kubes do not fit\n    const fill = (rm, list) => { const out = []; for (const pc of list) { const at = P2(rm, pc); if (at) out.push([pc, at]); } return out; };\n    // A SECRET, about one building in five: a false wall to a cache, a hidden stair to a cellar behind a shelf or a crate,\n    // or a cache on the roof\n    // (before the furniture, so it finds its corner free; if its first kind finds no room, the next)\n    if (kind !== 'forge' && kind !== 'watch' && hash01(seed + '#secret' + B.id) < SECRET_P) {\n      const s0 = kind === 'store' ? 1 : Math.floor(hash01(seed + '#sk' + B.id) * 3);\n      let made = null;\n      for (const sk of [0, 1, 2].map((t) => SECRET_KINDS[(s0 + t) % 3])) { if (made) break;\n      const rb = roomBounds(B);\n      if (sk === 'wall' && rb.i1 - rb.i0 >= 2 && rb.j1 - rb.j0 >= 2) {   // a closet in a corner, behind a kube of wall that slides back\n        const rm = rooms[rooms.length - 1], corners = [[rb.i0, rb.j0, 1, 1], [rb.i1, rb.j0, -1, 1], [rb.i0, rb.j1, 1, -1], [rb.i1, rb.j1, -1, -1]];\n        for (const [ci, cj, a, b] of corners) {\n          const c = [ci, cj], fw = [ci + a, cj], pw = [ci, cj + b];\n          if ([c, fw, pw].some(([i, j]) => rm.used.has(ck(i, j)) || rm.keep.has(ck(i, j)))) continue;\n          rm.used.add(ck(...c)); rm.used.add(ck(...fw)); rm.used.add(ck(...pw)); rm.walls = rm.walls || new Set(); rm.walls.add(ck(...c)); rm.walls.add(ck(...pw)); rm.walls.add(ck(...fw));\n          if (!connectedOK(rm)) { for (const x of [c, fw, pw]) { rm.used.delete(ck(...x)); rm.walls.delete(ck(...x)); } continue; }\n          const mW = B.sty.mWall;\n          kput(pw[0], pw[1], rm.h, mW); kput(pw[0], pw[1], rm.h + 1, mW); kput(fw[0], fw[1], rm.h, mW); kput(fw[0], fw[1], rm.h + 1, mW);\n          const cache = { cell: [c[0], c[1], rm.h], front: [fw[0], fw[1], rm.h - 1] }; kput(c[0], c[1], rm.h, FX('cabinet'));\n          made = { kind: 'wall', b: B.id, cells: [[fw[0], fw[1], rm.h], [fw[0], fw[1], rm.h + 1]], use: [fw[0], fw[1], rm.h], front: null, cache };\n          break;\n        }\n      } else if (sk === 'stair' && rb.i1 - rb.i0 >= 2 && rb.j1 - rb.j0 >= 2 && !B.sty.stilts) {   // a hidden stair down to a cellar, its head walled in, a shelf or a crate the door\n        const rm = R0, alongI = B.w >= B.d, longN = alongI ? rb.i1 - rb.i0 + 1 : rb.j1 - rb.j0 + 1;\n        for (const r of [B.d - 2 - 1, 0]) {\n          const run = [0, 1, 2].map((t) => (alongI ? [rb.i0 + t, r === 0 ? rb.j0 : rb.j1] : [r === 0 ? rb.i0 : rb.i1, rb.j0 + t]));\n          const cr = (c) => (alongI ? [c[0], c[1] + (r === 0 ? 1 : -1)] : [c[0] + (r === 0 ? 1 : -1), c[1]]);\n          const door = cr(run[0]), wallsC = [cr(run[1]), cr(run[2])], endC = null;   // (its door by the stair's head: the high end)\n          if (longN < 4) continue;\n          const all = [...run, door, ...wallsC];\n          if (all.some(([i, j]) => rm.used.has(ck(i, j)) || rm.keep.has(ck(i, j)) || !rm.cells.some(([x, y]) => x === i && y === j))) continue;\n          for (const x of all) rm.used.add(ck(...x)); rm.walls = rm.walls || new Set(); for (const x of all) rm.walls.add(ck(...x));\n          if (!connectedOK(rm)) { for (const x of all) { rm.used.delete(ck(...x)); rm.walls.delete(ck(...x)); } continue; }\n          const mW = B.sty.mWall, lv = B.level;\n          for (const x of wallsC) { kput(x[0], x[1], rm.h, mW); kput(x[0], x[1], rm.h + 1, mW); }\n          const cover = rng() < 0.5 ? 'shelf' : 'crate';\n          kput(door[0], door[1], rm.h, FX(cover)); kput(door[0], door[1], rm.h + 1, mW);\n          // the cellar: the run itself and the room beside it, carved three kubes down, a half-kube floor over it\n          const inRb = ([i, j]) => i >= rb.i0 && i <= rb.i1 && j >= rb.j0 && j <= rb.j1;\n          const cellar = [...run, ...run.map(cr)].filter(inRb);\n          const back = run.map((c) => (alongI ? [c[0], c[1] + (r === 0 ? 2 : -2)] : [c[0] + (r === 0 ? 2 : -2), c[1]])).filter(inRb);\n          const cellCells = [...cellar, ...back];\n          for (const [i, j] of cellCells) { for (const h of [lv - 2, lv - 1, lv]) carve.add(ukey(i, j, h)); fbox(2 * i, 2 * j, 2 * lv + 1, 2 * i + 1, 2 * j + 1, 2 * lv + 1, mFloor); }\n          // the stair down: from the cell behind the door, along the run, six half steps to the cellar floor\n          fixing++;\n          const Yc = 2 * (lv - 2);\n          // (22) A HATCH over the head of the shaft and RUNGS down its outer wall, for the six half steps\n          if (V22) { const hd = run[0], wallD = alongI ? [0, r === 0 ? -1 : 1] : [r === 0 ? -1 : 1, 0];\n            for (const u of [0, 1]) for (const v of [0, 1]) fput(2 * hd[0] + u, 2 * hd[1] + v, 2 * lv + 1, 0);   // (the floor there is the hatch)\n            doors22.push({ b: B.id, kind: 'hatch', cells: [[hd[0], hd[1]]], h0: 2 * lv, out: wallD.map((x) => -x), mat: doorMat22, cellar: true });\n            for (const [h, v] of [[lv - 2, 1], [lv - 1, 1], [lv, 0]]) rungs22.push({ i: hd[0], j: hd[1], h, wall: wallD, v });\n          } else\n          for (let k2 = 0; k2 < 6; k2++) { const t = 5 - k2, base = alongI ? 2 * run[0][0] : 2 * run[0][1], v0 = alongI ? 2 * run[0][1] : 2 * run[0][0];\n            for (const v of [v0, v0 + 1]) { const [fi, fj] = alongI ? [base + t, v] : [v, base + t]; for (let y = Yc; y <= Yc + k2; y++) fput(fi, fj, y, mFloor); for (let y = Yc + k2 + 1; y <= 2 * lv + 1; y++) fput(fi, fj, y, 0); } }\n          fixing--;\n          const cacheC = back.length ? back[0] : cellar[cellar.length - 1];\n          kput(cacheC[0], cacheC[1], lv - 2, FX('cabinet'));\n          const cache = { cell: [cacheC[0], cacheC[1], lv - 2], front: null };\n          const fr = cellCells.find(([i, j]) => Math.abs(i - cacheC[0]) + Math.abs(j - cacheC[1]) === 1 && !run.some((x) => x[0] === i && x[1] === j)) || run[0];\n          cache.front = [fr[0], fr[1], lv - 3];\n          made = { kind: cover === 'shelf' ? 'shelf' : 'trap', b: B.id, cells: [[door[0], door[1], rm.h], [door[0], door[1], rm.h + 1]], use: [door[0], door[1], rm.h], cache, cellar: cellCells.map(([i, j]) => [i, j, lv - 2]) };\n          void endC; break;\n        }\n      } else if (sk === 'roof' && !B.sty.pitched && !mTurf) {   // a cabinet on a flat roof, reached only over the roofs\n        const ri = rb.i0, rj = rb.j1, hR = (B.Y0 + (V20 ? SP * B.n : 6 * B.n + 2)) >> 1;\n        if (!kAny(ri, rj, hR)) { kput(ri, rj, hR, FX('cabinet')); made = { kind: 'roof', b: B.id, cells: [], use: null, cache: { cell: [ri, rj, hR], front: [ri + 1, rj, hR - 1] } }; }\n      }\n      }\n      if (made) { made.id = secrets.length; secrets.push(made); lootOn(B, 'cabinet', made.cache, 'secret', { secret: made.id }); secretN++; }\n    }\n    if (kind === 'home') {\n      const cold = p.climate === 'cold';\n      // (the beds first: a resident a bed, then what room is left)\n      const upper = rooms.slice(1).length ? rooms.slice(1) : [R0];\n      let left = Math.max(1, beds);\n      for (const rm of [...upper, ...(upper[0] === R0 ? [] : [R0])]) { while (left > 0) { const at = P2(rm, 'bed'); if (!at) break; spot(B, 'beds', at); left--; } }\n      for (const [pc, at] of fill(R0, [cold || rng() < 0.6 ? 'hearth' : 'shelf', 'table', 'bench', 'cabinet', 'shelf'])) {\n        if (pc === 'cabinet' || pc === 'shelf') lootOn(B, pc, at); if (pc === 'table' || pc === 'bench') spot(B, 'seats', at); }\n      for (const rm of upper) for (const [pc, at] of fill(rm, [rng() < 0.6 ? 'wardrobe' : 'cabinet', living ? 'planter' : 'cabinet'])) if (pc !== 'planter') lootOn(B, pc, at);\n    } else if (kind === 'workshop') {\n      const own = [['Quantum Assembler', 'station']]; if (p.climate === 'furnace' || p.climate === 'methane') own.push(['Chemical Synthesizer', 'station']);\n      for (const [nm, k2] of own) { const at = place(R0, MACH(nm)); if (at) { machineOn(B, nm, at, k2); spot(B, 'works', at); } }\n      const wb = P2(R0, 'workbench'); if (wb) { machineOn(B, furnitureName19(peopleId, 'workbench'), wb, 'bench'); spot(B, 'works', wb); }\n      for (const [pc, at] of fill(R0, ['crate', 'barrel'])) lootOn(B, pc, at);\n      if (rooms[1]) for (const [pc, at] of fill(rooms[1], ['crate', 'crate', 'barrel'])) lootOn(B, pc, at);\n    } else if (kind === 'forge') {\n      const sm = place(R0, MACH('Induction Smelter')); if (sm) { machineOn(B, 'Induction Smelter', sm, 'station'); spot(B, 'works', sm); }\n      for (const [pc, at] of fill(R0, ['hearth', 'workbench', 'trough', 'shelf'])) { if (pc === 'shelf') lootOn(B, pc, at); if (pc === 'workbench') spot(B, 'works', at); }\n      // the forge hearth's hood and chimney: a column of the base material over the hearth\n    } else if (kind === 'market') {\n      for (const [pc, at] of fill(R0, ['counter', 'crate', 'counter', 'barrel', 'counter', 'crate'])) { if (pc !== 'counter') lootOn(B, pc, at); else spot(B, 'works', at); }\n      if (rooms[1]) { const at = P2(rooms[1], 'cabinet'); lootOn(B, 'cabinet', at); spot(B, 'works', at); }\n    } else if (kind === 'inn') {\n      for (const [pc, at] of fill(R0, ['hearth', 'counter', 'table', 'bench', 'table', 'bench', 'barrel', 'barrel'])) { if (pc === 'barrel') lootOn(B, pc, at); if (pc === 'table' || pc === 'bench') spot(B, 'seats', at); if (pc === 'counter') spot(B, 'works', at); }\n      if (p.climate === 'airless' || p.climate === 'methane') { const at = place(R0, MACH('Suit Dock'), { tall: MACH('Suit Dock Upper') }); if (at) machineOn(B, 'Suit Dock', at, 'dock'); }\n      for (const rm of rooms.slice(1)) { for (let t = 0; t < (rm === top ? 4 : 3); t++) { const at = P2(rm, 'bed'); if (!at) break; machineOn(B, furnitureName19(peopleId, 'bed'), at, 'bed'); spot(B, 'beds', at); } const ch = P2(rm, 'cabinet'); lootOn(B, 'cabinet', ch); }\n    } else if (kind === 'store') {\n      if (V20 && aggressive) { const at = place(R0, mStash); if (at) B.stashAt = at; }   // (20: the raiders' stash first, kept clear like any piece)\n      for (const [pc, at] of fill(R0, ['shelf', 'crate', 'barrel', 'crate', 'barrel', 'shelf', 'crate'])) lootOn(B, pc, at);\n      if (rooms[1]) for (const [pc, at] of fill(rooms[1], ['crate', 'crate', 'barrel'])) lootOn(B, pc, at);\n    } else if (kind === 'watch') {\n      for (const [pc, at] of fill(R0, ['crate'])) lootOn(B, pc, at);\n      if (rooms[1]) { const at = P2(rooms[1], 'bed'); spot(B, 'beds', at); }\n      if (rooms[2]) { const at = P2(rooms[2], 'cabinet'); lootOn(B, 'cabinet', at); }\n      const ci = 2 * B.i0 + B.w, cj = 2 * B.j0 + B.d, yt = B.Y0 + (V20 ? SP * B.n : 6 * B.n + 2); fput(ci - 1, cj - 1, yt, mLamp); fput(ci, cj, yt, mLampBit); fput(ci - 1, cj, yt, mLampBit);\n    }\n    // (20) the workshop's yard: a Workbench and a crate against its walls\n    if (V20 && B.yard) { const yd = yardDoorOf(B), rmY = { B, f: 9, cells: B.yard.slice(), used: new Set(), keep: new Set(yd ? [ck(...yd.out)] : []), h: B.level + 1 };\n      const wb = place(rmY, FX('workbench')); if (wb) { machineOn(B, furnitureName19(peopleId, 'workbench'), wb, 'bench'); spot(B, 'works', wb); }\n      lootOn(B, 'crate', place(rmY, FX('crate'))); }\n    for (const rm of rooms) lampIn(rm);\n    for (const rm of rooms) standsOf(B, rm);   // (a home's first; a fort's raiders live in its workshops and watch posts)\n  }\n  // THE CAVES' ROOMS: a bed, a table, a cabinet (cut-in homes)\n  for (const C of caves) {\n    const rm = { B: { i0: C.i0 - 1, j0: C.j0 - 1, w: 5, d: 5, id: 'c' + caves.indexOf(C) }, f: 0, cells: C.room.slice(), used: new Set(), keep: new Set([ck(C.inside[0], C.inside[1])]), h: C.level + 1 };\n    const Bc = { id: 1000 + caves.indexOf(C), kind: 'home' };\n    for (const pc of ['bed', 'table', 'cabinet']) { const at = place(rm, FX(pc), { anywhere: true }); if (!at) continue; if (pc === 'bed') spot(C, 'beds', at); else if (pc === 'table') spot(C, 'seats', at); else lootOn(Bc, pc, at, 'home'); }\n    standsOf(C, rm);\n  }\n  // THE TEMPLE (the landmark): offering troughs round its hall, the people's crystal (or fire, or tree) in the middle\n  if (lmk && (lmk.form === 'dome' || lmk.form === 'spire')) {\n    const r = lmk.form === 'spire' ? Math.max(3, lmk.w - 2) : lmk.w, ci = 2 * lmk.i0 + lmk.w, cj = 2 * lmk.j0 + lmk.d, hL = lmk.sq.level + 1;\n    const inner = []; for (let i = lmk.i0; i < lmk.i0 + lmk.w; i++) for (let j = lmk.j0; j < lmk.j0 + lmk.d; j++) { let inside = true; for (const [a, b] of [[0, 0], [1, 0], [0, 1], [1, 1]]) { const x = 2 * i + a + 0.5 - ci, z = 2 * j + b + 0.5 - cj; if (x * x + z * z > (r - 2) * (r - 2)) inside = false; } if (inside) inner.push([i, j]); }\n    const rm = { B: { i0: lmk.i0 - 1, j0: lmk.j0 - 1, w: lmk.w + 2, d: lmk.d + 2, id: 'temple' }, f: 0, cells: inner, used: new Set(), keep: new Set(), h: hL };\n    const doorIn = inner.slice().sort((a2, b2) => { const da = lmkDoor === 0 ? a2[0] : lmkDoor === 1 ? -a2[0] : lmkDoor === 2 ? a2[1] : -a2[1], db = lmkDoor === 0 ? b2[0] : lmkDoor === 1 ? -b2[0] : lmkDoor === 2 ? b2[1] : -b2[1]; return da - db; })[0];\n    if (doorIn) rm.keep.add(ck(...doorIn));\n    const Bt = { id: 2000, kind: 'temple' };\n    const nT = Math.min(3, Math.floor((inner.length - 2) / 3));\n    for (let t = 0; t < nT; t++) { const at = place(rm, FX('trough'), { anywhere: true }); if (at) lootOn(Bt, 'trough', at, 'temple'); }\n    if (inner.length >= 9) { fput(ci, cj, 2 * hL, mLmk2); fput(ci - 1, cj - 1, 2 * hL, mLmk2); fput(ci, cj - 1, 2 * hL + 1, mLmk2); fput(ci - 1, cj, 2 * hL + 1, mLmk2); }   // the people's crystal at the heart of a hall that has room for it\n    if (landmark) landmark.hall = inner.length;\n  }\n\n  // ---- 16. STAIRS IN THE STREETS: where a street climbs a kube, a half step in the lower cell's near half ----\n  const bridgeZ = new Map();\n  const STAIRY = new Set([S.ALLEY, S.SIDE, S.MAIN, S.PLAZA, S.TRACK, S.YARD, S.PASS, S.POM, S.WALK, S.WALL, S.EDGE]);\n  const pave = (c) => (c === S.PLAZA || c === S.YARD ? mPlaza : c === S.TRACK || c === S.FIELD ? mGround : mPath);\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])) continue;\n    for (const [a, b] of D4) {\n      const ni = i + a, nj = j + b; if (!inP(ni, nj) || crosses(i, j, ni, nj)) continue; const nk = idx(ni, nj);\n      if (!STAIRY.has(ST[nk]) || g[nk] !== g[k] + 1) continue;\n      const y = 2 * (g[k] + 1), c = pave(ST[k]);\n      let 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      // (a stair turning a corner as it climbs: entered from a lower cell at the side, its step is the quarter away from\n      // that side, so one comes up off the side's step on to this cell's floor, and up again on to the quarter)\n      const low = (a ? [[0, 1], [0, -1]] : [[1, 0], [-1, 0]]).filter(([pa, pb]) => { const li = i + pa, lj = j + pb; if (!inP(li, lj) || crosses(i, j, li, lj)) return false; const lk = idx(li, lj); return STAIRY.has(ST[lk]) && g[lk] === g[k] - 1; });\n      if (low.length === 1) { const [pa, pb] = low[0]; cellsF = cellsF.filter(([A2, B2]) => (a ? B2 === (pb > 0 ? 2 * j : 2 * j + 1) : A2 === (pa > 0 ? 2 * i : 2 * i + 1))); }\n      for (const [A2, B2] of cellsF) if (!fixAt(A2, B2, y)) fput(A2, B2, y, c);\n    }\n  }\n  fixing--;\n  // ---- 17. HEADROOM over every cell one walks on (version 18's rule, 1 x 2 clearances everywhere) ----\n  const WALKF = new Set([S.ALLEY, S.SIDE, S.MAIN, S.PLAZA, S.TRACK, S.YARD, S.PASS, S.POM, S.WALK, S.WALL, S.EDGE]);\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] !== S.PASS)) continue;\n    const z = g[k]; let zHi = z;\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] !== S.PASS)) continue; const zn = g[nk]; if (zn > zHi && zn - z <= 2) zHi = zn; }\n    const yTop = 2 * (zHi + 1) + 4;\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  // the edge walk's two seam columns carry nothing over their paving but what stands on it (no building's part over an edge)\n  if (edge) for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { if (!onSeam(i, j)) continue; const k = idx(i, j), y0 = 2 * (g[k] + 1);\n    for (let a = 2 * i; a <= 2 * i + 1; a++) for (let b = 2 * j; b <= 2 * j + 1; b++) for (let y = y0 + 1; y < FH - FY0; y++) if (fget(a, b, y) && !fixAt(a, b, y)) fput(a, b, y, 0); }\n  // nothing laid into a column's own ground (but where a cellar or a cliff room is cut into it)\n  for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const gk = g[idx(i, j)];\n    for (let h = HLO; h <= gk; h++) { if (carve.has(ukey(i, j, h))) continue; for (let a = 2 * i; a <= 2 * i + 1; a++) for (let b = 2 * j; b <= 2 * j + 1; b++) for (const y of [2 * h, 2 * h + 1]) if (fget(a, b, y)) fput(a, b, y, 0); } }\n  // (22) RUNGS UP A WATCH TOWER to its lookout, and up a wall to a roof cache: a column of a side whose outside is open\n  // ground (never a street side under its eaves), every kube up to the roof, and one on the parapet (the column without a\n  // merlon, so you step over onto the roof).\n  if (V22) {\n    const walkable = (i, j) => okPlot(i, j) && owner[idx(i, j)] < 0 && !wet[idx(i, j)] && (isStreet(ST[idx(i, j)]) || ST[idx(i, j)] === S.YARD || ST[idx(i, j)] === S.NONE || ST[idx(i, j)] === S.FIELD || ST[idx(i, j)] === S.GARDEN);   // (a street, a yard, or the open land or fields round a tower at the edge)\n    const roofCached = new Set(secrets.filter((x) => x.kind === 'roof').map((x) => x.b));\n    for (const B of buildings) { if (B.dead || B.front < 0 || !(B.kind === 'watch' || roofCached.has(B.id))) continue;\n      const R = (B.Y0 + SP * B.n) >> 1, sides = [0, 1, 2, 3].filter((s2) => s2 !== B.front && (B.kind === 'watch' || !(B.faces || []).includes(s2)));\n      let done = false;\n      for (const s2 of sides) { if (done) break; const sm = sideMap(B, s2), along = sm.L >> 1;\n        for (const t of [along >> 1, (along >> 1) - 1, (along >> 1) + 1]) { if (t < 1 || t >= along - 1) continue;\n          const w = sm.at(2 * t, 0), o = sm.at(2 * t, -1), wc = [w[0] >> 1, w[1] >> 1], oc = [o[0] >> 1, o[1] >> 1];\n          if (!walkable(oc[0], oc[1])) continue;\n          if (B.kind === 'watch' && (((wc[0]) + (wc[1])) & 1) === 0) continue;   // (a merlon there)\n          const lo = g[idx(oc[0], oc[1])] + 1, wallD = OUT4[s2].map((x) => -x);\n          // (a notch through any course or sill that stands out of the wall there: the column a climber goes up is open air)\n          for (let fy = 2 * lo; fy <= 2 * R + 1; fy++) for (const u of [0, 1]) for (const v of [0, 1]) fput(2 * oc[0] + u, 2 * oc[1] + v, fy, 0);\n          for (let h = lo; h < R; h++) rungs22.push({ i: oc[0], j: oc[1], h, wall: wallD, v: 1, b: B.id });\n          rungs22.push({ i: oc[0], j: oc[1], h: R, wall: wallD, v: 0, b: B.id });\n          done = true; break; } } }\n  }\n  // ---- 18. INTO KUBES AND BITS: a cell whose eight bits are one material is that kube (furniture and machines only whole) ----\n  const kcell = new Int32Array(WW * HR), bitsL = [], NB = names.map((n, c) => NO_BIT(n) || furnCodes.has(c + 1)), c8 = new Uint8Array(8);\n  const subFor = (c) => (/^Liquid |^Water$/.test(names[c - 1]) ? mGlass : furnCodes.has(c) ? mBeam : 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 Yb = 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 + Yb + (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  // ---- 19. EACH COLUMN'S GROUND, and which are the land's own (outside the outline: natural, untouched) ----\n  const ground = new Uint8Array(WW), natural = new Uint8Array(WW);\n  for (let k = 0; k < WW; k++) {\n    const c = ST[k];\n    if (c === S.NONE && owner[k] < 0) { natural[k] = 1; ground[k] = 0; continue; }\n    ground[k] = owner[k] >= 0 && c !== S.PASS ? mFloor : c === S.WALL ? mPath : c === S.GARDEN || c === S.FIELD ? mGround : c === S.LMK ? mPlaza : c === S.EDGE ? mPath : pave(c);\n    if (V20 && c === S.PLAZA) { const ci = ((k / W) | 0) - N, cj = (k % W) - N; ground[k] = (((ci + 2 * N) >> 1) + ((cj + 2 * N) >> 1)) & 1 ? mPlaza : mPath; }   // (a two-kube checker)\n    if (V20 && c === S.WALK) ground[k] = mBeam;   // (timber boardwalks on the piers)\n  }\n  // ---- 20. WHERE ONE CAN WALK: a street's (a deck'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([S.ALLEY, S.SIDE, S.MAIN, S.PLAZA, S.TRACK, S.YARD, S.PASS, S.POM, S.WALK, S.FIELD, S.WALL, S.EDGE]);\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 = WALKY.has(ST[k]) ? g[k] : null;\n    if (z == null || z + 2 >= HHI || z + 1 < HLO) { 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: the street the first district's main street runs out on, at the town's edge\n  const ok3 = (c) => c && inP(c[0], c[1]) && walk[idx(c[0], c[1])] === walk[idx(c[0], c[1])];\n  let gate = null;\n  { const d = streetDist(), side0 = partOf(q0.ci, q0.cj); let best = null;\n    for (let i = -N; i < N; i++) for (let j = -N; j < N; j++) { const k = idx(i, j); if (!ok3([i, j]) || !LANE.has(ST[k]) || partOf(i, j) !== side0 || d[k] < 0) continue;\n      if (!D4.some(([a, b]) => inP(i + a, j + b) && natural[idx(i + a, j + b)])) continue;\n      const sc = d[k] + (ST[k] === S.MAIN ? 6 : 0) - (reachD[k] === 0 ? 0 : 20); if (!best || sc > best[2]) best = [i, j, sc]; }\n    gate = best ? [best[0], best[1]] : null;\n    if (!gate) for (const c of [service.front, [q0.i0 - 1, q0.cj], [q0.ci, q0.j0 - 1], [q0.i1 + 1, q0.cj]]) if (ok3(c)) { gate = c.slice(0, 2); break; }\n    if (!gate) gate = [q0.ci, q0.j0]; }\n  // THE STASH (aggressive): in the storehouse (its ground floor) or the nearest house to the core square, a kube in a corner\n  if (aggressive && V20) {   // (20) the storehouse's stash, laid with its furniture; else a kube on the core square\n    const Bs = buildings.find((B) => B.stashAt);\n    if (Bs) { const c = Bs.stashAt.cell; kcellSet(c[0], c[1], c[2], mStash); stash = { use: c.slice(), front: Bs.stashAt.front ? Bs.stashAt.front.slice(0, 2) : Bs.door }; Bs.stash = true; }\n    else { const c = [q0.i0, q0.j1]; kbox(c[0], c[1], Lq + 1, c[0], c[1], Lq + 1, mStash); kcellSet(c[0], c[1], Lq + 1, mStash); stash = { use: [c[0], c[1], Lq + 1], front: [q0.i0 + 1, q0.j1] }; }\n  } else if (aggressive) {\n    let best = null;\n    for (const B of buildings) if (B.front >= 0 && B.inside && !B.passage && B.w >= 4 && B.d >= 4 && !B.pile) { const d0 = Math.abs(B.door[0] - q0.ci) + Math.abs(B.door[1] - q0.cj) - (B.kind === 'store' ? 100 : 0); if (!best || d0 < best.d0) best = { B, d0 }; }\n    if (best) { const B = best.B, h = B.Y0 >> 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 cs = side.filter(inR).filter((c) => !kAnyK(c[0], c[1], h));\n      if (cs.length) { const c = cs[0]; kbox(c[0], c[1], h, c[0], c[1], h, mStash); kcellSet(c[0], c[1], h, mStash); stash = { use: [c[0], c[1], h], front: B.door }; B.stash = true; } }\n    if (!stash) { const c = [q0.i0, q0.j1]; kbox(c[0], c[1], Lq + 1, c[0], c[1], Lq + 1, mStash); kcellSet(c[0], c[1], Lq + 1, mStash); stash = { use: [c[0], c[1], Lq + 1], front: [q0.i0 + 1, q0.j1] }; }\n  }\n  function kAnyK(i, j, h) { const v = kcell[((i + N) * W + (j + N)) * HR + (h - HLO)]; return v !== 0; }\n  function kcellSet(i, j, h, c) { kcell[((i + N) * W + (j + N)) * HR + (h - HLO)] = c; }\n  // THE PATROL (walled towns): along the wall's walk from a gate to its farthest point and back\n  let patrol = null;\n  if (walled && gates.length) {\n    const wz = (k) => g[k], isW = (k) => ST[k] === S.WALL && walk[k] === walk[k];\n    let s0 = null; for (const gt of gates) for (const [a, b] of D4) { const i = gt.i + a, j = gt.j + b; if (inP(i, j) && isW(idx(i, j))) { s0 = idx(i, j); break; } if (s0 != null) break; }\n    if (s0 != null) {\n      const from = new Int32Array(WW).fill(-2), q = [s0]; from[s0] = -1; let last = s0;\n      for (let h2 = 0; h2 < q.length; h2++) { const c = q[h2], ci = ((c / W) | 0) - N, cj = (c % W) - N; last = c;\n        for (const [a, b] of D4) { const ni = ci + a, nj = cj + b; if (!inP(ni, nj)) continue; const n = idx(ni, nj); if (from[n] !== -2 || !isW(n) || Math.abs(wz(n) - wz(c)) > 1) continue; from[n] = c; q.push(n); } }\n      const path = []; for (let c = last; c >= 0; c = from[c]) path.push(c);\n      if (path.length >= 8) { const pts = path.reverse().map((c) => [((c / W) | 0) - N + 0.5, (c % W) - N + 0.5, wz(c)]); patrol = pts.concat(pts.slice(0, -1).reverse()); }\n    }\n  }\n  // ---- 21. THE DISTRICTS' NAMES, the city's name ----\n  const cname = cityName19(seed);\n  const pool = { core: [...DISTRICT_WORDS.core], high: [...DISTRICT_WORDS.high], low: [...DISTRICT_WORDS.low], gate: [...DISTRICT_WORDS.gate] };\n  districts.forEach((D, n) => { const h0 = hAt(D.sq.ci, D.sq.cj), mean = districts.reduce((s2, x) => s2 + hAt(x.sq.ci, x.sq.cj), 0) / districts.length;\n    const kk = n === 0 ? 'core' : h0 > mean + 1 ? 'high' : (hasWater && dw[idx(D.sq.ci, D.sq.cj)] < 10) || h0 < mean - 1 ? 'low' : 'gate';\n    const L2 = pool[kk].length ? pool[kk] : pool.gate.length ? pool.gate : DISTRICT_WORDS.gate; D.name = L2.splice(Math.floor(hash01(seed + '#dn' + n) * L2.length), 1)[0] || ('District ' + (n + 1)); });\n  // ---- THE PLAN ----\n  const outB = buildings.map((B) => ({ type: B.front < 0 ? 'wing' : 'house', kind: B.kind, 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, pile: !!B.pile, stairs: (B.stairs || []).length,\n    look: { base: B.sty.base, wall: B.sty.wall, top: B.sty.top }, ...(V20 ? { storey: SP >> 1, room: (() => { const rb = roomBounds(B); return [rb.i0, rb.j0, rb.i1, rb.j1]; })(), floors: B.floors || [], shared: B.sh.filter(Boolean).length, well: B.stairs && B.stairs.length ? B.stairs[0].run.map((c) => c.slice(0, 2)) : null, loggias: B.loggias || null } : {}) })).concat(caves.map((c) => ({ type: 'cave', kind: 'home', i0: c.i0, j0: c.j0, w: c.w, d: c.d, n: 1, level: c.level, door: c.door, inside: c.inside, homeZ: c.level, room: c.room })));\n  for (const B of outB) if (B.district === 'workshop' && B.door) works.push(B.door);\n  let builtN = 0, fieldN = 0; for (let k = 0; k < WW; k++) { if (builtAt(k) || ST[k] === S.WALL) builtN++; if (ST[k] === S.FIELD) fieldN++; }\n  const kinds = {}; for (const B of buildings) if (B.front >= 0) kinds[B.kind] = (kinds[B.kind] || 0) + 1; if (landmark) kinds.temple = 1; if (caves.length) kinds.home = (kinds.home || 0) + caves.length;\n  const plan = { version: V22 ? TOWNS22_SINCE : V21 ? TOWNS21_SINCE : V20 ? TOWNS20_SINCE : TOWNS19_SINCE, people: peopleId, kind: p.kind, size, N, seed, climate: p.climate, form, formUsed, edge, name: cname,\n                 names: Object.freeze(names.slice()), g, H, ground, natural, street: ST, owner, kcell, bits, under, carve, wet, walk, block, water: waterCells, bridgeZ, hlo: HLO, hhi: HHI,\n                 buildings: outB, landmark, service, stall, stash, gate, gates, plazas: squares.map((q) => ({ i0: q.i0, j0: q.j0, i1: q.i1, j1: q.j1, kind: q.kind, level: q.level })), canal: null, cavern: null,\n                 walled, lamps, works, top, fill: M(PM.fill), retain: mRetain, liquid: liq || null,\n                 lanes: lanes.map((l) => ({ cls: l.cls, w: l.w, cells: l.pts.length, from: l.pts[0], to: l.pts[l.pts.length - 1] })), plazaSide: q0.s,\n                 districts: districts.map((D) => ({ name: D.name, square: [D.sq.i0, D.sq.j0, D.sq.i1, D.sq.j1], core: D.core, grown: !!D.grown, level: D.sq.level })),\n                 containers, machines, secrets, signs: V20 ? signs : [], doors: V22 ? doors22 : [], rungs: V22 ? rungs22 : [], kinds, built: builtN, fields: fieldN, target, fieldsCap, reach: reachCost.reduce((s2, v) => s2 + (v >= 0 ? 1 : 0), 0), seam: edge ? { ax: sAx, dir: sDir, e: sE } : null,\n                 stats: { ...stats, buildings: outB.length, cells: nFull, bitCells: nBitCells, bits: nBits, names: names.length, containers: containers.length, machines: machines.length, secrets: secrets.length } };\n  plan.fill = codeOf.get(PM.fill) || M(PM.fill); plan.names = Object.freeze(names.slice());\n  plan.patrol = patrol;\n  plan.spots = spotsOf;\n  plan.residents = residentsOf19(plan, rngOf(key + '#res'), { patrol, wr, homeList, others: buildings.filter((B) => B.front >= 0 && B.door && B.kind !== 'home' && !B.pile), nRes, spotsOf, districts, cells: { idx } });\n  plan.spots = null;\n  // THE CAP HOLDS WHATEVER THE WALL TOOK (cap = built): a town its wall carried past its share is laid out again for less\n  const capT = rec.capT > 0 ? rec.capT : target;\n  plan.cap = capT;\n  if (builtN > capT && !((rec.depth | 0) >= 4)) {\n    const again = planTown19(peopleId, { ...rec, target: Math.max(40, target - Math.max(builtN - capT + 6, V21 ? 260 : 0)), capT, depth: (rec.depth | 0) + 1 });   // (21: a block's worth less at least: blocks come whole)\n    if (again) { plan19Put(key, again); return again; }\n  }\n  plan19Put(key, plan);\n  return plan;\n}\n\n// ---- VERSION 19'S RESIDENTS: version 18's clock-driven rounds (nobody walks into anybody: cells booked in time), and AT\n// HOME by the clock: asleep in their own beds at night, eating at their tables at dawn and dusk, at the inn some evenings,\n// at the bench, the counter or the smelter while at work. Nobody crosses a cube edge on a round (each district keeps its\n// residents on its own face); everything is still a function of the plan, the clock and the sky. --------------------------\nconst seamCross = (plan, ci, cj, ni, nj) => { const sm = plan.seam; if (!sm) return false; const q1 = sm.ax === 0 ? ci : cj, q2 = sm.ax === 0 ? ni : nj; return (q1 < sm.e) !== (q2 < sm.e); };\nexport const seamSideOf = (plan, i, j) => { const sm = plan && plan.seam; if (!sm) return 0; const q = sm.ax === 0 ? i : j; return sm.dir > 0 ? (q >= sm.e ? 1 : 0) : (q < sm.e ? 1 : 0); };\nfunction bfs19(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 || seamCross(plan, ci, cj, ni, nj)) 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 nearestOpen19(plan, i, j) {\n  const N = plan.N, W = 2 * N, walk = plan.walk, side = seamSideOf(plan, i, j);\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 && seamSideOf(plan, x, y) === side) { const k = (x + N) * W + (y + N); if (walk[k] === walk[k]) return [x, y]; }\n  }\n  return null;\n}\nfunction cellPath19(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    for (const [a, b] of D4) { if (seamCross(plan, ci, cj, ci + a, cj + b)) continue; 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}\nconst DAY_MIN19 = 240;\nfunction residentsOf19(plan, rng, o) {\n  const N = plan.N, W = 2 * N, zAt = (c) => plan.walk[(c[0] + N) * W + (c[1] + N)], ok = (c) => !!c && zAt(c) === zAt(c);\n  const homes = o.homeList;\n  // each home's places (its beds, or its seats and free floor, whichever more): its residents no more than those\n  const capOf = (h) => { const sp = o.spotsOf.get(h); return sp ? Math.max(sp.beds.length, sp.seats.length + sp.stands.length) : 0; };\n  // (the homes first, round and round; then, a town short of homes, its other buildings with room)\n  const homeOf = [];\n  for (const list of [homes, o.others || []]) { const left = new Map(list.map((h) => [h, capOf(h)])); let total = 0; for (const v of left.values()) total += v;\n    const want = Math.min(o.nRes - homeOf.length, total);\n    for (let t = 0, got = 0; got < want && t < (want + 1) * list.length; t++) { const h = list[t % list.length]; if (left.get(h) > 0) { left.set(h, left.get(h) - 1); homeOf.push(h); got++; } } }\n  const n = homeOf.length;\n  // each district's own \"plaza point\" (its square's edge): the core's is the service point's front\n  const plazaPts = o.districts.map((D, d) => d === 0 && ok(plan.service.front) ? plan.service.front : nearestOpen19(plan, D.sq.i0 - 1, D.sq.cj) || nearestOpen19(plan, D.sq.ci, D.sq.cj));\n  const toPl = plazaPts.map((pt) => (pt ? bfs19(plan, pt[0], pt[1]) : null));\n  const reachOf = (d, c) => !!c && !!toPl[d] && toPl[d][(c[0] + N) * W + (c[1] + N)] >= 0;\n  const districtOf = (c) => { for (let d = 0; d < plazaPts.length; d++) if (reachOf(d, c)) return d; return -1; };\n  const worksAll = [plan.stall && plan.stall.front, plan.service.front, plan.landmark && plan.landmark.front, ...plan.works].filter(Boolean).map((w) => nearestOpen19(plan, w[0], w[1])).filter(Boolean);\n  const workDist = worksAll.map((w) => bfs19(plan, w[0], w[1]));\n  // the interior work spots, by the door in front of them (a workshop's machines, a counter, the smelter)\n  const inSpots = new Map();\n  for (const [B, s] of o.spotsOf) { if (!B.door || !s.works.length) continue; const dk = nearestOpen19(plan, B.door[0], B.door[1]); if (dk) inSpots.set(dk[0] + ',' + dk[1], s.works.map((x) => x.front).filter(Boolean)); }\n  const inSpotUsed = new Map();\n  const innB = [...o.spotsOf.keys()].find((B) => B.kind === 'inn'), innSeats = innB ? o.spotsOf.get(innB).seats.map((x) => x.front).filter(Boolean) : [];\n  let innUsed = 0;\n  const wr = o.wr, sci = plan.service.use[0], scj = plan.service.use[1], rr = wr + 1;\n  const ring = [];\n  { const okR = (() => { for (let t = -rr; t <= rr; t++) for (const [i, j] of [[t, -rr], [t, rr], [-rr, t], [rr, t]]) if (!ok([sci + i, scj + j])) return false; return true; })();\n    if (okR) { for (let t = -rr; t < rr; t++) ring.push([sci + t, scj - rr]); for (let t = -rr; t < rr; t++) ring.push([sci + rr, scj + t]); for (let t = rr; t > -rr; t--) ring.push([sci + t, scj + rr]); for (let t = rr; t > -rr; t--) ring.push([sci - rr, scj + t]); } }\n  const slotIn = new Map();\n  const rounds = [];\n  for (let k = 0; k < n; k++) {\n    const home = homeOf[k] || null;\n    let dk = home && home.door ? nearestOpen19(plan, home.door[0], home.door[1]) : null;\n    let d = districtOf(dk); if (d < 0) { d = 0; dk = plazaPts[0]; }\n    const plazaPt = plazaPts[d] || plazaPts[0];\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    // its own bed and seat at home, by its place among the home's residents\n    const slot = slotIn.get(home) || 0; slotIn.set(home, slot + 1);\n    const sp = home ? o.spotsOf.get(home) : null;\n    const bedAt = sp && sp.beds[slot] ? sp.beds[slot].cell : null, seatAt = sp && sp.seats[slot] ? sp.seats[slot].front : sp && sp.stands[slot - sp.seats.length] ? sp.stands[slot - sp.seats.length].front : null;\n    let steps = null, workIn = 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 p2 = cellPath19(plan, dist, from[0], from[1]); return p2 ? p2.map((c) => [c, 0, null]) : null; };\n    if (role === 'patrol') steps = o.patrol.slice(0, -1).map((p2) => [[Math.floor(p2[0]), Math.floor(p2[1])], 0, 'patrol']);\n    else if (role === 'errand' && worksAll.length && dk) {\n      const cands = worksAll.map((w, wi) => [w, wi]).filter(([w, wi]) => districtOf(w) === d && workDist[wi][(dk[0] + N) * W + (dk[1] + N)] >= 0);\n      if (cands.length) {\n        const [wpt, wi] = cands[(k >> 1) % cands.length], toW = workDist[wi], toHome = bfs19(plan, dk[0], dk[1]);\n        const a = leg(toW, dk), b = leg(toHome, wpt);\n        if (a && b) { a[a.length - 1][1] = dwellW; a[a.length - 1][2] = 'work'; steps = join(a, b);\n          const key = wpt[0] + ',' + wpt[1], list = inSpots.get(key); if (list) { const u = inSpotUsed.get(key) || 0; if (u < list.length) { workIn = list[u]; inSpotUsed.set(key, u + 1); } } }\n      }\n    }\n    if (!steps && dk) {\n      role = role === 'errand' ? 'loop' : role;\n      const toHome = bfs19(plan, dk[0], dk[1]);\n      if (d === 0 && ring.length) {\n        const e = (k * 5) % ring.length, ring2 = [...ring.slice(e), ...ring.slice(0, e), ring[e]], toRing = bfs19(plan, ring[e][0], ring[e][1]);\n        const a = leg(toRing, dk), b = leg(toHome, ring[e]);\n        if (a && b) steps = join(a, ring2.map((c, t) => [c, t % rr === 0 ? 3 : 0, 'rest']), b);\n      } else if (plazaPt) { const a = leg(toPl[d], dk), b = leg(toHome, plazaPt); if (a && b) { a[a.length - 1][1] = 5; a[a.length - 1][2] = 'rest'; steps = join(a, b); } }\n    }\n    const innGoer = plan.kind !== 'aggressive' && k % 5 === 1 && innUsed < innSeats.length ? innSeats[innUsed++] : null;\n    rounds.push({ k, role, home, dk: dk || plazaPts[0] || plan.gate, speed, phase, nightOut, sleepAt, steps, bedAt, seatAt, workIn, innAt: innGoer, d });\n  }\n  // the day, and the reservations (version 18's)\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_MIN19, 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, dd] of L) for (const s of [-T, 0, T]) if (a < dd + s && c + s < b && (!hit || c + s < hit[0])) hit = [c + s, dd + 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  patrols.forEach((r, p2) => {\n    const L = r.steps.length, tc = tau(r), off = (p2 * L / patrols.length) * tc;\n    for (let lapK = 0; lapK * lap < T - 1e-9; lapK++) for (let m = 0; m < L; m++) { const t0 = off + lapK * lap + m * tc; hold(keyOf(r.steps[m][0]), t0 - tc, t0 + tc); }\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  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 S2 = r.steps, tc = tau(r), MAXW = 12, L = S2.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      let m = 0, okR = true, guard = 0;\n      while (m < L) {\n        if (++guard > 40 * L) { okR = false; break; }\n        const cur = S2[m][0], kc = keyOf(cur), ready = arriveA[m] + S2[m][1];\n        if (m === L - 1) { const h = clash(kc, enterA[m], ready + MARGIN); if (!h) { depA[m] = ready; m++; continue; } if (m === 0) { okR = false; break; } minDep[m - 1] = Math.max(minDep[m - 1], h[1] + MARGIN); m--; continue; }\n        const nx = S2[m + 1][0], kn = keyOf(nx), need = tc + S2[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) { okR = 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) { okR = false; break; }\n        }\n        if (!okR) 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) { okR = false; break; }\n      }\n      if (!okR) 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 = S2[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: S2[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: S2[q][2] || (depA[q] > arriveA[q] + S2[q][1] + 1e-9 ? 'wait' : 'rest') });\n        segs.push({ t: depA[q], dur: tc, a: cur, b: S2[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    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  const out = [];\n  const spotPt = (c, lift) => (c ? [c[0] + 0.5, c[1] + 0.5, c[2] + (lift || 0)] : null);\n  for (const r of rounds) {\n    const home = r.home, homeZ = home ? (home.homeZ != null ? home.homeZ : home.sty && home.sty.stilts ? home.level + 1 : home.level) : zAt(r.dk);\n    const base = { k: r.k, role: r.role, home: home ? (home.inside || home.door) : r.dk, homeZ, door: r.dk, jx: 0, jy: 0, speed: r.speed, phase: 0, nightOut: r.nightOut, sleepAt: r.sleepAt, day: T, district: r.d,\n      bed: r.bedAt ? [r.bedAt[0] + 0.5, r.bedAt[1] + 0.5, r.bedAt[2]] : null, seat: spotPt(r.seatAt), workIn: spotPt(r.workIn), inn: spotPt(r.innAt) };\n    if (!r.out) { const p2 = [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: p2, b: p2, stop: true, inside: true, act: 'home' })]), cycle: T })); continue; }\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// WHERE RESIDENT `k` OF A VERSION 19 PLAN IS at `ms` (alien-peoples.mjs residentAt asks this for a version 19 plan). `light`\n// as residentAt's: the sine of the sun's height at the town (a number) or whether it is night (a boolean).\nconst EAT_BAND = 0.14;\nexport function residentAt19(plan, k, ms, light) {\n  const r = plan && plan.residents[k];\n  if (!r) return null;\n  const thr = 0.1 - r.sleepAt * 0.8, num = typeof light === 'number';\n  const asleep = num ? light < thr : !!light;\n  const at = (c, act, lying, hx = 0, hy = 1) => ({ x: c[0], y: c[1], z: c[2], hx, hy, act, inside: true, moving: false, lying: !!lying });\n  if (!r.nightOut && asleep) { if (r.bed) return at(r.bed, 'sleep', true); if (r.seat) return at(r.seat, 'sleep'); return { 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  // dawn and dusk: at the table (some evenings at the inn's)\n  if (!r.nightOut && num && light >= thr && light < thr + EAT_BAND) { const c = r.inn || r.seat; if (c) return at(c, r.inn ? 'inn' : 'eat'); }\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  if (g.inside) { if (r.seat) return at(r.seat, 'home'); if (r.bed) return at(r.bed, 'rest', true); 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  if (g.stop && g.act === 'work' && r.workIn) return at(r.workIn, 'work');\n  const x = g.a[0] + (g.b[0] - g.a[0]) * f, y = g.a[1] + (g.b[1] - g.a[1]) * f, za = g.a[2] || 0, z = za + ((g.b[2] || 0) - za) * f;\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 ? 'rest' : r.role === 'patrol' ? 'patrol' : 'walk';\n  return { x, y, z, hx: hx / hl, hy: hy / hl, act, inside: false, moving: !g.stop };\n}\n\n// ---- WHAT A CONTAINER HOLDS (loot = containers; refill = per player, each world-day) ------------------------------------\n// The same 1 to 3 stacks for every player on world-day `day`; the record of who took what is the server's (alienDone).\nexport function lootOf19(peopleId, addr, townK, plan, cid, day) {\n  const p = peopleById(peopleId), c = plan && plan.containers && plan.containers[cid];\n  if (!p || !c) return [];\n  const tbl = LOOT19[c.secret != null ? 'secret' : c.kind] || LOOT19.home, list = tbl(p, PEOPLE_WOOD[peopleId] || 'Verge Wood', PEOPLE_MATERIALS[peopleId].ground);\n  const r = rngOf(String(addr) + '#loot19-' + townK + '-' + cid + '-' + day), [lo, hi] = INTERIOR19.lootStacks;\n  const n = lo + Math.floor(r() * (hi - lo + 1)), out = [], used = new Set();\n  for (let t = 0; t < n && used.size < list.length; t++) {\n    let k = Math.floor(r() * list.length); while (used.has(k)) k = (k + 1) % list.length; used.add(k);\n    const [name, a, b] = list[k], cnt = (a + Math.floor(r() * (b - a + 1))) * (c.secret != null ? 2 : 1);\n    out.push({ n: name, c: cnt });\n  }\n  return out;\n}\nexport const lootKey19 = (addr, townK, cid, day) => `${String(addr).replace(/\\./g, '_')}|${townK}|${day}|loot${cid}`;\n\n// ---- A PLAN'S OWN SOLIDS (for a line of sight through the town) --------------------------------------------------------\n// Whether plot point (x, y, z) (plan coordinates: x, y the plot's i and j, z the height over the plaza's top, fractional)\n// is inside something solid of the town: a kube, a bit, or the ground under a column (but where a room is cut into it).\nexport function planSolidAt19(plan, x, y, z) {\n  const N = plan.N, i = Math.floor(x), j = Math.floor(y);\n  if (i < -N || i >= N || j < -N || j >= N) return false;\n  const k = (i + N) * 2 * N + (j + N), h = Math.floor(z) + 1;   // (the cell whose span holds height z: cell h spans z in [h − 1, h))\n  const HRp = plan.hhi - plan.hlo, inK = h >= plan.hlo && h < plan.hhi;\n  const v = inK ? plan.kcell[k * HRp + (h - plan.hlo)] : 0;\n  if (h <= plan.g[k] && !(plan.carve.size && plan.carve.has(i + ',' + j + ',' + h))) return true;\n  if (v > 0) return true;\n  if (v < 0) { const q = ((Math.floor(2 * x) - 2 * i) << 2) | ((Math.floor(2 * y) - 2 * j) << 1) | (Math.floor(2 * (z + 1)) - 2 * h); return plan.bits[(-v - 1) * 8 + (q & 7)] > 0; }\n  return false;\n}\n// ---- SEEN TAKING (seen = sight): which residents see a player at plot point `pt` (feet) at `ms` under `light`: awake,\n// within 12 kubes, inside a 140 degree view of where they face, and a clear line from eye to eye through the town ----\nexport function seenBy19(plan, ms, light, pt) {\n  const out = [];\n  if (!plan || !plan.residents || !Array.isArray(pt)) return out;\n  const R2 = INTERIOR19.seenReach * INTERIOR19.seenReach;\n  for (let k = 0; k < plan.residents.length; k++) {\n    const a = residentAt19(plan, k, ms, light); if (!a || a.act === 'sleep' || a.lying) continue;\n    const dx = pt[0] - a.x, dy = pt[1] - a.y, dz = pt[2] - a.z, d2 = dx * dx + dy * dy + dz * dz;\n    if (d2 > R2) continue;\n    const dh = Math.sqrt(dx * dx + dy * dy);\n    if (dh > 0.3 && (dx * a.hx + dy * a.hy) / dh < INTERIOR19.seenCos) continue;\n    // the line, eye (1.2 over its feet) to eye (1.5 over the player's), a step every half bit\n    const e0 = [a.x, a.y, a.z + 1.2], e1 = [pt[0], pt[1], pt[2] + 1.5], L = Math.sqrt((e1[0] - e0[0]) * (e1[0] - e0[0]) + (e1[1] - e0[1]) * (e1[1] - e0[1]) + (e1[2] - e0[2]) * (e1[2] - e0[2])), n = Math.ceil(L * 4);\n    let clear = true;\n    for (let s = 1; s < n && clear; s++) { const t = s / n; if (planSolidAt19(plan, e0[0] + (e1[0] - e0[0]) * t, e0[1] + (e1[1] - e0[1]) * t, e0[2] + (e1[2] - e0[2]) * t)) clear = false; }\n    if (clear) out.push(k);\n  }\n  return out;\n}\n// The two nearest of resident `k` (a neutral who saw: it and its two nearest turn, as a bump does)\nexport function seenGroup19(plan, k, ms, light) {\n  const me = residentAt19(plan, k, ms, light); if (!me) return [];\n  const rest = [];\n  for (let j = 0; j < plan.residents.length; j++) { if (j === k) continue; const o = residentAt19(plan, j, ms, light); if (o && o.act !== 'sleep') rest.push([j, (o.x - me.x) * (o.x - me.x) + (o.y - me.y) * (o.y - me.y) + (o.z - me.z) * (o.z - me.z)]); }\n  rest.sort((a, b) => a[1] - b[1] || a[0] - b[0]);\n  return [k, ...rest.slice(0, INTERIOR19.seenSpread).map((r) => r[0])];\n}\n"],"mappings":"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","names":["b2","q","a","b","g","top","h","H","nFull","q0","prev","i","j","ds","target","f","d","edge","dw","piers","ab","ci","cj","free","v0","R","out","leg","segs","act","hx","hy"],"file":"alien-towns.mjs"}