Difference between revisions of "Seg"

From DoomWiki.org

[checked revision][checked revision]
(Add data type column; clear up "right" and "left" (which are relative) vs front and back which are the terminology used by the engine itself.)
m (Seg structure: Fix column headers 9_9)
Line 10: Line 10:
 
! Offset
 
! Offset
 
! Size (bytes)
 
! Size (bytes)
 +
! C99 type
 
! Description
 
! Description
! C99 type
 
 
|-
 
|-
 
| 0 || 2 || int16_t
 
| 0 || 2 || int16_t

Revision as of 14:51, 16 August 2016

SEGS (an abbreviation for segments) is the name of a WAD lump which is a component of a level. It is normally generated automatically from other data for the level using a node builder tool.

Segs are segments of linedefs, and describe the portion of a linedef that borders the subsector that the seg belongs to.

Initially, one seg is created for each one-sided linedef, and two segs are created for each two-sided linedef (one for each side). If the area that a seg borders is later divided into two different subsectors, then a new vertex is created at the division point and the seg is split into two at that vertex. The segs are stored in sequential order corresponding to subsector number. The seg entries are referenced from the subsector entries, which are referenced from the nodes lump.

Seg structure

Doom level format
Offset Size (bytes) C99 type Description
0 2 int16_t Starting vertex number
2 2 int16_t Ending vertex number
4 2 int16_t Angle
6 2 int16_t Linedef number
8 2 int16_t Direction: 0 (same as linedef) or 1 (opposite of linedef)
10 2 int16_t Offset: distance along linedef to start of seg

The direction field may be interpreted as a "side flag": direction=0 indicates the seg runs along the "right" or front side of the linedef; direction=1 indicates it runs along the "left" or back side.

Note that the original source code utilizes the C type short, for a signed 2-byte integer, for each of the fields in this structure. This imposes a limit of 32786 vertices and linedefs in a map. Many limit-removing source ports and modern editing utilities change the interpretation of the vertex numbers and linedef number to unsigned in order to support larger maps with up to 65536 vertices and 65535 linedefs (one less linedef is available due to linedefs' inability to address more than 65535 sidedefs).

Drawsegs overflow

While constructing a frame, the segs to be drawn are stored for later rendering. In vanilla Doom, they are kept in a static array 256 elements long, and if a frame requires more segs than this, the excess segs are simply not drawn.

See also

Source