Page 1 of 1

ZDoom Source Modifications: A History [DOOM]

Posted: Thu Dec 24, 2020 12:09 pm
by Redneckerz
ZDoom Source Modifications: A History.

Introduction:
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.
All in all, a source modification changes the source in a more limited fashion than a port does, and its scope is more limited with the code usually not available for the general audience.

A list of ZDoom based source modifications:
Over the years, the ZDoom port has played host to various source modifications. These are:
  • Spice ZDoom
  • ZDoom-cod
  • Chilvence’s ZDoom96x
  • The Ultimate ZDoom
  • XMas99
  • XMas2000
  • DesktopDoom 2
  • ZDoomFu
  • KGZDoom
  • ZCajun
  • Nightmare Squad
  • OPNDoom
  • GrbDoom
  • ZDuck
  • DoomBot/ZDoomBot
  • The Battle For Mars
  • Super Sonic Doom
A brief description and feature list will be given for each.

Spice ZDoom:

[imgur]https://www.imgur.com/83cRySr[/imgur]

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?

ZDoom-cod:
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.

Chilvence’s ZDoom96x:
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.

XMas99:
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.

[imgur]https://www.imgur.com/hBN2s6v[/imgur]

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.

XMas2000:
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.

DesktopDoom 2:
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:
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:
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.

[imgur]https://www.imgur.com/aHkY85i[/imgur]

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.

ZCajun:
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:
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.

[imgur]https://www.imgur.com/EfALKMh[/imgur]

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!

OPNDoom:
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.

GrbDoom:
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.

ZDuck:
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.

DoomBot/ZDoomBot:

[imgur]https://www.imgur.com/oN6TPIP[/imgur]

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.

Conclusion:
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.

Merry Christmas.

Thank you for reading.

Downloads:

Re: ZDoom Source Modifications: A History [DOOM]

Posted: Fri Dec 25, 2020 5:08 pm
by Gez
Redneckerz wrote: ZCajun:
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 Zandronum, ZDaemon, and other ZDoom based source ports, often distributed as an integrated part rather than a standalone package.
I don't know about ZDaemon, as I've never used it and it is closed source except for some very old version; but I'm pretty sure the bots in Zandronum (and before that, in Skulltag) are not based on ZCajun.

IIRC, Carnevil wrote aa high-level tool that would then generate the bot code used in Skulltag. The loss of this tool was then used to explain why the bots were not developed further and the planned Q3A-style single-player campaign against bots was abandoned.
Redneckerz wrote: GrbDoom:
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
It what? Suddenly vanished mid-sentence?


Pretty good research effort, I'd never heard of several of these. :)

Re: ZDoom Source Modifications: A History [DOOM]

Posted: Sat Dec 26, 2020 5:19 am
by Redneckerz
Thank you, Gez!
Gez wrote: I don't know about ZDaemon, as I've never used it and it is closed source except for some very old version; but I'm pretty sure the bots in Zandronum (and before that, in Skulltag) are not based on ZCajun.
ZDaemon has the downside that many of its (rather impressive works) are extremely poorly documented. Like, you know, they still use DEHSUPP, but they massively expanded upon it producing works that are honestly pretty impressive to see given how ZDoom briefly used it. They even have their own take on the DEHEXTRA standard, before that even was a thing (stackable patches).

Having said that, Zandronum atleast has had a bot compiler referencing Cajun, but you are right, it never used it. Ill edit it out.
Skulltag's bots were from scratch, iirc.

(There is a ton of bot history that is barely mentioned. I have counted atleast 5-6 DeHacked based bots, the very first non-Dehacked bot (Nexus Bot) and an earlier MBF based one. The majority of this i've got documented and backed up for later content, but sadly some things really are lost forever.)
Gez wrote: It what? Suddenly vanished mid-sentence?
Suddenly was never finished :P I have finished it now.
Gez wrote: Pretty good research effort, I'd never heard of several of these. :)
Hearing that from you, the human Doom encyclopedia, i consider that high praise. Thank you, Gez. :D

Re: ZDoom Source Modifications: A History [DOOM]

Posted: Sat Dec 26, 2020 7:22 am
by Enjay
Thanks for this post. Entertaining and informative as ever. :)
Redneckerz wrote:ZDuck:
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 coded the custom engine needed for Operation Overlord.
It is probably worth pointing out that the wording there implies that I did the coding. As far as I recall, Anonone did it all and if I did anything it would have been to simply hack something with a Hex editor, or maybe, maybe, provide some resources or something.
Redneckerz wrote: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.
And, again, just for clarification, I'm not sure how much of a direct influence ZDuck would have been for Graf. What I do know is that I sent an excessively long message to Graf asking for him to include crouching in the main port. A friend of mine was mobilising with the army and I was getting something together for him to play while he was away. He had specifically requested crouching as something he would really appreciate when playing mods with a more "tactical" feel to them. I explained this to Graf and he very kindly added the feature (one which I hope others have also benefited from - I know that I love the crouching feature). I think Graf said something along the lines that the message I sent him was one of the longest he had received and it probably took longer for me to type than it did for Graf to add the feature. :lol:
- please do not PM Graf to nag him about adding features though. That was a long time ago and the feature suggestions procedure is now much better established.

