shithub: hexen

ref: 58bf0e9f39e85fbd3238458bf18403c41275ab7b
dir: /xddefs.h/

View raw version

//**************************************************************************
//**
//** xddefs.h : Heretic 2 : Raven Software, Corp.
//**
//** $Revision: 543 $
//** $Date: 2010-01-11 20:44:55 +0200 (Mon, 11 Jan 2010) $
//**
//**************************************************************************

#ifndef __XDDEFS__
#define __XDDEFS__

#include "h2stdinc.h"
#include "h2def.h"

/* ---- Map level types ---- */

/* lump order in a map wad */
enum
{
	ML_LABEL,
	ML_THINGS,
	ML_LINEDEFS,
	ML_SIDEDEFS,
	ML_VERTEXES,
	ML_SEGS,
	ML_SSECTORS,
	ML_NODES,
	ML_SECTORS,
	ML_REJECT,
	ML_BLOCKMAP,
	ML_BEHAVIOR
};

#pragma pack on

typedef struct
{
	short		x;
	short		y;
} mapvertex_t;

typedef struct
{
	short		textureoffset;
	short		rowoffset;
	char		toptexture[8];
	char		bottomtexture[8];
	char		midtexture[8];
	short		sector;	/* on viewer's side */
} mapsidedef_t;

typedef struct
{
	short		v1;
	short		v2;
	short		flags;
	byte		special;
	byte		arg1;
	byte		arg2;
	byte		arg3;
	byte		arg4;
	byte		arg5;
	short		sidenum[2];	/* sidenum[1] will be -1 if one sided */
} maplinedef_t;

#pragma pack off

#define	ML_BLOCKING		0x0001
#define	ML_BLOCKMONSTERS	0x0002
#define	ML_TWOSIDED		0x0004
#define	ML_DONTPEGTOP		0x0008
#define	ML_DONTPEGBOTTOM	0x0010
#define ML_SECRET		0x0020	/* don't map as two sided: IT'S A SECRET! */
#define ML_SOUNDBLOCK		0x0040	/* don't let sound cross two of these */
#define	ML_DONTDRAW		0x0080	/* don't draw on the automap */
#define	ML_MAPPED		0x0100	/* set if already drawn in automap */
#define ML_REPEAT_SPECIAL	0x0200	/* special is repeatable */
#define ML_SPAC_SHIFT		10
#define ML_SPAC_MASK		0x1c00
#define GET_SPAC(flags)		(((flags) & ML_SPAC_MASK) >> ML_SPAC_SHIFT)

/* Special activation types */
#define SPAC_CROSS		0	/* when player crosses line */
#define SPAC_USE		1	/* when player uses line */
#define SPAC_MCROSS		2	/* when monster crosses line */
#define SPAC_IMPACT		3	/* when projectile hits line */
#define SPAC_PUSH		4	/* when player/monster pushes line */
#define SPAC_PCROSS		5	/* when projectile crosses line */


#pragma pack on

typedef	struct
{
	short		floorheight;
	short		ceilingheight;
	char		floorpic[8];
	char		ceilingpic[8];
	short		lightlevel;
	short		special;
	short		tag;
} mapsector_t;

typedef struct
{
	short		numsegs;
	short		firstseg;	/* segs are stored sequentially */
} mapsubsector_t;

typedef struct
{
	short		v1;
	short		v2;
	short		angle;
	short		linedef;
	short		side;
	short		offset;
} mapseg_t;

/* bbox coordinates */
enum
{
	BOXTOP,
	BOXBOTTOM,
	BOXLEFT,
	BOXRIGHT
};

#define	NF_SUBSECTOR	0x8000
typedef struct
{
	short		x, y, dx, dy;	/* partition line */
	short		bbox[2][4];	/* bounding box for each child */
	unsigned short	children[2];	/* if NF_SUBSECTOR its a subsector */
} mapnode_t;

typedef struct
{
	short		tid;
	short		x;
	short		y;
	short		height;
	short		angle;
	short		type;
	short		options;
	byte		special;
	byte		arg1;
	byte		arg2;
	byte		arg3;
	byte		arg4;
	byte		arg5;
} mapthing_t;

#define MTF_EASY		1
#define MTF_NORMAL		2
#define MTF_HARD		4
#define MTF_AMBUSH		8
#define MTF_DORMANT		16
#define MTF_FIGHTER		32
#define MTF_CLERIC		64
#define MTF_MAGE		128
#define MTF_GSINGLE		256
#define MTF_GCOOP		512
#define MTF_GDEATHMATCH		1024


/* ---- Texture definition ---- */

typedef struct
{
	short		originx;
	short		originy;
	short		patch;
	short		stepdir;
	short		colormap;
} mappatch_t;

typedef struct
{
	char		name[8];
	boolean		masked;	
	short		width;
	short		height;
	int32_t		columndirectory;	/* OBSOLETE */
	short		patchcount;
	mappatch_t	patches[1];
} maptexture_t;


/* ---- Graphics ---- */

/* posts are runs of non masked source pixels */
typedef struct
{
	byte		topdelta;	/* -1 is the last post in a column */
	byte		length;
	/* length data bytes follows */
} post_t;

/* column_t is a list of 0 or more post_t, (byte)-1 terminated */
typedef post_t	column_t;

/* a patch holds one or more columns
 * patches are used for sprites and all masked pictures
 */
typedef struct
{
	short		width;			/* bounding box size */
	short		height;
	short		leftoffset;		/* pixels to the left of origin */
	short		topoffset;		/* pixels below the origin */
	int		columnofs[8];		/* only [width] used */
							/* the [0] is &columnofs[width] */
} patch_t;

#pragma pack off

#endif	/* __XDDEFS__ */