doomstat.h 24.2 KB
Newer Older
Alam Ed Arias committed
1 2 3 4
// SONIC ROBO BLAST 2
//-----------------------------------------------------------------------------
// Copyright (C) 1993-1996 by id Software, Inc.
// Copyright (C) 1998-2000 by DooM Legacy Team.
James R. committed
5
// Copyright (C) 1999-2020 by Sonic Team Junior.
Alam Ed Arias committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
//
// This program is free software distributed under the
// terms of the GNU General Public License, version 2.
// See the 'LICENSE' file for more details.
//-----------------------------------------------------------------------------
/// \file  doomstat.h
/// \brief All the global variables that store the internal state.
///
///        Theoretically speaking, the internal state of the engine
///        should be found by looking at the variables collected
///        here, and every relevant module will have to include
///        this header file. In practice... things are a bit messy.

#ifndef __DOOMSTAT__
#define __DOOMSTAT__

// We need globally shared data structures, for defining the global state variables.
#include "doomdata.h"

// We need the player data structure as well.
#include "d_player.h"

// =============================
// Selected map etc.
// =============================

// Selected by user.
extern INT16 gamemap;
34 35
extern char mapmusname[7];
extern UINT16 mapmusflags;
36
extern UINT32 mapmusposition;
37 38
#define MUSIC_TRACKMASK   0x0FFF // ----************
#define MUSIC_RELOADRESET 0x8000 // *---------------
39
#define MUSIC_FORCERESET  0x4000 // -*--------------
40
// Use other bits if necessary.
Alam Ed Arias committed
41

42
extern UINT32 maptol;
Alam Ed Arias committed
43 44 45
extern UINT8 globalweather;
extern INT32 curWeather;
extern INT32 cursaveslot;
Sal committed
46
//extern INT16 lastmapsaved;
47
extern INT16 lastmaploaded;
48 49 50 51 52 53 54
extern UINT8 gamecomplete;

// Extra abilities/settings for skins (combinable stuff)
typedef enum
{
	MA_RUNNING     = 1,    // In action
	MA_INIT        = 1<<1, // Initialisation
55 56
	MA_NOCUTSCENES = 1<<2, // No cutscenes
	MA_INGAME      = 1<<3  // Timer ignores loads
57 58 59 60
} marathonmode_t;

extern marathonmode_t marathonmode;
extern tic_t marathontime;
Alam Ed Arias committed
61

62 63 64 65
#define maxgameovers 13
extern UINT8 numgameovers;
extern SINT8 startinglivesbalance[maxgameovers+1];

Alam Ed Arias committed
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
#define PRECIP_NONE  0
#define PRECIP_STORM 1
#define PRECIP_SNOW  2
#define PRECIP_RAIN  3
#define PRECIP_BLANK 4
#define PRECIP_STORM_NORAIN 5
#define PRECIP_STORM_NOSTRIKES 6

// Set if homebrew PWAD stuff has been added.
extern boolean modifiedgame;
extern UINT16 mainwads;
extern boolean savemoddata; // This mod saves time/emblem data.
extern boolean disableSpeedAdjust; // Don't alter the duration of player states if true
extern boolean imcontinuing; // Temporary flag while continuing
extern boolean metalrecording;

#define ATTACKING_NONE   0
#define ATTACKING_RECORD 1
#define ATTACKING_NIGHTS 2
extern UINT8 modeattacking;

// menu demo things
extern UINT8  numDemos;
extern UINT32 demoDelayTime;
extern UINT32 demoIdleTime;

// Netgame? only true in a netgame
extern boolean netgame;
extern boolean addedtogame; // true after the server has added you
// Only true if >1 player. netgame => multiplayer but not (multiplayer=>netgame)
extern boolean multiplayer;

extern INT16 gametype;
99
extern UINT32 gametyperules;
100
extern INT16 gametypecount;
Jaime Ita Passos committed
101

Alam Ed Arias committed
102 103 104 105 106 107 108 109
extern boolean splitscreen;
extern boolean circuitmap; // Does this level have 'circuit mode'?
extern boolean fromlevelselect;

// ========================================
// Internal parameters for sound rendering.
// ========================================

110
extern boolean midi_disabled;
Alam Ed Arias committed
111 112 113 114 115 116 117 118 119 120
extern boolean sound_disabled;
extern boolean digital_disabled;

