rockbox/apps/plugins/doom/doomdef.h
Aidan MacDonald 237919f1c3 Fix invalid use of bool in doom
Settings code tries to cast the bool pointer to an int pointer
and then write through it, which makes AddressSanitizer whine.

Change-Id: I1d6162fc98144cd6b40444016b3b48ef02967324
2021-05-13 18:33:27 +01:00

328 lines
8.6 KiB
C++

/* 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
*
* 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__
#include "rockmacros.h"
// killough 4/25/98: Make gcc extensions mean nothing on other compilers
#ifndef __GNUC__
#define __attribute__(x)
#endif
//
// Global parameters/defines.
//
// DOOM version
enum { DVERSION = 110 };
// Game mode handling - identify IWAD version
// to handle IWAD dependend animations etc.
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.
};
typedef unsigned GameMode_t;
// Mission packs - might be useful for TC stuff?
enum {
doom, // DOOM 1
doom2, // DOOM 2
pack_tnt, // TNT mission pack
pack_plut, // Plutonia pack
none
};
typedef unsigned GameMission_t;
// Identify language to use, software localization.
enum {
english,
french,
german,
unknown
};
typedef unsigned 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
#if(LCD_HEIGHT>LCD_WIDTH)
extern int rotate_screen;
// proff 08/17/98: Changed for high-res
#define MAX_SCREENWIDTH LCD_HEIGHT
#define MAX_SCREENHEIGHT LCD_HEIGHT
extern int SCREENWIDTH;
extern int SCREENHEIGHT;
#else
// proff 08/17/98: Changed for high-res
#define MAX_SCREENWIDTH LCD_WIDTH
#define MAX_SCREENHEIGHT LCD_HEIGHT
#define SCREENWIDTH LCD_WIDTH
#define SCREENHEIGHT LCD_HEIGHT
#endif
// 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.
enum {
GS_LEVEL,
GS_INTERMISSION,
GS_FINALE,
GS_DEMOSCREEN
};
typedef unsigned gamestate_t;
//
// Difficulty/skill settings/filters.
//
// 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
enum {
sk_none=-1, //jff 3/24/98 create unpicked skill setting
sk_baby=0,
sk_easy,
sk_medium,
sk_hard,
sk_nightmare
};
typedef int skill_t;
//
// Key cards.
//
enum {
it_bluecard,
it_yellowcard,
it_redcard,
it_blueskull,
it_yellowskull,
it_redskull,
NUMCARDS
};
typedef unsigned card_t;
// The defined weapons, including a marker
// indicating user has not changed weapon.
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.
};
typedef unsigned weapontype_t;
// Ammunition types defined.
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.
};
typedef unsigned ammotype_t;
// Power up artifacts.
enum {
pw_invulnerability,
pw_strength,
pw_invisibility,
pw_ironfeet,
pw_allmap,
pw_infrared,
NUMPOWERS
};
typedef unsigned powertype_t;
// Power up durations (how many seconds till expiration).
enum {
INVULNTICS = (30*TICRATE),
INVISTICS = (60*TICRATE),
INFRATICS = (120*TICRATE),
IRONTICS = (60*TICRATE)
};
typedef unsigned powerduration_t;
//
// DOOM keyboard definition.
// This is the stuff configured by Setup.Exe.
// Most key data are simple ascii (uppercased).
//
#define KEY_RIGHTARROW 0xae
#define KEY_LEFTARROW 0xac
#define KEY_UPARROW 0xad
#define KEY_DOWNARROW 0xaf
#define KEY_ESCAPE 0x1B
#define KEY_ENTER 0x60 // Changed due to button reconfig - 0x0D
#define KEY_TAB 0x61 // Changed due to button reconfig - 0x09
#define KEY_F1 (0x80+0x3b)
#define KEY_F2 (0x80+0x3c)
#define KEY_F3 (0x80+0x3d)
#define KEY_F4 (0x80+0x3e)
#define KEY_F5 (0x80+0x3f)
#define KEY_F6 (0x80+0x40)
#define KEY_F7 (0x80+0x41)
#define KEY_F8 (0x80+0x42)
#define KEY_F9 (0x80+0x43)
#define KEY_F10 (0x80+0x44)
#define KEY_F11 (0x80+0x57)
#define KEY_F12 (0x80+0x58)
#define KEY_BACKSPACE 0x7F
#define KEY_PAUSE 0xff
#define KEY_EQUALS 0x3d
#define KEY_MINUS 0x2d
#define KEY_RSHIFT (0x80+0x36)
#define KEY_RCTRL (0x80+0x1d)
#define KEY_RALT (0x80+0x38)
#define KEY_LALT KEY_RALT
#define KEY_CAPSLOCK 0xba // phares
// phares 3/2/98:
#define KEY_INSERT 0xd2
#define KEY_HOME 0xc7
#define KEY_PAGEUP 0xc9
#define KEY_PAGEDOWN 0xd1
#define KEY_DEL 0xc8
#define KEY_END 0xcf
#define KEY_SCROLLLOCK 0xc6
#define KEY_SPACEBAR 0x20
// phares 3/2/98
#define KEY_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 KEY_KEYPAD0 (0x100 + '0')
#define KEY_KEYPAD1 (0x100 + '1')
#define KEY_KEYPAD2 (0x100 + '2')
#define KEY_KEYPAD3 (0x100 + '3')
#define KEY_KEYPAD4 (0x100 + '4')
#define KEY_KEYPAD5 (0x100 + '5')
#define KEY_KEYPAD6 (0x100 + '6')
#define KEY_KEYPAD7 (0x100 + '7')
#define KEY_KEYPAD8 (0x100 + '8')
#define KEY_KEYPAD9 (0x100 + '9')
#define KEY_KEYPADENTER (0x100 + KEY_ENTER)
#define KEY_KEYPADDIVIDE (0x100 + '/')
#define KEY_KEYPADMULTIPLY (0x100 + '*')
#define KEY_KEYPADMINUS (0x100 + '-')
#define KEY_KEYPADPLUS (0x100 + '+')
#define KEY_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.
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
};
typedef unsigned 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__