aboutsummaryrefslogtreecommitdiff
path: root/src/doomdef.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/doomdef.h')
-rw-r--r--src/doomdef.h330
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.
67typedef 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?
76typedef 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.
85typedef 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
114extern int SCREENWIDTH;
115extern 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
120extern 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
139typedef 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
165typedef 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
178typedef 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.
190typedef 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.
206typedef 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.
216typedef 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).
227typedef 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
306typedef 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__