]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - bspfile.h
Upgrade doxygen version, add better implementations, sidebar added (#20)
[xonotic/darkplaces.git] / bspfile.h
index 77e9dcef27a101b55628956fd25e75de5cd5b3d4..1341b9e07aa8c470b6eb92e5860afb223ed4dfcc 100644 (file)
--- a/bspfile.h
+++ b/bspfile.h
@@ -18,19 +18,18 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 */
 
+#ifndef BSPFILE_H
+#define BSPFILE_H
 
-#define        MAX_MAP_HULLS           16              // was 4
-#define        MAX_MAP_LEAFS           65536   // was 8192
-
-// key / value pair sizes
-
-#define        MAX_KEY         32
-#define        MAX_VALUE       1024
+#define MAX_MAP_HULLS 16 // Q1BSP has 4, Hexen2 Q1BSP has 8, MCBSP has 16
 
 //=============================================================================
 
 
 #define BSPVERSION     29
+#define HLBSPVERSION 30
+#define _2PSBVERSION ('2' + 'P' * 256 + 'S' * 65536 + 'B' * 16777216)
+#define BSP2VERSION ('B' + 'S' * 256 + 'P' * 65536 + '2' * 16777216)
 
 typedef struct lump_s
 {
@@ -60,6 +59,16 @@ typedef struct hullinfo_s
        float           hullsizes[MAX_MAP_HULLS][2][3];
 } hullinfo_t;
 
+typedef struct mmodel_s
+{
+       float           mins[3], maxs[3];
+       float           origin[3];
+       int                     headnode[MAX_MAP_HULLS];
+       int                     visleafs;               // not including the solid leaf 0
+       int                     firstface, numfaces;
+} mmodel_t;
+
+/*
 // WARNING: this struct does NOT match q1bsp's disk format because MAX_MAP_HULLS has been changed by Sajt's MCBSP code, this struct is only being used in memory as a result
 typedef struct dmodel_s
 {
@@ -81,8 +90,10 @@ typedef struct dmiptexlump_s
        int                     nummiptex;
        int                     dataofs[4];             // [nummiptex]
 } dmiptexlump_t;
+*/
 
 #define        MIPLEVELS       4
+/*
 typedef struct miptex_s
 {
        char            name[16];
@@ -95,6 +106,7 @@ typedef struct dvertex_s
 {
        float   point[3];
 } dvertex_t;
+*/
 
 
 // 0-2 are axial planes
@@ -107,12 +119,14 @@ typedef struct dvertex_s
 #define        PLANE_ANYY              4
 #define        PLANE_ANYZ              5
 
+/*
 typedef struct dplane_s
 {
        float   normal[3];
        float   dist;
        int             type;           // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate
 } dplane_t;
+*/
 
 
 // contents values in Q1 maps
@@ -169,6 +183,7 @@ typedef struct dplane_s
 #define CONTENTSQ3_JUMPPAD                     0x00080000 // hint for Q3's bots
 #define CONTENTSQ3_CLUSTERPORTAL       0x00100000 // hint for Q3's bots
 #define CONTENTSQ3_DONOTENTER          0x00200000 // hint for Q3's bots
+#define CONTENTSQ3_BOTCLIP                     0x00400000 // hint for Q3's bots
 #define CONTENTSQ3_ORIGIN                      0x01000000 // used by origin brushes to indicate origin of bmodel (removed by map compiler)
 #define CONTENTSQ3_BODY                                0x02000000 // used by bbox entities (should never be on a brush)
 #define CONTENTSQ3_CORPSE                      0x04000000 // used by dead bodies (SOLID_CORPSE in darkplaces)
@@ -189,7 +204,19 @@ typedef struct dplane_s
 #define SUPERCONTENTS_PLAYERCLIP       0x00000100
 #define SUPERCONTENTS_MONSTERCLIP      0x00000200
 #define SUPERCONTENTS_DONOTENTER       0x00000400
+#define SUPERCONTENTS_BOTCLIP          0x00000800
+#define SUPERCONTENTS_OPAQUE           0x00001000
+// TODO: is there any reason to define:
+//   fog?
+//   areaportal?
+//   teleporter?
+//   jumppad?
+//   clusterportal?
+//   detail?         (div0) no, game code should not be allowed to differentiate between structural and detail
+//   structural?     (div0) no, game code should not be allowed to differentiate between structural and detail
+//   trigger?        (div0) no, as these are always solid anyway, and that's all that matters for trigger brushes
 #define SUPERCONTENTS_LIQUIDSMASK      (SUPERCONTENTS_LAVA | SUPERCONTENTS_SLIME | SUPERCONTENTS_WATER)
+#define SUPERCONTENTS_VISBLOCKERMASK   SUPERCONTENTS_OPAQUE
 
 /*
 #define SUPERCONTENTS_DEADMONSTER      0x00000000
@@ -216,7 +243,7 @@ typedef struct dplane_s
 #define SUPERCONTENTS_WINDOW           0x00000000
 */
 
-
+/*
 typedef struct dnode_s
 {
        int                     planenum;
@@ -240,19 +267,23 @@ typedef struct texinfo_s
        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 dedge_s
 {
        unsigned short  v[2];           // vertex numbers
 } dedge_t;
+*/
 
 #define        MAXLIGHTMAPS    4
+/*
 typedef struct dface_s
 {
-       // LordHavoc: changed from short to unsigned short for q2 support
+       // LadyHavoc: changed from short to unsigned short for q2 support
        unsigned short  planenum;
        short           side;
 
@@ -264,6 +295,7 @@ typedef struct dface_s
        unsigned char           styles[MAXLIGHTMAPS];
        int                     lightofs;               // start of [numstyles*surfsize] samples
 } dface_t;
+*/
 
 
 
@@ -276,6 +308,7 @@ typedef struct dface_s
 
 // leaf 0 is the generic CONTENTS_SOLID leaf, used for all solid areas
 // all other leafs need visibility info
+/*
 typedef struct dleaf_s
 {
        int                     contents;
@@ -289,4 +322,6 @@ typedef struct dleaf_s
 
        unsigned char           ambient_level[NUM_AMBIENTS];
 } dleaf_t;
+*/
 
+#endif