The particles ran at the monitor's speed, and the chips were unreadable on two denominations

Fixkamo-internal
Shipped
September 9, 2026 at 5:17 AM UTC
Author
Kamo
Commit
2337a66

Two deferred things finished, both measured rather than eyeballed. THE PARTICLE LOOP IS TIME-STEPPED. `PixelParticles` advanced physics once per FRAME — every constant tuned against a 60Hz screen and spent whenever a frame happened to arrive. It matters more here than in a one-shot burst because this canvas fills a stage `ArcadeFxProvider` holds open with a wall-clock `setTimeout`: a duration in seconds around contents in frames, drifting in OPPOSITE directions either side of 60Hz. At 30 the pieces are still rising when the stage clears; at 120 they are gone while it is up. Sixty is the one rate where both are right, and it is the rate of every screen this was written on. Measured in a browser against a virtual clock, one second of confetti, the alpha-weighted mean Y of the drawn pixels and the live pixel count: frame-counted 30fps meanY 150 lit 10098 | 60fps 308 / 8456 | 120fps 211 / 3163 fixed timestep 30fps meanY 295 lit 8709 | 60fps 301 / 8652 | 120fps 301 / 8652 Real elapsed time now accumulates and is spent in whole sixtieths, so every constant keeps the meaning it was tuned with. Two caps: a frame is worth at most 100ms (a tab returning from the background must not simulate the minutes it was away) and at most four ticks (a slow machine drops the show's speed rather than spiralling). Physics and painting are separate now, because running two ticks must not paint twice. The guard that comes with it asserts what a unit test can: that the rAF callback takes the timestamp and that both caps exist. Proved by mutation — dropping the parameter fails it with the sentence naming the defect. TWO CHIPS PRINTED A NUMERAL NOBODY COULD READ. Contrast measured across the whole ladder: the orange chip's bone numeral was 3.50:1 on its own clay and the pink 4.39, both under AA. Orange prints dark now (5.06) and pink pure white (4.84), which is also what a real orange chip does. The ladder is chosen for contrast, not for family resemblance, and a test holds all ten above 4.5 — a denomination a player cannot read is a chip carrying its value in colour alone. The halo behind the numeral is what that measurement assumes: the glyph sits in the rim band where the edge spots are, so it is stroked with the clay colour to guarantee its backdrop. At 1.8 units on a 100-unit chip that was 0.4 of a pixel at the size a seat draws — an anti-aliasing artefact, not a backdrop. It scales with the chip now. And the numeral's size threshold is per CHARACTER: "1" is legible on a chip that "100K" is a smudge on. A RACK SAYS WHAT IT IS WORTH. "Rack of 20 x 1K = 20,000" — the third of the three questions the request asked a tray to answer, and the one a player was counting on their fingers. As an aria-label rather than a title, because a native tooltip there raced the cluster's own.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing