home *** CD-ROM | disk | FTP | other *** search
- enum // block types, order matters!
- {
- SOLID = 0, // entirely solid cube [only specifies wtex]
- CORNER, // half full corner of a wall
- FHF, // floor heightfield using neighbour vdelta values
- CHF, // idem ceiling
- SPACE, // entirely empty cube
- SEMISOLID, // generated by mipmapping
- MAXTYPE
- };
-
- struct sqr
- {
- uchar type; // one of the above
- char floor, ceil; // height, in cubes
- uchar wtex, ftex, ctex; // wall/floor/ceil texture ids
- uchar r, g, b; // light value at upper left vertex
- uchar vdelta; // vertex delta, used for heightfield cubes
- char defer; // used in mipmapping, when true this cube is not a perfect mip
- char occluded; // true when occluded
- uchar utex; // upper wall tex id
- uchar tag; // used by triggers
- };
-
- enum // hardcoded texture numbers
- {
- DEFAULT_SKY = 0,
- DEFAULT_LIQUID,
- DEFAULT_WALL,
- DEFAULT_FLOOR,
- DEFAULT_CEIL
- };
-
- #define MAPVERSION 6 // bump if map format changes, see worldio.cpp
-
- struct header // map file format header
- {
- char head[4]; // "CUBE"
- int version; // any >8bit quantity is little endian
- int headersize; // sizeof(header)
- int sfactor; // in bits
- int numents;
- char maptitle[128];
- uchar texlists[3][256];
- int waterlevel;
- uchar watercolor[4];
- int reserved[14];
- };
-
- #define SWS(w,x,y,s) (&(w)[(y)*(s)+(x)])
- #define SW(w,x,y) SWS(w,x,y,ssize)
- #define S(x,y) SW(world,x,y) // convenient lookup of a lowest mip cube
- #define SMALLEST_FACTOR 6 // determines number of mips there can be
- #define DEFAULT_FACTOR 8
- #define LARGEST_FACTOR 11 // 10 is already insane
- #define SOLID(x) ((x)->type==SOLID)
- #define MINBORD 2 // 2 cubes from the edge of the world are always solid
- #define OUTBORD(x,y) ((x)<MINBORD || (y)<MINBORD || (x)>=ssize-MINBORD || (y)>=ssize-MINBORD)
-
- struct block { int x, y, xs, ys; };
-
- // vertex array format
-
- struct vertex { float u, v, x, y, z; uchar r, g, b, a; };
-
-