PulseCore

Chapter 4 · Section 2

The Speed of Light on the Torus

The BPT law

BPT Part 1.11 (Pulse Diameter, Data Gravity and The Speed of Light) derives light speed from the Pulse itself. Its Local Universe Speed of Light (G) is

π’žβ†’βŒ‚ = 2βŠ•βŒ‚ / β‘ β₯‚β§—βŒ‚

two local Pulse Diameters, one Pulse Length, crossed in one local Pulse Tempo. The book calls it "a derived constant from the fundamental relationship between local Pulse Diameter and harmonically scaled temporal quantum", set by a universe's level and by its parent well, and "within our universe π’žβ†’ is fixed". At the root of the UniSphere the same form, π’žβ†’β˜« = 2β˜«βŠ• / ☫β₯‚, makes data and light move together; within a universe, light and everything physical move no faster than π’žβ†’. Elsewhere the book gives it in short as "light speed, one Pulse Length a Tempo" (BPT Part 2.9, Data–Matter Equivalence).

The game reads the law in its own units. A Pulse is two flips (BPT Part 1.10, Pulse Phase Temporal Genesis), so a flip is half a Tempo; at scale 1 the field is one local Planck length across; so in one flip light covers half the field (comment at app.js:613–618, Josh's ruling of 2026-10-24: "the full rework, including the speed of light").

The established physics

Nothing with mass moves faster than light (special relativity, Einstein 1905). The game uses only that bound. It does not use relativistic kinematics: below the bound, velocities add and scale as in Newtonian mechanics.

The game's math

lightCells() app.js:619:

c = cols / (2 Β· max(1, scale))      cells a flip
  • cols: the field's width in cells, U.viewSide(Lm) = 4Β·2^Lm (app.js:2052, universe.js:232), where Lm is the model level (6 on a desktop, 4 on a phone, Part 4.15).
  • scale: the Dilation Toward the Final Well, dilation() engine.js:113, 1 at birth rising to 2f at the final well (f is the universe's own dilation depth). As cells grow, fewer of them are crossed per flip.

Light speed enters the matter in four places:

  • Matter.step() matter.js:392: after every kick, a body or well faster than c is scaled back to c, direction kept.
  • WellDynamics.step() gravity.js:76: data falls at min(c, √(2GM/k)).
  • inspiral() matter.js:164 and circular() matter.js:114: orbital speeds min(c, √(GM/r)).
  • applyFeedback() app.js:775: no push faster than 0.05Β·c (Chapter 5, Part 5.12).

It also sets every horizon, r_s = 2GM/cΒ² (Parts 4.8 and 4.12), and the frame-drag terms. stepMatterPre() sets matter.light = lightCells() every sub-step (app.js:651), and stepWells() sets wellDyn.c = lightCells() (app.js:821).

Worked case, desktop, any level of 6 or more: cols = 256, so at birth c = 128 cells a flip, 32 cells per quarter-flip sub-step. On a phone, cols = 64 and c = 32 cells a flip.

In the game

The player never sets the speed of light; it follows the field and its dilation. It shows in four places:

  • The Universe panel's note (index.php:191) states the reading outright: "The data circulates at light speed, half the field a flip."
  • The readout's "Light speed π’žβ†’" row (app.js:2080) gives this universe's true light speed in meters a second, with the note "Constants of a Child Universe: Length / Tempo": the law's value at the universe's real level, not the drawn one.
  • The HUD's Scale line (app.js:2138) reads "Γ—1.000 Β· 1 cell = … π’žβ†’β„¨": the dilation and a cell's width in Zinf Pulse Lengths. As the scale rises, each cell is wider and light crosses fewer of them a flip.
  • The "Colour by β†’ Motion" choice in the Universe panel (index.php:188–189) is meant to show "hue is the direction the matter moves, brightness its speed against light". As written it does not work (below).

Before the universe, the Pulsecore's own first toast says the same thing at the Pulsecore's scale: "The data within moves at light speed and bounces off the Bifold about twice a flip" (app.js:532).

The scale model

Light crosses half of the drawn field a flip whatever the field's size, so on the 64-cell phone model a cell is four times wider and light covers a quarter of the cells it covers on desktop. Speeds measured as a fraction of c are the same on every device; speeds in cells a flip are not (Part 4.15, and Part 4.14 for how heat corrects for this).

Where the game and the theory differ

  • Comments that still say one cell a flip. Before the rework of 2026-10-24 light was one cell a flip. These comments still say so: matter.js:15 ("nothing physical outruns light: one cell a flip"), matter.js:477 (the hoop test, "light one cell a flip"), gravity.js:5 ("never faster than light, one cell a flip"), app.js:359 (the Motion coloring, "its speed against light (one cell a flip)"), app.js:625 (the torus's frame drag, "π’žβ†’ = 1") and app.js:1316 (the wells' horizons, "π’žβ†’ one cell a flip"). The code beside each of them uses lightCells(). The constructor defaults this.light = 1 (matter.js:88) and c = 1 (gravity.js:33) are overwritten before every step.
  • The Motion coloring divides by a value nothing sets. drawFieldTexture() app.js:360 computes a cell's brightness as min(1, |v| / matter.lightCap). No code in the game sets lightCap (it appears only on that line; the light speed is matter.light). Once matter exists the division gives NaN for every cell, the color built from it is not a valid one, and the cells come out nearly black instead of shaded by speed.

Fixed numbers

Number Where What it is Kind
2 lightCells() app.js:619 Light crosses half the field a flip (a flip is half a Planck time, the field one Planck length at scale 1) BPT (Part 1.11, Part 1.10)
1 lightCells() app.js:619 Floor on scale METHOD (guards a scale below birth size)
1 Matter constructor matter.js:88 Default light speed, cells a flip, overwritten each step METHOD (placeholder)
1 WellDynamics constructor gravity.js:33 Default light speed c, overwritten each flip METHOD (placeholder)

The cap itself, |v| ≀ c, is PHYSICS (special relativity); it is not a number of its own.