phel-doom

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
bash: no clone, no Composer
$ curl -fsSL -o phel-doom.phar https://github.com/Chemaclass/phel-doom/releases/latest/download/phel-doom.phar
$ php phel-doom.phar

phel-doom in a terminal: a textured stone corridor, a baron winding up an attack with a warning mark over its head, two monsters behind it, shotgun in hand, heart HUD across the top and the level minimap on the right
A real frame, every pixel a text cell. Freedoom sprites, textured walls and floors, the heart HUD and a live minimap.

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 world map 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.

Move and look

Move and strafe with WASD. Turn with ← → or the mouse, look up and down with ↑ ↓.

Hold Shift or X to sprint. Walk into a door to open it.

  • 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

See it move