GAME · TRUE 3D · THREE.JS + WEBGL_

MURKFALL — a browser FPS

A complete first-person shooter in a single self-contained HTML file. Real 3D via Three.js / WebGL: a maze with collision and gravity, hitscan shooting, five escalating waves, a projectile-lobbing boss, collectibles and a live minimap — wrapped in a tongue-in-cheek Jak & Daxter-style story. No build step, no assets: every texture is drawn on a <canvas> and every sound is synthesised with WebAudio.

Three.js r160 WebGL Pointer-lock WebAudio (synth) Canvas textures Zero assets
~/murkfall $ ./run --live
WASD move · Mouse look · Click shoot · R reload · Space jump · Shift sprint Trouble in the frame? Open it fullscreen ↗

The whole game runs right here in the page — click the frame, then CLICK TO PLAY to lock the mouse. Press Esc to release it. Loads Three.js from a CDN on first run, so it needs an internet connection — after that it's cached. Best in a desktop browser with a mouse; pointer-lock and audio start on your first click.

MURKFALL title screen — neon FPS HUD with health bar, ammo shells, Power Cell and Murk-orb counters, a minimap and red Murk-drones

Overview

MURKFALL is a from-scratch FPS that fits in one file. There's no engine and no asset pipeline — Three.js handles the WebGL plumbing, and everything else (level, collision, AI, combat, particles, HUD, sound) is hand-written. The maze is an InstancedMesh built from a tile-string map; movement uses circle-vs-AABB collision so you slide along walls, with gravity and jumping on top. Shooting is hitscan via a raycaster from the crosshair, and enemies are simple steering agents that path toward you and deal contact damage.

What's in it

🔫 Hitscan combat & feel

Raycast shooting with a muzzle-flash point light, recoil, impact sparks, a reload cycle and a hurt vignette — plus a low-poly gun viewmodel that sways and kicks.

🧱 Maze, collision & gravity

A tile-map level rendered as one instanced mesh; circle-vs-AABB resolution slides you along walls, with jump and gravity and pointer-lock mouse-look.

🌊 Five corridors + a boss finale

A hand-tuned spawn plan escalates each "corridor": red grunts, fast fragile wisps that swarm, and slow tanky brutes that hit hard. Clear one to earn a Power Cell; charge all five to unseal the Heart of the Silo.

👹 Architect-Vane boss

The Heart (wave 6) is a giant Murk-drone with its own health bar and a heavy guard detail. It lobs Murk projectiles from range on top of melee, and enrages below a third HP — faster, with a three-shot spread. Dodge, strafe and break line of sight.

◆ Power Cells & ◇ Murk-orbs

Earn a Power Cell per corridor and vacuum up 22 glowing collectibles scattered through the maze; grab them all for a score bonus.

🗺️ Live minimap & high score

A canvas minimap plots walls, your facing, enemies, the boss and orbs in real time; your best run persists in localStorage with a NEW BEST flag.

🔊 Procedural sound

Gunshots, reloads, hits, orb chimes and the boss roar are all synthesised live with WebAudio — no audio files ship at all.

🦦 A story, with banter

A silent hero and his sidekick Rax — mutated by a vat of Murk — quip over a radio bar through every wave, with the classic "still not cured" ending gag.

How it works

Want to tinker? Every knob — move speed, gravity, gun damage, mag size, wave scaling — lives in a CFG object at the top of the file, and the maze is just an editable string array. Open the game fullscreen →