Tomb

The Sunken Crypt. Find the key, slay what guards the stairs, and descend. A first-person dungeon crawl in the Eye of the Beholder tradition — you move square by square, turn in place, and fight in real time.

The download is a folder of plain files with three.js already inside, so it runs offline. Browsers block ES modules on file://, so serve it rather than opening index.html directly: python3 -m http.server inside the folder, then open localhost:8000.

Engine
three.js r183
Assets
All generated in code
Build step
None
Download
212 KB zip
Status
Playable demo

What it is

A small dungeon crawl demo: one level, a four-hero party, doors that open and close, monsters that come for you, and a stairway down that something is standing in front of. Movement is on a grid the way the old Westwood crawlers did it — you step forward a whole square, and turning is its own action, which is what makes a corridor feel like a corridor.

No asset files

There are no PNGs, no sprite sheets and no sound files anywhere in the project. Every wall texture, monster sprite, item icon, hero portrait and sound effect is drawn or synthesised at runtime — the textures as procedural pixel art on a canvas, the audio through WebAudio. The whole game is seven files and 84 KB, and three.js itself arrives from a CDN through an import map, so there is nothing to compile and nothing to bundle.

The level is an ASCII map. Editing the dungeon means editing a block of text in src/level.js and reloading the page.

Controls

KeyAction
W A S DStep forward, strafe, step back
Q E or Turn
SpaceOpen or close the door ahead
1 2 3 4Attack with each hero
HDrink a healing potion
Click a portraitOpen that hero's character sheet (Esc closes it)

There is also an on-screen movement pad, so it plays on a phone.

How it's put together

  • index.html, style.css — the page shell and the stone HUD
  • src/level.js — the ASCII map, its legend and the parser
  • src/textures.js — procedural pixel art for walls, doors, monsters, items and portraits
  • src/audio.js — WebAudio sound effects
  • src/main.js — world building, grid movement, doors, monsters, combat and the HUD

Running it yourself

ES modules need to be served over HTTP rather than opened from disk, so from the project folder:

python3 -m http.server 8137

Then open http://localhost:8137.