Changed data structures

12. Changed data structures ZDoom uses the same basic map data as DOOM, but with two exceptions: The LINEDEFS and THINGS lumps have been expanded to a form compatible with Hexen. ZDoom decides which format these lumps use by checking to see if the map has a BEHAVIOR lump. If it does, then the LINEDEFS and THINGS lumps are treated using the Hexen format, otherwise they use the normal DOOM format.

LINEDEFS

A LINEDEFS lump consists of a series of 16-byte records. Each record is structured as follows:

Offset Size Label Meaning
0 word v1 Line's start vertex
2 word v2 Line's end vertex
4 word flags Line's flags (see below)
6 byte special Line's special type
7 byte args[0] Line special's first argument
8 byte args[1] Line special's second argument
9 byte args[2] Line special's third argument
10 byte args[3] Line special's fourth argument
11 byte args[4] Line special's fifth argument
12 word sidenum[0] Line's front sidedef number
14 word sidenum[1] Line's back sidedef number

The meanings of the bits in the linedef's flags field are:

Bit Hex Equiv Meaning
0 0x0001 Blocks players and monsters
1 0x0002 Blocks monsters only
2 0x0004 Line is two-sided
3 0x0008 Upper texture is unpegged
4 0x0010 Lower texture is unpegged
5 0x0020 Secret line (drawn as one-sided in automap)
6 0x0040 Blocks sounds
7 0x0080 Never draw this line on the automap
8 0x0100 Always draw this line on the automap
9 0x0200 This line's special is repeatable
10-12 0x1c00 This line's activation type (see below)
13 0x2000 Line can be activated by monsters (and players)
14 0x4000 Reserved
15 0x8000 Blocks everything (including gunshots and missiles)

Each line special can have one of the following activation types:

Value Flag Value Meaning
0 0x0000 Activated when a player crosses the line
1 0x0400 Activated when a player uses the line
2 0x0800 Activated when a monster crosses the line
3 0x0c00 Activated when a projectile hits the line
4 0x1000 Activated when a player bumps the line
5 0x1400 Activated when a projectile crosses the line
6 0x1800 Same as 1, but with passthru (see boomref.txt)
7 0x1c0 Reserved

THINGS

A THINGS lump consists of a series of 20-byte records. Each record is structured as follows:

Offset Size Label Meaning
0 short thingid Thing's id
2 short x Thing's x location
4 short y Thing's y location
6 short z Thing's z location relative to floor/ceiling
8 short angle Thing's facing angle (in degrees)
10 short type Thing's type
12 short flags Thing's flags (see below)
14 byte special Thing's special
15 byte args[0] Special's first argument
16 byte args[1] Special's second argument
17 byte args[2] Special's third argument
18 byte args[3] Special's fourth argument
19 byte args[4] Special's fifth argument

Note that in this case, the thing's angle is specified in degrees with 0 being east and larger values proceed counterclockwise. The angle given here will be rounded down to a 45 degree increment.

Under normal circumstances, the thing's special will be executed when the thing dies, this allowing you to perform some special action upon killing a monster.

The meanings of the bits in the thing's flags field are:
Bit Hex Equiv Meaning
0 0x0001 Thing will appear on easy skill setting (0/1)
1 0x0002 Thing will appear on medium skill setting (2)
2 0x0004 Thing will appear on hard skill setting (3/4)
3 0x0008 Thing is deaf
4 0x0010 Thing is dormant (will not react until activated)
5 0x0020 Reserved
6 0x0040 Reserved
7 0x0080 Reserved
8 0x0100 Thing appears in single-player games
9 0x0200 Thing appears in cooperative games
10 0x0400 Thing appears in deathmatch games
11 0x0800 Reserved
12 0x1000 Reserved
13 0x2000 Reserved
14 0x4000 Reserved
15 0x8000 Reserved