Page 1 of 2

Tales of Zestiria

Posted: Tue Apr 26, 2016 6:23 pm
by chiri
Hi

After some hacking I managed to rip static objects directly from the model files. But I'm struggling with the animated model files: The index buffer and texture coordinate data is stored separately from the vertex data. The vertex data itself is stored directly in a hierarchical bone structure, which is too complicated for me to analyze at the moment.
The attached Edna model was ripped using NinjaRipper, but what I'm after is the bone animatable raw vertex data.

Here is what I got so far:
  • Extract the "TLFILE.TLDAT" and "FILEHEADER.TOFHDB" containers using quickbms with the "tales_of_xillia.bms" profile.
  • Texture descriptions are then exported in "TOTEXB_D\*.dpd" and the textures itself in "TOTEXP_P\*.dat".
  • Model animations are stored in "TOMDLB_D\*.dpd" and static model data is stored in "TOMDLP_P\*.dc5".
  • Run the attached code to extract DirectX DDS textures from the TOTEXP_P folder. Example: "CHR_EDN_TEN_100_CHEST0_C.dds", "CHR_EDN_TEN_100_HAIRBAND0_C.dds" and so on.
  • Run the attached code to extract OBJ model files from static models in the TOMDLP_P folder. Example: "ATT_106_FLO_00.obj"
  • Animation data is stored in ".toanmb"-files.
Any help parsing the animation data please?

Re: Tales of Zestiria

Posted: Tue Apr 26, 2016 6:30 pm
by chiri
I can only attach one file per post. So here's the code to extract the textures and model data.

Re: Tales of Zestiria

Posted: Tue Apr 26, 2016 6:41 pm
by chiri
And here is an example of the Edna bone animation model containing the vertex data. The nodes are named like "DB_XNECKRIBBON1_1_R", "DB_HOOD1_1_BR", "DB_HOOD1_1_BL" and so on.

My goal is to modify the vertex data and store it back into the game for a better gaming experience.

Re: Tales of Zestiria

Posted: Tue Jul 05, 2016 1:58 am
by rballad
how to use the program?

Re: Tales of Zestiria

Posted: Wed Aug 31, 2016 2:06 am
by jusete
Hey friend, How I can extract the models? I extracted the package with quickBms but I don´t know how to figure out the obj models

Re: Tales of Zestiria

Posted: Thu Sep 01, 2016 5:53 pm
by dian333
at "CHR_EDN_TEN_100_CHEST_MI.toanmb"
offset 0xC8

Code: Select all

group-01 neck ribbon r      bone 0->1
                      neck ribbon l
        group-00  hood x2                bone 2->7
                      cloth x4
offset 0x108

Code: Select all

"bone name " how many words +3
         "DB_XNECKRIBBON1_1_R" words= 19 , 0x30-0x20=0x10=16
         ....                                                  0x40-0x30=0x10
         "DB_HOOD1_1_BR"           words= 13 , 0x4a-0x40=0xa =10
         "DB_CLOTH1_1_BR "(space)        words=15  ,0x56-0x4a=12
         "DB_CLOTH1_1_R"            words=13    0x60-0x56=      =10
         "DB_HOOD1_1_BL"            words=13   0x6a-0x60=       =10
         "DB_CLOTH1_1_BL "(space)        words=15  ,0x76-0x6a  =12
=========================
in other words,
from offset 0x108
move 0x20 ##two line down
get the bone name start address ## bone name="DB_XNECKRIBBON1_1_R"

from offset 0x10B
move 0x30 ##three line down
get the 2nd bone name start address ## bone name = "DB_XNECKRIBBON1_1_L"
....
frome offset 0x124
move 0x76
get 0x19A ##bone name="DB_CLOTH1_1_L"

Re: Tales of Zestiria

Posted: Thu Sep 01, 2016 6:36 pm
by dian333
FROM offset 0x1ac TO 0x5ac
0x5AC - 0x1AC = 0x400=1024
8bone 1024/8= 128
x,y,z,w 4 float number 128/16=8 key frame
#####w 0 or 1 ,appear many times

but here ,it would be posible 4x4 matrix

Code: Select all

{A1 A2 A3  0
 B1 B2 B3   0
 C1 C2 C3   0
 D1 D2 D3  1}

it looks like a ”no scale(size)transform “ 4x4 matrix

and then compare 0x1ac and after 0x10x4linex8bone offset
that is 0x3ac
their matrix
= = only guess
A1
{0.75} <==> 0.75
0.75 <==> 0.75
-0.037 <==> -0.037
0.184 <==> 0.184
0.365 <==> 0.365
-0.0375 <==> -0.0375
0.184 <==> 0.184
0.365 <==> 0.365

