chemaclass / phel-doom
DOOM-lite showcase written in Phel Lang. Terminal raycaster, pure functional state, ANSI render.
Package info
github.com/Chemaclass/phel-doom
Language:Shell
Type:project
pkg:composer/chemaclass/phel-doom
Fund package maintenance!
Requires
- php: >=8.5
- phel-lang/phel-lang: ^0.54
- symfony/console: ^8.1
Requires (Dev)
- symfony/var-dumper: ^8.1
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-26 23:40:40 UTC
README
A DOOM-lite raycaster for the terminal, written in pure Phel, a Lisp that compiles to PHP. It has 256-color ANSI graphics, 10 levels, first-person combat, and a frame time of about 5 ms. See the feature list.
Play
Needs PHP >= 8.5 and a 256-color terminal.
Download the single-file PHAR from the latest release. You don't need to clone the repository or install Composer:
curl -fsSL -o phel-doom.phar https://github.com/Chemaclass/phel-doom/releases/latest/download/phel-doom.phar php phel-doom.phar
Build from source (Composer or Docker)
git clone git@github.com:Chemaclass/phel-doom.git cd phel-doom make install # or: composer install make play # or: composer play
The Docker image includes PHP 8.5, Composer, and the dependencies:
make docker-build # build image (tag: DOCKER_IMG=mytag) make docker-play # launch game (raw TTY) make docker-test # run test suite make docker-shell # bash inside container make docker-clean # remove image
Docker adds about 1 second per command. Local PHP is faster for development.
Controls
Use w a s d to move, arrows or mouse to turn and look, space or left-click to fire, r to reload, 1-7 to select weapons, p to pause, and q twice to quit. Walk into doors to advance.
See gameplay for all controls, pickups, and weapons.
Internals
- Documentation index: guides to each subsystem.
- Coming from Clojure or PHP: an introduction to Phel for Clojure and PHP developers.
- Contributing: development commands, checks, test conventions, and Phel pitfalls.
License
MIT