Compatibility options
The compatibility options menu lets you set an overall compatibility mode (or "compatmode") or fine tune each compatibility flag individually. Its MENUDEF name is CompatibilityOptions and it can be summoned with the menu_compatibility console command.
Compatibility options are there to adjust the engine to user preferences when the ZDoom behavior changed, or to fix maps that exploit bugs in older versions or in the original executables. Note that many maps do not need you to adjust the settings, as ZDoom has an automatic compatibility feature with a number of known maps. Note also that the scope of compatibility options is not perfect emulation, but merely allow to successfully play a map; for this reason additional features are not disabled when setting the compatmode to "Doom (strict)", nor are limits decreased to their vanilla values.
The most important compatibility flags can be set or cleared in MAPINFO as well. This allows to create special map definitions that set the needed parameters to play the map properly. If a compatibility flag is set in MAPINFO this setting will override any change through the menu or by altering the console variable's value. Note that Skulltag has additional compatility options, see Skulltag features.
- Compatibility mode (Default/Doom/Doom (strict)/Boom/Boom (strict)/MBF/ZDoom 2.0.63)
- compatmode
- This allows users to quickly enable a set of options that cater to a particular game engine, overriding all compatibility flags. "Default" turns off all compatibility options, the other choice allow to emulate vanilla Doom, Boom, MBF or an old version of ZDoom. For more detail on which options each setting enables, see compatmode.
Actor behavior
- Crushed monsters can be resurrected (Yes/No)
- compat_corpsegibs (CVAR and MAPINFO)
- If enabled, corpses under a vertical door or crusher are changed into gibs, rather than replaced by a different actor, if they do not have a custom Crush state. This allows an arch-vile or similar monster to resurrect them. By default, actors without a custom Crush state are removed entirely and can therefore not be raised from the dead.
- Friendly monsters aren't blocked (Yes/No)
- compat_noblockfriends (CVAR and MAPINFO)
- If enabled, friendly monsters are, like in MBF, not affected by lines with the "block monsters" flag, allowing them to follow the player all around a map. This option does not, however, block them at lines with the "block player" flag.
- Limit Pain Elementals' Lost Souls (Yes/No)
- compat_limitpain (CVAR and MAPINFO)
- Vanilla Doom prevents a pain elemental from spawning lost souls if there are already 21 in the level. This limit has been removed in most source ports but there are maps that require it to work properly. For an example, see MAP19 of Hell Revealed.
- Monster movement is affected by effects (Yes/No)
- compat_mbfmonstermove (CVAR and MAPINFO)
- If enabled, monsters are affected by sector friction, wind and pusher/puller effects, as they are in MBF. By default, monsters are not subjected to friction and only affected by wind and pushers/pullers if they have the WINDTHRUST flag.
- Monsters cannot cross dropoffs (Yes/No)
- compat_crossdropoff (CVAR and MAPINFO)
- The original Doom physics code prevented monsters from being thrown off of ledges that they couldn't step off of voluntarily, even when propelled by an outside force. ZDoom allows monsters to be pushed over these dropoffs by weapons and other forces. This options restores the vanilla Doom behavior.
- Monsters get stuck over dropoffs (Yes/No)
- compat_dropoff (CVAR and MAPINFO)
- This option disables the logic that allows monsters to move away from positions where they hang over a tall dropoff (e.g. the edge of a lift.) Originally a monster got stuck in such a situation. Normally there shouldn't be any need to revert to the old behavior.
- Monsters see invisible players (Yes/No)
- compat_invisibility (CVAR and MAPINFO)
- This option restores Doom's original behavior where monsters would always wake up when seeing a player who is using an invisibility powerup. ZDoom normally uses a more realistic routine where monsters will usually be unable to see those players.
- No Minotaur floor flames in water (Yes/No)
- compat_minotaur (CVAR and MAPINFO)
- If enabled, maulotaurs are unable to create their floor fire attack if their feet are clipped by water, sludge, lava or other terrain effect. Note that the flames can still travel across water; this was on the part of Raven Software's developers as it was a bug found in the original clipping code and not an attempt at realism as some may have believed.
- Spawn item drops on the floor (Yes/No)
- compat_notossdrops (CVAR and MAPINFO)
- Disables drop item tossing.
Dehacked behavior
- DEH health settings like Doom2.exe (Yes/No)
- compat_dehhealth (CVAR and MAPINFO)
- Boom introduced a DeHackEd bug which applied the maximum health setting to medikits and stim packs. Originally it was only supposed to affect health bonuses. Many ZDoom maps, however, use it to limit the maximum overall health so an unconditional fix is no longer possible. Use this option to play vanilla Doom-compatible WADs with DEHACKED modifications that change the maximum health value.
- Original A_Mushroom speed in DEH mods (Yes/No)
- compat_mushroom (CVAR and MAPINFO)
- If enabled, when the A_Mushroom codepointer is called from a state that was modified by a DeHackEd lump, it uses the original MBF behavior of the codepointer. This option does not affect states defined in DECORATE.
Map/action behavior
- All special lines can block<use> (Yes/No)
- compat_useblocking (CVAR and MAPINFO)
- Restores Doom's original behavior of any special line blocking use actions. ZDoom corrects this so that walkover actions or scrolling lines don't block uses.
- Allow any bossdeath for level special (Yes/No)
- compat_anybossdeath (CVAR and MAPINFO)
- If enabled, any actor type which calls A_BossDeath triggers the level's special, even if they are not supposed to. This emulates a pre-Doom v1.9 behavior which is exploited by Doomsday of UAC.
- Disable Boom door light effect (Yes/No)
- compat_nodoorlight (CVAR and MAPINFO)
- Disables the Boom/MBF light tag effect for doors. This is to allow maps with incorrectly tagged doors to play properly.
- Find neighboring light like Doom (Yes/No)
- compat_light (CVAR and MAPINFO)
- If enabled, when a light level changes to the highest light level found in neighboring sectors, the search is made only for the first tagged sector, like in Doom.
- Find shortest textures like Doom (Yes/No)
- compat_shorttex (CVAR and MAPINFO)
- Doom treats the first texture in the TEXTURE1 lump as no texture at all. But the function that looks for the shortest texture ignored that and checked texture n°0 as well. This option re-enables this buggy behavior for old WADs that require it.
- Use buggier stair building (Yes/No)
- compat_stairs (CVAR and MAPINFO)
- When looking for all tagged sectors to build stairs, Doom.exe resumed the search with the last sector of the current stair, not the one following the starting sector.
- Use Doom's floor motion behavior (Yes/No)
- compat_floormove (CVAR and MAPINFO)
- This option undoes a Boom fix to floor movement logic. If this option is on, a floor may rise through the ceiling, or a ceiling may lower through a floor.
- Use Doom's point-on-line algorithm (Yes/No)
- compat_pointonline (CVAR and MAPINFO)
- Re-enables Doom's original, bugged behaviour for deciding exactly what side of a line a point that sits exactly on a line should be on.
- Level exit can be triggered more than once (Yes/No)
- compat_multiexit (CVAR and MAPINFO)
- Allows level exits to be triggered multiple times. This is required by (and automatically applied to) Daedalus: Alien Defense's "Travel Tube" maps to work around some faulty scripting.
Physics behavior
- Actors are infinitely tall (Yes/No)
- compat_nopassover (CVAR and MAPINFO)
- Doom's collision code treated all actors as infinitely tall, i.e. it was impossible to jump over any solid object. Needless to say, with such a setup 3D bridges and similar effects are impossible to create. You can re-enable this effect with this option but be careful: Enabling it will seriously affect any map that expects proper z-sensitive object collision detection.
- Boom scrollers are additive (Yes/No)
- compat_boomscroll (CVAR and MAPINFO)
- The texture scrolling specials introduced in Boom were originally made to stack with each other. Enable this option to restore that behavior.
- Cannot travel straight NSEW (Yes/No)
- compat_badangles (CVAR and MAPINFO)
- This option emulates the error in the original engine's sine table by offsetting player angle when spawning or teleporting by one fineangle (approximatively 0.044°), preventing the player from facing directly in a cardinal direction.
- Enable wall running (Yes/No)
- compat_wallrun (CVAR only)
- Re-enables the wallrunning bug. It is not recommended to use this option unless some map absolutely requires it. As it depends on a bug it has serious side effects on the movement code and makes any fast movement become erratic.
- Additionally, this option reestablish the original sliding code.
- Raven scrollers use original speed (Yes/No)
- compat_ravenscroll (CVAR and MAPINFO)
- The scrolling floor specials in Heretic and Hexen move the player much faster than the actual texture scrolling speed. Enable this option to restore this effect.
- Self-referencing sectors don't block shots (Yes/No)
- compat_trace (CVAR and MAPINFO)
- Doom's hitscan tracing code ignores all lines with both sides in the same sector. ZDoom's does not. This option reverts to the original but less precise behavior.
- This option now also covers the original behavior or sight checks for such lines.
- Use Doom code for hitscan checks (Yes/No)
- compat_hitscan (CVAR)
- If enabled, the original Doom code for hitscan attacks is used. This reintroduces two bugs which makes hitscan attacks less likely to hit. The first is that it is a monster's cross-section, rather than its bounding box, that is used to check for impact; this makes attacks with a limited range (especially melee attacks) unlikely to hit very wide monsters. The second is the blockmap bug: if an actor crosses block boundaries and its center is in a different block than the one in which the impact happens, then there is no collision at all, letting attacks pass through it harmlessly.
- Use Doom heights for missile clipping (Yes/No)
- compat_missileclip (CVAR and MAPINFO)
- If enabled, actors use their original heights for the purposes of projectile collision. This allows for decorations to be pass-through for projectiles as they were originally in Doom while still blocking other actors correctly. Specifically, this affects actors with negative values defined for their ProjectilePassHeight property.
Rendering behavior
- Draw polyobjects like Hexen (Yes/No)
- compat_polyobj (CVAR and MAPINFO)
- Uses the old flawed polyobject system, for maps that relied on its glitches.
- Ignore Y offsets on masked midtextures (Yes/No)
- compat_maskedmidtex (CVAR and MAPINFO)
- This option emulates a vanilla renderer glitch by ignoring the Y locations of patches drawn on two-sided midtextures and instead always drawing them at the top of the texture.
- Invert sprite sorting (Yes/No)
- compat_spritesort (CVAR and MAPINFO)
- If enabled, the original Doom sorting order for overlapping sprites is used.
Sound behavior
- Cripple sound for silent BFG trick (Yes/No)
- compat_soundslots (CVAR only)
- Use this only if you can't live without the silent BFG trick! This option seriously cripples the sound system so that each actor can only play one sound at once. Note that this will also introduce other sound glitches.
- Don't let others hear your pickups (Yes/No)
- compat_silentpickup (CVAR only)
- Restores Doom's original behavior to play pickup sounds only for the player that is picking up an item. Obviously this option is only useful in multiplayer games.
- Instant moving floors are not silent (Yes/No)
- compat_silentinstantfloors (CVAR) and compat_silent_instant_floors (MAPINFO)
- ZDoom normally disables the stop sound for floors that move instantly from one height to another. Enable this setting to make the stop sound be played in these special cases.
- Sector sounds use center as source (Yes/No)
- compat_sectorsounds (CVAR and MAPINFO)
- Normally when sectors make noise, ZDoom uses the point of that sector which is closest to the listener as the source of the sound. (Ensuring that large sectors make sound all throughout) Enable this option to make ZDoom revert to the old behavior which caused these sounds to originate from the center of their sector.
- Sounds stop when actor vanishes (Yes/No)
- compat_soundcutoff (CVAR and MAPINFO)
- This option cuts a sound off if it lasted more than its source's "life" in the game world.
- Use original sound target handling (Yes/No)
- compat_soundtarget (CVAR and MAPINFO)
- ZDoom changed the sound alert handling for monsters in 2.0.90 so that the sound target is no longer preserved by a sector. While this allows more control over the actions taking place in a map it had severe side effects in many maps that spawn monsters while playing. These maps are counting on the monsters being alerted immediately and didn't bother with proper positioning because it didn't matter. This option restores the old alerting method from Doom.exe which was valid up to ZDoom 2.0.63a.