A faceted shaft that never resolves into a square room. Drift through it. Brush the wall. Let it ring.

Software Rendered Descent

A 2.5D falling scene rendered on the CPU, with a bell tone lifted from the same synth logic that powered Dead Beat.

Calibrating descent 0 chimes

Arm audio, then drift with WASD or the arrow keys. The shaft chimes when you strike the wall.

Depth 0 m
Drift 0.00
Wall Proximity Centered

This piece treats falling like navigation. You are always descending, but the tunnel pulls and twists just enough to make the drop feel physical. The center stays dark and distant while the walls pick up ring seams, facet edges, and impact flashes as they rush past.

Framebuffer
160 × 120 px (4:3), low-resolution by design, scaled up with crisp pixels and a scanlines overlay.
Projection
Per-pixel raymarch with focal length 1.05; aspect 4:3 baked into screen-space sample arrays.
Raymarch budget
28 steps per pixel, max distance 40 units, surface epsilon 0.035; adaptive step 0.045 ≤ Δ ≤ 1.15.
Tunnel SDF
18 facets per ring, ring spacing 1.35; per-facet radius from 1.78 + sin(ring · 0.43) · 0.16 + sin(ring · 0.15 + 1.7) · 0.1 with hash-based coarse and fine noise plus a dimple term.
Camera physics
Base fall 4.1 u/s; boosted 6.2 u/s (Shift); drift acceleration 5.8 u/s²; lateral drag 3.4; center pull 1.05; player radius 0.17.
Timestep
Variable, capped at 50 ms per frame to keep physics stable on stutter.
Fog
Exponential: fog = exp(−travel · 0.078); impact flash adds a per-channel additive term.
Lighting
Single directional light at normalize(−0.42, −0.26, −0.87); rim term (1 − view·n)2.4; per-ring seam highlight.
Audio: bell synth
Master gain 0.16; bandpass at fundamental × 2.2 (Q 2.4, capped at 3200 Hz); 3-voice triangle + sine harmonics at ×2.01 and ×3.17; envelope 0.02 s attack, 1.45 s primary decay.
Audio: triangle wave
NES-style 32-step staircase reconstructed as a Web Audio PeriodicWave from 24 cosine/sine harmonics. Same generator family used in Dead Beat.
Bell scale
MIDI [69, 72, 76, 79, 81, 84] — A4, C5, E5, G5, A5, C6. Impact intensity currently raises the selected scale note by up to 6 semitones through the collision path.
  • Live demo source: /assets/falling-hall/main.js on this site. No separate public repo yet.
  • Bell synthesis lineage: the triangle-wave generator pattern is shared with Dead Beat and later extracted into the public chewgum-dsp v0.1.0 repo.
  • Rendering approach: signed-distance raymarching against a procedural facet tunnel, with adaptive per-pixel step size, exponential fog, and a single directional light with rim and seam terms.
  • Implementation note: pure CPU rendering into a 160 × 120 ImageData buffer, scaled up by the browser. No WebGL, no shaders. Physics and audio triggering run from the same main loop; synthesis is scheduled through Web Audio.

Shane Curry, "Falling Hall," https://shanecurry.com/lab/toys/falling-hall/, published 2026-04-04, updated 2026-04-30.