home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2007 September / maximum-cd-2007-09.iso / Assets / data / AssaultCube_v0.93.exe / source / src / world.h < prev    next >
Encoding:
C/C++ Source or Header  |  2007-06-01  |  2.4 KB  |  66 lines

  1. enum                            // block types, order matters!
  2. {
  3.     SOLID = 0,                  // entirely solid cube [only specifies wtex]
  4.     CORNER,                     // half full corner of a wall
  5.     FHF,                        // floor heightfield using neighbour vdelta values
  6.     CHF,                        // idem ceiling
  7.     SPACE,                      // entirely empty cube
  8.     SEMISOLID,                  // generated by mipmapping
  9.     MAXTYPE
  10. };
  11.  
  12. struct sqr
  13. {
  14.     uchar type;                 // one of the above
  15.     char floor, ceil;           // height, in cubes
  16.     uchar wtex, ftex, ctex;     // wall/floor/ceil texture ids
  17.     uchar r, g, b;              // light value at upper left vertex
  18.     uchar vdelta;               // vertex delta, used for heightfield cubes
  19.     char defer;                 // used in mipmapping, when true this cube is not a perfect mip
  20.     char occluded;              // true when occluded
  21.     uchar utex;                 // upper wall tex id
  22.     uchar tag;                  // used by triggers
  23. };
  24.  
  25. enum                            // hardcoded texture numbers
  26. {
  27.     DEFAULT_SKY = 0,
  28.     DEFAULT_LIQUID,
  29.     DEFAULT_WALL,
  30.     DEFAULT_FLOOR,
  31.     DEFAULT_CEIL
  32. };
  33.  
  34. #define MAPVERSION 6            // bump if map format changes, see worldio.cpp
  35.  
  36. struct header                   // map file format header
  37. {
  38.     char head[4];               // "CUBE"
  39.     int version;                // any >8bit quantity is little endian
  40.     int headersize;             // sizeof(header)
  41.     int sfactor;                // in bits
  42.     int numents;
  43.     char maptitle[128];
  44.     uchar texlists[3][256];
  45.     int waterlevel;
  46.     uchar watercolor[4];
  47.     int reserved[14];
  48. };
  49.  
  50. #define SWS(w,x,y,s) (&(w)[(y)*(s)+(x)])
  51. #define SW(w,x,y) SWS(w,x,y,ssize)
  52. #define S(x,y) SW(world,x,y)            // convenient lookup of a lowest mip cube
  53. #define SMALLEST_FACTOR 6               // determines number of mips there can be
  54. #define DEFAULT_FACTOR 8
  55. #define LARGEST_FACTOR 11               // 10 is already insane
  56. #define SOLID(x) ((x)->type==SOLID)
  57. #define MINBORD 2                       // 2 cubes from the edge of the world are always solid
  58. #define OUTBORD(x,y) ((x)<MINBORD || (y)<MINBORD || (x)>=ssize-MINBORD || (y)>=ssize-MINBORD)
  59.  
  60. struct block { int x, y, xs, ys; };
  61.  
  62. // vertex array format
  63.     
  64. struct vertex { float u, v, x, y, z; uchar r, g, b, a; };
  65.  
  66.