Annotation of quake2/qcommon/qfiles.h, revision 1.1.1.1

1.1       root        1: 
                      2: //
                      3: // qfiles.h: quake file formats
                      4: // This file must be identical in the quake and utils directories
                      5: //
                      6: 
                      7: /*
                      8: ========================================================================
                      9: 
                     10: The .pak files are just a linear collapse of a directory tree
                     11: 
                     12: ========================================================================
                     13: */
                     14: 
                     15: #define IDPAKHEADER            (('K'<<24)+('C'<<16)+('A'<<8)+'P')
                     16: 
                     17: typedef struct
                     18: {
                     19:        char    name[56];
                     20:        int             filepos, filelen;
                     21: } dpackfile_t;
                     22: 
                     23: typedef struct
                     24: {
                     25:        int             ident;          // == IDPAKHEADER
                     26:        int             dirofs;
                     27:        int             dirlen;
                     28: } dpackheader_t;
                     29: 
                     30: #define        MAX_FILES_IN_PACK       4096
                     31: 
                     32: 
                     33: /*
                     34: ========================================================================
                     35: 
                     36: PCX files are used for as many images as possible
                     37: 
                     38: ========================================================================
                     39: */
                     40: 
                     41: typedef struct
                     42: {
                     43:     char       manufacturer;
                     44:     char       version;
                     45:     char       encoding;
                     46:     char       bits_per_pixel;
                     47:     unsigned short     xmin,ymin,xmax,ymax;
                     48:     unsigned short     hres,vres;
                     49:     unsigned char      palette[48];
                     50:     char       reserved;
                     51:     char       color_planes;
                     52:     unsigned short     bytes_per_line;
                     53:     unsigned short     palette_type;
                     54:     char       filler[58];
                     55:     unsigned char      data;                   // unbounded
                     56: } pcx_t;
                     57: 
                     58: 
                     59: /*
                     60: ========================================================================
                     61: 
                     62: .MD2 triangle model file format
                     63: 
                     64: ========================================================================
                     65: */
                     66: 
                     67: #define IDALIASHEADER          (('2'<<24)+('P'<<16)+('D'<<8)+'I')
                     68: #define ALIAS_VERSION  8
                     69: 
                     70: #define        MAX_TRIANGLES   4096
                     71: #define MAX_VERTS              2048
                     72: #define MAX_FRAMES             512
                     73: #define MAX_MD2SKINS   32
                     74: #define        MAX_SKINNAME    64
                     75: 
                     76: typedef struct
                     77: {
                     78:        short   s;
                     79:        short   t;
                     80: } dstvert_t;
                     81: 
                     82: typedef struct 
                     83: {
                     84:        short   index_xyz[3];
                     85:        short   index_st[3];
                     86: } dtriangle_t;
                     87: 
                     88: typedef struct
                     89: {
                     90:        byte    v[3];                   // scaled byte to fit in frame mins/maxs
                     91:        byte    lightnormalindex;
                     92: } dtrivertx_t;
                     93: 
                     94: #define DTRIVERTX_V0   0
                     95: #define DTRIVERTX_V1   1
                     96: #define DTRIVERTX_V2   2
                     97: #define DTRIVERTX_LNI  3
                     98: #define DTRIVERTX_SIZE 4
                     99: 
                    100: typedef struct
                    101: {
                    102:        float           scale[3];       // multiply byte verts by this
                    103:        float           translate[3];   // then add this
                    104:        char            name[16];       // frame name from grabbing
                    105:        dtrivertx_t     verts[1];       // variable sized
                    106: } daliasframe_t;
                    107: 
                    108: 
                    109: // the glcmd format:
                    110: // a positive integer starts a tristrip command, followed by that many
                    111: // vertex structures.
                    112: // a negative integer starts a trifan command, followed by -x vertexes
                    113: // a zero indicates the end of the command list.
                    114: // a vertex consists of a floating point s, a floating point t,
                    115: // and an integer vertex index.
                    116: 
                    117: 
                    118: typedef struct
                    119: {
                    120:        int                     ident;
                    121:        int                     version;
                    122: 
                    123:        int                     skinwidth;
                    124:        int                     skinheight;
                    125:        int                     framesize;              // byte size of each frame
                    126: 
                    127:        int                     num_skins;
                    128:        int                     num_xyz;
                    129:        int                     num_st;                 // greater than num_xyz for seams
                    130:        int                     num_tris;
                    131:        int                     num_glcmds;             // dwords in strip/fan command list
                    132:        int                     num_frames;
                    133: 
                    134:        int                     ofs_skins;              // each skin is a MAX_SKINNAME string
                    135:        int                     ofs_st;                 // byte offset from start for stverts
                    136:        int                     ofs_tris;               // offset for dtriangles
                    137:        int                     ofs_frames;             // offset for first frame
                    138:        int                     ofs_glcmds;     
                    139:        int                     ofs_end;                // end of file
                    140: 
                    141: } dmdl_t;
                    142: 
                    143: /*
                    144: ========================================================================
                    145: 
                    146: .SP2 sprite file format
                    147: 
                    148: ========================================================================
                    149: */
                    150: 
                    151: #define IDSPRITEHEADER (('2'<<24)+('S'<<16)+('D'<<8)+'I')
                    152:                // little-endian "IDS2"
                    153: #define SPRITE_VERSION 2
                    154: 
                    155: typedef struct
                    156: {
                    157:        int             width, height;
                    158:        int             origin_x, origin_y;             // raster coordinates inside pic
                    159:        char    name[MAX_SKINNAME];             // name of pcx file
                    160: } dsprframe_t;
                    161: 
                    162: typedef struct {
                    163:        int                     ident;
                    164:        int                     version;
                    165:        int                     numframes;
                    166:        dsprframe_t     frames[1];                      // variable sized
                    167: } dsprite_t;
                    168: 
                    169: /*
                    170: ==============================================================================
                    171: 
                    172:   .WAL texture file format
                    173: 
                    174: ==============================================================================
                    175: */
                    176: 
                    177: 
                    178: #define        MIPLEVELS       4
                    179: typedef struct miptex_s
                    180: {
                    181:        char            name[32];
                    182:        unsigned        width, height;
                    183:        unsigned        offsets[MIPLEVELS];             // four mip maps stored
                    184:        char            animname[32];                   // next frame in animation chain
                    185:        int                     flags;
                    186:        int                     contents;
                    187:        int                     value;
                    188: } miptex_t;
                    189: 
                    190: 
                    191: 
                    192: /*
                    193: ==============================================================================
                    194: 
                    195:   .BSP file format
                    196: 
                    197: ==============================================================================
                    198: */
                    199: 
                    200: #define IDBSPHEADER    (('P'<<24)+('S'<<16)+('B'<<8)+'I')
                    201:                // little-endian "IBSP"
                    202: 
                    203: #define BSPVERSION     38
                    204: 
                    205: 
                    206: // upper design bounds
                    207: // leaffaces, leafbrushes, planes, and verts are still bounded by
                    208: // 16 bit short limits
                    209: #define        MAX_MAP_MODELS          1024
                    210: #define        MAX_MAP_BRUSHES         8192
                    211: #define        MAX_MAP_ENTITIES        2048
                    212: #define        MAX_MAP_ENTSTRING       0x40000
                    213: #define        MAX_MAP_TEXINFO         8192
                    214: 
                    215: #define        MAX_MAP_AREAS           256
                    216: #define        MAX_MAP_AREAPORTALS     1024
                    217: #define        MAX_MAP_PLANES          65536
                    218: #define        MAX_MAP_NODES           65536
                    219: #define        MAX_MAP_BRUSHSIDES      65536
                    220: #define        MAX_MAP_LEAFS           65536
                    221: #define        MAX_MAP_VERTS           65536
                    222: #define        MAX_MAP_FACES           65536
                    223: #define        MAX_MAP_LEAFFACES       65536
                    224: #define        MAX_MAP_LEAFBRUSHES 65536
                    225: #define        MAX_MAP_PORTALS         65536
                    226: #define        MAX_MAP_EDGES           128000
                    227: #define        MAX_MAP_SURFEDGES       256000
                    228: #define        MAX_MAP_LIGHTING        0x200000
                    229: #define        MAX_MAP_VISIBILITY      0x100000
                    230: 
                    231: // key / value pair sizes
                    232: 
                    233: #define        MAX_KEY         32
                    234: #define        MAX_VALUE       1024
                    235: 
                    236: //=============================================================================
                    237: 
                    238: typedef struct
                    239: {
                    240:        int             fileofs, filelen;
                    241: } lump_t;
                    242: 
                    243: #define        LUMP_ENTITIES           0
                    244: #define        LUMP_PLANES                     1
                    245: #define        LUMP_VERTEXES           2
                    246: #define        LUMP_VISIBILITY         3
                    247: #define        LUMP_NODES                      4
                    248: #define        LUMP_TEXINFO            5
                    249: #define        LUMP_FACES                      6
                    250: #define        LUMP_LIGHTING           7
                    251: #define        LUMP_LEAFS                      8
                    252: #define        LUMP_LEAFFACES          9
                    253: #define        LUMP_LEAFBRUSHES        10
                    254: #define        LUMP_EDGES                      11
                    255: #define        LUMP_SURFEDGES          12
                    256: #define        LUMP_MODELS                     13
                    257: #define        LUMP_BRUSHES            14
                    258: #define        LUMP_BRUSHSIDES         15
                    259: #define        LUMP_POP                        16
                    260: #define        LUMP_AREAS                      17
                    261: #define        LUMP_AREAPORTALS        18
                    262: #define        HEADER_LUMPS            19
                    263: 
                    264: typedef struct
                    265: {
                    266:        int                     ident;
                    267:        int                     version;        
                    268:        lump_t          lumps[HEADER_LUMPS];
                    269: } dheader_t;
                    270: 
                    271: typedef struct
                    272: {
                    273:        float           mins[3], maxs[3];
                    274:        float           origin[3];              // for sounds or lights
                    275:        int                     headnode;
                    276:        int                     firstface, numfaces;    // submodels just draw faces
                    277:                                                                                // without walking the bsp tree
                    278: } dmodel_t;
                    279: 
                    280: 
                    281: typedef struct
                    282: {
                    283:        float   point[3];
                    284: } dvertex_t;
                    285: 
                    286: 
                    287: // 0-2 are axial planes
                    288: #define        PLANE_X                 0
                    289: #define        PLANE_Y                 1
                    290: #define        PLANE_Z                 2
                    291: 
                    292: // 3-5 are non-axial planes snapped to the nearest
                    293: #define        PLANE_ANYX              3
                    294: #define        PLANE_ANYY              4
                    295: #define        PLANE_ANYZ              5
                    296: 
                    297: // planes (x&~1) and (x&~1)+1 are allways opposites
                    298: 
                    299: typedef struct
                    300: {
                    301:        float   normal[3];
                    302:        float   dist;
                    303:        int             type;           // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate
                    304: } dplane_t;
                    305: 
                    306: 
                    307: // contents flags are seperate bits
                    308: // a given brush can contribute multiple content bits
                    309: // multiple brushes can be in a single leaf
                    310: 
                    311: // these definitions also need to be in q_shared.h!
                    312: 
                    313: // lower bits are stronger, and will eat weaker brushes completely
                    314: #define        CONTENTS_SOLID                  1               // an eye is never valid in a solid
                    315: #define        CONTENTS_WINDOW                 2               // translucent, but not watery
                    316: #define        CONTENTS_AUX                    4
                    317: #define        CONTENTS_LAVA                   8
                    318: #define        CONTENTS_SLIME                  16
                    319: #define        CONTENTS_WATER                  32
                    320: #define        CONTENTS_MIST                   64
                    321: #define        LAST_VISIBLE_CONTENTS   64
                    322: 
                    323: // remaining contents are non-visible, and don't eat brushes
                    324: 
                    325: #define        CONTENTS_AREAPORTAL             0x8000
                    326: 
                    327: #define        CONTENTS_PLAYERCLIP             0x10000
                    328: #define        CONTENTS_MONSTERCLIP    0x20000
                    329: 
                    330: // currents can be added to any other contents, and may be mixed
                    331: #define        CONTENTS_CURRENT_0              0x40000
                    332: #define        CONTENTS_CURRENT_90             0x80000
                    333: #define        CONTENTS_CURRENT_180    0x100000
                    334: #define        CONTENTS_CURRENT_270    0x200000
                    335: #define        CONTENTS_CURRENT_UP             0x400000
                    336: #define        CONTENTS_CURRENT_DOWN   0x800000
                    337: 
                    338: #define        CONTENTS_ORIGIN                 0x1000000       // removed before bsping an entity
                    339: 
                    340: #define        CONTENTS_MONSTER                0x2000000       // should never be on a brush, only in game
                    341: #define        CONTENTS_DEADMONSTER    0x4000000
                    342: #define        CONTENTS_DETAIL                 0x8000000       // brushes to be added after vis leafs
                    343: #define        CONTENTS_TRANSLUCENT    0x10000000      // auto set if any surface has trans
                    344: #define        CONTENTS_LADDER                 0x20000000
                    345: 
                    346: 
                    347: 
                    348: #define        SURF_LIGHT              0x1             // value will hold the light strength
                    349: 
                    350: #define        SURF_SLICK              0x2             // effects game physics
                    351: 
                    352: #define        SURF_SKY                0x4             // don't draw, but add to skybox
                    353: #define        SURF_WARP               0x8             // turbulent water warp
                    354: #define        SURF_TRANS33    0x10
                    355: #define        SURF_TRANS66    0x20
                    356: #define        SURF_FLOWING    0x40    // scroll towards angle
                    357: #define        SURF_NODRAW             0x80    // don't bother referencing the texture
                    358: 
                    359: 
                    360: 
                    361: 
                    362: typedef struct
                    363: {
                    364:        int                     planenum;
                    365:        int                     children[2];    // negative numbers are -(leafs+1), not nodes
                    366:        short           mins[3];                // for frustom culling
                    367:        short           maxs[3];
                    368:        unsigned short  firstface;
                    369:        unsigned short  numfaces;       // counting both sides
                    370: } dnode_t;
                    371: 
                    372: 
                    373: typedef struct texinfo_s
                    374: {
                    375:        float           vecs[2][4];             // [s/t][xyz offset]
                    376:        int                     flags;                  // miptex flags + overrides
                    377:        int                     value;                  // light emission, etc
                    378:        char            texture[32];    // texture name (textures/*.wal)
                    379:        int                     nexttexinfo;    // for animations, -1 = end of chain
                    380: } texinfo_t;
                    381: 
                    382: 
                    383: // note that edge 0 is never used, because negative edge nums are used for
                    384: // counterclockwise use of the edge in a face
                    385: typedef struct
                    386: {
                    387:        unsigned short  v[2];           // vertex numbers
                    388: } dedge_t;
                    389: 
                    390: #define        MAXLIGHTMAPS    4
                    391: typedef struct
                    392: {
                    393:        unsigned short  planenum;
                    394:        short           side;
                    395: 
                    396:        int                     firstedge;              // we must support > 64k edges
                    397:        short           numedges;       
                    398:        short           texinfo;
                    399: 
                    400: // lighting info
                    401:        byte            styles[MAXLIGHTMAPS];
                    402:        int                     lightofs;               // start of [numstyles*surfsize] samples
                    403: } dface_t;
                    404: 
                    405: typedef struct
                    406: {
                    407:        int                             contents;                       // OR of all brushes (not needed?)
                    408: 
                    409:        short                   cluster;
                    410:        short                   area;
                    411: 
                    412:        short                   mins[3];                        // for frustum culling
                    413:        short                   maxs[3];
                    414: 
                    415:        unsigned short  firstleafface;
                    416:        unsigned short  numleaffaces;
                    417: 
                    418:        unsigned short  firstleafbrush;
                    419:        unsigned short  numleafbrushes;
                    420: } dleaf_t;
                    421: 
                    422: typedef struct
                    423: {
                    424:        unsigned short  planenum;               // facing out of the leaf
                    425:        short   texinfo;
                    426: } dbrushside_t;
                    427: 
                    428: typedef struct
                    429: {
                    430:        int                     firstside;
                    431:        int                     numsides;
                    432:        int                     contents;
                    433: } dbrush_t;
                    434: 
                    435: #define        ANGLE_UP        -1
                    436: #define        ANGLE_DOWN      -2
                    437: 
                    438: 
                    439: // the visibility lump consists of a header with a count, then
                    440: // byte offsets for the PVS and PHS of each cluster, then the raw
                    441: // compressed bit vectors
                    442: #define        DVIS_PVS        0
                    443: #define        DVIS_PHS        1
                    444: typedef struct
                    445: {
                    446:        int                     numclusters;
                    447:        int                     bitofs[8][2];   // bitofs[numclusters][2]
                    448: } dvis_t;
                    449: 
                    450: // each area has a list of portals that lead into other areas
                    451: // when portals are closed, other areas may not be visible or
                    452: // hearable even if the vis info says that it should be
                    453: typedef struct
                    454: {
                    455:        int             portalnum;
                    456:        int             otherarea;
                    457: } dareaportal_t;
                    458: 
                    459: typedef struct
                    460: {
                    461:        int             numareaportals;
                    462:        int             firstareaportal;
                    463: } darea_t;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.