home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 December / PCWKCD1296.iso / sharewar / quake106 / utils / common / bspfile.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-09-12  |  5.1 KB  |  252 lines

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