Join also our Discord channel! Click here.

Dead or Alive series formats and tools

Post questions about game models here, or help out others!
ganjul
beginner
Posts: 35
Joined: Wed Nov 16, 2011 4:21 pm
Been thanked: 1 time

Re: Dead or Alive 3,U,X tools [download]

Post by ganjul » Mon Dec 26, 2011 4:15 pm

Well yeah, hacking and programming are different things and require different set of skills, even though they have some things in common which both should know.
I for example, know how 3d data is stored internally in modern games and can generate static or animated models if I know how the data is stored in files, etc, but I can't just open a file with a hex editor and make guesses like a hacker.
AFS dumper Python script: http://pastebin.com/K28RdNvP

b0ny
mega-veteran
mega-veteran
Posts: 239
Joined: Sat May 22, 2010 10:10 am
Has thanked: 22 times
Been thanked: 118 times

Re: Dead or Alive 3,U,X tools [download]

Post by b0ny » Tue Dec 27, 2011 12:52 pm

to see the doa3's xpr(used also in doa1u) specs just download on the first page the "DOA3Viewer" and look in the "sources" folder for the "xpr.h" which stores the specs. for the doa2u xpr(used also in doaX) you just need to change these structures:

Code: Select all

typedef struct {
	CHAR	szMagic[4];					// 'OBJ'
	DWORD	dwWeights;					// Number of weights
	DWORD	dwUnknown1;					// Primitive Type ?
	DWORD	dwUnknown2;					// Number of indices (total indices in IVBufInfo)
	FLOAT	fCenterX;					// Object center x
	FLOAT	fCenterY;					// Object center y
	FLOAT	fCenterZ;					// Object center z
	FLOAT	fRadius;					// Object radius
	ST_IVBUFINFO	pIVBufInfo[4];		// Indexed vertex buffers info
	DWORD	Pad1[16];					//?
} ST_OBJ_HEADER;

typedef struct {
	DWORD	dwSize;						// Material size - 2 (in double words) (materials + mesh-subsets)
	DWORD	dwUnknown0;					// 
	DWORD	dwUnknown1;					// 
	FLOAT	fCenterX;					// Sub-object center x
	FLOAT	fCenterY;					// Sub-object center y
	FLOAT	fCenterZ;					// Sub-object center z
	FLOAT	fRadius;					// Sub-object radius
	ST_RGBA_COLOR	stColorDiffuse;		// Diffuse color
	ST_RGBA_COLOR	stColorAmbient;		// Ambient color
	ST_RGBA_COLOR	stColorSpecular;	// Specular color
	ST_RGBA_COLOR	stColorEmissive;	// Emissive color
	FLOAT	fSpecularPower;				// Specular glow power
	DWORD	dwNumTxt;					// Number of textures used by this material
	DWORD	dwUnknown2;					// 
	DWORD	dwUnknown3;					// 
} ST_MAT_HEADER;

typedef struct {
	WORD	wVertexSize;				// Size of one vertex
	WORD	wIVBufferNo;				// Indexed vertex buffer number (0-3)
	DWORD	dwIndexOffset;				// Index buffer start offset (in indices)
	DWORD	dwNumPrimitives;			// Number of primitives
	DWORD	dwUnknown2;					// 
} ST_MAT_MESH;

//doau doesn't use a material subset (the ST_MAT_SUBSET structure)
open the sources in the "VisualStudio" to see the code in action

ganjul
beginner
Posts: 35
Joined: Wed Nov 16, 2011 4:21 pm
Been thanked: 1 time

Re: Dead or Alive 3,U,X tools [download]

Post by ganjul » Tue Dec 27, 2011 5:02 pm

FFFFFFFFUUU
I can't believe I didn't notice that.
Anyway, I wish I would know C++ sometimes.

The 4th float value is named "Object radius". I'm not sure what radius its talking about. As far as I know radiuses are for spheres. And the only spheres a 3d model uses in games is the bounding sphere. I've never heard of it being stored in a file, usually its generated on the fly.
AFS dumper Python script: http://pastebin.com/K28RdNvP

