mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-04-25 20:20:57 +00:00
171 lines
No EOL
3.9 KiB
C
171 lines
No EOL
3.9 KiB
C
#ifndef __G_LEVEL_H__
|
|
#define __G_LEVEL_H__
|
|
|
|
#include "doomtype.h"
|
|
#include "doomdef.h"
|
|
#include "m_fixed.h"
|
|
|
|
#define NUM_MAPVARS 32
|
|
#define NUM_WORLDVARS 64
|
|
|
|
#define LEVEL_NOINTERMISSION 0x00000001
|
|
#define LEVEL_DOUBLESKY 0x00000004
|
|
#define LEVEL_NOSOUNDCLIPPING 0x00000008
|
|
|
|
#define LEVEL_MAP07SPECIAL 0x00000010
|
|
#define LEVEL_BRUISERSPECIAL 0x00000020
|
|
#define LEVEL_CYBORGSPECIAL 0x00000040
|
|
#define LEVEL_SPIDERSPECIAL 0x00000080
|
|
|
|
#define LEVEL_SPECLOWERFLOOR 0x00000100
|
|
#define LEVEL_SPECOPENDOOR 0x00000200
|
|
#define LEVEL_SPECACTIONSMASK 0x00000300
|
|
|
|
#define LEVEL_MONSTERSTELEFRAG 0x00000400
|
|
#define LEVEL_EVENLIGHTING 0x00000800
|
|
#define LEVEL_SNDSEQTOTALCTRL 0x00001000
|
|
#define LEVEL_FORCENOSKYSTRETCH 0x00002000
|
|
|
|
#define LEVEL_DEFINEDINMAPINFO 0x20000000 // Level was defined in a MAPINFO lump
|
|
#define LEVEL_CHANGEMAPCHEAT 0x40000000 // Don't display cluster messages
|
|
#define LEVEL_VISITED 0x80000000 // Used for intermission map
|
|
|
|
struct acsdefered_s;
|
|
|
|
struct level_info_s {
|
|
char mapname[8];
|
|
int levelnum;
|
|
char *level_name;
|
|
char pname[8];
|
|
char nextmap[8];
|
|
char secretmap[8];
|
|
int partime;
|
|
char skypic1[8];
|
|
char music[8];
|
|
unsigned flags;
|
|
int cluster;
|
|
byte *snapshot;
|
|
struct acsdefered_s *defered;
|
|
};
|
|
typedef struct level_info_s level_info_t;
|
|
|
|
struct level_pwad_info_s {
|
|
char mapname[8];
|
|
int levelnum;
|
|
char *level_name;
|
|
char pname[8];
|
|
char nextmap[8];
|
|
char secretmap[8];
|
|
int partime;
|
|
char skypic1[8];
|
|
char music[8];
|
|
unsigned flags;
|
|
int cluster;
|
|
byte *snapshot;
|
|
struct acsdefered_s *defered;
|
|
|
|
char skypic2[8];
|
|
fixed_t skyspeed1;
|
|
fixed_t skyspeed2;
|
|
unsigned fadeto;
|
|
char fadetable[8];
|
|
unsigned outsidefog;
|
|
};
|
|
typedef struct level_pwad_info_s level_pwad_info_t;
|
|
|
|
|
|
struct level_locals_s {
|
|
int time;
|
|
int starttime;
|
|
int partime;
|
|
|
|
level_info_t *info;
|
|
int cluster;
|
|
int levelnum;
|
|
char level_name[64]; // the descriptive name (Outer Base, etc)
|
|
char mapname[8]; // the server name (base1, etc)
|
|
char nextmap[8]; // go here when fraglimit is hit
|
|
char secretmap[8]; // map to go to when used secret exit
|
|
|
|
unsigned flags;
|
|
|
|
unsigned fadeto; // The color the palette fades to (usually black)
|
|
unsigned outsidefog; // The fog for sectors with sky ceilings
|
|
|
|
char music[8];
|
|
char skypic1[8];
|
|
char skypic2[8];
|
|
|
|
fixed_t skyspeed1; // Scrolling speed of first sky texture
|
|
fixed_t skyspeed2;
|
|
|
|
int total_secrets;
|
|
int found_secrets;
|
|
|
|
int total_items;
|
|
int found_items;
|
|
|
|
int total_monsters;
|
|
int killed_monsters;
|
|
|
|
// The following are all used for ACS scripting
|
|
byte *behavior;
|
|
int *scripts;
|
|
int *strings;
|
|
int vars[NUM_MAPVARS];
|
|
};
|
|
typedef struct level_locals_s level_locals_t;
|
|
|
|
struct cluster_info_s {
|
|
int cluster;
|
|
char messagemusic[9];
|
|
char finaleflat[8];
|
|
char *exittext;
|
|
char *entertext;
|
|
int flags;
|
|
};
|
|
typedef struct cluster_info_s cluster_info_t;
|
|
|
|
// Only one cluster flag right now
|
|
#define CLUSTER_HUB 0x00000001
|
|
|
|
extern level_locals_t level;
|
|
extern level_info_t LevelInfos[];
|
|
extern cluster_info_t ClusterInfos[];
|
|
|
|
extern int WorldVars[NUM_WORLDVARS];
|
|
|
|
extern BOOL savegamerestore;
|
|
extern BOOL HexenHack; // Semi-Hexen-compatibility mode
|
|
|
|
void G_InitNew (char *mapname);
|
|
|
|
// Can be called by the startup code or M_Responder.
|
|
// A normal game starts at map 1,
|
|
// but a warp test can start elsewhere
|
|
void G_DeferedInitNew (char *mapname);
|
|
|
|
void G_ExitLevel (int position);
|
|
void G_SecretExitLevel (int position);
|
|
|
|
void G_DoLoadLevel (int position);
|
|
|
|
void G_InitLevelLocals (void);
|
|
|
|
void G_SetLevelStrings (void);
|
|
|
|
cluster_info_t *FindClusterInfo (int cluster);
|
|
level_info_t *FindLevelInfo (char *mapname);
|
|
level_info_t *FindLevelByNum (int num);
|
|
|
|
char *CalcMapName (int episode, int level);
|
|
|
|
void G_ParseMapInfo (void);
|
|
|
|
void G_ClearSnapshots (void);
|
|
void G_SnapshotLevel (void);
|
|
void G_UnSnapshotLevel (BOOL keepPlayers);
|
|
void G_ArchiveSnapshots (void);
|
|
void G_UnArchiveSnapshots (void);
|
|
|
|
#endif //__G_LEVEL_H__
|