Maschinenraum Engine Log
Maschinenraum · 1–6 Oct 2026

Engine Log

Progress on the racer and the room around it, then a city of rooms, live boards and a set of looks that belong together, then games on the city's floor, fifty-two looks, new voices for the sound engine and a coding game under the basement. Screenshots from headless Chrome on the development desktop. Newest first.

6 Oct 2026

Kobolds in the boiler room

Under the basement, Kobold is a coding game after EXAPUNKS. Up to four people sit at terminals round a sunken machine floor and write kobolds, programs in a small assembly language. Kobolds walk a network of hosts, carry files, read and write ports and pass values over a one-value bus. The machine (protocol::kobold) is integer only, so a run is the same on the server and in every browser from its job, its case and the programs. The room sends only those, and every client draws the run itself: hosts as plinths, links as beams with pulses, kobolds as small horned imps hopping along a link between cycles. The network is painted every frame into the same dynamic fills Commando uses; one game a room uses them.

The boiler room: a sunken pit with a small network of hosts, two players at terminals on its rim and their kobolds at two hosts
Two players on one job: one kobold reads a file in the archive, the other writes the lift's new timetable.

The same machine runs four games. Heists check a solution over 100 cases off the room task (spawn_blocking). Duels play two games with the homes swapped, so neither program gains from where it starts. Relay shifts are their line, seed and swaps, played half a second behind the room and replayed from the start when a swap comes late. Light shows drive a rig of 32 lamps that light the room through the same light list as Commando's blasts, beating to the disco's tempo, which the deck now shares on the directory.

The boiler room with a rig of lamps over the pit, several lit in pink and violet, casting cones of light onto the floor
A light show on the rig: a chase on the beat and a sparkle from #RAND.

A battlefield on a sand table

The basement holds Commando on a table sunk into the floor. Its level scrolls, so it cannot live in the static scene: the room's own painter paints it every frame into a new buffer of dynamic fills, beside the dynamic lines. The ground goes first and stamps the stencil as floor, so the shadows of soldiers, palms and trucks fall on it like on any floor. Soldiers, prisoners and you are the world's avatar instances in uniform. What comes onto the table at the far edge rises out of it, what leaves at the near edge sinks back in. Blasts get a white-hot core, a fireball, shock rings, debris, smoke and a scorch with embers, light the room through the avatar light list and shake the camera. While nobody plays, the table plays itself.

The game is lockstep: one input byte a world tick, stepped by the runner's browser, every onlooker's and the room, which so keeps the score without taking anyone's word for it (protocol::commando, only + − × ÷, sqrt, min, max, abs).

A SID, and a drum machine in the engine

Two sources are code rather than .snd files now. A SID after the C64's chip (three voices with pulse width, ring modulation and LFSR noise, its ADSR and rate table, a resonant 12 dB filter, a 50 Hz player) plays Commando's march and every effect, the effects taking voice 3. The disco's machine synthesises the drums (a swept kick with a click, a two-mode snare, six-oscillator hats), a 303 bass through a saturating ladder at twice the rate, and the DJ's mixer with an 80s chain: ADAA saturation, a Juno-style chorus, a ping-pong delay that always listens, an eight-line FDN reverb, a limiter.

The machine, native, every effect onResult
Whole mix, faster than real timeabout 56×
Bass at 1.5 kHz wide open: aliasing against harmonicsunder −45 dB
An effect switched on or off: heard within40 ms (the delay took 375 ms before it always listened)
Peak after the limiter, eight bars through the chain0.90, nothing clipped

Photo mode at its best, and the whole world

While the photo camera moves it draws a light picture (0.6 resolution, no traced light, shafts, MSAA or mirror); held still for 0.3 s it draws everything at its best, past the Quality setting and the Auto governor. A capture waits for the traced light to settle. A tick box fetches every room on the world map once and draws each whole at its world position and height, through the same neighbour path that draws the walls along a seam.

Fifty-two looks, and lines with weight

