Doom It Yourself

Portable Doom source code based on iD's LinuxDoom 1.10 sources

In case you just wandered in on this page because you were looking for a Doom binary for DOS/Windows, this is the wrong place for you. Have a look at the Source Port Section at Doomworld and pick your engine from there. Then you'll need a WAD file with the actual level data; you can download the shareware version of the Doom (1) WAD from the iD site here, although the full WADs for Ultimate Doom and Doom 2 are much more fun.

Last update: 12 May 2003. See News.

Don't expect a fancy web-page, I have more important things to do, so here's just the bare bones.

Formerly, when you downloaded Doom It Yourself you got an archive with patches. Since the license of the Doom sourcecode was changed to GPL late last year, this is no longer necessary or desirable. There is now only an archive with the full source code, no patching process is necessary anymore (making things easier for all parties involved).

A side effect of the GPL license is that people may distribute, even sell binaries of the DIY source code, as long as they also make the source code available under the terms in the GPL. Since there's also a commercial Doom distribution and I want to preserve the "build-your-own" spirit of DIY I won't put binaries on this webpage, however.

Interesting Doom-related links:

Some Features


Quick installation guide for Unix users

More information

Make sure you read all the UpdateM* files and the ReadMe file in the DIYDocs directory. These give you valuable information about changes not only of DIY features but also of compile options.



armDeu bugfix update.


DIY 4.4.2 released

This is a small update release which mainly fixes a few bugs.

As usual, a full description of the changes can be found in DIYDocs/UpdateM44. Click here to download the source archive (759197 bytes).


DIY 4.4 released

Long time no update; well, the engine was pretty darn stable and I didn't feel like adding features for a while. I started working on the code again to make it 32bit compatible for Iyonix users and added some cool new stuff while I was at it. For a full list of features read the file UpdateM44 in the DIYDocs directory; the most important changes are:

Click here to download the source archive (756651 bytes). Note that there are also new versions of armDeu and the frontend.


Small bugfix: when saving a game from automap mode, the game may crash when loading this game back in (at least in Boom). The fix for this problem is adding the following lines to the very end of function P_UnArchiveMapNew() in p_saven.c:

  if (automapactive)


DIY 4.3 release

Finally a new version of DIY ;-). As usual, a full list of updates can be found in DIYDocs/UpdateM43. So here's just some of the main points:

This version is now superceded by DIY 4.4.



Caveat re. the 10 sector WAD and wadPtr: don't use wadPtr on this WAD (nor its successor)! Some of the levels will simply not work anymore, be it because doors can't be opened (level 16) or doors / walls aren't removed when they should (level 5). The reason is probably because both the 10sector WAD(s) and wadPtr use similar tricks which conflict with each other.


Little bugfix for RISC OS users (or whoever uses the ARM assembler plotters): when compiling without DIYNOSHORT defined and using a vertical resolution higher than 255 pixels the redraw of things gets screwed up; this is a bug that got introduced in DIY4.1. Note: this bugfix is obsolete, just get the latest version.


DIY 4.2 released

As usual, a full list of news is in DIYDocs/UpdateM42. There aren't too many changes all in all, at least compared with 4.1, but there are some pretty nice ones:

This version has now been superceded by DIY 4.3 and is no longer available from this page. Get the latest version instead.

28-Aug-2000 Source release of armDeu (which despite its name is quite portable).


DIY 4.1 released

For a full list of news see the file DIYDocs/UpdateM41 contained in the archive. The most important changes are DIY4.1 would have come out a lot earlier if it hadn't been for the freezes of the resampling engines on RISC OS. All I can say after looooong and exhaustive tests is that the freezes seem to be linked to keyboard input in the Shared C Lib. Using a resampling engine linked against UnixLib has never frozen on me in many many hours of playtesting.

This archive is now superceded by DIY 4.2.

As with most of the DIY releases I'll be away on vacation from tomorrow (28 Apr 2000). You can reach me again from the 22 May 2000. Until then: have fun with the new version.


Updated the frontend to version 1.14.


Updated DIY4 since I was in munich today anyway. The new archive (DIY4b) fixes the nightmare/fast mode bug, the Boom-crashes that happened sometimes after loading a new level, recognizes shared lumps and so on. (Version is now obsolete, get DIY4.1 instead).


