MOTN

From Wulinshu
Jump to navigation Jump to search

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 First X? channel available
0x0080 First Y? channel available
0x0040 First Z? channel available
0x0020 Second X? channel available
0x0010 Second Y? channel available
0x0008 Second 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 unknown data.
Each entry in the block is 2 bytes or 1 bytes in size depending on the flag.

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.