Ten looks that set every graphics property and thirty traditional ones (times of day, film stocks, materials, clean wireframes) join the twelve; U steps through them all. Lines can carry three widths, detail, edges and silhouettes, decided in the shader from the two faces each edge joins. The Fine edge theme draws dark pen lines in those three widths with hidden lines hidden, and two face themes lay stone courses and brushed metal panels in each face's own plane. The beam pass had clamped every theme to the old ten, which silenced Fine; that is fixed (GLITCHES G17).

PartThemes now
VerticesNone, Glow, Ink blob, Ring, Square, Cross, Diamond, Sparkle, Pencil knot, Pulse
EdgesNeon, Ink, Pencil, Sketch, Blueprint, Chalk, Marker, Dashed, Electric, Off, Fine
FacesLook, Paper, Phong, Hatching, Mosaic, Jitter, Halftone, Toon, X-ray, Void, Stone, Metal

A tree of words

The lexicon is an 80-tile hall. Every word said there that GloVe knows walks as a Brownian bridge from the middle of the floor to where the room's own principal axes put it, white at the trunk and coloured by the fourth axis at the end; words said one after another are joined by dotted lines. The server refits the axes as words arrive and keeps their signs, so the tree shifts rather than flips, and every client applies the same fold.

3–5 Oct 2026

Games on the city's floor

Known costs, 6 Oct

2 Oct 2026

One lit world

Rooms next door used to be drawn unlit: walk up to a seam and the light changed under your feet. Now the light volume is baked over your room and 16 tiles of each neighbour as one plan, so their lamps, shadows and neon reach across. The bake grows with the neighbours but stays off the frame.

The street with the lobby, the atrium and the crystal geode next door, each lit by its own lamps and neon
From the street: the lobby (left), the atrium (right) and the geode (below) lit by their own lamps.
Light bake, nativeTime
24×24 room, 240 objects, alone1.39 ms
The same with a dense neighbour on every side6.7 ms

On joining or when a neighbour changes; an edit in your own room still rebakes only the cells around it.

Looks that belong together

Every look in the menu is now a complete preset: the six shader looks became profile files, and choosing any look sets every display setting, so nothing lingers from the last one. A Quality setting (Low, Medium, High; Auto picks by backend) caps what a look may switch on; the raw switches moved under Fine-tune. Six new looks ship beside the shader ones.

A contact sheet of the lobby in all twelve looks
All twelve looks in the lobby, from scripts/looks.mjs, the regression check for looks.
A contact sheet of the bazaar in all twelve looks
The same in the bazaar.
Central in the Off-World look: letterboxed, grainy, amber and pink lights with blue horizontal flares
Off-World · after Blade Runner: shafts, sodium amber against cyan, anamorphic flares, grain, 2.39:1.
The lobby redrawn as coloured text characters
Character Soup · the whole frame as text, one glyph per cell by brightness.
The lobby close up in soft coral, peach and teal
Nouveau · after Transistor's painted city.
The settings panel: Look, Quality, Sound, Ambience and the Fine-tune fold
The ⚙ panel: Look, Quality, then Fine-tune.

Geometry with more to it

Floors can be raised or sunken in parts; a step of up to half a tile is walked, a taller edge is not, and balls bounce off it. Diagonal walls, striped awnings and cables strung overhead with lanterns and little signs give rooms something above eye level.

Central: the raised gate row, cables with lanterns across the plaza, the street lit across the seam
Central · the gate row up a step, cables across the plaza.
The bazaar from above with its decks, the bridge between them and the rooftop
The bazaar on three levels: decks, a bridge, a rooftop (PgUp shows the floors above).
The bazaar's street: noodle bar, awnings, a sunken square around a hologram
Its street: awnings over the stalls, a sunken square around the hologram.

A city of rooms

Central sits east of the street with a gate to every room. The rest came from pictures through the room-from-image skill, each with a style of its own (prairie, market, lab).

