One topic that has been little recognition within Doom are source modifications. Making modifications at well, the source, these works provided new features to an existing source port. Because they relied on specific versions of a port’s source code, their flexibility was rather limited. When new ways of scripting became available, the source modification as we knew it would peter out of existence.
For ZDoom, source modifications were more common in the late nineties and early 2000’s, simpzdoomfuly because advanced scripting methods like DECORATE weren’t around (DECORATE made its first appearance in ZDoom 2.0 beta 13, of August 27, 2002), let alone ZScript. At best, when it came to ZDoom, all one had was ACS scripting, introduced in ZDoom 1.16.
Within these limitations, source modifications in ZDoom were definitely a thing. To provide something beyond ACS and, as we will find out, even new renderer features, source modifications were a short but interesting phase in ZDoom’s history.
This article seeks to list and review these modifications for ZDoom, but before we start our journey, we have to ask ourselves: what is a source modification, anyway?
Source modification versus Source port:
So what are the differences between a source modification and a source port?
- A source modification is meant for a specific goal in mind, adding a few features that aren’t significant enough to warrant the ‘’port’’ moniker, and done when existing scripting methods did not cut it.
- A source port adds several new features on top of an existing codebase, enough that it's distinctly different compared to its original.
A list of ZDoom based source modifications:
Over the years, the ZDoom port has played host to various source modifications. These are:
- Spice ZDoom
- Chilvence’s ZDoom96x
- The Ultimate ZDoom
- DesktopDoom 2
- Nightmare Squad
- The Battle For Mars
- Super Sonic Doom
Using ZDoom 1.22 as a basis for a custom source modification created by SpiceOne, Spice ZDoom allows the player to natively play as a monster from Doom’s beastiary, with the exception of the ArchVile, Spider Mastermind or Pain Elemental.This can be enabled before starting a game, or mid-game. The player is also able to utilize the monster’s weaponry and in the case of the Cacodemon, may appear ‘’floaty’’. Although now achievable with advanced scripting, Spice ZDoom provided a novel enhancement on the standard Doom gunplay. After all, how do levels play out when you can play as a Mancubi?
Before GZDoom, Graf Zahl had a heavy hand in the socalled ‘’Community Build’’: Named 96x, together with Grubber and Chilvence he brought DECORATE based weapons to ZDoom when Randi’s development iteration was significantly slower then what the community at large wanted to have.
Inbetween these developments, Graf worked on a patch to get the Team Eternity’s Caverns of Darkness total conversion properly working in modern environments The release version at the time relied on the ‘’CoD Engine’’, a customized Eternity build that only ran in DOS. Frustrated by the lack of modern OS support, Graf created ZDoom-cod, a custom build based on ZDoom 2.0.96 with his DECORATE weapons code already in, plus a CoD specific patch. It appears as ‘’2.0.96 (CoD custom)’’ in the console.
This was initially uploaded to /idgames on January 23, 2005. It only existed briefly, as Randi merged most of the code in February 2005.
Today, Caverns of Darkness is supported through a .pk3 patch, making the need for a custom executable redundant.
Prior to the arrival of the ‘’Community Build’’, Chilvence of the Community Build Trifecta (Grubber, Graf Zahl and Chilvence) decided to toy around with what was to be 2.0.96x and added in the first preliminary support for DECORATE based weapons. Since the first official Community Build was some time off (And Graf’s Ultimate ZDoom build yet to be seen), Chilvence released his version i n January 2005, providing a glimpse of the possiblities that were to be offered by the Community Build. It was the first stepping stone in a long lasting line of improvements for ZDoom, and is now known as Chilvence’s ZDoom96x.
The Ultimate ZDoom:
In development before Chilvence’s build or the Community Build even existed, during development of the Community Build Graf Zahl did his own personal improvements, providing additional DECORATE definitions on top of whatever the Community Build supported at the time. As such, it is a Community Build off-spring unlike Chilvence’s ZDoom96x build. Known as 96x-2, it was nicknamed the Ultimate ZDoom, highlighting Graf’s custom changes at the time. It is this an important stepping stone in the Community Build legacy.
Easily one of the more interesting source modifications out there, XMas99, a two level Christmas themed mod made by Chrozoron and released on December 24, 1999, came in a regular WAD version for ZDoom, but the other, more famous version of it involved a custom source modification, made by Darkfang (Who later on, as NightFang, would create the ZDaemon and ZDaemonGL source ports) based off ZDoom 1.17c.
XMas99 was unique in the sense that it modified imp fireball behavior to act more like a snowball, so with a gravity affected arc. The most obvious change is however its particle system: Unlike the standard particle system at the time, which involved textures and could exhibit slowdown. XMas99 appears to have utilized a tree actor to achieve particles and snow. You could place one of these actors in a level, and in that area, it would snow. The source modification also supported auto-loading of a resource file and a specialized icon.
Despite being based on a very old ZDoom build, XMas99 is still playable on modern operating systems with minor tweaking. It stands as one of the few source modifications to actually improve the visual fidelity of the engine in a hardcoded fashion.
Enjay expanded upon the two level demo that was XMas99, by combining other Christmas themed levels together to form a 9 level set piece in 2000. Still utilizing the XMas99 engine (Now renamed as XMas00.exe), it was, on Enjay’s own accord, not its best or most original work, but it provided an extended showcase into the possibilities of the source modification.
Back in the day a program existed to craft a screensaver out of a Doom level. This hacky feature, based off PrBoom, used Visual Basic elements to get the job done and was called DesktopDoom. A later release switched over to a modified ZDoom source chassis, based on ZDoom 2.0.57. It came along with a small deathmatch WAD with ZCajun bots that would cycle through different in-game camera’s to enable various viewpoints of the map, but any WAD could effectively be chosen. You will need to make some adjustments to a map to make it DesktopDoom-compatible, details of this are provided in the manual. Due to the hacky nature of this modification, it requires to be run in compatibility mode in 256 colours in atleast Windows 8.1. You then need to select the .scr file and go into Personalisation, Screensaver and select Configure. The configuration dialog appears underneath other windows too.
ZDoomFu was a prestige project of Anonone, bringing various kung-fu moves (hence the ZDoomFu moniker) as well as crouching to ZDoom. Originally started on the ZDoom Community Build, multiple versions followed, including a spinoff (‘’Blood Opera’’) with the last release being based on 2.0.98 as ZDoomFu 3.5. It was part of a mapping project, called DoomFu, but as time progressed, the source modification took up the most attention from its creator. ZDoomFu enables things like wall running and jumping, lunge attacks and flying kicks and although the speed increase is significant, with a bit of practice you make DoomGuy turn into the Bruce Lee Slaying Machine he always was meant to be.
KGZDoom emerged in the midst of a turning point for ZDoom, back in 2005. With the lack of updates rising from its creator, the ZDoom Community Build emerged as a site-wide effort to continue development of ZDoom during this period. The primary benefit was the introduction of DECORATE for weapons and monsters. KGZDoom, created by kgsws, took the ZDoom Community Build and went one step further.
The first release from May 2005 implemented a new class (A_RailAttack) that allowed particle flash effects to be operated in randomized patterns. A later, August release implemented a flag (+DRIVABLE), that would see actors, monsters and various other things be drivable, as if they were a vehicle. An attempt was made to get this code into mainline GZDoom, but due to the hacky nature, was as such dismissed. Nevertheless, KGZDoom remains an interesting (early) tech case for vehicle support in ZDoom , more so due to the included demonstration WAD.
Similar to the DoomBot, Martin Collberg, aka ‘’Yoghurt’’ crafted his own bot for the Legacy port, this time in version 1.25 and calling it the Cajun bot. For ZDoom, he initially provided version 0.71, based on Legacy 1.28 to Randi Heit, who first integrated it in her ZDoomTest release version 1.18 Test 6, before providing version 0.97 that appeared officially in ZDoom 1.18a (Released September 15, 1999) It was called ZCajun in this release. After this, Collberg decided to fully move his Cajun bot to ZDoom, in this case version 1.22 and provided a standalone release, 0.99 on May 8, 2000. ZCajun saw widespread adoption, being used by ZDaemon and other ZDoom based source ports, often distributed as an integrated part rather than a standalone package.
Nightmare Squad, also known as NSquad, was the first source modification to provide new hardcoded weapons to ZDoom. Whereas Version 1.1 was based on ZDoom 1.18, the final version 1.2 is based on ZDoom 1.22. A WildWeasel favorite, Nightmare Squad brings tactics to your Doom maps. It does so with a fresh set of weapons, but also with new mechanics, like reloading, unloading, dropping and picking up of said weapons as well as armor and ammunition, done through new command functions.
Alongside alternative firemodes for several weapons for different modes of attack and the ability to switch between, for example, different grenades, you are able to use binoculars, nightvision or bandages equally the same way. In accordance with these new mechanics, Nightmare Squad also implements a weight system that tracks the combined weight of your ammunition, weapons and armor that you are carrying, using a new readout on your HUD. With this, you are able to differentiate and balance your armament. Do you go for lots of ammo for the rocket launcher with little armor? Or do you rather carry a reasonable amount of shotgun shells alongside a hefty dosage of armor? In Nightmare Squad, you can effectively create classes using this balance system.
Speaking of armor, this too is significantly changed. Being rated from 1 to 100 percent, their rating is what percentage of the damage will be absorbed from the next hit you take. The difference between the two types of armor is that blue armor lasts twice as long under fire, but either armor at 100% can stop the next bullet, or fireball. Similarly changed are the monsters. While Nightmare Squad does not introduce new monsters to the beastiary, it will change the behavior of two of them - Namely the Shotgun Guy and the Spider Mastermind. Fireballs gain different properties when they are hurled from an Imp. How the Mastermind, the Shotgun Guy and the fireballs are changed is something i leave in the middle. Nightmare Squad brings a level of tactics to Doom that, even years later, still inspires people. There is a reason why WildWeasel liked this one so much!
A rather obscure port by Xoap, this is a source modification that adds bots that are supposedly far better than ZCajun. It is ZDoom based (possibly 1.21) and based on DoomBot, but the version is unknown.
Another obscurity, GrbDoom was one of Grubber’s old ZDoom based source modifications made before he went to work on the Community Build. Based on ZDoom 1.23b33, it is similar in nature to KGZDoom, eg, it adds a bunch of very useful new features that are too experimental to integrate into main ZDoom, including new weapons and actors with properties that would later be visible in the aforementioned Community Build. It even included a test WAD, but, being old (2004), unfinished, buggy and made several months before the Community Build even would begin to exist, it was not going to last.
When Enjay released his single level Operation Overlord in 2005, he made use of a custom source modification known as ZDuck. The WW2 theme inspired scenario required the use of a ducking feature, something which was not available in ZDoom at the time. Enjay got in touch with Anonone, creator of the ZDoomFu source modification, and who coded the custom engine needed for Operation Overlord. It is based on ZDoom 2.0.63a for its stability and introduces the aforementioned ducking feature, along with a custom icon making it look rather professional.
ZDuck was a catalyst for Graf Zahl to include the ducking feature into his next GZDoom release (0.9.21) at the time, which was just introduced, with Operation Overlord quickly abandoned ZDuck in order to utilize the feature in the latest GZDoom build.
Sergey ‘’Fly’’ Makovkin provided significant contribution to the development of bots in Doom, along with people like Martin ‘’Yoghurt’’ Collberg and Vincent Ho. The original Doom Bot was a Legacy 1.28 based source modification. With version 4.0, Makovkin turned to ZDoom 1.18a after which Vincent Ho took over for versions 5.0 and 5.1, basing it off ZDoom 1.22. Being a source modification, they not only brought bot support, but also retained all the features of their respective source ports, leading them to be used (by Sparky of KISS Software) as a test port for maps.
The Battle For Mars:
Back in 2006, a user called Justin023 crafted a very ambitious partial conversion, full of Doom 64 rips, along with extensive use of ACS scripting and DECORATE. The little known Battle For Mars even introduced source code changes to its custom build, based on a later version of the ‘’Community Build’’ (2.0.98x) and corresponding with GZDoom version 0.9.22. TBFM’s more advanced features include animated cutscenes, extensive 3D models and a custom weather system through ACS. Due to the various advanced modifications made, the conversion only runs properly with the included version of GZDoom. Strangely enough, it also includes SNESAPU.dll, a library to play back Super Nintendo .SPC files.
Super Sonic Doom:
Okay, so Super Sonic Doom is more of a total conversion than anything else, and it will work on more recent ZDoom/GZDoom builds, but it will cause significant problems on those. To fully support all the ACS and DECORATE based mechanics in this Sonic-themed conversion, a specialized build was created, ZDoom 2.0.94f. This build accommodates for the various scripting hacks and skybox "portals" that are implemented as well as the correct rendering of special effects like fog and colored lighting.
Other source mods:
These aren’t the only source based modifications out there. Various others exist based on other source ports, such as Doom Wars. They fall outside the scope of this Spotlight article, but will be put forward on either a DoomWorld thread or as a separate entry on the DoomWiki.
The various source mods discussed in this Spotlight article can be downloaded below. Some are already available on /idgames and thus are linked accordingly.
Others are less straightforward to find, which is why they are hosted on Redarchive, a new file repository for all things obscure, outdated, experimental or otherwise. I guess this serves as an announcement.
So marks the end of a several month research journey, delayed because of other work, both in the community and privately. But at least in time for the Christmas holidays.
Thank you for reading.