Difference between revisions of "Engine bug"
From DoomWiki.org
[checked revision] | [checked revision] |
(+ this very obscure one... see http://www.doomworld.com/vb/post/1069056) |
m (fix link to disambiguation page) |
||
(47 intermediate revisions by 11 users not shown) | |||
Line 15: | Line 15: | ||
** The Doom engine includes few safeguards against [[Wikipedia:Arithmetic overflow|''overflow'' conditions]]. | ** The Doom engine includes few safeguards against [[Wikipedia:Arithmetic 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 [[Wikipedia:Floating point#Accuracy problems|''roundoff'' errors]]. | ** Line-of-sight calculations, [[Doom rendering engine|rendering]] algorithms, and the [[Doom rendering engine#Node building|BSP tree]] are also susceptible to [[Wikipedia: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. | ||
− | * '''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 and Doom II|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, 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. | ||
Line 25: | Line 25: | ||
* 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). | ||
− | {| {{ | + | {| {{prettySortable}} |
!Phenomenon | !Phenomenon | ||
!Canonicity | !Canonicity | ||
Line 41: | Line 41: | ||
! N | ! N | ||
! Y | ! Y | ||
+ | |- | ||
+ | | [[1% damage bug]] | ||
+ | | | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Absurd texture name in error message]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | ! Y* | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
|- | |- | ||
| [[AASTINKY|AASTINKY and AASHITTY]] | | [[AASTINKY|AASTINKY and AASHITTY]] | ||
Line 54: | Line 70: | ||
| Overflow | | Overflow | ||
! N* | ! N* | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Anomalous angry face behavior]] | ||
+ | | | ||
+ | | Algorithm | ||
+ | ! N | ||
! N | ! N | ||
! N | ! N | ||
Line 59: | Line 83: | ||
|- | |- | ||
| [[Arch-Vile fire spawned at the wrong location]] | | [[Arch-Vile fire spawned at the wrong location]] | ||
− | | | + | | Undisputed |
− | | | + | | Typo |
! N | ! N | ||
! N | ! N | ||
Line 72: | Line 96: | ||
! Y | ! Y | ||
! S | ! S | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Baron attacks a monster behind him]] | ||
+ | | | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
! N | ! N | ||
|- | |- | ||
Line 97: | Line 129: | ||
! N | ! N | ||
! Y | ! Y | ||
+ | |- | ||
+ | | [[Blockmap overflow]] | ||
+ | | Undisputed | ||
+ | | Overflow | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
|- | |- | ||
| [[Broadcast packet meltdown]] | | [[Broadcast packet meltdown]] | ||
Line 122: | Line 162: | ||
! N | ! N | ||
|- | |- | ||
− | | [[ | + | | [[Colormap blink ignores concurrent powerup]] [https://www.doomworld.com/vb/showthread.php?s=&postid=1019768#post1019768] |
+ | | | ||
| | | | ||
− | |||
! N | ! N | ||
! N | ! N | ||
! N | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Crash when accessing Read This!]] [https://www.doomworld.com/vb/doom-general/73271-solved-the-mystery-of-the-alternative-doom95-exe/] | ||
+ | | Undisputed | ||
+ | | | ||
+ | ! Y | ||
! | ! | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 187: | Line 227: | ||
|- | |- | ||
| [[Elastic collisions with walls]] | | [[Elastic collisions with walls]] | ||
− | | | + | | Undisputed |
− | | | + | | Roundoff |
! N | ! N | ||
! N | ! N | ||
Line 212: | Line 252: | ||
| [[Final Doom teleporters do not set Z coordinate]] | | [[Final Doom teleporters do not set Z coordinate]] | ||
| Undisputed | | Undisputed | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Firing frame position not updated when the player dies]] | ||
+ | | | ||
| Algorithm | | Algorithm | ||
! N | ! N | ||
Line 258: | Line 306: | ||
! N | ! N | ||
|- | |- | ||
− | | Hall of Mirrors effect (limit) | + | | [[GUS instrument mappings bug]] |
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! Y | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Static_limits#Drawsegs|Hall of Mirrors effect (limit)]] | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
Line 266: | Line 322: | ||
! N | ! N | ||
|- | |- | ||
− | | [[Hall of Mirrors effect | + | | [[Hall of Mirrors effect|Hall of Mirrors effect (missing texture)]] |
| Undisputed | | Undisputed | ||
| Linedef | | Linedef | ||
Line 296: | Line 352: | ||
! | ! | ||
! | ! | ||
+ | ! | ||
+ | |- | ||
+ | | [[Chainsaw#Notes|IDCHOPPERS cheat confers 1 tic of invulnerability]] | ||
+ | | | ||
+ | | Typo | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
! | ! | ||
|- | |- | ||
Line 318: | Line 382: | ||
| Algorithm | | Algorithm | ||
! N | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Invalid map number in recorded demo]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | ! N* | ||
! N | ! N | ||
! N | ! N | ||
Line 384: | Line 456: | ||
! N | ! N | ||
! S | ! S | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Lopsided final boss explosions]] | ||
+ | | Undisputed | ||
+ | | Typo | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
! N | ! N | ||
|- | |- | ||
Line 440: | Line 520: | ||
! N | ! N | ||
! N | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Manual doors on 1S lines cause an illegal operation]] | ||
+ | | Undisputed | ||
+ | | Linedef | ||
+ | ! Y* | ||
+ | ! N | ||
+ | ! Y | ||
! N | ! N | ||
|- | |- | ||
Line 497: | Line 585: | ||
! N | ! N | ||
! | ! | ||
+ | |- | ||
+ | | [[Monsters may target players without ever seeing or hearing them]] | ||
+ | | Disputed | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
|- | |- | ||
| [[Monsters open locked doors]] | | [[Monsters open locked doors]] | ||
Line 523: | Line 619: | ||
|- | |- | ||
| [[Moving platform heights not preserved in saved games]] | | [[Moving platform heights not preserved in saved games]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Vertical offsets are ignored in texture patches]] | ||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
Line 571: | Line 675: | ||
|- | |- | ||
| [[Ouch face]] | | [[Ouch face]] | ||
− | | Verified [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 | ||
Line 581: | Line 685: | ||
| | | | ||
| | | | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Partial invisibility effect#Animation remains still|Partial invisibility's fuzz effect stays still]] | ||
+ | | | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Partial invisibility effect#Stippling effect|Partial invisibility stippling algorithm]] | ||
+ | | Disputed | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Pause bug in menus with scroll bars]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
! N | ! N | ||
! N | ! N | ||
Line 657: | Line 785: | ||
! | ! | ||
! | ! | ||
+ | |- | ||
+ | | [[PWAD size limit]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | !Y | ||
+ | !N | ||
+ | !Y | ||
+ | !N | ||
|- | |- | ||
| [[Quantum lost soul]] | | [[Quantum lost soul]] | ||
Line 672: | Line 808: | ||
!N | !N | ||
!Y | !Y | ||
+ | !N | ||
+ | |- | ||
+ | | [[Random sound pitch removed]] | ||
+ | | | ||
+ | | | ||
+ | !N | ||
+ | !N | ||
+ | !N | ||
!N | !N | ||
|- | |- | ||
Line 680: | Line 824: | ||
! N | ! N | ||
! N | ! N | ||
+ | ! Y | ||
+ | |- | ||
+ | | [[Blast damage#Non-reentrancy|Recurrent blast damage]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! S | ||
! Y | ! Y | ||
|- | |- | ||
Line 687: | Line 839: | ||
! Y | ! Y | ||
! Y | ! Y | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Revenant tracers desync internal demos]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | ! N* | ||
+ | ! N | ||
! N | ! N | ||
! N | ! N | ||
Line 720: | Line 880: | ||
! N | ! N | ||
! N | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Secret level|Secret exit idiosyncrasies]] | ||
+ | | | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! Y | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Secret#Bugs|Secret sectors appear or disappear]] | ||
+ | | | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! S | ||
+ | ! N | ||
+ | |- | ||
+ | |[[Sector type 17 is disabled after loading a saved game]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | |[[Shotgun sprite wraps vertically in Final Doom]] | ||
+ | | | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! Y | ||
! N | ! N | ||
|- | |- | ||
Line 726: | Line 918: | ||
| Static limit | | Static limit | ||
! N | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | ! Y | ||
+ | |- | ||
+ | | [[Single-use line actions can fail]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | ! N* | ||
! N | ! N | ||
! N | ! N | ||
Line 738: | Line 938: | ||
! | ! | ||
|- | |- | ||
− | | [[Sky hack]] | + | | [[Sky hack absorbs attacks regardless of height]] |
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
Line 844: | Line 1,044: | ||
| [[Sprites flickering across ledges or lifts]] | | [[Sprites flickering across ledges or lifts]] | ||
| Disputed | | Disputed | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Sprites improperly clipped]] | ||
+ | | | ||
| Algorithm | | Algorithm | ||
! N | ! N | ||
Line 861: | Line 1,069: | ||
| Disputed | | Disputed | ||
| Algorithm | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! Y | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Starting on a vertex between visplanes causes illegal memory access]] | ||
+ | | Undisputed | ||
+ | | | ||
! N | ! N | ||
! N | ! N | ||
Line 913: | Line 1,129: | ||
! N | ! N | ||
! Y | ! Y | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| [[Turning resolution is lowered when recording demos]] | | [[Turning resolution is lowered when recording demos]] | ||
Line 933: | Line 1,141: | ||
| Undisputed | | Undisputed | ||
| Linedef | | Linedef | ||
+ | ! N | ||
+ | ! N | ||
+ | ! Y | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Unused frames and obstacle sprite]] [https://www.doomworld.com/vb/post/225726] | ||
+ | | | ||
+ | | | ||
! N | ! N | ||
! N | ! N | ||
Line 985: | Line 1,201: | ||
! N | ! N | ||
! Y | ! Y | ||
+ | |- | ||
+ | | [[Weapon pickup message not displayed in multiplayer]] | ||
+ | | | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
|- | |- | ||
| [[Weapon sighting is off center]] | | [[Weapon sighting is off center]] | ||
Line 1,033: | Line 1,257: | ||
* [[Doom source code oddities]] | * [[Doom source code oddities]] | ||
* [[Static limits]] | * [[Static limits]] | ||
+ | * [[Engine bugs in Strife]] | ||
[[Category:Errors and bugs|*]] | [[Category:Errors and bugs|*]] | ||
[[Category:Doom engine]] | [[Category:Doom engine]] | ||
[[Category:Lists]] | [[Category:Lists]] |
Revision as of 14:20, 19 August 2017
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) 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).