PulseCore

Chapter 8 · Section 1

The Torus and Its Skin

The BPT law

BPT Part 8.7 (Toroidal Pulse Manifold and Zinf-Limit Universe) formalizes the universe's pulsing boundary as a Toroidal 2-Manifold (G). Its essential insight, in the book's words: "Prime Pulse Bifurcation ∅ → (0 ↔ 1) manifests geometrically as a closed toroidal boundary where information and energy exist only on the surface while the interior maintains null conditions." The boundary is a standard torus with time-dependent radii, the Toroidal Position Vector

x(θ, φ; t) = ((a(t) + b(t)·cos θ)·cos φ,  (a(t) + b(t)·cos θ)·sin φ,  b(t)·sin θ)

for the major radius a, the minor radius b, the poloidal angle θ (round the tube) and the toroidal angle φ (round the ring). The radii evolve with the Prime Pulse, a(t) = a₀·Θ(S✺)·sin(ωt) and b(t) = b₀·χ(PD)·sin(ωt + φ), scaled by the Data Nova and bounded by the Pulse Diameter. Inside, the Null-Well Interior holds the field at zero, Ψ(x, t) = 0 for x in N(t), while its gradient stays finite on the skin T²(t): physical expression lives on the boundary only. The same Part sets the smallest step of space, the Zinf Length ℓ_z = κ_z·𝒞→·①⥂⧖, and asks at least N⥥ = 4 cells round each loop, 2π·a⥥ ≥ N⥥·ℓ_z and 2π·b⥥ ≥ N⥥·ℓ_z, so that each direction holds a standing mode.

BPT Part 8.8 (The Zinf-Limit Toroidal Universe) makes the skin discrete. Its Pixel Quantization Principle reads "One Pixel = One Zinf ⟹ Minimal boundary cell extent = ℓ_z": each boundary cell is one Zinf across. The smallest closed torus is a 4 × 4 square whose opposite edges are one edge, N▫ = (N⥥)² = 16 cells, which is the level-0 field the game draws. BPT Part 3.10 gives Dilation Toward the Final Well (G), I(n)/I(0) = 1 + (2f − 1)·n/2^L with the Pulse Diameter PD(L) constant: "the information around a universe's pulse grows through its life toward its final well ... the pulse itself never changes size." On the torus, the hole is the pulse and the tube is the information round it.

The established physics

The torus's parametrization and its surface area, A = 4π²·R·r, are textbook geometry. The texture laid on it is an equal-area map (flow.js), so every field cell covers the same area of skin; that map is Chapter 2's. No physics source applies to the colors, lights and render order: a game method.

The game's math

The scene (Scene3D, scene3d.js:22) draws the 2D field canvas as a texture on a torus mesh. Its radii come from the horn shape of flow.js (hornShape(rows), flow.js:62), set in setShape() scene3d.js:212:

k    = π / max(4, rows)
TUBE = 2.22 / (2 + k)
HOLE = TUBE · k

so the outer edge, HOLE + 2·TUBE, is always 2.22 scene units. At the desktop model level 6 (256 rows), k = 0.01227, TUBE = 1.1032 and HOLE = 0.0135; on a phone at level 4 (64 rows), TUBE = 1.0834 and HOLE = 0.0532. The hole is the Pulsecore's true size against the field; Chapter 2 derives it.

A field cell (r, c) lands on the skin at surfacePoint() scene3d.js:1767, which is Part 8.7's position vector with u = φ and v = θ:

u = 2π·c / cols
v = vOfRowFrac(r / rows, R, t)          (the equal-area map, flow.js)
R = HOLE + TUBE·scale                     (a: the ring, the hole plus the tube)
t = TUBE·scale + 0.02                     (b: the tube, lifted 0.02 off the skin)
x = ((R + t·cos v)·cos u, (R + t·cos v)·sin u, t·sin v)

surfaceNormal() scene3d.js:1763 is the same with the radii dropped: (cos v·cos u, cos v·sin u, sin v). equalAreaUV() scene3d.js:1762 rewrites the mesh's texture rows by the same map so the texture and every point agree. The texture is not flipped (row r at uv.y = r/rows, scene3d.js:66), so the skin, the wells and the stars sit on the same rows.

setScale(scale) scene3d.js:1386 is Dilation Toward the Final Well: the tube becomes TUBE·scale, the hole stays HOLE, and the torus, the lattice, the crystals, the strings and the wells are rebuilt at the new radii. The scale itself is Chapter 1's dilation().

