Difference between revisions of "Engine bug"
From DoomWiki.org
[checked revision] | [checked revision] |
m (+wl doom2.exe, use wp template, D2 -> Doom II) |
m (→Bugs present in Doom II version 1.9 for DOS: default sort alphabetically) |
||
(15 intermediate revisions by 7 users not shown) | |||
Line 9: | 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 | + | * '''{{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 109: | Line 109: | ||
| Overflow | | Overflow | ||
! N | ! N | ||
+ | ! S | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Boss level ending not triggered if every player is dead]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | ! N* | ||
! N | ! N | ||
! N | ! N | ||
Line 126: | Line 133: | ||
! N | ! N | ||
|- | |- | ||
− | | [[Colormap blink ignores concurrent powerup]] | + | | [[Chainsaw negates projectile impact thrust]] |
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! Y* | ||
+ | |- | ||
+ | | [[Colormap blink ignores concurrent powerup]] {{dwforumsp|id=1019768|title=}} | ||
| | | | ||
| | | | ||
Line 133: | Line 147: | ||
! N | ! N | ||
|- | |- | ||
− | | [[Crash when accessing Read This!]] | + | | [[Crash when accessing Read This!]] {{dwforums|id=73271|title=}} |
| Undisputed | | Undisputed | ||
| | | | ||
Line 167: | Line 181: | ||
! | ! | ||
! Y | ! Y | ||
+ | |- | ||
+ | | [[Doom II monster exclusion bug]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | ! Y* | ||
+ | ! Y | ||
+ | ! N | ||
|- | |- | ||
| [[Seg#Drawsegs overflow|Drawsegs overflow]] | | [[Seg#Drawsegs overflow|Drawsegs overflow]] | ||
Line 305: | Line 326: | ||
| Algorithm | | Algorithm | ||
! N | ! N | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
! N | ! N | ||
! N | ! N | ||
Line 328: | Line 342: | ||
! Y | ! Y | ||
! Y | ! Y | ||
+ | |- | ||
+ | | [[Key pickup resets palette]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
|- | |- | ||
| [[Kill percentage flag used for -nomonsters and respawning]] | | [[Kill percentage flag used for -nomonsters and respawning]] | ||
Line 370: | Line 391: | ||
! N | ! N | ||
! Y | ! Y | ||
+ | |- | ||
+ | | [[Lost soul clipping problems]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
|- | |- | ||
| [[Lost soul colliding with items]] | | [[Lost soul colliding with items]] | ||
Line 484: | Line 512: | ||
|- | |- | ||
| [[Moving platform heights not preserved in saved games]] | | [[Moving platform heights not preserved in saved games]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
Line 601: | Line 622: | ||
! N | ! N | ||
! N | ! N | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| [[PWAD size limit]] | | [[PWAD size limit]] | ||
Line 748: | Line 762: | ||
! N | ! N | ||
! N | ! N | ||
+ | |- | ||
+ | | [[Some Doom 2-specific projectiles triggering linedefs]] | ||
+ | | Verified | ||
+ | | Algorithm | ||
+ | ! N | ||
+ | ! N | ||
+ | ! Y | ||
|- | |- | ||
| [[Some game options not preserved in saved games]] | | [[Some game options not preserved in saved games]] | ||
Line 777: | Line 798: | ||
! | ! | ||
|- | |- | ||
− | | [[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 | ||
|- | |- | ||
Line 861: | Line 882: | ||
! Y | ! Y | ||
|- | |- | ||
− | | [[Tag 666# | + | | [[Tag 666#Difference in behaviour between Doom1 and Ultimate Doom|Tag 666 idiosyncrasies]] |
| Undisputed | | Undisputed | ||
| Algorithm | | Algorithm | ||
Line 896: | Line 917: | ||
! N | ! N | ||
|- | |- | ||
− | | [[Unused frames and obstacle sprite]] | + | | [[Unused frames and obstacle sprite]] {{dwforumsp|id=225726|title=}} |
| | | | ||
| | | | ||
Line 913: | Line 934: | ||
| Undisputed | | Undisputed | ||
| Static limit | | Static limit | ||
+ | ! N | ||
+ | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Vertical offsets are ignored in texture patches]] | ||
+ | | Undisputed | ||
+ | | Algorithm | ||
! N | ! N | ||
! N | ! N | ||
Line 978: | Line 1,006: | ||
! N | ! N | ||
! N | ! N | ||
+ | ! N | ||
+ | |- | ||
+ | | [[Z_Malloc error]] | ||
+ | | Verified | ||
+ | | Algorithm | ||
+ | ! Y | ||
+ | ! | ||
! N | ! N | ||
|- | |- | ||
Line 1,047: | Line 1,082: | ||
! | ! | ||
! | ! | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| [[Moiré error]] | | [[Moiré error]] | ||
Line 1,108: | Line 1,135: | ||
| | | | ||
! N | ! N | ||
− | ! | + | ! 1.2 |
! | ! | ||
! N | ! N | ||
Line 1,127: | Line 1,154: | ||
! N | ! N | ||
! N | ! N | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
|} | |} | ||
Line 1,143: | 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).