Vanilla Doom engine mapping reference

Mapping for the vanilla engine requires awareness of various limitations and oddities that many source ports have eliminated. This article assumes a basic knowledge of map creation and is intended to be a quick reference to commonly encountered vanilla engine behaviors. A comprehensive list of bugs is available in the Engine bug article.

Limitations
Vanilla Doom has several static limits on various map elements. Chocorenderlimits, a modified version of Chocolate Doom, can display the current number of these elements in real time while playing a level.

256 Segs
If the seg count in a particular scene exceeds 256, additional segs will not be drawn, which causes a Hall of Mirrors effect. This limitation was even lower in version 1.0 and HOMs could be seen from the outside area of E1M8: Phobos Anomaly.

Because segs are the result of running a map through a node builder, there is no way to directly control the seg count from a map editor. Reducing the complexity of a map's architecture, so that fewer subsectors are required, is the best way to drop the seg count.

Visplanes
Unlike the seg limitation, which is merely cosmetic, the 128 visplane limit will cause the game to exit with an error. Reducing the number of unique sector heights, flats and light levels visible from a particular scene will drop the visplane count.

Heretic raises this limit to 160 and Hexen to 192.

Hitting F6 in Chocorenderlimits can toggle between three different visplane displays, making it much easier to diagnose areas that are being split into an excessive number of visplanes. Hitting F3 will instantly move the player to the area where the highest visplane count has been seen.

30 Plats
Only 30 plats (sectors with moving floors; elevators) can be active at once or the game will exit with an error. Avoiding this one is as simple as making sure 30 moving floors cannot be active in separate sectors at the same time.

128 Sprites
Similar to segs, if more than 128 sprites are visible in a scene, they will not be drawn. The corresponding things still exist and will behave as normal, but will be invisible.

64 Scrolling Walls
The vanilla engine has a limit of 64 scrolling walls a map. However the check for this is incorrectly placed, so instead of aborting when this limit is reached, memory will start to be overwritten potentially leading to a variety of other errors manifesting.

256 Thing ID's
Hexen specific as other Doom engine games don't feature thing ID's.

Vanilla Hexen has a hardcoded limit of 256 thing ID's. Running a map with more, will cause the engine to abort with a max TID limit reached error message.

Tutti-frutti
The Tutti-frutti effect has two different causes: Attempting to make a texture shorter than 128 pixels tile vertically or attempting to use a texture with transparent sections as anything other than a two-sided middle texture. Pay attention to texture heights when applying them to walls and lower sector heights or change textures if necessary. Do not allow any transparent sections of textures to be seen on one-sided middle or upper or lower textures.

A common way of accidentally causing a tutti-frutti effect, even while being mindful of the causes, is by setting the lower unpegged flag on a lower texture which is using one of the 8 or 16 pixel tall step textures.

In Heretic, the sky tiles and this causes a tutti-frutti effect on the lower half. Walls surrounding a sector with a sky ceiling must be at least 56 units tall to prevent the tiled section from being visible to a grounded player. Additionally, if the Wings of Wrath are available in the map, no interior sectors should be more than 15 units taller than the sector(s) forming the border of the sky section.

Medusa effect
If a multi-patch texture is used as a middle texture on a two sided linedef it will cause a Medusa effect. The texture will not render correctly and it can cause massive slow down in the game.

Infinitely tall things
All blocking things in vanilla Doom are infinitely tall, meaning they will obstruct the player's movement regardless of their defined height and how far above or below the player they are. Some source ports change this behavior and perform an actual height check on these things, for example allowing a player to move under a Cacodemon floating above them, or move over a floor lamp below them. Most often this behavior change becomes apparent with the hanging gore decorations, some of which have both blocking and non-blocking variants. A port that performs a height check will allow the player to pass under the blocking decoration, but vanilla will not.

In an opposite scenario, decorations which do not block projectiles in vanilla Doom may do so in source ports. This is because most decorations have their height set at 16 and rely on the infinitely tall behavior to prevent the player from passing them. Projectiles, however, can pass through these decorations as long as they don't collide with the bottom 16 units.

Heretic and Hexen feature limited ability for things to go over and under each other.

Monsters attacking across tall ledges
In the vanilla engine, no height check is made on monster hitscan or melee attacks. This means that a monster which cannot be seen, and therefore unable to be targeted by the player, will be able to attack the player as long as the player is adjacent to the monster.

Monsters cannot cross drop offs
Some source ports allow monsters to descend from heights which the vanilla engine will now allow.

Monsters stuck on door tracks
A commonly observed phenomenon in the vanilla engine is a monster that is stuck on a door track. See the linked article for an in-depth analysis of why this occurs. The behavior is unavoidable.

Monsters stuck on lifts
Similar to the above, if a monster was crossing a line when a lift raised or lowered, the monster will be stuck in that position until the lift finishes ascending or descending.

Shooting through things
Commonly called the Blockmap bug, only the center of a thing is checked for hitscan collision, not the thing's radius. As a result of this, shots can appear to pass directly through a monster due to the monster's center being in a different block than the one the hitscan passed through.