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:
genesisFromPanel()app.js:2006 reads the slideruLevel(default 28) and the genesis inputs.recomputeUniverse()setsdepth = Landgen = L, and clears H, so the heritage takes the panel reading.U.describeUniverse(g)returns every per-level constant (Parts 1.3 to 1.9).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) |