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