READ THE RULES: Click here

Follow us on Facebook: https://www.facebook.com/xentax/ :)

Diablo III .app

Post questions about game models here, or help out others!
Post Reply
Monguron
advanced
Posts: 45
Joined: Thu Oct 06, 2011 8:03 pm

Re: Diablo III .app

Post by Monguron » Thu Oct 13, 2011 9:02 am

Thanks for the info.

Could you please attach BoyC's .exe? So converting the .app files with his program will generate proper .obj files, which we can import to Maya / Blender etc ...

About the textures: so how can I attach them to the meshes? (I'm completely noob related to Maya, Blender, etc...)
In what extension should they exist (.dds, .tga, .tex, etc...)? As far as I know, we also have to convert the tex files to dds or what...
Diablo3 dataminers!
Keep up the good work guys!

npd2006
beginner
Posts: 35
Joined: Tue Sep 13, 2011 9:15 am
Been thanked: 1 time

Re: Diablo III .app

Post by npd2006 » Thu Oct 13, 2011 11:37 am

ould you please attach BoyC's .exe? So converting the .app files with his program will generate proper .obj files, which we can import to Maya / Blender etc ...
It's not a .exe file. It's a 010 editor template. If you know how to compile it to the .exe file, please do it.
//--------------------------------------
//--- 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=1-(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>;
About the textures: so how can I attach them to the meshes? (I'm completely noob related to Maya, Blender, etc...)
About how to attach texture to meshes, I think it's better if you search youtube : Maya Hypershade, Maya Basic,...some kind like that. Very easy to do but difficult to explain.
In what extension should they exist (.dds, .tga, .tex, etc...)? As far as I know, we also have to convert the tex files to dds or what...
Engine games use .dds,
3D software use .tga , .psd....
Diablo 3 use .tex
When exported they are naturally .dds . Why don't use .dds?
If you still don't want to use .dds, use photoshop with dds plugin to convert.

Monguron
advanced
Posts: 45
Joined: Thu Oct 06, 2011 8:03 pm

Re: Diablo III .app

Post by Monguron » Thu Oct 13, 2011 1:05 pm

It's not a .exe file. It's a 010 editor template. If you know how to compile it to the .exe file, please do it.
OK, I don't know how to compile it. Any idea, or should I check on google?

When I export the adria.obj from Blender, it makes an adria.obj and an adria.mtl file. Do we really need this .mtl file, or the .obj + .dds are enough to display a model properly?

The other question is: is there a possibility to export an .obj file from Blender or Maya, which contains the texture as well, and then I don't have to work with two files per model, only with one.

(for ex.: the .awd format can contain a model + the texture)
Diablo3 dataminers!
Keep up the good work guys!

npd2006
beginner
Posts: 35
Joined: Tue Sep 13, 2011 9:15 am
Been thanked: 1 time

Re: Diablo III .app

Post by npd2006 » Thu Oct 13, 2011 1:14 pm

OK, I don't know how to compile it. Any idea, or should I check on google?
Open .app in 010 template. Create new template, paste Boy's template in there. Press F5 to compile .app with template. Copy the output (accept for the first line) to a text file then save as .obj. That's the way I create obj.
But how to make a .exe converter, ask TaylorMouse. I have no Idea about that.
When I export the adria.obj from Blender, it makes an adria.obj and an adria.mtl file. Do we really need this .mtl file, or the .obj + .dds are enough to display a model properly?
.mtl file is initialShadingGroup, just .obj+.dds are enough.
The other question is: is there a possibility to export an .obj file from Blender or Maya, which contains the texture as well, and then I don't have to work with two files per model, only with one.
There is no way to contain texture in .obj.

npd2006
beginner
Posts: 35
Joined: Tue Sep 13, 2011 9:15 am
Been thanked: 1 time

Re: Diablo III .app

Post by npd2006 » Thu Oct 13, 2011 3:33 pm

I am appreciate if TaylorMouse post the source C# of the AppConverter here.

Monguron
advanced
Posts: 45
Joined: Thu Oct 06, 2011 8:03 pm

Re: Diablo III .app

Post by Monguron » Thu Oct 13, 2011 5:49 pm

Hmm

actual topics:

Good news: I could load your AdriaBoyC file into the flash (without textures yet).

Problems:

1) The Adria BoyC.obj is more than 200 KBytes
after I import it to Blender, and export it again it becomes 150 KBytes. What's happening? Why does it loose info.
The exported file cannot be loaded by my flash application, so it seems it looses the vnormals numbers again.

2) I was checking Maya and Blender tutorials on the net, but there was none, which showed how to import and attach the 2 .dds files to the meshes. Also it's still not sure I can load .dds files in Away3D (the flash library). So I will need to convert them to .png or .jpg.