mariokart64n
ultra-veteran
ultra-veteran
Posts: 546
Joined: Sun Jun 05, 2005 12:00 pm
Location: Ontario, Canada
Has thanked: 31 times
Been thanked: 181 times

Re: Dead or Alive 3,U,X tools [download]

Post by mariokart64n » Tue Dec 27, 2011 5:59 pm

alright I think the XPR info is pretty complete then :D

still I can't get that mesh positioning info to work ? it may be relative to the position of the bones. but theres doesn't seem to be any clear signs of bone or parenting info :\

I moved onto the secondary file (.CAT) hoping to find bones, but no such luck :\

heres the header
20 00 00 00 14 00 00 00 EC 04 00 00 AC AA 00 00 B0 DE 0A 00 02 00 00 00 FF FF FF FF

LONG: always 0x20, maybe ID?
LONG: always 0x14, maybe offset to new data or size of header
LONG: offset, when nulled physics disable ingame >example; hair
LONG: offset "APV", when nulled morph targets disable ingame >example; boobs
LONG: offset, when nulled vertex weighted meshes are missing ingame >example; neck
LONG: always 0x02
LONG: always 0xFF

**note: I had trouble with xprbreaker encrypting heavily modified files?? is there an alternative tool?
**note: when I nulled the 5th LONG or DWORD, not all Vertex Weighted meshes disabled. just certain ones...
like the neck, elbows, wrist and ankles. however there were other vertex weighted meshs that were OK.. such as
the thighs, and knees...

Image

I need to breakup the blurb after the header, which seems critical for making the XPR work.


EDIT2

so, looking at the unknown data after the header. I copy and pasted the binary from another cat into kasumi's cat;
here was the result
Image

?? bones maybe.. lol no but this is obvious controlling what meshes go where... dang wheres that skeleton file!!


EDIT3
Image

I had a look at that last table, theres actually two.
the first is material related information, once nulled the model falls back on the material info in the XPR.
but its interesting, obviously some use mats from the cat, and some dont. my guess is that in the XPR
there is likely a flag to allow the a mesh to either use a CAT material, or a mat from the XPR.

then theres a small indexing table, which just places the objs in different places on the skeleton. nulling this index results in no model on the screen.
but a messed up shadow can be seen, so???

well still no skeleton.... which I can't believe! if the stage files use the same XPR format, without a cat. that must mean there is skeletal info somewhere in the XPR itself.
Maxscript and other finished work I've done can be found on my DeviantArt account

b0ny
mega-veteran
mega-veteran
Posts: 239
Joined: Sat May 22, 2010 10:10 am
Has thanked: 22 times
Been thanked: 118 times

Re: Dead or Alive 3,U,X tools [download]

Post by b0ny » Wed Dec 28, 2011 5:13 am

