I wondered what a DOOM engine looks like if you draw it with a beam instead of pixels. The walls are lines. The corners are bright. Old frames decay.

Oscilloscope Raycaster

A DOOM-style engine where each wall is a glowing vertical line. Navigate a 14×14 labyrinth. The phosphor screen never fully clears — old views linger and decay behind the new one.

Initialising 0 cells traced

Arm the signal, then walk the labyrinth with WASD or the arrow keys. A / D turn. Close walls chime.

Cells Traced 0 / —
Facing
Wall Distance — m

The oscilloscope aesthetic reverses what software rendering usually hides. In a normal raycaster, filled columns make distance invisible — every wall looks opaque and solid. Here, the thinness of the line is the rendering. Far walls are barely there. Close walls are bright enough to glow. The room only exists as a trace.

Canvas
320 × 200 px, rendered as crisp low-resolution canvas.
Map
14 × 14 grid; 0 = open cell, 1 = wall cell.
Field of view
60 degrees (Math.PI / 3), cast across one ray per canvas column.
Raycaster
DDA grid stepping, up to 64 steps per ray, with side-hit tracking for wall brightness.
Phosphor persistence
Each frame covers the previous frame with rgba(0,0,0,0.22) instead of fully clearing it.
Beam color
RGB 51, 255, 102, with canvas shadowBlur for the green glow.
Motion
Move speed 3.5 u/s; turn speed 2.2 rad/s; collision margin 0.28 map units.
Audio path
Browser-native oscillator.type = 'triangle'; 55 Hz drone, close-wall chimes, and no NES-style PeriodicWave.

Shane Curry, "Phosphor," https://shanecurry.com/lab/toys/phosphor/, published 2026-04-04, updated 2026-04-30.