Diablo III .app
Posted: Sun Sep 11, 2011 4:29 am
This is file in Diablo III, i think it's model. File simple:
http://www.mediafire.com/?5aacnbdea8mbneg
http://www.mediafire.com/?5aacnbdea8mbneg
Code: Select all
//--------------------------------------
//--- 010 Editor v3.2.1 Binary Template
//
// File: Diablo 3 appearance file template
// Author: BoyC
// Revision: v0.37
// Purpose: Analyzing 3D data in Diablo 3
//--------------------------------------
local unsigned int vxcnt=0;
local unsigned int LookCount=0;
struct ChunkData
{
unsigned int Count<bgcolor=0xff00ff>;
unsigned int Offset<format=hex,bgcolor=0xff00ff>;
unsigned int Size<bgcolor=0xff00ff>;
};
struct ChunkHeader
{
unsigned int h[4];
};
struct BONEDATA //size = 68
{
unsigned int unk1[4];
float unk2[3];
unsigned int unk[3];
float unk4[7];
};
struct BONE //size = 236
{
char Name[64];
int ParentID;
float unk2[34]; //two matrices plus extra
ChunkData UnkChunk;
unsigned int unk[4];
int unk3;
Printf("# Bone: %s\n",Name);
local int pos=FTell();
FSeek(UnkChunk.Offset+16);
if (UnkChunk.Offset)
{
struct
{
BONEDATA bonedata[UnkChunk.Count]<optimize=false>;
} bonedata<bgcolor=0x00f0a0,comment="Unknown purpose bone data">;
}
FSeek(pos);
};
struct VERTEX //size = 44
{
float x,y,z;
unsigned char nx,ny,nz,nw;
int unk3,unk4;
unsigned short u,v;
unsigned int unk1;
char tx,ty,tz,tw;
char bx,by,bz,bw;
unsigned int unk2;
//obj export part
/**/
local float ru=u,rv=v,rnx=nx,rny=ny,rnz=nz;
ru=(ru-32767)/512.0f;
rv=(rv-32767)/512.0f;
rnx=(rnx-127)/127.0f;
rny=(rny-127)/127.0f;
rnz=(rnz-127)/127.0f;
Printf("v %f %f %f\n",x,y,z);
Printf("vt %f %f\n",ru,rv);
Printf("vn %f %f %f\n",rnx,rny,rnz);/**/
};
struct TRIINDICES
{
unsigned short a,b,c;
//obj export part
Printf("f %d/%d/%d %d/%d/%d %d/%d/%d\n",vxcnt+a+1,vxcnt+a+1,vxcnt+a+1,vxcnt+b+1,vxcnt+b+1,vxcnt+b+1,vxcnt+c+1,vxcnt+c+1,vxcnt+c+1);
}; //complete
struct BLENDWEIGHT
{
int BoneID;
float BoneWeight;
}; //complete
struct BLENDDATA //size = 24
{
BLENDWEIGHT Weights[3]<optimize=false>;
}; //complete
struct LOOKDATA //size = 248
{
unsigned int Five;
int MinusOne;
unsigned int DataOffset1<format=hex>;
unsigned int DataSize1;
unsigned int unk[3];
float Matrix[16];
unsigned int unk2[2];
unsigned int DataOffset2<format=hex>;
unsigned int DataSize2;
unsigned int unk3[35];
};
struct SUBOBJECT //size = 140
{
char Name[128];
unsigned int Offset,Size,Zero;
local int pos=FTell();
FSeek(Offset+16);
struct
{
LOOKDATA lookdata[LookCount]<optimize=false>;
} LookDataList<bgcolor=0x00a0f0,comment="Look Descriptors">;
FSeek(pos);
};
struct MESH //size = 372
{
int unk1;
ChunkData VertexChunk; //vertex size = 44
ChunkData WeightChunk; //weight size = 24
int Zero1;
ChunkData IndexChunk; // 16bit index buffer for a triangle list
ChunkData UnknownChunk; // points to an array of chunkdatas, could be anim
int unk5[4];
char SubObjectName[128];
char MeshName[128];
float funk1[6]; //bounding box?
unsigned int Zero2;
unsigned int unk[4];
Printf("# unk1: %4d vxcount: %4d\n",unk1,VertexChunk.Count);
Printf("# mesh %s is part of subobject %s\n",MeshName,SubObjectName);
local unsigned int Pos=FTell();
if (VertexChunk.Offset)
{
FSeek(VertexChunk.Offset);
struct
{
ChunkHeader ch;
VERTEX vx[VertexChunk.Count]<optimize=false>;
} Vertices;
}
if (WeightChunk.Offset)
{
FSeek(WeightChunk.Offset);
struct
{
ChunkHeader ch;
BLENDDATA w[VertexChunk.Count]<optimize=false>;
} BlendWeights;
}
if (IndexChunk.Offset)
{
FSeek(IndexChunk.Offset);
struct
{
ChunkHeader ch;
TRIINDICES w[IndexChunk.Count/3]<optimize=false>;
} Triangles;
}
FSeek(Pos);
vxcnt+=VertexChunk.Count;
};
struct HARDPOINT //size = 96
{
char Name[64];
int ParentBone;
float qx,qy,qz,qw; //rotation as a quaternion
float x,y,z; //position
};
struct COLLISIONOBJ //size = 104
{
unsigned int x[26];
};
struct NAME
{
char Name[64];
};
struct
{
unsigned int DEADBEEF[8];
unsigned int Counter1;
ChunkData BoneChunk; // size = 236
FSeek(FTell()+30*4);
ChunkData MeshChunk; // size = 372
FSeek(FTell()+9*4);
float FloatAray1[4]; //bounding sphere?
ChunkData CollisionChunk; // size = 104
FSeek(FTell()+3*4);
ChunkData HPChunk; // size = 96
FSeek(FTell()+5*4);
float One;
FSeek(FTell()+6*4);
ChunkData UnkChunk1;
FSeek(FTell()+4);
ChunkData UnkChunk2;
FSeek(FTell()+4);
ChunkData UnkChunk3;
FSeek(FTell()+8);
float FloatArray2[6]; //bounding box?
FSeek(FTell()+10*4);
char xobject[256];
char xobjectpath[256];
char xmesh[256];
char xmeshpath[256];
FSeek(FTell()+4*4);
unsigned int LookCnt;
LookCount=LookCnt;
ChunkData SubObjectChunk; // size = 140
FSeek(FTell()+4);
ChunkData LookNameChunk; // size = 64 count = Counter1
FSeek(FTell()+18*4);
//previously referenced data starts here, header size is 0x628h
Printf("# Bone Count: %d\n",BoneChunk.Count);
Printf("# Mesh Count: %d\n",MeshChunk.Count);
if (BoneChunk.Offset)
{
FSeek(BoneChunk.Offset+16);
struct
{
//ChunkHeader ch;
BONE bone[BoneChunk.Count]<optimize=false>;
} Bones<bgcolor=0xa0a0a0,comment="Bone data">;
}
if (MeshChunk.Offset)
{
FSeek(MeshChunk.Offset+16);
struct
{
//ChunkHeader ch;
MESH mesh[MeshChunk.Count]<optimize=false>;
} Models<bgcolor=0xb0f0b0,comment="Model data">;
}
if (SubObjectChunk.Offset)
{
FSeek(SubObjectChunk.Offset+16);
struct
{
//ChunkHeader ch;
SUBOBJECT group[SubObjectChunk.Count]<optimize=false>;
} SubObjects<bgcolor=0xc0c0f0,comment="SubObjects">;
}
if (HPChunk.Offset)
{
FSeek(HPChunk.Offset+16);
struct
{
//ChunkHeader ch;
HARDPOINT hardpoint[HPChunk.Count]<optimize=false>;
} HardPoints<bgcolor=0xd0f0f0,comment="These are hardpoints where other models can be attached to this one">;
}
if (CollisionChunk.Offset)
{
FSeek(CollisionChunk.Offset+16);
struct
{
//ChunkHeader ch;
COLLISIONOBJ Collisions[CollisionChunk.Count]<optimize=false>;
} CollisionObjects<bgcolor=0xf0e0f0,comment="Seems to be collision mesh data">;
}
if (LookNameChunk.Offset)
{
FSeek(LookNameChunk.Offset+16);
struct
{
NAME Name[LookCount]<optimize=false>;
} LookNames<bgcolor=0xf0a0a0,comment="Look Names">;
}
} HEADER<bgcolor=0xf0f000>;
With the old version, I can extract the output to obj files, but with your current version (v0.37), I cannot. Is it a test version ??//--------------------------------------
//--- 010 Editor v3.2.1 Binary Template
//
// File: Diablo 3 appearance file template
// Author: BoyC
// Revision: v0.37
// Purpose: Analyzing 3D data in Diablo 3
//--------------------------------------
Still working on that but I'm swamped in real life stuff atm.npd2006 wrote:How about the multiple mesh in one file ?