mariokart64n wrote: well still no skeleton.... which I can't believe! if the stage files use the same XPR format, without a cat. that must mean there is skeletal info somewhere in the XPR itself.
the skeleton data is embedded in the executable, but in doau the cutscene characters as young tina and loran do have a skeleton in the cat file. bellow is what i started with when researching on doa3 to doau conversion(i found more later but forgot everything :( ) i hope you'll found useful something of this.

posting it as it is:

Code: Select all

====================================cat 2==========================================
ytina has no speach, no lowpoly and no shadowmodel(and she can blink?); pdog2 also lack some vertex shit

[i0]20(constant)
[i1]14(constant)
[i2]hair and clothes phisics offset (- pdg012)
[i3]?? magic "apv". boobs(and maybe clothes?) jiggling phisics offset (- pdg2)
[i4]joints offset  (all)
[i5]2 (hks=77 and is invisible because of that)
[i6]-1(constant)
[i7..] array of pairs "offset"-"type"(need to add 0x14 to the "offsets"). types:
1 = high poly bones[][3] (all) 				 {points after marker}
3 = materialColor[][50]  (- pdg, pdg2, hks)
5 = shadow shapes[][1]   (- hks, lor, mam, pdg012, yti)  {points on marker}
6 = ?? magic"apa"	 (- pdg2)
9 = low poly bones[][3]  (- hks,lor,mam,pdg012,yti,hel09,tin11,wba) {after marker} 

4 = animated textures(?near "apa" magic?)(some kind of frame counter and offset to bones frames?) (zac2, zac6)
7 = effects objects[][1] (petals and leaves) (kas, ryu)
8 = build a different skeleton(hks, lor, mam, pdg012)
A = ?(hex)00010100(constant)?  (some girls only)
B = ?near "apa" magic? (a few models)
C = ?(int) 1 or 2 (mostly kas and a few others)
D = ?(int)two words? (costume glowing effect) (zac2, zac6, aya18)
10 = effects objects[][1] (huricane?) (tng)
11 = ?(int) some int (hel9,zac3)
12 = offset to bones but i think to a word (mostly kas and a few)
this "array of pairs" ends with 2 null dwords(this array lacks those types: 2,E,F)

materialColorSize = 0x50; materialCOlorHead = 03; ?nullMaterialColorHeader = FF;
bones2=============
FE = high poly model(bonesize=3bytes) (or effects or some other shit or some other kind of bones)
F0 = shadow shapes model(like doa3)
00 = low poly model(bonesize3)

bones=============
0 chest
1 head
2 ass
3 lfoot
4 lelbow
5 lpalm
6 lheap
7 lknee
8 lshoulder
9 rfoot
a relbow
b rpalm
c rheap
d rknee
e rshoulder

11 leyebal
15 reyebal
(2)6 lupperleg
(2)7 rupperleg
(2)8 lkneeJoint
(2)9 rkneeJoint

joints=============
(int)(jointOffset + 0) = somePattern
(int)(jointOffset + 4) = vertexData
((byte)(jointOffset + 8) = OBJ)
((byte)(jointOffset + 9) and (byte)(jointOffset + a) = bones joining by this joint)
((byte)(jointOffset + b) = ?1?)
calculate the joint type by looking what bones does it join
(delete me kas00: 0_29 1_19 3_b 4_d 6_16 7_15 8_c 9_1a a_1c c_25 d_24 e_1b)
0 neck
1 belly
2 lfoot
3 lshoulder
4 lelbow
5 lknee
6 lheap
7 rfoot
8 rshoulder
9 relbow
a rknee
b rheap

clothes=============
1 hair
3 ?
2 skirt


====================================cat 3==========================================
(first 0x14 bytes([i0]-[i4]) can be corrupted(wrong values) in a lot of cat files)
[i0]1(constant)
[i1]14(constant)
[i2]hair and clothes phisics offset
[i3]?? magic "LNK". jiggling boobs offset (incompatible with doau)
[i4]joints offset

[i5]100(constant)
[i6..]1(constant) ?array of pairs "type"-"offset"? (add 0x14 to the offsets bellow)
1 = bones(many types);
3 = materialColor (- bas1,kor6, null offset:bay4, bay5)
4 = offset+0x14 ?array of objs[][1]?(bni0,zac2)(costume glowing effect + animated texture)
?somekind of marker? on kas10-10, kor07-11, chi00-12

bones3=============
-2(FE) = high poly model     (all)
-3(FD) = left and right eyes (-zac3(he has "FB" black glasses))
-5(FB) = ?forearms?     (- bas1,bay345,gok0,hik0,hik2,kas0-5,kas10,kor1,ryu0,ryu3)
-9(F7) = effect objects	     (kas, ryu, nin)
-a(F6) = effect objects	     (bni0,bni1)weapon in hand
-7(F9) = low poly model      (-bas1,chi,cas10,kor0,kor1)
-8(F8) = shadow shapes model (-bas1,cas10,kor1)
-1(FF) = the end
E0 = marker for effect? just before ff end (kas,bni,ryu,nin)

bones on [i6]+0x14=fe, +0x10=fd (zac3 has fb instead of fd?), +3=(fb|ff|f9|f7), +(6|c|13|8|32)=(f9|ff|f8|f5), 

+(16|40|23|35|34)=(f7|ff|f8|f5|fd)

=============shit of doa1u conversions
transparency to:
eaveryone's ears
kasumi1 hair
lei hair
ryu hair(3,4 shoulder)
genfu 1-3(head moustashe, ears)
janlee 1(fingers, ears)
feel free to ask :)

