Difference between revisions of "Engine bugs in Strife"

From DoomWiki.org

[checked revision][checked revision]
(Add incomplete healing article, which is the very last Strife bug that I know about.)
m (avoid redirs)
 
(13 intermediate revisions by 6 users not shown)
Line 13: Line 13:
 
**  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.
Line 20: Line 20:
  
 
* '''Fixed in 1.31''' — Some bugs appear only in [[versions]] of Strife prior to v1.31.
 
* '''Fixed in 1.31''' — Some bugs appear only in [[versions]] of Strife prior to v1.31.
 +
 +
* '''Fixed in SVE''' — Most bugs were fixed, some conditionally, in [[Strife: Veteran Edition]]. Bugs marked with a '''C''' in this category are toggled on or off via use of the game's "classic mode" feature. Those marked with a '''Y''' are fixed unconditionally.
  
 
* 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 27:
 
* 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).
  
{| {{prettytable}} class="sortable"
+
{| {{prettySortable}}
 
!Phenomenon
 
!Phenomenon
 
!Cause
 
!Cause
Line 31: Line 33:
 
!Inherited?
 
!Inherited?
 
!Fixed in<br>1.31?
 
!Fixed in<br>1.31?
 +
!Fixed in<br>SVE?
 
!Workaround?
 
!Workaround?
 
!Loophole?
 
!Loophole?
Line 39: Line 42:
 
! N
 
! N
 
! N
 
! N
 +
! C
 
! N
 
! N
 
! Y
 
! Y
Line 47: Line 51:
 
! Y
 
! Y
 
! N
 
! N
 +
! C
 
! N
 
! N
 
! Y
 
! Y
Line 52: Line 57:
 
| [[Burning players can exit level]]
 
| [[Burning players can exit level]]
 
| Algorithm
 
| Algorithm
! N
+
! N*
 
! Y
 
! Y
 
! N
 
! N
 +
! C
 
! N
 
! N
 
! Y
 
! Y
Line 63: Line 69:
 
! N
 
! N
 
! N
 
! N
 +
! C
 
! Y
 
! Y
 
! N
 
! N
Line 69: Line 76:
 
| Algorithm
 
| Algorithm
 
! Y*
 
! Y*
 +
! N
 
! N
 
! N
 
! N
 
! N
Line 77: Line 85:
 
| Algorithm
 
| Algorithm
 
! Y*
 
! Y*
 +
! N
 
! N
 
! N
 
! N
 
! N
Line 87: Line 96:
 
! N
 
! N
 
! N
 
! N
 +
! C
 
! N
 
! N
 
! N
 
! N
Line 95: Line 105:
 
! N
 
! N
 
! N
 
! N
 +
! Y
 
! N
 
! N
 
! N
 
! N
Line 100: Line 111:
 
| [[Laser does not hit peasant]]
 
| [[Laser does not hit peasant]]
 
| Algorithm
 
| Algorithm
 +
! N
 
! N
 
! N
 
! N
 
! N
Line 106: Line 118:
 
! N
 
! N
 
|-
 
|-
| [[Monsters reset to normal when loading a savegame]]
+
| [[Monsters reset to normal when loading a save game]]
 
| Algorithm
 
| Algorithm
 
! N
 
! N
 
! Y
 
! Y
 
! N
 
! N
 +
! Y
 
! Y
 
! Y
 
! Y
 
! Y
Line 119: Line 132:
 
! Y
 
! Y
 
! N
 
! N
 +
! C
 
! N
 
! N
 
! N
 
! N
Line 124: Line 138:
 
| [[Oracle's spectre becomes a ghost monster]]
 
| [[Oracle's spectre becomes a ghost monster]]
 
| Algorithm
 
| Algorithm
 +
! N
 +
! N
 +
! N
 +
! C
 +
! Y
 +
! N
 +
|-
 +
| [[Overwriting a Strife save game can cause invalid game state]]
 +
| Algorithm
 +
! N*
 +
! N
 +
! N
 +
! Y
 +
! Y
 +
! N
 +
|-
 +
| [[Pressing escape during the startup causes the HOM effect]] [https://www.youtube.com/watch?v=VK8B68EcZLc] [https://github.com/chocolate-doom/chocolate-doom/issues/294]
 +
| Algorithm
 +
! N
 
! N
 
! N
 
! N
 
! N
Line 134: Line 167:
 
! N
 
! N
 
! N
 
! N
 +
! Y
 
! Y
 
! Y
 
! N
 
! N
Line 143: Line 177:
 
! N
 
! N
 
! N
 
! N
 +
! C
 
! N
 
! N
 
! N
 
! N
Line 151: Line 186:
 
! N
 
! N
 
! N
 
! N
 +
! C
 
! N
 
! N
 
! Y
 
! Y
Line 159: Line 195:
 
! N
 
! N
 
! N
 
! N
 +
! C
 
! Y
 
! Y
 
! Y
 
! Y
 +
|-
 +
| [[Strife ambient sounds are inconsistent]]
 +
| Algorithm
 +
! N
 +
! N
 +
! N
 +
! C
 +
! N
 +
! N
 
|-
 
|-
 
| [[Strife reliance on 2S linedef flag]]
 
| [[Strife reliance on 2S linedef flag]]
Line 166: Line 212:
 
! Y*
 
! Y*
 
! Y
 
! Y
 +
! N
 
! N
 
! N
 
! Y
 
! Y
 
! N
 
! N
 
|-
 
|-
| [[Strife savegame target loading glitch]]
+
| [[Strife save game target loading glitch]]
 
| Algorithm
 
| Algorithm
 
! N
 
! N
 
! N
 
! N
 
! N
 
! N
 +
! Y
 
! N
 
! N
 
! Y
 
! Y
 
|-
 
|-
| [[Strife savegame tracer loading glitch]]
+
| [[Strife save game tracer loading glitch]]
 
| Algorithm
 
| Algorithm
 
! Y*
 
! Y*
 
! Y
 
! Y
 
! N
 
! N
 +
! Y
 
! N
 
! N
 
! N
 
! N
Line 191: Line 240:
 
! N
 
! N
 
! N
 
! N
 +
! Y
 
! N
 
! N
 
! N
 
! N
Line 196: Line 246:
 
| [[Torpedo is never auto-selected]]
 
| [[Torpedo is never auto-selected]]
 
| Algorithm
 
| Algorithm
 +
! N
 
! N
 
! N
 
! N
 
! N
Line 205: Line 256:
 
| Algorithm
 
| Algorithm
 
! Y
 
! Y
 +
! N
 
! N
 
! N
 
! N
 
! N
Line 214: Line 266:
 
== See also ==
 
== See also ==
  
 +
* [[Strife sequence breaks]]
 +
* [[Strife dead ends]]
 
* [[Engine bug]]
 
* [[Engine bug]]
  

Latest revision as of 00:25, 9 February 2018

A Strife engine bug is a limitation or an oddity present in Rogue Entertainment's modification of the Doom engine for Strife: Quest for the Sigil. 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[edit]

This table classifies anomalies in a very broad way; see the individual articles for details.

  • 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.
  • A bug is inherited if it is a direct consequence or extension of a bug which occurred in the Doom 2 v1.666 codebase upon which Strife was built.
  • Fixed in 1.31 — Some bugs appear only in versions of Strife prior to v1.31.
  • Fixed in SVE — Most bugs were fixed, some conditionally, in Strife: Veteran Edition. Bugs marked with a C in this category are toggled on or off via use of the game's "classic mode" feature. Those marked with a Y are fixed unconditionally.
  • 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).
Phenomenon Cause Fatal? Inherited? Fixed in
1.31?
Fixed in
SVE?
Workaround? Loophole?
Bishop's missiles have reversed skill properties Typo N N N C N Y
Burning players can activate linedefs Algorithm N Y N C N Y
Burning players can exit level Algorithm N* Y N C N Y
Incomplete healing from Gerard Algorithm N N N C Y N
Insecure code in dialog engine Algorithm Y* N N N Y N
Inventory bounds checking error Algorithm Y* N N N Y N
Irale door missing sound bug Algorithm N N N C N N
Items are given to players not in the game Algorithm Y* N N Y N N
Laser does not hit peasant Algorithm N N N N N N
Monsters reset to normal when loading a save game Algorithm N Y N Y Y Y
Multiple thinkers on a single door Algorithm N* Y N C N N
Oracle's spectre becomes a ghost monster Algorithm N N N C Y N
Overwriting a Strife save game can cause invalid game state Algorithm N* N N Y Y N
Pressing escape during the startup causes the HOM effect [1] [2] Algorithm N N N N Y N
Repetitive fade-out in Strife ending Algorithm N N Y Y N N
Sigil -1 can be gained from LEGO cheat Algorithm N N N C N N
Sigil damage thrusts player toward the east Algorithm N N N C N Y
Some objects are removed by the punch dagger Typo N N N C Y Y
Strife ambient sounds are inconsistent Algorithm N N N C N N
Strife reliance on 2S linedef flag Linedef Y* Y N N Y N
Strife save game target loading glitch Algorithm N N N Y N Y
Strife save game tracer loading glitch Algorithm Y* Y N Y N N
Strife spechit access at negative index Algorithm Y* N N Y N N
Torpedo is never auto-selected Algorithm N N N N N N
Unstable screenwipe algorithm Algorithm Y N N N N N

See also[edit]