Difference between revisions of "Motion (.MOT) File Format"

From Ōkami Speedrun Wiki
Jump to navigation Jump to search
m
m
Line 14: Line 14:
| 0x04 || <code>uint16_t</code> || 2 || Animation's frame count.
| 0x04 || <code>uint16_t</code> || 2 || Animation's frame count.
|-
|-
| 0x06 || <code>uint8_t</code> || 1 || Animation's property count.
| 0x06 || <code>uint8_t</code> || 1 || Animation's curve info count.
|-
|-
| 0x07 || <code>uint8_t</code> || 1 || Loop flag, sets if the animation either loops or not (1/0).
| 0x07 || <code>uint8_t</code> || 1 || Loop flag, sets if the animation either loops or not (1/0).
Line 30: Line 30:
|-
|-
| 0x02 || <code>uint16_t</code> || 2 || Curve keyframe count.
| 0x02 || <code>uint16_t</code> || 2 || Curve keyframe count.
|-
| 0x04 || <code>uint32_t / float32_t</code> || 4 || Keyframes offset / value
|}
|}


the 4th offset of each curve info can be either a float, or uint32. That's handled when the curve property is defined. It depends on the Property Family the curve is set in.
The curve property will define what property of the bone/object it is animating. There's some properties who could not be determined yet. See some already identified values bellow.
The curve property will define what property of the bone/object it is animating. There's some properties who could not be determined yet. See some already identified values bellow.


Line 112: Line 115:
|-
|-
| 88 || Full-Precision Curve || Scale Z
| 88 || Full-Precision Curve || Scale Z
|}
The Property Family tells the game how the keyframes are handled ingame. Depending on the Family the property is set in, it can be readen diferently.
== Single Pose ==
This Property Family is the easiest one to Decode. Because since it's a single pose, The there's only one keyframe, in which is given on the Curve Info.
(Example):
{| class="wikitable"
! Offset !! Value !! Description
|-
| 0x00 || -1 || This field is telling that the curve is animating the root bone of the model.
|-
| 0x01 || 5 || This field is telling that the curve animates the Z rotation of the root bone, being set on a Single-Pose Property Family.
|-
| 0x02 || 1 || This field is telling that there's only one keyframe on this curve, which makes sense, since this curve is set on a Single-Pose Family.
|-
| 0x04 || 0.52 || This field is telling the value or the Z rotation right away, no more computation needed.
|}
|}

Revision as of 17:56, 7 September 2025

Note: This page pertains to Reverse Engineering of Okami File Formats.

Explanation

This file incorporates curves and/or properties for an given embbed model. Because of that, it's almost always certain that they are contained in a file container (dat). There's instances of mots that controlled properties instead of bones, so it's not always certain of what it animates. A further inspection have to be done.

Mot main header

Offset Type Size Description
0x00 uint32_t 4 File identifier (Magic number).
0x04 uint16_t 2 Animation's frame count.
0x06 uint8_t 1 Animation's curve info count.
0x07 uint8_t 1 Loop flag, sets if the animation either loops or not (1/0).

on Offset 8, The File gives informations about the curves, i.e: what bone it animates, etc.

Curve Info

Offset Type Size Description
0x00 int8_t 1 Bone index (-1 means it animates the mode's root bone).
0x01 int8_t 1 Curve properties (See below).
0x02 uint16_t 2 Curve keyframe count.
0x04 uint32_t / float32_t 4 Keyframes offset / value

the 4th offset of each curve info can be either a float, or uint32. That's handled when the curve property is defined. It depends on the Property Family the curve is set in. The curve property will define what property of the bone/object it is animating. There's some properties who could not be determined yet. See some already identified values bellow.

Curve Properties (Already identified)

Value Property Family Property
0 Single Pose Position X
1 Single Pose Position Y
2 Single Pose Position Z
3 Single Pose Rotation X
4 Single Pose Rotation Y
5 Single Pose Rotation Z
6 Single Pose Scale X
7 Single Pose Scale Y
8 Single Pose Scale Z
16 Quantized Curve Position X
17 Quantized Curve Position Y
18 Quantized Curve Position Z
19 Quantized Curve Rotation X
20 Quantized Curve Rotation Y
21 Quantized Curve Rotation Z
22 Quantized Curve Scale X
23 Quantized Curve Scale Y
24 Quantized Curve Scale Z
50 Semi-Precision Curve Position X
51 Semi-Precision Curve Position Y
52 Semi-Precision Curve Position Z
53 Semi-Precision Curve Rotation X
54 Semi-Precision Curve Rotation Y
55 Semi-Precision Curve Rotation Z
56 Semi-Precision Curve Scale X
57 Semi-Precision Curve Scale Y
58 Semi-Precision Curve Scale Z
80 Full-Precision Curve Position X
81 Full-Precision Curve Position Y
82 Full-Precision Curve Position Z
83 Full-Precision Curve Rotation X
84 Full-Precision Curve Rotation Y
85 Full-Precision Curve Rotation Z
86 Full-Precision Curve Scale X
87 Full-Precision Curve Scale Y
88 Full-Precision Curve Scale Z

The Property Family tells the game how the keyframes are handled ingame. Depending on the Family the property is set in, it can be readen diferently.

Single Pose

This Property Family is the easiest one to Decode. Because since it's a single pose, The there's only one keyframe, in which is given on the Curve Info.

(Example):

Offset Value Description
0x00 -1 This field is telling that the curve is animating the root bone of the model.
0x01 5 This field is telling that the curve animates the Z rotation of the root bone, being set on a Single-Pose Property Family.
0x02 1 This field is telling that there's only one keyframe on this curve, which makes sense, since this curve is set on a Single-Pose Family.
0x04 0.52 This field is telling the value or the Z rotation right away, no more computation needed.