Itsa me, quake3io!
This commit is contained in:
parent
dbe4ddb103
commit
5b755058f5
1409 changed files with 798983 additions and 798983 deletions
730
code/bspc/sinfiles.h
Normal file → Executable file
730
code/bspc/sinfiles.h
Normal file → Executable file
|
@ -1,365 +1,365 @@
|
|||
/*
|
||||
===========================================================================
|
||||
Copyright (C) 1999-2005 Id Software, Inc.
|
||||
|
||||
This file is part of Quake III Arena source code.
|
||||
|
||||
Quake III Arena source code 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.
|
||||
|
||||
Quake III Arena source code 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 Foobar; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
===========================================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
.BSP file format
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#define SIN
|
||||
|
||||
#define SINBSPVERSION 41
|
||||
|
||||
// upper design bounds
|
||||
// leaffaces, leafbrushes, planes, and verts are still bounded by
|
||||
// 16 bit short limits
|
||||
#define SIN_MAX_MAP_MODELS 1024
|
||||
#define SIN_MAX_MAP_BRUSHES 8192
|
||||
#define SIN_MAX_MAP_ENTITIES 2048
|
||||
#define SIN_MAX_MAP_ENTSTRING 0x40000
|
||||
#define SIN_MAX_MAP_TEXINFO 8192
|
||||
|
||||
#define SIN_MAX_MAP_AREAS 256
|
||||
#define SIN_MAX_MAP_AREAPORTALS 1024
|
||||
#define SIN_MAX_MAP_PLANES 65536
|
||||
#define SIN_MAX_MAP_NODES 65536
|
||||
#define SIN_MAX_MAP_BRUSHSIDES 65536
|
||||
#define SIN_MAX_MAP_LEAFS 65536
|
||||
#define SIN_MAX_MAP_VERTS 65536
|
||||
#define SIN_MAX_MAP_FACES 65536
|
||||
#define SIN_MAX_MAP_LEAFFACES 65536
|
||||
#define SIN_MAX_MAP_LEAFBRUSHES 65536
|
||||
#define SIN_MAX_MAP_PORTALS 65536
|
||||
#define SIN_MAX_MAP_EDGES 128000
|
||||
#define SIN_MAX_MAP_SURFEDGES 256000
|
||||
#define SIN_MAX_MAP_LIGHTING 0x320000
|
||||
#define SIN_MAX_MAP_VISIBILITY 0x280000
|
||||
|
||||
#ifdef SIN
|
||||
#define SIN_MAX_MAP_LIGHTINFO 8192
|
||||
#endif
|
||||
|
||||
#ifdef SIN
|
||||
#undef SIN_MAX_MAP_LIGHTING //undef the Quake2 bsp version
|
||||
#define SIN_MAX_MAP_LIGHTING 0x300000
|
||||
#endif
|
||||
|
||||
#ifdef SIN
|
||||
#undef SIN_MAX_MAP_VISIBILITY //undef the Quake2 bsp version
|
||||
#define SIN_MAX_MAP_VISIBILITY 0x280000
|
||||
#endif
|
||||
|
||||
//=============================================================================
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int fileofs, filelen;
|
||||
} sin_lump_t;
|
||||
|
||||
#define SIN_LUMP_ENTITIES 0
|
||||
#define SIN_LUMP_PLANES 1
|
||||
#define SIN_LUMP_VERTEXES 2
|
||||
#define SIN_LUMP_VISIBILITY 3
|
||||
#define SIN_LUMP_NODES 4
|
||||
#define SIN_LUMP_TEXINFO 5
|
||||
#define SIN_LUMP_FACES 6
|
||||
#define SIN_LUMP_LIGHTING 7
|
||||
#define SIN_LUMP_LEAFS 8
|
||||
#define SIN_LUMP_LEAFFACES 9
|
||||
#define SIN_LUMP_LEAFBRUSHES 10
|
||||
#define SIN_LUMP_EDGES 11
|
||||
#define SIN_LUMP_SURFEDGES 12
|
||||
#define SIN_LUMP_MODELS 13
|
||||
#define SIN_LUMP_BRUSHES 14
|
||||
#define SIN_LUMP_BRUSHSIDES 15
|
||||
#define SIN_LUMP_POP 16
|
||||
#define SIN_LUMP_AREAS 17
|
||||
#define SIN_LUMP_AREAPORTALS 18
|
||||
|
||||
#ifdef SIN
|
||||
#define SIN_LUMP_LIGHTINFO 19
|
||||
#define SINHEADER_LUMPS 20
|
||||
#endif
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int ident;
|
||||
int version;
|
||||
sin_lump_t lumps[SINHEADER_LUMPS];
|
||||
} sin_dheader_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
|
||||
} sin_dmodel_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float point[3];
|
||||
} sin_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
|
||||
|
||||
// planes (x&~1) and (x&~1)+1 are allways opposites
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float normal[3];
|
||||
float dist;
|
||||
int type; // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate
|
||||
} sin_dplane_t;
|
||||
|
||||
|
||||
// contents flags are seperate bits
|
||||
// a given brush can contribute multiple content bits
|
||||
// multiple brushes can be in a single leaf
|
||||
|
||||
// these definitions also need to be in q_shared.h!
|
||||
|
||||
// lower bits are stronger, and will eat weaker brushes completely
|
||||
#ifdef SIN
|
||||
#define CONTENTS_FENCE 4
|
||||
#endif
|
||||
// remaining contents are non-visible, and don't eat brushes
|
||||
|
||||
#ifdef SIN
|
||||
#define CONTENTS_DUMMYFENCE 0x1000
|
||||
#endif
|
||||
|
||||
#ifdef SIN
|
||||
#define SURF_MASKED 0x2 // surface texture is masked
|
||||
#endif
|
||||
|
||||
#define SURF_SKY 0x4 // don't draw, but add to skybox
|
||||
#define SURF_WARP 0x8 // turbulent water warp
|
||||
|
||||
#ifdef SIN
|
||||
#define SURF_NONLIT 0x10 // surface is not lit
|
||||
#define SURF_NOFILTER 0x20 // surface is not bi-linear filtered
|
||||
#endif
|
||||
|
||||
#define SURF_FLOWING 0x40 // scroll towards angle
|
||||
#define SURF_NODRAW 0x80 // don't bother referencing the texture
|
||||
|
||||
#define SURF_HINT 0x100 // make a primary bsp splitter
|
||||
#define SURF_SKIP 0x200 // completely ignore, allowing non-closed brushes
|
||||
|
||||
#ifdef SIN
|
||||
#define SURF_CONVEYOR 0x40 // surface is not lit
|
||||
#endif
|
||||
|
||||
#ifdef SIN
|
||||
#define SURF_WAVY 0x400 // surface has waves
|
||||
#define SURF_RICOCHET 0x800 // projectiles bounce literally bounce off this surface
|
||||
#define SURF_PRELIT 0x1000 // surface has intensity information for pre-lighting
|
||||
#define SURF_MIRROR 0x2000 // surface is a mirror
|
||||
#define SURF_CONSOLE 0x4000 // surface is a console
|
||||
#define SURF_USECOLOR 0x8000 // surface is lit with non-lit * color
|
||||
#define SURF_HARDWAREONLY 0x10000 // surface has been damaged
|
||||
#define SURF_DAMAGE 0x20000 // surface can be damaged
|
||||
#define SURF_WEAK 0x40000 // surface has weak hit points
|
||||
#define SURF_NORMAL 0x80000 // surface has normal hit points
|
||||
#define SURF_ADD 0x100000 // surface will be additive
|
||||
#define SURF_ENVMAPPED 0x200000 // surface is envmapped
|
||||
#define SURF_RANDOMANIMATE 0x400000 // surface start animating on a random frame
|
||||
#define SURF_ANIMATE 0x800000 // surface animates
|
||||
#define SURF_RNDTIME 0x1000000 // time between animations is random
|
||||
#define SURF_TRANSLATE 0x2000000 // surface translates
|
||||
#define SURF_NOMERGE 0x4000000 // surface is not merged in csg phase
|
||||
#define SURF_TYPE_BIT0 0x8000000 // 0 bit of surface type
|
||||
#define SURF_TYPE_BIT1 0x10000000 // 1 bit of surface type
|
||||
#define SURF_TYPE_BIT2 0x20000000 // 2 bit of surface type
|
||||
#define SURF_TYPE_BIT3 0x40000000 // 3 bit of surface type
|
||||
|
||||
#define SURF_START_BIT 27
|
||||
#define SURFACETYPE_FROM_FLAGS( x ) ( ( x >> (SURF_START_BIT) ) & 0xf )
|
||||
|
||||
|
||||
#define SURF_TYPE_SHIFT(x) ( (x) << (SURF_START_BIT) ) // macro for getting proper bit mask
|
||||
|
||||
#define SURF_TYPE_NONE SURF_TYPE_SHIFT(0)
|
||||
#define SURF_TYPE_WOOD SURF_TYPE_SHIFT(1)
|
||||
#define SURF_TYPE_METAL SURF_TYPE_SHIFT(2)
|
||||
#define SURF_TYPE_STONE SURF_TYPE_SHIFT(3)
|
||||
#define SURF_TYPE_CONCRETE SURF_TYPE_SHIFT(4)
|
||||
#define SURF_TYPE_DIRT SURF_TYPE_SHIFT(5)
|
||||
#define SURF_TYPE_FLESH SURF_TYPE_SHIFT(6)
|
||||
#define SURF_TYPE_GRILL SURF_TYPE_SHIFT(7)
|
||||
#define SURF_TYPE_GLASS SURF_TYPE_SHIFT(8)
|
||||
#define SURF_TYPE_FABRIC SURF_TYPE_SHIFT(9)
|
||||
#define SURF_TYPE_MONITOR SURF_TYPE_SHIFT(10)
|
||||
#define SURF_TYPE_GRAVEL SURF_TYPE_SHIFT(11)
|
||||
#define SURF_TYPE_VEGETATION SURF_TYPE_SHIFT(12)
|
||||
#define SURF_TYPE_PAPER SURF_TYPE_SHIFT(13)
|
||||
#define SURF_TYPE_DUCT SURF_TYPE_SHIFT(14)
|
||||
#define SURF_TYPE_WATER SURF_TYPE_SHIFT(15)
|
||||
#endif
|
||||
|
||||
|
||||
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
|
||||
} sin_dnode_t;
|
||||
|
||||
#ifdef SIN
|
||||
|
||||
typedef struct sin_lightvalue_s
|
||||
{
|
||||
int value; // light emission, etc
|
||||
vec3_t color;
|
||||
float direct;
|
||||
float directangle;
|
||||
float directstyle;
|
||||
char directstylename[32];
|
||||
} sin_lightvalue_t;
|
||||
|
||||
typedef struct sin_texinfo_s
|
||||
{
|
||||
float vecs[2][4]; // [s/t][xyz offset]
|
||||
int flags; // miptex flags + overrides
|
||||
char texture[64]; // texture name (textures/*.wal)
|
||||
int nexttexinfo; // for animations, -1 = end of chain
|
||||
float trans_mag;
|
||||
int trans_angle;
|
||||
int base_angle;
|
||||
float animtime;
|
||||
float nonlit;
|
||||
float translucence;
|
||||
float friction;
|
||||
float restitution;
|
||||
vec3_t color;
|
||||
char groupname[32];
|
||||
} sin_texinfo_t;
|
||||
|
||||
#endif //SIN
|
||||
|
||||
// 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
|
||||
} sin_dedge_t;
|
||||
|
||||
#ifdef MAXLIGHTMAPS
|
||||
#undef MAXLIGHTMAPS
|
||||
#endif
|
||||
#define MAXLIGHTMAPS 16
|
||||
typedef struct
|
||||
{
|
||||
unsigned short planenum;
|
||||
short side;
|
||||
|
||||
int firstedge; // we must support > 64k edges
|
||||
short numedges;
|
||||
short texinfo;
|
||||
|
||||
// lighting info
|
||||
byte styles[MAXLIGHTMAPS];
|
||||
int lightofs; // start of [numstyles*surfsize] samples
|
||||
#ifdef SIN
|
||||
int lightinfo;
|
||||
#endif
|
||||
} sin_dface_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;
|
||||
} sin_dleaf_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned short planenum; // facing out of the leaf
|
||||
short texinfo;
|
||||
#ifdef SIN
|
||||
int lightinfo;
|
||||
#endif
|
||||
} sin_dbrushside_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int firstside;
|
||||
int numsides;
|
||||
int contents;
|
||||
} sin_dbrush_t;
|
||||
|
||||
#define ANGLE_UP -1
|
||||
#define ANGLE_DOWN -2
|
||||
|
||||
|
||||
// the visibility lump consists of a header with a count, then
|
||||
// byte 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]
|
||||
} sin_dvis_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;
|
||||
} sin_dareaportal_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int numareaportals;
|
||||
int firstareaportal;
|
||||
} sin_darea_t;
|
||||
/*
|
||||
===========================================================================
|
||||
Copyright (C) 1999-2005 Id Software, Inc.
|
||||
|
||||
This file is part of Quake III Arena source code.
|
||||
|
||||
Quake III Arena source code 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.
|
||||
|
||||
Quake III Arena source code 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 Foobar; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
===========================================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
.BSP file format
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#define SIN
|
||||
|
||||
#define SINBSPVERSION 41
|
||||
|
||||
// upper design bounds
|
||||
// leaffaces, leafbrushes, planes, and verts are still bounded by
|
||||
// 16 bit short limits
|
||||
#define SIN_MAX_MAP_MODELS 1024
|
||||
#define SIN_MAX_MAP_BRUSHES 8192
|
||||
#define SIN_MAX_MAP_ENTITIES 2048
|
||||
#define SIN_MAX_MAP_ENTSTRING 0x40000
|
||||
#define SIN_MAX_MAP_TEXINFO 8192
|
||||
|
||||
#define SIN_MAX_MAP_AREAS 256
|
||||
#define SIN_MAX_MAP_AREAPORTALS 1024
|
||||
#define SIN_MAX_MAP_PLANES 65536
|
||||
#define SIN_MAX_MAP_NODES 65536
|
||||
#define SIN_MAX_MAP_BRUSHSIDES 65536
|
||||
#define SIN_MAX_MAP_LEAFS 65536
|
||||
#define SIN_MAX_MAP_VERTS 65536
|
||||
#define SIN_MAX_MAP_FACES 65536
|
||||
#define SIN_MAX_MAP_LEAFFACES 65536
|
||||
#define SIN_MAX_MAP_LEAFBRUSHES 65536
|
||||
#define SIN_MAX_MAP_PORTALS 65536
|
||||
#define SIN_MAX_MAP_EDGES 128000
|
||||
#define SIN_MAX_MAP_SURFEDGES 256000
|
||||
#define SIN_MAX_MAP_LIGHTING 0x320000
|
||||
#define SIN_MAX_MAP_VISIBILITY 0x280000
|
||||
|
||||
#ifdef SIN
|
||||
#define SIN_MAX_MAP_LIGHTINFO 8192
|
||||
#endif
|
||||
|
||||
#ifdef SIN
|
||||
#undef SIN_MAX_MAP_LIGHTING //undef the Quake2 bsp version
|
||||
#define SIN_MAX_MAP_LIGHTING 0x300000
|
||||
#endif
|
||||
|
||||
#ifdef SIN
|
||||
#undef SIN_MAX_MAP_VISIBILITY //undef the Quake2 bsp version
|
||||
#define SIN_MAX_MAP_VISIBILITY 0x280000
|
||||
#endif
|
||||
|
||||
//=============================================================================
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int fileofs, filelen;
|
||||
} sin_lump_t;
|
||||
|
||||
#define SIN_LUMP_ENTITIES 0
|
||||
#define SIN_LUMP_PLANES 1
|
||||
#define SIN_LUMP_VERTEXES 2
|
||||
#define SIN_LUMP_VISIBILITY 3
|
||||
#define SIN_LUMP_NODES 4
|
||||
#define SIN_LUMP_TEXINFO 5
|
||||
#define SIN_LUMP_FACES 6
|
||||
#define SIN_LUMP_LIGHTING 7
|
||||
#define SIN_LUMP_LEAFS 8
|
||||
#define SIN_LUMP_LEAFFACES 9
|
||||
#define SIN_LUMP_LEAFBRUSHES 10
|
||||
#define SIN_LUMP_EDGES 11
|
||||
#define SIN_LUMP_SURFEDGES 12
|
||||
#define SIN_LUMP_MODELS 13
|
||||
#define SIN_LUMP_BRUSHES 14
|
||||
#define SIN_LUMP_BRUSHSIDES 15
|
||||
#define SIN_LUMP_POP 16
|
||||
#define SIN_LUMP_AREAS 17
|
||||
#define SIN_LUMP_AREAPORTALS 18
|
||||
|
||||
#ifdef SIN
|
||||
#define SIN_LUMP_LIGHTINFO 19
|
||||
#define SINHEADER_LUMPS 20
|
||||
#endif
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int ident;
|
||||
int version;
|
||||
sin_lump_t lumps[SINHEADER_LUMPS];
|
||||
} sin_dheader_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
|
||||
} sin_dmodel_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float point[3];
|
||||
} sin_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
|
||||
|
||||
// planes (x&~1) and (x&~1)+1 are allways opposites
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float normal[3];
|
||||
float dist;
|
||||
int type; // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate
|
||||
} sin_dplane_t;
|
||||
|
||||
|
||||
// contents flags are seperate bits
|
||||
// a given brush can contribute multiple content bits
|
||||
// multiple brushes can be in a single leaf
|
||||
|
||||
// these definitions also need to be in q_shared.h!
|
||||
|
||||
// lower bits are stronger, and will eat weaker brushes completely
|
||||
#ifdef SIN
|
||||
#define CONTENTS_FENCE 4
|
||||
#endif
|
||||
// remaining contents are non-visible, and don't eat brushes
|
||||
|
||||
#ifdef SIN
|
||||
#define CONTENTS_DUMMYFENCE 0x1000
|
||||
#endif
|
||||
|
||||
#ifdef SIN
|
||||
#define SURF_MASKED 0x2 // surface texture is masked
|
||||
#endif
|
||||
|
||||
#define SURF_SKY 0x4 // don't draw, but add to skybox
|
||||
#define SURF_WARP 0x8 // turbulent water warp
|
||||
|
||||
#ifdef SIN
|
||||
#define SURF_NONLIT 0x10 // surface is not lit
|
||||
#define SURF_NOFILTER 0x20 // surface is not bi-linear filtered
|
||||
#endif
|
||||
|
||||
#define SURF_FLOWING 0x40 // scroll towards angle
|
||||
#define SURF_NODRAW 0x80 // don't bother referencing the texture
|
||||
|
||||
#define SURF_HINT 0x100 // make a primary bsp splitter
|
||||
#define SURF_SKIP 0x200 // completely ignore, allowing non-closed brushes
|
||||
|
||||
#ifdef SIN
|
||||
#define SURF_CONVEYOR 0x40 // surface is not lit
|
||||
#endif
|
||||
|
||||
#ifdef SIN
|
||||
#define SURF_WAVY 0x400 // surface has waves
|
||||
#define SURF_RICOCHET 0x800 // projectiles bounce literally bounce off this surface
|
||||
#define SURF_PRELIT 0x1000 // surface has intensity information for pre-lighting
|
||||
#define SURF_MIRROR 0x2000 // surface is a mirror
|
||||
#define SURF_CONSOLE 0x4000 // surface is a console
|
||||
#define SURF_USECOLOR 0x8000 // surface is lit with non-lit * color
|
||||
#define SURF_HARDWAREONLY 0x10000 // surface has been damaged
|
||||
#define SURF_DAMAGE 0x20000 // surface can be damaged
|
||||
#define SURF_WEAK 0x40000 // surface has weak hit points
|
||||
#define SURF_NORMAL 0x80000 // surface has normal hit points
|
||||
#define SURF_ADD 0x100000 // surface will be additive
|
||||
#define SURF_ENVMAPPED 0x200000 // surface is envmapped
|
||||
#define SURF_RANDOMANIMATE 0x400000 // surface start animating on a random frame
|
||||
#define SURF_ANIMATE 0x800000 // surface animates
|
||||
#define SURF_RNDTIME 0x1000000 // time between animations is random
|
||||
#define SURF_TRANSLATE 0x2000000 // surface translates
|
||||
#define SURF_NOMERGE 0x4000000 // surface is not merged in csg phase
|
||||
#define SURF_TYPE_BIT0 0x8000000 // 0 bit of surface type
|
||||
#define SURF_TYPE_BIT1 0x10000000 // 1 bit of surface type
|
||||
#define SURF_TYPE_BIT2 0x20000000 // 2 bit of surface type
|
||||
#define SURF_TYPE_BIT3 0x40000000 // 3 bit of surface type
|
||||
|
||||
#define SURF_START_BIT 27
|
||||
#define SURFACETYPE_FROM_FLAGS( x ) ( ( x >> (SURF_START_BIT) ) & 0xf )
|
||||
|
||||
|
||||
#define SURF_TYPE_SHIFT(x) ( (x) << (SURF_START_BIT) ) // macro for getting proper bit mask
|
||||
|
||||
#define SURF_TYPE_NONE SURF_TYPE_SHIFT(0)
|
||||
#define SURF_TYPE_WOOD SURF_TYPE_SHIFT(1)
|
||||
#define SURF_TYPE_METAL SURF_TYPE_SHIFT(2)
|
||||
#define SURF_TYPE_STONE SURF_TYPE_SHIFT(3)
|
||||
#define SURF_TYPE_CONCRETE SURF_TYPE_SHIFT(4)
|
||||
#define SURF_TYPE_DIRT SURF_TYPE_SHIFT(5)
|
||||
#define SURF_TYPE_FLESH SURF_TYPE_SHIFT(6)
|
||||
#define SURF_TYPE_GRILL SURF_TYPE_SHIFT(7)
|
||||
#define SURF_TYPE_GLASS SURF_TYPE_SHIFT(8)
|
||||
#define SURF_TYPE_FABRIC SURF_TYPE_SHIFT(9)
|
||||
#define SURF_TYPE_MONITOR SURF_TYPE_SHIFT(10)
|
||||
#define SURF_TYPE_GRAVEL SURF_TYPE_SHIFT(11)
|
||||
#define SURF_TYPE_VEGETATION SURF_TYPE_SHIFT(12)
|
||||
#define SURF_TYPE_PAPER SURF_TYPE_SHIFT(13)
|
||||
#define SURF_TYPE_DUCT SURF_TYPE_SHIFT(14)
|
||||
#define SURF_TYPE_WATER SURF_TYPE_SHIFT(15)
|
||||
#endif
|
||||
|
||||
|
||||
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
|
||||
} sin_dnode_t;
|
||||
|
||||
#ifdef SIN
|
||||
|
||||
typedef struct sin_lightvalue_s
|
||||
{
|
||||
int value; // light emission, etc
|
||||
vec3_t color;
|
||||
float direct;
|
||||
float directangle;
|
||||
float directstyle;
|
||||
char directstylename[32];
|
||||
} sin_lightvalue_t;
|
||||
|
||||
typedef struct sin_texinfo_s
|
||||
{
|
||||
float vecs[2][4]; // [s/t][xyz offset]
|
||||
int flags; // miptex flags + overrides
|
||||
char texture[64]; // texture name (textures/*.wal)
|
||||
int nexttexinfo; // for animations, -1 = end of chain
|
||||
float trans_mag;
|
||||
int trans_angle;
|
||||
int base_angle;
|
||||
float animtime;
|
||||
float nonlit;
|
||||
float translucence;
|
||||
float friction;
|
||||
float restitution;
|
||||
vec3_t color;
|
||||
char groupname[32];
|
||||
} sin_texinfo_t;
|
||||
|
||||
#endif //SIN
|
||||
|
||||
// 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
|
||||
} sin_dedge_t;
|
||||
|
||||
#ifdef MAXLIGHTMAPS
|
||||
#undef MAXLIGHTMAPS
|
||||
#endif
|
||||
#define MAXLIGHTMAPS 16
|
||||
typedef struct
|
||||
{
|
||||
unsigned short planenum;
|
||||
short side;
|
||||
|
||||
int firstedge; // we must support > 64k edges
|
||||
short numedges;
|
||||
short texinfo;
|
||||
|
||||
// lighting info
|
||||
byte styles[MAXLIGHTMAPS];
|
||||
int lightofs; // start of [numstyles*surfsize] samples
|
||||
#ifdef SIN
|
||||
int lightinfo;
|
||||
#endif
|
||||
} sin_dface_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;
|
||||
} sin_dleaf_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned short planenum; // facing out of the leaf
|
||||
short texinfo;
|
||||
#ifdef SIN
|
||||
int lightinfo;
|
||||
#endif
|
||||
} sin_dbrushside_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int firstside;
|
||||
int numsides;
|
||||
int contents;
|
||||
} sin_dbrush_t;
|
||||
|
||||
#define ANGLE_UP -1
|
||||
#define ANGLE_DOWN -2
|
||||
|
||||
|
||||
// the visibility lump consists of a header with a count, then
|
||||
// byte 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]
|
||||
} sin_dvis_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;
|
||||
} sin_dareaportal_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int numareaportals;
|
||||
int firstareaportal;
|
||||
} sin_darea_t;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue