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]]''' |
+ | * '''[[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''' |
+ | * '''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]]. |
+ | * '''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''' |
+ | * '''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 |
+ | * 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 |
+ | | 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 |
+ | | [[Chaingun makes two sounds firing single bullet]] |
| Undisputed |
| Undisputed |
||
| Algorithm |
| Algorithm |
||
Line 104: | Line 114: | ||
! N |
! N |
||
! N |
! N |
||
− | ! |
+ | ! N |
|- |
|- |
||
− | | [[ |
+ | | [[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 |
+ | | [[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 |
+ | | 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]] |
+ | | [[Ghost monsters]] |
− | | |
+ | | Undisputed |
− | | Algorithm |
+ | | Algorithm |
− | ! N |
+ | ! N |
− | ! |
+ | ! N |
− | ! N |
+ | ! N |
− | ! |
+ | ! N |
|- |
|- |
||
− | | |
+ | | Hall of Mirrors effect (limit) |
− | | |
+ | | Undisputed |
+ | | Algorithm |
||
− | | <br>Linedef |
||
− | ! |
+ | ! N |
− | ! |
+ | ! N |
− | ! S |
+ | ! 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]] |
| [[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: | ||
! |
! |
||
|- |
|- |
||
− | | [[ |
+ | | [[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 |
+ | | [[Lost soul charging backwards]] |
| Disputed |
| Disputed |
||
| Algorithm |
| Algorithm |
||
Line 298: | Line 364: | ||
! Y |
! Y |
||
|- |
|- |
||
− | | [[Lost |
+ | | [[Lost soul clipping problems]] |
| Undisputed |
| Undisputed |
||
| Algorithm |
| Algorithm |
||
Line 306: | Line 372: | ||
! N |
! N |
||
|- |
|- |
||
− | | [[Lost |
+ | | [[Lost soul colliding with items]] |
| Undisputed |
| Undisputed |
||
+ | | Algorithm |
||
− | | |
||
! N |
! N |
||
! N |
! N |
||
Line 314: | Line 380: | ||
! Y |
! Y |
||
|- |
|- |
||
− | | [[Lost |
+ | | [[Lost soul limit]] |
| Undisputed |
| Undisputed |
||
− | | Static |
+ | | 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 |
+ | | 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 |
+ | | [[Map size limit (blocks)]] |
− | | Undisputed |
+ | | Undisputed |
− | | |
+ | | Static limit |
− | ! Y |
+ | ! Y |
− | ! |
+ | ! N |
− | ! S |
+ | ! S |
− | ! |
+ | ! 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> [[Arch-Vile attack targets not preserved in saved games]]<br> [[Revenant tracers not preserved in saved games]]<br> [[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 |
+ | | [[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 |
+ | | 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 |
||
− | ! |
+ | ! N |
+ | ! N |
||
! N |
! N |
||
− | ! S |
||
! N |
! N |
||
|- |
|- |
||
| [[Silent BFG|Silent BFG trick]] |
| [[Silent BFG|Silent BFG trick]] |
||
| Undisputed |
| Undisputed |
||
− | | Static |
+ | | 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> [[Lift heights not preserved in saved games]]<br> [[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 |
||
− | ! |
+ | ! Y |
|- |
|- |
||
| [[Turning resolution is lowered when recording demos]] |
| [[Turning resolution is lowered when recording demos]] |
||
| Undisputed |
| Undisputed |
||
− | | Static |
+ | | 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 |
+ | | Static limit |
! N |
! N |
||
! N |
! N |
||
Line 748: | Line 902: | ||
| [[Visplane overflow]] |
| [[Visplane overflow]] |
||
| Undisputed |
| Undisputed |
||
− | | Static |
+ | | 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 |
+ | | [[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.
- 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.
- 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 |