Chapter 9 · Section 8
The Register of Caps
This register records the caps as version 8.3 held them; Part 9.6 says which version 8.4 has replaced.
Every cap the review of 30 October 2026 found in the game, 170 of them, chapter by chapter, with what each could come from instead. Each is described where it sits, in its chapter's "Fixed numbers" table; this register is the list the work goes down. A cap leaves this register only when the code no longer holds it, and the register says when.
The ones that most shape what is seen come first in the work (Part 9.6): the model level and the grid (Chapter 1), the body budget and the gravity mesh (Chapter 4), the ring list that drops its oldest well (Chapter 3), and the drawn Proto Wells (Chapter 3).
Chapter 1: The Universe from Its Level
| Where | Number | What it limits | Could come from |
|---|---|---|---|
app.js:4244 |
6 | desktop model level: field side, life length (2^Lm Tempos) and harmonics played (3·2^Lm) for every L > 6 | the saturation law of Chapter 9 applied to the device's measured budget (frame time / heat), not a fixed level |
app.js:4244 |
4 | phone model level: same as above on a phone | the same measured-budget saturation law; one rule for every device |
app.js:4243 |
480 (px), user-agent test | which device class gets which model level | measured device capacity (frame time, heat gauge) instead of a screen-size class |
app.js:5415 |
64 / 256 | startup grid size by device class (viewSide(4) / viewSide(6) written as literals) | U.viewSide(MODEL_LEVEL()) or the saturation law |
app.js:2052, app.js:5569 |
1024 | ceiling on the drawn field side (does not bind today; first at model level 9) | the saturation law of the field size against the device budget |
app.js:2052, app.js:5569 |
4 | floor on the drawn field side (equals viewSide(0); never binds) | viewSide(0) by law; can be removed |
app.js:1167 |
6 | reference level of the gas-cloud size (duplicates MODEL_LEVEL desktop as a literal) | MODEL_LEVEL() desktop value or the true level's field |
app.js:1607 |
1/4 (rows·cols/4) | most drawn Proto Wells on a scale model, saturating as T·(1−e^(−N/T)) | already saturation form; T could come from the Formation Condition's least well size instead of a quarter cell |
index.php:145 |
202 | slider maximum: no level deeper than ours can be chosen by hand | the float range (ℏ′ overflows near L≈500) or no limit with log-space math |
index.php:187 |
1, 1.1 | baseline heritage f₀ input range | a stated physical range for f₀ from BPT Part 2.8 / 6.8 (f₀ ≥ 1 if heritage never shrinks) |
universe.js (every Math.pow); app.js level math |
≈2^1024 (1.80e308) | IEEE double range: ℏ′ Infinity near L≈500, pixelCount at L=510, s near 998, 2^L at 1024 | log-space (log2) representation of per-level quantities |
Chapter 2: The Pulsecore Field
| Where | Number | What it limits | Could come from |
|---|---|---|---|
app.js:2052, 5569 |
1024 (and floor 4) | the drawn field side, max(4, min(1024, viewSide(Lm))); never binds while Lm <= 6 | viewSide(Lm) alone, or the Chapter 9 saturation law sizing the field to the device budget |
app.js:4244 |
6 / 4 (MODEL_LEVEL) | the deepest level drawn: the field side 42^Lm, the clock 2^Lm, the Pulsecore 164^Lm, the harmonics 3*2^Lm | a measured per-device budget fed to the saturation law, so Lm = largest level whose field, clock and gas fit the budget |
app.js:4243 |
480 px, 9999 | the phone/desktop switch behind MODEL_LEVEL | the device's measured step time (the speed readout already measures ms per flip) |
app.js:507 |
8000 | points drawn for the data within the Pulsecore (binds on desktop from Tempo 89; never on a phone) | N = (n+1)^2 itself up to a measured draw budget, by the saturation law |
pinpoint.js:47 |
1200 | the PinpointGas default point limit (overridden by 8000) | the same law as the 8000 |
pinpoint.js:127 |
16 | points born from the skin before the rest are copies of existing points | the count of painted pulsing cells (each painted Zinf point seeds one), or min(want, painted) |
pinpoint.js:157 |
8 | strikes a point makes in one flip; cuts 3.9 % of wall-launched tracks (cos theta < pi/16), mean strikes 2.8 instead of pi | no cap: the strike count is reach/chord = pi/(2 cos theta), bounded only by a grazing-track floor tied to the cell size |
app.js:554 |
w = 1 | rows kept empty each side of the throat in the inside-out turn (two empty rows; one row each side overwritten) | w = 0 with a mapping that is one-to-one (the theory's hole is closed, BPT Part 3.5) |
app.js:5103 |
2, 5, /4 (searchRadius) | the window that finds a harmonic nova's center and clusters centers | a reach set by the field's own scale (light's reach, or the Pulse Front), not a fixed 5 cells |
app.js:3477 |
16 (FOLD_WELL_MIN) | the smallest fold that becomes a well (comment says nine) | the Formation Condition from the fold's data, or 1 true cell scaled by 4^(L-Lm) |
app.js:1649 |
6, /8 (near) | the least distance between a fold well and any other well | the wells' own horizons or basins (r_s = 2GM/c^2) rather than a fixed share of the field |
flow.js:81 |
64 | the frame-drag profile at the throat; binds from level 2 (16 of 256 rows held at 64 on desktop; true row max 1.74e4, exact throat 4.41e6) | the exact ((R+r)/rho)^3, finite since rho >= HOLE > 0; or the saturation law |
flow.js:81 |
1e-3 | the floor on rho, the distance from the axis (does not bind on drawn fields) | HOLE itself, which is the true minimum of rho |
flow.js:121 |
0.5 (inner ring at most 1.5x the outer) | the amplitude of the frame-dragging shear | the Lense-Thirring ratio itself, or the saturation law |
Chapter 3: Wells, Sites and Gravity Rings
| Where | Number | What it limits | Could come from |
|---|---|---|---|
app.js:1607 |
rows·cols/4 (T: 1,024 phone, 16,384 desktop) | drawn Proto Wells: protoDrawn() saturates at T | the saturation law of Chapter 9, with the room set by what the device can step rather than a fixed share of cells |
app.js:1601 |
400, rows·cols/64 | wellCap(): old cap on drawn wells (dead code, never called) | delete; protoDrawn() replaced it |
app.js:1401 |
SITE_SEED_GAS = 0.1 | direct-collapse seed mass, at most a tenth of the site's gas | BPT says only "never more than the site's gas can give": the seed law alone, or the gas share a collapse can take from simulations cited in BPT Part 3.14 |
app.js:1407 |
SITE_R_MIN = 1 cell | least site halo and core reach | the grid's own resolution from the mesh block, or the halo radius from the site's mass |
app.js:3477 |
FOLD_WELL_MIN = 16 cells | least fold that becomes a well (doc comment at app.js:1646 says nine) | the hoop test r_s ≥ √(m/π) used for matter (matter.js:479) |
app.js:1649 |
max(6, min(rows,cols)/8) | spacing of a fold well from other wells; limits fold-well count | the horizon or softening reach of the nearby wells, (10GM)^(1/3) |
app.js:1675, 1688 |
2 cells | least merge distance | the horizon 2GM/c² and the softening reach alone |
app.js:1724 |
1 merger a step | merges per step in mergeWells() | merge every touching pair in a step, re-hashing after each |
app.js:829 |
16 (cells) | least body mass that turns the data | the Kepler rate itself: any body whose turn moves a cell per step |
app.js:829 |
24 (bodies) | heaviest bodies that turn the data | all bodies past a mass set by the saturation law |
app.js:845 |
2 cells | least data reach of a well | the well's horizon or softening reach |
gravity.js:33 |
reach = 24 cells | every well's data swirl and fall reach (WellDynamics default, app.js:2041 passes none) | the nearest-neighbor half distance already computed in stepWells, or the reach where the Kepler turn falls below one cell a life |
gravity.js:46 |
min(rows,cols)/4 | data reach ceiling | the nearest-neighbor half distance (torus geometry gives at most 1/2) |
app.js:1172 |
64 phone; 128 or 256 desktop by cores/memory | gravity mesh blocks a side (meshB) | the saturation law of Chapter 9 from the device's measured step time |
app.js:565 |
maxRadius = max(rows,cols)/2 | ring reach | wrapped ring geometry; a ring's life (one Tempo per cell) up to the universe's age |
app.js:565 |
maxRings = 10 | newest rings of a well searched | all rings within maxRadius, under the time budget |
app.js:565 |
maxSources = max(4000, rows·cols/4) | rings.sources: past it addSource() drops the OLDEST WELL or site from the game (rings.js:37) | never drop sources; the ring search already limits itself through ringSources |
app.js:565 |
ringSources = 32 (start) | wells whose rings are searched | start from the device's measured budget |
rings.js:19 |
3, 400, 0.6, 6, 24, Infinity | constructor defaults (overridden by ensureRings, not in effect) | remove or match ensureRings |
app.js:1922–1923 |
4 ms, 8 ms | time budget of the ring search | the saturation law of Chapter 9 with the frame budget |
app.js:1923 |
8 | least wells searched | none needed beyond the budget |
Chapter 4: Matter and Gravity
| Where | Number | What it limits | Could come from |
|---|---|---|---|
app.js:1180 |
8000 | bodies of matter on a phone (matterBudget) | the saturation law of Chapter 9 from the device's measured step time, the same rule on every device |
app.js:1182 |
16000 | most bodies of matter on any device | measured physics time per flip against a frame budget (perf.lastBusy), not a fixed top |
app.js:1182 |
8000 (floor) | fewest bodies on a non-phone | the same measured-time rule; a floor only where the Zel'dovich start needs bodies per ripple |
app.js:1182 |
2000·mem·min(1,cores/8)+2000 | bodies by reported memory and cores | measured step time, since deviceMemory is capped at 8 by browsers |
app.js:1181 |
8, 16 | memory (GB) and cores read for the budget | none needed under a measured-time rule |
app.js:1182 |
8 (cores) | cores for a full share of the budget | measured step time |
app.js:1198 |
15000 | floor on the scene's point budget | the scene's own frame-time adaptation (scene3d already lowers it when frames slow) |
app.js:1149 |
6000 | MATTER_MAX, unused old body ceiling | delete (dead code) |
app.js:1172 |
64 | gravity mesh side on a phone | mesh side from the bodies' mean spacing or the ripple scale (RIPPLE_SMOOTH), within measured time |
app.js:1172 |
128, 256 | gravity mesh side on ordinary and strong desktops | the same rule; one resolution per universe, not per device |
app.js:1172 |
12 cores, 8 GB | what makes a device strong for the mesh | measured step time |
app.js:1173 |
64 | coarsest block side | field size over the needed resolution |
matter.js:471 |
64 | mergers reported per step for flashes | the scene's point or flash budget |
matter.js:89 / app.js:1168 |
64 = CL² | least mass of a planet (one cloud of matter) | a physical definition (bound and below the hoop mass), or the level's Suns via realPerCell |
gravity.js:33 |
24 | rings a well turns and draws data in | the well's own reach: its Hill or tidal radius against neighbors (already used past 24 wells), or where √(GM/k³) falls below one cell a life |
app.js:829 |
24 | heaviest clumps of matter that swirl data | every clump above a mass whose Kepler turn moves a cell within a life |
app.js:829 |
16 | least mass of a clump that swirls data | the same Kepler-turn condition |
app.js:2993 |
6 (2^(Lm − 6)) | reference level of the heat's speed correction | the model level's own clock, as one shared constant with MODEL_LEVEL |
app.js:1167 |
6 (min(L,6)) | reference level of the full field for cloud size | MODEL_LEVEL desktop value, one constant |
app.js:4244 |
6, 4 | model level on desktop and phone | the saturation law of Chapter 9 from device capacity |
app.js:4243 |
480 px | screen side that makes a device a phone | measured capacity, not screen size |
Chapter 5: Stars
| Where | Number | What it limits | Could come from |
|---|---|---|---|
app.js:663 |
64 | flashes reported per step in a universe without stable matter | the scene's flash budget |
app.js:1251 |
40000 | most stars drawn (STAR_DRAW) | the device's measured point and physics budget, the saturation law of Chapter 9 |
stars.js:192 |
48 | distinct IMF mass draws per body per sub-step (star lots) | draws until the lot's mass resolution matches the IMF's bins (e.g. one draw per mb bin) |
stars.js:233 |
24 | planetary nebula flashes per step | the scene's flash budget |
stars.js:236 |
4 | wells reported per dying lot (undercounts wellsStand when n > 4) | one well per drawn star, or register one well with weight n·starMult |
app.js:764 |
30000 | body budget that makes a device strong for feedback (unreachable since budget ≤ 16,000) | measured step time (perf), or delete |
app.js:764 |
96, 24 | supernova events handled per sub-step | every event, grouped by cloud, within measured time |
app.js:764 |
85 % | busy share that halves feedback | a continuous time budget |
app.js:764 |
>> 1 | halving of events when busy | a continuous time budget |
app.js:764 |
4 | least supernova events handled | none under a time budget |
app.js:764 |
3, 2 cells | feedback reach, strong and ordinary | the remnant's physical radius (shell stall radius) in cells via the level's scale |
app.js:764 |
0.75 | feedback reach when busy | physical radius, unchanged by device |
app.js:775 |
1.5 v_esc | largest push from feedback | momentum and energy conservation alone in consistent units |
app.js:775 |
0.05 c | largest push from feedback | the same |
Chapter 6: Galaxies and the Cosmic Web
| Where | Number | What it limits | Could come from |
|---|---|---|---|
app.js:2920 |
3 | least reach of a galaxy (cells): the farthest a body can belong to a well | the halo's own virial radius from its mass, or half the distance to the nearest well |
app.js:2920 |
16 | galaxy reach = 1/16 of the field's side, same at every level and mass | the halo's virial radius r = (G·M/(100·H²))^(1/3), or the measured r_h of the previous reading |
app.js:3020 |
0.75 | least measured disk scale length (cells) | the law R_d = λ·r_h/√2 with no floor; the resolution limit as a softening, one cell |
app.js:3024 |
2 | least arm number | the Arm Number law itself (m_a below 2 reads as a lopsided m = 1 mode) |
app.js:3024 |
8 | greatest arm number | the Arm Number law itself; flocculent disks raise many arms |
app.js:3025 |
45 | greatest pitch angle (degrees) | the Michikoshi & Kokubo law with Γ limited only by its own range; BPT's observed top 40° |
app.js:3026 |
14 | brightest kinds of star kept to light a drawn galaxy | all kinds whose light share exceeds what one drawn point can show (1/count of the light) |
app.js:3035 |
0.6 | top on galaxyOf's omega (dormant: replaced by diskTurnRate) | remove; the Disk Turn Rate law |
app.js:3035 |
0.05 | least drawn disk scale length (cells) | the law with no floor; the drawn-size enlargement already lifts it |
app.js:2915 |
0.5 | DRAW_MIN, least drawn galaxy radius (cells) | a size from the device's pixel resolution at the current zoom |
app.js:3035 |
2 | least hideR (cells; unused by the scene) | remove (dormant), or the drawn radius |
app.js:3116 |
0.45 | drawn galaxy radius at most 0.45 of the field's mean spacing between galaxies | a share set by the saturation law of Chapter 9 from the galaxy count and screen resolution |
app.js:3117 |
0.45 | drawn galaxy radius at most 0.45 of its nearest-neighbor distance | half the distance to the neighbor, where the next halo's pull takes over (as the wells' data reach does) |
scene3d.js:631 |
0.15 | greatest drawn turn of a galaxy a frame (radians); binds for t_f under about 900 flips at one flip a frame | the law's rate shown through a frame-rate-aware time scale (slow the shown clock instead of the rate) |
app.js:1407 |
1 | SITE_R_MIN, least site radius (cells) | the site's Data Matter halo radius read from the Proto Well's mass |
scene3d.js:485, 571 |
30000 | point budget if none set | matterBudget() of the device |
scene3d.js:2003 |
0.8 | budget lowered by a fifth on slow frames | a budget solved from the measured frame time per point |
scene3d.js:2003 |
45 | mean frame time (ms) that lowers the budget | the target frame rate of the device |
scene3d.js:2003 |
8000 | budget never lowered from 8000 or less | the measured frame time per point |
scene3d.js:485 |
0.6 | galaxies get 60% of the device's points | shares by what each layer holds of the real light (galaxies hold nearly all stars) |
scene3d.js:494 |
120 | points an arm for a full spiral | points needed to show an arm at the current zoom (arm length / point spacing) |
scene3d.js:494 |
0.6 | full spirals take at most 60% of the galaxies' points | the saturation law of Chapter 9 across all galaxies |
scene3d.js:494 |
40 | points for a spiral past that share | a share by its stars, as the others |
scene3d.js:495 |
12 | least points for any other galaxy | the points needed to show a galaxy as more than a dot at its drawn size |
scene3d.js:495 |
40 | most floor points for any other galaxy | the share by stars alone |
scene3d.js:516 |
0.03 | least drawn scale length in the scene (cells) | the R_d passed from galaxyOf |
scene3d.js:626 |
4 | column stretch at most a quarter turn of the ring | the true surface metric, with galaxies kept off the throat by their size |
scene3d.js:571 |
0.08 | streams get 8% of the points | the share of the real inflow's matter against the galaxies' |
scene3d.js:572 |
50 | no streams under 50 points | none; any budget draws streams |
scene3d.js:574 |
42 | points a galaxy's streams (3 × 14); sets how many galaxies get streams | every galaxy with a neighbor, points by its inflow rate (accretion ∝ halo mass) |
scene3d.js:574 |
16 | least points a galaxy's streams | the inflow rate share |
scene3d.js:588 |
5 | streams start at most 5 drawn radii out | halfway to the neighbor, the filament's real length |
scene3d.js:588 |
1.6 | streams start at least 1.6 drawn radii out | halfway to the neighbor |
scene3d.js:605 |
0.05 | greatest fall a frame (× R) | the fall at the law's rate through a frame-aware clock |
scene3d.js:606 |
0.1 | greatest curl a frame (radians) | the conserved-angular-momentum rate through a frame-aware clock |
app.js:338 |
2 | least cluster glow reach (cells) | each cluster's own swirl reach (half the distance to its neighbor, as wells) |
app.js:338 |
24 | greatest cluster glow reach (cells) | each cluster's own swirl reach |
app.js:338 |
4 | glow reach a quarter of the field | each cluster's own swirl reach |
app.js:339 |
16 | least body mass to glow as a cluster | clusters by density contrast against the mean (as the scene's 2.5× patches) |
app.js:339 |
24 | the 24 heaviest bodies glow | every body above the cluster line, or the drawn galaxies' halos |
Chapter 7: States, Strings, Language and Finds
| Where | Number | What it limits | Could come from |
|---|---|---|---|
app.js:1753; states.js:118 |
48 (STATE_WINDOW) | State window: longest detectable beat 16 flips; memory 48·n bytes per scan post | Window from the device's measured scan budget (Ch 9), so larger devices see longer beats |
states.js:151 |
512 | Frame hashes kept; bounds how far back a revival can be seen | Size to 2·(longest revival period)+1 from the same budget as the window |
states.js:271-273 |
4, -4, 20 (dr²+dc² ≤ 20; 34 shifts) | Lattice repeats longer than √20 cells are not tested in step 2 | Shift radius from the device's scan budget, or from the field's own grain |
states.js:396 |
8 | How far a domain-wall cell looks for its two domains | Tie to the lattice shift radius or the field's measured domain size |
states.js:440 |
12 | Longest shift checked before a region is called a quasicrystal; crystals repeating only beyond 12 cells are misnamed | Search up to the region's own half-width (interior size) |
states.js:468 |
64 (lumps) | Soliton search skipped when 64 or more lumps exist | Device scan budget (Ch 9), searching as many lumps as time allows |
states.js:515,517 |
170 (and 170·2) | Longest revival period; carried look-back | From the hash buffer and window budget, or from the universe's own clock |
states.js:207 |
24 (signature box) | Regions wider than 24 cells collapse to a coarse species key (family, period, size octave) | A canonical signature by hashing at any size, or a box from the device budget |
app.js:1922-1923 |
4 ms, 8 ms | Search-time band that sets how many wells' rings are searched | The measured frame budget of Ch 9 (one budget for all searches) |
app.js:565 |
32 (ringSources start) | Starting count of wells searched | Start from the device's measured capacity |
language.js:95,97 |
64 (sampleRows) | Rows read for words; counts are over at most 64 rows | Rows read from the device budget, or all rows with the counts scaled |
language.js:49,123,125 |
200000 (MAX_TYPES) | Distinct words counted; new words beyond it vanish from counts, Zipf and codebook | Memory budget measured on the device, or an approximate counter (count-min) with no fixed top |
language.js:49,127 |
400000 (TEXT_CAP) | Written text kept for the monkey shuffle | Memory budget, or reservoir-sample the text so it stays representative of the whole writing |
language.js:49,134 |
2^18 (DRIVE_CAP) | Drive symbols read for predictability (a quarter of a level-8 field) | Device budget, or entropy estimated incrementally over the whole field |
language.js:32,106 |
128 (LISTEN_WINDOW) | Control tests at most a 128×128 window of the starting field | Window from the device's compute budget, or several windows |
language.js:166 |
0..4 (grain 1 to 16) | Grain of the scramble capped at 16 cells | The field's own mean run rounded to a power of two, uncapped up to W/2 |
language.js:176-177 |
8·W (1024 pulses) | Longest control run | Run until writing pauses, with a budget from the device |
language.js:40 |
16 (LISTEN_SCRAMBLES_MAX) | Most scrambles made to find 4 like the universe | Compute budget from the device; BPT Part 4.10 repeats 16 |
language.js:73 |
500 | Ranks used in the Zipf fit | All ranks with count ≥ 2 (BPT's own definition) |
language.js:235 |
24 (dialect) | Own words kept; also the largest cognate sample a child is read on | All own words, or a sample size set by the cognate share's wanted precision |
Chapter 8: Drawing the Universe
| Where | Number | What it limits | Could come from |
|---|---|---|---|
scene3d.js:35 |
min(2, devicePixelRatio) | drawn pixels per CSS pixel (render resolution) | the measured frame time (Part 9.3): raise the ratio while frames stay under target |
scene3d.js:1225 |
320 px floor, 800 px fallback | the smallest view the lattice fit assumes | the canvas's measured size alone |
scene3d.js:166 |
1024 x 512 | the lattice mask's resolution (lines resolvable on the skin's alpha mask) | sized from latDraw (a few mask pixels per line) or from the field's own cols x rows |
scene3d.js:1111 |
NU = 24, RINGS = 6 (12 rings) | the lattice lines actually drawn from the Data Nova on, at every level; replaces the level's latDraw lattice | latDraw from setLatticeLevel (4*2^L lines, fitted to the screen), with latFine for the rest |
scene3d.js:1151 |
NU = 24, NR = 12 | the scaffold that seeds the Data Nova's data (app.js:1111) and the first matter (app.js:1219) | the level's lattice, 4*2^L lines a side, sampled at the field's resolution |
scene3d.js:1255 |
min(n - 4, 12) | outward step of the harmonic rings; harmonics past the 16th stack on one radius | a step that keeps shrinking, e.g. 0.05*ln(1 + n - 4), so every harmonic has its own radius |
scene3d.js:1257 |
24 | harmonic rings kept on screen | all of the universe's layers (uni.layers), thinned by the Saturation Law against a screen ceiling |
scene3d.js:1305 |
900 | residue points in the hole at the Data Nova | the Saturation Law on the pinpoint's data count against the point budget |
scene3d.js:1270 |
600 | fountain points through the hole | the Saturation Law on the flow's data count against the point budget |
scene3d.js:295 |
14,000 | points of the Data Nova's eruption | the Saturation Law on the skin's data (16*4^L) against the point budget |
scene3d.js:295 |
NU = 24, NR = 12 | lines and rings the eruption lands on | the level's lattice (latDraw) |
scene3d.js:374 |
16,000 | points lifted off the core's skin at the big bang | the Saturation Law on the core's data against the point budget |
scene3d.js:1600 |
RIPPLE_MAX = 10 | gravitational-wave ripple trains drawn at once | the Saturation Law on mergers in flight against a measured draw ceiling |
scene3d.js:485,571,703 |
30,000 | STAR_MAX before a point budget is set | the measured device ceiling (Part 9.3) |
scene3d.js:703 |
STAR_BODY = 4,000 | points per body | the body's own share of STAR_MAX (m/q) with no per-body top |
scene3d.js:707 |
q >= 0.05 | least matter per point (at most 20 points per unit of mass) | the Saturation Law on the real star count against STAR_MAX |
scene3d.js:849,868 |
1024x512, x2, x4 grids (about 1.0e7 skin stars at most) | stars the starlight skin can show | grids sized from the screen's pixels at the current zoom, the count from the Saturation Law on the real stars |
scene3d.js:815,1051 |
600 | flashes pushed per step and the flash buffer | the Saturation Law on the step's mergers and deaths |
scene3d.js:816 |
128 | flashes kept | the Saturation Law on flashes alive (each lives 8-16 flips) |
scene3d.js:990 |
MAX = 160 | bodies drawn with an accretion disk | the Saturation Law on bodies above matter.full against a measured draw ceiling |
scene3d.js:1777 |
120 | crystals drawn in 3D | the Saturation Law on live crystals |
scene3d.js:1788 |
40 | strings drawn in 3D | the Saturation Law on live strings |
app.js:338 |
reach = max(2, min(24, min(rows, cols)/4)) | cells round a cluster whose data glows | the swirl's own reach from gravity.js, with no fixed top |
app.js:339 |
m >= 16, top 24 bodies | which bodies get a glow on the 2D skin | every body above matter.full, thinned by the Saturation Law |
app.js:1179 |
8,000 (phone) | bodies simulated on a phone, and the point budget below 15,000 | a measured body ceiling (Part 9.3: V = n*tau/t) |
app.js:1180-1181 |
clamp(2000memmin(1,cores/8)+2000, 8000, 16000); mem<=8, cores<=16 | bodies simulated on a desktop | a measured body ceiling (Part 9.3) |
app.js:1198 |
15,000 | floor of scene.pointBudget = max(matterBudget, 15000) | the measured draw ceiling for points |
scene3d.js:2003 |
8,000 threshold (true floor 0.8 of the last value above it: 6,554 or 7,680) | how low the point budget may be lowered | the measured draw ceiling, smoothed (Part 9.3) |
scene3d.js:2003 |
x0.8 one way (never raised) | the point budget once lowered by slow frames | a two-way smoothed estimate of V that also rises when frames are fast |