Compatibility

From DoomWiki.org

The compatibility of a source port or officially licensed game executable (here both referred to as engine for short) is the ability for that engine to play a given PWAD or demo in the intended way. Since the original release of the Doom engine, several official versions of Doom and various games based on it have been released as well as unofficial source ports, all changing the mechanics of the original engine by fixing bugs and changing or adding features, continuously delivering many ways to run the games, where some game content requires specific compatibility to work properly.

Though officially licensed games are bundled with the engine and preset options required to run the game in the intended manner, PWADs are not, as they need to be mounted onto the user's own copy of the engine to be played; it is therefore important for the PWAD author to specify the compatibility needed to use the PWAD as intended. Compatibility in this case usually refers to a minimum set of required features that the user's engine must support while advanced source ports that offer additional features are also considered compatible, though specific engines tested by the PWAD author may be specified as compatible to suggest users avoid using untested engines that may have unforeseen issues or behaviour specific to them.

Similarly, demo authors may need to specify the compatibility required for proper playback, though this usually aligns with the compatibility needed to play the level the demo was recorded on. The compatibility required to play back a demo is much more strict, where the smallest difference in engine behaviour is enough to desync the demo, changing its outcome completely. It is therefore convention to record and play back demos on source ports known to be mostly accurate to original executables, or on the original executables themselves, though the former option has become much more popular due to modern operating system support and quality of life enhancements.

Custom content and supported engines[edit]

The author of a PWAD specifies the feature set that an engine must support to run their custom content. This is generally understood to mean that engines supporting only up to those features, and engines supporting those features and more, are all compatible, though it is possible for only specific engines or engines that only support up to the required features to be compatible, so the documentation provided with a PWAD may also state which ports have been tested.

For example, GZDoom includes a wide variety of engine-specific behaviour such as bug fixes, and this engine-specific behaviour can cause unintended behaviour in some custom content. Since it is a popular engine, many PWAD authors test their custom content in GZDoom as well as whichever engine supports the required feature set more minimally. The engine-specific behaviour in GZDoom is irrelevant to the required feature set, but port-specific testing ensures more robustness of custom content for the variety of players that will use it.

The feature set required is specified on the Doom Wiki for each PWAD covered with its own article, where these are some feature sets frequently required:

  • Vanilla-compatible
    • This refers to the ability to play custom content on an official unmodified engine as it was on DOS. This means many limitations of the original engines were taken into account, and this content is usually tested on DOS or Chocolate Doom, but is typically playable on limit-removing ports as well. It may refer to Doom II on the latest engine version (v1.9) when played on DOOM2.WAD, or Ultimate Doom when on DOOM.WAD, or another specific version as per context.
  • Limit-removing
    • This builds on vanilla-compatible as discussed before, and refers to official engines with slight alterations to remove or increase static limits to support content of greater scope. PWADs for limit-removing ports are typically tested on popular ports such as DSDA-Doom with the appropriate compatibility level. Precisely which limits need to have been removed or increased are contextual because there are historically different ports that offer different degrees of limit removal, but the PWAD author can mention a tested port to provide a safe choice.
  • Boom-compatible
    • This refers to the feature set and changes from Boom as of v2.02, the final release. This is used as a base by many source ports such as GZDoom, which therefore inherently support the feature set, though other source ports such as DSDA-Doom can emulate this feature set explicitly via the use of a compatibility level.
  • MBF-compatible
    • The feature set from MBF, a Boom-derived standard.
  • MBF21-compatible
    • An MBF-derived standard.
  • ZDoom
    • A source port with many advanced features. Custom content that targets ZDoom compatibility is usually compatible with the successor GZDoom.

Compatibility levels[edit]

A compatibility level (complevel for short) is a specific set of features that can be enabled on an advanced source port. This makes it easy and concise for users and PWAD authors to identify a set of features by a short identifier. Most compatibility levels originate as snapshots of certain engines' behaviour and features. It is therefore commonly referred to as engine emulation when a certain compatibility level is enabled in some advanced source port that supports it, and most compatibility levels can be described with some specific engine's version.

DSDA-Doom and PrBoom+[edit]

DSDA-Doom, an offshoot of PrBoom+ which in turn comes from PrBoom, inherited and adds to a large number of compatibility levels that can be chosen from when using the -complevel <identifier> command line argument, where <identifier> is to be replaced with an identifier from the table below.

Identifier Description
-1 Engine defaults
0 Doom v1.2[1]
1 Doom v1.666
2 Doom v1.9
3 Ultimate Doom, Doom95
4 Final Doom
5 DOSDoom
6 TASDoom
7 Boom's inaccurate vanilla compatibility
8 Boom v2.01
9 Boom v2.02 AKA Boom-compatible
10 LxDoom
11 MBF AKA MBF-compatible
12 PrBoom v2.03beta
13 PrBoom v2.1.0
14 PrBoom v2.1.1 - 2.2.6
15 PrBoom v2.3.x
16 PrBoom v2.4.0
17 Engine defaults (same as -1)
21 MBF21[2]
  1. Emulation flawed prior to PrBoom+ 2.5.0.8.
  2. Introduced in DSDA-Doom, does not exist in PrBoom or PrBoom+.

Speedrunning[edit]

In speedrunning it is common practice to use a compatibility level that strictly adheres to the required feature set of level(s) being played on. For example, if a speedrun is to be performed on a level that requires a Boom-compatible engine, even though MBF21 includes the Boom feature set, the base Boom feature set is strongly preferred. The following is a table that translates feature sets to DSDA-Doom compatibility levels as they are used in speedrunning.

Feature set Complevel
Vanilla-compatible (DOOM2.WAD) 2
Vanilla-compatible (DOOM.WAD) 3
Vanilla-compatible (PLUTONIA.WAD) 4
Vanilla-compatible (TNT.WAD) 4
Boom-compatible 9
MBF-compatible 11
MBF21-compatible 21

Chocolate Doom[edit]

Chocolate Doom supports emulation of several officially released versions of Doom and Doom II by using the -gameversion <version> command line argument, where <version> is to be replaced with an identifier from the table below.

Identifier Description
1.666 Doom v1.666
1.7 Doom v1.7
1.8 Doom v1.8
1.9 Doom v1.9
ultimate Ultimate Doom
final Final Doom
final2 id Anthology fixed Final Doom
hacx Hacx
chex Chex Quest

Compatibility options[edit]

Many advanced source ports support tweaking of and enabling features of the engine individually, making it possible for a mod author to tailor gameplay mechanics better to their mod. These options can be made to automatically be set when the mod is loaded in an engine that supports it. This is possible in GZDoom and MBF21 so that the user does not need to adjust anything themselves.

GZDoom maintains a text file of PWAD-identifying hashes and associated compatibility options that ensure automatic support for certain PWADs. This file is linked to in this article, and can alternatively be found in a GZDoom installation as compatibility.txt within the file gzdoom.pk3. Similarly, Zandronum maintains its own automatic compatibility list, though of differing features. For example, both GZDoom and Zandronum use an alternative point-on-line algorithm by default, but only GZDoom allows using the original, and changes in gameplay can be observed in MAP14: The Inmost Dens with chaingunner thing 170—he is stuck in Zandronum, but free to move and attack in GZDoom, i.e. this map is partially incompatible with this change but GZDoom automatically offers a patch. Removing automatic detection for this map in GZDoom's compatibility.txt (where the option toggled is pointonline) makes behaviour the same as in Zandronum.

External links[edit]