A Prairie School dining room: oak and brick walls, green brick piers, a long table
prairie · a dining room after Frank Lloyd Wright.
The night market street in the rain with hanging neon signs
market · a rainy night market.
The machine room: racks, a console, a hologram sculpture, rack lights and checker blocks on the walls
lab · the machine room behind the market.

A lava lamp, and charts on glass

The mezzanine has a lava lamp nearly as tall as its ceiling: a chrome base and cap, a glass that swells low and tapers up, and ten blobs of wax rising and sinking at their own pace, moved on the GPU (anim::LAVA), lighting the room around it. The CPU and memory charts moved off their panels onto panes of glass: woven from faint lines of light so they are see-through in every look, a pink rim breathing, the curves hanging in front of the glass with their echo on it and drop lines between, the labels turned toward the camera.

A huge lava lamp on the mezzanine: chrome base with a pink ring, a wire glass, glowing orange and pink wax
The lava lamp on the lobby's mezzanine.
Two glass panes with pink rims; pink and orchid curves floating in front of them
#server and #clients on glass, the room behind showing through.

Live boards

A billboard whose text is a keyword draws live data: #latency the round trips between players, measured client to client; #server the server's CPU and memory; #clients every player's; #departures who is in which room.

Two billboards: the server's CPU and memory, and two clients' curves
#server and #clients, two minutes, smoothed.
The departures board: room names, two of them lit, CITY 2
#departures on Central: rooms with people light up.

Known costs

1 Oct 2026 · build b456997

The race over WebRTC

Race traffic now runs on an unordered, no-retransmit WebRTC data channel, and the room traffic on a reliable one. A lost packet no longer holds back the snapshots behind it. The status line (top right) shows the transport.

Chase view of a ship on VECTOR RING at 192 km/h; the status line reads BrowserWebGpu · #lobby · rtc
VECTOR RING, lap 1, 192 km/h. Status: rtc.
Two players and six AI ships on the starting grid with the countdown at 1 and a name tag over the other player
Two players on the grid with the field; the other player's name tag floats over their ship.

What moved, measured

From the F3 overlay and the server's race log, localhost, a 50 Hz display, WebGPU unless noted.

MeasureBeforeAfterWhat did it
Input → server ack89 ms; 28–73 elsewhere20–38 msSnapshots every tick, queue trimming, redundant inputs, TCP_NODELAY, WebRTC
Key → GPU done, vsync20–28 ms12–16 msAt most 2 frames in flight
Key → GPU done, GPU-bound 4K940 ms≈ 30 msSame cap: frames no longer pile up in the GPU queue
Game allocations per frame4 + 3 per snapshot0Reused HUD buffers, in-place snapshot decoding
Server race tick10 µs10 µs, allocation-freePre-sized buffers; asserted by a test
Snapshot send, per tickone encode per racerone encode, 5 µsAck moved last and appended per racer
Wasm bundle3.47 MB (size-optimized)3.11 MB (opt-level 3)Fat LTO, panic=abort, SIMD128
Allocations inside wgpu27 WebGPU, 307 WebGL2unchangedOut of reach without fewer passes

Timers: the server now advertises cross-origin isolation, so performance.now() resolves 5 µs instead of 100 µs.

Thin lines

Beams thinner than a pixel had a glowing core about 0.4 px wide, which fell between pixel centres and broke into beads. Now no core is drawn narrower than 0.75 px; a line meant to be thinner is drawn that wide and dimmed by the ratio, so it keeps its light. Crops at 2× from the lobby view:

Before: distant city hairlines and the wall grid, beaded
Before: hairlines on the far towers and the wall grid break up.
After: the same crop with continuous, slightly softer hairlines
After: continuous, a touch softer, same brightness overall.

Vertices, edges, faces

Each is styled on its own, ten themes apiece, chosen in the ⚙ menu or through a preset. Edge themes also decide what happens to hidden lines (faint for pencil, dashed for blueprint, crackling for electric), and the X-ray face is a screen door that lets what is behind show through.

