123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635 |
- #ifndef __QFILES_H__
- #define __QFILES_H__
- //
- // qfiles.h: quake file formats
- // This file must be identical in the quake and utils directories
- //
- // surface geometry should not exceed these limits
- #define SHADER_MAX_VERTEXES 1000
- #define SHADER_MAX_INDEXES (6*SHADER_MAX_VERTEXES)
- // the maximum size of game reletive pathnames
- #define MAX_QPATH 64
- /*
- ========================================================================
- QVM files
- ========================================================================
- */
- #define VM_MAGIC 0x12721444
- typedef struct {
- int vmMagic;
- int instructionCount;
- int codeOffset;
- int codeLength;
- int dataOffset;
- int dataLength;
- int litLength; // ( dataLength - litLength ) should be byteswapped on load
- int bssLength; // zero filled memory appended to datalength
- } vmHeader_t;
- /*
- ========================================================================
- PCX files are used for 8 bit images
- ========================================================================
- */
- typedef struct {
- char manufacturer;
- char version;
- char encoding;
- char bits_per_pixel;
- unsigned short xmin,ymin,xmax,ymax;
- unsigned short hres,vres;
- unsigned char palette[48];
- char reserved;
- char color_planes;
- unsigned short bytes_per_line;
- unsigned short palette_type;
- char filler[58];
- unsigned char data; // unbounded
- } pcx_t;
- /*
- ========================================================================
- TGA files are used for 24/32 bit images
- ========================================================================
- */
- typedef struct _TargaHeader {
- unsigned char id_length, colormap_type, image_type;
- unsigned short colormap_index, colormap_length;
- unsigned char colormap_size;
- unsigned short x_origin, y_origin, width, height;
- unsigned char pixel_size, attributes;
- } TargaHeader;
- /*
- ========================================================================
- .MD3 triangle model file format
- ========================================================================
- */
- #define MD3_IDENT (('3'<<24)+('P'<<16)+('D'<<8)+'I')
- #define MD3_VERSION 15
- // limits
- #define MD3_MAX_LODS 3
- #define MD3_MAX_TRIANGLES 8192 // per surface
- #define MD3_MAX_VERTS 4096 // per surface
- #define MD3_MAX_SHADERS 256 // per surface
- #define MD3_MAX_FRAMES 1024 // per model
- #define MD3_MAX_SURFACES 32 + 32 // per model
- #define MD3_MAX_TAGS 16 // per frame
- // vertex scales
- #define MD3_XYZ_SCALE (1.0/64)
- typedef struct md3Frame_s {
- vec3_t bounds[2];
- vec3_t localOrigin;
- float radius;
- char name[16];
- } md3Frame_t;
- typedef struct md3Tag_s {
- char name[MAX_QPATH]; // tag name
- vec3_t origin;
- vec3_t axis[3];
- } md3Tag_t;
- /*
- ** md3Surface_t
- **
- ** CHUNK SIZE
- ** header sizeof( md3Surface_t )
- ** shaders sizeof( md3Shader_t ) * numShaders
- ** triangles[0] sizeof( md3Triangle_t ) * numTriangles
- ** st sizeof( md3St_t ) * numVerts
- ** XyzNormals sizeof( md3XyzNormal_t ) * numVerts * numFrames
- */
- typedef struct {
- int ident; //
- char name[MAX_QPATH]; // polyset name
- int flags;
- int numFrames; // all surfaces in a model should have the same
- int numShaders; // all surfaces in a model should have the same
- int numVerts;
- int numTriangles;
- int ofsTriangles;
- int ofsShaders; // offset from start of md3Surface_t
- int ofsSt; // texture coords are common for all frames
- int ofsXyzNormals; // numVerts * numFrames
- int ofsEnd; // next surface follows
- } md3Surface_t;
- typedef struct {
- char name[MAX_QPATH];
- int shaderIndex; // for in-game use
- } md3Shader_t;
- typedef struct {
- int indexes[3];
- } md3Triangle_t;
- typedef struct {
- float st[2];
- } md3St_t;
- typedef struct {
- short xyz[3];
- short normal;
- } md3XyzNormal_t;
- typedef struct {
- int ident;
- int version;
- char name[MAX_QPATH]; // model name
- int flags;
- int numFrames;
- int numTags;
- int numSurfaces;
- int numSkins;
- int ofsFrames; // offset for first frame
- int ofsTags; // numFrames * numTags
- int ofsSurfaces; // first surface, others follow
- int ofsEnd; // end of file
- } md3Header_t;
- /*
- ==============================================================================
- .BSP file format
- ==============================================================================
- */
- #define BSP_IDENT (('P'<<24)+('S'<<16)+('B'<<8)+'R')
- // little-endian "IBSP"
- #define BSP_VERSION 1
- // there shouldn't be any problem with increasing these values at the
- // expense of more memory allocation in the utilities
- #define MAX_MAP_MODELS 0x400
- #define MAX_MAP_BRUSHES 0x8000
- #define MAX_MAP_ENTITIES 0x800
- #define MAX_MAP_ENTSTRING 0x40000
- #define MAX_MAP_SHADERS 0x400
- #define MAX_MAP_AREAS 0x100 // MAX_MAP_AREA_BYTES in q_shared must match!
- #define MAX_MAP_FOGS 0x100
- #define MAX_MAP_PLANES 0x20000
- #define MAX_MAP_NODES 0x20000
- #define MAX_MAP_BRUSHSIDES 0x20000
- #define MAX_MAP_LEAFS 0x20000
- #define MAX_MAP_LEAFFACES 0x20000
- #define MAX_MAP_LEAFBRUSHES 0x40000
- #define MAX_MAP_PORTALS 0x20000
- #define MAX_MAP_LIGHTING 0x800000
- #define MAX_MAP_LIGHTGRID 65535
- #define MAX_MAP_LIGHTGRID_ARRAY 0x100000
- #define MAX_MAP_VISIBILITY 0x400000
- #define MAX_MAP_DRAW_SURFS 0x20000
- #define MAX_MAP_DRAW_VERTS 0x80000
- #define MAX_MAP_DRAW_INDEXES 0x80000
- // key / value pair sizes in the entities lump
- #define MAX_KEY 32
- #define MAX_VALUE 1024
- // the editor uses these predefined yaw angles to orient entities up or down
- #define ANGLE_UP -1
- #define ANGLE_DOWN -2
- #define LIGHTMAP_WIDTH 128
- #define LIGHTMAP_HEIGHT 128
- //=============================================================================
- #ifdef _XBOX
- #pragma pack(push, 1)
- typedef struct {
- float mins[3], maxs[3];
- int firstSurface;
- unsigned short numSurfaces;
- int firstBrush;
- unsigned short numBrushes;
- } dmodel_t;
- typedef struct {
- char shader[MAX_QPATH];
- int surfaceFlags;
- int contentFlags;
- } dshader_t;
- // planes x^1 is allways the opposite of plane x
- typedef struct {
- float normal[3];
- float dist;
- } dplane_t;
- typedef struct {
- int planeNum;
- short children[2]; // negative numbers are -(leafs+1), not nodes
- short mins[3]; // for frustom culling
- short maxs[3];
- } dnode_t;
- typedef struct {
- short cluster; // -1 = opaque cluster (do I still store these?)
- signed char area;
- short mins[3]; // for frustum culling
- short maxs[3];
- unsigned short firstLeafSurface;
- unsigned short numLeafSurfaces;
- unsigned short firstLeafBrush;
- unsigned short numLeafBrushes;
- } dleaf_t;
- typedef struct {
- int planeNum; // positive plane side faces out of the leaf
- byte shaderNum;
- } dbrushside_t;
- typedef struct {
- int firstSide;
- byte numSides;
- unsigned short shaderNum; // the shader that determines the contents flags
- } dbrush_t;
- typedef struct {
- char shader[MAX_QPATH];
- int brushNum;
- int visibleSide; // the brush side that ray tests need to clip against (-1 == none)
- } dfog_t;
- // Light Style Constants
- #define MAXLIGHTMAPS 4
- #define LS_NORMAL 0x00
- #define LS_UNUSED 0xfe
- #define LS_NONE 0xff
- #define MAX_LIGHT_STYLES 64
- typedef struct {
- float lightmap[MAXLIGHTMAPS][2];
- float st[2];
- short xyz[3];
- short normal[3];
- byte color[MAXLIGHTMAPS][4];
- } mapVert_t;
- #define DRAWVERT_LIGHTMAP_SCALE 32768.0f
- // Change texture coordinates for TriSurfs to be even more fine grain.
- // See below for note about keeping MIN_ST and MAX_ST up to date with
- // ST_SCALE. These are in 4.12. Okay, how about 5.11? Gah. 9.7!
- //#define DRAWVERT_ST_SCALE 4096.0f
- //#define DRAWVERT_ST_SCALE 2048.0f
- #define DRAWVERT_ST_SCALE 128.0f
- // We use a slightly different format for the fixed point texture
- // coords in Grid/Mesh drawverts: 10.6 rather than 12.4
- // To be sure that this is ok, keep the max and min values equal to
- // the largest and smallest whole numbers that can be stored using the
- // format. (ie: Don't change GRID_DRAWVERT_ST_SCALE without changing
- // the other two!) (And don't forget that we're using a bit for sign.)
- #define GRID_DRAWVERT_ST_SCALE 64.0f
- // This master switch controls whether we use compressed (4-bit per channel)
- // vertex colors in draw and surface verts. It saves memory, but I'm switching
- // it off, because we end up with that nasty green/purple streaking effect.
- // If we ever figure out how to do it better... (1555? 565?)
- //#define COMPRESS_VERTEX_COLORS
- typedef struct {
- short xyz[3];
- short dvst[2];
- short dvlightmap[MAXLIGHTMAPS][2];
- short normal[3];
- #ifdef _XBOX
- vec3_t tangent;
- #endif
- #ifdef COMPRESS_VERTEX_COLORS
- byte dvcolor[MAXLIGHTMAPS][1];
- #else
- byte dvcolor[MAXLIGHTMAPS][4];
- #endif
- } drawVert_t;
- typedef struct {
- byte flags;
- byte latLong[2];
- } dgrid_t;
- typedef struct {
- int code;
- byte shaderNum;
- signed char fogNum;
- unsigned int verts; // high 20 bits are first vert, low 12 are num verts
- unsigned int indexes; // high 20 bits are first index, low 12 are num indices
- byte lightmapStyles[MAXLIGHTMAPS];
- byte lightmapNum[MAXLIGHTMAPS];
- short lightmapVecs[3];
- } dface_t;
- typedef struct {
- int code;
- byte shaderNum;
- signed char fogNum;
- unsigned int verts; // high 20 bits are first vert, low 12 are num verts
- byte lightmapStyles[MAXLIGHTMAPS];
- byte lightmapNum[MAXLIGHTMAPS];
- short lightmapVecs[2][3]; // for patches, [0] and [1] are lodbounds
- byte patchWidth;
- byte patchHeight;
- } dpatch_t;
- typedef struct {
- int code;
- byte shaderNum;
- signed char fogNum;
- unsigned int verts; // high 20 bits are first vert, low 12 are num verts
- unsigned int indexes; // high 20 bits are first index, low 12 are num indices
- byte lightmapStyles[MAXLIGHTMAPS];
- } dtrisurf_t;
- typedef struct {
- int code;
- byte shaderNum;
- signed char fogNum;
- short origin[3];
- short normal[3];
- byte color[3];
- } dflare_t;
- #pragma pack(pop)
- #else // _XBOX
- typedef struct {
- int fileofs, filelen;
- } lump_t;
- #define LUMP_ENTITIES 0
- #define LUMP_SHADERS 1
- #define LUMP_PLANES 2
- #define LUMP_NODES 3
- #define LUMP_LEAFS 4
- #define LUMP_LEAFSURFACES 5
- #define LUMP_LEAFBRUSHES 6
- #define LUMP_MODELS 7
- #define LUMP_BRUSHES 8
- #define LUMP_BRUSHSIDES 9
- #define LUMP_DRAWVERTS 10
- #define LUMP_DRAWINDEXES 11
- #define LUMP_FOGS 12
- #define LUMP_SURFACES 13
- #define LUMP_LIGHTMAPS 14
- #define LUMP_LIGHTGRID 15
- #define LUMP_VISIBILITY 16
- #define LUMP_LIGHTARRAY 17
- #define HEADER_LUMPS 18
- typedef struct {
- int ident;
- int version;
- lump_t lumps[HEADER_LUMPS];
- } dheader_t;
- typedef struct {
- float mins[3], maxs[3];
- int firstSurface, numSurfaces;
- int firstBrush, numBrushes;
- } dmodel_t;
- typedef struct dshader_s {
- char shader[MAX_QPATH];
- int surfaceFlags;
- int contentFlags;
- } dshader_t;
- // planes x^1 is allways the opposite of plane x
- typedef struct {
- float normal[3];
- float dist;
- } dplane_t;
- typedef struct {
- int planeNum;
- int children[2]; // negative numbers are -(leafs+1), not nodes
- int mins[3]; // for frustom culling
- int maxs[3];
- } dnode_t;
- typedef struct {
- int cluster; // -1 = opaque cluster (do I still store these?)
- int area;
- int mins[3]; // for frustum culling
- int maxs[3];
- int firstLeafSurface;
- int numLeafSurfaces;
- int firstLeafBrush;
- int numLeafBrushes;
- } dleaf_t;
- typedef struct {
- int planeNum; // positive plane side faces out of the leaf
- int shaderNum;
- int drawSurfNum;
- } dbrushside_t;
- typedef struct {
- int firstSide;
- int numSides;
- int shaderNum; // the shader that determines the contents flags
- } dbrush_t;
- typedef struct {
- char shader[MAX_QPATH];
- int brushNum;
- int visibleSide; // the brush side that ray tests need to clip against (-1 == none)
- } dfog_t;
- // Light Style Constants
- #define MAXLIGHTMAPS 4
- #define LS_NORMAL 0x00
- #define LS_UNUSED 0xfe
- #define LS_NONE 0xff
- #define MAX_LIGHT_STYLES 64
- typedef struct {
- vec3_t xyz;
- float st[2];
- float lightmap[MAXLIGHTMAPS][2];
- vec3_t normal;
- byte color[MAXLIGHTMAPS][4];
- } mapVert_t;
- typedef struct {
- vec3_t xyz;
- float st[2];
- float lightmap[MAXLIGHTMAPS][2];
- vec3_t normal;
- byte color[MAXLIGHTMAPS][4];
- } drawVert_t;
- typedef struct
- {
- byte ambientLight[MAXLIGHTMAPS][3];
- byte directLight[MAXLIGHTMAPS][3];
- byte styles[MAXLIGHTMAPS];
- byte latLong[2];
- } dgrid_t;
- typedef enum {
- MST_BAD,
- MST_PLANAR,
- MST_PATCH,
- MST_TRIANGLE_SOUP,
- MST_FLARE
- } mapSurfaceType_t;
- typedef struct {
- int shaderNum;
- int fogNum;
- int surfaceType;
- int firstVert;
- int numVerts;
- int firstIndex;
- int numIndexes;
- byte lightmapStyles[MAXLIGHTMAPS], vertexStyles[MAXLIGHTMAPS];
- int lightmapNum[MAXLIGHTMAPS];
- int lightmapX[MAXLIGHTMAPS], lightmapY[MAXLIGHTMAPS];
- int lightmapWidth, lightmapHeight;
- vec3_t lightmapOrigin;
- vec3_t lightmapVecs[3]; // for patches, [0] and [1] are lodbounds
- int patchWidth;
- int patchHeight;
- } dsurface_t;
- #endif _XBOX
- typedef enum //# hunkAllocType_e
- {
- HA_MISC,
- HA_MAP,
- HA_SHADERS,
- HA_LIGHTING,
- HA_FOG,
- HA_PATCHES,
- HA_VIS,
- HA_SUBMODELS,
- HA_MODELS,
- MAX_HA_TYPES
- } hunkAllocType_t;
- /////////////////////////////////////////////////////////////
- //
- // Defines and structures required for fonts
- #define GLYPH_COUNT 256
- // Must match define in stmparse.h
- #define STYLE_DROPSHADOW 0x80000000
- #define STYLE_BLINK 0x40000000
- #define SET_MASK 0x00ffffff
- typedef struct
- {
- short width; // number of pixels wide
- short height; // number of scan lines
- short horizAdvance; // number of pixels to advance to the next char
- short horizOffset; // x offset into space to render glyph
- int baseline; // y offset
- float s; // x start tex coord
- float t; // y start tex coord
- float s2; // x end tex coord
- float t2; // y end tex coord
- } glyphInfo_t;
- // this file corresponds 1:1 with the "*.fontdat" files, so don't change it unless you're going to
- // recompile the fontgen util and regenerate all the fonts!
- //
- typedef struct dfontdat_s
- {
- glyphInfo_t mGlyphs[GLYPH_COUNT];
- short mPointSize;
- short mHeight; // max height of font
- short mAscender;
- short mDescender;
- short mKoreanHack; // unused field, written out by John's fontgen program but we have to leave it there for disk structs <sigh>
- } dfontdat_t;
- /////////////////// fonts end ////////////////////////////////////
- #endif
|