mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
304 lines
No EOL
5.7 KiB
C
304 lines
No EOL
5.7 KiB
C
#ifndef MODELHEADERS_H
|
|
#define MODELHEADERS_H
|
|
|
|
typedef unsigned char uint8;
|
|
typedef char int8;
|
|
typedef unsigned short uint16;
|
|
typedef short int16;
|
|
typedef unsigned int uint32;
|
|
typedef int int32;
|
|
|
|
#pragma pack(push,1)
|
|
|
|
struct ModelHeader {
|
|
char id[4];
|
|
uint8 version[4];
|
|
uint32 nameLength;
|
|
uint32 nameOfs;
|
|
uint32 type;
|
|
|
|
uint32 nGlobalSequences;
|
|
uint32 ofsGlobalSequences;
|
|
uint32 nAnimations;
|
|
uint32 ofsAnimations;
|
|
uint32 nC;
|
|
uint32 ofsC;
|
|
uint32 nD;
|
|
uint32 ofsD;
|
|
uint32 nBones;
|
|
uint32 ofsBones;
|
|
uint32 nF;
|
|
uint32 ofsF;
|
|
|
|
uint32 nVertices;
|
|
uint32 ofsVertices;
|
|
uint32 nViews;
|
|
uint32 ofsViews;
|
|
|
|
uint32 nColors;
|
|
uint32 ofsColors;
|
|
|
|
uint32 nTextures;
|
|
uint32 ofsTextures;
|
|
|
|
uint32 nTransparency; // H
|
|
uint32 ofsTransparency;
|
|
uint32 nI; // always unused ?
|
|
uint32 ofsI;
|
|
uint32 nTexAnims; // J
|
|
uint32 ofsTexAnims;
|
|
uint32 nK;
|
|
uint32 ofsK;
|
|
|
|
uint32 nTexFlags;
|
|
uint32 ofsTexFlags;
|
|
uint32 nY;
|
|
uint32 ofsY;
|
|
|
|
uint32 nTexLookup;
|
|
uint32 ofsTexLookup;
|
|
|
|
uint32 nTexUnitLookup; // L
|
|
uint32 ofsTexUnitLookup;
|
|
uint32 nTransparencyLookup; // M
|
|
uint32 ofsTransparencyLookup;
|
|
uint32 nTexAnimLookup;
|
|
uint32 ofsTexAnimLookup;
|
|
|
|
float floats[14];
|
|
|
|
uint32 nBoundingTriangles;
|
|
uint32 ofsBoundingTriangles;
|
|
uint32 nBoundingVertices;
|
|
uint32 ofsBoundingVertices;
|
|
uint32 nBoundingNormals;
|
|
uint32 ofsBoundingNormals;
|
|
|
|
uint32 nO;
|
|
uint32 ofsO;
|
|
uint32 nP;
|
|
uint32 ofsP;
|
|
uint32 nQ;
|
|
uint32 ofsQ;
|
|
uint32 nLights; // R
|
|
uint32 ofsLights;
|
|
uint32 nCameras; // S
|
|
uint32 ofsCameras;
|
|
uint32 nT;
|
|
uint32 ofsT;
|
|
uint32 nRibbonEmitters; // U
|
|
uint32 ofsRibbonEmitters;
|
|
uint32 nParticleEmitters; // V
|
|
uint32 ofsParticleEmitters;
|
|
|
|
};
|
|
|
|
// block B - animations
|
|
struct ModelAnimation {
|
|
uint32 animID;
|
|
uint32 timeStart;
|
|
uint32 timeEnd;
|
|
|
|
float moveSpeed;
|
|
|
|
uint32 loopType;
|
|
uint32 flags;
|
|
uint32 d1;
|
|
uint32 d2;
|
|
uint32 playSpeed; // note: this can't be play speed because it's 0 for some models
|
|
|
|
Vec3D boxA, boxB;
|
|
float rad;
|
|
|
|
int16 s[2];
|
|
};
|
|
|
|
|
|
// sub-block in block E - animation data
|
|
struct AnimationBlock {
|
|
int16 type; // interpolation type (0=none, 1=linear, 2=hermite)
|
|
int16 seq; // global sequence id or -1
|
|
uint32 nRanges;
|
|
uint32 ofsRanges;
|
|
uint32 nTimes;
|
|
uint32 ofsTimes;
|
|
uint32 nKeys;
|
|
uint32 ofsKeys;
|
|
};
|
|
|
|
// block E - bones
|
|
struct ModelBoneDef {
|
|
int32 animid;
|
|
int32 flags;
|
|
int16 parent; // parent bone index
|
|
int16 geoid;
|
|
// new int added to the bone definitions. Added in WoW 2.0
|
|
int32 unknown;
|
|
AnimationBlock translation;
|
|
AnimationBlock rotation;
|
|
AnimationBlock scaling;
|
|
Vec3D pivot;
|
|
};
|
|
|
|
struct ModelTexAnimDef {
|
|
AnimationBlock trans, rot, scale;
|
|
};
|
|
|
|
struct ModelVertex {
|
|
Vec3D pos;
|
|
uint8 weights[4];
|
|
uint8 bones[4];
|
|
Vec3D normal;
|
|
Vec2D texcoords;
|
|
int unk1, unk2; // always 0,0 so this is probably unused
|
|
};
|
|
|
|
struct ModelView {
|
|
uint32 nIndex, ofsIndex; // Vertices in this model (index into vertices[])
|
|
uint32 nTris, ofsTris; // indices
|
|
uint32 nProps, ofsProps; // additional vtx properties
|
|
uint32 nSub, ofsSub; // materials/renderops/submeshes
|
|
uint32 nTex, ofsTex; // material properties/textures
|
|
int32 lod; // LOD bias?
|
|
};
|
|
|
|
|
|
/// One material + render operation
|
|
struct ModelGeoset {
|
|
uint16 d1; // mesh part id?
|
|
uint16 d2; // ?
|
|
uint16 vstart; // first vertex
|
|
uint16 vcount; // num vertices
|
|
uint16 istart; // first index
|
|
uint16 icount; // num indices
|
|
uint16 d3; // number of bone indices
|
|
uint16 d4; // offset into bone index list
|
|
uint16 d5; // ?
|
|
uint16 d6; // root bone?
|
|
Vec3D v;
|
|
float unknown[4]; // Added in WoW 2.0?
|
|
};
|
|
|
|
/// A texture unit (sub of material)
|
|
struct ModelTexUnit{
|
|
// probably the texture units
|
|
// size always >=number of materials it seems
|
|
uint16 flags; // Flags
|
|
uint16 order; // ?
|
|
uint16 op; // Material this texture is part of (index into mat)
|
|
uint16 op2; // Always same as above?
|
|
int16 colorIndex; // color or -1
|
|
uint16 flagsIndex; // more flags...
|
|
uint16 texunit; // Texture unit (0 or 1)
|
|
uint16 d4; // ? (seems to be always 1)
|
|
uint16 textureid; // Texture id (index into global texture list)
|
|
uint16 texunit2; // copy of texture unit value?
|
|
uint16 transid; // transparency id (index into transparency list)
|
|
uint16 texanimid; // texture animation id
|
|
};
|
|
|
|
// block X - render flags
|
|
struct ModelRenderFlags {
|
|
uint16 flags;
|
|
uint16 blend;
|
|
};
|
|
|
|
// block G - color defs
|
|
struct ModelColorDef {
|
|
AnimationBlock color;
|
|
AnimationBlock opacity;
|
|
};
|
|
|
|
// block H - transp defs
|
|
struct ModelTransDef {
|
|
AnimationBlock trans;
|
|
};
|
|
|
|
struct ModelTextureDef {
|
|
uint32 type;
|
|
uint32 flags;
|
|
uint32 nameLen;
|
|
uint32 nameOfs;
|
|
};
|
|
|
|
struct ModelLightDef {
|
|
int16 type;
|
|
int16 bone;
|
|
Vec3D pos;
|
|
AnimationBlock ambColor;
|
|
AnimationBlock ambIntensity;
|
|
AnimationBlock color;
|
|
AnimationBlock intensity;
|
|
AnimationBlock attStart;
|
|
AnimationBlock attEnd;
|
|
AnimationBlock unk1;
|
|
};
|
|
|
|
struct ModelCameraDef {
|
|
int32 id;
|
|
float fov, farclip, nearclip;
|
|
AnimationBlock transPos;
|
|
Vec3D pos;
|
|
AnimationBlock transTarget;
|
|
Vec3D target;
|
|
AnimationBlock rot;
|
|
};
|
|
|
|
|
|
struct ModelParticleParams {
|
|
float mid;
|
|
uint32 colors[3];
|
|
float sizes[3];
|
|
int16 d[10];
|
|
float unk[3];
|
|
float scales[3];
|
|
float slowdown;
|
|
float rotation;
|
|
float f2[16];
|
|
};
|
|
|
|
struct ModelParticleEmitterDef {
|
|
int32 id;
|
|
int32 flags;
|
|
Vec3D pos;
|
|
int16 bone;
|
|
int16 texture;
|
|
int32 nZero1;
|
|
int32 ofsZero1;
|
|
int32 nZero2;
|
|
int32 ofsZero2;
|
|
int16 blend;
|
|
int16 type;
|
|
int16 s1;
|
|
int16 s2;
|
|
int16 cols;
|
|
int16 rows;
|
|
AnimationBlock params[10];
|
|
ModelParticleParams p;
|
|
AnimationBlock unk;
|
|
};
|
|
|
|
|
|
struct ModelRibbonEmitterDef {
|
|
int32 id;
|
|
int32 bone;
|
|
Vec3D pos;
|
|
int32 nTextures;
|
|
int32 ofsTextures;
|
|
int32 nUnknown;
|
|
int32 ofsUnknown;
|
|
AnimationBlock color;
|
|
AnimationBlock opacity;
|
|
AnimationBlock above;
|
|
AnimationBlock below;
|
|
float res, length, unk;
|
|
int16 s1, s2;
|
|
AnimationBlock unk1;
|
|
AnimationBlock unk2;
|
|
};
|
|
|
|
|
|
#pragma pack(pop)
|
|
|
|
|
|
#endif |