12#ifndef TT_INCLUDE_W3D_H
13#define TT_INCLUDE_W3D_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
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,
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,
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,
89 W3D_CHUNK_COLLISION_NODE,
91 OBSOLETE_W3D_CHUNK_HMODEL_AUX_DATA,
92 OBSOLETE_W3D_CHUNK_SHADOW_NODE,
93 W3D_CHUNK_LODMODEL =0x00000400,
94 W3D_CHUNK_LODMODEL_HEADER,
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,
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,
154typedef IOVector3Struct W3dVectorStruct;
155typedef IOQuaternionStruct W3dQuaternionStruct;
156struct W3dTexCoordStruct
158 bool operator == (W3dTexCoordStruct t)
160 return ((U == t.U) && (V == t.V));
168 W3dRGBStruct (uint8 r, uint8 g, uint8 b)
175 void Set (uint8 r, uint8 g, uint8 b)
182 void Set (
float r,
float g,
float b)
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)));
189 bool operator == (W3dRGBStruct c)
191 return ((R == c.R) && (G == c.G) && (B == c.B));
194 bool operator != (W3dRGBStruct c)
196 return (!(*
this == c));
199 W3dRGBStruct operator += (W3dRGBStruct c)
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);
207 W3dRGBStruct operator *= (W3dRGBStruct c)
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);
217 return (R<<24)|(G<<16)|(B<<8);
232struct W3dMaterialInfoStruct
235 uint32 VertexMaterialCount;
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
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
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
287 W3dVertexMaterialStruct(
void) {}
289 bool operator == (W3dVertexMaterialStruct vm)
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);
301 bool operator != (W3dVertexMaterialStruct vm)
303 return (!(*
this == vm));
307 W3dRGBStruct Ambient;
308 W3dRGBStruct Diffuse;
309 W3dRGBStruct Specular;
310 W3dRGBStruct Emissive;
315inline void W3d_Vertex_Material_Reset(W3dVertexMaterialStruct * vmat)
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;
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,
338 W3DSHADER_DEPTHMASK_WRITE_DISABLE = 0,
339 W3DSHADER_DEPTHMASK_WRITE_ENABLE,
340 W3DSHADER_DEPTHMASK_WRITE_MAX,
342 W3DSHADER_ALPHATEST_DISABLE = 0,
343 W3DSHADER_ALPHATEST_ENABLE,
344 W3DSHADER_ALPHATEST_MAX,
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,
355 W3DSHADER_PRIGRADIENT_DISABLE = 0,
356 W3DSHADER_PRIGRADIENT_MODULATE,
357 W3DSHADER_PRIGRADIENT_ADD,
358 W3DSHADER_PRIGRADIENT_BUMPENVMAP,
359 W3DSHADER_PRIGRADIENT_MAX,
361 W3DSHADER_SECGRADIENT_DISABLE = 0,
362 W3DSHADER_SECGRADIENT_ENABLE,
363 W3DSHADER_SECGRADIENT_MAX,
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,
371 W3DSHADER_TEXTURING_DISABLE = 0,
372 W3DSHADER_TEXTURING_ENABLE,
373 W3DSHADER_TEXTURING_MAX,
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,
386 W3DSHADER_DETAILALPHAFUNC_DISABLE = 0,
387 W3DSHADER_DETAILALPHAFUNC_DETAIL,
388 W3DSHADER_DETAILALPHAFUNC_SCALE,
389 W3DSHADER_DETAILALPHAFUNC_INVSCALE,
390 W3DSHADER_DETAILALPHAFUNC_MAX,
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,
403struct W3dShaderStruct
405 W3dShaderStruct(
void) {}
415 uint8 DetailColorFunc;
416 uint8 DetailAlphaFunc;
419 uint8 PostDetailColorFunc;
420 uint8 PostDetailAlphaFunc;
423inline void W3d_Shader_Reset(W3dShaderStruct * s) {
424 s->DepthCompare = W3DSHADER_DEPTHCOMPARE_PASS_LEQUAL;
425 s->DepthMask = W3DSHADER_DEPTHMASK_WRITE_ENABLE;
427 s->DestBlend = W3DSHADER_DESTBLENDFUNC_ZERO;
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;
436 s->AlphaTest = W3DSHADER_ALPHATEST_DISABLE;
437 s->PostDetailColorFunc = W3DSHADER_DETAILCOLORFUNC_DISABLE;
438 s->PostDetailAlphaFunc = W3DSHADER_DETAILALPHAFUNC_DISABLE;
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
492 W3dTextureInfoStruct(
void) {}
502 W3dVectorStruct Normal;
507 SURFACE_TYPE_LIGHT_METAL = 0,
508 SURFACE_TYPE_HEAVY_METAL,
515 SURFACE_TYPE_CONCRETE,
520 SURFACE_TYPE_DEFAULT,
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,
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,
542static const char* SURFACE_TYPE_STRINGS[32] =
566 "Electrical Permeable",
568 "Flammable Permeable",
573 "Tiberium Water Permeable",
575 "Underwater Tiberium Dirt",
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
624 char ContainerName[16];
628 uint32 NumDamageStages;
630 uint32 PrelitVersion;
631 uint32 FutureCounts[1];
632 uint32 VertexChannels;
636 W3dVectorStruct SphCenter;
640struct W3dVertInfStruct
646struct W3dMeshAABTreeHeader
652struct W3dMeshAABTreeNode
657 uint32 BackOrPolyCount;
659#define W3D_CURRENT_HTREE_VERSION W3D_MAKE_VERSION(4,1)
660struct W3dHierarchyStruct
663 char Name[W3D_NAME_LEN];
665 W3dVectorStruct Center;
669 char Name[W3D_NAME_LEN];
671 W3dVectorStruct Translation;
672 W3dVectorStruct EulerAngles;
673 W3dQuaternionStruct Rotation;
675struct W3dPivotFixupStruct
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
685 char Name[W3D_NAME_LEN];
686 char HierarchyName[W3D_NAME_LEN];
691struct W3dCompressedAnimHeaderStruct
694 char Name[W3D_NAME_LEN];
695 char HierarchyName[W3D_NAME_LEN];
710 ANIM_CHANNEL_TIMECODED_X,
711 ANIM_CHANNEL_TIMECODED_Y,
712 ANIM_CHANNEL_TIMECODED_Z,
713 ANIM_CHANNEL_TIMECODED_Q,
715 ANIM_CHANNEL_ADAPTIVEDELTA_X,
716 ANIM_CHANNEL_ADAPTIVEDELTA_Y,
717 ANIM_CHANNEL_ADAPTIVEDELTA_Z,
718 ANIM_CHANNEL_ADAPTIVEDELTA_Q,
724 ANIM_FLAVOR_TIMECODED = 0,
725 ANIM_FLAVOR_ADAPTIVE_DELTA,
729struct W3dAnimChannelStruct
742 BIT_CHANNEL_TIMECODED_VIS,
744struct W3dBitChannelStruct
753#define W3D_TIMECODED_BINARY_MOVEMENT_FLAG 0x80000000
754struct W3dTimeCodedAnimChannelStruct
762#define W3D_TIMECODED_BIT_MASK 0x80000000
763struct W3dTimeCodedBitChannelStruct
771struct W3dAdaptiveDeltaAnimChannelStruct
782struct W3dMorphAnimHeaderStruct
785 char Name[W3D_NAME_LEN];
786 char HierarchyName[W3D_NAME_LEN];
791struct W3dMorphAnimKeyStruct
796#define W3D_CURRENT_HMODEL_VERSION W3D_MAKE_VERSION(4,2)
797struct W3dHModelHeaderStruct
800 char Name[W3D_NAME_LEN];
801 char HierarchyName[W3D_NAME_LEN];
802 uint16 NumConnections;
804struct W3dHModelNodeStruct
806 char RenderObjName[W3D_NAME_LEN];
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
819 W3dRGBStruct Ambient;
820 W3dRGBStruct Diffuse;
821 W3dRGBStruct Specular;
824struct W3dSpotLightStruct
826 W3dVectorStruct SpotDirection;
830struct W3dLightAttenuationStruct
835struct W3dLightTransformStruct
837 float Transform [3][4];
839#define W3D_CURRENT_EMITTER_VERSION 0x00020000
842 EMITTER_TYPEID_DEFAULT = 0,
845extern const char *EMITTER_TYPE_NAMES[EMITTER_TYPEID_COUNT];
846struct W3dEmitterHeaderStruct
849 char Name[W3D_NAME_LEN];
851struct W3dEmitterUserInfoStruct
854 uint32 SizeofStringParam;
857struct W3dEmitterInfoStruct
859 char TextureFilename[260];
865 float VelocityRandom;
866 float PositionRandom;
870 W3dVectorStruct Velocity;
871 W3dVectorStruct Acceleration;
872 W3dRGBAStruct StartColor;
873 W3dRGBAStruct EndColor;
875struct W3dVolumeRandomizerStruct
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
896 W3dVolumeRandomizerStruct CreationVolume;
897 W3dVolumeRandomizerStruct VelRandom;
900 W3dShaderStruct Shader;
905struct W3dEmitterPropertyStruct
907 uint32 ColorKeyframes;
908 uint32 OpacityKeyframes;
909 uint32 SizeKeyframes;
910 W3dRGBAStruct ColorRandom;
915struct W3dEmitterColorKeyframeStruct
920struct W3dEmitterOpacityKeyframeStruct
925struct W3dEmitterSizeKeyframeStruct
930struct W3dEmitterRotationHeaderStruct
932 uint32 KeyframeCount;
934 float OrientationRandom;
937struct W3dEmitterRotationKeyframeStruct
942struct W3dEmitterFrameHeaderStruct
944 uint32 KeyframeCount;
948struct W3dEmitterFrameKeyframeStruct
953struct W3dEmitterBlurTimeHeaderStruct
955 uint32 KeyframeCount;
959struct W3dEmitterBlurTimeKeyframeStruct
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
977 uint32 SubdivisionLevel;
978 float NoiseAmplitude;
979 float MergeAbortFactor;
980 float TextureTileFactor;
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
991 char Name[W3D_NAME_LEN];
993struct W3dAggregateInfoStruct
995 char BaseModelName[W3D_NAME_LEN*2];
996 uint32 SubobjectCount;
998struct W3dAggregateSubobjectStruct
1000 char SubobjectName[W3D_NAME_LEN*2];
1001 char BoneName[W3D_NAME_LEN*2];
1003const int W3D_AGGREGATE_FORCE_SUB_OBJ_LOD = 0x00000001;
1004struct W3dAggregateMiscInfo
1006 uint32 OriginalClassID;
1010#define W3D_CURRENT_HLOD_VERSION W3D_MAKE_VERSION(1,0)
1011#define NO_MAX_SCREEN_SIZE WWMATH_FLOAT_MAX
1012struct W3dHLodHeaderStruct
1016 char Name[W3D_NAME_LEN];
1017 char HierarchyName[W3D_NAME_LEN];
1019struct W3dHLodArrayHeaderStruct
1022 float MaxScreenSize;
1024struct W3dHLodSubObjectStruct
1027 char Name[W3D_NAME_LEN*2];
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
1043 char Name[2*W3D_NAME_LEN];
1045 W3dVectorStruct Center;
1046 W3dVectorStruct Extent;
1048#define W3D_NULL_OBJECT_CURRENT_VERSION W3D_MAKE_VERSION(1,0)
1049struct W3dNullObjectStruct
1054 char Name[2*W3D_NAME_LEN];
1056#define W3D_CURRENT_SOUNDROBJ_VERSION 0x00010000
1057struct W3dSoundRObjHeaderStruct
1064struct W3dCollectionHeaderStruct
1066 unsigned long Version;
1067 char Name[W3D_NAME_LEN];
1068 unsigned long RenderObjectCount;
1069 unsigned long pad[2];