// =========================
// Status flags for refresh.
// =========================
//

extern boolean menuactive; // Menu overlaid?
extern UINT8 paused; // Game paused?
Alam Ed Arias committed
121
extern UINT8 window_notinfocus; // are we in focus? (backend independant -- handles auto pausing and display of "focus lost" message)
Alam Ed Arias committed
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141

extern boolean nodrawers;
extern boolean noblit;
extern boolean lastdraw;
extern postimg_t postimgtype;
extern INT32 postimgparam;
extern postimg_t postimgtype2;
extern INT32 postimgparam2;

extern INT32 viewwindowx, viewwindowy;
extern INT32 viewwidth, scaledviewwidth;

extern boolean gamedataloaded;

// Player taking events, and displaying.
extern INT32 consoleplayer;
extern INT32 displayplayer;
extern INT32 secondarydisplayplayer; // for splitscreen

// Maps of special importance
142
extern INT16 spstage_start, spmarathon_start;
143
extern INT16 sstage_start, sstage_end, smpstage_start, smpstage_end;
Alam Ed Arias committed
144

145 146
extern INT16 titlemap;
extern boolean hidetitlepics;
147
extern INT16 bootmap; //bootmap for loading a map on startup
148

149 150
extern INT16 tutorialmap; // map to load for tutorial
extern boolean tutorialmode; // are we in a tutorial right now?
151
extern INT32 tutorialgcs; // which control scheme is loaded?
152 153 154
extern INT32 tutorialusemouse; // store cv_usemouse user value
extern INT32 tutorialfreelook; // store cv_alwaysfreelook user value
extern INT32 tutorialmousemove; // store cv_mousemove user value
155
extern INT32 tutorialanalog; // store cv_analog[0] user value
156

Alam Ed Arias committed
157 158 159
extern boolean looptitle;

// CTF colors.
160
extern UINT16 skincolor_redteam, skincolor_blueteam, skincolor_redring, skincolor_bluering;
Alam Ed Arias committed
161 162 163

extern tic_t countdowntimer;
extern boolean countdowntimeup;
164
extern boolean exitfadestarted;
Alam Ed Arias committed
165 166 167 168 169 170 171 172 173 174 175 176 177 178

typedef struct
{
	UINT8 numpics;
	char picname[8][8];
	UINT8 pichires[8];
	char *text;
	UINT16 xcoord[8];
	UINT16 ycoord[8];
	UINT16 picduration[8];
	UINT8 musicloop;
	UINT16 textxpos;
	UINT16 textypos;

179 180
	char   musswitch[7];
	UINT16 musswitchflags;
181
	UINT32 musswitchposition;
182

Alam Ed Arias committed
183 184 185 186 187 188 189 190 191 192 193 194 195
	UINT8 fadecolor; // Color number for fade, 0 means don't do the first fade
	UINT8 fadeinid;  // ID of the first fade, to a color -- ignored if fadecolor is 0
	UINT8 fadeoutid; // ID of the second fade, to the new screen
} scene_t; // TODO: It would probably behoove us to implement subsong/track selection here, too, but I'm lazy -SH

typedef struct
{
	scene_t scene[128]; // 128 scenes per cutscene.
	INT32 numscenes; // Number of scenes in this cutscene
} cutscene_t;

extern cutscene_t *cutscenes[128];

196 197 198 199 200
// Reserve prompt space for tutorials
#define TUTORIAL_PROMPT 201 // one-based
#define TUTORIAL_AREAS 6
#define TUTORIAL_AREA_PROMPTS 5
#define MAX_PROMPTS (TUTORIAL_PROMPT+TUTORIAL_AREAS*TUTORIAL_AREA_PROMPTS*3) // 3 control modes
201 202
#define MAX_PAGES 128

