2006-02-24 05:17:19 +00:00
|
|
|
#ifndef __DOOMDATA_H__
|
|
|
|
#define __DOOMDATA_H__
|
|
|
|
|
|
|
|
#ifdef _MSC_VER
|
|
|
|
#pragma once
|
|
|
|
#endif
|
|
|
|
|
2009-03-07 20:35:13 +00:00
|
|
|
#include "tarray.h"
|
|
|
|
|
2006-02-24 05:17:19 +00:00
|
|
|
enum
|
|
|
|
{
|
|
|
|
BOXTOP, BOXBOTTOM, BOXLEFT, BOXRIGHT
|
|
|
|
};
|
|
|
|
|
2009-03-07 20:35:13 +00:00
|
|
|
struct UDMFKey
|
|
|
|
{
|
2009-03-15 12:18:25 +00:00
|
|
|
const char *key;
|
|
|
|
const char *value;
|
2009-03-07 20:35:13 +00:00
|
|
|
};
|
|
|
|
|
2006-02-24 05:17:19 +00:00
|
|
|
struct MapVertex
|
|
|
|
{
|
|
|
|
short x, y;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct WideVertex
|
|
|
|
{
|
|
|
|
fixed_t x, y;
|
2009-03-15 12:18:25 +00:00
|
|
|
int index;
|
2006-02-24 05:17:19 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct MapSideDef
|
|
|
|
{
|
|
|
|
short textureoffset;
|
|
|
|
short rowoffset;
|
|
|
|
char toptexture[8];
|
|
|
|
char bottomtexture[8];
|
|
|
|
char midtexture[8];
|
2006-05-29 03:07:57 +00:00
|
|
|
WORD sector;
|
2006-02-24 05:17:19 +00:00
|
|
|
};
|
|
|
|
|
2009-03-07 20:35:13 +00:00
|
|
|
struct IntSideDef
|
|
|
|
{
|
|
|
|
// the first 5 values are only used for binary format maps
|
|
|
|
short textureoffset;
|
|
|
|
short rowoffset;
|
|
|
|
char toptexture[8];
|
|
|
|
char bottomtexture[8];
|
|
|
|
char midtexture[8];
|
|
|
|
|
|
|
|
int sector;
|
|
|
|
|
|
|
|
TArray<UDMFKey> props;
|
|
|
|
};
|
|
|
|
|
2006-02-24 05:17:19 +00:00
|
|
|
struct MapLineDef
|
|
|
|
{
|
|
|
|
WORD v1;
|
|
|
|
WORD v2;
|
|
|
|
short flags;
|
|
|
|
short special;
|
|
|
|
short tag;
|
|
|
|
WORD sidenum[2];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct MapLineDef2
|
|
|
|
{
|
|
|
|
WORD v1;
|
|
|
|
WORD v2;
|
|
|
|
short flags;
|
|
|
|
unsigned char special;
|
|
|
|
unsigned char args[5];
|
|
|
|
WORD sidenum[2];
|
|
|
|
};
|
|
|
|
|
2009-03-07 20:35:13 +00:00
|
|
|
struct IntLineDef
|
|
|
|
{
|
|
|
|
DWORD v1;
|
|
|
|
DWORD v2;
|
|
|
|
int flags;
|
|
|
|
int special;
|
|
|
|
int args[5];
|
|
|
|
DWORD sidenum[2];
|
|
|
|
|
|
|
|
TArray<UDMFKey> props;
|
|
|
|
};
|
|
|
|
|
2006-02-24 05:17:19 +00:00
|
|
|
struct MapSector
|
|
|
|
{
|
|
|
|
short floorheight;
|
|
|
|
short ceilingheight;
|
|
|
|
char floorpic[8];
|
|
|
|
char ceilingpic[8];
|
|
|
|
short lightlevel;
|
|
|
|
short special;
|
|
|
|
short tag;
|
|
|
|
};
|
|
|
|
|
2009-03-07 20:35:13 +00:00
|
|
|
struct IntSector
|
|
|
|
{
|
|
|
|
// none of the sector properties are used by the node builder
|
|
|
|
// so there's no need to store them in their expanded form for
|
2009-03-17 02:02:58 +00:00
|
|
|
// UDMF. Just storing the UDMF keys and leaving the binary fields
|
2009-03-07 20:35:13 +00:00
|
|
|
// empty is enough
|
|
|
|
MapSector data;
|
|
|
|
|
|
|
|
TArray<UDMFKey> props;
|
|
|
|
};
|
|
|
|
|
2006-02-24 05:17:19 +00:00
|
|
|
struct MapSubsector
|
|
|
|
{
|
|
|
|
WORD numlines;
|
|
|
|
WORD firstline;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct MapSubsectorEx
|
|
|
|
{
|
|
|
|
DWORD numlines;
|
|
|
|
DWORD firstline;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct MapSeg
|
|
|
|
{
|
|
|
|
WORD v1;
|
|
|
|
WORD v2;
|
|
|
|
WORD angle;
|
|
|
|
WORD linedef;
|
|
|
|
short side;
|
|
|
|
short offset;
|
|
|
|
};
|
|
|
|
|
2010-06-27 20:05:28 +00:00
|
|
|
struct MapSegEx
|
|
|
|
{
|
|
|
|
DWORD v1;
|
|
|
|
DWORD v2;
|
|
|
|
WORD angle;
|
|
|
|
WORD linedef;
|
|
|
|
short side;
|
|
|
|
short offset;
|
|
|
|
};
|
|
|
|
|
2006-02-24 05:17:19 +00:00
|
|
|
struct MapSegGL
|
|
|
|
{
|
|
|
|
WORD v1;
|
|
|
|
WORD v2;
|
|
|
|
WORD linedef;
|
|
|
|
WORD side;
|
|
|
|
WORD partner;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct MapSegGLEx
|
|
|
|
{
|
2006-06-01 01:05:24 +00:00
|
|
|
DWORD v1;
|
|
|
|
DWORD v2;
|
2009-03-17 02:02:58 +00:00
|
|
|
DWORD linedef;
|
2006-02-24 05:17:19 +00:00
|
|
|
WORD side;
|
|
|
|
DWORD partner;
|
|
|
|
};
|
|
|
|
|
|
|
|
#define NF_SUBSECTOR 0x8000
|
|
|
|
#define NFX_SUBSECTOR 0x80000000
|
|
|
|
|
|
|
|
struct MapNode
|
|
|
|
{
|
|
|
|
short x,y,dx,dy;
|
|
|
|
short bbox[2][4];
|
|
|
|
WORD children[2];
|
|
|
|
};
|
|
|
|
|
2012-12-07 06:19:25 +00:00
|
|
|
struct MapNodeExO
|
2006-02-24 05:17:19 +00:00
|
|
|
{
|
|
|
|
short x,y,dx,dy;
|
|
|
|
short bbox[2][4];
|
|
|
|
DWORD children[2];
|
|
|
|
};
|
|
|
|
|
2012-12-07 06:19:25 +00:00
|
|
|
struct MapNodeEx
|
|
|
|
{
|
|
|
|
int x,y,dx,dy;
|
|
|
|
short bbox[2][4];
|
|
|
|
DWORD children[2];
|
|
|
|
};
|
|
|
|
|
2006-02-24 05:17:19 +00:00
|
|
|
struct MapThing
|
|
|
|
{
|
|
|
|
short x;
|
|
|
|
short y;
|
|
|
|
short angle;
|
|
|
|
short type;
|
|
|
|
short flags;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct MapThing2
|
|
|
|
{
|
|
|
|
unsigned short thingid;
|
|
|
|
short x;
|
|
|
|
short y;
|
|
|
|
short z;
|
|
|
|
short angle;
|
|
|
|
short type;
|
|
|
|
short flags;
|
|
|
|
char special;
|
|
|
|
char args[5];
|
|
|
|
};
|
|
|
|
|
2009-03-07 20:35:13 +00:00
|
|
|
struct IntThing
|
|
|
|
{
|
|
|
|
unsigned short thingid;
|
|
|
|
fixed_t x; // full precision coordinates for UDMF support
|
|
|
|
fixed_t y;
|
|
|
|
// everything else is not needed or has no extended form in UDMF
|
|
|
|
short z;
|
|
|
|
short angle;
|
|
|
|
short type;
|
|
|
|
short flags;
|
|
|
|
char special;
|
|
|
|
char args[5];
|
|
|
|
|
|
|
|
TArray<UDMFKey> props;
|
|
|
|
};
|
|
|
|
|
2009-03-15 12:18:25 +00:00
|
|
|
struct IntVertex
|
|
|
|
{
|
|
|
|
TArray<UDMFKey> props;
|
|
|
|
};
|
|
|
|
|
2006-02-24 05:17:19 +00:00
|
|
|
struct FLevel
|
|
|
|
{
|
|
|
|
FLevel ();
|
|
|
|
~FLevel ();
|
|
|
|
|
|
|
|
WideVertex *Vertices; int NumVertices;
|
2009-03-15 12:18:25 +00:00
|
|
|
TArray<IntVertex> VertexProps;
|
2009-03-07 20:35:13 +00:00
|
|
|
TArray<IntSideDef> Sides;
|
|
|
|
TArray<IntLineDef> Lines;
|
|
|
|
TArray<IntSector> Sectors;
|
|
|
|
TArray<IntThing> Things;
|
2006-02-24 05:17:19 +00:00
|
|
|
MapSubsectorEx *Subsectors; int NumSubsectors;
|
2010-06-27 20:05:28 +00:00
|
|
|
MapSegEx *Segs; int NumSegs;
|
2006-02-24 05:17:19 +00:00
|
|
|
MapNodeEx *Nodes; int NumNodes;
|
|
|
|
WORD *Blockmap; int BlockmapSize;
|
|
|
|
BYTE *Reject; int RejectSize;
|
|
|
|
|
|
|
|
MapSubsectorEx *GLSubsectors; int NumGLSubsectors;
|
|
|
|
MapSegGLEx *GLSegs; int NumGLSegs;
|
|
|
|
MapNodeEx *GLNodes; int NumGLNodes;
|
|
|
|
WideVertex *GLVertices; int NumGLVertices;
|
|
|
|
BYTE *GLPVS; int GLPVSSize;
|
|
|
|
|
|
|
|
int NumOrgVerts;
|
|
|
|
|
2009-03-07 20:35:13 +00:00
|
|
|
DWORD *OrgSectorMap; int NumOrgSectors;
|
2006-06-06 22:38:27 +00:00
|
|
|
|
2006-06-06 02:45:48 +00:00
|
|
|
fixed_t MinX, MinY, MaxX, MaxY;
|
|
|
|
|
2009-03-15 12:18:25 +00:00
|
|
|
TArray<UDMFKey> props;
|
|
|
|
|
2006-06-06 02:45:48 +00:00
|
|
|
void FindMapBounds ();
|
2006-02-24 05:17:19 +00:00
|
|
|
void RemoveExtraLines ();
|
|
|
|
void RemoveExtraSides ();
|
|
|
|
void RemoveExtraSectors ();
|
2009-03-07 20:35:13 +00:00
|
|
|
|
|
|
|
int NumSides() const { return Sides.Size(); }
|
|
|
|
int NumLines() const { return Lines.Size(); }
|
|
|
|
int NumSectors() const { return Sectors.Size(); }
|
|
|
|
int NumThings() const { return Things.Size(); }
|
2006-02-24 05:17:19 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
const int BLOCKSIZE = 128;
|
|
|
|
const int BLOCKFRACSIZE = BLOCKSIZE<<FRACBITS;
|
|
|
|
const int BLOCKBITS = 7;
|
|
|
|
const int BLOCKFRACBITS = FRACBITS+7;
|
|
|
|
|
2006-05-31 20:25:20 +00:00
|
|
|
#endif //__DOOMDATA_H__
|