Doom Wiki
m (→‎Key: otherwise/else)
m (→‎List: clean up)
(38 intermediate revisions by 11 users not shown)
Line 7: Line 7:
 
This table classifies anomalies in a very broad way; see the individual articles for details.
 
This table classifies anomalies in a very broad way; see the individual articles for details.
   
* '''[[Wikipedia:Canon (fiction)|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 [[Wikipedia:Executable file|binaries]] or [[Doom source code|source code]]. A bug is ''disputed'' if it can be argued to be a harmless and possibly intentional feature.
+
* '''[[Wikipedia:Canon (fiction)|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 [[Wikipedia:Executable file|binaries]] or [[Doom source code|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:
+
* '''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.
 
** 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.
 
*** A few of these arise from simple ''typos'' in the source code.
Line 17: Line 17:
 
** The engine imposes a number of ''static limits'' on [[Thing]] placement and map construction, which sometimes fix one problem by creating another.
 
** The engine imposes a number of ''static limits'' on [[Thing]] placement and map construction, which sometimes fix one problem by creating another.
   
* '''Fatal''' bugs are those where the engine crashes (often with the [[Venetian blind crash|Venetian blind]] effect) or else exits the game in a controlled fashion, usually with an [[error message]]. '''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.
+
* '''Fatal''' bugs are those where the engine crashes (often with the [[Venetian blind crash|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 [[Doom 1.9|v1.9]].
+
* '''Fixed in 1.9''' Some bugs appear only in [[versions]] of Doom prior to [[Doom 1.9|v1.9]].
   
* 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 [[Invulnerability|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 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 [[Invulnerability|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 [[speedrun]]s or [[deathmatch]]es).
 
* A bug is a '''loophole''' if it can be abused to the player's advantage (especially during [[speedrun]]s or [[deathmatch]]es).
   
  +
==List==
{| {{prettytable}} class="sortable"
 
  +
  +
{| class="WikiaTable" class="sortable"
 
!Phenomenon
 
!Phenomenon
 
!Canonicity
 
!Canonicity
Line 46: Line 48:
 
| Algorithm
 
| Algorithm
 
! N
 
! N
  +
! N
  +
! N
  +
! N
  +
|-
  +
| [[Ghost monster#All-ghosts effect|All-ghosts effect]]
  +
| Undisputed
  +
| Overflow
  +
! N*
 
! N
 
! N
 
! N
 
! N
Line 52: Line 62:
 
| [[Armor percentage rollover]]
 
| [[Armor percentage rollover]]
 
| Undisputed
 
| Undisputed
| Static limit
+
| Static limit
 
! N*
 
! N*
 
! Y
 
! Y
Line 60: Line 70:
 
| [[Barrel explosions which do no damage]]
 
| [[Barrel explosions which do no damage]]
 
| Undisputed
 
| Undisputed
  +
| Algorithm
|
 
 
! N
 
! N
 
! N
 
! N
Line 98: Line 108:
 
!
 
!
 
|-
 
|-
| [[Chaingun fires twice with only one bullet in it]]
+
| [[Chaingun makes two sounds firing single bullet]]
 
| Undisputed
 
| Undisputed
 
| Algorithm
 
| Algorithm
Line 104: Line 114:
 
! N
 
! N
 
! N
 
! N
! Y
+
! N
 
|-
 
|-
| [[Barrel#Notes|Crushed barrels leave behind a pool of blood]]
+
| [[Crushed barrels leave behind a pool of blood]]
 
| Undisputed
 
| Undisputed
 
| Algorithm
 
| Algorithm
Line 115: Line 125:
 
|-
 
|-
 
| [[Crushed monsters block player movement]]
 
| [[Crushed monsters block player movement]]
  +
| Verified
|
 
 
| Algorithm
 
| Algorithm
 
! N
 
! N
Line 122: Line 132:
 
! N
 
! N
 
|-
 
|-
| [[Demo desyncing caused by bouncing Lost Souls]]
+
| [[Demo desyncing caused by bouncing lost souls]]
 
| Undisputed
 
| Undisputed
 
| Algorithm
 
| Algorithm
Line 132: Line 142:
 
| [[Demo desyncing caused by menu access]]
 
| [[Demo desyncing caused by menu access]]
 
| Undisputed
 
| Undisputed
  +
| Algorithm
|
 
! N
 
! N
 
! N
 
! N
 
|-
 
| [[Screen melt effect during Doom II cast sequence]]
 
|
 
|
 
 
! N
 
! N
 
! N
 
! N
Line 148: Line 150:
 
| [[Seg#Drawsegs overflow|Drawsegs overflow]]
 
| [[Seg#Drawsegs overflow|Drawsegs overflow]]
 
| Undisputed
 
| Undisputed
| Static limit
+
| Static limit
 
! N
 
! N
 
! N
 
! N
Line 161: Line 163:
 
! N
 
! N
 
! Y
 
! Y
  +
|-
  +
| [[Excessive scrolling texture overflow]]
  +
|
  +
| Overflow
  +
! Y
  +
! N
  +
! Y
  +
! N
 
|-
 
|-
 
| [[Fast doors make two closing sounds]]
 
| [[Fast doors make two closing sounds]]
Line 185: Line 195:
 
! N
 
! N
 
!
 
!
  +
|-
  +
| [[Floors and ceilings moving silently]]
  +
| Undisputed
  +
|
  +
! N
  +
! N
  +
! N
  +
! Y
 
|-
 
|-
 
| [[Frag count rollover]]
 
| [[Frag count rollover]]
 
|
 
|
  +
| Overflow
|
 
 
! N
 
! N
 
! N
 
! N
Line 195: Line 213:
 
|-
 
|-
 
| [[Gamma correction resets palette]]
 
| [[Gamma correction resets palette]]
  +
| Undisputed
|
 
  +
| Algorithm
|
 
 
! N
 
! N
 
! N
 
! N
Line 202: Line 220:
 
! Y
 
! Y
 
|-
 
|-
| [[Ghost monsters]]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;All-ghosts bug
+
| [[Ghost monsters]]
| Undisputed<br>Undisputed
+
| Undisputed
| Algorithm<br>Overflow
+
| Algorithm
! N<br>N*
+
! N
! N<br>N
+
! N
! N<br>S
+
! N
! N<br>N
+
! N
 
|-
 
|-
| [[Hall of Mirrors effect]] (linedefs)<br>Hall of Mirrors effect (textures)
+
| Hall of Mirrors effect (limit)
| Undisputed<br>Undisputed
+
| Undisputed
  +
| Algorithm
| &nbsp;<br>Linedef
 
! N<br>N
+
! N
! N<br>N
+
! N
! S<br>Y
+
! S
! N<br>N
+
! 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]]
 
| [[Health percentage hysteresis in sector type 11]]
 
|
 
|
  +
| Algorithm
|
 
 
! N
 
! N
 
! N
 
! N
Line 228: Line 262:
 
| [[Hitscan attacks hit invisible barriers in large open areas]]
 
| [[Hitscan attacks hit invisible barriers in large open areas]]
 
|
 
|
  +
| Algorithm
|
 
 
! N
 
! N
 
!
 
!
Line 234: Line 268:
 
!
 
!
 
|-
 
|-
| [[Doom cheat codes#All Doom versions|IDCLEV idiosyncrasies]]
+
| [[IDCLEV idiosyncrasies]]
 
|
 
|
 
|
 
|
 
! N
 
! N
  +
! N
  +
! N
  +
! N
  +
|-
  +
| [[IDMUS requests invalid music]]
  +
|
  +
| Algorithm
  +
! Y
 
! N
 
! N
 
! N
 
! N
Line 244: Line 286:
 
| [[Invulnerability colormap bug]]
 
| [[Invulnerability colormap bug]]
 
| Disputed
 
| Disputed
  +
| Algorithm
|
 
 
! N
 
! N
 
! N
 
! N
Line 260: Line 302:
 
| [[Items respawn with pickup flag off]]
 
| [[Items respawn with pickup flag off]]
 
| Verified
 
| Verified
  +
| Algorithm
|
 
 
! N
 
! N
 
! Y
 
! Y
 
!
 
!
 
!
 
!
  +
|-
  +
| [[Configuration file#Additional settings|joyb_speed magic numbers]]
  +
|
  +
| Overflow
  +
! N
  +
!
  +
! Y
  +
! Y
 
|-
 
|-
 
| [[Kill percentage flag used for -nomonsters and respawning]]
 
| [[Kill percentage flag used for -nomonsters and respawning]]
Line 273: Line 323:
 
! N
 
! N
 
! Y
 
! 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]]
 
| [[Linedefs can be activated regardless of player's Z position]]
Line 290: Line 356:
 
! N
 
! N
 
|-
 
|-
| [[Lost Soul charging backwards]]
+
| [[Lost soul charging backwards]]
 
| Disputed
 
| Disputed
 
| Algorithm
 
| Algorithm
Line 298: Line 364:
 
! Y
 
! Y
 
|-
 
|-
| [[Lost Soul clipping problems]]
+
| [[Lost soul clipping problems]]
 
| Undisputed
 
| Undisputed
 
| Algorithm
 
| Algorithm
Line 306: Line 372:
 
! N
 
! N
 
|-
 
|-
| [[Lost Soul colliding with items]]
+
| [[Lost soul colliding with items]]
 
| Undisputed
 
| Undisputed
  +
| Algorithm
|
 
 
! N
 
! N
 
! N
 
! N
Line 314: Line 380:
 
! Y
 
! Y
 
|-
 
|-
| [[Lost Soul limit]]
+
| [[Lost soul limit]]
 
| Undisputed
 
| Undisputed
| Static&nbsp;limit
+
| Static limit
 
! N
 
! N
 
! N
 
! N
 
! N
 
! N
 
! Y
 
! Y
  +
|-
  +
| [[Lost soul target amnesia]]
  +
| Disputed
  +
| Algorithm
  +
! N
  +
! N
  +
! N
  +
! N
 
|-
 
|-
 
| [[Lump size limit]]
 
| [[Lump size limit]]
 
|
 
|
| Static&nbsp;limit
+
| Static limit
 
!
 
!
 
! N
 
! N
Line 332: Line 406:
 
| [[Mancubus fireball clipping]]
 
| [[Mancubus fireball clipping]]
 
| Undisputed
 
| Undisputed
  +
| Algorithm
|
 
 
! N
 
! N
 
! N
 
! N
Line 338: Line 412:
 
! N
 
! N
 
|-
 
|-
| [[Map size limit (blocks)]]<br>[[Map size limit (integer overflow)]]
+
| [[Map size limit (blocks)]]
| Undisputed<br>&nbsp;
+
| Undisputed
| Static&nbsp;limit<br>Static limit
+
| Static limit
! Y<br>N
+
! Y
! N<br>N
+
! N
! S<br>N
+
! S
! N<br>N
+
! N
  +
|-
  +
| [[Map size limit (integer overflow)]]
  +
|
  +
| Static limit
  +
! N
  +
! N
  +
! N
  +
! N
 
|-
 
|-
 
| [[Medusa effect]]
 
| [[Medusa effect]]
 
| Undisputed
 
| Undisputed
  +
| Algorithm
|
 
 
! N*
 
! N*
  +
! N
  +
! Y
  +
! N
  +
|-
  +
| [[Menu error with high mouse sensitivity]]
  +
| Undisputed
  +
| Overflow
  +
! Y
 
! N
 
! N
 
! Y
 
! Y
Line 356: Line 446:
 
| [[Moiré error]]
 
| [[Moiré error]]
 
| Undisputed
 
| Undisputed
  +
| Overflow
|
 
 
! N*
 
! N*
 
! Y
 
! Y
Line 393: Line 483:
 
! N
 
! N
 
! Y
 
! Y
|-
 
| [[Monster targets not preserved in saved games]]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[Arch-Vile attack targets not preserved in saved games]]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[Revenant tracers not preserved in saved games]]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[Spawn cube targets not preserved in saved games]]
 
| Undisputed<br>Undisputed<br>Undisputed<br>Undisputed
 
|
 
! N<br>N<br>N<br>Y*
 
! N<br>N<br>N<br>N
 
! N<br>N<br>N<br>N
 
! Y<br>Y<br>Y<br>Y
 
 
|-
 
|-
 
| [[Moving platforms limit]]
 
| [[Moving platforms limit]]
Line 428: Line 510:
 
| [[Noclip bug]]
 
| [[Noclip bug]]
 
| Undisputed
 
| Undisputed
  +
| Overflow
|
 
 
! N
 
! N
 
! N
 
! N
Line 441: Line 523:
 
! N
 
! N
 
! Y
 
! Y
  +
|-
  +
| [[Numeric overflow crash in tall areas]]
  +
| Undisputed
  +
| Overflow
  +
! Y*
  +
! N
  +
! S
  +
! N
 
|-
 
|-
 
| [[Ouch face]]
 
| [[Ouch face]]
Line 452: Line 542:
 
| [[Phantom fireball explosions]]
 
| [[Phantom fireball explosions]]
 
| Disputed
 
| Disputed
  +
| Algorithm
|
 
 
! N
 
! N
 
! N
 
! N
Line 474: Line 564:
 
! N
 
! N
 
|-
 
|-
| [[Player stuck on ledge after restoring savefile]]
+
| [[Player face grins after restoring savefile]]
  +
| Disputed
|
 
  +
| Algorithm
|
 
! N*
+
! N
 
! N
 
! N
 
! N
 
! N
 
! N
 
! N
 
|-
 
|-
  +
| [[Player starts missing]]
| [[Projectiles blocked by decorations]]
 
  +
| Undisputed
 
|
 
|
  +
! Y
  +
! N
  +
! Y
  +
! N
  +
|-
  +
| [[Player stuck on ledge after restoring savefile]]
  +
| Undisputed
 
| Algorithm
 
| Algorithm
  +
! N*
 
! N
 
! N
 
! N
 
! N
 
! N
 
! N
! Y
 
 
|-
 
|-
 
| [[Projectiles explode on impact with "sky"]]
 
| [[Projectiles explode on impact with "sky"]]
Line 500: Line 598:
 
| [[Projectiles triggering linedefs]]
 
| [[Projectiles triggering linedefs]]
 
| Verified
 
| Verified
  +
| Algorithm
|
 
 
! N
 
! N
  +
! Y*<!-- Player projectiles do not trigger linedefs, but some monster projectiles do-->
! Y
 
 
! N
 
! N
 
! Y
 
! Y
Line 513: Line 611:
 
!
 
!
 
!
 
!
  +
|-
  +
| [[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]]
 
| [[Retriggering an open door after loading a savegame causes crash]]
Line 532: Line 646:
 
| [[Savegame buffer overflow]]
 
| [[Savegame buffer overflow]]
 
| Undisputed
 
| Undisputed
| Static&nbsp;limit
+
| Static limit
 
! Y
 
! Y
 
! N
 
! N
Line 546: Line 660:
 
! N
 
! N
 
|-
 
|-
  +
| [[Screen melt effect during Doom II cast sequence]]
| [[Segfault/lightning flash near very tall structures]]
 
  +
|
| Undisputed
 
  +
| Algorithm
| Overflow
 
! Y*
+
! N
  +
! N
 
! N
 
! N
! S
 
 
! N
 
! N
 
|-
 
|-
 
| [[Silent BFG|Silent BFG trick]]
 
| [[Silent BFG|Silent BFG trick]]
 
| Undisputed
 
| Undisputed
| Static&nbsp;limit
+
| Static limit
 
! N
 
! N
 
! N
 
! N
Line 602: Line 716:
 
! N
 
! N
 
|-
 
|-
  +
| [[Some game options not preserved in saved games]]
| [[Sludge Visplane not changing to other visplane in Doom 2 Lvl 13: The Factory when walked over]]
 
  +
| Undisputed
| Disputed
 
  +
| Algorithm
|
 
!N
+
! N
!N
+
! N
!N
+
! N
!N
+
! N
|-
 
| [[Some game options not preserved in saved games]]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[Lift heights not preserved in saved games]]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[Switches and lifts deactivated when restoring a saved game]]
 
| Undisputed<br>Undisputed<br>Verified
 
|
 
! N<br>N<br>N
 
! N<br>N<br>Y
 
! N<br>N<br>N
 
! N<br>N<br>N
 
 
|-
 
|-
 
| [[Sound cutoffs]]
 
| [[Sound cutoffs]]
Line 648: Line 754:
 
! N
 
! 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
 
! N
 
|-
 
|-
Line 660: Line 790:
 
| [[Sprites flickering across ledges or lifts]]
 
| [[Sprites flickering across ledges or lifts]]
 
| Disputed
 
| Disputed
  +
| Algorithm
|
 
 
! N
 
! N
  +
! N
  +
! N
  +
! N
  +
|-
  +
| [[Stairs create unknown sector types]]
  +
| Undisputed
  +
| Algorithm
  +
! Y*
 
! N
 
! N
 
! N
 
! N
Line 668: Line 806:
 
| [[Stairs that can be ascended, but not descended]]
 
| [[Stairs that can be ascended, but not descended]]
 
| Disputed
 
| Disputed
  +
| Algorithm
|
 
 
! N
 
! N
 
! N
 
! N
Line 689: Line 827:
 
! N
 
! N
 
! Y
 
! Y
  +
|-
  +
| [[Switches and lifts deactivated when restoring a saved game]]
  +
| Verified
  +
| Algorithm
  +
! N
  +
! Y
  +
! N
  +
! N
 
|-
 
|-
 
| [[Tag 666#Bugs|Tag 666 idiosyncrasies]]
 
| [[Tag 666#Bugs|Tag 666 idiosyncrasies]]
Line 706: Line 852:
 
! N
 
! N
 
|-
 
|-
  +
| [[Targets not preserved in saved games]]
| [[Teleporters in Final Doom don't set the Z coordinate]]
 
 
| Undisputed
 
| Undisputed
 
| Algorithm
 
| Algorithm
Line 712: Line 858:
 
! N
 
! N
 
! N
 
! N
! N
+
! Y
 
|-
 
|-
 
| [[Turning resolution is lowered when recording demos]]
 
| [[Turning resolution is lowered when recording demos]]
 
| Undisputed
 
| Undisputed
| Static&nbsp;limit
+
| Static limit
 
! N
 
! N
 
! N
 
! N
Line 732: Line 878:
 
| [[Venetian blind crash]]
 
| [[Venetian blind crash]]
 
| Undisputed
 
| Undisputed
  +
| Multiple
| Overflow
 
 
! Y
 
! Y
  +
! N
  +
! N
  +
! N
  +
|-
  +
| [[Partial invisibility effect#Vertical cutoff|Vertical cutoff of partially invisible sprites]]
  +
| Undisputed
  +
| Static limit
  +
! N
 
! N
 
! N
 
! N
 
! N
Line 740: Line 894:
 
| [[Visible sprites limit]]
 
| [[Visible sprites limit]]
 
| Undisputed
 
| Undisputed
| Static&nbsp;limit
+
| Static limit
 
! N
 
! N
 
! N
 
! N
Line 748: Line 902:
 
| [[Visplane overflow]]
 
| [[Visplane overflow]]
 
| Undisputed
 
| Undisputed
| Static&nbsp;limit
+
| Static limit
 
! Y
 
! Y
 
! N
 
! N
Line 756: Line 910:
 
| [[Voodoo doll]]
 
| [[Voodoo doll]]
 
| Undisputed
 
| Undisputed
  +
| Algorithm
|
 
 
! N*
 
! N*
 
! N
 
! N
Line 770: Line 924:
 
! Y
 
! Y
 
|-
 
|-
| [[Weapon sprite offset]]
+
| [[Weapon sighting is off center]]
 
|
 
|
 
|
 
|
Line 787: Line 941:
 
|-
 
|-
 
| [[Wrong sound origin for button "popouts"]]
 
| [[Wrong sound origin for button "popouts"]]
  +
| Undisputed
|
 
  +
| Algorithm
|
 
 
! N
 
! N
 
! N
 
! N
Line 795: Line 949:
 
|-
 
|-
 
| [[Wrong sound origin for switch/button presses]]
 
| [[Wrong sound origin for switch/button presses]]
  +
| Undisputed
|
 
  +
| Algorithm
|
 
 
! N
 
! N
 
! N
 
! N
Line 809: Line 963:
 
!
 
!
 
!
 
!
|-
 
 
|}
 
|}
   
Line 815: Line 968:
   
 
* [[Doom change log]]
 
* [[Doom change log]]
  +
* [[Doom source code oddities]]
 
 
[[Category:Errors and bugs|*]]
 
[[Category:Errors and bugs|*]]
 
[[Category:Doom engine]]
 
[[Category:Doom engine]]

Revision as of 05:35, 6 August 2019

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.
  • 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
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
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

See also