PHEL-DOOM
A DOOM-lite raycaster that runs in your terminal. Written in pure Phel, a Lisp that compiles to PHP. No GPU. No engine. A frame loop and a lot of escape codes.
- 10 levels
- 10 monsters
- 7 weapons
- 4 difficulties
- 256-color ANSI
- PHP ≥8.5
$curl -fsSL -o phel-doom.phar https://github.com/Chemaclass/phel-doom/releases/latest/download/phel-doom.phar$php phel-doom.phar
A full game, in your terminal.
Not a tech demo. Levels to clear, monsters that hunt you, keys to find, a boss at the end.
256-color raycaster
Full-viewport ray casting drawn in half-block cells: two colors per cell, textured walls and floors, depth fog, sprite occlusion. Resize the terminal and you see more of the room, not a bigger one.
10levels and a boss
A tutorial floor, 8 levels whose walls and exits change every run, and a hand-built cyberdemon arena. Color keycards, locked doors and hidden secrets.
10monsters with real AI
Imp, demon, cacodemon, baron, cyberdemon, spectre, revenant, archvile, mancubus, pinky. Each one runs a sleep, alert, hunt, attack brain, wakes its neighbours when you shoot, and throws fireballs you can dodge.
7weapons
Pistol, shotgun, chaingun, chainsaw, BFG, incinerator, rocket launcher. Ammo carries between levels. Splash damage, a pistol round that punches through every monster in line, and monsters that shrug off fire.
Horror beats
A heartbeat when your health runs low. Sudden silence. Blood on the screen. A warning when something is behind you.
Pure-functional core
One immutable
worldmap flows through input, step, cast, render. Side effects live in one IO layer. The game logic is pure and covered by 4,000+ tests.
Controls
Press H in game for the full list.
- SpaceFire (or click)
- RReload
- 1··7Weapon (or wheel)
- FSecret walls, switches
- ETurn around
- MMinimap
- NSound on or off
- HHelp (or Esc)
- F5F9Quick-save, quick-load
- PPause and settings
- QQuit (press twice)
- F3Debug overlay