PartThemes
VerticesNone, Glow, Ink blob, Ring, Square, Cross, Diamond, Sparkle, Pencil knot, Pulse
EdgesNeon, Ink, Pencil, Sketch, Blueprint, Chalk, Marker, Dashed, Electric, Off
FacesLook, Paper, Phong (dithered), Hatching, Mosaic, Jitter, Halftone, Toon, X-ray, Void
Pencil preset: hatched paper walls, dark wobbly strokes, knotted corners
Pencil · knots, pencil edges with faint hidden lines, hatching.
Sketchbook preset: double-stroked edges, ink blobs at corners, dithered Phong faces
Sketchbook · ink blobs, sketch edges, dithered Phong.
Glow wire preset: clean ink edges, glowing corners, jittering multicoloured faces
Glow wire · glowing vertices, clean ink edges, jitter faces.
X-ray preset: see-through faces with electric edges and diamond corners
X-ray · diamonds, electric edges, screen-door faces.
Mosaic preset: faces broken into coloured blocks
Mosaic · pencil edges over world-space blocks.
Comic preset: halftone faces, marker edges, ring corners
Comic · rings, marker edges, halftone.
Blueprint preset: thin pale edges with dashed hidden lines, cross corners, toon faces
Blueprint · crosses, blueprint edges with dashed hidden lines, toon.
Wireframe preset: dashed edges on black faces with square corner handles
Wireframe · squares, dashed edges, void faces.
Paper city preset: pale paper faces with ink edges
Paper city · ink edges, paper faces.
Neon preset: the default glowing look
Neon · the default.
PresetGPU ms at 2400×1800Beams
Neon3.070.50
Glow wire3.250.73
Pencil3.400.99
X-ray3.771.21

Face themes cost no measurable time; vertex dots and hidden lines are extra draws, built and run only when a theme asks for them.

Light

Every lamp and glowing thing (signs, screens, holograms, arcades, candles, the bar) now fills a 3D light volume over the room, shadowed by walls. Surfaces are lit by which way they face, colour spills from signs onto walls and floors, and people pick up the light of what they walk past. The tone mapping keeps neon pink as it saturates. Light shafts in the haze are a setting.

The lobby in the Lounge look lit by the light volume: pools of light around lamps and signs
Lounge: pools around lamps, pink spill around the bar and hologram.
The lobby with light shafts: soft warm cones of haze around the lamps
Light shafts on: warm cones of haze around the lamps.
The lobby in the Diorama look lit by the light volume
Diorama, now without its per-pixel light loop.
Race view: the track floor lit by the engines of the ships ahead and the pads
The race: pads and every ship's engine light the track.
At 2400×1800, 4× MSAAGPU ms
Lounge, flat tile light (before)3.07
Lounge, light volume3.17
Diorama, light volume (32-light loop gone)3.32
Lounge + light shafts4.09

Traced light

On WebGPU, the Lighting setting adds a compute pass that traces rays through a voxel copy of the room. Neon lights the walls beside it, light bounces off lit surfaces, corners and the floor around people darken, floors and glowing furniture get highlights, and on Ultra the floor reflects the neon. WebGL2 keeps the baked lighting.

Lobby with Lighting off: baked light only
Off · baked light volume only.
Lobby with Lighting on: bounced light and neon spill on the walls
On · neon spill, bounces, ambient occlusion, highlights. 0.17 ms.
Lobby with Lighting ultra: the floor reflects the neon
Ultra · more rays, faster response, neon in the wet floor. 0.5 ms.

Graphic and Comic

Two looks drawn from reference images instead of lit: colour blocks, a triangulated wire across every face, mosaic patches and scribbles in a black void (Graphic), or a blue comic palette with ink hatching under a navy sky (Comic).

Lobby in the Graphic look: bold colour blocks, white triangulated wire, black void with a white wireframe city
Graphic.
Lobby in the Comic look: blue, pink, yellow and cream blocks with ink lines on a navy night
Comic, with the Ink edge theme.

Next