203 204 205 206
#define PROMPT_PIC_PERSIST 0
#define PROMPT_PIC_LOOP 1
#define PROMPT_PIC_DESTROY 2
#define MAX_PROMPT_PICS 8
207 208
typedef struct
{
Marco Z committed
209
	UINT8 numpics;
210 211
	UINT8 picmode; // sequence mode after displaying last pic, 0 = persist, 1 = loop, 2 = destroy
	UINT8 pictoloop; // if picmode == loop, which pic to loop to?
212
	UINT8 pictostart; // initial pic number to show
213 214 215 216 217
	char picname[MAX_PROMPT_PICS][8];
	UINT8 pichires[MAX_PROMPT_PICS];
	UINT16 xcoord[MAX_PROMPT_PICS]; // gfx
	UINT16 ycoord[MAX_PROMPT_PICS]; // gfx
	UINT16 picduration[MAX_PROMPT_PICS];
Marco Z committed
218 219 220 221 222

	char   musswitch[7];
	UINT16 musswitchflags;
	UINT8 musicloop;

223 224
	char tag[33]; // page tag
	char name[34]; // narrator name, extra char for color
225 226
	char iconname[8]; // narrator icon lump
	boolean rightside; // narrator side, false = left, true = right
227
	boolean iconflip; // narrator flip icon horizontally
Marco Z committed
228
	UINT8 hidehud; // hide hud, 0 = show all, 1 = hide depending on prompt position (top/bottom), 2 = hide all
229
	UINT8 lines; // # of lines to show. If name is specified, name takes one of the lines. If 0, defaults to 4.
230
	INT32 backcolor; // see CON_SetupBackColormap: 0-11, INT32_MAX for user-defined (CONS_BACKCOLOR)
231 232
	UINT8 align; // text alignment, 0 = left, 1 = right, 2 = center
	UINT8 verticalalign; // vertical text alignment, 0 = top, 1 = bottom, 2 = middle
233
	UINT8 textspeed; // text speed, delay in tics between characters.
234
	sfxenum_t textsfx; // sfx_ id for printing text
235 236
	UINT8 nextprompt; // next prompt to jump to, one-based. 0 = current prompt
	UINT8 nextpage; // next page to jump to, one-based. 0 = next page within prompt->numpages
Marco Z committed
237
	char nexttag[33]; // next tag to jump to. If set, this overrides nextprompt and nextpage.
238
	INT32 timetonext; // time in tics to jump to next page automatically. 0 = don't jump automatically
239 240 241 242 243
	char *text;
} textpage_t;

typedef struct
{
244
	textpage_t page[MAX_PAGES];
245 246 247
	INT32 numpages; // Number of pages in this prompt
} textprompt_t;

248
extern textprompt_t *textprompts[MAX_PROMPTS];
249

Alam Ed Arias committed
250 251
// For the Custom Exit linedef.
extern INT16 nextmapoverride;
252
extern UINT8 skipstats;
Alam Ed Arias committed
253

toaster committed
254
extern UINT32 ssspheres; //  Total # of spheres in a level
Alam Ed Arias committed
255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285

// Fun extra stuff
extern INT16 lastmap; // Last level you were at (returning from special stages).
extern mobj_t *redflag, *blueflag; // Pointers to physical flags
extern mapthing_t *rflagpoint, *bflagpoint; // Pointers to the flag spawn locations
#define GF_REDFLAG 1
#define GF_BLUEFLAG 2

// A single point in space.
typedef struct
{
	fixed_t x, y, z;
} mappoint_t;

extern struct quake
{
	// camera offsets and duration
	fixed_t x,y,z;
	UINT16 time;

	// location, radius, and intensity...
	mappoint_t *epicenter;
	fixed_t radius, intensity;
} quake;

// NiGHTS grades
typedef struct
{
	UINT32 grade[6]; // D, C, B, A, S, X (F: failed to reach any of these)
} nightsgrades_t;

Alam Ed Arias committed
286 287 288 289 290 291 292 293
// Custom Lua values
// (This is not ifdeffed so the map header structure can stay identical, just in case.)
typedef struct
{
	char option[32]; // 31 usable characters
	char value[256]; // 255 usable characters. If this seriously isn't enough then wtf.
} customoption_t;

Alam Ed Arias committed
294 295 296 297 298 299 300 301
/** Map header information.
  */
