FTEQW
Documentation of the FTE engine source tree.
model_hl.h
Go to the documentation of this file.
1/*
2 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 Half-Life Model Renderer (Experimental) Copyright (C) 2001 James 'Ender' Brown [ender@quakesrc.org] This program is
4 free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as
5 published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
6 This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
7 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
8 details. You should have received a copy of the GNU General Public License along with this program; if not, write
9 to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. fromquake.h -
10
11 model_hl.h - halflife model structure
12 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
13 */
14#define HLPOLYHEADER (('T' << 24) + ('S' << 16) + ('D' << 8) + 'I') /* little-endian "IDST" */
15#define HLMDLHEADER "IDST"
16
17/* flags - eukara */
18#define HLMDLFL_FLAT 0x0001
19#define HLMDLFL_CHROME 0x0002
20#define HLMDLFL_FULLBRIGHT 0x0004
21#define HLMDLFL_MASKED 0x0040
22#define HLMDLFL_ALPHASOLID 0x0800
23
24#define HLSHADER_FULLBRIGHT \
25 "{\n" \
26 "program defaultskin\n" \
27 "{\n" \
28 "map $diffuse\n" \
29 "}\n" \
30 "}\n"
31
32#define HLSHADER_CHROME \
33 "{\n" \
34 "program defaultskin#CHROME\n" \
35 "{\n" \
36 "map $diffuse\n" \
37 "tcgen environment\n" \
38 "rgbgen lightingdiffuse\n" \
39 "}\n" \
40 "}\n"
41
42#define HLSHADER_MASKED \
43 "{\n" \
44 "program defaultskin#MASK=0.5\n" \
45 "{\n" \
46 "map $diffuse\n" \
47 "rgbgen lightingdiffuse\n" \
48 "alphaFunc GE128\n" \
49 "}\n" \
50 "}\n"
51
52#define HLSHADER_FULLBRIGHTCHROME \
53 "{\n" \
54 "program defaultskin#CHROME\n" \
55 "{\n" \
56 "map $diffuse\n" \
57 "tcgen environment\n" \
58 "}\n" \
59 "}\n"
60
61/*
62 -----------------------------------------------------------------------------------------------------------------------
63 main model header
64 -----------------------------------------------------------------------------------------------------------------------
65 */
66typedef struct
67{
68 int filetypeid; //IDSP
69 int version; //10
70 char name[64];
72 vec3_t unknown3[5];
73 int unknown4; //flags
80 int numseq;
82 int unknown6; //external sequences
86 int unknown7; //something to do with external textures
89 int skins;
94 int unknown9[6]; //sounds, transitions
96
97/*
98 -----------------------------------------------------------------------------------------------------------------------
99 skin info
100 -----------------------------------------------------------------------------------------------------------------------
101 */
102typedef struct
103{
104 char name[64];
105 int flags; /*flat, chrome, fullbright*/
106 int w; /* width */
107 int h; /* height */
108 int offset; /* index */
110
111/*
112 -----------------------------------------------------------------------------------------------------------------------
113 body part index
114 -----------------------------------------------------------------------------------------------------------------------
115 */
116typedef struct
117{
118 char name[64];
120 int base;
123
124/*
125 -----------------------------------------------------------------------------------------------------------------------
126 meshes
127 -----------------------------------------------------------------------------------------------------------------------
128 */
129typedef struct
130{
132 int index;
137
138/*
139 -----------------------------------------------------------------------------------------------------------------------
140 bones
141 -----------------------------------------------------------------------------------------------------------------------
142 */
143typedef struct
144{
145 char name[32];
148 int bonecontroller[6];
149 float value[6];
150 float scale[6];
152
153typedef struct
154{
155 char name[32]; //I assume
156 int unk;
157 int bone;
159 vec3_t unk2[3];
161
162typedef struct
163{
164 int bone;
165 int body; //value reported to gamecode on impact
169
170/*
171 -----------------------------------------------------------------------------------------------------------------------
172 bone controllers
173 -----------------------------------------------------------------------------------------------------------------------
174 */
175typedef struct
176{
177 int name;
178 int type;
179 float start;
180 float end;
182 int index;
184
185/*
186 -----------------------------------------------------------------------------------------------------------------------
187 halflife submodel descriptor
188 -----------------------------------------------------------------------------------------------------------------------
189 */
190typedef struct
191{
192 char name[64];
194 float unknown2;
200 int unknown3[2];
202 int unknown4[2];
204
205/*
206 -----------------------------------------------------------------------------------------------------------------------
207 animation
208 -----------------------------------------------------------------------------------------------------------------------
209 */
210typedef struct
211{
212 unsigned short offset[6];
214
215/*
216 -----------------------------------------------------------------------------------------------------------------------
217 animation frames
218 -----------------------------------------------------------------------------------------------------------------------
219 */
220typedef union
221{
222 struct {
226 short value;
228
229/*
230 -----------------------------------------------------------------------------------------------------------------------
231 sequence descriptions
232 -----------------------------------------------------------------------------------------------------------------------
233 */
234typedef struct
235{
236 char name[32];
237 float timing;
238 int loop;
244 int unknown2[2];
248 int unknown4[2];
249 vec3_t bbox[2];
251 int index;
252 int unknown7[2];
253 float unknown[4];
255 unsigned int seqindex;
256 int unknown9[4];
258
259typedef struct
260{
261 int pose;
262 int code;
264 char data[64];
266
267/*
268 -----------------------------------------------------------------------------------------------------------------------
269 sequence groups
270 -----------------------------------------------------------------------------------------------------------------------
271 */
272typedef struct
273{
274 char name[96]; /* should be split label[32] and name[64] */
275 unsigned int cache;
276 int data;
278
279typedef struct
280{
281 int magic; //IDSQ
282 int version; //10
283 char name[64];
284 int unk1;
286/*
287 -----------------------------------------------------------------------------------------------------------------------
288 halflife model internal structure
289 -----------------------------------------------------------------------------------------------------------------------
290 */
291
292#define MAX_ANIM_GROUPS 16 //submodel files containing anim data.
293typedef struct //this is stored as the cache. an hlmodel_t is generated when drawing
294{
295 //updated while rendering...
296 float controller[5]; /* Position of bone controllers */
297 float adjust[5];
298
302 hlmdl_sequencefile_t *animcache[MAX_ANIM_GROUPS];
305 {
306 char name[MAX_QPATH];
310 int w, h;
312 unsigned short x,y;
314 short *skinref;
317
319 struct
320 {
322 struct hlalternative_s
323 {
326 } *alternatives;
327 } *geomset;
331} hlmodel_t;
332
333/* HL mathlib prototypes: */
334void QuaternionGLAngle(const vec3_t angles, vec4_t quaternion);
335void QuaternionGLMatrix(float x, float y, float z, float w, vec4_t *GLM);
336//void UploadTexture(hlmdl_tex_t *ptexture, qbyte *data, qbyte *pal);
337
338qboolean QDECL Mod_LoadHLModel (model_t *mod, void *buffer, size_t fsize);
339
340/* physics stuff */
342
343//reflectioney things, including bone data
344int HLMDL_BoneForName(model_t *mod, const char *name);
345int HLMDL_FrameForName(model_t *mod, const char *name);
346int HLMDL_FrameForAction(model_t *mod, int actionid);
347const char *HLMDL_FrameNameForNum(model_t *model, int surfaceidx, int num);
348qboolean HLMDL_FrameInfoForNum(model_t *model, int surfaceidx, int num, char **name, int *numframes, float *duration, qboolean *loop, int *act);
349qboolean HLMDL_GetModelEvent(model_t *model, int animation, int eventidx, float *timestamp, int *eventcode, char **eventdata);
350int HLMDL_GetNumBones(model_t *mod, qboolean tagstoo);
351int HLMDL_GetBoneParent(model_t *mod, int bonenum);
352const char *HLMDL_GetBoneName(model_t *mod, int bonenum);
353int HLMDL_GetBoneData(model_t *model, int firstbone, int lastbone, const framestate_t *fstate, float *result);
354int HLMDL_GetAttachment(model_t *model, int tagnum, float *resultmatrix);
355
356#ifdef HAVE_CLIENT
357//stuff only useful for clients that need to draw stuff
360void R_HalfLife_GenerateBatches(entity_t *rent, batch_t **batches);
362#endif
qboolean
Definition: api_menu.h:34
vec_t vec3_t[3]
Definition: api_menu.h:40
vec_t vec4_t[4]
Definition: api_menu.h:41
cvar_t model
Definition: cl_main.c:153
entity_t * ent
Definition: com_mesh.c:717
dVector3 result
Definition: com_phys_ode.c:519
int num
Definition: com_phys_ode.c:314
unsigned char qbyte
Definition: common.h:127
char shaders[][64]
Definition: generatebuiltinsl.c:5
GLfloat GLfloat GLfloat z
Definition: glquake.h:158
GLfloat GLfloat y
Definition: glquake.h:158
GLuint GLcharARB * name
Definition: glquake.h:155
GLfloat x
Definition: glquake.h:158
GLsizei GLboolean const GLfloat * value
Definition: glquake.h:164
GLfloat GLfloat GLfloat GLfloat w
Definition: glquake.h:158
void QuaternionGLMatrix(float x, float y, float z, float w, vec4_t *GLM)
Definition: gl_hlmdl.c:31
int HLMDL_FrameForName(model_t *mod, const char *name)
Definition: gl_hlmdl.c:624
int HLMDL_FrameForAction(model_t *mod, int actionid)
Definition: gl_hlmdl.c:646
int HLMDL_GetBoneData(model_t *model, int firstbone, int lastbone, const framestate_t *fstate, float *result)
Definition: gl_hlmdl.c:1200
qboolean QDECL Mod_LoadHLModel(model_t *mod, void *buffer, size_t fsize)
Definition: gl_hlmdl.c:293
const char * HLMDL_GetBoneName(model_t *mod, int bonenum)
Definition: gl_hlmdl.c:1151
int HLMDL_GetNumBones(model_t *mod, qboolean tagstoo)
Definition: gl_hlmdl.c:1124
void * Mod_GetHalfLifeModelData(model_t *mod)
Definition: gl_hlmdl.c:613
qboolean HLMDL_FrameInfoForNum(model_t *model, int surfaceidx, int num, char **name, int *numframes, float *duration, qboolean *loop, int *act)
Definition: gl_hlmdl.c:1212
void HLMDL_DrawHitBoxes(entity_t *ent)
Definition: gl_hlmdl.c:1750
qboolean HLMDL_GetModelEvent(model_t *model, int animation, int eventidx, float *timestamp, int *eventcode, char **eventdata)
Definition: gl_hlmdl.c:678
void R_DrawHLModel(entity_t *curent)
int HLMDL_GetBoneParent(model_t *mod, int bonenum)
Definition: gl_hlmdl.c:1136
void R_HalfLife_GenerateBatches(entity_t *rent, batch_t **batches)
Definition: gl_hlmdl.c:1593
int HLMDL_BoneForName(model_t *mod, const char *name)
Definition: gl_hlmdl.c:693
int HLMDL_GetAttachment(model_t *model, int tagnum, float *resultmatrix)
Definition: gl_hlmdl.c:1168
const char * HLMDL_FrameNameForNum(model_t *model, int surfaceidx, int num)
Definition: gl_hlmdl.c:1205
void QuaternionGLAngle(const vec3_t angles, vec4_t quaternion)
Definition: gl_hlmdl.c:49
void R_HalfLife_TouchTextures(model_t *mod)
Definition: gl_hlmdl.c:1586
char ** data
Definition: p_script.c:63
float scale
Definition: pr_menu.c:106
evalc_t angles
Definition: pr_menu.c:1357
vec3_t offset
Definition: q2m_flash.c:28
static ALC_API ALCvoid * buffer
Definition: snd_al.c:259
Definition: gl_model.h:133
Definition: render.h:99
Definition: merged.h:59
Definition: model_hl.h:211
Definition: model_hl.h:154
vec3_t org
Definition: model_hl.h:158
int unk
Definition: model_hl.h:156
int bone
Definition: model_hl.h:157
Definition: model_hl.h:117
int base
Definition: model_hl.h:120
int modelindex
Definition: model_hl.h:121
int nummodels
Definition: model_hl.h:119
Definition: model_hl.h:144
int unknown1
Definition: model_hl.h:147
int parent
Definition: model_hl.h:146
Definition: model_hl.h:176
int unknown1
Definition: model_hl.h:181
int index
Definition: model_hl.h:182
int name
Definition: model_hl.h:177
float start
Definition: model_hl.h:179
float end
Definition: model_hl.h:180
int type
Definition: model_hl.h:178
Definition: model_hl.h:260
int code
Definition: model_hl.h:262
int unknown1
Definition: model_hl.h:263
int pose
Definition: model_hl.h:261
Definition: model_hl.h:67
int seqindex
Definition: model_hl.h:81
int filetypeid
Definition: model_hl.h:68
int unknown7
Definition: model_hl.h:86
int skingroups
Definition: model_hl.h:88
int skinrefs
Definition: model_hl.h:87
int ofs_hitboxes
Definition: model_hl.h:79
int controllerindex
Definition: model_hl.h:77
int version
Definition: model_hl.h:69
int boneindex
Definition: model_hl.h:75
int textures
Definition: model_hl.h:85
int numtextures
Definition: model_hl.h:84
int num_attachments
Definition: model_hl.h:92
int ofs_attachments
Definition: model_hl.h:93
int unknown4
Definition: model_hl.h:73
int numbones
Definition: model_hl.h:74
int numseq
Definition: model_hl.h:80
int unknown6
Definition: model_hl.h:82
int filesize
Definition: model_hl.h:71
int skins
Definition: model_hl.h:89
int numcontrollers
Definition: model_hl.h:76
int bodypartindex
Definition: model_hl.h:91
int numbodyparts
Definition: model_hl.h:90
int num_hitboxes
Definition: model_hl.h:78
int seqgroups
Definition: model_hl.h:83
Definition: model_hl.h:163
vec3_t mins
Definition: model_hl.h:166
int bone
Definition: model_hl.h:164
vec3_t maxs
Definition: model_hl.h:167
int body
Definition: model_hl.h:165
Definition: model_hl.h:130
int skinindex
Definition: model_hl.h:133
int unknown3
Definition: model_hl.h:135
int index
Definition: model_hl.h:132
int numtris
Definition: model_hl.h:131
int unknown2
Definition: model_hl.h:134
Definition: model_hl.h:273
unsigned int cache
Definition: model_hl.h:275
int data
Definition: model_hl.h:276
Definition: model_hl.h:280
int unk1
Definition: model_hl.h:284
int magic
Definition: model_hl.h:281
int version
Definition: model_hl.h:282
Definition: model_hl.h:235
int actionweight
Definition: model_hl.h:240
int loop
Definition: model_hl.h:238
int hasblendseq
Definition: model_hl.h:250
float timing
Definition: model_hl.h:237
int unknown8
Definition: model_hl.h:254
int motionbone
Definition: model_hl.h:246
int num_events
Definition: model_hl.h:241
int index
Definition: model_hl.h:251
int action
Definition: model_hl.h:239
vec3_t unknown3
Definition: model_hl.h:247
int motiontype
Definition: model_hl.h:245
unsigned int seqindex
Definition: model_hl.h:255
int numframes
Definition: model_hl.h:243
int ofs_events
Definition: model_hl.h:242
Definition: model_hl.h:191
int normindex
Definition: model_hl.h:201
float unknown2
Definition: model_hl.h:194
int nummesh
Definition: model_hl.h:195
int numverts
Definition: model_hl.h:197
int vertindex
Definition: model_hl.h:199
int meshindex
Definition: model_hl.h:196
int vertinfoindex
Definition: model_hl.h:198
int unknown1
Definition: model_hl.h:193
Definition: model_hl.h:103
int w
Definition: model_hl.h:106
int flags
Definition: model_hl.h:105
int offset
Definition: model_hl.h:108
int h
Definition: model_hl.h:107
Definition: model_hl.h:305
texnums_t defaulttex
Definition: model_hl.h:308
unsigned short x
Definition: model_hl.h:312
int h
Definition: model_hl.h:310
char * defaultshadertext
Definition: model_hl.h:307
int atlasid
Definition: model_hl.h:311
shader_t * shader
Definition: model_hl.h:309
Definition: model_hl.h:294
mesh_t * submesh
Definition: model_hl.h:325
short * skinref
Definition: model_hl.h:314
hlmdl_header_t * header
Definition: model_hl.h:299
int numskingroups
Definition: model_hl.h:316
mesh_t mesh
Definition: model_hl.h:328
int numgeomsets
Definition: model_hl.h:318
int numskinrefs
Definition: model_hl.h:315
zonegroup_t * memgroup
Definition: model_hl.h:303
int numalternatives
Definition: model_hl.h:321
qboolean vbobuilt
Definition: model_hl.h:330
hlmdl_bone_t * bones
Definition: model_hl.h:300
hlmdl_bonecontroller_t * bonectls
Definition: model_hl.h:301
int numsubmeshes
Definition: model_hl.h:324
vbo_t vbo
Definition: model_hl.h:329
Definition: gl_model.h:90
Definition: gl_model.h:972
Definition: shader.h:602
Definition: merged.h:383
Definition: gl_model.h:320
Definition: zone.h:130
Definition: model_hl.h:221
qbyte valid
Definition: model_hl.h:223
qbyte total
Definition: model_hl.h:224
short value
Definition: model_hl.h:226