123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- /* Emacs style mode select -*- C++ -*-
- *-----------------------------------------------------------------------------
- *
- *
- * PrBoom: a Doom port merged with LxDoom and LSDLDoom
- * based on BOOM, a modified and improved DOOM engine
- * Copyright (C) 1999 by
- * id Software, Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman
- * Copyright (C) 1999-2000 by
- * Jess Haas, Nicolas Kalkhof, Colin Phipps, Florian Schulze
- * Copyright 2005, 2006 by
- * Florian Schulze, Colin Phipps, Neil Stevens, Andrey Budko
- *
- * 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.
- *
- * DESCRIPTION:
- * Internally used data structures for virtually everything,
- * key definitions, lots of other stuff.
- *
- *-----------------------------------------------------------------------------*/
- #ifndef __DOOMDEF__
- #define __DOOMDEF__
- /* use config.h if autoconf made one -- josh */
- #ifdef HAVE_CONFIG_H
- #include "config.h"
- #endif
- // killough 4/25/98: Make gcc extensions mean nothing on other compilers
- #ifndef __GNUC__
- #define __attribute__(x)
- #endif
- // This must come first, since it redefines malloc(), free(), etc. -- killough:
- #include "z_zone.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #include <limits.h>
- // this should go here, not in makefile/configure.ac -- josh
- #ifndef O_BINARY
- #define O_BINARY 0
- #endif
- #include "m_swap.h"
- #include "version.h"
- // Game mode handling - identify IWAD version
- // to handle IWAD dependend animations etc.
- typedef enum {
- shareware, // DOOM 1 shareware, E1, M9
- registered, // DOOM 1 registered, E3, M27
- commercial, // DOOM 2 retail, E1 M34 (DOOM 2 german edition not handled)
- retail, // DOOM 1 retail, E4, M36
- indetermined // Well, no IWAD found.
- } GameMode_t;
- // Mission packs - might be useful for TC stuff?
- typedef enum {
- doom, // DOOM 1
- doom2, // DOOM 2
- pack_tnt, // TNT mission pack
- pack_plut, // Plutonia pack
- none
- } GameMission_t;
- // Identify language to use, software localization.
- typedef enum {
- english,
- french,
- german,
- unknown
- } Language_t;
- //
- // For resize of screen, at start of game.
- //
- #define BASE_WIDTH 320
- // It is educational but futile to change this
- // scaling e.g. to 2. Drawing of status bar,
- // menues etc. is tied to the scale implied
- // by the graphics.
- #define INV_ASPECT_RATIO 0.625 /* 0.75, ideally */
- // killough 2/8/98: MAX versions for maximum screen sizes
- // allows us to avoid the overhead of dynamic allocation
- // when multiple screen sizes are supported
- // proff 08/17/98: Changed for high-res
- #define MAX_SCREENWIDTH 2048
- #define MAX_SCREENHEIGHT 1536
- // SCREENWIDTH and SCREENHEIGHT define the visible size
- extern int SCREENWIDTH;
- extern int SCREENHEIGHT;
- // SCREENPITCH is the size of one line in the buffer and
- // can be bigger than the SCREENWIDTH depending on the size
- // of one pixel (8, 16 or 32 bit) and the padding at the
- // end of the line caused by hardware considerations
- extern int SCREENPITCH;
- // The maximum number of players, multiplayer/networking.
- #define MAXPLAYERS 4
- // phares 5/14/98:
- // DOOM Editor Numbers (aka doomednum in mobj_t)
- #define DEN_PLAYER5 4001
- #define DEN_PLAYER6 4002
- #define DEN_PLAYER7 4003
- #define DEN_PLAYER8 4004
- // State updates, number of tics / second.
- #define TICRATE 35
- // The current state of the game: whether we are playing, gazing
- // at the intermission screen, the game final animation, or a demo.
- typedef enum {
- GS_LEVEL,
- GS_INTERMISSION,
- GS_FINALE,
- GS_DEMOSCREEN
- } gamestate_t;
- //
- // Difficulty/skill settings/filters.
- //
- // These are Thing flags
- // Skill flags.
- #define MTF_EASY 1
- #define MTF_NORMAL 2
- #define MTF_HARD 4
- // Deaf monsters/do not react to sound.
- #define MTF_AMBUSH 8
- /* killough 11/98 */
- #define MTF_NOTSINGLE 16
- #define MTF_NOTDM 32
- #define MTF_NOTCOOP 64
- #define MTF_FRIEND 128
- #define MTF_RESERVED 256
- typedef enum {
- sk_none=-1, //jff 3/24/98 create unpicked skill setting
- sk_baby=0,
- sk_easy,
- sk_medium,
- sk_hard,
- sk_nightmare
- } skill_t;
- //
- // Key cards.
- //
- typedef enum {
- it_bluecard,
- it_yellowcard,
- it_redcard,
- it_blueskull,
- it_yellowskull,
- it_redskull,
- NUMCARDS
- } card_t;
- // The defined weapons, including a marker
- // indicating user has not changed weapon.
- typedef enum {
- wp_fist,
- wp_pistol,
- wp_shotgun,
- wp_chaingun,
- wp_missile,
- wp_plasma,
- wp_bfg,
- wp_chainsaw,
- wp_supershotgun,
- NUMWEAPONS,
- wp_nochange // No pending weapon change.
- } weapontype_t;
- // Ammunition types defined.
- typedef enum {
- am_clip, // Pistol / chaingun ammo.
- am_shell, // Shotgun / double barreled shotgun.
- am_cell, // Plasma rifle, BFG.
- am_misl, // Missile launcher.
- NUMAMMO,
- am_noammo // Unlimited for chainsaw / fist.
- } ammotype_t;
- // Power up artifacts.
- typedef enum {
- pw_invulnerability,
- pw_strength,
- pw_invisibility,
- pw_ironfeet,
- pw_allmap,
- pw_infrared,
- NUMPOWERS
- } powertype_t;
- // Power up durations (how many seconds till expiration).
- typedef enum {
- INVULNTICS = (30*TICRATE),
- INVISTICS = (60*TICRATE),
- INFRATICS = (120*TICRATE),
- IRONTICS = (60*TICRATE)
- } powerduration_t;
- // DOOM keyboard definition.
- // This is the stuff configured by Setup.Exe.
- // Most key data are simple ascii (uppercased).
- #define KEYD_RIGHTARROW 0xae
- #define KEYD_LEFTARROW 0xac
- #define KEYD_UPARROW 0xad
- #define KEYD_DOWNARROW 0xaf
- #define KEYD_ESCAPE 27
- #define KEYD_ENTER 13
- #define KEYD_TAB 9
- #define KEYD_F1 (0x80+0x3b)
- #define KEYD_F2 (0x80+0x3c)
- #define KEYD_F3 (0x80+0x3d)
- #define KEYD_F4 (0x80+0x3e)
- #define KEYD_F5 (0x80+0x3f)
- #define KEYD_F6 (0x80+0x40)
- #define KEYD_F7 (0x80+0x41)
- #define KEYD_F8 (0x80+0x42)
- #define KEYD_F9 (0x80+0x43)
- #define KEYD_F10 (0x80+0x44)
- #define KEYD_F11 (0x80+0x57)
- #define KEYD_F12 (0x80+0x58)
- #define KEYD_BACKSPACE 127
- #define KEYD_PAUSE 0xff
- #define KEYD_EQUALS 0x3d
- #define KEYD_MINUS 0x2d
- #define KEYD_RSHIFT (0x80+0x36)
- #define KEYD_RCTRL (0x80+0x1d)
- #define KEYD_RALT (0x80+0x38)
- #define KEYD_LALT KEYD_RALT
- #define KEYD_CAPSLOCK 0xba // phares
- // phares 3/2/98:
- #define KEYD_INSERT 0xd2
- #define KEYD_HOME 0xc7
- #define KEYD_PAGEUP 0xc9
- #define KEYD_PAGEDOWN 0xd1
- #define KEYD_DEL 0xc8
- #define KEYD_END 0xcf
- #define KEYD_SCROLLLOCK 0xc6
- #define KEYD_SPACEBAR 0x20
- // phares 3/2/98
- #define KEYD_NUMLOCK 0xC5 // killough 3/6/98
- // cph - Add the numeric keypad keys, as suggested by krose 4/22/99:
- // The way numbers are assigned to keys is a mess, but it's too late to
- // change that easily. At least these additions are don neatly.
- // Codes 0x100-0x200 are reserved for number pad
- #define KEYD_KEYPAD0 (0x100 + '0')
- #define KEYD_KEYPAD1 (0x100 + '1')
- #define KEYD_KEYPAD2 (0x100 + '2')
- #define KEYD_KEYPAD3 (0x100 + '3')
- #define KEYD_KEYPAD4 (0x100 + '4')
- #define KEYD_KEYPAD5 (0x100 + '5')
- #define KEYD_KEYPAD6 (0x100 + '6')
- #define KEYD_KEYPAD7 (0x100 + '7')
- #define KEYD_KEYPAD8 (0x100 + '8')
- #define KEYD_KEYPAD9 (0x100 + '9')
- #define KEYD_KEYPADENTER (0x100 + KEYD_ENTER)
- #define KEYD_KEYPADDIVIDE (0x100 + '/')
- #define KEYD_KEYPADMULTIPLY (0x100 + '*')
- #define KEYD_KEYPADMINUS (0x100 + '-')
- #define KEYD_KEYPADPLUS (0x100 + '+')
- #define KEYD_KEYPADPERIOD (0x100 + '.')
- // phares 4/19/98:
- // Defines Setup Screen groups that config variables appear in.
- // Used when resetting the defaults for every item in a Setup group.
- typedef enum {
- ss_none,
- ss_keys,
- ss_weap,
- ss_stat,
- ss_auto,
- ss_enem,
- ss_mess,
- ss_chat,
- ss_gen, /* killough 10/98 */
- ss_comp, /* killough 10/98 */
- ss_max
- } ss_types;
- // phares 3/20/98:
- //
- // Player friction is variable, based on controlling
- // linedefs. More friction can create mud, sludge,
- // magnetized floors, etc. Less friction can create ice.
- #define MORE_FRICTION_MOMENTUM 15000 // mud factor based on momentum
- #define ORIG_FRICTION 0xE800 // original value
- #define ORIG_FRICTION_FACTOR 2048 // original value
- #endif // __DOOMDEF__
|