PulseCore

Chapter 10 · Section 5

The Pulsecore Fills

While the epoch is "singularity", each flip runs the cell rule on the Pulsecore's skin and then moves the data inside it (stepPinpoint(), Parts 2.4 and 2.5).

  1. The data within grows as a square. After n whole Tempos the Pulsecore holds N = (n + 1)² bits (dataWithin()); the first frame only starts the clock.
  2. The data moves inside at light speed, a point for each Zinf bit up to 8,000 points, bouncing off the Bifold, the Pulsecore's skin, about twice a flip.
  3. The skin turns with the spin: its equator moves v∂ of light speed, v∂·π radians a flip, dragging the data with it.
  4. Every bit carries its null. Before the Null Nova the nulls are held inside, packed into the room the data has not taken: ρ∅ = N / (χ∂ − N), where χ∂ = 16 · 4^L is the skin's capacity, the Local Cell Count.
  5. The game says what is happening as the core fills: "data in motion", "null filling the core" at a quarter of capacity, "Null Nova near" at 45%.

The method, in plain steps:

each flip while the epoch is "singularity":
    run the cell rule on the skin
    n ← whole Tempos so far;  N ← (n + 1)²
    move N data points inside at light speed, turning with the skin
    if N ≥ χ∂ / 2 and no nova yet → the Null Nova

The code:

// public/game-v8.4/pinpoint.js:36–42
export function skinCapacity(L) { return 16 * Math.pow(4, Math.max(0, L)); }
export function dataWithin(n) { return (n + 1) * (n + 1); }
export function novaTempo(L) { return Math.ceil(Math.sqrt(skinCapacity(L)) - 1); }

// public/game-v8.4/app.js:505 stepPinpoint()
const n = Math.floor(pulseCounter / 2);   // Tempos processed: the laws count Tempos
skinTurn += Math.PI * skinSpeed(uni.a_f); skinAngle = skinTurn % (2 * Math.PI);
const res = pinGas.step(n, uni.a_f, skinAngle, { lit: grid, pulser: pulserGrid, color: colorGrid, exposure: exposureGrid });

// public/game-v8.4/app.js:4331 novaCapacity()
if (novaCount === 0) return cap / 2;                    // the Null Nova: data and null, one each, fill the Pulsecore
if (epoch === 'singularity') return cap;                // the Data Nova: the data alone outgrows the Bifold