rewrote memory system entirely (hunk, cache, and zone are gone, memory pools replaced...
[divverent/darkplaces.git] / model_alias.h
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 /*
22 ==============================================================================
23
24 ALIAS MODELS
25
26 Alias models are position independent, so the cache manager can move them.
27 ==============================================================================
28 */
29
30 #include "modelgen.h"
31
32 /*
33 typedef struct
34 {
35         int                                     firstpose;
36         int                                     numposes;
37         float                           interval;
38         trivertx_t                      bboxmin;
39         trivertx_t                      bboxmax;
40         int                                     frame;
41         char                            name[16];
42 } maliasframedesc_t;
43
44 typedef struct
45 {
46         trivertx_t                      bboxmin;
47         trivertx_t                      bboxmax;
48         int                                     frame;
49 } maliasgroupframedesc_t;
50
51 typedef struct
52 {
53         int                                             numframes;
54         int                                             intervals;
55         maliasgroupframedesc_t  frames[1];
56 } maliasgroup_t;
57
58 typedef struct mtriangle_s {
59         int                                     facesfront;
60         int                                     vertindex[3];
61 } mtriangle_t;
62 */
63
64 typedef struct {
65         int                     ident;
66         int                     version;
67         vec3_t          scale;
68         vec3_t          scale_origin;
69         float           boundingradius;
70         vec3_t          eyeposition;
71         int                     numskins;
72         int                     skinwidth;
73         int                     skinheight;
74         int                     numverts;
75         int                     numtris;
76         int                     numframes;
77         synctype_t      synctype;
78         int                     flags;
79         float           size;
80 } daliashdr_t;
81
82 #define MAXALIASVERTS   4096
83 #define MAXALIASFRAMES  1024
84 #define MAXALIASTRIS    4096
85
86 /*
87 ========================================================================
88
89 .MD2 triangle model file format
90
91 ========================================================================
92 */
93
94 // LordHavoc: grabbed this from the Q2 utility source,
95 // renamed a things to avoid conflicts
96
97 #define MD2ALIAS_VERSION        8
98
99 #define MD2MAX_TRIANGLES        4096
100 #define MD2MAX_VERTS            4096
101 #define MD2MAX_FRAMES           1024
102 #define MD2MAX_SKINNAME 64
103 // sanity checking size
104 #define MD2MAX_SIZE     (16777216)
105
106 typedef struct
107 {
108         short   s;
109         short   t;
110 } md2stvert_t;
111
112 typedef struct 
113 {
114         short   index_xyz[3];
115         short   index_st[3];
116 } md2triangle_t;
117
118 typedef struct
119 {
120         float           scale[3];       // multiply byte verts by this
121         float           translate[3];   // then add this
122         char            name[16];       // frame name from grabbing
123 } md2frame_t;
124
125 // the glcmd format:
126 // a positive integer starts a tristrip command, followed by that many
127 // vertex structures.
128 // a negative integer starts a trifan command, followed by -x vertexes
129 // a zero indicates the end of the command list.
130 // a vertex consists of a floating point s, a floating point t,
131 // and an integer vertex index.
132
133
134 typedef struct
135 {
136         int                     ident;
137         int                     version;
138
139         int                     skinwidth;
140         int                     skinheight;
141         int                     framesize;              // byte size of each frame
142
143         int                     num_skins;
144         int                     num_xyz;
145         int                     num_st;                 // greater than num_xyz for seams
146         int                     num_tris;
147         int                     num_glcmds;             // dwords in strip/fan command list
148         int                     num_frames;
149
150         int                     ofs_skins;              // each skin is a MAX_SKINNAME string
151         int                     ofs_st;                 // byte offset from start for stverts
152         int                     ofs_tris;               // offset for dtriangles
153         int                     ofs_frames;             // offset for first frame
154         int                     ofs_glcmds;
155         int                     ofs_end;                // end of file
156 } md2_t;
157
158 #define ALIASTYPE_MDL 1
159 #define ALIASTYPE_MD2 2
160 #define ALIASTYPE_ZYM 3
161
162 extern void Mod_LoadAliasModel (struct model_s *mod, void *buffer);
163 extern void Mod_LoadQ2AliasModel (struct model_s *mod, void *buffer);
164
165 extern void Mod_AliasInit(void);
166
167 #include "model_zymotic.h"