-
Notifications
You must be signed in to change notification settings - Fork 5
/
doomdata.pas
207 lines (175 loc) · 5.53 KB
/
doomdata.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
//------------------------------------------------------------------------------
//
// FPCDoom - Port of Doom to Free Pascal Compiler
// Copyright (C) 1993-1996 by id Software, Inc.
// Copyright (C) 2004-2007 by Jim Valavanis
// Copyright (C) 2017-2022 by Jim Valavanis
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
// 02111-1307, USA.
//
//------------------------------------------------------------------------------
// E-Mail: [email protected]
// Site : https://sourceforge.net/projects/fpcdoom/
//------------------------------------------------------------------------------
{$I FPCDoom.inc}
unit doomdata;
interface
uses
// char8_t
w_wad;
type
//
// Map level types.
// The following data structures define the persistent format
// used in the lumps of the WAD files.
//
// Lump order in a map WAD: each map needs a couple of lumps
// to provide a complete scene geometry description.
maplumpdesc_t = (
ML_LABEL, // A separator, name, ExMx or MAPxx
ML_THINGS, // Monsters, items..
ML_LINEDEFS, // LineDefs, from editing
ML_SIDEDEFS, // SideDefs, from editing
ML_VERTEXES, // Vertices, edited and BSP splits generated
ML_SEGS, // LineSegs, from LineDefs split by BSP
ML_SSECTORS, // SubSectors, list of LineSegs
ML_NODES, // BSP nodes
ML_SECTORS, // Sectors, from editing
ML_REJECT, // LUT, sector-sector visibility
ML_BLOCKMAP, // LUT, motion clipping, walls/grid element
ML_CODE // JVAL: script goes here
);
mapvertex_t = record
x: smallint;
y: smallint;
end;
Pmapvertex_t = ^mapvertex_t;
// A SideDef, defining the visual appearance of a wall,
// by setting textures and offsets.
mapsidedef_t = record
textureoffset: smallint;
rowoffset: smallint;
toptexture: char8_t;
bottomtexture: char8_t;
midtexture: char8_t;
// Front sector, towards viewer.
sector: smallint;
end;
Pmapsidedef_t = ^mapsidedef_t;
// A LineDef, as used for editing, and as input
// to the BSP builder.
maplinedef_t = record
v1: smallint;
v2: smallint;
flags: smallint;
special: smallint;
tag: smallint;
// sidenum[1] will be -1 if one sided
sidenum: array[0..1] of smallint;
end;
Pmaplinedef_t = ^maplinedef_t;
//
// LineDef attributes.
//
const
// Solid, is an obstacle.
ML_BLOCKING = 1;
// Blocks monsters only.
ML_BLOCKMONSTERS = 2;
// Backside will not be present at all
// if not two sided.
ML_TWOSIDED = 4;
// If a texture is pegged, the texture will have
// the end exposed to air held constant at the
// top or bottom of the texture (stairs or pulled
// down things) and will move with a height change
// of one of the neighbor sectors.
// Unpegged textures allways have the first row of
// the texture at the top pixel of the line for both
// top and bottom textures (use next to windows).
// upper texture unpegged
ML_DONTPEGTOP = 8;
// lower texture unpegged
ML_DONTPEGBOTTOM = 16;
// In AutoMap: don't map as two sided: IT'S A SECRET!
ML_SECRET = 32;
// Sound rendering: don't let sound cross two of these.
ML_SOUNDBLOCK = 64;
// Don't draw on the automap at all.
ML_DONTDRAW = 128;
// Set if already seen, thus drawn in automap.
ML_MAPPED = 256;
type
// Sector definition, from editing.
mapsector_t = record
floorheight: smallint;
ceilingheight: smallint;
floorpic: char8_t;
ceilingpic: char8_t;
lightlevel: smallint;
special: smallint;
tag: smallint;
end;
Pmapsector_t = ^mapsector_t;
// SubSector, as generated by BSP.
mapsubsector_t = record
numsegs: smallint;
// Index of first one, segs are stored sequentially.
firstseg: smallint;
end;
Pmapsubsector_t = ^mapsubsector_t;
// LineSeg, generated by splitting LineDefs
// using partition lines selected by BSP builder.
mapseg_t = record
v1: smallint;
v2: smallint;
angle: smallint;
linedef: smallint;
side: smallint;
offset: smallint;
end;
Pmapseg_t = ^mapseg_t;
// BSP node structure.
// Indicate a leaf.
const
NF_SUBSECTOR = $8000;
type
mapnode_t = record
// Partition line from (x,y) to x+dx,y+dy)
x: smallint;
y: smallint;
dx: smallint;
dy: smallint;
// Bounding box for each child,
// clip against view frustum.
bbox: packed array[0..1] of packed array[0..3] of smallint;
// If NF_SUBSECTOR its a subsector,
// else it's a node of another subtree.
children: packed array[0..1] of word;
end;
Pmapnode_t = ^mapnode_t;
// Thing definition, position, orientation and type,
// plus skill/visibility flags and attributes.
mapthing_t = record
x: smallint;
y: smallint;
angle: smallint;
_type: word;
options: smallint;
end;
Pmapthing_t = ^mapthing_t;
implementation
end.