Difference between revisions of "MOTN"

From Wulinshu
Jump to navigation Jump to search
Line 83: Line 83:
| 0xFE00 || Node ID/Bone ID?
| 0xFE00 || Node ID/Bone ID?
|-
|-
| 0x0100 || First X? channel available
| 0x0100 || Translation X channel available
|-
|-
| 0x0080 || First Y? channel available
| 0x0080 || Translation Y channel available
|-
|-
| 0x0040 || First Z? channel available
| 0x0040 || Translation Z channel available
|-
|-
| 0x0020 || Second X? channel available
| 0x0020 || Rotation X channel available
|-
|-
| 0x0010 || Second Y? channel available
| 0x0010 || Rotation Y channel available
|-
|-
| 0x0008 || Second Z? channel available
| 0x0008 || Rotation Z channel available
|-
|-
| 0x0007 || Unknown
| 0x0007 || Unknown

Revision as of 15:51, 15 June 2019

The MOTN file format contains the animations for models based on their node structure.
This format can be found in various PKS files and in the motion.bin file.

Structure

Section
Header
Sequence Data Table
Unknown Extra Data
Sequence Name Table
Sequence Data

Header

Position Length Type Description
0x00 0x04 uint Sequence data table offset
0x04 0x04 uint Sequence names offset
0x08 0x04 uint Sequence data offset
0x0C 0x04 Attributes Attributes
0x10 0x04 uint File size

Attributes

Mask Type Description
0x00000FFF uint12_t Sequence count

Sequence Data Table

The sequence data table consists out of two offsets (each unsigned 32bit) per sequence.
Both offsets point inside the sequence data segment.
The first offset points to the main sequence data containing the key frames.
The second offset points to some unknown data array.

Sequence Name Table

The sequence name table consists out of the offsets (unsigned 32bit) to the strings and the strings themself.
The amount of names is given by the sequence count inside the header.
The strings are zero terminated/seperated.

Sequence Data

Header

Position Length Type Description
0x00 0x04 uint Flag (decides the byte size for the block 2 and block 3 entries)
0x04 0x02 ushort Block 1 end offset/Block 2 start offset
0x06 0x02 ushort Block 2 end offset/Block 3 start offset
0x08 0x02 ushort Block 3 end offset/Block 4 start offset
0x08 0x02 ushort Block 4 end offset/Block 5 start offset

Block 1

The first block contains the descriptions for the structure of the keyframes.
Each entry in the block is 2 bytes in size.

Bit-Mask Description
0xFE00 Node ID/Bone ID?
0x0100 Translation X channel available
0x0080 Translation Y channel available
0x0040 Translation Z channel available
0x0020 Rotation X channel available
0x0010 Rotation Y channel available
0x0008 Rotation Z channel available
0x0007 Unknown

Block 2

The second block contains for each channel the amount of data points (key frames?).
Each entry in the block is 2 bytes or 1 bytes in size depending on the flag.

Block 3

The third block contains frame index data.
Each entry in the block is 2 bytes or 1 bytes in size depending on the flag.
Each frame is 0.0333333 milliseconds (30 FPS)

Block 4

The fourth block contains the same amount of data as the second block.
Each entry in the block is 1 bytes in size.

Block 5

The fifth and last block contains the actual data for the keyframes.
Each entry in the block is 2 bytes in size and could be interpreted as degrees.