Hollow St
Every wave arrives by train
The board counts down, the tunnel lights up, and the doors open on whatever came in from the dark. The train brakes, chimes, unloads and leaves on its own schedule; the announcer has opinions about your aim.
In development
Hollow St · Canal St · City Hall
The last train left an hour ago. Something else is still running on the line.
A first-person wave-survival shooter in a late-night subway station. Every wave arrives by train.
Free, no install. A desktop browser with a mouse and keyboard.
The line
Waves come in by train. Clear the platform, grab the supply crate, take one of three perks, and every fifth train brings a boss. Survive it, board, and ride the tunnel to the next stop.
Hollow St
The board counts down, the tunnel lights up, and the doors open on whatever came in from the dark. The train brakes, chimes, unloads and leaves on its own schedule; the announcer has opinions about your aim.
The platform
Five weapons, a crowbar shove and frag grenades against crawlers that duck under police tape, spitters, screamers and riot cops with shields. Headshots, limb hits and kill combos all count, and the station takes the damage with you.
Every fifth train
Bosses telegraph a charge lane and a stomp ring. The Track Worker throws live rail that keeps sparking on the floor. The Motorman drives his own train in on the far track and comes back around with a fresh crew when he is hurt.
Between stops
Board after the boss and the train pulls out through the tunnel. Things climb in through the end doors and the roof hatch, an express thunders past on the other track, and the next station is rebuilt around you before the doors open again.
City Hall
Each stop has its own palette and layout: Hollow St's grimy local platform, Canal St's flooded trackbed and raised deck, and City Hall's tiled vault. Every one of them is generated in code from a short list of numbers.
Watch a run
Three minutes of a fifth-wave boss fight, the boarding call and the ride to the next station, played by the game's own test bot and filmed one simulation step per frame. The bot is a balance tester, not a showman. Jump to a moment below.
Controls
How it was made
three.js r185 and plain ES modules. Every texture (tile, mosaic bands, terrazzo with puddles, painted steel, posters, signs, the line map) is drawn on a canvas at boot, and every station, train and prop is built in code from a preset of numbers, with a seeded random generator so screenshots stay comparable.
A forward renderer with a fixed light count: a pool of three shadowed spotlights follows the player, fixtures flicker, and a blackout drops the station to red emergency lamps. Bloom, SMAA, grain and a damage shader do the rest. Shader programs are warmed up at load so the first wave never stalls.
Web Audio synthesizes most effects, with positional panners and a convolution reverb sized to the station. Gunshots, the train horn and groans are baked with ElevenLabs sound generation, the music beds with Google's Lyria, and the announcer lines were picked from takes on a local review board.
A bot plays the game for balance soaks, logging clear times, accuracy and ammo per wave. A blind critic agent sees only screenshots and the pitch and names the five worst problems. The videos on this page come from a film tool that holds the game loop and steps the simulation once per frame, so every clip plays at true game speed.
Designed and directed by Stewart Gregerson, built with Claude Code.