Annotation of quakeworld/client/model.h, revision 1.1

1.1     ! root        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: #ifndef __MODEL__
        !            22: #define __MODEL__
        !            23: 
        !            24: #include "modelgen.h"
        !            25: #include "spritegn.h"
        !            26: 
        !            27: /*
        !            28: 
        !            29: d*_t structures are on-disk representations
        !            30: m*_t structures are in-memory
        !            31: 
        !            32: */
        !            33: 
        !            34: // entity effects
        !            35: 
        !            36: #define        EF_BRIGHTFIELD                  1
        !            37: #define        EF_MUZZLEFLASH                  2
        !            38: #define        EF_BRIGHTLIGHT                  4
        !            39: #define        EF_DIMLIGHT                     8
        !            40: #define        EF_FLAG1                                16
        !            41: #define        EF_FLAG2                                32
        !            42: #define EF_BLUE                                        64
        !            43: #define EF_RED                                 128
        !            44: 
        !            45: /*
        !            46: ==============================================================================
        !            47: 
        !            48: BRUSH MODELS
        !            49: 
        !            50: ==============================================================================
        !            51: */
        !            52: 
        !            53: 
        !            54: //
        !            55: // in memory representation
        !            56: //
        !            57: // !!! if this is changed, it must be changed in asm_draw.h too !!!
        !            58: typedef struct
        !            59: {
        !            60:        vec3_t          position;
        !            61: } mvertex_t;
        !            62: 
        !            63: #define        SIDE_FRONT      0
        !            64: #define        SIDE_BACK       1
        !            65: #define        SIDE_ON         2
        !            66: 
        !            67: 
        !            68: // plane_t structure
        !            69: // !!! if this is changed, it must be changed in asm_i386.h too !!!
        !            70: typedef struct mplane_s
        !            71: {
        !            72:        vec3_t  normal;
        !            73:        float   dist;
        !            74:        byte    type;                   // for texture axis selection and fast side tests
        !            75:        byte    signbits;               // signx + signy<<1 + signz<<1
        !            76:        byte    pad[2];
        !            77: } mplane_t;
        !            78: 
        !            79: typedef struct texture_s
        !            80: {
        !            81:        char            name[16];
        !            82:        unsigned        width, height;
        !            83:        int                     anim_total;                             // total tenths in sequence ( 0 = no)
        !            84:        int                     anim_min, anim_max;             // time for this frame min <=time< max
        !            85:        struct texture_s *anim_next;            // in the animation sequence
        !            86:        struct texture_s *alternate_anims;      // bmodels in frmae 1 use these
        !            87:        unsigned        offsets[MIPLEVELS];             // four mip maps stored
        !            88: } texture_t;
        !            89: 
        !            90: 
        !            91: #define        SURF_PLANEBACK          2
        !            92: #define        SURF_DRAWSKY            4
        !            93: #define SURF_DRAWSPRITE                8
        !            94: #define SURF_DRAWTURB          0x10
        !            95: #define SURF_DRAWTILED         0x20
        !            96: #define SURF_DRAWBACKGROUND    0x40
        !            97: 
        !            98: // !!! if this is changed, it must be changed in asm_draw.h too !!!
        !            99: typedef struct
        !           100: {
        !           101:        unsigned short  v[2];
        !           102:        unsigned int    cachededgeoffset;
        !           103: } medge_t;
        !           104: 
        !           105: typedef struct
        !           106: {
        !           107:        float           vecs[2][4];
        !           108:        float           mipadjust;
        !           109:        texture_t       *texture;
        !           110:        int                     flags;
        !           111: } mtexinfo_t;
        !           112: 
        !           113: typedef struct msurface_s
        !           114: {
        !           115:        int                     visframe;               // should be drawn when node is crossed
        !           116: 
        !           117:        int                     dlightframe;
        !           118:        int                     dlightbits;
        !           119: 
        !           120:        mplane_t        *plane;
        !           121:        int                     flags;
        !           122: 
        !           123:        int                     firstedge;      // look up in model->surfedges[], negative numbers
        !           124:        int                     numedges;       // are backwards edges
        !           125:        
        !           126: // surface generation data
        !           127:        struct surfcache_s      *cachespots[MIPLEVELS];
        !           128: 
        !           129:        short           texturemins[2];
        !           130:        short           extents[2];
        !           131: 
        !           132:        mtexinfo_t      *texinfo;
        !           133:        
        !           134: // lighting info
        !           135:        byte            styles[MAXLIGHTMAPS];
        !           136:        byte            *samples;               // [numstyles*surfsize]
        !           137: } msurface_t;
        !           138: 
        !           139: typedef struct mnode_s
        !           140: {
        !           141: // common with leaf
        !           142:        int                     contents;               // 0, to differentiate from leafs
        !           143:        int                     visframe;               // node needs to be traversed if current
        !           144:        
        !           145:        short           minmaxs[6];             // for bounding box culling
        !           146: 
        !           147:        struct mnode_s  *parent;
        !           148: 
        !           149: // node specific
        !           150:        mplane_t        *plane;
        !           151:        struct mnode_s  *children[2];   
        !           152: 
        !           153:        unsigned short          firstsurface;
        !           154:        unsigned short          numsurfaces;
        !           155: } mnode_t;
        !           156: 
        !           157: 
        !           158: 
        !           159: typedef struct mleaf_s
        !           160: {
        !           161: // common with node
        !           162:        int                     contents;               // wil be a negative contents number
        !           163:        int                     visframe;               // node needs to be traversed if current
        !           164: 
        !           165:        short           minmaxs[6];             // for bounding box culling
        !           166: 
        !           167:        struct mnode_s  *parent;
        !           168: 
        !           169: // leaf specific
        !           170:        byte            *compressed_vis;
        !           171:        struct efrag_s  *efrags;
        !           172: 
        !           173:        msurface_t      **firstmarksurface;
        !           174:        int                     nummarksurfaces;
        !           175:        int                     key;                    // BSP sequence number for leaf's contents
        !           176:        byte            ambient_sound_level[NUM_AMBIENTS];
        !           177: } mleaf_t;
        !           178: 
        !           179: // !!! if this is changed, it must be changed in asm_i386.h too !!!
        !           180: typedef struct
        !           181: {
        !           182:        dclipnode_t     *clipnodes;
        !           183:        mplane_t        *planes;
        !           184:        int                     firstclipnode;
        !           185:        int                     lastclipnode;
        !           186:        vec3_t          clip_mins;
        !           187:        vec3_t          clip_maxs;
        !           188: } hull_t;
        !           189: 
        !           190: /*
        !           191: ==============================================================================
        !           192: 
        !           193: SPRITE MODELS
        !           194: 
        !           195: ==============================================================================
        !           196: */
        !           197: 
        !           198: 
        !           199: // FIXME: shorten these?
        !           200: typedef struct mspriteframe_s
        !           201: {
        !           202:        int             width;
        !           203:        int             height;
        !           204:        void    *pcachespot;                    // remove?
        !           205:        float   up, down, left, right;
        !           206:        byte    pixels[4];
        !           207: } mspriteframe_t;
        !           208: 
        !           209: typedef struct
        !           210: {
        !           211:        int                             numframes;
        !           212:        float                   *intervals;
        !           213:        mspriteframe_t  *frames[1];
        !           214: } mspritegroup_t;
        !           215: 
        !           216: typedef struct
        !           217: {
        !           218:        spriteframetype_t       type;
        !           219:        mspriteframe_t          *frameptr;
        !           220: } mspriteframedesc_t;
        !           221: 
        !           222: typedef struct
        !           223: {
        !           224:        int                                     type;
        !           225:        int                                     maxwidth;
        !           226:        int                                     maxheight;
        !           227:        int                                     numframes;
        !           228:        float                           beamlength;             // remove?
        !           229:        void                            *cachespot;             // remove?
        !           230:        mspriteframedesc_t      frames[1];
        !           231: } msprite_t;
        !           232: 
        !           233: 
        !           234: /*
        !           235: ==============================================================================
        !           236: 
        !           237: ALIAS MODELS
        !           238: 
        !           239: Alias models are position independent, so the cache manager can move them.
        !           240: ==============================================================================
        !           241: */
        !           242: 
        !           243: typedef struct
        !           244: {
        !           245:        aliasframetype_t        type;
        !           246:        trivertx_t                      bboxmin;
        !           247:        trivertx_t                      bboxmax;
        !           248:        int                                     frame;
        !           249:        char                            name[16];
        !           250: } maliasframedesc_t;
        !           251: 
        !           252: typedef struct
        !           253: {
        !           254:        aliasskintype_t         type;
        !           255:        void                            *pcachespot;
        !           256:        int                                     skin;
        !           257: } maliasskindesc_t;
        !           258: 
        !           259: typedef struct
        !           260: {
        !           261:        trivertx_t                      bboxmin;
        !           262:        trivertx_t                      bboxmax;
        !           263:        int                                     frame;
        !           264: } maliasgroupframedesc_t;
        !           265: 
        !           266: typedef struct
        !           267: {
        !           268:        int                                             numframes;
        !           269:        int                                             intervals;
        !           270:        maliasgroupframedesc_t  frames[1];
        !           271: } maliasgroup_t;
        !           272: 
        !           273: typedef struct
        !           274: {
        !           275:        int                                     numskins;
        !           276:        int                                     intervals;
        !           277:        maliasskindesc_t        skindescs[1];
        !           278: } maliasskingroup_t;
        !           279: 
        !           280: // !!! if this is changed, it must be changed in asm_draw.h too !!!
        !           281: typedef struct mtriangle_s {
        !           282:        int                                     facesfront;
        !           283:        int                                     vertindex[3];
        !           284: } mtriangle_t;
        !           285: 
        !           286: typedef struct {
        !           287:        int                                     model;
        !           288:        int                                     stverts;
        !           289:        int                                     skindesc;
        !           290:        int                                     triangles;
        !           291:        maliasframedesc_t       frames[1];
        !           292: } aliashdr_t;
        !           293: 
        !           294: //===================================================================
        !           295: 
        !           296: //
        !           297: // Whole model
        !           298: //
        !           299: 
        !           300: typedef enum {mod_brush, mod_sprite, mod_alias} modtype_t;
        !           301: 
        !           302: #define        EF_ROCKET       1                       // leave a trail
        !           303: #define        EF_GRENADE      2                       // leave a trail
        !           304: #define        EF_GIB          4                       // leave a trail
        !           305: #define        EF_ROTATE       8                       // rotate (bonus items)
        !           306: #define        EF_TRACER       16                      // green split trail
        !           307: #define        EF_ZOMGIB       32                      // small blood trail
        !           308: #define        EF_TRACER2      64                      // orange split trail + rotate
        !           309: #define        EF_TRACER3      128                     // purple trail
        !           310: 
        !           311: typedef struct model_s
        !           312: {
        !           313:        char            name[MAX_QPATH];
        !           314:        qboolean        needload;               // bmodels and sprites don't cache normally
        !           315: 
        !           316:        modtype_t       type;
        !           317:        int                     numframes;
        !           318:        synctype_t      synctype;
        !           319:        
        !           320:        int                     flags;
        !           321: 
        !           322: //
        !           323: // volume occupied by the model graphics
        !           324: //             
        !           325:        vec3_t          mins, maxs;
        !           326:        float           radius;
        !           327: 
        !           328: //
        !           329: // solid volume for clipping (sent from server)
        !           330: //
        !           331:        qboolean        clipbox;
        !           332:        vec3_t          clipmins, clipmaxs;
        !           333: 
        !           334: //
        !           335: // brush model
        !           336: //
        !           337:        int                     firstmodelsurface, nummodelsurfaces;
        !           338: 
        !           339:        int                     numsubmodels;
        !           340:        dmodel_t        *submodels;
        !           341: 
        !           342:        int                     numplanes;
        !           343:        mplane_t        *planes;
        !           344: 
        !           345:        int                     numleafs;               // number of visible leafs, not counting 0
        !           346:        mleaf_t         *leafs;
        !           347: 
        !           348:        int                     numvertexes;
        !           349:        mvertex_t       *vertexes;
        !           350: 
        !           351:        int                     numedges;
        !           352:        medge_t         *edges;
        !           353: 
        !           354:        int                     numnodes;
        !           355:        mnode_t         *nodes;
        !           356: 
        !           357:        int                     numtexinfo;
        !           358:        mtexinfo_t      *texinfo;
        !           359: 
        !           360:        int                     numsurfaces;
        !           361:        msurface_t      *surfaces;
        !           362: 
        !           363:        int                     numsurfedges;
        !           364:        int                     *surfedges;
        !           365: 
        !           366:        int                     numclipnodes;
        !           367:        dclipnode_t     *clipnodes;
        !           368: 
        !           369:        int                     nummarksurfaces;
        !           370:        msurface_t      **marksurfaces;
        !           371: 
        !           372:        hull_t          hulls[MAX_MAP_HULLS];
        !           373: 
        !           374:        int                     numtextures;
        !           375:        texture_t       **textures;
        !           376: 
        !           377:        byte            *visdata;
        !           378:        byte            *lightdata;
        !           379:        char            *entities;
        !           380: 
        !           381:        unsigned        checksum;               // for world models only
        !           382:        unsigned        checksum2;              // for world models only
        !           383: 
        !           384: //
        !           385: // additional model data
        !           386: //
        !           387:        cache_user_t    cache;          // only access through Mod_Extradata
        !           388: 
        !           389: } model_t;
        !           390: 
        !           391: //============================================================================
        !           392: 
        !           393: void   Mod_Init (void);
        !           394: void   Mod_ClearAll (void);
        !           395: model_t *Mod_ForName (char *name, qboolean crash);
        !           396: void   *Mod_Extradata (model_t *mod);  // handles caching
        !           397: void   Mod_TouchModel (char *name);
        !           398: 
        !           399: mleaf_t *Mod_PointInLeaf (float *p, model_t *model);
        !           400: byte   *Mod_LeafPVS (mleaf_t *leaf, model_t *model);
        !           401: 
        !           402: #endif // __MODEL__

unix.superglobalmegacorp.com

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