PulseCore

Chapter 10 · Section 11

The Final Well

  1. At 2^L of its own Tempos after the big bang, the universe forms its final well (the Rupture Rule, Part 1.7).
  2. Wells still orbiting would fall together here; with the paired orbits switched off (Part 3.5) there are none, and the last merger has already happened in the matter step.
  3. The census (takeCensus(), Part 3.14): every well, physical and data, is ranked by mass, and each child's depth is read from its well's share of the universe's matter, L_child = L + log₂(8.1 · share / multiplicity) (Ascendant Wells).
  4. The children are listed, the first twelve by rank; a merged well's child is the merger's, with the merger's spins. The rest are made when the player taps their wells.
  5. Each child's outcome is drawn from the Reproductive Outcome Distribution: viable 67%, chaotic 18%, a branch-line offshoot 9%, failed 6% (Part 1.12). The draw is a hash of the lineage's step count, the well and the wells' birth times, so a replay draws the same.
  6. The field at the final well is kept, so any well's child can be made later.
  7. Credits: each well is worth the frame ratio s of the universe that made it.
  8. The universe is saved with its record: children, wells, the law's progeny 2^(L/3) against the census, folds, credits.
  9. The return begins.

The code:

// public/game-v8.4/app.js:4518 updateCore()
if (uni && epoch === 'universe' && !ruptured && !reverse && universePulses() >= lifeEndTempo()) { rupture(); return; }

// public/game-v8.4/app.js:2538 rupture()
lifeSample(); takeCensus('final well');
lineage.children = [];
for (const e of (census ? census.entries : [])) {
    if (lineage.children.length >= 12) break;
    …
    lineage.children.push(childOfEntry(w, mg));
}
lineage.children.forEach((ch, i) => { ch.index = i + 1; const o = childOutcome(uni.gen ?? uni.L, ch.fromWell, i); ch.outcome = o.key; ch.failed = o.key === 'failed'; applyCensus(ch); });
…
credits = lineage.total * uni.s;
…
dissipating = { start: pulseCounter, frames: DISSIPATE_FRAMES, tick: 0, k: 0 };

// public/game-v8.4/app.js:957 takeCensus(), a child's depth
const depth = share > 0 ? L0 + Math.log2(ASCENDANT_RATIO * share / mult) : -Infinity;

// public/game-v8.4/universe.js:184 the outcomes
export const OUTCOMES = [
    { key: 'viable',  p: 0.67, name: 'viable' },
    { key: 'chaotic', p: 0.18, name: 'chaotic' },
    { key: 'branch',  p: 0.09, name: 'branch-line offshoot' },
    { key: 'failed',  p: 0.06, name: 'failed' }
];