PulseCore

Chapter 1 · Section 1

One Number and Its Four Readings

This Part is an overview. It names the numbers the code keeps for each universe. The laws that use them come in later Parts.

The BPT law

BPT Chapter 1, Part D.3 (the Rupture Rule), makes L the universe's age at rupture counted in its own Planck pulses: L = log₂(t↯ / ①⥂⧗⌂). In the book's words, "L is cosmological. It is not derived from the constants and not tuned; it is the universe's age at rupture counted in its own Planck pulses." BPT Part 3.14 (Level and Generation) then separates two numbers that the early book treated as one. The level is the physics: "the level L in every physical law is read from that information: its places, its life of 2^L Tempos, its Level Λ Law, its matter, its stars and its wells." The generation counts the bifurcations between a universe and the Zinf, and the two are independent: "a universe of the eightieth generation can stand at level 25, and ours, at level 202, may be of the four-thousandth." BPT Part 2.8 (Level and Lineage Clock) places each in the clock, ①⥂⧗⌂ = ℨ · 2^L · H: the Zinf and the doubling belong to the level, and the heritage H belongs to the generations that really were.

The established physics

None: a game method. The split into several numbers is bookkeeping that follows the BPT rulings.

The game's math

The record uni (app.js:1977) is built in recomputeUniverse() app.js:2025. It carries these level-like numbers:

Field Meaning Set where
uni.depth the exact level, possibly fractional, read from the seeding well's share (Level from Share). Matter, stars and the census use it. app.js:2027, set on uni at :2035; from childDepth, else the slider value
uni.L the physical level, round(depth). The field, the clock, the novas and the laws run on whole levels. app.js:2029 (g.L, passed to describeUniverse())
uni.generation the bifurcations since a hand-chosen genesis (generation 0) app.js:2035; playChild() sets parent + 1 (app.js:3338)
uni.gen the heritage's step count: the number of levels the old one-generation-a-level reading would give. It survives from earlier versions and still feeds childFrom() and mergerChild() as L: uni.gen + 1 app.js:2027, set on uni at :2035
uni.Lm the model level actually drawn, min(L, MODEL_LEVEL()) scaleModel() app.js:4246

levelOf(u) app.js:1999 returns depth when it is finite, else L. fmtLevel(x) app.js:2000 prints a whole number when x is within 0.05 of one, and one decimal otherwise.

The flow for a hand-chosen genesis is:

  1. genesisFromPanel() app.js:2006 reads the slider uLevel (default 28) and the genesis inputs.
  2. recomputeUniverse() sets depth = L and gen = L, and clears H, so the heritage takes the panel reading.
  3. U.describeUniverse(g) returns every per-level constant (Parts 1.3 to 1.9).
  4. scaleModel(uni) keeps the true rupture and layer counts and swaps in the model's (Part 1.10).

A child played from the lineage keeps its well's exact depth, its lineage's H, generation + 1, and its parent's step count + 1 (Part 1.13).

In the game

The player meets the level first on the slider "Level L" in the Universe & Genesis section (index.php:143–145), and then in four places that each read a different number:

  • The level badge in the HUD (app.js:2038) reads "Level 0 · Zinf" at the Zinf, "Level 28" for a genesis, and "Level 26.4 · gen 1" for a child: fmtLevel(depth) and the generation when it is above 0.
  • The HUD line "Level:" (index.php:81, app.js:2144) prints the same level and generation, and adds "drawn at 256 cells across" when the model level is shallower than the level. Its tooltip says: "deeper than level 6 (4 on a phone) the field and clock are a scale model".
  • The readout's first row, "Level" (app.js:2070), reads for example "28 (drawn at 256 cells across) · generation 0 of this lineage, at least 10 from the Zinf", the last figure being the Minimum Generation (Part 1.13).
  • When a child is played, the slider moves to round(depth). The code's comment there is "the slider shows its level, not its generation" (Part 1.13).

The step count uni.gen is shown nowhere except in the name of a downloaded packet (Part 1.14).

The scale model

None in this overview. Part 1.10 covers the model.

Where the game and the theory differ

BPT keeps two numbers for a universe, its level and its generation. The game keeps a third, the step count uni.gen, which is the level a one-generation-a-level lineage would have. It is not the level or the generation. It still sets the L of every child record (childFrom() app.js:2478), the key of the outcome draw (Part 1.12), the L passed to mergerChild() and the packet's file name (Part 1.14). The physics of a played universe does not use it: recomputeUniverse() runs at round(depth) with the lineage's H.

Fixed numbers

Number Where What it is Kind
0.05 fmtLevel() app.js:2000 how close to a whole number a level must be to print without a decimal DISPLAY
1 (decimal place) fmtLevel() app.js:2000 toFixed(1) for a fractional level DISPLAY
0 recomputeUniverse() app.js:2026 floor on depth, max(0, childDepth) (level 0 is the Zinf, BPT Part 1.6) BPT (Part 1.6, the Zinf at level 0)