Static limits
From DoomWiki.org
This is a list of static limitations of the vanilla Doom engine, including vanilla Heretic, Hexen, and Strife. In addition, Doom Classic is also covered.
A number of limits are caused by the engine using static arrays for storing data, the size of which is defined in the code:
| Name | Value | Raised values | Note |
|---|---|---|---|
| BACKUPTICS | 12 | 64 (Doom Classic) | Used to size the localcmds array. |
| HU_MAXLINELENGTH | 80 | Maximum message length. | |
| HU_MAXLINES | 4 | Number of messages remembered. | |
| LIGHTLEVELS | 16 | ||
| MAX_ADJOINING_SECTORS | 20 | Used to find the next highest floor. | |
| MAX_DM_STARTS | 10 | 16 (Hexen) | Player spawn spots for deathmatch. Called MAXDEATHMATCHSTARTS in Hexen. |
| MAXANIMS | 32 | 40 (Strife) | Maximum amount of animated flat and texture types in a level. (Not sectors and lines.) |
| MAXARGVS | 100 | Command line parameters | |
| MAXBUTTONS | 16 | 4 players, 4 buttons each at once, max. Not increased in Hexen or Strife despite increased MAXPLAYERS. | |
| MAXCEILINGS | 30 | Active ceilings. | |
| MAXDRAWSEGS | 256 | 1280 (Doom Classic) | |
| MAXEVENTS | 64 | Networking and tick handling related. The localcmds array's size is MAXPLAYER*BACKUPTICS. | |
| MAXHEIGHT | 832 | ||
| MAXINTERCEPTS | 128 | ||
| MAXLIGHTSCALE | 48 | ||
| MAXLIGHTZ | 128 | ||
| MAXLINEANIMS | 64 | 96 (Strife) | Maximum number of wall scrollers (line type 48) in a level. |
| MAXNETNODES | 8 | 16 (Hexen, Strife) | Max computers/players in a game. |
| MAXOPENINGS | SCREENWIDTH*64 | SCREENWIDTH is normally 320; however it is trebled to 960 in the Classic Doom port included with Doom 3: BFG Edition. | |
| MAXPLATS | 30 | ||
| MAXPLAYERS | 4 | 8 (Hexen, Strife) | The maximum number of players, multiplayer/networking. |
| MAXSEGS | 32 | ||
| MAXSLIDEDOORS | 5 | 8 (Strife) | Unused, related to the uncompleted sliding door code. Used for animated doors in Strife. |
| MAXSPECIALCROSS | 8 | Maximum number of special hits (spechit). | |
| MAXSWITCHES | 50 | 80 (Strife) | Maximum number of wall switches in a level. |
| MAXVISPLANES | 128 | 160 (Hexen), 200 (Strife), 384 (Doom Classic) | |
| MAXVISSPRITES | 128 | 192 (Hexen) | |
| MAXWADFILES | 20 | The maximum number of files that can be loaded, IWAD included. | |
| MAXWIDTH | 1120 | ||
| Heretic limits | |||
| Name | Value | Raised values | Note |
| MAX_AMBIENT_SFX | 8 | Maximum number of Heretic ambient sound things. | |
| MAX_BOSS_SPOTS | 8 | Maximum number of teleport destinations for D'Sparil. | |
| MAX_MACE_SPOTS | 8 | Maximum number of firemace spawn spots. | |
| Hexen limits | |||
| Name | Value | Raised values | Note |
| MAX_ACS_MAP_VARS | 32 | Number of separate ACS variables with map scope. | |
| MAX_ACS_SCRIPT_VARS | 10 | Number of separate ACS variables with local scope in a single script. | |
| MAX_ACS_STORE | 20 | Number of scripts that can be "remotely" started in other maps. | |
| MAX_ACS_WORLD_VARS | 64 | Number of separate ACS variables with world scope in a hub. | |
| MAX_ANIM_DEFS | 20 | Number of animations defined in ANIMDEFS | |
| MAX_FRAME_DEFS | 96 | Number of individual frames used by all animations defined in ANIMDEFS | |
| MAX_TAGGED_LINES | 64 | Number of lines with a non-zero tag (through Line_SetIdentification) | |
| MAX_TID_COUNT | 200 | Maximum number of mobjs with a non-zero TID in a map | |
[edit] Visplanes
- Main article: Visplane overflow
The most famous limit of them all, there are 128, and each one represents a unique combination of floor or ceiling height, light level, and texture present in a rendered scene. In the worst case each subsector will generate at least two visplanes if its floor and ceiling are in view, but these may be merged -or split- as the game engine draws the scene. The only ways to get rid of this are to make your level less detailed in areas visible from the spot it happens, add sight-obstructing walls, or move areas up or down vertically so that the floors or ceilings are not visible.
[edit] Vissprites
- Main article: Visible sprites limit
Doom will not draw more than 128 sprites at one time. If you have too many, the extra ones will flicker in and out of view, depending on the sorting order.
[edit] Drawsegs
Doom will not render more than 256 segs (128 in earlier versions) in a single scene. The rest will become HOM. Doom draws from front to back, so the furthest lines away from the player will typically disappear first.
[edit] Blockmap
- Main article: Map size limit (blocks)
The blockmap for a vanilla map cannot exceed 65536 bytes in size. Even a relatively simple map with only 4 linedefs can exceed the blockmap limit if it is made to cover enough area, because the size of the blockmap is a function of both the number of linedefs in the map, and the amount of area it covers in 128x128 blocks. Maps that exceed the blockmap limit can crash vanilla Doom.
[edit] Segs/sides/lines/subsectors/nodes
The number of none of these things can exceed 32768 due to hard data type size limits in the map format. Practically speaking, the segs limit is always the first one hit, and thus imposes an even more stringent limit on the other entities, of which the number of segs is partially a function.
[edit] Plats & ceilings
- Main article: Moving platforms limit
Only 30 platform actions can be active at one time. Exceeding this limit will cause a bomb-out with error message. There can also only be 30 active ceiling effects at a time, and if this limit is exceeded, the map can behave strangely.
[edit] Buttons
If more than 16 switches are activated at once, the game will bomb out.
[edit] Spechits
- Main article: Spechits overflow
Crossing more than 8 special linedefs in a single tic will cause an internal overflow, and undefined behavior will result.
[edit] Intercepts
If a bullet tracer crosses too many things and lines (more than 128), an internal overflow will happen, causing undefined behavior. This sometimes results in the bug known as "all-ghosts".
[edit] Savegame
Savegames are limited in size to around 180 KB. If the saved memory footprint of your map is larger than this, including because of dynamically spawned objects such as missiles or monsters spawned by the final boss, the game will bomb out.
[edit] Openings/Solidsegs
The number of alternating regions of solid and transparent linedefs have some esoteric limits. If this exceeded, for instance with too many fenceposts, the game will crash. Like most things in the engine, openings are stored in a static array. Its dimensions are defined as "SCREENWIDTH * 64", giving a maximum total of 20480 for the vanilla resolution of 320x200.
[edit] Scrollers
Having more than 64 scrolling lines will either bomb out or crash.
[edit] Adjoining sectors
Only up to 20 adjoining sectors are considered for effects such as "floor raise to next highest floor". The overflow is benign at 21 sectors, but fatal at 22 or more where it results in a crash.
[edit] Coordinates
Because of the fixed-point format used by Doom, the integral part of coordinates is effectively a signed 16-bit number, restricted to values between -32767 and 32767. Greater values simply cannot be expressed.
This amplitude restriction concerns both absolute and relative coordinates, as the same units are used when calculating distances between two points, so diagonal dimensions are concerned as well. In practical terms, it is safer to keep the map boundaries between -16384 and +16383.
Even limit removing ports do not generally raise this limit, since increasing it requires either moving to floating-point arithmetic or to 64-bit format.
[edit] See also
- Armor percentage rollover
- Engine bug
- Frag count rollover
- Lost soul limit
- Savegame buffer overflow
- Sound cutoffs
- Z_Malloc error
[edit] Sources
- Post by Quasar detailing vanilla Doom limits
- Spechits, Reject and Intercepts Overflow Lists
