mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-11-30 15:41:30 +00:00
259 lines
5.5 KiB
C
259 lines
5.5 KiB
C
|
// 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 <strings.h>
|
||
|
|
||
|
#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__
|