find it that A1 stay the same value, A2 ,A3 changes
continue find it that
A1
B2
C3
stay the same value
so taht ,this matrix possible have "move transform" only

Re: Tales of Zestiria

Posted: Thu Sep 01, 2016 7:44 pm
by dian333

Code: Select all

{A1 
     B2
          C3
               1}
stay the same value
does this anime data only have two key frame?
or above matrix is bone matrix (70% possibility ,consider order :bone-mesh-animetion)
look down ,
offset 0x5b0

Code: Select all

LINE:6A                  22
     ......
       
offset:0x61c
8 (obejects?)

offset: 0x628

Code: Select all

float  0      0    0.1   0.1
        0.5   0     1       1
        5      π     π       π    ## π=3.14159...
        0.17  0    1       -6.6

= = in fact ,when i saw "0 0 0.1 0.1 0.5 0 1 1" and then number>1 .
i guess the numbers(which>1) would be  <x,y,z> 

so from offset 0x62c skip 0x20 
           ot offset 0x64c read 3 floats as <x,y,z> (which first one is x=y=z=π)
from 0x628 to 0x693 as a part ,0x694-0x628 =0x6c      

it is

Code: Select all

index:1 int
        ??     : 2 lines skip 0x20
        <x,y,z>??? :  3 float     like (1,0.5)*π 
        ....
this types parts appear 8 times

Re: Tales of Zestiria

Posted: Thu Sep 01, 2016 8:02 pm
by dian333
ok , look back to 0x1a0
print (C1 C2 C3) #IF here is bone matrix ,(C1, C2 ,C3)is bone position (x,y,z)

Code: Select all

       X            Y               Z
1st: -0.757      120           3.38                   left
2nd  0.757       120          3.38                   right

3rd  -5.5         112           6.49                  hood b right

4th   -4.4        97             2.63                  cloth b right
5th   -9.6        102           -3.02                 cloth right

6th   5.5         112           6.49                  hood b left

7th   4.4         97            2.63                   cloth b left
8th   9.6         102          -3.02                  cloth left

BINGO!!

and then 9th-16th is what?

Re: Tales of Zestiria

Posted: Thu Sep 01, 2016 8:43 pm
by dian333
= =CAN NOT FIND vertex_index to build face
CAN NOT FIND X Y Z W quaternion to build animetion

Re: Tales of Zestiria

Posted: Thu Sep 01, 2016 9:44 pm
by dian333
= = animetion data isobviously in "TOANMB"and "TOANMSB"
“MDL” 〉〉model ..bone+mesh+weight+material ONLY

Re: Tales of Zestiria

Posted: Sun Sep 04, 2016 7:03 pm
by ChrisX930
Now...
is there a way to import the models (probably with animations) into 3dsmax or similar yet?

Re: Tales of Zestiria

Posted: Tue Sep 06, 2016 1:01 am
by shakotay2
Most confusing thread I've ever read. :D

1. it doesn't make sense to care for animation data as long as you don't have the skeleton, imho
2. give the .toanmb file some structure (search for "EDN_" for example)

Code: Select all

Offset  0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F
0B20   30 80 00 00 CA 02 00 00  3A 01 00 00 90 00 00 00 
                 0x2CA -> 714 (x28)

Code: Select all

Offset  0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F
94F0   88 AD 00 00 49 00 00 00  5B 00 00 00 23 00 00 00 
                 0x0049 -> 73 (x28)
At 0x9504 and 0x11C1C there's promising point clouds:
charEdnTen100ChestMi.jpg

Re: Tales of Zestiria

Posted: Tue Sep 06, 2016 7:33 am
by dian333
this a file from DLC (story of alisha) in "DATADLC\008\EXTRA\WIN\TOMDLP_P"
which player angrily call it "真の仲间"


file:
https://mega.nz/#!VkBHWJzJ!WqHpQl1I__hV ... OraNgEyINo

Re: Tales of Zestiria

Posted: Tue Sep 06, 2016 8:20 am
by dian333
in “CHR_EDN_TEN_100_CHEST_MI.toanmb”

Code: Select all

offset 0xb20:    {CA 02 00 00} = int 714                  this part vertex number
                                                                         the part is offset 0xb34 - 0x594C
                                                                         FVF size = 28
                                                                         (0x594C-0xb34)/28= 714
as the name "HAND_0_L_EDN......"