// Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // // Copyright(C) 1993-1996 Id Software, Inc. // Copyright(C) 2005 Simon Howard // // 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, // lots of other stuff. // //----------------------------------------------------------------------------- #ifndef __DOOMDEF__ #define __DOOMDEF__ // #define macros to provide functions missing in Windows. // Outside Windows, we use strings.h for str[n]casecmp. #ifdef _WIN32 #define snprintf _snprintf #define vsnprintf _vsnprintf #define strcasecmp stricmp #define strncasecmp strnicmp #else #include #endif // // The packed attribute forces structures to be packed into the minimum // space necessary. If this is not done, the compiler may align structure // fields differently to optimize memory access, inflating the overall // structure size. It is important to use the packed attribute on certain // structures where alignment is important, particularly data read/written // to disk. // #ifdef __GNUC__ #define PACKEDATTR __attribute__((packed)) #else #define PACKEDATTR #endif // // Global parameters/defines. // // DOOM version #define DOOM_VERSION 109 // Version code for cph's longtics hack ("v1.91") #define DOOM_191_VERSION 111 // 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; // What version are we emulating? typedef enum { exe_doom_1_9, // Doom 1.9: used for shareware, registered and commercial exe_hacx, // Hacx executable (Doom 1.9 with patch applied) exe_ultimate, // Ultimate Doom (retail) exe_final, // Final Doom exe_final2, // Final Doom (alternate exe) exe_chex, // Chex Quest executable (based on Final Doom) } GameVersion_t; // If rangecheck is undefined, // most parameter validation debugging code will not be compiled #define RANGECHECK // Screen width and height. #define SCREENWIDTH 320 #define SCREENHEIGHT 200 // Screen width used for "squash" scale functions #define SCREENWIDTH_4_3 256 // Screen height used for "stretch" scale functions. #define SCREENHEIGHT_4_3 240 // The maximum number of players, multiplayer/networking. #define MAXPLAYERS 4 // 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. // // 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 typedef enum { sk_noitems = -1, // the "-skill 0" hack 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, // No pending weapon change. wp_nochange } 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, // assuming TICRATE is 35 ticks/second. // typedef enum { INVULNTICS = (30*TICRATE), INVISTICS = (60*TICRATE), INFRATICS = (120*TICRATE), IRONTICS = (60*TICRATE) } powerduration_t; #endif // __DOOMDEF__