PulseCore

Chapter 10 · Section 8

Every Step of the Universe's Life

From the Data Nova to the final well, every flip runs the cell rule and then, in this order (updateCore()):

  1. The drag: the spin's frame drags the field round its centre (Part 2.10).
  2. The spin through the nova: the pinpoint's spin is carried into the torus; the inside-out turn moves the data outward, so its rate falls to 0.8 of the pinpoint's, and as the universe grows it falls as 1/scale² (the skater's arms going out).
  3. The flow (flowSlice()): the data circulates round the torus at light speed. Data crossing the throat passes through the Source and out again, and is counted.
  4. The wells (stepWells()): each well, and from the Physical Nova each heavy cluster of matter, turns the data round it at its Kepler rate and draws it in; with many wells, each reaches out to half the way to its nearest neighbour (Part 3.11).
  5. The core (stepInner(), stepInnerGas()): empty since the Data Nova.
  6. The lattice (rideLattice()): the scaffold turns with the data's spin. Between the Data Nova and the Physical Nova the torus draws in toward the pin head, faster as the Physical Nova nears.
  7. The matter (stepMatterTo()): four sub-steps of gravity a flip, once matter exists (Part 4.1).
  8. A life sample every fourth flip, for the record.
  9. The dilation: the scale grows from 1 at birth toward 2f at the final well, 1 + (2f − 1) · n / 2^L (Dilation Toward the Final Well, Part 2.11).
  10. The mergers: after the matter moves, two wells whose horizons touch, or that are bound and within reach, merge into one at their centre of mass, shedding a share of their mass as gravitational waves; the merged well's spin and its child's signature are read from the merger (mergeWells(), Part 3.10). One merger a step. (stepOrbits() still runs here, but the paired-orbit code that would fill it is switched off, so it does nothing; Part 3.5.)
  11. The finds (stepFinds()): states, strings and the wells' rings are watched for (Chapter 7).
  12. The checks: if the life is over, the rupture (Part 10.11); otherwise, if the next harmonic is due, its nova (Part 10.10).

The code:

// public/game-v8.4/app.js:4518 updateCore(), the universe's step
flowSlice(dt);
stepWells();
stepInner();
stepInnerGas();
rideLattice(dt);
stepMatterTo(1); matterSubDone = 0; matterWant = 0;
if (pulseCounter % 4 === 0) lifeSample();
scale = dilation(universePulses(), uni.L, uni.f);
if (scene) scene.setScale(scale);
applyVoid();
stepOrbits();
stepFinds();

// public/game-v8.4/engine.js:113 dilation()
export function dilation(n, L, f) {
    const cap = Math.pow(2, L);
    const x = Math.max(0, Math.min(1, cap > 0 ? n / cap : 1));
    return 1 + (2 * f - 1) * x;
}