There are numerous bugs, limitations and oddities present in the Doom engine. For errors in map design, even those related to a specific item below, see the article about that map.
Note that playing with an unmaintained source port introduces additional bugs not listed here.
Key
This table classifies anomalies in a very broad way; see the individual articles for details.
- Canonicity — A bug is verified only when a current or former id Software employee has called it a bug in a public forum. An unverified bug may still be undisputed if it is generally accepted as an error by the source port community (after years of playtesting and a stable consensus as to how to interpret the relevant code). If no existing secondary source labels the anomaly as verified or undisputed, then it is disputed.
- Cause — The general category of underlying problem:
- Most bugs are due to algorithms which fail to account for all possible inputs, apply conditional statements in an illogical sequence, or have unforeseen consequences in particular game situations.
- A few of these arise from simple typos in the source code.
- Improperly constructed linedefs, with orphaned tags or incorrectly placed textures, can also induce various strange behaviors.
- The Doom engine includes few safeguards against overflow conditions.
- Line-of-sight calculations, rendering algorithms, and the BSP tree are also susceptible to roundoff errors.
- The engine imposes a number of static limits on Thing placement and map construction, which sometimes fix one problem by creating another.
- Most bugs are due to algorithms which fail to account for all possible inputs, apply conditional statements in an illogical sequence, or have unforeseen consequences in particular game situations.
- Fatal bugs cause the engine to crash in vanilla Doom. Y* means that a crash is possible, but not inevitable. N* means that no crash occurs, but that rendering or character behavior may be sufficiently compromised that meaningful gameplay becomes impossible.
- A bug has a workaround if it can be avoided by reasonable compromises in map design. (For example, matching every linedef tag to at least one sector is reasonable; removing invulnerabilities from every level containing a sky texture is not.) S means that the bug can be avoided only by making one's map smaller or less complex.
- A bug is a loophole if it can be abused to the player's advantage (especially during speedruns or deathmatches).
Phenomenon | Canonicity | Cause | Fatal? | Fixed in 1.9? |
Workaround? | Loophole? |
---|---|---|---|---|---|---|
(0,0) respawning bug | Undisputed | Algorithm | N | N | N | Y |
AASTINKY and AASHITTY | Undisputed | Algorithm | N | N | N | N |
Armor percentage rollover | Undisputed | Static limit | N* | Y | S | N |
Barrel explosions which do no damage | Undisputed | N | N | N | N | |
Barrel suicide | Undisputed | Algorithm | N | Y | N | Y |
Blast damage has unlimited vertical range | Undisputed | Algorithm | N | N | N | Y |
Broadcast packet meltdown | Verified | N* | Y | N | ||
Bullet puffs do not appear in outdoor areas | Algorithm | N | N | N | ||
Chaingun fires twice with only one bullet in it | Undisputed | Algorithm | N | N | N | Y |
Crushed barrels leave behind a pool of blood | Undisputed | Algorithm | N | N | Y | N |
Crushed monsters block player movement | Algorithm | N | Y | N | N | |
Demo desyncing caused by bouncing Lost Souls | Undisputed | Algorithm | N | N | N | N |
Demo desyncing caused by menu access | Undisputed | N | N | N | N | |
Doubled screen melt after MAP30 text screen | N | N | N | N | ||
Drawsegs overflow | Undisputed | Static limit | N | N | S | N |
Elastic collisions with walls | N | N | N | Y | ||
Fast doors make two closing sounds | Undisputed | Algorithm | N | N | N | N |
Fast doors reopening with wrong sound | Undisputed | Algorithm | N | N | N | N |
Flawed collision detection | Undisputed | Algorithm | N | N | N | |
Frag count rollover | N | N | N | N | ||
Gamma correction resets palette | N | N | N | Y | ||
Ghost monsters All-ghosts bug |
Undisputed Undisputed |
Algorithm Overflow |
N N* |
N N |
N S |
N N |
Hall of Mirrors effect (linedefs) Hall of Mirrors effect (textures) |
Undisputed Undisputed |
Linedef |
N N |
N N |
S Y |
N N |
Health percentage hysteresis in sector type 11 | N | N | N | N | ||
Hitscan attacks hit invisible barriers in large open areas | N | |||||
IDCLEV idiosyncrasies | N | N | N | N | ||
Invulnerability colormap bug | Disputed | N | N | N | N | |
IRQ 2 does not work | Verified | Y | ||||
Items respawn with pickup flag off | Verified | N | Y | |||
Kill percentage flag used for -nomonsters and respawning | Disputed | Algorithm | N* | N | N | Y |
Linedefs can be activated regardless of player's Z position | Undisputed | Algorithm | N | N | N | Y |
Long wall error | Undisputed | Roundoff | N | N | S | N |
Lost Soul charging backwards | Disputed | Algorithm | N | N | N | Y |
Lost Soul clipping problems | Undisputed | Algorithm | N | Y | N | N |
Lost Soul colliding with items | Undisputed | N | N | N | Y | |
Lost Soul limit | Undisputed | Static limit | N | N | N | Y |
Mancubus fireball clipping | Undisputed | N | N | N | N | |
Map size limit (blocks) Map size limit (integer overflow) |
Undisputed |
Static limit Static limit |
Y N |
N N |
S N |
N N |
Medusa effect | Undisputed | N* | N | Y | N | |
Moiré error | Undisputed | N* | Y | S | N | |
Monsters attacking across tall ledges | Disputed | Algorithm | N | N | N | N |
Monsters fleeing | Disputed | Algorithm | N | N | N | |
Monsters open locked doors | Undisputed | Roundoff | N | N | N | Y |
Monsters stuck in doortracks, walls or hanging off lifts | Undisputed | Algorithm | N | N | N | Y |
Monster targets not preserved in saved games Revenant tracers not preserved in saved games Spawn cube targets not preserved in saved games |
Undisputed Undisputed Undisputed |
N N Y* |
N N N |
N N N |
Y Y Y | |
Moving platforms limit | Undisputed | Linedef | Y | N | S | N |
Network game crashes with 3 or 4 players | Verified | Y | Y | N | ||
Network play locks up when using a sound card | Verified | Y | Y | N | ||
Noclip bug | Undisputed | N | N | N | Y | |
Non-Newtonian motion of corpses | Disputed | Algorithm | N | N | N | Y |
Ouch face | Verified [1] | Typo | N | N | N | N |
Phantom fireball explosions | Disputed | N | N | N | ||
Picked up a medikit that you REALLY need! | Undisputed | Typo | N | N | N | N |
Player corpses walking | Undisputed | Overflow | N* | N | Y | N |
Player stuck on ledge after restoring savefile | N* | N | N | N | ||
Projectiles blocked by decorations | Algorithm | N | N | N | Y | |
Projectiles explode on impact with "sky" | Algorithm | N | N | N | N | |
Projectiles triggering linedefs | Verified | N | Y | N | Y | |
PS/2 mouse bug | Verified | Y | ||||
Retriggering an open door after loading a savegame causes crash | Verified | Algorithm | Y | Y | N | N |
Rocket passes through the player who fired it | Disputed | Algorithm | N | N | N | Y |
Savegame buffer overflow | Undisputed | Static limit | Y | N | S | N |
Savegame slots 5 and 6 corrupt other files | Verified | N | Y | N | ||
Segfault/lightning flash near very tall structures | Undisputed | Overflow | Y* | N | S | N |
Silent BFG trick | Undisputed | Static limit | N | N | N | Y |
Skill level cannot be selected in some network games | Verified | N | Y | |||
Sky hack | Undisputed | Algorithm | N | N | N | N |
Sky never changes in Doom II | Undisputed | Algorithm | N | N | N | N |
Sleeping Sergeant of Doom II MAP02 | Undisputed | Typo | N | N | N | |
Slime trails | Undisputed | Roundoff | N | N | N | N |
Sludge Visplane not changing to other visplane in Doom 2 Lvl 13: The Factory when walked over | Disputed | N | N | N | N | |
Some game options not preserved in saved games Lift heights not preserved in saved games Switches and lifts deactivated when restoring a saved game |
Undisputed Undisputed Verified |
N N N |
N N Y |
N N N |
N N N | |
Sound cutoffs | Disputed | Static limit | N | N | N | N |
Sound effects behave differently on level 8 | Disputed | Algorithm | N | N | N | N |
Sounds changing pitch on slow computers | N | N | ||||
Spawn fog in wrong location | Undisputed | Typo | N | N | N | N |
Spider paralysis | Undisputed | Algorithm | N | N | N | Y |
Sprites flickering across ledges or lifts | Disputed | N | N | N | N | |
Stairs that can be ascended, but not descended | Disputed | N | N | Y | N | |
Status bar face hysteresis | Disputed | Algorithm | N | N | N | N |
Straferunning | Undisputed | Algorithm | N | N | N | Y |
Tag 666 idiosyncrasies | Undisputed | Algorithm | N | N | Y | N |
Tag 667 idiosyncrasies | Undisputed | Algorithm | N* | N | N | N |
Teleporters in Final Doom don't set the Z coordinate | Undisputed | Algorithm | N | N | N | N |
Turning resolution is lowered when recording demos | Undisputed | Static limit | N | N | N | N |
Tutti-frutti effect | Undisputed | Linedef | N | N | Y | N |
Venetian blind crash | Undisputed | Overflow | Y | N | N | N |
Visible sprites limit | Undisputed | Static limit | N | N | S | N |
Visplane overflow | Undisputed | Static limit | Y | N | S | N |
Voodoo doll | Undisputed | N* | N | Y | N | |
Wallrunning | Undisputed | Algorithm | N | N | N | Y |
Weapon sprite offset | N | N | N | N | ||
Wrong sound for exit switches | N | N | N | N | ||
Wrong sound origin for button "popouts" | N | N | N | N | ||
Wrong sound origin for switch/button presses | N | N | N | N | ||
Z_Malloc error | Verified | Y |