Tiberian Technologies Scripts Reference Revision: 9000
Loading...
Searching...
No Matches
w3d.h
1/* Renegade Scripts.dll
2 Copyright 2013 Tiberian Technologies
3
4 This file is part of the Renegade scripts.dll
5 The Renegade scripts.dll is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free
7 Software Foundation; either version 2, or (at your option) any later
8 version. See the file COPYING for more details.
9 In addition, an exemption is given to allow Run Time Dynamic Linking of this code with any closed source module that does not contain code covered by this licence.
10 Only the source code to the module(s) containing the licenced code has to be released.
11*/
12#ifndef TT_INCLUDE_W3D_H
13#define TT_INCLUDE_W3D_H
14#include "engine_io.h"
15#define W3D_MAKE_VERSION(major,minor) (((major) << 16) | (minor))
16#define W3D_GET_MAJOR_VERSION(ver) ((ver)>>16)
17#define W3D_GET_MINOR_VERSION(ver) ((ver) & 0xFFFF)
18#define MAX(a,b) (((a) > (b)) ? (a) : (b))
19#define MIN(a,b) (((a) < (b)) ? (a) : (b))
20#define W3D_NAME_LEN 16
21enum {
22
23 W3D_CHUNK_MESH =0x00000000,
24 W3D_CHUNK_VERTICES =0x00000002,
25 W3D_CHUNK_VERTEX_NORMALS =0x00000003,
26 W3D_CHUNK_MESH_USER_TEXT =0x0000000C,
27 W3D_CHUNK_VERTEX_INFLUENCES =0x0000000E,
28 W3D_CHUNK_MESH_HEADER3 =0x0000001F,
29 W3D_CHUNK_TRIANGLES =0x00000020,
30 W3D_CHUNK_VERTEX_SHADE_INDICES =0x00000022,
31 W3D_CHUNK_PRELIT_UNLIT =0x00000023,
32 W3D_CHUNK_PRELIT_VERTEX =0x00000024,
33 W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_PASS =0x00000025,
34 W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_TEXTURE =0x00000026,
35 W3D_CHUNK_MATERIAL_INFO =0x00000028,
36 W3D_CHUNK_SHADERS =0x00000029,
37 W3D_CHUNK_VERTEX_MATERIALS =0x0000002A,
38 W3D_CHUNK_VERTEX_MATERIAL =0x0000002B,
39 W3D_CHUNK_VERTEX_MATERIAL_NAME =0x0000002C,
40 W3D_CHUNK_VERTEX_MATERIAL_INFO =0x0000002D,
41 W3D_CHUNK_VERTEX_MAPPER_ARGS0 =0x0000002E,
42 W3D_CHUNK_VERTEX_MAPPER_ARGS1 =0x0000002F,
43 W3D_CHUNK_TEXTURES =0x00000030,
44 W3D_CHUNK_TEXTURE =0x00000031,
45 W3D_CHUNK_TEXTURE_NAME =0x00000032,
46 W3D_CHUNK_TEXTURE_INFO =0x00000033,
47 W3D_CHUNK_MATERIAL_PASS =0x00000038,
48 W3D_CHUNK_VERTEX_MATERIAL_IDS =0x00000039,
49 W3D_CHUNK_SHADER_IDS =0x0000003A,
50 W3D_CHUNK_DCG =0x0000003B,
51 W3D_CHUNK_DIG =0x0000003C,
52 W3D_CHUNK_SCG =0x0000003E,
53 W3D_CHUNK_TEXTURE_STAGE =0x00000048,
54 W3D_CHUNK_TEXTURE_IDS =0x00000049,
55 W3D_CHUNK_STAGE_TEXCOORDS =0x0000004A,
56 W3D_CHUNK_PER_FACE_TEXCOORD_IDS =0x0000004B,
57 W3D_CHUNK_DEFORM =0x00000058,
58 W3D_CHUNK_DEFORM_SET =0x00000059,
59 W3D_CHUNK_DEFORM_KEYFRAME =0x0000005A,
60 W3D_CHUNK_DEFORM_DATA =0x0000005B,
61 W3D_CHUNK_TANGENTS =0x00000060,
62 W3D_CHUNK_BINORMALS,
63 W3D_CHUNK_PS2_SHADERS =0x00000080,
64 W3D_CHUNK_AABTREE =0x00000090,
65 W3D_CHUNK_AABTREE_HEADER,
66 W3D_CHUNK_AABTREE_POLYINDICES,
67 W3D_CHUNK_AABTREE_NODES,
68 W3D_CHUNK_HIERARCHY =0x00000100,
69 W3D_CHUNK_HIERARCHY_HEADER,
70 W3D_CHUNK_PIVOTS,
71 W3D_CHUNK_PIVOT_FIXUPS,
72 W3D_CHUNK_ANIMATION =0x00000200,
73 W3D_CHUNK_ANIMATION_HEADER,
74 W3D_CHUNK_ANIMATION_CHANNEL,
75 W3D_CHUNK_BIT_CHANNEL,
76 W3D_CHUNK_COMPRESSED_ANIMATION =0x00000280,
77 W3D_CHUNK_COMPRESSED_ANIMATION_HEADER,
78 W3D_CHUNK_COMPRESSED_ANIMATION_CHANNEL,
79 W3D_CHUNK_COMPRESSED_BIT_CHANNEL,
80 W3D_CHUNK_MORPH_ANIMATION =0x000002C0,
81 W3D_CHUNK_MORPHANIM_HEADER,
82 W3D_CHUNK_MORPHANIM_CHANNEL,
83 W3D_CHUNK_MORPHANIM_POSENAME,
84 W3D_CHUNK_MORPHANIM_KEYDATA,
85 W3D_CHUNK_MORPHANIM_PIVOTCHANNELDATA,
86 W3D_CHUNK_HMODEL =0x00000300,
87 W3D_CHUNK_HMODEL_HEADER,
88 W3D_CHUNK_NODE,
89 W3D_CHUNK_COLLISION_NODE,
90 W3D_CHUNK_SKIN_NODE,
91 OBSOLETE_W3D_CHUNK_HMODEL_AUX_DATA,
92 OBSOLETE_W3D_CHUNK_SHADOW_NODE,
93 W3D_CHUNK_LODMODEL =0x00000400,
94 W3D_CHUNK_LODMODEL_HEADER,
95 W3D_CHUNK_LOD,
96 W3D_CHUNK_COLLECTION =0x00000420,
97 W3D_CHUNK_COLLECTION_HEADER,
98 W3D_CHUNK_COLLECTION_OBJ_NAME,
99 W3D_CHUNK_PLACEHOLDER,
100 W3D_CHUNK_TRANSFORM_NODE,
101 W3D_CHUNK_POINTS =0x00000440,
102 W3D_CHUNK_LIGHT =0x00000460,
103 W3D_CHUNK_LIGHT_INFO,
104 W3D_CHUNK_SPOT_LIGHT_INFO,
105 W3D_CHUNK_NEAR_ATTENUATION,
106 W3D_CHUNK_FAR_ATTENUATION,
107 W3D_CHUNK_EMITTER =0x00000500,
108 W3D_CHUNK_EMITTER_HEADER,
109 W3D_CHUNK_EMITTER_USER_DATA,
110 W3D_CHUNK_EMITTER_INFO,
111 W3D_CHUNK_EMITTER_INFOV2,
112 W3D_CHUNK_EMITTER_PROPS,
113 OBSOLETE_W3D_CHUNK_EMITTER_COLOR_KEYFRAME,
114 OBSOLETE_W3D_CHUNK_EMITTER_OPACITY_KEYFRAME,
115 OBSOLETE_W3D_CHUNK_EMITTER_SIZE_KEYFRAME,
116 W3D_CHUNK_EMITTER_LINE_PROPERTIES,
117 W3D_CHUNK_EMITTER_ROTATION_KEYFRAMES,
118 W3D_CHUNK_EMITTER_FRAME_KEYFRAMES,
119 W3D_CHUNK_EMITTER_BLUR_TIME_KEYFRAMES,
120 W3D_CHUNK_AGGREGATE =0x00000600,
121 W3D_CHUNK_AGGREGATE_HEADER,
122 W3D_CHUNK_AGGREGATE_INFO,
123 W3D_CHUNK_TEXTURE_REPLACER_INFO,
124 W3D_CHUNK_AGGREGATE_CLASS_INFO,
125 W3D_CHUNK_HLOD =0x00000700,
126 W3D_CHUNK_HLOD_HEADER,
127 W3D_CHUNK_HLOD_LOD_ARRAY,
128 W3D_CHUNK_HLOD_SUB_OBJECT_ARRAY_HEADER,
129 W3D_CHUNK_HLOD_SUB_OBJECT,
130 W3D_CHUNK_HLOD_AGGREGATE_ARRAY,
131 W3D_CHUNK_HLOD_PROXY_ARRAY,
132 W3D_CHUNK_BOX =0x00000740,
133 W3D_CHUNK_SPHERE,
134 W3D_CHUNK_RING,
135 W3D_CHUNK_NULL_OBJECT =0x00000750,
136 W3D_CHUNK_LIGHTSCAPE =0x00000800,
137 W3D_CHUNK_LIGHTSCAPE_LIGHT,
138 W3D_CHUNK_LIGHT_TRANSFORM,
139 W3D_CHUNK_DAZZLE =0x00000900,
140 W3D_CHUNK_DAZZLE_NAME,
141 W3D_CHUNK_DAZZLE_TYPENAME,
142 W3D_CHUNK_SOUNDROBJ =0x00000A00,
143 W3D_CHUNK_SOUNDROBJ_HEADER,
144 W3D_CHUNK_SOUNDROBJ_DEFINITION,
145 W3D_CHUNK_SECONDARY_VERTICES =0x00000C00,
146 W3D_CHUNK_SECONDARY_VERTEX_NORMALS,
147 W3D_CHUNK_LIGHTMAP_UV,
148};
149struct W3dChunkHeader
150{
151 uint32 ChunkType;
152 uint32 ChunkSize;
153};
154typedef IOVector3Struct W3dVectorStruct;
155typedef IOQuaternionStruct W3dQuaternionStruct;
156struct W3dTexCoordStruct
157{
158 bool operator == (W3dTexCoordStruct t)
159 {
160 return ((U == t.U) && (V == t.V));
161 }
162 float U;
163 float V;
164};
165struct W3dRGBStruct
166{
167 W3dRGBStruct () {}
168 W3dRGBStruct (uint8 r, uint8 g, uint8 b)
169 {
170 R = r;
171 G = g;
172 B = b;
173 }
174
175 void Set (uint8 r, uint8 g, uint8 b)
176 {
177 R = r;
178 G = g;
179 B = b;
180 }
181
182 void Set (float r, float g, float b)
183 {
184 R = (unsigned char) MIN ((float) UCHAR_MAX, MAX (0.0f, r) * ((float) (UCHAR_MAX + 1)));
185 G = (unsigned char) MIN ((float) UCHAR_MAX, MAX (0.0f, g) * ((float) (UCHAR_MAX + 1)));
186 B = (unsigned char) MIN ((float) UCHAR_MAX, MAX (0.0f, b) * ((float) (UCHAR_MAX + 1)));
187 }
188
189 bool operator == (W3dRGBStruct c)
190 {
191 return ((R == c.R) && (G == c.G) && (B == c.B));
192 }
193
194 bool operator != (W3dRGBStruct c)
195 {
196 return (!(*this == c));
197 }
198
199 W3dRGBStruct operator += (W3dRGBStruct c)
200 {
201 R = MIN (((unsigned) R) + ((unsigned) c.R), (unsigned) UCHAR_MAX);
202 G = MIN (((unsigned) G) + ((unsigned) c.G), (unsigned) UCHAR_MAX);
203 B = MIN (((unsigned) B) + ((unsigned) c.B), (unsigned) UCHAR_MAX);
204 return (*this);
205 }
206
207 W3dRGBStruct operator *= (W3dRGBStruct c)
208 {
209 R = (((unsigned) R) * ((unsigned) c.R)) / ((unsigned) UCHAR_MAX);
210 G = (((unsigned) G) * ((unsigned) c.G)) / ((unsigned) UCHAR_MAX);
211 B = (((unsigned) B) * ((unsigned) c.B)) / ((unsigned) UCHAR_MAX);
212 return (*this);
213 }
214
215 unsigned Get_Color()
216 {
217 return (R<<24)|(G<<16)|(B<<8);
218 }
219
220 uint8 R;
221 uint8 G;
222 uint8 B;
223 uint8 pad;
224};
225struct W3dRGBAStruct
226{
227 uint8 R;
228 uint8 G;
229 uint8 B;
230 uint8 A;
231};
232struct W3dMaterialInfoStruct
233{
234 uint32 PassCount;
235 uint32 VertexMaterialCount;
236 uint32 ShaderCount;
237 uint32 TextureCount;
238};
239#define W3DVERTMAT_USE_DEPTH_CUE 0x00000001
240#define W3DVERTMAT_ARGB_EMISSIVE_ONLY 0x00000002
241#define W3DVERTMAT_COPY_SPECULAR_TO_DIFFUSE 0x00000004
242#define W3DVERTMAT_DEPTH_CUE_TO_ALPHA 0x00000008
243
244#define W3DVERTMAT_STAGE0_MAPPING_MASK 0x00FF0000
245#define W3DVERTMAT_STAGE0_MAPPING_UV 0x00000000
246#define W3DVERTMAT_STAGE0_MAPPING_ENVIRONMENT 0x00010000
247#define W3DVERTMAT_STAGE0_MAPPING_CHEAP_ENVIRONMENT 0x00020000
248#define W3DVERTMAT_STAGE0_MAPPING_SCREEN 0x00030000
249#define W3DVERTMAT_STAGE0_MAPPING_LINEAR_OFFSET 0x00040000
250#define W3DVERTMAT_STAGE0_MAPPING_SILHOUETTE 0x00050000
251#define W3DVERTMAT_STAGE0_MAPPING_SCALE 0x00060000
252#define W3DVERTMAT_STAGE0_MAPPING_GRID 0x00070000
253#define W3DVERTMAT_STAGE0_MAPPING_ROTATE 0x00080000
254#define W3DVERTMAT_STAGE0_MAPPING_SINE_LINEAR_OFFSET 0x00090000
255#define W3DVERTMAT_STAGE0_MAPPING_STEP_LINEAR_OFFSET 0x000A0000
256#define W3DVERTMAT_STAGE0_MAPPING_ZIGZAG_LINEAR_OFFSET 0x000B0000
257#define W3DVERTMAT_STAGE0_MAPPING_WS_CLASSIC_ENV 0x000C0000
258#define W3DVERTMAT_STAGE0_MAPPING_WS_ENVIRONMENT 0x000D0000
259#define W3DVERTMAT_STAGE0_MAPPING_GRID_CLASSIC_ENV 0x000E0000
260#define W3DVERTMAT_STAGE0_MAPPING_GRID_ENVIRONMENT 0x000F0000
261#define W3DVERTMAT_STAGE0_MAPPING_RANDOM 0x00100000
262#define W3DVERTMAT_STAGE0_MAPPING_EDGE 0x00110000
263#define W3DVERTMAT_STAGE0_MAPPING_BUMPENV 0x00120000
264
265#define W3DVERTMAT_STAGE1_MAPPING_MASK 0x0000FF00
266#define W3DVERTMAT_STAGE1_MAPPING_UV 0x00000000
267#define W3DVERTMAT_STAGE1_MAPPING_ENVIRONMENT 0x00000100
268#define W3DVERTMAT_STAGE1_MAPPING_CHEAP_ENVIRONMENT 0x00000200
269#define W3DVERTMAT_STAGE1_MAPPING_SCREEN 0x00000300
270#define W3DVERTMAT_STAGE1_MAPPING_LINEAR_OFFSET 0x00000400
271#define W3DVERTMAT_STAGE1_MAPPING_SILHOUETTE 0x00000500
272#define W3DVERTMAT_STAGE1_MAPPING_SCALE 0x00000600
273#define W3DVERTMAT_STAGE1_MAPPING_GRID 0x00000700
274#define W3DVERTMAT_STAGE1_MAPPING_ROTATE 0x00000800
275#define W3DVERTMAT_STAGE1_MAPPING_SINE_LINEAR_OFFSET 0x00000900
276#define W3DVERTMAT_STAGE1_MAPPING_STEP_LINEAR_OFFSET 0x00000A00
277#define W3DVERTMAT_STAGE1_MAPPING_ZIGZAG_LINEAR_OFFSET 0x00000B00
278#define W3DVERTMAT_STAGE1_MAPPING_WS_CLASSIC_ENV 0x00000C00
279#define W3DVERTMAT_STAGE1_MAPPING_WS_ENVIRONMENT 0x00000D00
280#define W3DVERTMAT_STAGE1_MAPPING_GRID_CLASSIC_ENV 0x00000E00
281#define W3DVERTMAT_STAGE1_MAPPING_GRID_ENVIRONMENT 0x00000F00
282#define W3DVERTMAT_STAGE1_MAPPING_RANDOM 0x00001000
283#define W3DVERTMAT_STAGE1_MAPPING_EDGE 0x00001100
284#define W3DVERTMAT_STAGE1_MAPPING_BUMPENV 0x00001200
285struct W3dVertexMaterialStruct
286{
287 W3dVertexMaterialStruct(void) {}
288
289 bool operator == (W3dVertexMaterialStruct vm)
290 {
291 return ( Attributes == vm.Attributes
292 && Ambient == vm.Ambient
293 && Diffuse == vm.Diffuse
294 && Specular == vm.Specular
295 && Emissive == vm.Emissive
296 && Shininess == vm.Shininess
297 && Opacity == vm.Opacity
298 && Translucency == vm.Translucency);
299 }
300
301 bool operator != (W3dVertexMaterialStruct vm)
302 {
303 return (!(*this == vm));
304 }
305
306 uint32 Attributes;
307 W3dRGBStruct Ambient;
308 W3dRGBStruct Diffuse;
309 W3dRGBStruct Specular;
310 W3dRGBStruct Emissive;
311 float Shininess;
312 float Opacity;
313 float Translucency;
314};
315inline void W3d_Vertex_Material_Reset(W3dVertexMaterialStruct * vmat)
316{
317 vmat->Attributes = 0;
318 vmat->Ambient.R = vmat->Ambient.G = vmat->Ambient.B = 255;
319 vmat->Diffuse.R = vmat->Diffuse.G = vmat->Diffuse.B = 255;
320 vmat->Specular.R = vmat->Specular.G = vmat->Specular.B = 0;
321 vmat->Emissive.R = vmat->Emissive.G = vmat->Emissive.B = 0;
322 vmat->Shininess = 1.0f;
323 vmat->Opacity = 1.0f;
324 vmat->Translucency = 0.0f;
325}
326enum
327{
328 W3DSHADER_DEPTHCOMPARE_PASS_NEVER = 0,
329 W3DSHADER_DEPTHCOMPARE_PASS_LESS,
330 W3DSHADER_DEPTHCOMPARE_PASS_EQUAL,
331 W3DSHADER_DEPTHCOMPARE_PASS_LEQUAL,
332 W3DSHADER_DEPTHCOMPARE_PASS_GREATER,
333 W3DSHADER_DEPTHCOMPARE_PASS_NOTEQUAL,
334 W3DSHADER_DEPTHCOMPARE_PASS_GEQUAL,
335 W3DSHADER_DEPTHCOMPARE_PASS_ALWAYS,
336 W3DSHADER_DEPTHCOMPARE_PASS_MAX,
337
338 W3DSHADER_DEPTHMASK_WRITE_DISABLE = 0,
339 W3DSHADER_DEPTHMASK_WRITE_ENABLE,
340 W3DSHADER_DEPTHMASK_WRITE_MAX,
341
342 W3DSHADER_ALPHATEST_DISABLE = 0,
343 W3DSHADER_ALPHATEST_ENABLE,
344 W3DSHADER_ALPHATEST_MAX,
345
346 W3DSHADER_DESTBLENDFUNC_ZERO = 0,
347 W3DSHADER_DESTBLENDFUNC_ONE,
348 W3DSHADER_DESTBLENDFUNC_SRC_COLOR,
349 W3DSHADER_DESTBLENDFUNC_ONE_MINUS_SRC_COLOR,
350 W3DSHADER_DESTBLENDFUNC_SRC_ALPHA,
351 W3DSHADER_DESTBLENDFUNC_ONE_MINUS_SRC_ALPHA,
352 W3DSHADER_DESTBLENDFUNC_SRC_COLOR_PREFOG,
353 W3DSHADER_DESTBLENDFUNC_MAX,
354
355 W3DSHADER_PRIGRADIENT_DISABLE = 0,
356 W3DSHADER_PRIGRADIENT_MODULATE,
357 W3DSHADER_PRIGRADIENT_ADD,
358 W3DSHADER_PRIGRADIENT_BUMPENVMAP,
359 W3DSHADER_PRIGRADIENT_MAX,
360
361 W3DSHADER_SECGRADIENT_DISABLE = 0,
362 W3DSHADER_SECGRADIENT_ENABLE,
363 W3DSHADER_SECGRADIENT_MAX,
364
365 W3DSHADER_SRCBLENDFUNC_ZERO = 0,
366 W3DSHADER_SRCBLENDFUNC_ONE,
367 W3DSHADER_SRCBLENDFUNC_SRC_ALPHA,
368 W3DSHADER_SRCBLENDFUNC_ONE_MINUS_SRC_ALPHA,
369 W3DSHADER_SRCBLENDFUNC_MAX,
370
371 W3DSHADER_TEXTURING_DISABLE = 0,
372 W3DSHADER_TEXTURING_ENABLE,
373 W3DSHADER_TEXTURING_MAX,
374
375 W3DSHADER_DETAILCOLORFUNC_DISABLE = 0,
376 W3DSHADER_DETAILCOLORFUNC_DETAIL,
377 W3DSHADER_DETAILCOLORFUNC_SCALE,
378 W3DSHADER_DETAILCOLORFUNC_INVSCALE,
379 W3DSHADER_DETAILCOLORFUNC_ADD,
380 W3DSHADER_DETAILCOLORFUNC_SUB,
381 W3DSHADER_DETAILCOLORFUNC_SUBR,
382 W3DSHADER_DETAILCOLORFUNC_BLEND,
383 W3DSHADER_DETAILCOLORFUNC_DETAILBLEND,
384 W3DSHADER_DETAILCOLORFUNC_MAX,
385
386 W3DSHADER_DETAILALPHAFUNC_DISABLE = 0,
387 W3DSHADER_DETAILALPHAFUNC_DETAIL,
388 W3DSHADER_DETAILALPHAFUNC_SCALE,
389 W3DSHADER_DETAILALPHAFUNC_INVSCALE,
390 W3DSHADER_DETAILALPHAFUNC_MAX,
391
392 W3DSHADER_DEPTHCOMPARE_DEFAULT = W3DSHADER_DEPTHCOMPARE_PASS_LEQUAL,
393 W3DSHADER_DEPTHMASK_DEFAULT = W3DSHADER_DEPTHMASK_WRITE_ENABLE,
394 W3DSHADER_ALPHATEST_DEFAULT = W3DSHADER_ALPHATEST_DISABLE,
395 W3DSHADER_DESTBLENDFUNC_DEFAULT = W3DSHADER_DESTBLENDFUNC_ZERO,
396 W3DSHADER_PRIGRADIENT_DEFAULT = W3DSHADER_PRIGRADIENT_MODULATE,
397 W3DSHADER_SECGRADIENT_DEFAULT = W3DSHADER_SECGRADIENT_DISABLE,
398 W3DSHADER_SRCBLENDFUNC_DEFAULT = W3DSHADER_SRCBLENDFUNC_ONE,
399 W3DSHADER_TEXTURING_DEFAULT = W3DSHADER_TEXTURING_DISABLE,
400 W3DSHADER_DETAILCOLORFUNC_DEFAULT = W3DSHADER_DETAILCOLORFUNC_DISABLE,
401 W3DSHADER_DETAILALPHAFUNC_DEFAULT = W3DSHADER_DETAILALPHAFUNC_DISABLE,
402};
403struct W3dShaderStruct
404{
405 W3dShaderStruct(void) {}
406 uint8 DepthCompare;
407 uint8 DepthMask;
408 uint8 ColorMask;
409 uint8 DestBlend;
410 uint8 FogFunc;
411 uint8 PriGradient;
412 uint8 SecGradient;
413 uint8 SrcBlend;
414 uint8 Texturing;
415 uint8 DetailColorFunc;
416 uint8 DetailAlphaFunc;
417 uint8 ShaderPreset;
418 uint8 AlphaTest;
419 uint8 PostDetailColorFunc;
420 uint8 PostDetailAlphaFunc;
421 uint8 pad[1];
422};
423inline void W3d_Shader_Reset(W3dShaderStruct * s) {
424 s->DepthCompare = W3DSHADER_DEPTHCOMPARE_PASS_LEQUAL;
425 s->DepthMask = W3DSHADER_DEPTHMASK_WRITE_ENABLE;
426 s->ColorMask = 0;
427 s->DestBlend = W3DSHADER_DESTBLENDFUNC_ZERO;
428 s->FogFunc = 0;
429 s->PriGradient = W3DSHADER_PRIGRADIENT_MODULATE;
430 s->SecGradient = W3DSHADER_SECGRADIENT_DISABLE;
431 s->SrcBlend = W3DSHADER_SRCBLENDFUNC_ONE;
432 s->Texturing = W3DSHADER_TEXTURING_DISABLE;
433 s->DetailColorFunc = W3DSHADER_DETAILCOLORFUNC_DISABLE;
434 s->DetailAlphaFunc = W3DSHADER_DETAILALPHAFUNC_DISABLE;
435 s->ShaderPreset = 0;
436 s->AlphaTest = W3DSHADER_ALPHATEST_DISABLE;
437 s->PostDetailColorFunc = W3DSHADER_DETAILCOLORFUNC_DISABLE;
438 s->PostDetailAlphaFunc = W3DSHADER_DETAILALPHAFUNC_DISABLE;
439 s->pad[0] = 0;
440 }
441
442inline void W3d_Shader_Set_Depth_Compare(W3dShaderStruct * s,int val) { s->DepthCompare = (uint8)val; }
443inline void W3d_Shader_Set_Depth_Mask(W3dShaderStruct * s,int val) { s->DepthMask = (uint8)val; }
444inline void W3d_Shader_Set_Dest_Blend_Func(W3dShaderStruct * s,int val) { s->DestBlend = (uint8)val; }
445inline void W3d_Shader_Set_Pri_Gradient(W3dShaderStruct * s,int val) { s->PriGradient = (uint8)val; }
446inline void W3d_Shader_Set_Sec_Gradient(W3dShaderStruct * s,int val) { s->SecGradient = (uint8)val; }
447inline void W3d_Shader_Set_Src_Blend_Func(W3dShaderStruct * s,int val) { s->SrcBlend = (uint8)val; }
448inline void W3d_Shader_Set_Texturing(W3dShaderStruct * s,int val) { s->Texturing = (uint8)val; }
449inline void W3d_Shader_Set_Detail_Color_Func(W3dShaderStruct * s,int val) { s->DetailColorFunc = (uint8)val; }
450inline void W3d_Shader_Set_Detail_Alpha_Func(W3dShaderStruct * s,int val) { s->DetailAlphaFunc = (uint8)val; }
451inline void W3d_Shader_Set_Alpha_Test(W3dShaderStruct * s,int val) { s->AlphaTest = (uint8)val; }
452inline void W3d_Shader_Set_Post_Detail_Color_Func(W3dShaderStruct * s,int val) { s->PostDetailColorFunc = (uint8)val; }
453inline void W3d_Shader_Set_Post_Detail_Alpha_Func(W3dShaderStruct * s,int val) { s->PostDetailAlphaFunc = (uint8)val; }
454inline int W3d_Shader_Get_Depth_Compare(const W3dShaderStruct * s) { return s->DepthCompare; }
455inline int W3d_Shader_Get_Depth_Mask(const W3dShaderStruct * s) { return s->DepthMask; }
456inline int W3d_Shader_Get_Dest_Blend_Func(const W3dShaderStruct * s) { return s->DestBlend; }
457inline int W3d_Shader_Get_Pri_Gradient(const W3dShaderStruct * s) { return s->PriGradient; }
458inline int W3d_Shader_Get_Sec_Gradient(const W3dShaderStruct * s) { return s->SecGradient; }
459inline int W3d_Shader_Get_Src_Blend_Func(const W3dShaderStruct * s) { return s->SrcBlend; }
460inline int W3d_Shader_Get_Texturing(const W3dShaderStruct * s) { return s->Texturing; }
461inline int W3d_Shader_Get_Detail_Color_Func(const W3dShaderStruct * s) { return s->DetailColorFunc; }
462inline int W3d_Shader_Get_Detail_Alpha_Func(const W3dShaderStruct * s) { return s->DetailAlphaFunc; }
463inline int W3d_Shader_Get_Alpha_Test(const W3dShaderStruct * s) { return s->AlphaTest; }
464inline int W3d_Shader_Get_Post_Detail_Color_Func(const W3dShaderStruct * s) { return s->PostDetailColorFunc; }
465inline int W3d_Shader_Get_Post_Detail_Alpha_Func(const W3dShaderStruct * s) { return s->PostDetailAlphaFunc; }
466#define W3DTEXTURE_PUBLISH 0x0001
467#define W3DTEXTURE_RESIZE_OBSOLETE 0x0002
468#define W3DTEXTURE_NO_LOD 0x0004
469#define W3DTEXTURE_CLAMP_U 0x0008
470#define W3DTEXTURE_CLAMP_V 0x0010
471#define W3DTEXTURE_ALPHA_BITMAP 0x0020
472#define W3DTEXTURE_MIP_LEVELS_MASK 0x00c0
473#define W3DTEXTURE_MIP_LEVELS_ALL 0x0000
474#define W3DTEXTURE_MIP_LEVELS_2 0x0040
475#define W3DTEXTURE_MIP_LEVELS_3 0x0080
476#define W3DTEXTURE_MIP_LEVELS_4 0x00c0
477#define W3DTEXTURE_HINT_SHIFT 8
478#define W3DTEXTURE_HINT_MASK 0x0000ff00
479#define W3DTEXTURE_HINT_BASE 0x0000
480#define W3DTEXTURE_HINT_EMISSIVE 0x0100
481#define W3DTEXTURE_HINT_ENVIRONMENT 0x0200
482#define W3DTEXTURE_HINT_SHINY_MASK 0x0300
483#define W3DTEXTURE_TYPE_MASK 0x1000
484#define W3DTEXTURE_TYPE_COLORMAP 0x0000
485#define W3DTEXTURE_TYPE_BUMPMAP 0x1000
486#define W3DTEXTURE_ANIM_LOOP 0x0000
487#define W3DTEXTURE_ANIM_PINGPONG 0x0001
488#define W3DTEXTURE_ANIM_ONCE 0x0002
489#define W3DTEXTURE_ANIM_MANUAL 0x0003
490struct W3dTextureInfoStruct
491{
492 W3dTextureInfoStruct(void) {}
493 uint16 Attributes;
494 uint16 AnimType;
495 uint32 FrameCount;
496 float FrameRate;
497};
498struct W3dTriStruct
499{
500 uint32 Vindex[3];
501 uint32 Attributes;
502 W3dVectorStruct Normal;
503 float Dist;
504};
505typedef enum
506{
507 SURFACE_TYPE_LIGHT_METAL = 0,
508 SURFACE_TYPE_HEAVY_METAL,
509 SURFACE_TYPE_WATER,
510 SURFACE_TYPE_SAND,
511 SURFACE_TYPE_DIRT,
512 SURFACE_TYPE_MUD,
513 SURFACE_TYPE_GRASS,
514 SURFACE_TYPE_WOOD,
515 SURFACE_TYPE_CONCRETE,
516 SURFACE_TYPE_FLESH,
517 SURFACE_TYPE_ROCK,
518 SURFACE_TYPE_SNOW,
519 SURFACE_TYPE_ICE,
520 SURFACE_TYPE_DEFAULT,
521 SURFACE_TYPE_GLASS,
522 SURFACE_TYPE_CLOTH,
523 SURFACE_TYPE_TIBERIUM_FIELD,
524 SURFACE_TYPE_FOLIAGE_PERMEABLE,
525 SURFACE_TYPE_GLASS_PERMEABLE,
526 SURFACE_TYPE_ICE_PERMEABLE,
527 SURFACE_TYPE_CLOTH_PERMEABLE,
528 SURFACE_TYPE_ELECTRICAL,
529 SURFACE_TYPE_FLAMMABLE,
530 SURFACE_TYPE_STEAM,
531 SURFACE_TYPE_ELECTRICAL_PERMEABLE,
532 SURFACE_TYPE_FLAMMABLE_PERMEABLE,
533 SURFACE_TYPE_STEAM_PERMEABLE,
534 SURFACE_TYPE_WATER_PERMEABLE,
535 SURFACE_TYPE_TIBERIUM_WATER,
536 SURFACE_TYPE_TIBERIUM_WATER_PERMEABLE,
537 SURFACE_TYPE_UNDERWATER_DIRT,
538 SURFACE_TYPE_UNDERWATER_TIBERIUM_DIRT,
539
540 SURFACE_TYPE_MAX
541} W3D_SURFACE_TYPES;
542static const char* SURFACE_TYPE_STRINGS[32] =
543{
544 "Light Metal",
545 "Heavy Metal",
546 "Water",
547 "Sand",
548 "Dirt",
549 "Mud",
550 "Grass",
551 "Wood",
552 "Concrete",
553 "Flesh",
554 "Rock",
555 "Snow",
556 "Ice",
557 "Default",
558 "Glass",
559 "Cloth",
560 "Tiberium Field",
561 "Foliage Permeable",
562 "Glass Permeable",
563 "Ice Permeable",
564 "Cloth Permeable",
565 "Electrical",
566 "Electrical Permeable",
567 "Flammable",
568 "Flammable Permeable",
569 "Steam",
570 "Steam Permeable",
571 "Water Permeable",
572 "Tiberium Water",
573 "Tiberium Water Permeable",
574 "Underwater Dirt",
575 "Underwater Tiberium Dirt",
576};
577#define W3D_MESH_FLAG_NONE 0x00000000
578#define W3D_MESH_FLAG_COLLISION_TYPE_MASK 0x00000FF0
579#define W3D_MESH_FLAG_COLLISION_TYPE_SHIFT 4
580#define W3D_MESH_FLAG_COLLISION_TYPE_PHYSICAL 0x00000010
581#define W3D_MESH_FLAG_COLLISION_TYPE_PROJECTILE 0x00000020
582#define W3D_MESH_FLAG_COLLISION_TYPE_VIS 0x00000040
583#define W3D_MESH_FLAG_COLLISION_TYPE_CAMERA 0x00000080
584#define W3D_MESH_FLAG_COLLISION_TYPE_VEHICLE 0x00000100
585#define W3D_MESH_FLAG_COLLISION_TYPE_USER1 0x00000200
586#define W3D_MESH_FLAG_COLLISION_TYPE_USER2 0x00000400
587#define W3D_MESH_FLAG_HIDDEN 0x00001000
588#define W3D_MESH_FLAG_TWO_SIDED 0x00002000
589#define OBSOLETE_W3D_MESH_FLAG_LIGHTMAPPED 0x00004000
590#define W3D_MESH_FLAG_CAST_SHADOW 0x00008000
591#define W3D_MESH_FLAG_GEOMETRY_TYPE_MASK 0x00FF0000
592#define W3D_MESH_FLAG_GEOMETRY_TYPE_NORMAL 0x00000000
593#define W3D_MESH_FLAG_GEOMETRY_TYPE_CAMERA_ALIGNED 0x00010000
594#define W3D_MESH_FLAG_GEOMETRY_TYPE_SKIN 0x00020000
595#define W3D_MESH_FLAG_GEOMETRY_TYPE_CAMERA_ORIENTED 0x00060000
596#define W3D_MESH_FLAG_GEOMETRY_TYPE_CAMERA_Z_ORIENTED 0x00070000
597#define W3D_MESH_FLAG_PRELIT_MASK 0x0F000000
598#define W3D_MESH_FLAG_PRELIT_UNLIT 0x01000000
599#define W3D_MESH_FLAG_PRELIT_VERTEX 0x02000000
600#define W3D_MESH_FLAG_PRELIT_LIGHTMAP_MULTI_PASS 0x04000000
601#define W3D_MESH_FLAG_PRELIT_LIGHTMAP_MULTI_TEXTURE 0x08000000
602#define W3D_MESH_FLAG_SHATTERABLE 0x10000000
603#define W3D_MESH_FLAG_NPATCHABLE 0x20000000
604#define W3D_CURRENT_MESH_VERSION W3D_MAKE_VERSION(4,2)
605#define W3D_VERTEX_CHANNEL_LOCATION 0x00000001
606#define W3D_VERTEX_CHANNEL_NORMAL 0x00000002
607#define W3D_VERTEX_CHANNEL_TEXCOORD 0x00000004
608#define W3D_VERTEX_CHANNEL_COLOR 0x00000008
609#define W3D_VERTEX_CHANNEL_BONEID 0x00000010
610#define W3D_VERTEX_CHANNEL_TANGENT 0x00000020
611#define W3D_VERTEX_CHANNEL_BINORMAL 0x00000040
612#define W3D_VERTEX_CHANNEL_SMOOTHSKIN 0x00000080
613#define W3D_FACE_CHANNEL_FACE 0x00000001
614#define SORT_LEVEL_NONE 0
615#define MAX_SORT_LEVEL 32
616#define SORT_LEVEL_BIN1 20
617#define SORT_LEVEL_BIN2 15
618#define SORT_LEVEL_BIN3 10
619struct W3dMeshHeader3Struct
620{
621 uint32 Version;
622 uint32 Attributes;
623 char MeshName[16];
624 char ContainerName[16];
625 uint32 NumTris;
626 uint32 NumVertices;
627 uint32 NumMaterials;
628 uint32 NumDamageStages;
629 sint32 SortLevel;
630 uint32 PrelitVersion;
631 uint32 FutureCounts[1];
632 uint32 VertexChannels;
633 uint32 FaceChannels;
634 W3dVectorStruct Min;
635 W3dVectorStruct Max;
636 W3dVectorStruct SphCenter;
637 float SphRadius;
638};
639
640struct W3dVertInfStruct
641{
642 uint16 BoneIdx[2];
643 uint16 Weight[2];
644};
645
646struct W3dMeshAABTreeHeader
647{
648 uint32 NodeCount;
649 uint32 PolyCount;
650 uint32 Padding[6];
651};
652struct W3dMeshAABTreeNode
653{
654 W3dVectorStruct Min;
655 W3dVectorStruct Max;
656 uint32 FrontOrPoly0;
657 uint32 BackOrPolyCount;
658};
659#define W3D_CURRENT_HTREE_VERSION W3D_MAKE_VERSION(4,1)
660struct W3dHierarchyStruct
661{
662 uint32 Version;
663 char Name[W3D_NAME_LEN];
664 uint32 NumPivots;
665 W3dVectorStruct Center;
666};
667struct W3dPivotStruct
668{
669 char Name[W3D_NAME_LEN];
670 uint32 ParentIdx;
671 W3dVectorStruct Translation;
672 W3dVectorStruct EulerAngles;
673 W3dQuaternionStruct Rotation;
674};
675struct W3dPivotFixupStruct
676{
677 float TM[4][3];
678};
679#define W3D_CURRENT_HANIM_VERSION W3D_MAKE_VERSION(4,1)
680#define W3D_CURRENT_COMPRESSED_HANIM_VERSION W3D_MAKE_VERSION(0,1)
681#define W3D_CURRENT_MORPH_HANIM_VERSION W3D_MAKE_VERSION(0,1)
682struct W3dAnimHeaderStruct
683{
684 uint32 Version;
685 char Name[W3D_NAME_LEN];
686 char HierarchyName[W3D_NAME_LEN];
687 uint32 NumFrames;
688 uint32 FrameRate;
689
690};
691struct W3dCompressedAnimHeaderStruct
692{
693 uint32 Version;
694 char Name[W3D_NAME_LEN];
695 char HierarchyName[W3D_NAME_LEN];
696 uint32 NumFrames;
697 uint16 FrameRate;
698 uint16 Flavor;
699};
700enum
701{
702 ANIM_CHANNEL_X = 0,
703 ANIM_CHANNEL_Y,
704 ANIM_CHANNEL_Z,
705 ANIM_CHANNEL_XR,
706 ANIM_CHANNEL_YR,
707 ANIM_CHANNEL_ZR,
708 ANIM_CHANNEL_Q,
709
710 ANIM_CHANNEL_TIMECODED_X,
711 ANIM_CHANNEL_TIMECODED_Y,
712 ANIM_CHANNEL_TIMECODED_Z,
713 ANIM_CHANNEL_TIMECODED_Q,
714
715 ANIM_CHANNEL_ADAPTIVEDELTA_X,
716 ANIM_CHANNEL_ADAPTIVEDELTA_Y,
717 ANIM_CHANNEL_ADAPTIVEDELTA_Z,
718 ANIM_CHANNEL_ADAPTIVEDELTA_Q,
719
720 ANIM_CHANNEL_VIS,
721};
722enum
723{
724 ANIM_FLAVOR_TIMECODED = 0,
725 ANIM_FLAVOR_ADAPTIVE_DELTA,
726
727 ANIM_FLAVOR_VALID
728};
729struct W3dAnimChannelStruct
730{
731 uint16 FirstFrame;
732 uint16 LastFrame;
733 uint16 VectorLen;
734 uint16 Flags;
735 uint16 Pivot;
736 uint16 pad;
737 float Data[1];
738};
739enum
740{
741 BIT_CHANNEL_VIS = 0,
742 BIT_CHANNEL_TIMECODED_VIS,
743};
744struct W3dBitChannelStruct
745{
746 uint16 FirstFrame;
747 uint16 LastFrame;
748 uint16 Flags;
749 uint16 Pivot;
750 uint8 DefaultVal;
751 uint8 Data[1];
752};
753#define W3D_TIMECODED_BINARY_MOVEMENT_FLAG 0x80000000
754struct W3dTimeCodedAnimChannelStruct
755{
756 uint32 NumTimeCodes;
757 uint16 Pivot;
758 uint8 VectorLen;
759 uint8 Flags;
760 uint32 Data[1];
761};
762#define W3D_TIMECODED_BIT_MASK 0x80000000
763struct W3dTimeCodedBitChannelStruct
764{
765 uint32 NumTimeCodes;
766 uint16 Pivot;
767 uint8 Flags;
768 uint8 DefaultVal;
769 uint32 Data[1];
770};
771struct W3dAdaptiveDeltaAnimChannelStruct
772{
773 uint32 NumFrames;
774 uint16 Pivot;
775 uint8 VectorLen;
776 uint8 Flags;
777 float Scale;
778
779 uint32 Data[1];
780
781};
782struct W3dMorphAnimHeaderStruct
783{
784 uint32 Version;
785 char Name[W3D_NAME_LEN];
786 char HierarchyName[W3D_NAME_LEN];
787 uint32 FrameCount;
788 float FrameRate;
789 uint32 ChannelCount;
790};
791struct W3dMorphAnimKeyStruct
792{
793 uint32 MorphFrame;
794 uint32 PoseFrame;
795};
796#define W3D_CURRENT_HMODEL_VERSION W3D_MAKE_VERSION(4,2)
797struct W3dHModelHeaderStruct
798{
799 uint32 Version;
800 char Name[W3D_NAME_LEN];
801 char HierarchyName[W3D_NAME_LEN];
802 uint16 NumConnections;
803};
804struct W3dHModelNodeStruct
805{
806 char RenderObjName[W3D_NAME_LEN];
807 uint16 PivotIdx;
808};
809#define W3D_CURRENT_LIGHT_VERSION W3D_MAKE_VERSION(1,0)
810#define W3D_LIGHT_ATTRIBUTE_TYPE_MASK 0x000000FF
811#define W3D_LIGHT_ATTRIBUTE_POINT 0x00000001
812#define W3D_LIGHT_ATTRIBUTE_DIRECTIONAL 0x00000002
813#define W3D_LIGHT_ATTRIBUTE_SPOT 0x00000003
814#define W3D_LIGHT_ATTRIBUTE_CAST_SHADOWS 0x00000100
815struct W3dLightStruct
816{
817 uint32 Attributes;
818 uint32 Unused;
819 W3dRGBStruct Ambient;
820 W3dRGBStruct Diffuse;
821 W3dRGBStruct Specular;
822 float Intensity;
823};
824struct W3dSpotLightStruct
825{
826 W3dVectorStruct SpotDirection;
827 float SpotAngle;
828 float SpotExponent;
829};
830struct W3dLightAttenuationStruct
831{
832 float Start;
833 float End;
834};
835struct W3dLightTransformStruct
836{
837 float Transform [3][4];
838};
839#define W3D_CURRENT_EMITTER_VERSION 0x00020000
840enum
841{
842 EMITTER_TYPEID_DEFAULT = 0,
843 EMITTER_TYPEID_COUNT
844};
845extern const char *EMITTER_TYPE_NAMES[EMITTER_TYPEID_COUNT];
846struct W3dEmitterHeaderStruct
847{
848 uint32 Version;
849 char Name[W3D_NAME_LEN];
850};
851struct W3dEmitterUserInfoStruct
852{
853 uint32 Type;
854 uint32 SizeofStringParam;
855 char StringParam[1];
856};
857struct W3dEmitterInfoStruct
858{
859 char TextureFilename[260];
860 float StartSize;
861 float EndSize;
862 float Lifetime;
863 float EmissionRate;
864 float MaxEmissions;
865 float VelocityRandom;
866 float PositionRandom;
867 float FadeTime;
868 float Gravity;
869 float Elasticity;
870 W3dVectorStruct Velocity;
871 W3dVectorStruct Acceleration;
872 W3dRGBAStruct StartColor;
873 W3dRGBAStruct EndColor;
874};
875struct W3dVolumeRandomizerStruct
876{
877 uint32 ClassID;
878 float Value1;
879 float Value2;
880 float Value3;
881 uint32 reserved[4];
882};
883#define W3D_EMITTER_RENDER_MODE_TRI_PARTICLES 0
884#define W3D_EMITTER_RENDER_MODE_QUAD_PARTICLES 1
885#define W3D_EMITTER_RENDER_MODE_LINE 2
886#define W3D_EMITTER_RENDER_MODE_LINEGRP_TETRA 3
887#define W3D_EMITTER_RENDER_MODE_LINEGRP_PRISM 4
888#define W3D_EMITTER_FRAME_MODE_1x1 0
889#define W3D_EMITTER_FRAME_MODE_2x2 1
890#define W3D_EMITTER_FRAME_MODE_4x4 2
891#define W3D_EMITTER_FRAME_MODE_8x8 3
892#define W3D_EMITTER_FRAME_MODE_16x16 4
893struct W3dEmitterInfoStructV2
894{
895 uint32 BurstSize;
896 W3dVolumeRandomizerStruct CreationVolume;
897 W3dVolumeRandomizerStruct VelRandom;
898 float OutwardVel;
899 float VelInherit;
900 W3dShaderStruct Shader;
901 uint32 RenderMode;
902 uint32 FrameMode;
903 uint32 reserved[6];
904};
905struct W3dEmitterPropertyStruct
906{
907 uint32 ColorKeyframes;
908 uint32 OpacityKeyframes;
909 uint32 SizeKeyframes;
910 W3dRGBAStruct ColorRandom;
911 float OpacityRandom;
912 float SizeRandom;
913 uint32 reserved[4];
914};
915struct W3dEmitterColorKeyframeStruct
916{
917 float Time;
918 W3dRGBAStruct Color;
919};
920struct W3dEmitterOpacityKeyframeStruct
921{
922 float Time;
923 float Opacity;
924};
925struct W3dEmitterSizeKeyframeStruct
926{
927 float Time;
928 float Size;
929};
930struct W3dEmitterRotationHeaderStruct
931{
932 uint32 KeyframeCount;
933 float Random;
934 float OrientationRandom;
935 uint32 Reserved[1];
936};
937struct W3dEmitterRotationKeyframeStruct
938{
939 float Time;
940 float Rotation;
941};
942struct W3dEmitterFrameHeaderStruct
943{
944 uint32 KeyframeCount;
945 float Random;
946 uint32 Reserved[2];
947};
948struct W3dEmitterFrameKeyframeStruct
949{
950 float Time;
951 float Frame;
952};
953struct W3dEmitterBlurTimeHeaderStruct
954{
955 uint32 KeyframeCount;
956 float Random;
957 uint32 Reserved[1];
958};
959struct W3dEmitterBlurTimeKeyframeStruct
960{
961 float Time;
962 float BlurTime;
963};
964#define W3D_ELINE_MERGE_INTERSECTIONS 0x00000001
965#define W3D_ELINE_FREEZE_RANDOM 0x00000002
966#define W3D_ELINE_DISABLE_SORTING 0x00000004
967#define W3D_ELINE_END_CAPS 0x00000008
968#define W3D_ELINE_TEXTURE_MAP_MODE_MASK 0xFF000000
969#define W3D_ELINE_TEXTURE_MAP_MODE_OFFSET 24
970#define W3D_ELINE_UNIFORM_WIDTH_TEXTURE_MAP 0x00000000
971#define W3D_ELINE_UNIFORM_LENGTH_TEXTURE_MAP 0x00000001
972#define W3D_ELINE_TILED_TEXTURE_MAP 0x00000002
973#define W3D_ELINE_DEFAULT_BITS (W3D_ELINE_MERGE_INTERSECTIONS | (W3D_ELINE_UNIFORM_WIDTH_TEXTURE_MAP << W3D_ELINE_TEXTURE_MAP_MODE_OFFSET))
974struct W3dEmitterLinePropertiesStruct
975{
976 uint32 Flags;
977 uint32 SubdivisionLevel;
978 float NoiseAmplitude;
979 float MergeAbortFactor;
980 float TextureTileFactor;
981 float UPerSec;
982 float VPerSec;
983 uint32 Reserved[9];
984};
985#define W3D_CURRENT_AGGREGATE_VERSION 0x00010003
986const int MESH_PATH_ENTRIES = 15;
987const int MESH_PATH_ENTRY_LEN = (W3D_NAME_LEN * 2);
988struct W3dAggregateHeaderStruct
989{
990 uint32 Version;
991 char Name[W3D_NAME_LEN];
992};
993struct W3dAggregateInfoStruct
994{
995 char BaseModelName[W3D_NAME_LEN*2];
996 uint32 SubobjectCount;
997};
998struct W3dAggregateSubobjectStruct
999{
1000 char SubobjectName[W3D_NAME_LEN*2];
1001 char BoneName[W3D_NAME_LEN*2];
1002};
1003const int W3D_AGGREGATE_FORCE_SUB_OBJ_LOD = 0x00000001;
1004struct W3dAggregateMiscInfo
1005{
1006 uint32 OriginalClassID;
1007 uint32 Flags;
1008 uint32 reserved[3];
1009};
1010#define W3D_CURRENT_HLOD_VERSION W3D_MAKE_VERSION(1,0)
1011#define NO_MAX_SCREEN_SIZE WWMATH_FLOAT_MAX
1012struct W3dHLodHeaderStruct
1013{
1014 uint32 Version;
1015 uint32 LodCount;
1016 char Name[W3D_NAME_LEN];
1017 char HierarchyName[W3D_NAME_LEN];
1018};
1019struct W3dHLodArrayHeaderStruct
1020{
1021 uint32 ModelCount;
1022 float MaxScreenSize;
1023};
1024struct W3dHLodSubObjectStruct
1025{
1026 uint32 BoneIndex;
1027 char Name[W3D_NAME_LEN*2];
1028};
1029#define W3D_BOX_CURRENT_VERSION W3D_MAKE_VERSION(1,0)
1030#define W3D_BOX_ATTRIBUTE_ORIENTED 0x00000001
1031#define W3D_BOX_ATTRIBUTE_ALIGNED 0x00000002
1032#define W3D_BOX_ATTRIBUTE_COLLISION_TYPE_MASK 0x00000FF0
1033#define W3D_BOX_ATTRIBUTE_COLLISION_TYPE_SHIFT 4
1034#define W3D_BOX_ATTRIBTUE_COLLISION_TYPE_PHYSICAL 0x00000010
1035#define W3D_BOX_ATTRIBTUE_COLLISION_TYPE_PROJECTILE 0x00000020
1036#define W3D_BOX_ATTRIBTUE_COLLISION_TYPE_VIS 0x00000040
1037#define W3D_BOX_ATTRIBTUE_COLLISION_TYPE_CAMERA 0x00000080
1038#define W3D_BOX_ATTRIBTUE_COLLISION_TYPE_VEHICLE 0x00000100
1039struct W3dBoxStruct
1040{
1041 uint32 Version;
1042 uint32 Attributes;
1043 char Name[2*W3D_NAME_LEN];
1044 W3dRGBStruct Color;
1045 W3dVectorStruct Center;
1046 W3dVectorStruct Extent;
1047};
1048#define W3D_NULL_OBJECT_CURRENT_VERSION W3D_MAKE_VERSION(1,0)
1049struct W3dNullObjectStruct
1050{
1051 uint32 Version;
1052 uint32 Attributes;
1053 uint32 pad[2];
1054 char Name[2*W3D_NAME_LEN];
1055};
1056#define W3D_CURRENT_SOUNDROBJ_VERSION 0x00010000
1057struct W3dSoundRObjHeaderStruct
1058{
1059 uint32 Version;
1060 char Name[16];
1061 uint32 Flags;
1062 uint32 Padding[8];
1063};
1064struct W3dCollectionHeaderStruct
1065{
1066 unsigned long Version;
1067 char Name[W3D_NAME_LEN];
1068 unsigned long RenderObjectCount;
1069 unsigned long pad[2];
1070};
1071#endif