Cacodemon
A Slightly Condensed Genealogy of DOOM Source Ports
By James 'Quasar' Haley
Lead Programmer, Team Eternity

Prologue

It has been ten years since DOOM was first unleashed, but only during the last six of these years have we had access to the source code of this game we all adore. During those six years, an immense amount of time and work have been invested in the source by a diverse group of people, each team and individual with their own goals in mind for DOOM. Whereas some source ports have strived to retain or even improve compatibility, others have boldly gone into new territories and have attempted to modernize the game. This article will take a historical view of these six years of code evolution.

Bernd Kreimeier and the Beanstalk

The story of the DOOM source release actually doesn't start in the offices or minds of the guys at id Software, but in the efforts of an aspiring author. Bernd Kreimeier had an idea to publishing a book about the DOOM engine which would come with the complete source code for the game. Sometime during 1995, Kreimeier, according to notes he left in the README.book file which can be found in the Linux DOOM source archive, approached Jay Wilbur about this idea. He was anticipating a DOOM source release to match that which had recently occurred for Wolfenstein 3D. Although Bernd did receive cautious responses from some publishers, apparently certain people within id Software weren't sold on the idea at all.

Later on, during the last weeks of 1996, Kreimeier was approached by John Carmack, who wanted to know if he was still interested in the book idea. Once legal issues were addressed and the source code was sent to him, Bernd started to work with it. This is where the story of source ports actually begins.

Because the original DOS DOOM source had used the DMX sound library, id decided that it would either be too legally complicated or would require too much work to release the DOS source code. Instead, Kreimeier was given the source of the Linux port of DOOM, which was based on the Final DOOM v1.9 fork of the engine. It had many problems, including very shoddy sound support, so Kreimeier launched a massive effort to clean up and improve the source code.

As his changelog comments reveal, he actually did not have a purist mindset at all. He had some big plans for overhauling the engine, including an ambition to introduce an OpenGL-based renderer. It is quite possible that some of his changes caused compatibility woes for later source ports, most notably BOOM, which I will address later.

Unfortunately for Bernd, by 1997 the popularity and marketability of DOOM had declined past the point where a publisher would consider a book about its source code -- which would by definition only have a narrow target market, even two years prior. So, with the book idea abandoned, the sum of Bernd's efforts were released on December 23, 1997 as the Linux DOOM v1.10 source archive. This is technically the first source port.

However, it would be interesting to, for a moment, delve even further into DOOM's past, to consider some interesting facts that have been discovered about the code genealogy of DOOM during the past few years. Through careful observation and the discovery of key bugs, including the varying behavior of Lost Souls when they hit floors, it has been revealed that id's internal source tree was actually more complicated than was once thought. According to our best knowledge, it probably looks like this:



Several interesting facts emerge from this. Of course, first is that Raven's games, Heretic and Hexen, actually derive from a very early version of the DOOM engine, which is most probably v1.2 -- therefore they still suffer some bugs that were eliminated later. Most problematic for today's ports, though, are the facts that Ultimate DOOM, Final DOOM, and DOOM 95 are based on a totally separate fork of the source code than the DOOM II v1.9 build, and that Final DOOM contains various changes which can break Ultimate DOOM v1.9 demos. This more complicated history set up some of the troubles experienced by early ports.

Note that DOOM 95 is a dead end on the source port family tree. This first port of DOOM to a Win32 operating system was done by a team at Microsoft that wanted to test out the young DirectX technology on a venerable game. The port contains a number of strange bugs, as well as a couple of new features such as cheats. However, the source code is apparently either lost, or locked up permanently in Microsoft's source code archives, and has never been released.

The Emergence of DosDOOM

The community had been anticipating the release of the DOOM source with an intensity which almost rivaled that surrounding the original release of game itself. Chi Hoang immediately started work on an effort to port Linux DOOM back to DOS. This effort became the port known as DosDOOM, and is the port to which many of today's existing ports can trace their heritage, EVEN ports which are now available on Linux.

It was, in fact, the original release of DosDOOM v0.2 which was responsible for the coining of the term "source port." This term, now accepted as community lingo for any DOOM engine modification, is actually somewhat inaccurate. The term "port" generally means to bring an established code base across to another platform, a process which is necessitated by system- and compiler-specific code used in DOOM. Some veteran DOOM programmers, including Lee Killough, who later became part of the BOOM team, actually initially resisted this misnomer. But, it stuck around and is now a permanent part of our online culture.

Next -->