Re: ZDoom Source Modifications: A History [DOOM]

Posted: Sun Dec 27, 2020 11:56 am
by Redneckerz
Enjay wrote:Thanks for this post. Entertaining and informative as ever. :
Much appreciated as always, Enjay :)
Enjay wrote: It is probably worth pointing out that the wording there implies that I did the coding. As far as I recall, Anonone did it all and if I did anything it would have been to simply hack something with a Hex editor, or maybe, maybe, provide some resources or something.
If you think this should be changed, please tell me and ill reword it differently. I do see what you mean here.
Enjay wrote: And, again, just for clarification, I'm not sure how much of a direct influence ZDuck would have been for Graf. What I do know is that I sent an excessively long message to Graf asking for him to include crouching in the main port. A friend of mine was mobilising with the army and I was getting something together for him to play while he was away. He had specifically requested crouching as something he would really appreciate when playing mods with a more "tactical" feel to them. I explained this to Graf and he very kindly added the feature (one which I hope others have also benefited from - I know that I love the crouching feature). I think Graf said something along the lines that the message I sent him was one of the longest he had received and it probably took longer for me to type than it did for Graf to add the feature. :lol:
This is pretty much word-for-word how you told me in PM. :mrgreen: The only direct influence for Graf was that he added the feature in not too long after your extensive letter regarding it, mitigating the need for a seperate ZDuck executable in the first place. The primary reason for mentioning was historical, as was preserving it (same with ZDoom-COD). :)

Re: ZDoom Source Modifications: A History [DOOM]

Posted: Sun Dec 27, 2020 12:17 pm
by Enjay
Redneckerz wrote:If you think this should be changed, please tell me and ill reword it differently. I do see what you mean here.
Suggestion - tiny change in wording, bigger change in meaning:

Enjay got in touch with Anonone, creator of the ZDoomFu source modification, and who coded the custom engine needed for Operation Overlord.

Re: ZDoom Source Modifications: A History [DOOM]

Posted: Sun Dec 27, 2020 12:28 pm
by Tormentor667
This was very entertaining to read, thanks a lot for your effort :)

Re: ZDoom Source Modifications: A History [DOOM]

Posted: Sun Dec 27, 2020 12:34 pm
by Redneckerz
Enjay wrote:
Redneckerz wrote:If you think this should be changed, please tell me and ill reword it differently. I do see what you mean here.
Suggestion - tiny change in wording, bigger change in meaning:

Enjay got in touch with Anonone, creator of the ZDoomFu source modification, and who coded the custom engine needed for Operation Overlord.
Done!
Tormentor667 wrote:This was very entertaining to read, thanks a lot for your effort :)
Much appreciated Torm :) You will have to forgive me for slacking on R667, but ill get there again next year. I am glad you enjoyed this.

Re: ZDoom Source Modifications: A History [DOOM]

Posted: Sun Dec 27, 2020 10:55 pm
by Nash
Enjay sending Graf a very long e-mail for the crouch feature will forever be one of my most favorite ZDoom forum stories of all time, and one that I will always remember. :mrgreen:

(another contender to that story would be the ZDoom machinima feature requests by Samurai Clinton LOL)

Re: ZDoom Source Modifications: A History [DOOM]

Posted: Fri Jan 22, 2021 2:45 pm
by BFeely
GrbDoom has source code at https://github.com/HonzaCholasta/zdoom- ... /grbdoom-1 and both source and binary for a second build at https://github.com/HonzaCholasta/zdoom- ... /grbdoom-2

Re: ZDoom Source Modifications: A History [DOOM]

Posted: Sat Jan 23, 2021 7:54 am
by Redneckerz
BFeely wrote:GrbDoom has source code at https://github.com/HonzaCholasta/zdoom- ... /grbdoom-1 and both source and binary for a second build at https://github.com/HonzaCholasta/zdoom- ... /grbdoom-2
Thanks for the heads up, Grubber actually private messaged me when it did and i went straight away archiving it to DoomWiki - I should do the same for the ZDoomWiki and update the article perhaps for GrbDoom.

I can safely say that playing with the included build is beyond hilarity and just by that own merit, its a great keeper.

Re: ZDoom Source Modifications: A History [DOOM]

Posted: Mon Mar 22, 2021 11:13 am
by Venelator2016
This was awesome to read, it's amazing to see the legacy, and it's still going strong all these years. So cool

Re: ZDoom Source Modifications: A History [DOOM]

Posted: Mon Mar 22, 2021 2:08 pm
by Redneckerz
Venelator2016 wrote:This was awesome to read, it's amazing to see the legacy, and it's still going strong all these years. So cool
Much appreciated, Venelator! Im glad that someone found this worth the read! Have fun testing the modifications out!