typedef struct
{
	// The original eight, plus one.
	char lvlttl[22];       ///< Level name without "Zone". (21 character limit instead of 32, 21 characters can display on screen max anyway)
	char subttl[33];       ///< Subtitle for level
	UINT8 actnum;          ///< Act number or 0 for none.
Jaime Ita Passos committed
302
	UINT32 typeoflevel;    ///< Combination of typeoflevel flags.
Alam Ed Arias committed
303
	INT16 nextlevel;       ///< Map number of next level, or 1100-1102 to end.
304
	INT16 marathonnext;    ///< See nextlevel, but for Marathon mode. Necessary to support hub worlds ala SUGOI.
James R. committed
305
	char keywords[33];     ///< Keywords separated by space to search for. 32 characters.
306 307
	char musname[7];       ///< Music track to play. "" for no music.
	UINT16 mustrack;       ///< Subsong to play. Only really relevant for music modules and specific formats supported by GME. 0 to ignore.
308
	UINT32 muspos;    ///< Music position to jump to.
Alam Ed Arias committed
309 310 311 312 313 314 315 316 317 318 319 320 321 322 323
	char forcecharacter[17];  ///< (SKINNAMESIZE+1) Skin to switch to or "" to disable.
	UINT8 weather;         ///< 0 = sunny day, 1 = storm, 2 = snow, 3 = rain, 4 = blank, 5 = thunder w/o rain, 6 = rain w/o lightning, 7 = heat wave.
	INT16 skynum;          ///< Sky number to use.
	INT16 skybox_scalex;   ///< Skybox X axis scale. (0 = no movement, 1 = 1:1 movement, 16 = 16:1 slow movement, -4 = 1:4 fast movement, etc.)
	INT16 skybox_scaley;   ///< Skybox Y axis scale.
	INT16 skybox_scalez;   ///< Skybox Z axis scale.

	// Extra information.
	char interscreen[8];  ///< 320x200 patch to display at intermission.
	char runsoc[33];      ///< SOC to execute at start of level (32 character limit instead of 63)
	char scriptname[33];  ///< Script to use when the map is switched to. (32 character limit instead of 191)
	UINT8 precutscenenum; ///< Cutscene number to play BEFORE a level starts.
	UINT8 cutscenenum;    ///< Cutscene number to use, 0 for none.
	INT16 countdown;      ///< Countdown until level end?
	UINT16 palette;       ///< PAL lump to use on this map
Alam Ed Arias committed
324
	UINT8 numlaps;        ///< Number of laps in circuit mode, unless overridden.
Alam Ed Arias committed
325 326 327
	SINT8 unlockrequired; ///< Is an unlockable required to play this level? -1 if no.
	UINT8 levelselect;    ///< Is this map available in the level select? If so, which map list is it available in?
	SINT8 bonustype;      ///< What type of bonus does this level have? (-1 for null.)
328
	SINT8 maxbonuslives;  ///< How many bonus lives to award at Intermission? (-1 for unlimited.)
Alam Ed Arias committed
329

330
	UINT16 levelflags;     ///< LF_flags:  merged booleans into one UINT16 for space, see below
Alam Ed Arias committed
331 332
	UINT8 menuflags;      ///< LF2_flags: options that affect record attack / nights mode menus

333
	char selectheading[22]; ///< Level select heading. Allows for controllable grouping.
334
	UINT16 startrings;      ///< Number of rings players start with.
335
	INT32 sstimer;          ///< Timer for special stages.
336 337
	UINT32 ssspheres;       ///< Sphere requirement in special stages.
	fixed_t gravity;        ///< Map-wide gravity.
338

339 340 341 342 343
	// Title card.
	char ltzzpatch[8];      ///< Zig zag patch.
	char ltzztext[8];       ///< Zig zag text.
	char ltactdiamond[8];   ///< Act diamond.

344
	// Freed animals stuff.
toaster committed
345 346
	UINT8 numFlickies;     ///< Internal. For freed flicky support.
	mobjtype_t *flickies;  ///< List of freeable flickies in this level. Allocated dynamically for space reasons. Be careful.
347

Alam Ed Arias committed
348 349 350
	// NiGHTS stuff.
	UINT8 numGradedMares;   ///< Internal. For grade support.
	nightsgrades_t *grades; ///< NiGHTS grades. Allocated dynamically for space reasons. Be careful.
Alam Ed Arias committed
351

352
	// Music stuff.
353
	UINT32 musinterfadeout;  ///< Fade out level music on intermission screen in milliseconds
354
	char musintername[7];    ///< Intermission screen music.
SteelT committed
355

356 357 358 359
	char muspostbossname[7];    ///< Post-bossdeath music.
	UINT16 muspostbosstrack;    ///< Post-bossdeath track.
	UINT32 muspostbosspos;      ///< Post-bossdeath position
	UINT32 muspostbossfadein;   ///< Post-bossdeath fade-in milliseconds.
360

361 362
	SINT8 musforcereset; ///< Force resetmusic (-1 for default; 0 for force off; 1 for force on)

Alam Ed Arias committed
363 364 365 366
	// Lua stuff.
	// (This is not ifdeffed so the map header structure can stay identical, just in case.)
	UINT8 numCustomOptions;     ///< Internal. For Lua custom value support.
	customoption_t *customopts; ///< Custom options. Allocated dynamically for space reasons. Be careful.
Alam Ed Arias committed
367 368 369
} mapheader_t;

