PulseCore

Chapter 10 · Section 13

The Dive: A Child Universe

  1. The player taps a well and chooses to play its child (playChild(), Part 3.15). A failed child cannot be played.
  2. The child is one generation on: its generation is the parent's plus one, and its level is its own, read from its well's share (Level from Share, Part 1.13), rounded for the physics. Its heritage H is its lineage's.
  3. It inherits its well's spin: the parents' spins, mass ratio and merger angle of a merged well, or the well's own spin. Its poles start at centre.
  4. Its language is inherited: the parent's dialect and running routines are carried as its origin (Part 7.13).
  5. The universe is described again at the child's level, and the field resized.
  6. The child's pinpoint is its parent well's information (Return to Bifurcation): the basin that returned through the well is laid across the child's whole field, each child cell reading the basin at its place, and the rest of the sphere is filled outward from the nearest of it, so the child's whole pinpoint holds the parent's data. A child from a packet, with no basin, opens on a nova burst instead.
  7. The child plays at once: Start is pressed for it, and the run begins again from Part 10.3.

The code:

// public/game-v8.4/app.js:3361 playChild()
childDepth = Number.isFinite(ch.depth) ? ch.depth : null;   /* its level from its own well (Level from Mass) */
childGeneration = (uni.generation ?? 0) + 1; childLegacyL = ch.L;
childH = Number.isFinite(ch.H) ? ch.H : null;
…
recomputeUniverse();
…
    for (let r = 0; r < rows; r++) for (let c = 0; c < cols; c++) {
        const sr = Math.round(((r - cr) * E) / (rows / 2)), sc = Math.round(((c - cc) * E) / (cols / 2));
        const v = map.get(sr * 65536 + sc); if (!v) continue;
        grid[r][c] = v[0]; pulserGrid[r][c] = 1; colorGrid[r][c] = v[1]; placed++;
    }
…
start();   // the child plays at once