Manual doors on 1S lines cause an illegal operation

From DoomWiki.org

Revision as of 12:20, 25 March 2014 by Quasar (talk | contribs) (Minor fixes)


In the Doom engine, manual push-activation door actions will cause an illegal operation if placed on a single-sided linedef.

This is sometimes fatal on the first activation, in which case the program will immediately crash (in DOS, a venetian blinds phenomenon will usually occur). Occasionally, two or more activations of the line are required before the problem kicks in, in which case the initial activation of the line is accompanied by the normal sound of a door opening, but without any other visible reaction from the game engine.

Cause

The push-style door activation code (which most editors refer to as "DR" doors) does not check for a valid second side on the linedef before proceeding to spawn a thinker that affects that sidedef's sector. This may crash immediately if the erroneous location referenced by sidedefs[-1] points outside of the application's address space. If it does not, then the thinker which is spawned will reference an invalid sector, which may cause an illegal access if the thinker is subsequently modified, such as is the case when the line is activated a second time.

Behavior may vary between different gameplay sessions, or on different maps, due to the unpredictable variability of memory on the heap.

This error is confirmed to remain unfixed in Doom 3: BFG Edition's Doom Classic module. Most source ports, starting with Boom, fix it by ignoring the activation of push-type door linedefs if there is no valid second side on the line.

Examples

A canon example of the problem is available on MAP06 of Doom II. The left (as viewed from inside) one-sided door track of the red key door in this map is mistakenly given the same line action as the red key door's two-sided activation lines. Pressing this door track will crash the game.