aboutsummaryrefslogtreecommitdiff
path: root/src/doomdata.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/doomdata.h')
-rw-r--r--src/doomdata.h204
1 files changed, 204 insertions, 0 deletions
diff --git a/src/doomdata.h b/src/doomdata.h
new file mode 100644
index 0000000..20eb99a
--- /dev/null
+++ b/src/doomdata.h
@@ -0,0 +1,204 @@
1/* Emacs style mode select -*- C++ -*-
2 *-----------------------------------------------------------------------------
3 *
4 *
5 * PrBoom: a Doom port merged with LxDoom and LSDLDoom
6 * based on BOOM, a modified and improved DOOM engine
7 * Copyright (C) 1999 by
8 * id Software, Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman
9 * Copyright (C) 1999-2000 by
10 * Jess Haas, Nicolas Kalkhof, Colin Phipps, Florian Schulze
11 * Copyright 2005, 2006 by
12 * Florian Schulze, Colin Phipps, Neil Stevens, Andrey Budko
13 *
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License
16 * as published by the Free Software Foundation; either version 2
17 * of the License, or (at your option) any later version.
18 *
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with this program; if not, write to the Free Software
26 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
27 * 02111-1307, USA.
28 *
29 * DESCRIPTION:
30 * all external data is defined here
31 * most of the data is loaded into different structures at run time
32 * some internal structures shared by many modules are here
33 *
34 *-----------------------------------------------------------------------------*/
35
36#ifndef __DOOMDATA__
37#define __DOOMDATA__
38
39// The most basic types we use, portability.
40#include "config.h"
41#include "doomtype.h"
42
43//
44// Map level types.
45// The following data structures define the persistent format
46// used in the lumps of the WAD files.
47//
48
49// Lump order in a map WAD: each map needs a couple of lumps
50// to provide a complete scene geometry description.
51enum {
52 ML_LABEL, // A separator, name, ExMx or MAPxx
53 ML_THINGS, // Monsters, items..
54 ML_LINEDEFS, // LineDefs, from editing
55 ML_SIDEDEFS, // SideDefs, from editing
56 ML_VERTEXES, // Vertices, edited and BSP splits generated
57 ML_SEGS, // LineSegs, from LineDefs split by BSP
58 ML_SSECTORS, // SubSectors, list of LineSegs
59 ML_NODES, // BSP nodes
60 ML_SECTORS, // Sectors, from editing
61 ML_REJECT, // LUT, sector-sector visibility
62 ML_BLOCKMAP // LUT, motion clipping, walls/grid element
63};
64
65#ifdef _MSC_VER // proff: This is the same as __attribute__ ((packed)) in GNUC
66#pragma pack(push)
67#pragma pack(1)
68#endif //_MSC_VER
69
70// A single Vertex.
71typedef struct {
72 short x,y;
73} PACKEDATTR mapvertex_t;
74
75// A SideDef, defining the visual appearance of a wall,
76// by setting textures and offsets.
77typedef struct {
78 short textureoffset;
79 short rowoffset;
80 char toptexture[8];
81 char bottomtexture[8];
82 char midtexture[8];
83 short sector; // Front sector, towards viewer.
84} PACKEDATTR mapsidedef_t;
85
86// A LineDef, as used for editing, and as input to the BSP builder.
87
88typedef struct {
89 unsigned short v1;
90 unsigned short v2;
91 unsigned short flags;
92 short special;
93 short tag;
94 // proff 07/23/2006 - support more than 32768 sidedefs
95 // use the unsigned value and special case the -1
96 // sidenum[1] will be -1 (NO_INDEX) if one sided
97 unsigned short sidenum[2];
98} PACKEDATTR maplinedef_t;
99
100#define NO_INDEX ((unsigned short)-1)
101
102//
103// LineDef attributes.
104//
105
106// Solid, is an obstacle.
107#define ML_BLOCKING 1
108
109// Blocks monsters only.
110#define ML_BLOCKMONSTERS 2
111
112// Backside will not be drawn if not two sided.
113#define ML_TWOSIDED 4
114
115// If a texture is pegged, the texture will have
116// the end exposed to air held constant at the
117// top or bottom of the texture (stairs or pulled
118// down things) and will move with a height change
119// of one of the neighbor sectors.
120// Unpegged textures always have the first row of
121// the texture at the top pixel of the line for both
122// top and bottom textures (use next to windows).
123
124// upper texture unpegged
125#define ML_DONTPEGTOP 8
126
127// lower texture unpegged
128#define ML_DONTPEGBOTTOM 16
129
130// In AutoMap: don't map as two sided: IT'S A SECRET!
131#define ML_SECRET 32
132
133// Sound rendering: don't let sound cross two of these.
134#define ML_SOUNDBLOCK 64
135
136// Don't draw on the automap at all.
137#define ML_DONTDRAW 128
138
139// Set if already seen, thus drawn in automap.
140#define ML_MAPPED 256
141
142//jff 3/21/98 Set if line absorbs use by player
143//allow multiple push/switch triggers to be used on one push
144#define ML_PASSUSE 512
145
146// Sector definition, from editing.
147typedef struct {
148 short floorheight;
149 short ceilingheight;
150 char floorpic[8];
151 char ceilingpic[8];
152 short lightlevel;
153 short special;
154 short tag;
155} PACKEDATTR mapsector_t;
156
157// SubSector, as generated by BSP.
158typedef struct {
159 unsigned short numsegs;
160 unsigned short firstseg; // Index of first one; segs are stored sequentially.
161} PACKEDATTR mapsubsector_t;
162
163// LineSeg, generated by splitting LineDefs
164// using partition lines selected by BSP builder.
165typedef struct {
166 unsigned short v1;
167 unsigned short v2;
168 short angle;
169 unsigned short linedef;
170 short side;
171 short offset;
172} PACKEDATTR mapseg_t;
173
174// BSP node structure.
175
176// Indicate a leaf.
177#define NF_SUBSECTOR 0x8000
178
179typedef struct {
180 short x; // Partition line from (x,y) to x+dx,y+dy)
181 short y;
182 short dx;
183 short dy;
184 // Bounding box for each child, clip against view frustum.
185 short bbox[2][4];
186 // If NF_SUBSECTOR its a subsector, else it's a node of another subtree.
187 unsigned short children[2];
188} PACKEDATTR mapnode_t;
189
190// Thing definition, position, orientation and type,
191// plus skill/visibility flags and attributes.
192typedef struct {
193 short x;
194 short y;
195 short angle;
196 short type;
197 short options;
198} PACKEDATTR mapthing_t;
199
200#ifdef _MSC_VER
201#pragma pack(pop)
202#endif //_MSC_VER
203
204#endif // __DOOMDATA__