// level flags
370 371 372 373 374 375 376 377 378 379 380 381
#define LF_SCRIPTISFILE       (1<<0) ///< True if the script is a file, not a lump.
#define LF_SPEEDMUSIC         (1<<1) ///< Speed up act music for super sneakers
#define LF_NOSSMUSIC          (1<<2) ///< Disable Super Sonic music
#define LF_NORELOAD           (1<<3) ///< Don't reload level on death
#define LF_NOZONE             (1<<4) ///< Don't include "ZONE" on level title
#define LF_SAVEGAME           (1<<5) ///< Save the game upon loading this level
#define LF_MIXNIGHTSCOUNTDOWN (1<<6) ///< Play sfx_timeup instead of music change for NiGHTS countdown
#define LF_WARNINGTITLE       (1<<7) ///< WARNING! WARNING! WARNING! WARNING!

#define LF_NOTITLECARDFIRST        (1<<8)
#define LF_NOTITLECARDRESPAWN      (1<<9)
#define LF_NOTITLECARDRECORDATTACK (1<<10)
382
#define LF_NOTITLECARD  (LF_NOTITLECARDFIRST|LF_NOTITLECARDRESPAWN|LF_NOTITLECARDRECORDATTACK) ///< Don't start the title card at all
Alam Ed Arias committed
383 384 385 386 387 388

#define LF2_HIDEINMENU     1 ///< Hide in the multiplayer menu
#define LF2_HIDEINSTATS    2 ///< Hide in the statistics screen
#define LF2_RECORDATTACK   4 ///< Show this map in Time Attack
#define LF2_NIGHTSATTACK   8 ///< Show this map in NiGHTS mode menu
#define LF2_NOVISITNEEDED 16 ///< Available in time attack/nights mode without visiting the level
389
#define LF2_WIDEICON      32 ///< If you're in a circumstance where it fits, use a wide map icon
Alam Ed Arias committed
390 391 392 393

extern mapheader_t* mapheaderinfo[NUMMAPS];

// Gametypes
394
#define NUMGAMETYPEFREESLOTS 128
Alam Ed Arias committed
395 396 397 398 399 400 401 402 403 404 405 406 407 408
enum GameType
{
	GT_COOP = 0, // also used in single player
	GT_COMPETITION, // Classic "Race"
	GT_RACE,

	GT_MATCH,
	GT_TEAMMATCH,

	GT_TAG,
	GT_HIDEANDSEEK,

	GT_CTF, // capture the flag

Jaime Ita Passos committed
409 410
	GT_FIRSTFREESLOT,
	GT_LASTFREESLOT = GT_FIRSTFREESLOT + NUMGAMETYPEFREESLOTS - 1,
Alam Ed Arias committed
411 412
	NUMGAMETYPES
};
413
// If you alter this list, update deh_tables.c, MISC_ChangeGameTypeMenu in m_menu.c, and Gametype_Names in g_game.c
414