mariokart64n
ultra-veteran
ultra-veteran
Posts: 546
Joined: Sun Jun 05, 2005 12:00 pm
Location: Ontario, Canada
Has thanked: 31 times
Been thanked: 181 times

Re: Dead or Alive 3,U,X tools [download]

Post by mariokart64n » Wed Dec 28, 2011 6:20 am

O_o interesting stuff man, well done..

I wonder what happens when I implement a custom skeleton back into the CAT file.

I'm going to focus my scripting on the PC port of DOAU. Dead or Alive Online.
they used the DOAU files directly, but stripped the XPR header from the files.

Modding can't get any easier if its a pc game. :P


EDIT
I've imported a DOAO file "EMP"
the emp format is really choppy, they striped the XPR stuff from the file.. but the offsets in the OBJ and material bloc's still seem to be relative to the XPR header which no longer exists.. not only that but they added sub headers to all the vertex buffers to separate them, because of that its difficult to recalculate the already bad offsets in the material bloc :\

its probably possible to make a XPR -to- EMP tool, since all you need to do is strip the xpr header, and the texture and mesh tables. then separate and supply new sub headers on the buffers
Maxscript and other finished work I've done can be found on my DeviantArt account

ganjul
beginner
Posts: 35
Joined: Wed Nov 16, 2011 4:21 pm
Been thanked: 1 time

Re: Dead or Alive 3,U,X tools [download]

Post by ganjul » Wed Dec 28, 2011 11:02 am

I have another idea what the "radius" float in the xpr objects might be. Since this is a fighting game, it could also be a collision sphere. One way to find out would be to have really small radiuses or really big. If it's eally big, then either hitting an enemy won't do anything (because both players are inside the sphere) or hitting air will harm the enemy.
Also some objects inside the xpr are for cheap shadows, so they will probably have 0 for radius or random junk.

But since someone named it "radius", then he probably knows what it is.
AFS dumper Python script: http://pastebin.com/K28RdNvP

b0ny
mega-veteran
mega-veteran
Posts: 239
Joined: Sat May 22, 2010 10:10 am
Has thanked: 22 times
Been thanked: 118 times

Re: Dead or Alive 3,U,X tools [download]

Post by b0ny » Wed Dec 28, 2011 3:05 pm

mariokart64n wrote:I wonder what happens when I implement a custom skeleton back into the CAT file.
for the skeleton you can only set the xyz for bones, each shoulder, head, heaps etc.
mariokart64n wrote: EDIT
I've imported a DOAO file "EMP"
the emp format is really choppy, they striped the XPR stuff from the file.. but the offsets in the OBJ and material bloc's still seem to be relative to the XPR header which no longer exists.. not only that but they added sub headers to all the vertex buffers to separate them, because of that its difficult to recalculate the already bad offsets in the material bloc :\
with the emp you don't need the direct offsets to textures and vertexFiles. emp format is like a tree:
DWORD nodeType;
DWORD nodeSize;

there are four types of nodes: 1=mdl,2=vertexFile,3=textureFile,4=theEnd
the textures and the fertexFiles are loaded by their order. for example if the first obj contains the info on two vertex files then the second obj will load the third vertex file.
mariokart64n wrote:its probably possible to make a XPR -to- EMP tool, since all you need to do is strip the xpr header, and the texture and mesh tables. then separate and supply new sub headers on the buffers
XPR2EMP tool, the console version can deswizzle the g8b8 and argb image formats.
ganjul wrote:I have another idea what the "radius" float in the xpr objects might be.
the xpr file stores only the information on how the model's parts does look, and the cat file contains the info on how the models parts do interact with each other, everything else, such as collision and and interaction with the world is stored inside the executable. anyway good try :)

ganjul
beginner
Posts: 35
Joined: Wed Nov 16, 2011 4:21 pm
Been thanked: 1 time

Re: Dead or Alive 3,U,X tools [download]

Post by ganjul » Wed Dec 28, 2011 3:55 pm