3) When I open the obj in Maya, and then I try to export it there is no .obj option, just some other formats. Do I have to install a plugin for that?
Diablo3 dataminers!
Keep up the good work guys!

npd2006
beginner
Posts: 35
Joined: Tue Sep 13, 2011 9:15 am
Been thanked: 1 time

Re: Diablo III .app

Post by npd2006 » Thu Oct 13, 2011 6:20 pm

so it seems it looses the vnormals numbers again.
it's true.
I was checking Maya and Blender tutorials on the net, but there was none, which showed how to import and attach the 2 .dds files to the meshes. Also it's still not sure I can load .dds files in Away3D (the flash library). So I will need to convert them to .png or .jpg.
If we can contact directly, I can use team viewer to do it for you.
3) When I open the obj in Maya, and then I try to export it there is no .obj option, just some other formats. Do I have to install a plugin for that?
Maya is not naturally support import, export .obj. You need to go to Windows -> Plugin Manager -> Check the .obj export

User avatar
TaylorMouse
ultra-veteran
ultra-veteran
Posts: 335
Joined: Mon Sep 26, 2011 12:51 pm
Has thanked: 11 times
Been thanked: 79 times

Re: Diablo III .app

Post by TaylorMouse » Fri Oct 14, 2011 6:24 am

Monguron wrote: 1) The Adria BoyC.obj is more than 200 KBytes
after I import it to Blender, and export it again it becomes 150 KBytes. What's happening? Why does it loose info.
The exported file cannot be loaded by my flash application, so it seems it looses the vnormals numbers again.
read this : http://en.wikipedia.org/wiki/Wavefront_.obj_file maybe this explains why the size can vary,
it is because 3D software such as Blender/ Max / Maya /... probably do not use the same export, since there are more then 1 way to save to an obj file.
If your read the wiki, you'll see what I mean under the section Vertex/texture-coordinate/normal

Also the textures are not loaded at import time because there is no mtl file written in the process.

The .obj file references a .mtl file which contains the paths and names of the actual used textures.

Hope this helps

T

Monguron
advanced
Posts: 45
Joined: Thu Oct 06, 2011 8:03 pm

Re: Diablo III .app

Post by Monguron » Fri Oct 14, 2011 10:27 am

Hey Taylor,

So the .mtl is always needed, as it tells the eingine how to apply the textures to the meshes.

If I'm right, this means we need the .obj + .dds textures + .mtl to properly load/show a model in an application.
Diablo3 dataminers!
Keep up the good work guys!

InsaneXo
n00b
Posts: 12
Joined: Sun Sep 11, 2011 8:21 pm

Re: Diablo III .app

Post by InsaneXo » Fri Oct 14, 2011 1:47 pm

2 Monguron:
Yeah you do, but problem is, theres no .mtl for now, i mean theres one but noone hckd it yet.
So the only way to do that, is redo all 4400 .app files :)
Well, are you after showing theese models via some 3rd party 3D engine am i right ?

Monguron
advanced
Posts: 45
Joined: Thu Oct 06, 2011 8:03 pm

Re: Diablo III .app

Post by Monguron » Fri Oct 14, 2011 2:13 pm

Hey Insane,

The guys (NPD2006 and Taylor) could open the .obj files, and could attach the textures (.dds) somehow in Maya / Blender.

I could only open the .obj files, so I have basic problems with using Maya and Blender :)
I need to understand the basic concept of the texturing methods to be able to make a 3rd party engine.

About the engine:

Check out AWAY3D (http://www.away3d.com)
This is an action script library, based on Adobe Flex SDK, and with it we can open Diablo3 3D models, rotate them, zoom, etc... in Flash, so it can be used on the internet without any plugin needed (only the latest Flash Player 11 is needed to run the Away3D 4.0 files).

Can you support somehow? Are you prof. in 3D graphics and programming, cause I'm just a "hobby driver". :)
Diablo3 dataminers!
Keep up the good work guys!

npd2006
beginner
Posts: 35
Joined: Tue Sep 13, 2011 9:15 am
Been thanked: 1 time

Re: Diablo III .app

Post by npd2006 » Fri Oct 14, 2011 4:52 pm

I need to understand the basic concept of the texturing methods to be able to make a 3rd party engine.
I have already told ya that!

This is the method to assign dds to obj in maya.
2. For the material: Windows -> Rendering Editor -> Hypershade -> Drag and Drop whatever shader you want to the working area (I usually use Phong shader)-> Double click on the shader to open its attribute -> Open the Color Map (small checker beside Color)-> Choose your .dds file -> Assign shader to object.
(example: Adria_A_diff.dds)
Can you support somehow? Are you prof. in 3D graphics and programming, cause I'm just a "hobby driver". :)
I am not a beginner in 3D graphics, but not a prof., too. I know a little programming, enough to display a "Hello World" on the console. I really have no idea about AWAY3D or FLEX. :(

InsaneXo
n00b
Posts: 12
Joined: Sun Sep 11, 2011 8:21 pm

Re: Diablo III .app

Post by InsaneXo » Fri Oct 14, 2011 7:55 pm

Monguron wrote:Hey Insane,

The guys (NPD2006 and Taylor) could open the .obj files, and could attach the textures (.dds) somehow in Maya / Blender.

I could only open the .obj files, so I have basic problems with using Maya and Blender :)
I need to understand the basic concept of the texturing methods to be able to make a 3rd party engine.

About the engine:

Check out AWAY3D (http://www.away3d.com)
This is an action script library, based on Adobe Flex SDK, and with it we can open Diablo3 3D models, rotate them, zoom, etc... in Flash, so it can be used on the internet without any plugin needed (only the latest Flash Player 11 is needed to run the Away3D 4.0 files)..

Can you support somehow? Are you prof. in 3D graphics and programming, cause I'm just a "hobby driver". :)
hey there, i am programmer. According to my knowledge of 3d flash frameworks its not that easy for a beginner in game.dev to make it work like an good application. its not hard to do so if you have some experiace, easier to do it in OGL o D3D for me, but i need a web and cba to do an j.applet :)

you can just texture a model passing it a correct files, all the UV mapping already done by Blizz guys ;) texturing is probably an easiest part of all process, eve no shading required ;)

Monguron
advanced
Posts: 45
Joined: Thu Oct 06, 2011 8:03 pm

Re: Diablo III .app

Post by Monguron » Fri Oct 14, 2011 9:35 pm

Hey,

I fonud some examples scripts (for ex. loading an .obj file + mapping, textures, etc...), and I could reach to load a .obj from Diablo3, but without any textures.

The application would be very basic, so it's enough if I can load the .obj + the textures in it, and then rotate and zoom the model.

As you are a porgrammer, what do you think, can we put the code together here, and when it's ready, then we have a Diablo3 model viewer.
The away3d framework makes a lot of thing easily (antialiasing, lighting, etc...), this whole thing I wrote only takes around 40-50 lines of code in actionscript with the away3d library.
Diablo3 dataminers!
Keep up the good work guys!

InsaneXo
n00b
Posts: 12
Joined: Sun Sep 11, 2011 8:21 pm

Re: Diablo III .app

Post by InsaneXo » Sat Oct 15, 2011 12:01 am

Monguron wrote:Hey,

I fonud some examples scripts (for ex. loading an .obj file + mapping, textures, etc...), and I could reach to load a .obj from Diablo3, but without any textures.

The application would be very basic, so it's enough if I can load the .obj + the textures in it, and then rotate and zoom the model.

As you are a porgrammer, what do you think, can we put the code together here, and when it's ready, then we have a Diablo3 model viewer.
The away3d framework makes a lot of thing easily (antialiasing, lighting, etc...), this whole thing I wrote only takes around 40-50 lines of code in actionscript with the away3d library.
Whats the point ?

Post Reply