diff --git a/plugins/hl2/mod_vbsp.h b/plugins/hl2/mod_vbsp.h deleted file mode 100644 index 25e56b02..00000000 --- a/plugins/hl2/mod_vbsp.h +++ /dev/null @@ -1,977 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -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. - -*/ - - -// upper design bounds - -#define MAX_MAP_HULLSDQ1 4 -#define MAX_MAP_HULLSDH2 8 -#define MAX_MAP_HULLSM 8 -#define RBSP_STYLESPERSURF 4 -#define Q1Q2BSP_STYLESPERSURF 4 -#ifdef Q1BSPS -#define MAXCPULIGHTMAPS 16 //max lightmaps mixed by the cpu (vanilla q1bsp=4, fte extensions=no real cap, must be >=MAXRLIGHTMAPS) -#elif defined(Q1BSPS) -#define MAXCPULIGHTMAPS Q1Q2BSP_STYLESPERSURF //max lightmaps mixed by the cpu (vanilla q1bsp=4, fte extensions=no real cap, must be >=MAXRLIGHTMAPS) -#else -#define MAXCPULIGHTMAPS MAXRLIGHTMAPS //max lightmaps mixed by the cpu (vanilla q1bsp=4, fte extensions=no real cap, must be >=MAXRLIGHTMAPS) -#endif - -//#define MAX_MAP_MODELS 256 -//#define MAX_MAP_BRUSHES 0x8000 -//#define MAX_MAP_ENTITIES 1024 -//#define MAX_MAP_ENTSTRING 65536 - -//FIXME: make sure that any 16bit indexes are bounded properly -//FIXME: ensure that we don't get any count*size overflows -#define SANITY_LIMIT(t) ((unsigned int)(0x7fffffffu/sizeof(t))) //sanity limit for the array, to ensure a 32bit value cannot overflow us. -//#define SANITY_MAX_MAP_PLANES 65536*64 //sanity -//#define SANITY_MAX_MAP_NODES 65536*64 //sanity -//#define SANITY_MAX_MAP_CLIPNODES 65536*64 //sanity -//#define MAX_MAP_LEAFS 1 //pvs buffer size. not sanity. -//#define SANITY_MAX_MAP_LEAFS 65536*64 //too many leafs results in massive amounts of ram used for pvs/phs caches. -//#define SANITY_MAX_MAP_VERTS 65536 //sanity -//#define SANITY_MAX_MAP_FACES 65536*64 //sanity -//#define MAX_MAP_MARKSURFACES 65536 //sanity -//#define MAX_MAP_TEXINFO 4096 //sanity -//#define MAX_MAP_EDGES 256000 -//#define MAX_MAP_SURFEDGES 512000 -//#define MAX_MAP_MIPTEX 0x200000 -//#define MAX_MAP_LIGHTING 0x100000 -//#define MAX_MAP_VISIBILITY 0x200000 - -#define SANITY_MAX_MAP_BRUSHSIDES ((~0u)/sizeof(q2cbrushside_t)) - -// key / value pair sizes - -#define MAX_KEY 32 -#define MAX_VALUE 1024 - - -//============================================================================= - -#define BSPVERSIONQTEST 23 -#define BSPVERSIONPREREL 28 -#define BSPVERSION 29 -//HalfLife support -#define BSPVERSIONHL 30 -#define BSPVERSION_LONG1 (('B' << 24) | ('S' << 16) | ('P' << 8) | '2') /*RMQ support (2PSB). 32bits instead of shorts for all but bbox sizes*/ -#define BSPVERSION_LONG2 (('B' << 0) | ('S' << 8) | ('P' << 16) | ('2'<<24)) /*BSP2 support. 32bits instead of shorts for everything*/ -#define BSPVERSIONQ64 (('Q' << 24) | ('6' << 16) | ('4' << 8) | (' ' << 0)) /* Remastered BSP format used for Quake 64 addon */ - -typedef struct -{ - unsigned int fileofs, filelen; -} lump_t; - -#define LUMP_ENTITIES 0 -#define LUMP_PLANES 1 -#define LUMP_TEXTURES 2 -#define LUMP_VERTEXES 3 -#define LUMP_VISIBILITY 4 -#define LUMP_NODES 5 -#define LUMP_TEXINFO 6 -#define LUMP_FACES 7 -#define LUMP_LIGHTING 8 -#define LUMP_CLIPNODES 9 -#define LUMP_LEAFS 10 -#define LUMP_MARKSURFACES 11 -#define LUMP_EDGES 12 -#define LUMP_SURFEDGES 13 -#define LUMP_MODELS 14 - -#define HEADER_LUMPS 15 - -typedef struct -{ - float mins[3], maxs[3]; - float origin[3]; - int headnode[MAX_MAP_HULLSDQ1]; - int visleafs; // not including the solid leaf 0 - int firstface, numfaces; -} dq1model_t; - -typedef struct -{ - float mins[3], maxs[3]; - float origin[3]; - int headnode[MAX_MAP_HULLSDH2]; - int visleafs; // not including the solid leaf 0 - int firstface, numfaces; -} dh2model_t; - -typedef struct -{ - int version; - lump_t lumps[HEADER_LUMPS]; -} dheader_t; - -typedef struct -{ - int nummiptex; - int dataofs[4]; // [nummiptex] -} dmiptexlump_t; - -#define MIPLEVELS 4 -typedef struct miptex_s -{ - char name[16]; - unsigned width, height; - unsigned offsets[MIPLEVELS]; // four mip maps stored -} miptex_t; - -typedef struct q64miptex_s -{ - char name[16]; - unsigned width, height, scale; - unsigned offsets[MIPLEVELS]; // four mip maps stored -} q64miptex_t; - - -typedef struct -{ - float point[3]; -} dvertex_t; - - -// 0-2 are axial planes -#define PLANE_X 0 -#define PLANE_Y 1 -#define PLANE_Z 2 - -// 3-5 are non-axial planes snapped to the nearest -#define PLANE_ANYX 3 -#define PLANE_ANYY 4 -#define PLANE_ANYZ 5 - -typedef struct -{ - float normal[3]; - float dist; - int type; // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate -} dplane_t; - - -enum q1contents_e -{ //q1 and halflife bsp contents values. - //also used for .skin for content forcing. - Q1CONTENTS_EMPTY = -1, - Q1CONTENTS_SOLID = -2, - Q1CONTENTS_WATER = -3, - Q1CONTENTS_SLIME = -4, - Q1CONTENTS_LAVA = -5, - Q1CONTENTS_SKY = -6, -//#define Q1CONTENTS_ORIGIN -7 /*not known to engine - origin or something*/ - Q1CONTENTS_CLIP = -8, /*solid to players+monsters, but not tracelines*/ - Q1CONTENTS_CURRENT_0 = -9, /*moves player*/ - Q1CONTENTS_CURRENT_90 = -10, /*moves player*/ - Q1CONTENTS_CURRENT_180 = -11, /*moves player*/ - Q1CONTENTS_CURRENT_270 = -12, /*moves player*/ - Q1CONTENTS_CURRENT_UP = -13, /*moves player*/ - Q1CONTENTS_CURRENT_DOWN = -14, /*moves player*/ - Q1CONTENTS_TRANS = -15, /*should be solid I guess*/ - Q1CONTENTS_LADDER = -16, /*player can climb up/down*/ - Q1CONTENTS_MONSTERCLIP = -17, /*solid to monster movement*/ - Q1CONTENTS_PLAYERCLIP = -18, /*solid to player movement*/ - Q1CONTENTS_CORPSE = -19, /*solid to tracelines*/ -}; - -// !!! if this is changed, it must be changed in asm_i386.h too !!! -typedef struct -{ - int planenum; - short children[2]; // negative numbers are -(leafs+1), not nodes - short mins[3]; // for sphere culling - short maxs[3]; - unsigned short firstface; - unsigned short numfaces; // counting both sides -} dsnode_t; -typedef struct -{ - int planenum; - int children[2]; // negative numbers are -(leafs+1), not nodes - short mins[3]; // for sphere culling - short maxs[3]; - unsigned int firstface; - unsigned int numfaces; // counting both sides -} dl1node_t; -typedef struct -{ - int planenum; - int children[2]; // negative numbers are -(leafs+1), not nodes - float mins[3]; // for sphere culling - float maxs[3]; - unsigned int firstface; - unsigned int numfaces; // counting both sides -} dl2node_t; - -typedef struct -{ - int planenum; - short children[2]; // negative numbers are contents -} dsclipnode_t; -typedef struct -{ - int planenum; - int children[2]; // negative numbers are contents -} dlclipnode_t; - -typedef struct -{ - int planenum; - int children[2]; // negative numbers are contents -} mclipnode_t; - -typedef struct texinfo_s -{ - float vecs[2][4]; // [s/t][xyz offset] - int miptex; - int flags; -} texinfo_t; -#define TEX_SPECIAL 1 // sky or slime, no lightmap or 256 subdivision - -// note that edge 0 is never used, because negative edge nums are used for -// counterclockwise use of the edge in a face -typedef struct -{ - unsigned short v[2]; // vertex numbers -} dsedge_t; -typedef struct -{ - unsigned int v[2]; // vertex numbers -} dledge_t; - -#ifdef RFBSPS -#define MAXRLIGHTMAPS 4 //max lightmaps mixed by the gpu (rbsp=4, otherwise 1) -#else -#define MAXRLIGHTMAPS 1 //max lightmaps mixed by the gpu (rbsp=4, otherwise 1) -#endif -typedef struct -{ - short planenum; - short side; - - int firstedge; // we must support > 64k edges - short numedges; - short texinfo; - -// lighting info - qbyte styles[Q1Q2BSP_STYLESPERSURF]; - int lightofs; // start of [numstyles*surfsize] samples -} dsface_t; -typedef struct -{ - int planenum; - int side; - - int firstedge; // we must support > 64k edges - int numedges; - int texinfo; - -// lighting info - qbyte styles[Q1Q2BSP_STYLESPERSURF]; - int lightofs; // start of [numstyles*surfsize] samples -} dlface_t; - - - -#define AMBIENT_WATER 0 -#define AMBIENT_SKY 1 -#define AMBIENT_SLIME 2 -#define AMBIENT_LAVA 3 - -#define NUM_AMBIENTS 4 // automatic ambient sounds - -// leaf 0 is the generic CONTENTS_SOLID leaf, used for all solid areas -// all other leafs need visibility info -typedef struct -{ - int contents; - int visofs; // -1 = no visibility info - - short mins[3]; // for frustum culling - short maxs[3]; - - unsigned short firstmarksurface; - unsigned short nummarksurfaces; - - qbyte ambient_level[NUM_AMBIENTS]; -} dsleaf_t; -typedef struct -{ - int contents; - int visofs; // -1 = no visibility info - - short mins[3]; // for frustum culling - short maxs[3]; - - unsigned int firstmarksurface; - unsigned int nummarksurfaces; - - qbyte ambient_level[NUM_AMBIENTS]; -} dl1leaf_t; -typedef struct -{ - int contents; - int visofs; // -1 = no visibility info - - float mins[3]; // for frustum culling - float maxs[3]; - - unsigned int firstmarksurface; - unsigned int nummarksurfaces; - - qbyte ambient_level[NUM_AMBIENTS]; -} dl2leaf_t; - -//============================================================================ - - - - - - - - - - - - - - - -#define MIPLEVELS 4 -typedef struct q2miptex_s -{ - char name[32]; - unsigned width, height; - unsigned offsets[MIPLEVELS]; // four mip maps stored - char animname[32]; // next frame in animation chain - int flags; - int contents; - int value; -} q2miptex_t; - - - -/* -============================================================================== - - .BSP file format - -============================================================================== -*/ - -#define IDBSPHEADER (('P'<<24)+('S'<<16)+('B'<<8)+'I') - // little-endian "IBSP" - -#define BSPVERSION_Q2 38 -#define BSPVERSION_Q2W 69 -#define BSPVERSION_Q3 46 -#define BSPVERSION_RTCW 47 -#define BSPVERSION_RBSP 1 //also fbsp(just bigger internal lightmaps) - - - -// upper design bounds -// leaffaces, leafbrushes, planes, and verts are still bounded by -// 16 bit short limits -#define SANITY_MAX_Q2MAP_MODELS MAX_PRECACHE_MODELS -//#define MAX_Q2MAP_ENTITIES 2048 -#define SANITY_MAX_MAP_BRUSHES (~0u/sizeof(*out)) -#define SANITY_MAX_MAP_LEAFFACES 262144 //sanity only - -#define MAX_Q2MAP_AREAS 256 -#define MAX_Q2MAP_AREAPORTALS 1024 -//#define MAX_Q2MAP_VERTS MAX_MAP_VERTS -//#define MAX_Q2MAP_FACES MAX_MAP_FACES -#define SANITY_MAX_MAP_LEAFBRUSHES (65536*64) //used in an array -//#define MAX_Q2MAP_PORTALS 65536 //unused -//#define MAX_Q2MAP_EDGES 128000 //unused -//#define MAX_Q2MAP_SURFEDGES 256000 //unused -//#define MAX_Q2MAP_LIGHTING 0x200000 //unused -//#define MAX_Q2MAP_VISIBILITY MAX_MAP_VISIBILITY - -// key / value pair sizes - -#define MAX_KEY 32 -#define MAX_VALUE 1024 - -//============================================================================= - - -#define Q2LUMP_ENTITIES 0 -#define Q2LUMP_PLANES 1 -#define Q2LUMP_VERTEXES 2 -#define Q2LUMP_VISIBILITY 3 -#define Q2LUMP_NODES 4 -#define Q2LUMP_TEXINFO 5 -#define Q2LUMP_FACES 6 -#define Q2LUMP_LIGHTING 7 -#define Q2LUMP_LEAFS 8 -#define Q2LUMP_LEAFFACES 9 -#define Q2LUMP_LEAFBRUSHES 10 -#define Q2LUMP_EDGES 11 -#define Q2LUMP_SURFEDGES 12 -#define Q2LUMP_MODELS 13 -#define Q2LUMP_BRUSHES 14 -#define Q2LUMP_BRUSHSIDES 15 -#define Q2LUMP_POP 16 -#define Q2LUMP_AREAS 17 -#define Q2LUMP_AREAPORTALS 18 -#define Q2HEADER_LUMPS 19 - -enum Q3LUMP -{ - Q3LUMP_ENTITIES =0, - Q3LUMP_SHADERS =1, - Q3LUMP_PLANES =2, - Q3LUMP_NODES =3, - Q3LUMP_LEAFS =4, - Q3LUMP_LEAFSURFACES =5, - Q3LUMP_LEAFBRUSHES =6, - Q3LUMP_MODELS =7, - Q3LUMP_BRUSHES =8, - Q3LUMP_BRUSHSIDES =9, - Q3LUMP_DRAWVERTS =10, - Q3LUMP_DRAWINDEXES =11, - Q3LUMP_FOGS =12, - Q3LUMP_SURFACES =13, - Q3LUMP_LIGHTMAPS =14, - Q3LUMP_LIGHTGRID =15, - Q3LUMP_VISIBILITY =16, -#ifdef RFBSPS - RBSPLUMP_LIGHTINDEXES=17, -#endif - Q3LUMPS_TOTAL -}; - -typedef struct -{ - int ident; - int version; - lump_t lumps[64]; -} q2dheader_t; - -typedef struct -{ - float mins[3], maxs[3]; - float origin[3]; // for sounds or lights - int headnode; - int firstface, numfaces; // submodels just draw faces - // without walking the bsp tree -} q2dmodel_t; - -typedef struct -{ - float mins[3]; - float maxs[3]; - int firstsurface; - int num_surfaces; - int firstbrush; - int num_brushes; -} q3dmodel_t; - - - -// 0-2 are axial planes -#define PLANE_X 0 -#define PLANE_Y 1 -#define PLANE_Z 2 - -// 3-5 are non-axial planes snapped to the nearest -#define PLANE_ANYX 3 -#define PLANE_ANYY 4 -#define PLANE_ANYZ 5 - - - - -// contents flags are seperate bits -// a given brush can contribute multiple content bits -// multiple brushes can be in a single leaf - -#define FTECONTENTS_EMPTY 0x00000000 -#define FTECONTENTS_SOLID 0x00000001 -#define FTECONTENTS_WINDOW 0x00000002 //solid to bullets, but not sight/agro -//q2aux 0x00000004 -#define FTECONTENTS_LAVA 0x00000008 -#define FTECONTENTS_SLIME 0x00000010 -#define FTECONTENTS_WATER 0x00000020 -#define FTECONTENTS_FLUID (FTECONTENTS_WATER|FTECONTENTS_SLIME|FTECONTENTS_LAVA|FTECONTENTS_SKY) //sky is a fluid for q1 code. -//q2mist 0x00000040 -//q3notteam1 0x00000080 -//q3notteam2 0x00000100 -//q3nobotclip 0x00000200 -// 0x00000400 -// 0x00000800 -// 0x00001000 -// 0x00002000 -#define FTECONTENTS_LADDER 0x00004000 -//q2areaportal,q3areaportal 0x00008000 -#define FTECONTENTS_PLAYERCLIP 0x00010000 -#define FTECONTENTS_MONSTERCLIP 0x00020000 -//q2current0,q3teleporter 0x00040000 -//q2current90,q3jumppad 0x00080000 -//q2current180,q3clusterportal 0x00100000 -//q2current270,q3donotenter 0x00200000 -//q2currentup,q3botclip 0x00400000 -//q2currentdown,q3mover 0x00800000 -//q2origin,q3origin 0x01000000 //could define, but normally removed by compiler, so why? -#define FTECONTENTS_BODY 0x02000000 -#define FTECONTENTS_CORPSE 0x04000000 -#define FTECONTENTS_DETAIL 0x08000000 //not very useful to us, but used by .map support -//q2translucent,q3structual 0x10000000 -//q2ladder,q3translucent 0x20000000 -//q3trigger 0x40000000 -#define FTECONTENTS_SKY/*q3nodrop*/ 0x80000000 - -// lower bits are stronger, and will eat weaker brushes completely -#define Q2CONTENTS_SOLID FTECONTENTS_SOLID //0x00000001 -#define Q2CONTENTS_WINDOW 0x00000002 // translucent, but not watery -#define Q2CONTENTS_AUX 0x00000004 -#define Q2CONTENTS_LAVA FTECONTENTS_LAVA //0x00000008 -#define Q2CONTENTS_SLIME FTECONTENTS_SLIME //0x00000010 -#define Q2CONTENTS_WATER FTECONTENTS_WATER //0x00000020 -#define Q2CONTENTS_MIST 0x00000040 - //0x00000080 - //0x00000100 - //0x00000200 - //0x00000400 - //0x00000800 - //0x00001000 - //0x00002000 - //FTECONTENTS_LADDER //0x00004000 -// remaining contents are non-visible, and don't eat brushes -#define Q2CONTENTS_AREAPORTAL 0x00008000 -#define Q2CONTENTS_PLAYERCLIP FTECONTENTS_PLAYERCLIP //0x00010000 -#define Q2CONTENTS_MONSTERCLIP FTECONTENTS_MONSTERCLIP //0x00020000 -// currents can be added to any other contents, and may be mixed -#define Q2CONTENTS_CURRENT_0 0x00040000 -#define Q2CONTENTS_CURRENT_90 0x00080000 -#define Q2CONTENTS_CURRENT_180 0x00100000 -#define Q2CONTENTS_CURRENT_270 0x00200000 -#define Q2CONTENTS_CURRENT_UP 0x00400000 -#define Q2CONTENTS_CURRENT_DOWN 0x00800000 -#define Q2CONTENTS_ORIGIN 0x01000000 // removed before bsping an entity -#define Q2CONTENTS_MONSTER FTECONTENTS_BODY //0x02000000 // should never be on a brush, only in game -#define Q2CONTENTS_DEADMONSTER FTECONTENTS_CORPSE //0x04000000 -#define Q2CONTENTS_DETAIL 0x08000000 // brushes to be added after vis leafs -#define Q2CONTENTS_TRANSLUCENT 0x10000000 // auto set if any surface has trans -#define Q2CONTENTS_LADDER 0x20000000 - //0x40000000 - //FTECONTENTS_SKY //0x80000000 - - -#define Q3CONTENTS_SOLID FTECONTENTS_SOLID //0x00000001 // should never be on a brush, only in game - //0x00000002 - //0x00000004 -#define Q3CONTENTS_LAVA FTECONTENTS_LAVA //0x00000008 -#define Q3CONTENTS_SLIME FTECONTENTS_SLIME //0x00000010 -#define Q3CONTENTS_WATER FTECONTENTS_WATER //0x00000020 - //0x00000040 -#define Q3CONTENTS_NOTTEAM1 0x00000080 -#define Q3CONTENTS_NOTTEAM2 0x00000100 -#define Q3CONTENTS_NOBOTCLIP 0x00000200 - //0x00000400 - //0x00000800 - //0x00001000 - //0x00002000 - //FTECONTENTS_LADDER //0x00004000 -#define Q3CONTENTS_AREAPORTAL 0x00008000 -#define Q3CONTENTS_PLAYERCLIP FTECONTENTS_PLAYERCLIP //0x00010000 -#define Q3CONTENTS_MONSTERCLIP FTECONTENTS_MONSTERCLIP //0x00020000 -#define Q3CONTENTS_TELEPORTER 0x00040000 -#define Q3CONTENTS_JUMPPAD 0x00080000 -#define Q3CONTENTS_CLUSTERPORTAL 0x00100000 -#define Q3CONTENTS_DONOTENTER 0x00200000 -#define Q3CONTENTS_BOTCLIP 0x00400000 -#define Q3CONTENTS_MOVER 0x00800000 -#define Q3CONTENTS_ORIGIN Q2CONTENTS_ORIGIN //0x01000000 -#define Q3CONTENTS_BODY FTECONTENTS_BODY //0x02000000 -#define Q3CONTENTS_CORPSE FTECONTENTS_CORPSE //0x04000000 -#define Q3CONTENTS_DETAIL Q2CONTENTS_DETAIL //0x08000000 -#define Q3CONTENTS_STRUCTURAL 0x10000000 -#define Q3CONTENTS_TRANSLUCENT 0x20000000 -#define Q3CONTENTS_TRIGGER 0x40000000 -#define Q3CONTENTS_NODROP FTECONTENTS_SKY //0x80000000 - -#ifdef HL2BSPS -//this is more for documentation, hence why the q2 values where the match -#define HL2CONTENTS_SOLID FTECONTENTS_SOLID //0x00000001 -#define HL2CONTENTS_WINDOW Q2CONTENTS_WINDOW //0x00000002 -#define HL2CONTENTS_AUX Q2CONTENTS_AUX //0x00000004 -#define HL2CONTENTS_GRATE /*FTECONTENTS_LAVA*/ 0x00000008 //Surprise... -#define HL2CONTENTS_SLIME FTECONTENTS_SLIME //0x00000010 -#define HL2CONTENTS_WATER FTECONTENTS_WATER //0x00000020 -#define HL2CONTENTS_MIST Q2CONTENTS_MIST //0x00000040 -#define HL2CONTENTS_OPAQUE 0x00000080 -#define HL2CONTENTS_TESTFOGVOLUME 0x00000100 - //0x00000200 - //0x00000400 -#define HL2CONTENTS_TEAM1 0x00000800 -#define HL2CONTENTS_TEAM2 0x00001000 -#define HL2CONTENTS_IGNORE_NODRAW_OPAQUE 0x00002000 -#define HL2CONTENTS_MOVEABLE /*FTECONTENTS_LADDER*/ 0x00004000 -#define HL2CONTENTS_AREAPORTAL Q2CONTENTS_AREAPORTAL //0x00008000 -#define HL2CONTENTS_PLAYERCLIP FTECONTENTS_PLAYERCLIP //0x00010000 -#define HL2CONTENTS_MONSTERCLIP FTECONTENTS_MONSTERCLIP //0x00020000 -#define HL2CONTENTS_CURRENT_0 Q2CONTENTS_CURRENT_0 //0x00040000 -#define HL2CONTENTS_CURRENT_90 Q2CONTENTS_CURRENT_90 //0x00080000 -#define HL2CONTENTS_CURRENT_180 Q2CONTENTS_CURRENT_180 //0x00100000 -#define HL2CONTENTS_CURRENT_270 Q2CONTENTS_CURRENT_270 //0x00200000 -#define HL2CONTENTS_CURRENT_UP Q2CONTENTS_CURRENT_UP //0x00400000 -#define HL2CONTENTS_CURRENT_DWN Q2CONTENTS_CURRENT_DOWN //0x00800000 -#define HL2CONTENTS_ORIGIN Q2CONTENTS_ORIGIN //0x01000000 // removed before bsping an entity -#define HL2CONTENTS_MONSTER FTECONTENTS_BODY //0x02000000 // should never be on a brush, only in game -#define HL2CONTENTS_DEADMONSTER FTECONTENTS_CORPSE //0x04000000 -#define HL2CONTENTS_DETAIL Q2CONTENTS_DETAIL //0x08000000 // brushes to be added after vis leafs -#define HL2CONTENTS_TRANSLUCENT Q2CONTENTS_TRANSLUCENT //0x10000000 // auto set if any surface has trans -#define HL2CONTENTS_LADDER Q2CONTENTS_LADDER //0x20000000 -#define HL2CONTENTS_HITBOX 0x40000000 - /*FTECONTENTS_SKY*/ //0x80000000 -#endif - -//qc compat only. not used internally. -#define DPCONTENTS_SOLID 1 // hit a bmodel, not a bounding box -#define DPCONTENTS_WATER 2 -#define DPCONTENTS_SLIME 4 -#define DPCONTENTS_LAVA 8 -#define DPCONTENTS_SKY 16 -#define DPCONTENTS_BODY 32 // hit a bounding box, not a bmodel -#define DPCONTENTS_CORPSE 64 // hit a SOLID_CORPSE entity -#define DPCONTENTS_NODROP 128 // an area where backpacks should not spawn -#define DPCONTENTS_PLAYERCLIP 256 // blocks player movement -#define DPCONTENTS_MONSTERCLIP 512 // blocks monster movement -#define DPCONTENTS_DONOTENTER 1024 // AI hint brush -#define DPCONTENTS_BOTCLIP 2048 // AI hint brush -#define DPCONTENTS_OPAQUE 4096 // only fully opaque brushes get this (may be useful for line of sight checks) - - -//Texinfo flags - warning: these mix with q3 surface flags -#define TI_LIGHT 0x1 // value will hold the light strength - -#define TI_SLICK 0x2 // effects game physics - -#define TI_SKY 0x4 // don't draw, but add to skybox -#define TI_WARP 0x8 // turbulent water warp -#define TI_TRANS33 0x10 -#define TI_TRANS66 0x20 -#define TI_FLOWING 0x40 // scroll towards angle -#define TI_NODRAW 0x80 // don't bother referencing the texture - -#define TI_ALPHATEST 0x100 - -//Surface flags -//#define Q3SURFACEFLAG_NODAMAGE 0x1 // never give falling damage -//#define Q3SURFACEFLAG_SLICK 0x2 // effects game physics -//#define Q3SURFACEFLAG_SKY 0x4 // lighting from environment map -#define Q3SURFACEFLAG_LADDER 0x8 -//#define Q3SURFACEFLAG_NOIMPACT 0x10 // don't make missile explosions -//#define Q3SURFACEFLAG_NOMARKS 0x20 // don't leave missile marks -//#define Q3SURFACEFLAG_FLESH 0x40 // make flesh sounds and effects -//#define Q3SURFACEFLAG_NODRAW 0x80 // don't generate a drawsurface at all -//#define Q3SURFACEFLAG_HINT 0x100 // make a primary bsp splitter -//#define Q3SURFACEFLAG_SKIP 0x200 // completely ignore, allowing non-closed brushes -//#define Q3SURFACEFLAG_NOLIGHTMAP 0x400 // surface doesn't need a lightmap -//#define Q3SURFACEFLAG_POINTLIGHT 0x800 // generate lighting info at vertexes -//#define Q3SURFACEFLAG_METALSTEPS 0x1000 // clanking footsteps -//#define Q3SURFACEFLAG_NOSTEPS 0x2000 // no footstep sounds -//#define Q3SURFACEFLAG_NONSOLID 0x4000 // don't collide against curves with this set -//#define Q3SURFACEFLAG_LIGHTFILTER 0x8000 // act as a light filter during q3map -light -//#define Q3SURFACEFLAG_ALPHASHADOW 0x10000 // do per-pixel light shadow casting in q3map -//#define Q3SURFACEFLAG_NODLIGHT 0x20000 // don't dlight even if solid (solid lava, skies) -//#define Q3SURFACEFLAG_DUST 0x40000 // leave a dust trail when walking on this surface - -// content masks. Allow q2contents_window in here -//#define MASK_ALL (-1) -#define MASK_WORLDSOLID (FTECONTENTS_SOLID|FTECONTENTS_WINDOW) /*default trace type for something simple that ignores non-bsp stuff*/ -#define MASK_POINTSOLID (FTECONTENTS_SOLID|FTECONTENTS_WINDOW|FTECONTENTS_BODY) /*default trace type for an entity of no size*/ -#define MASK_BOXSOLID (FTECONTENTS_SOLID|FTECONTENTS_PLAYERCLIP|Q2CONTENTS_WINDOW|FTECONTENTS_BODY) /*default trace type for an entity that does have size*/ -#define MASK_PLAYERSOLID MASK_BOXSOLID -//#define MASK_DEADSOLID (Q2CONTENTS_SOLID|Q2CONTENTS_PLAYERCLIP|Q2CONTENTS_WINDOW) -//#define MASK_MONSTERSOLID (Q2CONTENTS_SOLID|Q2CONTENTS_MONSTERCLIP|Q2CONTENTS_WINDOW|Q2CONTENTS_MONSTER) -#define MASK_WATER (FTECONTENTS_WATER|FTECONTENTS_LAVA|FTECONTENTS_SLIME) -//#define MASK_OPAQUE (Q2CONTENTS_SOLID|Q2CONTENTS_SLIME|Q2CONTENTS_LAVA) -//#define MASK_SHOT (Q2CONTENTS_SOLID|Q2CONTENTS_MONSTER|Q2CONTENTS_WINDOW|Q2CONTENTS_DEADMONSTER) -#define Q2MASK_CURRENT (Q2CONTENTS_CURRENT_0|Q2CONTENTS_CURRENT_90|Q2CONTENTS_CURRENT_180|Q2CONTENTS_CURRENT_270|Q2CONTENTS_CURRENT_UP|Q2CONTENTS_CURRENT_DOWN) - - - -typedef struct -{ - int planenum; - int children[2]; // negative numbers are -(leafs+1), not nodes - short mins[3]; // for frustom culling - short maxs[3]; - unsigned short firstface; - unsigned short numfaces; // counting both sides -} q2dnode_t; - -typedef struct -{ - int plane; - int children[2]; - int mins[3]; - int maxs[3]; -} q3dnode_t; - - -typedef struct q2texinfo_s -{ - float vecs[2][4]; // [s/t][xyz offset] - int flags; // miptex flags + overrides - int value; // light emission, etc - char texture[32]; // texture name (textures/ *.wal) - int nexttexinfo; // for animations, -1 = end of chain -} q2texinfo_t; - - - -typedef struct -{ - int contents; // OR of all brushes (not needed?) - - short cluster; - short area; - - short mins[3]; // for frustum culling - short maxs[3]; - - unsigned short firstleafface; - unsigned short numleaffaces; - - unsigned short firstleafbrush; - unsigned short numleafbrushes; -} q2dleaf_t; - -typedef struct -{ - int cluster; - int area; - int mins[3]; - int maxs[3]; - int firstleafsurface; - int num_leafsurfaces; - int firstleafbrush; - int num_leafbrushes; -} q3dleaf_t; - - -typedef struct -{ - unsigned short planenum; // facing out of the leaf - short texinfo; -} q2dbrushside_t; - -typedef struct -{ - int planenum; - int texinfo; -} q3dbrushside_t; -typedef struct -{ - int planenum; - int texinfo; - int facenum; -} rbspbrushside_t; - -typedef struct -{ - int firstside; - int numsides; - int contents; -} q2dbrush_t; - - -typedef struct -{ - int firstside; - int num_sides; - int shadernum; -} q3dbrush_t; - -#define ANGLE_UP -1 -#define ANGLE_DOWN -2 - - -// the visibility lump consists of a header with a count, then -// qbyte offsets for the PVS and PHS of each cluster, then the raw -// compressed bit vectors -#define DVIS_PVS 0 -#define DVIS_PHS 1 -typedef struct -{ - int numclusters; - int bitofs[8][2]; // bitofs[numclusters][2] -} q2dvis_t; - -typedef struct -{ - int numclusters; - int rowsize; - unsigned char data[1]; -} q3dvis_t; - -// each area has a list of portals that lead into other areas -// when portals are closed, other areas may not be visible or -// hearable even if the vis info says that it should be -typedef struct -{ - int portalnum; - int otherarea; -} q2dareaportal_t; - -typedef struct -{ - int numareaportals; - int firstareaportal; -} q2darea_t; - - - - - - - - - - - - - - - - - - - -typedef struct -{ - char shadername[OLD_MAX_QPATH]; - int surfflags; - int contents; -} dq3shader_t; - -typedef struct -{ - float n[3]; - float d; -} Q3PLANE_t; - -struct Q3MODEL -{ - float mins[3]; - float maxs[3]; - int firstsurface; - int num_surfaces; - int firstbrush; - int num_brushes; -}; - - -typedef struct -{ - float point[3]; - float texcoords[2][2]; - float normal[3]; - unsigned char color[4]; -} q3dvertex_t; - -typedef struct -{ - float point[3]; - float stcoords[2]; - float lmtexcoords[RBSP_STYLESPERSURF][2]; - float normal[3]; - unsigned char color[RBSP_STYLESPERSURF][4]; -} rbspvertex_t; - -struct Q3FOG -{ - char shadername[OLD_MAX_QPATH] ; - int brushnum; - int visibleside; -}; - -enum q3surfacetype -{ - MST_BAD=0, - MST_PLANAR=1, - MST_PATCH=2, - MST_TRIANGLE_SOUP=3, - MST_FLARE=4, - MST_FOLIAGE=5, //added in wolf/et - MST_PATCH_FIXED=256 //fte, fixed tessellation. Uses high parts of surf->patchwidth/height. if 0 then uses exact CPs instead. -}; - -typedef struct -{ - int shadernum; - int fognum; - int facetype; - int firstvertex; - int num_vertices; - int firstindex; - int num_indexes; - int lightmapnum; - int lightmap_offs[2]; - int lightmap_width; - int lightmap_height; - float lightmap_origin[3]; - float lightmap_vecs[2][3]; - float normal[3]; - int patchwidth; - int patchheight; -} q3dface_t; - -typedef struct -{ - int shadernum; - int fognum; - int facetype; - int firstvertex; - int num_vertices; - int firstindex; - int num_indexes; - unsigned char lm_styles[RBSP_STYLESPERSURF]; - unsigned char vt_styles[RBSP_STYLESPERSURF]; - int lightmapnum[RBSP_STYLESPERSURF]; - int lightmap_offs[2][RBSP_STYLESPERSURF]; //yes, weird ordering. - int lightmap_width; - int lightmap_height; - float lightmap_origin[3]; - float lightmap_vecs[2][3]; - float normal[3]; - int patchwidth; - int patchheight; -} rbspface_t; - -#define MAX_ENT_LEAFS 32 -typedef struct pvscache_s -{ - int num_leafs; - unsigned int leafnums[MAX_ENT_LEAFS]; -#if defined(Q2BSPS) || defined(Q3BSPS) || defined(TERRAIN) - int areanum; //q2bsp - int areanum2; //q2bsp - int headnode; //q2bsp -#endif -} pvscache_t;