I don't want to sound like I doubt your knowledge, but why are you so sure? Has the collision detection code been decompiled and someone could make sense of it? So do you know what "radius" is then? I've been into game programming for the past few years and I've never heard of a "radius of object". The transforms are location, rotation and scale (and sometimes shear).
AFS dumper Python script: http://pastebin.com/K28RdNvP

mariokart64n
ultra-veteran
ultra-veteran
Posts: 546
Joined: Sun Jun 05, 2005 12:00 pm
Location: Ontario, Canada
Has thanked: 31 times
Been thanked: 181 times

Re: Dead or Alive 3,U,X tools [download]

Post by mariokart64n » Wed Dec 28, 2011 4:47 pm

@b0ny
you made alot of advancements, truly awesome :D
if you got that far, why didn't you make a model importer?

@ganjul
I think the radius assumptions are wrong, I wrote a bunch of zeros and theres no change ingame..
I think it sounds kind of odd to hardcode these things into an EXE, like a skeleton and hitboxes.. but its possible

I'm going to try and write zeros over the radius floats on all the objects. last time I tried there was really no effect ingame.
Maxscript and other finished work I've done can be found on my DeviantArt account

ganjul
beginner
Posts: 35
Joined: Wed Nov 16, 2011 4:21 pm
Been thanked: 1 time

Re: Dead or Alive 3,U,X tools [download]

Post by ganjul » Wed Dec 28, 2011 5:06 pm

OK. I don't get why we call it radius though. What radius?
AFS dumper Python script: http://pastebin.com/K28RdNvP

mariokart64n
ultra-veteran
ultra-veteran
Posts: 546
Joined: Sun Jun 05, 2005 12:00 pm
Location: Ontario, Canada
Has thanked: 31 times
Been thanked: 181 times

Re: Dead or Alive 3,U,X tools [download]

Post by mariokart64n » Wed Dec 28, 2011 5:13 pm

I dont think its radius, I think it was mislabeled.. theres 4 floats, naturally you would associate such a pattern with an object position..

EDIT1
ok, well I assembled one of the DOAU meshes.. and the pivot of the vertex weighted pieces seem to be relative to the bone positions. meaning after aligning the mesh parts its easy to reconstruct a skeleton

GXexplorer does this, however scripts the model positions for each mesh object.

we would have to do the same thing, but with a hardcoded skeleton. this gives us the option utilize the vertex weights atleast.

I was also trying to figure out what those 4 floats do that are in the OBJ header.. noted b0ny as subobject position and rotation.

I strongly doubt that the 4th float has anything to do with rotation. because the DOAU objects are already rotated correctly. thus there rotation is zero.
so why does the 4th float have a none zero value?

I believe it is a vector of some sort, that is used to manipulate the 1st three floats

you can see here the result of that;
Image

