How I set up vanilla Doom on Linux

Doom source ports

It happened again, I got the craving to play DOOM — the original. And I wanted it to really have the feel of the original.

GZDoom is very popular, or should I say notorious for definitely not being faithful to the original. Running the actual original through DOSBox seemed quite ugly. At first, Chocolate Doom seemed to be exactly what I wanted, but unfortunately it lacked basic quality-of-life improvements, especially regarding controls. I concluded that Crispy Doom is a strictly better source port: it adds a lot of improvements over Chocolate Doom, and that doesn't mean we have to use all of them.

On Arch Linux I just needed to run yay -S crispy-doom to install it from AUR.


Otherwise, you can install it from source anyway
(follow whatever Arch Linux does in case this is outdated or if you're missing dependencies):

Download the latest release tarball, then:

tar -xvf crispy-doom*.tar.gz
cd crispy-doom*/
./autogen.sh
make -j
sudo make install  # Optional!

Getting the game

Then there was the issue of actually obtaining the game's resource files (since only the engine is free and open-source).

tl;dr I bought the Steam version
DOOM (1) is actually banned in Germany and not possible to buy on most game stores. I like Steam, and it has the unmodified game (available in a good pack Doom Classic Complete), but it knows my billing details and won't let me get the game even from a foreign IP address. Humble Bundle will, though! It sells only the Steam key anyway, so it ends up being the exact same deal. So I got Doom Classic Complete on the Humble Store, then activated the key on Steam, and the games were available.

In a pinch, of course setting up an actual VPN is overkill, instead one can just use a SOCKS proxy through a server in a foreign country. That'll be ssh -D 2222 -N myserver.example.org, followed by configuring localhost:2222 as the SOCKS proxy host in your web browser.

Installing on Steam

Then we can proceed to install the game(s) on Steam, as normal. Of course, we don't want to actually run it from Steam, as that's running through DOSBox for Windows, through Wine...

So... you could just go to the game folder, copy the WAD files and forget about Steam. But I'll stick to Steam and properly integrate Crispy Doom into the launcher.

I'll be using the globally installed crispy-doom but pointing it to the normal game directory.

I right click on "The Ultimate DOOM" in Steam and Set Launch Options to the following:

cd base && mkdir -p ~/.local/share/crispy-doom/savegames && ln -sf "$(pwd)" ~/.local/share/crispy-doom/savegames/doom.wad && crispy-doom -iwad DOOM.WAD # %command%

Explanation:

  1. Change to the base subdirectory, because that's how the Steam version organizes the files.
  2. Pre-create the savegame directory and symlink it, for Steam Cloud integration.
  3. Run crispy-doom with the file DOOM.WAD, which is now in the current directory (Steam switches to the game directory before giving control).
  4. Append the original command that Steam was supposed to use and comment it out. Otherwise (if the %command% token is not present) whatever we put here is treated as a suffix to the original command.

Same for "Doom II: Hell on Earth" — Set Launch Options:

cd base && mkdir -p ~/.local/share/crispy-doom/savegames && ln -sf "$(pwd)" ~/.local/share/crispy-doom/savegames/doom2.wad && crispy-doom -iwad DOOM2.WAD # %command%

Same for "Final DOOM"
This one actually includes two WADs and so two games to choose from when launching from Steam. No problem, we can actually detect which one it is based on the contents on the command and choose the WAD ourselves.
Set Launch Options:

wad="$(echo "%command%" | grep -oE 'plutonia|tnt').wad" && cd base && mkdir -p ~/.local/share/crispy-doom/savegames && ln -sf "$(pwd)" ~/.local/share/crispy-doom/savegames/$wad && crispy-doom -iwad $wad

And you're ready to play! Just launch the game(s) through Steam.

Your in-game status will be shown correctly to friends, even though you're running through an external executable.

Configuring Crispy Doom

Having launched the game, within the menu, choose Options > Crispness and disable High Resolution Rendering. That's the only significant non-standard enhancement over the original DOOM that Crispy Doom enables by default. Smooth Pixel Scaling should also be disabled. Uncapped Framerate is something I found nice to enable, even though it's also decidedly non-standard. The game's behavior doesn't change, internally everything runs like under the standard 35 fps, but the interpolated smoothness is really nice.

Last but not least, after being put into the actual game, don't forget to press Caps Lock, to enable the Always run feature, as a nice quality-of-life improvement. Otherwise you'll end up holding the Run button literally the entire time. But note that this is non-standard for original DOOM.

Steam Cloud integration

Integration with Steam Cloud Sync is achieved by telling Crispy Doom to write save files directly into the game's directory, like the original game would do. Crispy Doom writes save files into ~/.local/share/crispy-doom/savegames/{{lowercase(current_wad_file_name)}}/doomsav*.dsg. We preemptively symlink over that in the launch options, before crispy-doom is able to create the directory itself (otherwise you have to retroactively move the files and replace the directory).

And then Steam is configured to synchronize the files under these locations across all your computers/installations. Not only that, but you can even revert the game to the "original" DOSBox version and resume from the very same save files.

Music packs

So this is nice and all, but the in-game music just doesn't sound right. What happened? Well, the music is defined as instructions (in terms of music instruments) to be sent to the sound card. In the old days these needed to be advanced and behaviors varied greatly. You might be remembering how your particular sound card sounded. But I'm sure everyone agrees that music playback here is inferior. So instead we can get full pre-recorded audio tracks of how these sounded on an old sound card, Roland SC-55.

cd ~/.local/share/crispy-doom/music-packs

wget http://sc55.duke4.net/ogg/doom_sc55_ogg_raw.zip
wget http://sc55.duke4.net/ogg/doom2_sc55_ogg_raw_v1.2.zip
wget http://sc55.duke4.net/ogg/tntevilution_sc55_ogg_raw.zip

7z e -odoom1-music doom_sc55_ogg_raw.zip
7z e -odoom2-music doom2_sc55_ogg_raw_v1.2.zip
7z e -otnt-music tntevilution_sc55_ogg_raw.zip

wget https://raw.githubusercontent.com/chocolate-doom/music-packs/master/doom1-music.cfg
wget https://raw.githubusercontent.com/chocolate-doom/music-packs/master/doom2-music.cfg
wget https://raw.githubusercontent.com/chocolate-doom/music-packs/master/tnt-music.cfg

sed -i -E 's/\.flac/.ogg/' *.cfg

Here I'm downloading .ogg music packs rather than .flac to save space, and then point the pre-made music config files to use those.

Restart the game, and it will pick up those audio files instead of the default music playback.

Created (last updated )
Comments powered by Disqus