415
// Gametype rules
416 417
enum GameTypeRules
{
418
	GTR_CAMPAIGN         = 1,     // Linear Co-op map progression, don't allow random maps
Jaime Ita Passos committed
419 420
	GTR_RINGSLINGER      = 1<<1,  // Outside of Co-op, Competition, and Race (overriden by cv_ringslinger)
	GTR_SPECTATORS       = 1<<2,  // Outside of Co-op, Competition, and Race
421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448
	GTR_LIVES            = 1<<3,  // Co-op and Competition
	GTR_TEAMS            = 1<<4,  // Team Match, CTF
	GTR_FIRSTPERSON      = 1<<5,  // First person camera
	GTR_POWERSTONES      = 1<<6,  // Power stones (Match and CTF)
	GTR_TEAMFLAGS        = 1<<7,  // Gametype has team flags (CTF)
	GTR_FRIENDLY         = 1<<8,  // Co-op
	GTR_SPECIALSTAGES    = 1<<9,  // Allow special stages
	GTR_EMERALDTOKENS    = 1<<10, // Spawn emerald tokens
	GTR_EMERALDHUNT      = 1<<11, // Emerald Hunt
	GTR_RACE             = 1<<12, // Race and Competition
	GTR_TAG              = 1<<13, // Tag and Hide and Seek
	GTR_POINTLIMIT       = 1<<14, // Ringslinger point limit
	GTR_TIMELIMIT        = 1<<15, // Ringslinger time limit
	GTR_OVERTIME         = 1<<16, // Allow overtime
	GTR_HURTMESSAGES     = 1<<17, // Hit and death messages
	GTR_FRIENDLYFIRE     = 1<<18, // Always allow friendly fire
	GTR_STARTCOUNTDOWN   = 1<<19, // Hide time countdown (Tag and Hide and Seek)
	GTR_HIDEFROZEN       = 1<<20, // Frozen after hide time (Hide and Seek, but not Tag)
	GTR_BLINDFOLDED      = 1<<21, // Blindfolded view (Tag and Hide and Seek)
	GTR_RESPAWNDELAY     = 1<<22, // Respawn delay
	GTR_PITYSHIELD       = 1<<23, // Award pity shield
	GTR_DEATHPENALTY     = 1<<24, // Death score penalty
	GTR_NOSPECTATORSPAWN = 1<<25, // Use with GTR_SPECTATORS, spawn in the map instead of with the spectators
	GTR_DEATHMATCHSTARTS = 1<<26, // Use deathmatch starts
	GTR_SPAWNINVUL       = 1<<27, // Babysitting deterrent
	GTR_SPAWNENEMIES     = 1<<28, // Spawn enemies
	GTR_ALLOWEXIT        = 1<<29, // Allow exit sectors
	GTR_NOTITLECARD      = 1<<30, // Don't show the title card
449
	GTR_CUTSCENES        = 1<<31, // Play cutscenes, ending, credits, and evaluation
450 451
};

452 453
// String names for gametypes
extern const char *Gametype_Names[NUMGAMETYPES];
Jaime Ita Passos committed
454
extern const char *Gametype_ConstantNames[NUMGAMETYPES];
Alam Ed Arias committed
455

456 457 458 459
// Point and time limits for every gametype
extern INT32 pointlimits[NUMGAMETYPES];
extern INT32 timelimits[NUMGAMETYPES];

Jaime Ita Passos committed
460
// TypeOfLevel things
Alam Ed Arias committed
461 462 463 464 465 466 467 468 469 470 471 472 473 474 475
enum TypeOfLevel
{
	TOL_SP          = 0x01, ///< Single Player
	TOL_COOP        = 0x02, ///< Cooperative
	TOL_COMPETITION = 0x04, ///< Competition
	TOL_RACE        = 0x08, ///< Race
// Single Player default = 15

	TOL_MATCH       = 0x10, ///< Match
	TOL_TAG         = 0x20, ///< Tag
// Match/Tag default = 48

	TOL_CTF         = 0x40, ///< Capture the Flag
// CTF default = 64

476
	// 0x80 was here
Alam Ed Arias committed
477 478 479 480 481

	TOL_2D     = 0x0100, ///< 2D
	TOL_MARIO  = 0x0200, ///< Mario
	TOL_NIGHTS = 0x0400, ///< NiGHTS
	TOL_ERZ3   = 0x0800, ///< ERZ3
482
	TOL_XMAS   = 0x1000, ///< Christmas NiGHTS
Alam Ed Arias committed
483 484
};

Jaime Ita Passos committed
485 486 487
#define MAXTOL             (1<<31)
#define NUMBASETOLNAMES    (19)
#define NUMTOLNAMES        (NUMBASETOLNAMES + NUMGAMETYPEFREESLOTS)
Alam Ed Arias committed
488