obviously its still not right lol :( but ohwell moving on... I don't believe these values will effect new creation of an XPR

lastly I can't even find animation files?!? theres a BIN and a MOT..
swap enough files and your character may do different attacks.. but theres no deformation of the skeleton.. quite a mysterious thing they've done in DOA



EDIT2
Ok I'm devising a position list for the models.

Kasumi (repositioned)
[0.000000,0.000000,0.000000] Pelvis (Root)
[0.000000,0.180000,0.004900] Torso
[0.000000,0.467499,-0.025100] Neck
[0.120600,0.401001,-0.018640] UpperArm (Left
[0.360302,0.401001,-0.018640] ForeArm (Left)
[0.599998,0.400990,-0.018604] Hand (Left)
[-0.120600,0.401001,-0.018640] UpperArm (Right)
[-0.360298,0.401001,-0.018640] ForeArm (Right)
[-0.599998,0.400990,-0.018604] Hand (Right)
[0.076100,-0.020500,-0.025700] Thigh (Left)
[0.076100,-0.423801,-0.025700] LowerLeg (Left)
[0.076100,-0.843697,-0.025700] Foot (Left)
[-0.076100,-0.020500,-0.025700] Thigh (Right)
[-0.076100,-0.423801,-0.025700] LowerLeg (Right)
[-0.076100,-0.843697,-0.025700] Foot (Right)

Kasumi (From File "OBJ Chunk")
[0.000000,0.045885,-0.009516,0.157314] Pelvis (Root)
[0.000000,0.024232,0.018681,0.126946] Torso
[0.000000,0.016209,0.009813,0.0647278] Neck
[0.126262,0.006701,-0.000748,0.110517] UpperArm (Left
[0.118408,0.001096,-0.000909,0.115959] ForeArm (Left)
[0.084971,-0.003975,0.005570,0.0872708] Hand (Left)
[-0.126262,0.006701,-0.000748,0.110517] UpperArm (Right)
[-0.118408,0.001096,-0.000909,0.115959] ForeArm (Right)
[-0.084971,-0.003975,0.005570,0.0872708] Hand (Right)
[0.004714,-0.122153,0.023785,0.239093] Thigh (Left)
[0.007086,-0.235268,-0.027545,0.185274] LowerLeg (Left)
[0.003823,-0.045763,0.058856,0.134510] Foot (Left)
[-0.004716,-0.122153,0.023785,0.239093] Thigh (Right)
[-0.007086,-0.235268,-0.027160,0.185419] LowerLeg (Right)
[-0.003823,-0.045763,0.058856,0.134510] Foot (Right)
Maxscript and other finished work I've done can be found on my DeviantArt account

b0ny
mega-veteran
mega-veteran
Posts: 239
Joined: Sat May 22, 2010 10:10 am
Has thanked: 22 times
Been thanked: 118 times

Re: Dead or Alive 3,U,X tools [download]

Post by b0ny » Thu Dec 29, 2011 1:16 pm

mariokart64n wrote:@b0ny
you made alot of advancements, truly awesome :D
if you got that far, why didn't you make a model importer?
i have some wishes that sounds like a plan:
1) import to doao all the doa3 models. doa3 bones are rotated and i need to rotate back the objects inside the xpr, the clothes inside the cat, and the joints inside the cat. when i've tried to rotate the obj and the joints, i saw that the light/shadow is becoming incorrect for that obj.
2) import to doao the 4 missing characters from doa3. i've examined the structures inside the bin file paired with a mot file, found the differences between the doa3 and doau and converted a lot of data that can be converted but seems like i've missed something - the files are unstable and some moves can hung the game, also the doau lacks the sounds for those characters moves. and every character have its own tricks that can't be performed by someone else: try to swap the moves from one char to another and you won't be able to make some moves...
3) import the doa3 stages i've imported some doax and doa3 stages but just like a 3d model, you can't interact with the stage, it has no sounds and no animations. also i know how to add the bounds and the relief to the stage, but it doesn't works right :(
4) i thought that after such conversions i'll have enough skill to convert the doa4 and doad stuff to doao. but when i fail too match i get bored... :(

i get bored doing everything alone. if you intend to do any tools or maybe something else for doa please make something like a forum thread, so someone else, can jump in...
mariokart64n wrote:EDIT2
Ok I'm devising a position list for the models.
where did you get that info?

mariokart64n
ultra-veteran
ultra-veteran
Posts: 546
Joined: Sun Jun 05, 2005 12:00 pm
Location: Ontario, Canada
Has thanked: 31 times
Been thanked: 181 times

Re: Dead or Alive 3,U,X tools [download]

Post by mariokart64n » Thu Dec 29, 2011 7:15 pm

I just put the mesh objects together, and copied the coordinates from 3dsmax. from objects like the left and right hand, the distance between the two should have been relative to the positions in the file. however there not.

I'm afraid I'm out of ideas on importing meshes with proper positions :\

as for the DOA3 rotation problem, it sounds like you already explored all these options. can you share one of the converted models so I can see the shadow problem?
Maxscript and other finished work I've done can be found on my DeviantArt account

ganjul
beginner
Posts: 35
Joined: Wed Nov 16, 2011 4:21 pm
Been thanked: 1 time

Re: Dead or Alive 3,U,X tools [download]

Post by ganjul » Thu Dec 29, 2011 8:46 pm

In that image you posted, do you position the meshes according to the 3 float values from the file? If so, it seems clear to me that the positions are not absolute by looking at the position of the head.
AFS dumper Python script: http://pastebin.com/K28RdNvP

Post Reply