(Updated 5:10pm: problems with nightmare- and fast mode demos fixed!)


Updated WadPtr. This version fixes a bug that was still in the first release, is much nicer in its memory requirements, got about 10 times faster in sidedef packing and rebuilding WADs with lots of lumps got faster by about infinity.


Ported Simon Howard's WadPtr 2.2 to RISC OS and Unix. This is a tool that compresses WADs by transforming some of the lumps like sidedefs and patches. The resulting WAD is still usable by any Doom engine, unlike with the WAD compression offered by something like armDeu.


Found a bug in DIY's dehacked.c file that has been in there forever and just hasn't manifested itself before. The first time I noticed something going wrong was when I tried out Doom2 X-treme GOLD where this meant that the shotgun-replacement didn't shoot and some enemies in the first level were basically invincible. This bug has been fixed in DIYM4. news 1-Oct-99).


  1. DIY M3.4 now official. In addition to the features mentioned in the preview version there's now also transparency in 16/32bpp modes thanks to Darren Salt who did the ground work. I added the plotters for 16bpp and 32bpp resampling. Transparency can be toggled at run-time using a cheat (dstrans). Also the monster infighting cheat, formerly only available via a DeHackEd script, can now be activated with a cheat (adfight).

    DIYM3.4 is now superceded by DIYM4.

    For the first time there's also the full source available for download. With the myriads of source ports for PCs out there it just seems ridiculous to continue releasing patches only.

  2. Updated armdeu. Now you can list the levels in the specified WADs using armdeu -p.


Updated armdeu for all platforms. There was a minor bug in the pattern matching code. So minor in fact, that I didn't change the version number.

And another thing: if you're running DIY on Linux you have to add -fwritable-strings to the compiler flags, at least if you want to use DeHackEd. Otherwise you might get segmentation violations.


Version 1.14 of armdeu available for RISC OS, Solaris and HPUX.


  1. Version 1.13 of the frontend available. This may be needed for the 3.4 version of DIY because it allows to junk the DigitalRenderer commands in the startup script.

  2. Version 1.13 of armdeu available; this version now does proper IWAD merging.

  3. DIY M3.4 preview available. This doesn't yet include everything I'd like in there but since I'll be away 'til mid-may I'll release a preview now which already has some very nice improvements: The preview is now obsolete. Get the official version.


  1. Version 1.12 of frontend available. This fixes a small remaining bug that could lead to address exceptions if recursive game definitions were introduced as "game" rather than "game =". Click here to download the latest version.

  2. DIYM3.3 now available. The most noteworthy news is optional texture resampling in 32bpp modes. That means textures do no longer look blocky when magnified but are smoothly graded. Don't even think about using this unless you have a StrongARM, though, because it eats up very much processor time. If you want to see how it looks here is a scene from Doom 2, rendered on a Linux machine (266MHz P2, actually playable at this resolution with texture resampling!) with and without texture resampling. Both images are in the 60-70kB area.

    Other changes are a new Makefile which removes the need for multiple source trees for different colour depths, idclev no longer aborting with bad Doom 2 level numbers and a small fix that cures the wrong backgrounds on a wipe that could happen in higher colour depths with only two frame buffers. For more info see the UpdateM33 file contained in the archive.

    This version is now superceded by DIY M3.4.


Everything updated:

  1. Version 1.11 of armDeu available. This will correctly output even badly built PWADs and allow extracting only lumps that match a certain pattern.

  2. Version 1.11 of the frontend available. Fixes some minor bugs and has a new menu entry to automatically load FrontData into an editor. Click here to download it.

  3. DIYM3.2 is here!

    DIYM3.2 features:

    This version is now superceded by DIYM3.3 (see News of 16 Nov 98). You can download the latest version from there.


Various updates:

  1. Version 1.10 of armDeu available. This can also output PWADs and compress WADs for the DIYM3.1 engine (and decompress them).

  2. Minor update 1 for DIYM3 is available (in future called DIYM3.1). This enables the player to use WADs compressed with armDeu 1.10 completely transparently. It also fixes the map colours in old 8bpp modes. This minor update is now superceded by major update 3.2 (see above) and is no longer available.

    Note: due to decompression and the buffer this requires the player needs a little extra memory, starting it up in 1024k does no longer work. Increase the default wimpslot, it'll grow beyond 2MB as soon as Z_Zone kicks in anyway.

  3. New version of the frontend available. This offers a new menu for misc options as well as recursive game lists (i.e. submenus). Click here to download it. Unfortunately I had to change the format of the configuration file quite a bit, but the new one should be future-proof.


