Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Source Ports

Source Ports

There are several important extensions to Doom. First, read and understand the original Unofficial Doom Specs. This is hosted at the Doom Help Service at gamers.org. Keep in mind that the specs are over ten years old as I write this help file. Since then the Doom community has learned much about the internals of Doom, mostly because id Software released the source code. To make a long story short, the single most important thing to understand is Boom. The second most important is ZDoom. Finally, the OpenGL ports.

Boom

When id Software released the source, they released a bastardized Linux version ported from the DOS version minus the sound library. Several projects ported this back to DOS, some kept it in Linux, but all were fragmented. Boom ended this era.

Boom consolidated many of the changes of earlier ports: removed limits, fixed bugs, added minor features, etc. It also standardized several extensions. For example, it used to be impossible to add new animated textures and switches because the texture names were hard-coded in the executable. Boom added lumps that allow a Wad creator to specify new switches and animated textures. It added friction, wind, and some other special effects. Dehacked patches are now read in text format at run time, and may be embedded in Wad files.

One of the most important extensions is generalized types. Boom allows, for example, a door that requires all six keys and is activated by shooting a switch. Sectors can be secret, have lighting effects, and cause damage all at the same time. This is accomplished by using the high (unused in Doom) bits of the linedef and sector type fields.

Libdoomwad supports Boom extensions fully. It understands the new Boom lump types and can work with them using C++ data structures. The format of each structure is documented fully right here in this online documentation.

If you want to understand this the hard way, you can download the source code and documentation from the Boom site.

Finally, PrBoom is the version of Boom developed after Boom was abandoned. It is currently in active (but slow) development. It boasts 100% Boom and Doom demo compatibility. This means it has all the new features, but can play back Doom demos, an important capability for the speed running sub-community: Doomed Speed Demos Archive, C O M P E T - N.

ZDoom

ZDoom is an advanced Boom-compatible source port. It supports the vast majority of Boom extensions, including its new lump types. While ZDoom supports a complex scripting system allowing the use of many features found in modern 3D shooters, libdoomwad's involvement is minor. ZDoom supports Doom maps using the Hexen format, which makes some modifications to the standard wad entries. The one that lets ZDoom work its magic is the Behavior lump. This is precompiled using a utility from the ZDoom web site and is just binary data to libdoomwad. The rest of the lumps are text-based. Literally, the other ZDoom script lumps are just text files embedded in wad files. There is no need for libdoomwad to parse these at all, so ZDoom support essentially means recognizing the lump names.

There is a wiki site for ZDoom containing detailed information about ZDoom editing, including how to write scripts.

OpenGL Ports

One neat feature several people added to various source ports is OpenGL rendering. The three most popular ports are JDoom/Doomsday, Legacy and ZDoomGL.

There are a lot of details involved in adding OpenGL to Doom, since Doom is technically 2.5D and OpenGL is used for 3D. There are fundamental mathematical issues to deal with, but they are not important in the scope of this documentation. Suffice to say that these ports work, but they require some new map resources. Specifically, the BSP process that compiles the nodes is different than in normal Doom. Libdoomwad supports these new map resources 100%.


Generated on Fri Jun 10 19:38:51 2005 for libdoomwad by  doxygen 1.4.0