489 490 491 492 493
typedef struct
{
	const char *name;
	UINT32 flag;
} tolinfo_t;
Jaime Ita Passos committed
494
extern tolinfo_t TYPEOFLEVEL[NUMTOLNAMES];
Jaime Ita Passos committed
495
extern UINT32 lastcustomtol;
Alam Ed Arias committed
496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511

extern tic_t totalplaytime;

extern UINT8 stagefailed;

// Emeralds stored as bits to throw savegame hackers off.
extern UINT16 emeralds;
#define EMERALD1 1
#define EMERALD2 2
#define EMERALD3 4
#define EMERALD4 8
#define EMERALD5 16
#define EMERALD6 32
#define EMERALD7 64
#define ALL7EMERALDS(v) ((v & (EMERALD1|EMERALD2|EMERALD3|EMERALD4|EMERALD5|EMERALD6|EMERALD7)) == (EMERALD1|EMERALD2|EMERALD3|EMERALD4|EMERALD5|EMERALD6|EMERALD7))

512
#define NUM_LUABANKS 16 // please only make this number go up between versions, never down. you'll break saves otherwise. also, must fit in UINT8
toaster committed
513 514
extern INT32 luabanks[NUM_LUABANKS];

Alam Ed Arias committed
515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554
extern INT32 nummaprings; //keep track of spawned rings/coins

/** Time attack information, currently a very small structure.
  */
typedef struct
{
	tic_t time;   ///< Time in which the level was finished.
	UINT32 score; ///< Score when the level was finished.
	UINT16 rings; ///< Rings when the level was finished.
} recorddata_t;

/** Setup for one NiGHTS map.
  * These are dynamically allocated because I am insane
  */
#define GRADE_F 0
#define GRADE_E 1
#define GRADE_D 2
#define GRADE_C 3
#define GRADE_B 4
#define GRADE_A 5
#define GRADE_S 6

typedef struct
{
	// 8 mares, 1 overall (0)
	UINT8	nummares;
	UINT32	score[9];
	UINT8	grade[9];
	tic_t	time[9];
} nightsdata_t;

extern nightsdata_t *nightsrecords[NUMMAPS];
extern recorddata_t *mainrecords[NUMMAPS];

// mapvisited is now a set of flags that says what we've done in the map.
#define MV_VISITED      1
#define MV_BEATEN       2
#define MV_ALLEMERALDS  4
#define MV_ULTIMATE     8
#define MV_PERFECT     16
555 556
#define MV_PERFECTRA   32
#define MV_MAX         63 // used in gamedata check, update whenever MV's are added
557
#define MV_MP         128
Alam Ed Arias committed
558 559 560
extern UINT8 mapvisited[NUMMAPS];

// Temporary holding place for nights data for the current map
561
extern nightsdata_t ntemprecords;
Alam Ed Arias committed
562 563 564

extern UINT32 token; ///< Number of tokens collected in a level
extern UINT32 tokenlist; ///< List of tokens collected
565
extern boolean gottoken; ///< Did you get a token? Used for end of act
Alam Ed Arias committed
566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586
extern INT32 tokenbits; ///< Used for setting token bits
extern INT32 sstimer; ///< Time allotted in the special stage
extern UINT32 bluescore; ///< Blue Team Scores
extern UINT32 redscore;  ///< Red Team Scores

// Eliminates unnecessary searching.
extern boolean CheckForBustableBlocks;
extern boolean CheckForBouncySector;
extern boolean CheckForQuicksand;
extern boolean CheckForMarioBlocks;
extern boolean CheckForFloatBob;
extern boolean CheckForReverseGravity;

// Powerup durations
extern UINT16 invulntics;
extern UINT16 sneakertics;
extern UINT16 flashingtics;
extern UINT16 tailsflytics;
extern UINT16 underwatertics;
extern UINT16 spacetimetics;
extern UINT16 extralifetics;
587
extern UINT16 nightslinktics;
Alam Ed Arias committed
588 589 590

extern UINT8 introtoplay;
extern UINT8 creditscutscene;
591
extern UINT8 useBlackRock;
Alam Ed Arias committed
592 593 594

extern UINT8 use1upSound;
extern UINT8 maxXtraLife; // Max extra lives from rings
595
extern UINT8 useContinues;
596
#define continuesInSession (!multiplayer && (ultimatemode || (useContinues && !marathonmode) || (!modeattacking && !(cursaveslot > 0))))
Alam Ed Arias committed
597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636