A small frontend for DIY is now available. Click here to download it. Read the !Help-File for more information.


The third major update (DIYM3) is here.

3rd major update features:

This update is now replaced by DIYM3.2 (see above). For more information make sure you read the file UpdateM3 in the DoomItYs directory.


Docs on how to use more colourmaps in DIYM2 32bpp modes. Since DIYM2 is now superceded by DIYM3 which already contains all the hooks for more colourmaps this page is no longer available.


New version of armDeu available.


The second major update (DIYM2) is here.

2nd major update features:

For more information read the file UpdateM2 in the DoomItYs directory. This update is now replaced with the third major update.


New version of armDeu available.


The first major update (DIYM1) is here. This overrules all other updates and notes previously released. To apply these patches you need an unmodified copy of the sources you got after a successful Doom It Yourself installation.

The update features:

The first major update is now superceded by the third one, which contains all the changes in this one. You can download the new update archive from there. For more information make sure you read the file UpdateM1 in the DoomItYs directory.

Demo Lumps

Some demo lumps I recorded. Get the WAD they they were recorded with, put the *.lmp file where your Doom engine can see it and play them by adding -playdemo demo-name-without-extension to the command line (in addition to the switch for adding the PWAD). Note that I'm not a Doom God, so don't expect anywhere near TAS performance. Also I'm a keyboarder, so things might be a bit jerky at times. Still, it's kind of fun, I gotta do this more often...

armDeu 1.18b (GPL)

Many of you will probably have come across archives containing additional WADs and a DOS program called DeuSF. The patch files wouldn't work when added using Doom's -file switch. The reason is that you have to merge the patch WADs with your main WAD ((Ultimate) Doom, Doom II) which is what DeuSF does.

I downloaded the Deu source, had a look at it, extracted the bare essentials to perform the WAD merging and compiled the whole thing, which resulted in armDeu which you can download here (source plus arm-riscos binary).

I successfully built the WADs for AliensTC and Simpsons using armDeu, for instance.

Version 1.00 can also handle Doom 2 WADs now. I hadn't noticed this initially so I ended up with only one new level when I built Eternal III. This new version remedies that. But a warning to all Eternal III users out there (and probably some other 3rd party WADs): be very careful about using these WADs with older versions of DIY (before major update 2) because any but the first level of Eternal III will crash your machine big time. It's fixed in major update number 2.

Version 1.01 offers a new command-line switch -e which will eliminate multiple lumps with the same name, leaving only the last one. Using this switch is highly recommended whenever you're using the Ultimate Doom WAD as main WAD, because that one contains 124 duplicate lumps (which is a known problem, they're not supposed to be there) which not only take up 800kB too much space but also screw up a lot of your patched sound samples (e.g. AliensTC). If you want to check whether a main WAD contains multiple lumps just type armDeu -e main-wad and it'll tell you whether it found any.

Version 1.10 can also write out PWADs (older versions could only create IWADs) and compress WADs for use with the DIYM3.1 player (see News 12-Jun-98). For more information read the !Help file.

Version 1.11 will correctly build badly designed PWADs and allow extracting only those lumps that match a given pattern.

Version 1.12 can output raw binary lump data instead of complete WADs and fixes a bug in the pattern matching code.

Version 1.13 now does proper WAD merging, something I put on hold ever since the DIY engine could do it itself. There are problems when creating IWADs that require sprite/patch/flat merging, however, so this is now fixed. All sprites, flats and patches are each merged into big, continuous lump ranges that any Doom engine can understand.

Version 1.14 can now create WADs from raw binary files. You can use this to merge single lump files into a big WAD that's easier to handle. I used this system to merge all the Hell Revealed demo lumps into a compressed PWAD.

Version 1.15 can list all the levels in the specified WADs and fixes a little bug in the pattern matching code.

Version 1.16 recognizes shared lumps as created by WadPtr and doesn't expand them any more by default, thus saving space.