What is drawn in what order is fixed by render order: the sky's stars at −4, the space layer's dark wall at −3, the skin at −1 (this.torus.renderOrder = -1, scene3d.js:76, so the transparent skin never paints over the stars as the camera turns), the starlight skin at −0.75, the lattice at −0.5, the matter at 0, disks and ripples at 998, horizons at 999, glows at 1001 to 1002 and the black cores at 1003.

The background sky (makeStars() scene3d.js:188) is 1,400 points scattered on a shell 30 to 60 units out. It is a backdrop, not part of any universe, and turns 0.0003 radians a frame (scene3d.js:2149).

In the game

The torus is the stage for the whole run. Before Start the scene holds only the Pulsecore, a small sphere carrying the painted field, against the grey backdrop of 1,400 stars turning slowly behind it. From the Null Nova a dark veil of space stands round the sphere (Part 8.3), and from the Data Nova the skin torus appears inside it and carries the field's picture: every cell the player painted or the rule lit is a patch of that skin, and the same cell sits under every well, star and string drawn there. The skin is drawn before every transparent layer, so the stars, lattice and disks on it stay in view from every side as the view turns, while its depth hides the far side. The inside of the tube is never drawn; only the skin carries anything, which is Part 8.7's boundary-only expression and null interior made visible.

Over the life the hole keeps its size while the tube swells. The readout line "Scale:" shows it, as ×1.000 · 1 cell = … 𝒞→ℨ (app.js:2138), under the tooltip "Dilation Toward the Final Well: ×1 at birth, ×2f at the final well; and one cell's width in Zinf Pulse Lengths" (index.php:79). At level 0 that line reads one cell as one Zinf, the Pixel Quantization Principle on screen. The "View" control switches between "3D · the torus" and "2D · the field" (index.php:141): the same skin, wrapped or laid flat (Part 8.12). Dragging turns the view round the torus (Part 8.9); nothing the player does changes the torus's shape, which follows the level and the dilation alone.

The scale model

The torus is drawn at a fixed picture size, outer radius 2.22, at every level. One field cell is a fixed share of the skin, 1/(rows·cols) of its area; what one cell stands for at the true level is shown in the readout (Part 8.13): 1 cell = (f^L / 4)·scale Zinf Pulse Lengths, and exactly one Zinf pixel at level 0, as Part 8.8 states. The Pulsecore itself is Planck size in the theory; the scene draws it at CORE = 0.444 when alone and at the hole's size once the torus stands round it (Part 8.3).

Where the game and the theory differ

  • BPT Part 8.7 lets both radii oscillate with the Prime Pulse, a(t) ∝ sin(ωt) and b(t) ∝ sin(ωt + φ). The game's torus does not pulse: its outer edge is fixed at 2.22 scene units, and the tube changes only by the dilation, TUBE·scale.
  • The constructor's comment (scene3d.js:27) says the tube is twice the hole across; the horn shape replaced that, and the hole is now π/rows of the tube.

Fixed numbers

Number Where What it is Kind
2.22 flow.js:63 outer edge HOLE + 2·TUBE, the picture's size DISPLAY
π/max(4, rows) flow.js:63 the hole against the tube BPT (Chapter 2: the Pulsecore's size against the field)
0.444 (HOLE, TUBE, CORE defaults) scene3d.js:25, 32 placeholders before hornShape(64); CORE the lone Pulsecore's drawn radius DISPLAY
0.02 surfacePoint() scene3d.js:1769 lift of every mark off the skin DISPLAY
96 × 192, 64 × 48, 48 × 128, 48 × 32 scene3d.js:70, 85, 130, 140 mesh segments of the torus, the sphere, the space torus, the void METHOD (tessellation fine enough to look round)
min(2, devicePixelRatio) scene3d.js:35 drawn pixels per CSS pixel CAP
1,400; 30–60; 0.06; 0.7; 0x9aa4b5; 0.0003 makeStars() scene3d.js:189–192, 2149 the backdrop sky: count, shell, size, opacity, color, turn DISPLAY
0.35; 18 and 6; positions; colors scene3d.js:62–64 ambient, key and rim lights DISPLAY
0.9, 0.55, 0.1 scene3d.js:69 the skin's glow, roughness, metalness DISPLAY
−4, −3, −1, −0.75, −0.5, 998–1003 throughout render order DISPLAY
NearestFilter / LinearFilter scene3d.js:67, 704 cells drawn sharp before the stars, smooth after DISPLAY