Difference between revisions of "Engine bug"
From DoomWiki.org
[checked revision] | [checked revision] |
(This might not be regarded as an engine bug by some, but it's a design issue at least, since sprites shouldn't be treated the same as wall textures. Does have workaround, discussed in-article.) |
m (→Bugs present in Doom II version 1.9 for DOS: default sort alphabetically) |
||
(22 intermediate revisions by 8 users not shown) | |||
Line 1: | Line 1: | ||
A [[Doom]] '''engine bug''' is a limitation or an oddity present in the [[Doom engine]]. For errors in [[Levels|map]] design, even those related to a specific item below, see the article about that map. | A [[Doom]] '''engine bug''' is a limitation or an oddity present in the [[Doom engine]]. For errors in [[Levels|map]] design, even those related to a specific item below, see the article about that map. | ||
+ | |||
+ | This article uses the version 1.9 [[DOOM2.EXE]] DOS version as the base version. Older versions, the source release, Final Doom and The Ultimate Doom have some minor changes, tweaks and different bugs. | ||
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). | 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). | ||
Line 7: | Line 9: | ||
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. | ||
− | * ''' | + | * '''{{wp|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 [[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: | ||
Line 13: | Line 15: | ||
*** A few of these arise from simple ''typos'' in the source code. | *** A few of these arise from simple ''typos'' in the source code. | ||
** Improperly constructed ''[[linedef]]s'' (with orphaned [[tag]]s or incorrectly placed [[texture]]s) or ''[[sector]]s'', can also induce various strange behaviors. | ** Improperly constructed ''[[linedef]]s'' (with orphaned [[tag]]s or incorrectly placed [[texture]]s) or ''[[sector]]s'', can also induce various strange behaviors. | ||
− | ** The Doom engine includes few safeguards against | + | ** The Doom engine includes few safeguards against {{wp|Integer overflow|''overflow'' conditions}}. |
− | ** Line-of-sight calculations, [[Doom rendering engine|rendering]] algorithms, and the [[Doom rendering engine#Node building|BSP tree]] are also susceptible to | + | ** Line-of-sight calculations, [[Doom rendering engine|rendering]] algorithms, and the [[Doom rendering engine#Node building|BSP tree]] are also susceptible to {{wp|Floating point#Accuracy problems|''roundoff'' errors}}. |
** 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 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. | * '''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. | ||
− | |||
− | |||
* 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 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). | ||
+ | |||
+ | === Bugs present in Doom II version 1.9 for DOS === | ||
{| {{prettySortable}} | {| {{prettySortable}} | ||
Line 30: | Line 32: | ||
!Cause | !Cause | ||
!Fatal? | !Fatal? | ||
− | |||
!Workaround? | !Workaround? | ||
!Loophole? | !Loophole? | ||
Line 37: | Line 38: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 45: | Line 45: | ||
| | | | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 54: | Line 53: | ||
| Algorithm | | Algorithm | ||
! Y* | ! Y* | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 61: | Line 59: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 70: | Line 67: | ||
| Overflow | | Overflow | ||
! N* | ! N* | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 77: | Line 73: | ||
| | | | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 87: | Line 82: | ||
! N | ! N | ||
! N | ! N | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
! N | ! N | ||
|- | |- | ||
Line 101: | Line 87: | ||
| | | | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 112: | Line 97: | ||
! N | ! N | ||
! N | ! N | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| [[Blast damage has unlimited vertical range]] | | [[Blast damage has unlimited vertical range]] | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 134: | Line 109: | ||
| Overflow | | Overflow | ||
! N | ! N | ||
− | ! | + | ! S |
− | |||
! N | ! N | ||
|- | |- | ||
− | | [[ | + | | [[Boss level ending not triggered if every player is dead]] |
− | | | + | | Undisputed |
− | | | + | | Algorithm |
! N* | ! N* | ||
− | ! | + | ! N |
− | |||
! N | ! N | ||
|- | |- | ||
Line 149: | Line 122: | ||
| | | | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 159: | Line 131: | ||
! N | ! N | ||
! N | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Chainsaw negates projectile impact thrust]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
! N | ! N | ||
! N | ! N | ||
+ | ! Y* | ||
|- | |- | ||
− | | [[Colormap blink ignores concurrent powerup]] | + | | [[Colormap blink ignores concurrent powerup]] {{dwforumsp|id=1019768|title=}} |
| | | | ||
| | | | ||
− | |||
! N | ! N | ||
! N | ! N | ||
! N | ! N | ||
|- | |- | ||
− | | [[Crash when accessing Read This!]] | + | | [[Crash when accessing Read This!]] {{dwforums|id=73271|title=}} |
| Undisputed | | Undisputed | ||
| | | | ||
! Y | ! Y | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 180: | Line 156: | ||
| [[Barrel#Notes|Crushed barrels leave behind a pool of blood]] | | [[Barrel#Notes|Crushed barrels leave behind a pool of blood]] | ||
| Undisputed | | Undisputed | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
| Algorithm | | Algorithm | ||
! N | ! N | ||
! Y | ! Y | ||
− | |||
! N | ! N | ||
|- | |- | ||
Line 197: | Line 164: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 205: | Line 171: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 214: | Line 179: | ||
| Algorithm | | Algorithm | ||
! Y* | ! Y* | ||
− | |||
! | ! | ||
! Y | ! Y | ||
+ | |- | ||
+ | | [[Doom II monster exclusion bug]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | ! Y* | ||
+ | ! Y | ||
+ | ! N | ||
|- | |- | ||
| [[Seg#Drawsegs overflow|Drawsegs overflow]] | | [[Seg#Drawsegs overflow|Drawsegs overflow]] | ||
| Undisputed | | Undisputed | ||
| Static limit | | Static limit | ||
− | |||
! N | ! N | ||
! S | ! S | ||
Line 229: | Line 199: | ||
| Undisputed | | Undisputed | ||
| Roundoff | | Roundoff | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 237: | Line 206: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 245: | Line 213: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 253: | Line 220: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 261: | Line 227: | ||
| | | | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 269: | Line 234: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 277: | Line 241: | ||
| Undisputed | | Undisputed | ||
| | | | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 285: | Line 248: | ||
| | | | ||
| Overflow | | Overflow | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 293: | Line 255: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 301: | Line 262: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 309: | Line 269: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! Y | ! Y | ||
Line 317: | Line 276: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! S | ! S | ||
Line 325: | Line 283: | ||
| Undisputed | | Undisputed | ||
| Linedef | | Linedef | ||
− | |||
! N | ! N | ||
! Y | ! Y | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
! N | ! N | ||
|- | |- | ||
Line 341: | Line 290: | ||
| | | | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 350: | Line 298: | ||
| Algorithm | | Algorithm | ||
! N | ! N | ||
− | |||
! | ! | ||
! | ! | ||
Line 357: | Line 304: | ||
| | | | ||
| Typo | | Typo | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 365: | Line 311: | ||
| | | | ||
| | | | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 374: | Line 319: | ||
| Algorithm | | Algorithm | ||
! Y | ! Y | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 381: | Line 325: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 397: | Line 332: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
! N | ! N | ||
|- | |- | ||
− | | [[ | + | | [[Configuration file#Additional settings|joyb_speed magic numbers]] |
− | |||
| | | | ||
− | ! | + | | Overflow |
+ | ! N | ||
+ | ! Y | ||
! Y | ! Y | ||
− | |||
− | |||
|- | |- | ||
− | | [[ | + | | [[Key pickup resets palette]] |
− | | | + | | Undisputed |
| Algorithm | | Algorithm | ||
! N | ! N | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
! N | ! N | ||
− | ! | + | ! N |
− | |||
− | |||
|- | |- | ||
| [[Kill percentage flag used for -nomonsters and respawning]] | | [[Kill percentage flag used for -nomonsters and respawning]] | ||
Line 430: | Line 354: | ||
| Algorithm | | Algorithm | ||
! N* | ! N* | ||
− | |||
! N | ! N | ||
! Y | ! Y | ||
Line 438: | Line 361: | ||
| | | | ||
! Y | ! Y | ||
− | |||
! Y | ! Y | ||
! N | ! N | ||
Line 445: | Line 367: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 453: | Line 374: | ||
| Undisputed | | Undisputed | ||
| Roundoff | | Roundoff | ||
− | |||
! N | ! N | ||
! S | ! S | ||
Line 461: | Line 381: | ||
| Undisputed | | Undisputed | ||
| Typo | | Typo | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 469: | Line 388: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 478: | Line 396: | ||
| Algorithm | | Algorithm | ||
! N | ! N | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 485: | Line 402: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 493: | Line 409: | ||
| Undisputed | | Undisputed | ||
| Static limit | | Static limit | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 501: | Line 416: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 510: | Line 424: | ||
| Static limit | | Static limit | ||
! | ! | ||
− | |||
! S | ! S | ||
! N | ! N | ||
Line 517: | Line 430: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 526: | Line 438: | ||
| Linedef | | Linedef | ||
! Y* | ! Y* | ||
− | |||
! Y | ! Y | ||
! N | ! N | ||
Line 534: | Line 445: | ||
| Static limit | | Static limit | ||
! Y | ! Y | ||
− | |||
! S | ! S | ||
! N | ! N | ||
Line 541: | Line 451: | ||
| | | | ||
| Static limit | | Static limit | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 550: | Line 459: | ||
| Algorithm | | Algorithm | ||
! N* | ! N* | ||
− | |||
! Y | ! Y | ||
! N | ! N | ||
Line 558: | Line 466: | ||
| Overflow | | Overflow | ||
! Y | ! Y | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
! Y | ! Y | ||
− | |||
! N | ! N | ||
|- | |- | ||
Line 573: | Line 472: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 581: | Line 479: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 589: | Line 486: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 597: | Line 493: | ||
| Undisputed | | Undisputed | ||
| Roundoff | | Roundoff | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 605: | Line 500: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 614: | Line 508: | ||
| Linedef | | Linedef | ||
! Y | ! Y | ||
− | |||
! S | ! S | ||
! N | ! N | ||
Line 621: | Line 514: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
! N | ! N | ||
|- | |- | ||
Line 653: | Line 521: | ||
| Undisputed | | Undisputed | ||
| Overflow | | Overflow | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 661: | Line 528: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 670: | Line 536: | ||
| Overflow | | Overflow | ||
! Y* | ! Y* | ||
− | |||
! S | ! S | ||
! N | ! N | ||
Line 677: | Line 542: | ||
| Verified [https://web.archive.org/web/20100920220554/http://rome.ro/smf/index.php/topic,1514.msg31763.html#msg31763] | | Verified [https://web.archive.org/web/20100920220554/http://rome.ro/smf/index.php/topic,1514.msg31763.html#msg31763] | ||
| Typo | | Typo | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 685: | Line 549: | ||
| | | | ||
| | | | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 693: | Line 556: | ||
| | | | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 701: | Line 563: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 709: | Line 570: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 717: | Line 577: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! | ! | ||
Line 725: | Line 584: | ||
| Undisputed | | Undisputed | ||
| Typo | | Typo | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 734: | Line 592: | ||
| Overflow | | Overflow | ||
! N* | ! N* | ||
− | |||
! Y | ! Y | ||
! N | ! N | ||
Line 741: | Line 598: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 750: | Line 606: | ||
| | | | ||
! Y | ! Y | ||
− | |||
! Y | ! Y | ||
! N | ! N | ||
Line 758: | Line 613: | ||
| Algorithm | | Algorithm | ||
! N* | ! N* | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 768: | Line 622: | ||
! N | ! N | ||
! N | ! N | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| [[PWAD size limit]] | | [[PWAD size limit]] | ||
Line 790: | Line 627: | ||
| Algorithm | | Algorithm | ||
!Y | !Y | ||
− | |||
!Y | !Y | ||
!N | !N | ||
Line 797: | Line 633: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
!N | !N | ||
!N | !N | ||
Line 805: | Line 640: | ||
| Disputed | | Disputed | ||
| Sector | | Sector | ||
− | |||
!N | !N | ||
!Y | !Y | ||
Line 813: | Line 647: | ||
| | | | ||
| | | | ||
− | |||
!N | !N | ||
!N | !N | ||
Line 821: | Line 654: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 829: | Line 661: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! S | ! S | ||
! Y | ! Y | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| [[Revenant tracers desync internal demos]] | | [[Revenant tracers desync internal demos]] | ||
Line 846: | Line 669: | ||
| Algorithm | | Algorithm | ||
! N* | ! N* | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 853: | Line 675: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 862: | Line 683: | ||
| Static limit | | Static limit | ||
! Y | ! Y | ||
− | |||
! S | ! S | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
! N | ! N | ||
|- | |- | ||
Line 877: | Line 689: | ||
| | | | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 885: | Line 696: | ||
| | | | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! Y | ! Y | ||
Line 893: | Line 703: | ||
| | | | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! S | ! S | ||
Line 901: | Line 710: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 909: | Line 717: | ||
| | | | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! Y | ! Y | ||
Line 917: | Line 724: | ||
| Undisputed | | Undisputed | ||
| Static limit | | Static limit | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 926: | Line 732: | ||
| Algorithm | | Algorithm | ||
! N* | ! N* | ||
− | |||
! N | ! N | ||
! Y | ! Y | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| [[Sky hack absorbs attacks regardless of height]] | | [[Sky hack absorbs attacks regardless of height]] | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 949: | Line 745: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 957: | Line 752: | ||
| Undisputed | | Undisputed | ||
| Typo | | Typo | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 967: | Line 761: | ||
! N | ! N | ||
! N | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Some Doom 2-specific projectiles triggering linedefs]] | ||
+ | | Verified | ||
+ | | Algorithm | ||
! N | ! N | ||
! N | ! N | ||
+ | ! Y | ||
|- | |- | ||
| [[Some game options not preserved in saved games]] | | [[Some game options not preserved in saved games]] | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 981: | Line 780: | ||
| Disputed | | Disputed | ||
| Static limit | | Static limit | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 989: | Line 787: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 998: | Line 795: | ||
| | | | ||
! N | ! N | ||
− | |||
! N | ! N | ||
! | ! | ||
|- | |- | ||
− | | [[Spawn | + | | [[Spawn cubes miss east & west targets]] |
| Undisputed | | Undisputed | ||
− | | | + | | Algorithm |
− | |||
− | |||
! N | ! N | ||
+ | ! Y | ||
! N | ! N | ||
|- | |- | ||
− | | [[Spawn | + | | [[Spawn fog in wrong location]] |
| Undisputed | | Undisputed | ||
− | | | + | | Typo |
! N | ! N | ||
! N | ! N | ||
− | |||
! N | ! N | ||
|- | |- | ||
Line 1,022: | Line 816: | ||
| Algorithm | | Algorithm | ||
! Y* | ! Y* | ||
− | |||
! N | ! N | ||
! Y | ! Y | ||
Line 1,030: | Line 823: | ||
| Static limit | | Static limit | ||
! Y | ! Y | ||
− | |||
! S | ! S | ||
! N | ! N | ||
Line 1,037: | Line 829: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 1,045: | Line 836: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 1,053: | Line 843: | ||
| | | | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 1,062: | Line 851: | ||
| Algorithm | | Algorithm | ||
! Y* | ! Y* | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 1,069: | Line 857: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! Y | ! Y | ||
Line 1,077: | Line 864: | ||
| Undisputed | | Undisputed | ||
| | | | ||
− | |||
! N | ! N | ||
! Y | ! Y | ||
Line 1,085: | Line 871: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 1,094: | Line 879: | ||
| Algorithm | | Algorithm | ||
! N | ! N | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
! N | ! N | ||
! Y | ! Y | ||
− | |||
− | |||
|- | |- | ||
− | | [[Tag 666# | + | | [[Tag 666#Difference in behaviour between Doom1 and Ultimate Doom|Tag 666 idiosyncrasies]] |
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! Y | ! Y | ||
Line 1,118: | Line 893: | ||
| Algorithm | | Algorithm | ||
! N* | ! N* | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 1,125: | Line 899: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 1,133: | Line 906: | ||
| Undisputed | | Undisputed | ||
| Static limit | | Static limit | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 1,141: | Line 913: | ||
| Undisputed | | Undisputed | ||
| Linedef | | Linedef | ||
− | |||
! N | ! N | ||
! Y | ! Y | ||
! N | ! N | ||
|- | |- | ||
− | | [[Unused frames and obstacle sprite]] | + | | [[Unused frames and obstacle sprite]] {{dwforumsp|id=225726|title=}} |
| | | | ||
| | | | ||
− | |||
! N | ! N | ||
! Y | ! Y | ||
Line 1,158: | Line 928: | ||
| Multiple | | Multiple | ||
! Y | ! Y | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 1,166: | Line 935: | ||
| Static limit | | Static limit | ||
! N | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Vertical offsets are ignored in texture patches]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
! N | ! N | ||
! N | ! N | ||
Line 1,173: | Line 948: | ||
| Undisputed | | Undisputed | ||
| Static limit | | Static limit | ||
− | |||
! N | ! N | ||
! S | ! S | ||
Line 1,182: | Line 956: | ||
| Static limit | | Static limit | ||
! Y | ! Y | ||
− | |||
! S | ! S | ||
! N | ! N | ||
Line 1,190: | Line 963: | ||
| Algorithm | | Algorithm | ||
! N* | ! N* | ||
− | |||
! Y | ! Y | ||
! N | ! N | ||
Line 1,197: | Line 969: | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 1,205: | Line 976: | ||
| | | | ||
| Algorithm | | Algorithm | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 1,213: | Line 983: | ||
| | | | ||
| | | | ||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 1,222: | Line 991: | ||
| | | | ||
! N | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Wrong sound origin for button "popouts"]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
! N | ! N | ||
! N | ! N | ||
! N | ! N | ||
|- | |- | ||
− | | [[Wrong sound origin for button | + | | [[Wrong sound origin for switch/button presses]] |
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
Line 1,232: | Line 1,007: | ||
! N | ! N | ||
! N | ! N | ||
+ | |- | ||
+ | | [[Z_Malloc error]] | ||
+ | | Verified | ||
+ | | Algorithm | ||
+ | ! Y | ||
+ | ! | ||
! N | ! N | ||
|- | |- | ||
− | | [[ | + | |} |
+ | |||
+ | === Bugs present in versions prior to Doom II version 1.9 for DOS === | ||
+ | {| {{prettySortable}} | ||
+ | !Phenomenon | ||
+ | !Canonicity | ||
+ | !Cause | ||
+ | !Fatal? | ||
+ | !Fixed in<br> version | ||
+ | !Workaround? | ||
+ | !Loophole? | ||
+ | |- | ||
+ | | [[Armor percentage rollover]] | ||
+ | | Undisputed | ||
+ | | Static limit | ||
+ | ! N* | ||
+ | ! 1.25? | ||
+ | ! S | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Barrel suicide]] | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
! N | ! N | ||
+ | ! 1.5? | ||
+ | ! N | ||
+ | ! Y | ||
+ | |- | ||
+ | | [[Broadcast packet meltdown]] | ||
+ | | Verified | ||
+ | | | ||
+ | ! N* | ||
+ | ! 1.2 | ||
+ | ! | ||
! N | ! N | ||
+ | |- | ||
+ | | [[Crushed monsters block player movement]] | ||
+ | | Verified | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Health limited to 199]] | ||
+ | | | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! 1.25? | ||
! N | ! N | ||
! N | ! N | ||
|- | |- | ||
− | | [[ | + | | [[IRQ 2 does not work]] |
+ | | Verified | ||
+ | | | ||
+ | ! | ||
+ | ! 1.2 | ||
+ | ! | ||
+ | ! | ||
+ | |- | ||
+ | | [[Items respawn with pickup flag off]] | ||
+ | | Verified | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! | ||
+ | ! | ||
+ | ! | ||
+ | |- | ||
+ | | [[Moiré error]] | ||
+ | | Undisputed | ||
+ | | Overflow | ||
+ | ! N* | ||
+ | ! 1.4 | ||
+ | ! S | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Network game crashes with 3 or 4 players]] | ||
+ | | Verified | ||
+ | | | ||
+ | ! Y | ||
+ | ! | ||
+ | ! | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Network play locks up when using a sound card]] | ||
+ | | Verified | ||
+ | | | ||
+ | ! Y | ||
+ | ! 1.2 | ||
+ | ! | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Projectiles present in The Ultimate Doom triggering linedefs]] | ||
+ | | Verified | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! 1.4 | ||
+ | ! N | ||
+ | ! Y | ||
+ | |- | ||
+ | | [[PS/2 mouse bug]] | ||
| Verified | | Verified | ||
| | | | ||
! | ! | ||
+ | ! 1.666 | ||
+ | ! | ||
+ | ! | ||
+ | |- | ||
+ | | [[Retriggering an open door after loading a savegame causes crash]] | ||
+ | | Verified | ||
+ | | Algorithm | ||
! Y | ! Y | ||
+ | ! 1.2 | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Savegame slots 5 and 6 corrupt other files]] | ||
+ | | Verified | ||
+ | | | ||
+ | ! N | ||
+ | ! 1.2 | ||
! | ! | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Skill level cannot be selected in some network games]] | ||
+ | | Verified | ||
+ | | | ||
+ | ! N | ||
! | ! | ||
+ | ! | ||
+ | ! | ||
+ | |- | ||
+ | | [[Switches and lifts deactivated when restoring a saved game]] | ||
+ | | Verified | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! | ||
+ | ! N | ||
+ | ! N | ||
|- | |- | ||
|} | |} | ||
Line 1,257: | Line 1,162: | ||
* [[Doom source code oddities]] | * [[Doom source code oddities]] | ||
* [[Static limits]] | * [[Static limits]] | ||
+ | * [[Engine bugs in Heretic]] | ||
+ | * [[Engine bugs in Hexen]] | ||
* [[Engine bugs in Strife]] | * [[Engine bugs in Strife]] | ||
Revision as of 16:38, 2 May 2022
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.
This article uses the version 1.9 DOOM2.EXE DOS version as the base version. Older versions, the source release, Final Doom and The Ultimate Doom have some minor changes, tweaks and different bugs.
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).
Contents
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) or sectors, 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).