home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 14 / MA_Cover_14.iso / source / c / q1source_amy / qw / client / bspfile.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-12-21  |  5.8 KB  |  272 lines

  1. /*
  2. Copyright (C) 1996-1997 Id Software, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  12.  
  13. See the GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. */
  20.  
  21.  
  22. // upper design bounds
  23.  
  24. #define    MAX_MAP_HULLS        4
  25.  
  26. #define    MAX_MAP_MODELS        256
  27. #define    MAX_MAP_BRUSHES        4096
  28. #define    MAX_MAP_ENTITIES    1024
  29. #define    MAX_MAP_ENTSTRING    65536
  30.  
  31. #define    MAX_MAP_PLANES        8192
  32. #define    MAX_MAP_NODES        32767        // because negative shorts are contents
  33. #define    MAX_MAP_CLIPNODES    32767        //
  34. #define    MAX_MAP_LEAFS        32767        // 
  35. #define    MAX_MAP_VERTS        65535
  36. #define    MAX_MAP_FACES        65535
  37. #define    MAX_MAP_MARKSURFACES 65535
  38. #define    MAX_MAP_TEXINFO        4096
  39. #define    MAX_MAP_EDGES        256000
  40. #define    MAX_MAP_SURFEDGES    512000
  41. #define    MAX_MAP_MIPTEX        0x200000
  42. #define    MAX_MAP_LIGHTING    0x100000
  43. #define    MAX_MAP_VISIBILITY    0x100000
  44.  
  45. // key / value pair sizes
  46.  
  47. #define    MAX_KEY        32
  48. #define    MAX_VALUE    1024
  49.  
  50.  
  51. //=============================================================================
  52.  
  53.  
  54. #define BSPVERSION    29
  55.  
  56. typedef struct
  57. {
  58.     int        fileofs, filelen;
  59. } lump_t;
  60.  
  61. #define    LUMP_ENTITIES    0
  62. #define    LUMP_PLANES        1
  63. #define    LUMP_TEXTURES    2
  64. #define    LUMP_VERTEXES    3
  65. #define    LUMP_VISIBILITY    4
  66. #define    LUMP_NODES        5
  67. #define    LUMP_TEXINFO    6
  68. #define    LUMP_FACES        7
  69. #define    LUMP_LIGHTING    8
  70. #define    LUMP_CLIPNODES    9
  71. #define    LUMP_LEAFS        10
  72. #define    LUMP_MARKSURFACES 11
  73. #define    LUMP_EDGES        12
  74. #define    LUMP_SURFEDGES    13
  75. #define    LUMP_MODELS        14
  76.  
  77. #define    HEADER_LUMPS    15
  78.  
  79. typedef struct
  80. {
  81.     float        mins[3], maxs[3];
  82.     float        origin[3];
  83.     int            headnode[MAX_MAP_HULLS];
  84.     int            visleafs;        // not including the solid leaf 0
  85.     int            firstface, numfaces;
  86. } dmodel_t;
  87.  
  88. typedef struct
  89. {
  90.     int            version;    
  91.     lump_t        lumps[HEADER_LUMPS];
  92. } dheader_t;
  93.  
  94. typedef struct
  95. {
  96.     int            nummiptex;
  97.     int            dataofs[4];        // [nummiptex]
  98. } dmiptexlump_t;
  99.  
  100. #define    MIPLEVELS    4
  101. typedef struct miptex_s
  102. {
  103.     char        name[16];
  104.     unsigned    width, height;
  105.     unsigned    offsets[MIPLEVELS];        // four mip maps stored
  106. } miptex_t;
  107.  
  108.  
  109. typedef struct
  110. {
  111.     float    point[3];
  112. } dvertex_t;
  113.  
  114.  
  115. // 0-2 are axial planes
  116. #define    PLANE_X            0
  117. #define    PLANE_Y            1
  118. #define    PLANE_Z            2
  119.  
  120. // 3-5 are non-axial planes snapped to the nearest
  121. #define    PLANE_ANYX        3
  122. #define    PLANE_ANYY        4
  123. #define    PLANE_ANYZ        5
  124.  
  125. typedef struct
  126. {
  127.     float    normal[3];
  128.     float    dist;
  129.     int        type;        // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate
  130. } dplane_t;
  131.  
  132.  
  133.  
  134. #define    CONTENTS_EMPTY        -1
  135. #define    CONTENTS_SOLID        -2
  136. #define    CONTENTS_WATER        -3
  137. #define    CONTENTS_SLIME        -4
  138. #define    CONTENTS_LAVA        -5
  139. #define    CONTENTS_SKY        -6
  140.  
  141. // !!! if this is changed, it must be changed in asm_i386.h too !!!
  142. typedef struct
  143. {
  144.     int            planenum;
  145.     short        children[2];    // negative numbers are -(leafs+1), not nodes
  146.     short        mins[3];        // for sphere culling
  147.     short        maxs[3];
  148.     unsigned short    firstface;
  149.     unsigned short    numfaces;    // counting both sides
  150. } dnode_t;
  151.  
  152. typedef struct
  153. {
  154.     int            planenum;
  155.     short        children[2];    // negative numbers are contents
  156. } dclipnode_t;
  157.  
  158.  
  159. typedef struct texinfo_s
  160. {
  161.     float        vecs[2][4];        // [s/t][xyz offset]
  162.     int            miptex;
  163.     int            flags;
  164. } texinfo_t;
  165. #define    TEX_SPECIAL        1        // sky or slime, no lightmap or 256 subdivision
  166.  
  167. // note that edge 0 is never used, because negative edge nums are used for
  168. // counterclockwise use of the edge in a face
  169. typedef struct
  170. {
  171.     unsigned short    v[2];        // vertex numbers
  172. } dedge_t;
  173.  
  174. #define    MAXLIGHTMAPS    4
  175. typedef struct
  176. {
  177.     short        planenum;
  178.     short        side;
  179.  
  180.     int            firstedge;        // we must support > 64k edges
  181.     short        numedges;    
  182.     short        texinfo;
  183.  
  184. // lighting info
  185.     byte        styles[MAXLIGHTMAPS];
  186.     int            lightofs;        // start of [numstyles*surfsize] samples
  187. } dface_t;
  188.  
  189.  
  190.  
  191. #define    AMBIENT_WATER    0
  192. #define    AMBIENT_SKY        1
  193. #define    AMBIENT_SLIME    2
  194. #define    AMBIENT_LAVA    3
  195.  
  196. #define    NUM_AMBIENTS            4        // automatic ambient sounds
  197.  
  198. // leaf 0 is the generic CONTENTS_SOLID leaf, used for all solid areas
  199. // all other leafs need visibility info
  200. typedef struct
  201. {
  202.     int            contents;
  203.     int            visofs;                // -1 = no visibility info
  204.  
  205.     short        mins[3];            // for frustum culling
  206.     short        maxs[3];
  207.  
  208.     unsigned short        firstmarksurface;
  209.     unsigned short        nummarksurfaces;
  210.  
  211.     byte        ambient_level[NUM_AMBIENTS];
  212. } dleaf_t;
  213.  
  214. //============================================================================
  215.  
  216. #ifndef QUAKE_GAME
  217.  
  218. // the utilities get to be lazy and just use large static arrays
  219.  
  220. extern    int            nummodels;
  221. extern    dmodel_t    dmodels[MAX_MAP_MODELS];
  222.  
  223. extern    int            visdatasize;
  224. extern    byte        dvisdata[MAX_MAP_VISIBILITY];
  225.  
  226. extern    int            lightdatasize;
  227. extern    byte        dlightdata[MAX_MAP_LIGHTING];
  228.  
  229. extern    int            texdatasize;
  230. extern    byte        dtexdata[MAX_MAP_MIPTEX]; // (dmiptexlump_t)
  231.  
  232. extern    int            entdatasize;
  233. extern    char        dentdata[MAX_MAP_ENTSTRING];
  234.  
  235. extern    int            numleafs;
  236. extern    dleaf_t        dleafs[MAX_MAP_LEAFS];
  237.  
  238. extern    int            numplanes;
  239. extern    dplane_t    dplanes[MAX_MAP_PLANES];
  240.  
  241. extern    int            numvertexes;
  242. extern    dvertex_t    dvertexes[MAX_MAP_VERTS];
  243.  
  244. extern    int            numnodes;
  245. extern    dnode_t        dnodes[MAX_MAP_NODES];
  246.  
  247. extern    int            numtexinfo;
  248. extern    texinfo_t    texinfo[MAX_MAP_TEXINFO];
  249.  
  250. extern    int            numfaces;
  251. extern    dface_t        dfaces[MAX_MAP_FACES];
  252.  
  253. extern    int            numclipnodes;
  254. extern    dclipnode_t    dclipnodes[MAX_MAP_CLIPNODES];
  255.  
  256. extern    int            numedges;
  257. extern    dedge_t        dedges[MAX_MAP_EDGES];
  258.  
  259. extern    int            nummarksurfaces;
  260. extern    unsigned short    dmarksurfaces[MAX_MAP_MARKSURFACES];
  261.  
  262. extern    int            numsurfedges;
  263. extern    int            dsurfedges[MAX_MAP_SURFEDGES];
  264.  
  265.  
  266.  
  267. void    LoadBSPFile (char *filename);
  268. void    WriteBSPFile (char *filename);
  269. void    PrintBSPFileSizes (void);
  270.  
  271. #endif
  272.