A Doom engine bug is a limitation or an oddity 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 a source port may, while removing some or even the majority of the bugs listed below, introduce other bugs which are not listed here (although details may be present in the article about the source port in question).
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 programmer has called it a bug in a public medium. An unverified bug may still be undisputed if it is generally accepted as an error or issue by the fan community under a consensus involving thorough playtesting and research on the corresponding phenomenon and any associated binaries or source code. A bug is disputed if it can be argued to be a harmless and possibly intentional feature.
- 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 are those where the engine crashes (often with the Venetian blind effect) or else exits the game in a controlled fashion, usually with an error message. Y* means that termination is possible, but not inevitable. N* means that the program keeps running, but that rendering or character behavior may be sufficiently compromised that meaningful gameplay becomes impossible.
- Fixed in 1.9 — Some bugs appear only in versions of Doom prior to v1.9.
- A bug has a Workaround if it can be avoided by reasonable compromises in map design, such as when matching every linedef tag to at least one sector, but not when removing invulnerabilities from every level containing a sky texture, or also by convenient precautions and other measures taken by the program user, such as when increasing the mouse sensitivity through the configuration file directly, instead of using the menu. 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).
List
Phenomenon | Canonicity | Cause | Fatal? | Fixed in 1.9? |
Workaround? | Loophole? |
---|---|---|---|---|---|---|
(0,0) respawning bug | Undisputed | Algorithm | N | N | N | Y |
1% damage bug | Algorithm | N | N | N | ||
AASTINKY and AASHITTY | Undisputed | Algorithm | N | N | N | N |
All-ghosts effect | Undisputed | Overflow | N* | N | N | N |
Armor percentage rollover | Undisputed | Static limit | N* | Y | S | N |
Baron attacks a monster behind him | Algorithm | N | N | N | ||
Barrel explosions which do no damage | Undisputed | Algorithm | 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 makes two sounds firing single bullet | Undisputed | Algorithm | N | N | N | N |
Crushed barrels leave behind a pool of blood | Undisputed | Algorithm | N | N | Y | N |
Crushed monsters block player movement | Verified | 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 | Algorithm | N | N | N | N |
Drawsegs overflow | Undisputed | Static limit | N | N | S | N |
Elastic collisions with walls | N | N | N | Y | ||
Excessive scrolling texture overflow | Overflow | Y | N | Y | N | |
Fast doors make two closing sounds | Undisputed | Algorithm | N | N | N | N |
Fast doors reopening with wrong sound | Disputed | Algorithm | N | N | N | N |
Flawed collision detection | Undisputed | Algorithm | N | N | N | |
Floors and ceilings moving silently | Undisputed | N | N | N | Y | |
Frag count rollover | Overflow | N | N | N | N | |
Gamma correction resets palette | Undisputed | Algorithm | N | N | N | Y |
Ghost monsters | Undisputed | Algorithm | N | N | N | N |
Hall of Mirrors effect (limit) | Undisputed | Algorithm | N | N | S | N |
Hall of Mirrors effect (missing texture) | Undisputed | Linedef | N | N | Y | N |
Health limited to 199 | Algorithm | N | Y | N | N | |
Health percentage hysteresis in sector type 11 | Algorithm | N | N | N | N | |
Hitscan attacks hit invisible barriers in large open areas | Algorithm | N | ||||
IDCLEV idiosyncrasies | N | N | N | N | ||
IDMUS requests invalid music | Algorithm | Y | N | N | N | |
Invulnerability colormap bug | Disputed | Algorithm | N | N | N | N |
IRQ 2 does not work | Verified | Y | ||||
Items respawn with pickup flag off | Verified | Algorithm | N | Y | ||
joyb_speed magic numbers | Overflow | N | Y | Y | ||
Kill percentage flag used for -nomonsters and respawning | Disputed | Algorithm | N* | N | N | Y |
Lift heights not preserved in saved games | Undisputed | Algorithm | N | N | N | N |
Linedef type 37 | Y | N | Y | N | ||
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 | Algorithm | N | N | N | Y |
Lost soul limit | Undisputed | Static limit | N | N | N | Y |
Lost soul target amnesia | Disputed | Algorithm | N | N | N | N |
Lump size limit | Static limit | N | S | N | ||
Mancubus fireball clipping | Undisputed | Algorithm | N | N | N | N |
Map size limit (blocks) | Undisputed | Static limit | Y | N | S | N |
Map size limit (integer overflow) | Static limit | N | N | N | N | |
Medusa effect | Undisputed | Algorithm | N* | N | Y | N |
Menu error with high mouse sensitivity | Undisputed | Overflow | Y | N | Y | N |
Moiré error | Undisputed | Overflow | 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 |
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 | Overflow | N | N | N | Y |
Non-Newtonian motion of corpses | Disputed | Algorithm | N | N | N | Y |
Numeric overflow crash in tall areas | Undisputed | Overflow | Y* | N | S | N |
Ouch face | Verified [1] | Typo | N | N | N | N |
Phantom fireball explosions | Disputed | Algorithm | 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 face grins after restoring savefile | Disputed | Algorithm | N | N | N | N |
Player starts missing | Undisputed | Y | N | Y | N | |
Player stuck on ledge after restoring savefile | Undisputed | Algorithm | N* | N | N | N |
Projectiles explode on impact with "sky" | Algorithm | N | N | N | N | |
Projectiles triggering linedefs | Verified | Algorithm | N | Y* | N | Y |
PS/2 mouse bug | Verified | Y | ||||
Raising sectors change to orphaned sector type | Disputed | N | N | N | N | |
Ranged attacks blocked by decorations | Disputed | Algorithm | N | N | N | 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 | ||
Screen melt effect during Doom II cast sequence | Algorithm | N | N | N | 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 |
Some game options not preserved in saved games | Undisputed | Algorithm | 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 |
Spawn cubes miss east & west targets | Undisputed | Algorithm | N | N | Y | N |
Spawn spots not preserved in saved games | Undisputed | Algorithm | Y* | N | N | Y |
Spechits overflow | Undisputed | Static limit | Y | N | S | N |
Spider paralysis | Undisputed | Algorithm | N | N | N | Y |
Sprites flickering across ledges or lifts | Disputed | Algorithm | N | N | N | N |
Stairs create unknown sector types | Undisputed | Algorithm | Y* | N | N | N |
Stairs that can be ascended, but not descended | Disputed | Algorithm | N | N | Y | N |
Status bar face hysteresis | Disputed | Algorithm | N | N | N | N |
Straferunning | Undisputed | Algorithm | N | N | N | Y |
Switches and lifts deactivated when restoring a saved game | Verified | Algorithm | N | Y | N | N |
Tag 666 idiosyncrasies | Undisputed | Algorithm | N | N | Y | N |
Tag 667 idiosyncrasies | Undisputed | Algorithm | N* | N | N | N |
Targets not preserved in saved games | Undisputed | Algorithm | N | N | N | Y |
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 | Multiple | Y | N | N | N |
Vertical cutoff of partially invisible sprites | Undisputed | Static limit | N | 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 | Algorithm | N* | N | Y | N |
Wallrunning | Undisputed | Algorithm | N | N | N | Y |
Weapon sighting is off center | N | N | N | N | ||
Wrong sound for exit switches | N | N | N | N | ||
Wrong sound origin for button "popouts" | Undisputed | Algorithm | N | N | N | N |
Wrong sound origin for switch/button presses | Undisputed | Algorithm | N | N | N | N |
Z_Malloc error | Verified | Y |