View source: MOTN (revision 565)
Jump to navigation
Jump to search
2019-06-05T18:13:38Z · PhilYeahz · Download source
[[Category:Shenmue]]
[[Category:Shenmue II]]
[[Category:Files]]
[[Category:Animations]]
The MOTN file format contains the animations for models based on their node structure.<br>
This format can be found in various PKS files and in the motion.bin file.<br>
===Structure===
{| class="wikitable"
|-
! Section
|-
| Header
|-
| Sequence Data Table
|-
| Unknown Extra Data
|-
| Sequence Name Table
|-
| Sequence Data
|}
===Header===
{| class="wikitable"
|-
! 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====
{| class="wikitable"
|-
! 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.<br>
Both offsets point inside the sequence data segment.<br>
The first offset points to the main sequence data containing the key frames.<br>
The second offset points to some unknown data array.<br>
===Sequence Name Table===
The sequence name table consists out of the offsets (unsigned 32bit) to the strings and the strings themself.<br>
The amount of names is given by the sequence count inside the header.<br>
The strings are zero terminated/seperated.
===Sequence Data===
====Header====
{| class="wikitable"
|-
! 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.<br>
Each entry in the block is 2 bytes in size.
{| class="wikitable"
|-
! 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?).<br>
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.<br>
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.<br>
Each entry in the block is 1 bytes in size.
====Block 5====
The fifth and last block contains the actual data for the keyframes.<br>
Each entry in the block is 2 bytes in size and could be interpreted as degrees.