doo-cr V1.0

A DOOM source port written in Crystal Lang based on PureDoom and LinuxDoom
Features
- Full DOOM, DOOM II, and Final Doom compatibility
- Working networked multiplayer with a rendezvous server implementation
- Extra in-game settings
- Bug fixes and little additions ask me about them!
- A handful of limits removed
- .MIDI (as opposed to .MUS) music support
- Command line args (see below)
- A scary look into what very unsafe low level Crystal code looks like!
- Somewhat compatible demo playback
- Runtime calculated finesine, finetangent, and tantoangle data tables
(Remove -DPRECOMPUTED in makefile) - Smooth midi panning Thanks ADLMDI!
- DeHackEd and BEX support
- Multiple sprite and flat section support
- Custom Mod API for use in Crystal
Usage
Running doo-cr will boot up an autodetected .wad file and will place the config file in the current directory.
To specify a wad file use -iwad, or if wanting to load a patch wad file as an iwad, like Chex Quest for example, use -fwad (force wad)
Use the -h/-help arg to print all useful command line arguments
How to build
Use a unix shell with make installed, on Windows I use msys2 with UCRT64, and run make. The makefile for Windows and Linux should auto install all prerequisites but for Macos you will need to install Crystal manually using homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew update
brew install crystal
Note that some package managers might use an outdated version of Crystal which will cause compilation errors. To fix this just manually install Crystal, making sure to copy bin and share.
The make file should copy over all necessary lib files for any OS into the bin folder.
Status as a Source Port
This source port will not try to reinvent the wheel.
It will not try to be super advanced like GZDoom, ZDoom, etc.
It will not try to be 100% demo compatible like DSDA Doom.
This is just my source port for me to make Doom whatever I'd like in my favorite language.
If nothing else this project serves as proof that Crystal can be programmed as a low level procedural language for game development, as well as a sign that porting libraries over into Pure Crystal is simply a matter of time and effort given my idea of two-way-bindings that I used with PureDoom to create this project in the first place.
Development
doo-cr utilized something I call two-way-bindings. I take a function in PureDoom, bind it into lib.cr, rewrite it in Crystal as a fun at the top level Not in a lib, and then turn the C function into an extern declaration.
Because of this, I was able to test each function I rewrote as I rewrote them. The downside is that the code is all very C-typed. It is in Crystal though!
The only C usage is bindings to Raylib and libADLMIDI rewriting those would be a completely seperate project
This code is extremely unsafe due to its current C-typed nature.
AI Transparency
The only thing AI has been used for in this project is mass converting the C variable declarations from C into Crystal. The file that contains this code can be found here.
There is also a copilot-working branch where I let AI have more freedom with the files it edits but this is mostly treated as a sandbox to let me see different ways of accomplishing something. I hand pick code out of this if any.
AI was not used for any other aspect of this project.
Plans
- Hardware OpenGL rendering
- By extension, shader effects
- Crystalized code (Not a null pointer in sight)
- Crystal test specs
- No calls into a
lib - Whatever I want
- Comments to help make Doom's source easier to read
- Reorganization and renaming of functions, ditto
Contributing
- Fork it (https://github.com/d-shwagginz/doo-cr/fork)
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request
Contributors
- D. Shwagginz - creator and maintainer
Special thanks and credits
doo-cr
- 4
- 1
- 0
- 0
- 1
- about 6 hours ago
- August 8, 2026
GNU General Public License v3.0
Sat, 17 Oct 2026 00:07:08 GMT