Version 1.17 has basically no new features but is a cleanup for a full source code release under GPL license. Maybe the WAD compression code will be interesting to some people: lump-based LZ77 with very fast decompression. Level data usually compresses to 30-40% its original size, graphics to 40-60%. Intended for seamless integration in Doom engines (implemented in DIY). Examples: doom2.wad compresses from 14258kB to 8056kB, eternal.wad from 21998kB to 10299kB. On a 400MHz Ultra Sparc II CPU I get about 12MB/s decompression rate for doom2.wad and 14MB/s for eternal.wad, in other words you won't experience a speed penalty due to compression unless you have very old hardware, but you'll save heaps of space.

Version 1.18 no longer contains the compression code but uses my fastlz library to avoid duplicating code between armDeu and DIY. You therefore need the fastlz library in order to compile armDeu for your system; fastlz is distributed as part of the DIY source archive or as a standalone archive.

Version 1.18b fixes a bug introduced in 1.18 which affected building compressed WADs from already compressed sources. Note you'll need version 0.01 or newer of the FastLZ library if you want to compile this release yourself.

Additionally there are Unix ports of armDeu available:

WadPtr 2.3

(updated 1-Oct-99)

This is a port of a tool by Simon Howard "Fraggle". It allows you to compress WADs by packing sidedefs, linedefs and patches. The cool bit is that the resulting WADs are still usable by any Doom engine as the transformations produce perfectly legal WAD structures. This also makes it feasible to combine the compression offered by WadPtr with the compression of armDeu, for example (which compresses a typical PWAD to 30%-40% its original size). Typically level data is reduced by about 20%, patches usually compress considerably worse. In contrast to the compression of armDeu this saving in space doesn't only have a beneficial effect on your harddisc space but also on Doom's runtime memory consumption (i.e. a level compressed by 20% also takes up 20% less memory when you play it). For more information read the text-file contained in the archive or check out Simon's homepage.

There are binary versions for RISC OS, Sun Solaris and x86 Linux available here. I've used this version on hundreds of WADs now without any problems whatsoever, so I'm sure I can call this a stable and reliable tool now.

Warning: don't use WadPtr on WADs compressed with armDeu! You'll have to uncompress them first.

WadPtr 2.3 for RISC OS

WadPtr 2.3 for Sun Solaris (2.6)

WadPtr 2.3 for Linux

WARM 1.6

The WARM source code is available in the xwadtools archive; from the documentation: "WARM's main purpose is to build the NODES, SSECTORS, SEGS, BLOCKMAP, and REJECT resources from the basic resources that compose a level". My main incentive to do the port was to provide a reject map builder for RISC OS. The reject map of a level contains line-of-sight information for all sector pairs within the map and can help the Doom engine enormously in quickly discarding non-visible sectors when rendering the screen, thereby speeding things up dramatically. For instance some of George Fiffy's Boom maps play like molasses because he didn't build a reject map for them. You can check whether a map has a valid reject map (and several other map stats) by writing warm -emstat wadfile and checking the output of the Reject field; if it says "zeroed" there's a good chance the level can be made a lot more playable if you create a reject map for it by typing warm -r wadfile outputfile. Some notes:

You can download WARM from here. This archive contains source code and RISC OS binary. The source code also compiles fine on Solaris, HPUX and Linux and I sent my changes to the maintainer of the xwadtools archive so my work won't be lost on future versions of the official distribution.

DIY frontend

This is a small frontend for DIY that was designed with hundreds of add-on WADs in mind. It doesn't have any flash icons or animations, all it provides is a menu from the icon bar which you can use to configure the startup script used for launching DIY. It is now 32bit compatible (as of version 1.15)

The configuration is done via a textfile called FrontData located in the application folder. You can specify an arbitrary number of screen modes, games (can be new WADs) and miscellaneous options. Games can be ordered hierarchically, for instance the Master Levels could be a submenu and so on.

For people who use PWADs rarely or are scared of editing the configuration-file by hand this frontend is probably not the way to go; if you've got hundreds of PWADs to take care of you'll soon appreciate what it does for you, though.

Click here to download version 1.15 of the frontend.

Hints & Tips

Andreas Dehmel, 16-Mar-2003.

Doom is a registered Trademark of Id Software.
Back to my software page.
You can contact me by email here.