diff options
Diffstat (limited to 'src/doomdef.h')
-rw-r--r-- | src/doomdef.h | 330 |
1 files changed, 330 insertions, 0 deletions
diff --git a/src/doomdef.h b/src/doomdef.h new file mode 100644 index 0000000..140db82 --- /dev/null +++ b/src/doomdef.h | |||
@@ -0,0 +1,330 @@ | |||
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 | * Internally used data structures for virtually everything, | ||
31 | * key definitions, lots of other stuff. | ||
32 | * | ||
33 | *-----------------------------------------------------------------------------*/ | ||
34 | |||
35 | #ifndef __DOOMDEF__ | ||
36 | #define __DOOMDEF__ | ||
37 | |||
38 | /* use config.h if autoconf made one -- josh */ | ||
39 | #ifdef HAVE_CONFIG_H | ||
40 | #include "config.h" | ||
41 | #endif | ||
42 | |||
43 | // killough 4/25/98: Make gcc extensions mean nothing on other compilers | ||
44 | #ifndef __GNUC__ | ||
45 | #define __attribute__(x) | ||
46 | #endif | ||
47 | |||
48 | // This must come first, since it redefines malloc(), free(), etc. -- killough: | ||
49 | #include "z_zone.h" | ||
50 | |||
51 | #include <stdio.h> | ||
52 | #include <stdlib.h> | ||
53 | #include <string.h> | ||
54 | #include <ctype.h> | ||
55 | #include <limits.h> | ||
56 | |||
57 | // this should go here, not in makefile/configure.ac -- josh | ||
58 | #ifndef O_BINARY | ||
59 | #define O_BINARY 0 | ||
60 | #endif | ||
61 | |||
62 | #include "m_swap.h" | ||
63 | #include "version.h" | ||
64 | |||
65 | // Game mode handling - identify IWAD version | ||
66 | // to handle IWAD dependend animations etc. | ||
67 | typedef enum { | ||
68 | shareware, // DOOM 1 shareware, E1, M9 | ||
69 | registered, // DOOM 1 registered, E3, M27 | ||
70 | commercial, // DOOM 2 retail, E1 M34 (DOOM 2 german edition not handled) | ||
71 | retail, // DOOM 1 retail, E4, M36 | ||
72 | indetermined // Well, no IWAD found. | ||
73 | } GameMode_t; | ||
74 | |||
75 | // Mission packs - might be useful for TC stuff? | ||
76 | typedef enum { | ||
77 | doom, // DOOM 1 | ||
78 | doom2, // DOOM 2 | ||
79 | pack_tnt, // TNT mission pack | ||
80 | pack_plut, // Plutonia pack | ||
81 | none | ||
82 | } GameMission_t; | ||
83 | |||
84 | // Identify language to use, software localization. | ||
85 | typedef enum { | ||
86 | english, | ||
87 | french, | ||
88 | german, | ||
89 | unknown | ||
90 | } Language_t; | ||
91 | |||
92 | // | ||
93 | // For resize of screen, at start of game. | ||
94 | // | ||
95 | |||
96 | #define BASE_WIDTH 320 | ||
97 | |||
98 | // It is educational but futile to change this | ||
99 | // scaling e.g. to 2. Drawing of status bar, | ||
100 | // menues etc. is tied to the scale implied | ||
101 | // by the graphics. | ||
102 | |||
103 | #define INV_ASPECT_RATIO 0.625 /* 0.75, ideally */ | ||
104 | |||
105 | // killough 2/8/98: MAX versions for maximum screen sizes | ||
106 | // allows us to avoid the overhead of dynamic allocation | ||
107 | // when multiple screen sizes are supported | ||
108 | |||
109 | // proff 08/17/98: Changed for high-res | ||
110 | #define MAX_SCREENWIDTH 2048 | ||
111 | #define MAX_SCREENHEIGHT 1536 | ||
112 | |||
113 | // SCREENWIDTH and SCREENHEIGHT define the visible size | ||
114 | extern int SCREENWIDTH; | ||
115 | extern int SCREENHEIGHT; | ||
116 | // SCREENPITCH is the size of one line in the buffer and | ||
117 | // can be bigger than the SCREENWIDTH depending on the size | ||
118 | // of one pixel (8, 16 or 32 bit) and the padding at the | ||
119 | // end of the line caused by hardware considerations | ||
120 | extern int SCREENPITCH; | ||
121 | |||
122 | // The maximum number of players, multiplayer/networking. | ||
123 | #define MAXPLAYERS 4 | ||
124 | |||
125 | // phares 5/14/98: | ||
126 | // DOOM Editor Numbers (aka doomednum in mobj_t) | ||
127 | |||
128 | #define DEN_PLAYER5 4001 | ||
129 | #define DEN_PLAYER6 4002 | ||
130 | #define DEN_PLAYER7 4003 | ||
131 | #define DEN_PLAYER8 4004 | ||
132 | |||
133 | // State updates, number of tics / second. | ||
134 | #define TICRATE 35 | ||
135 | |||
136 | // The current state of the game: whether we are playing, gazing | ||
137 | // at the intermission screen, the game final animation, or a demo. | ||
138 | |||
139 | typedef enum { | ||
140 | GS_LEVEL, | ||
141 | GS_INTERMISSION, | ||
142 | GS_FINALE, | ||
143 | GS_DEMOSCREEN | ||
144 | } gamestate_t; | ||
145 | |||
146 | // | ||
147 | // Difficulty/skill settings/filters. | ||
148 | // | ||
149 | // These are Thing flags | ||
150 | |||
151 | // Skill flags. | ||
152 | #define MTF_EASY 1 | ||
153 | #define MTF_NORMAL 2 | ||
154 | #define MTF_HARD 4 | ||
155 | // Deaf monsters/do not react to sound. | ||
156 | #define MTF_AMBUSH 8 | ||
157 | |||
158 | /* killough 11/98 */ | ||
159 | #define MTF_NOTSINGLE 16 | ||
160 | #define MTF_NOTDM 32 | ||
161 | #define MTF_NOTCOOP 64 | ||
162 | #define MTF_FRIEND 128 | ||
163 | #define MTF_RESERVED 256 | ||
164 | |||
165 | typedef enum { | ||
166 | sk_none=-1, //jff 3/24/98 create unpicked skill setting | ||
167 | sk_baby=0, | ||
168 | sk_easy, | ||
169 | sk_medium, | ||
170 | sk_hard, | ||
171 | sk_nightmare | ||
172 | } skill_t; | ||
173 | |||
174 | // | ||
175 | // Key cards. | ||
176 | // | ||
177 | |||
178 | typedef enum { | ||
179 | it_bluecard, | ||
180 | it_yellowcard, | ||
181 | it_redcard, | ||
182 | it_blueskull, | ||
183 | it_yellowskull, | ||
184 | it_redskull, | ||
185 | NUMCARDS | ||
186 | } card_t; | ||
187 | |||
188 | // The defined weapons, including a marker | ||
189 | // indicating user has not changed weapon. | ||
190 | typedef enum { | ||
191 | wp_fist, | ||
192 | wp_pistol, | ||
193 | wp_shotgun, | ||
194 | wp_chaingun, | ||
195 | wp_missile, | ||
196 | wp_plasma, | ||
197 | wp_bfg, | ||
198 | wp_chainsaw, | ||
199 | wp_supershotgun, | ||
200 | |||
201 | NUMWEAPONS, | ||
202 | wp_nochange // No pending weapon change. | ||
203 | } weapontype_t; | ||
204 | |||
205 | // Ammunition types defined. | ||
206 | typedef enum { | ||
207 | am_clip, // Pistol / chaingun ammo. | ||
208 | am_shell, // Shotgun / double barreled shotgun. | ||
209 | am_cell, // Plasma rifle, BFG. | ||
210 | am_misl, // Missile launcher. | ||
211 | NUMAMMO, | ||
212 | am_noammo // Unlimited for chainsaw / fist. | ||
213 | } ammotype_t; | ||
214 | |||
215 | // Power up artifacts. | ||
216 | typedef enum { | ||
217 | pw_invulnerability, | ||
218 | pw_strength, | ||
219 | pw_invisibility, | ||
220 | pw_ironfeet, | ||
221 | pw_allmap, | ||
222 | pw_infrared, | ||
223 | NUMPOWERS | ||
224 | } powertype_t; | ||
225 | |||
226 | // Power up durations (how many seconds till expiration). | ||
227 | typedef enum { | ||
228 | INVULNTICS = (30*TICRATE), | ||
229 | INVISTICS = (60*TICRATE), | ||
230 | INFRATICS = (120*TICRATE), | ||
231 | IRONTICS = (60*TICRATE) | ||
232 | } powerduration_t; | ||
233 | |||
234 | // DOOM keyboard definition. | ||
235 | // This is the stuff configured by Setup.Exe. | ||
236 | // Most key data are simple ascii (uppercased). | ||
237 | |||
238 | #define KEYD_RIGHTARROW 0xae | ||
239 | #define KEYD_LEFTARROW 0xac | ||
240 | #define KEYD_UPARROW 0xad | ||
241 | #define KEYD_DOWNARROW 0xaf | ||
242 | #define KEYD_ESCAPE 27 | ||
243 | #define KEYD_ENTER 13 | ||
244 | #define KEYD_TAB 9 | ||
245 | #define KEYD_F1 (0x80+0x3b) | ||
246 | #define KEYD_F2 (0x80+0x3c) | ||
247 | #define KEYD_F3 (0x80+0x3d) | ||
248 | #define KEYD_F4 (0x80+0x3e) | ||
249 | #define KEYD_F5 (0x80+0x3f) | ||
250 | #define KEYD_F6 (0x80+0x40) | ||
251 | #define KEYD_F7 (0x80+0x41) | ||
252 | #define KEYD_F8 (0x80+0x42) | ||
253 | #define KEYD_F9 (0x80+0x43) | ||
254 | #define KEYD_F10 (0x80+0x44) | ||
255 | #define KEYD_F11 (0x80+0x57) | ||
256 | #define KEYD_F12 (0x80+0x58) | ||
257 | #define KEYD_BACKSPACE 127 | ||
258 | #define KEYD_PAUSE 0xff | ||
259 | #define KEYD_EQUALS 0x3d | ||
260 | #define KEYD_MINUS 0x2d | ||
261 | #define KEYD_RSHIFT (0x80+0x36) | ||
262 | #define KEYD_RCTRL (0x80+0x1d) | ||
263 | #define KEYD_RALT (0x80+0x38) | ||
264 | #define KEYD_LALT KEYD_RALT | ||
265 | #define KEYD_CAPSLOCK 0xba // phares | ||
266 | |||
267 | // phares 3/2/98: | ||
268 | #define KEYD_INSERT 0xd2 | ||
269 | #define KEYD_HOME 0xc7 | ||
270 | #define KEYD_PAGEUP 0xc9 | ||
271 | #define KEYD_PAGEDOWN 0xd1 | ||
272 | #define KEYD_DEL 0xc8 | ||
273 | #define KEYD_END 0xcf | ||
274 | #define KEYD_SCROLLLOCK 0xc6 | ||
275 | #define KEYD_SPACEBAR 0x20 | ||
276 | // phares 3/2/98 | ||
277 | |||
278 | #define KEYD_NUMLOCK 0xC5 // killough 3/6/98 | ||
279 | |||
280 | // cph - Add the numeric keypad keys, as suggested by krose 4/22/99: | ||
281 | // The way numbers are assigned to keys is a mess, but it's too late to | ||
282 | // change that easily. At least these additions are don neatly. | ||
283 | // Codes 0x100-0x200 are reserved for number pad | ||
284 | |||
285 | #define KEYD_KEYPAD0 (0x100 + '0') | ||
286 | #define KEYD_KEYPAD1 (0x100 + '1') | ||
287 | #define KEYD_KEYPAD2 (0x100 + '2') | ||
288 | #define KEYD_KEYPAD3 (0x100 + '3') | ||
289 | #define KEYD_KEYPAD4 (0x100 + '4') | ||
290 | #define KEYD_KEYPAD5 (0x100 + '5') | ||
291 | #define KEYD_KEYPAD6 (0x100 + '6') | ||
292 | #define KEYD_KEYPAD7 (0x100 + '7') | ||
293 | #define KEYD_KEYPAD8 (0x100 + '8') | ||
294 | #define KEYD_KEYPAD9 (0x100 + '9') | ||
295 | #define KEYD_KEYPADENTER (0x100 + KEYD_ENTER) | ||
296 | #define KEYD_KEYPADDIVIDE (0x100 + '/') | ||
297 | #define KEYD_KEYPADMULTIPLY (0x100 + '*') | ||
298 | #define KEYD_KEYPADMINUS (0x100 + '-') | ||
299 | #define KEYD_KEYPADPLUS (0x100 + '+') | ||
300 | #define KEYD_KEYPADPERIOD (0x100 + '.') | ||
301 | |||
302 | // phares 4/19/98: | ||
303 | // Defines Setup Screen groups that config variables appear in. | ||
304 | // Used when resetting the defaults for every item in a Setup group. | ||
305 | |||
306 | typedef enum { | ||
307 | ss_none, | ||
308 | ss_keys, | ||
309 | ss_weap, | ||
310 | ss_stat, | ||
311 | ss_auto, | ||
312 | ss_enem, | ||
313 | ss_mess, | ||
314 | ss_chat, | ||
315 | ss_gen, /* killough 10/98 */ | ||
316 | ss_comp, /* killough 10/98 */ | ||
317 | ss_max | ||
318 | } ss_types; | ||
319 | |||
320 | // phares 3/20/98: | ||
321 | // | ||
322 | // Player friction is variable, based on controlling | ||
323 | // linedefs. More friction can create mud, sludge, | ||
324 | // magnetized floors, etc. Less friction can create ice. | ||
325 | |||
326 | #define MORE_FRICTION_MOMENTUM 15000 // mud factor based on momentum | ||
327 | #define ORIG_FRICTION 0xE800 // original value | ||
328 | #define ORIG_FRICTION_FACTOR 2048 // original value | ||
329 | |||
330 | #endif // __DOOMDEF__ | ||