extern mobj_t *hunt1, *hunt2, *hunt3; // Emerald hunt locations

// For racing
extern UINT32 countdown;
extern UINT32 countdown2;

extern fixed_t gravity;

//for CTF balancing
extern INT16 autobalance;
extern INT16 teamscramble;
extern INT16 scrambleplayers[MAXPLAYERS]; //for CTF team scramble
extern INT16 scrambleteams[MAXPLAYERS]; //for CTF team scramble
extern INT16 scrambletotal; //for CTF team scramble
extern INT16 scramblecount; //for CTF team scramble

extern INT32 cheats;

extern tic_t hidetime;

extern UINT32 timesBeaten; // # of times the game has been beaten.
extern UINT32 timesBeatenWithEmeralds;
extern UINT32 timesBeatenUltimate;

// ===========================
// Internal parameters, fixed.
// ===========================
// These are set by the engine, and not changed
//  according to user inputs. Partly load from
//  WAD, partly set at startup time.

extern tic_t gametic;
#define localgametic leveltime

// Player spawn spots.
extern mapthing_t *playerstarts[MAXPLAYERS]; // Cooperative
extern mapthing_t *bluectfstarts[MAXPLAYERS]; // CTF
extern mapthing_t *redctfstarts[MAXPLAYERS]; // CTF

637 638 639 640 641 642 643 644 645 646 647
#define WAYPOINTSEQUENCESIZE 256
#define NUMWAYPOINTSEQUENCES 256
extern mobj_t *waypoints[NUMWAYPOINTSEQUENCES][WAYPOINTSEQUENCESIZE];
extern UINT16 numwaypoints[NUMWAYPOINTSEQUENCES];

void P_AddWaypoint(UINT8 sequence, UINT8 id, mobj_t *waypoint);
mobj_t *P_GetFirstWaypoint(UINT8 sequence);
mobj_t *P_GetLastWaypoint(UINT8 sequence);
mobj_t *P_GetPreviousWaypoint(mobj_t *current, boolean wrap);
mobj_t *P_GetNextWaypoint(mobj_t *current, boolean wrap);
mobj_t *P_GetClosestWaypoint(UINT8 sequence, mobj_t *mo);
648
boolean P_IsDegeneratedWaypointSequence(UINT8 sequence);
649

Alam Ed Arias committed
650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665
// =====================================
// Internal parameters, used for engine.
// =====================================

#if defined (macintosh)
#define DEBFILE(msg) I_OutputMsg(msg)
#else
#define DEBUGFILE
#ifdef DEBUGFILE
#define DEBFILE(msg) { if (debugfile) { fputs(msg, debugfile); fflush(debugfile); } }
#else
#define DEBFILE(msg) {}
#endif
#endif

#ifdef DEBUGFILE
666
extern FILE *debugfile;
Alam Ed Arias committed
667 668 669 670 671 672 673 674 675
extern INT32 debugload;
#endif

// if true, load all graphics at level load
extern boolean precache;

// wipegamestate can be set to -1
//  to force a wipe on the next draw
extern gamestate_t wipegamestate;
676 677
extern INT16 wipetypepre;
extern INT16 wipetypepost;
Alam Ed Arias committed
678 679 680 681 682 683 684 685 686 687 688

// debug flag to cancel adaptiveness
extern boolean singletics;

// =============
// Netgame stuff
// =============

#include "d_clisrv.h"

extern consvar_t cv_timetic; // display high resolution timer
toaster committed
689
extern consvar_t cv_powerupdisplay; // display powerups
toaster committed
690
extern consvar_t cv_showinputjoy; // display joystick in time attack
Alam Ed Arias committed
691 692 693
extern consvar_t cv_forceskin; // force clients to use the server's skin
extern consvar_t cv_downloading; // allow clients to downloading WADs.
extern ticcmd_t netcmds[BACKUPTICS][MAXPLAYERS];
wolfs committed
694
extern INT32 serverplayer;
wolfs committed
695
extern INT32 adminplayers[MAXPLAYERS];
Alam Ed Arias committed
696 697 698 699

/// \note put these in d_clisrv outright?

#endif //__DOOMSTAT__