PulseCore

Chapter 10 · Section 1

The Page Loads

  1. The page opens and holds a loading screen until the first frame is drawn.
  2. The settings take their defaults.
    • 2.1 The level is 28: the band where most of a lineage's children keep their stars.
    • 2.2 The genesis channel is set to Kerr–Kerr, our own origin, two spins of 0.998.
    • 2.3 The spin axis is 30°, the anisotropy 0.35, the heritage f₀ ours, the mass class 1.
    • 2.4 Grid lines on; phase colours, sound and centring off.
    • 2.5 The pace is paced: the Pulsecore's filling plays in about 20 seconds and the universe's life in about 100, at every level.
  3. The 3D scene is built (Scene3D, scene3d.js). If the device cannot draw it, the game falls back to the flat 2D field.
  4. The universe is described from its level (recomputeUniverse(), Part 1.1): the level's clock, constants, life and progeny (describeUniverse(), Parts 1.3 to 1.9), and the scale model: a level deeper than 6 (4 on a phone) is drawn at the model level, the physics staying at the true one (Part 1.10).
  5. The field takes its size, 4 · 2^L cells a side at the model level (the Local Cell Count, Part 1.8): 256 × 256 on a desktop, 64 × 64 on a phone.
  6. The epoch is set to "pre": a Pulsecore waiting for its information.
  7. A random genesis is drawn (randomizeGenesis()): each parent's spin between 0 and 0.998, a mass ratio between 0.2 and 1, a merger angle between 0° and 90°, an axis between 0° and 360°, the poles at centre. The channel becomes "custom", so the Kerr–Kerr default of step 2.2 is replaced at once.
  8. A random pinpoint is painted (randomizeGrid() then bakeRandomChild()): a smooth field of one parent's colours, or of two parents' when the mass ratio is above 0.05, every cell a pulser in phase 0 or 1. The state line reads "the child of one parent · press Start" (or of two).
  9. The loading screen lifts.

The method, in plain steps:

on page load:
    set the level to 28 and the pace to "paced"
    describe the universe from its level           (clock, constants, life, progeny)
    size the field: 4 · 2^Lm cells a side, Lm = min(L, 6 desktop | 4 phone)
    epoch ← "pre"
    draw a random genesis (spins, mass ratio, angle, axis)
    paint a random pinpoint from that genesis

The code:

// public/game-v8.4/app.js:5444 init()
gridSize = isMobile ? 64 : 256;
if (uLevel) { uLevel.value = '28'; … }
if (uChannel) { uChannel.value = 'kerrkerr'; applyChannel('kerrkerr'); }
…
recomputeUniverse();
…
setEpoch('pre');
randomizeGrid();
if (!(… /[?&]packet=/.test(location.search))) { randomizeGenesis(); bakeRandomChild(); }

// public/game-v8.4/app.js:4281 the model level
function MODEL_LEVEL() { return isPhone() ? 4 : 6; }

// public/game-v8.4/app.js:2031 recomputeUniverse(), the field's size
const side = Math.max(4, Math.min(1024, U.viewSide(uni.Lm)));

// public/game-v8.4/universe.js:232
export function viewSide(N) { return 4 * Math.pow(2, N); }