aboutsummaryrefslogtreecommitdiffstats
path: root/code/bspc/sinfiles.h
diff options
context:
space:
mode:
Diffstat (limited to 'code/bspc/sinfiles.h')
-rwxr-xr-xcode/bspc/sinfiles.h365
1 files changed, 365 insertions, 0 deletions
diff --git a/code/bspc/sinfiles.h b/code/bspc/sinfiles.h
new file mode 100755
index 0000000..31091c5
--- /dev/null
+++ b/code/bspc/sinfiles.h
@@ -0,0 +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;