MNS files
Study of OBAKE.MNS
0000 dword 'DMDF'
0004 dword Block size = File size
0008 dword Always 0001h
000C dword Always 0001h
0010 dword Always 0000h
0014 dword Always 0000h
0018 dword Always 0000h
001C dword Always 0034h. Offset of first Structure3DJoint (right after file header)
0020 dword Offset of 'MOTN' section
0024 dword Offset of 'TEXT' section
0028 dword Count of Structure3DJoint
002C dword
0030 dword
0034 Structure3DJoint (52 bytes)
0000 dword 0-based index to 3DJoint# in StrucMotnFrame.
0004 dword
0008 dword
000C dword Joint's relative X (signed int32 origin_x)
0010 dword Joint's relative Y (signed int32 origin_y)
0014 dword Joint's relative Z (signed int32 origin_z)
0018 dword Offset of single StrucMeshDesc
001C dword Offset of next sibling Structure3DJoint. No sibling if 0.
0020 dword Offset of first child Structure3DJoint. No children if 0.
0024 dword
0028 dword
002C dword
0030 dword
02EC StrucMeshDesc (24 bytes)
0000 dword ? (00 00 01 00)
0004 word Count of Struc3DCoord (12)
0006 word Count of StrucFace (10)
0008 dword Offset of first Struc3DCoord (016Ch)
000C dword ? (0)
0010 dword Offset of first StrucFace (01FCh)
0014 dword ? (274h)
016C Struc3DCoord (12 bytes per struc)
0000 dword X Position (signed int32)
0004 dword Y Position (signed int32)
0008 dword Z Position (signed int32)
01FC StrucFace (12 bytes per struc)
0000 word Index of 1st Vertex
0002 word Index of 2nd Vertex
0004 word Index of 3rd Vertex
0006 word Index of 4th Vertex (3rd=4th if Triangle, otherwise Quad)
0008 word
000A word Misc: 0x8000=Texture-flip-y, 0x4000=flip-x, LOBYTE=TextureIndex
0B20 'MOTN' section (StrucMotnHeader)
0000 dword 'MOTN'
0004 dword Size of MOTN. 5A8h
0008 dword Number of tables offsets. 3
000C dword Number of 3DJoints (or meshes). 6
0010 dword Offset of table 1
0014 dword Offset of table 2
0018 dword Offset of table 3
001C dword 00000000h Marks the end of the list of table offsets
0020 Table 1 7 increasing offsets + FFFFFFFFh (each table is ended by either FFFFFFFFh or 00000000h)
0040 Table 2 8 increasing offsets + 00000000h
0064 Table 3 4 increasing offsets + FFFFFFFFh
Table 1 data
relative-offset=78h, length=44h
0019 0000 0000 0000 0000 0000 0000 7333 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
relative-offset=BCh, length=44h
000f 0000 0000 0000 0000 0000 0000 7333 0000 0000 016c 0000 0000 0000 0222 0000 0000 0000 f1c7 0000 0000 0000 f1c7 0000 0000 0000 fc71 0000 0000 0000 fc71 0000 0000 0000
relative-offset=100h, length=48h
0019 0002 0000 0044 0000 0000 0000 7333 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0384 ff00
relative-offset=148h, length=44h
000f 0000 0000 0000 0000 0000 0000 7333 0000 0000 016c 0000 0000 0000 0222 0000 0000 0000 f1c7 0000 0000 0000 f1c7 0000 0000 0000 fc71 0000 0000 0000 fc71 0000 0000 0000
relative-offset=18ch, length=48h
0019 0002 0000 0044 0000 0000 0000 7333 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0384 ff00
relative-offset=1d4h, length=44h
000f 0000 0000 0000 0000 0000 0000 7333 0000 0000 016c 0000 0000 0000 0222 0000 0000 0000 f1c7 0000 0000 0000 f1c7 0000 0000 0000 fc71 0000 0000 0000 fc71 0000 0000 0000
relative-offset=218h, length=4ch
0028 0003 0000 0044 0000 0000 0000 7333 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0003 84ff 0019 0000
Table 2 data
00 19 00 00 00 00 00 00 00 00 00 00 00 00 73 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
etc... until end of MOTN item
Table 1 data example (StrucMotnFrame):
0B98 StrucMotnFrame (20 bytes +by Flags +8 bytes per 3DJoint in StrucMotnHeader)
0000 word Frame's relative duration time. 30fps? (0019)
0002 word Flags. (0000)
length+=4 if Flags=2.
length+=8 if Flags=3.
length+=12 if Flags=4.
length+=12 if Flags=5.
0004 word (0000)
0006 word (0000)
0008 word (0000)
000A word (0000)
000C word (0000)
000E word (7333)
0010 word (0000)
0012 word (0000)
0014 signed word (0000) 3DJoint#0 Relative-rotation-x
0016 signed word (0000) 3DJoint#0 Relative-rotation-y
0018 signed word (0000) 3DJoint#0 Relative-rotation-z
001A word (0000) ?
001C signed word (0000) 3DJoint#1 Relative-rotation-x
001E signed word (0000) 3DJoint#1 Relative-rotation-y
0020 signed word (0000) 3DJoint#1 Relative-rotation-z
0022 word (0000) ?
0024 signed word (0000) 3DJoint#2 Relative-rotation-x
0026 signed word (0000) 3DJoint#2 Relative-rotation-y
0028 signed word (0000) 3DJoint#2 Relative-rotation-z
002A word (0000) ?
002C signed word (0000) 3DJoint#3 Relative-rotation-x
002E signed word (0000) 3DJoint#3 Relative-rotation-y
0030 signed word (0000) 3DJoint#3 Relative-rotation-z
0032 word (0000) ?
0034 signed word (0000) 3DJoint#4 Relative-rotation-x
0036 signed word (0000) 3DJoint#4 Relative-rotation-y
0038 signed word (0000) 3DJoint#4 Relative-rotation-z
003A word (0000) ?
003C signed word (0000) 3DJoint#5 Relative-rotation-x
003E signed word (0000) 3DJoint#5 Relative-rotation-y
0040 signed word (0000) 3DJoint#5 Relative-rotation-z
0042 word (0000) ?
* Rotation unit is still unknown. It is **approximately**: value ÷ 150.0 → degree unit [°].
738h Padding 'AA' bytes
1800 'TEXT' section
0000 dword 'TEXT'
0004 dword Size of TEXT. 23B0h
End Of file
'TEXT' content
54 45 58 54
00 00 23 B0
00 00 00 06
00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 B0
00 00 00 24 00 00 00 00
| Offsets |
00 00 00 A8 00 00 00 20 00 20 00 00 00 00 00 B0 00 00 00 00
00 01 00 A8 00 00 00 20 00 20 00 00 00 00 08 B0 00 00 00 00
00 02 00 A8 00 00 00 20 00 20 00 00 00 00 10 B0 00 00 00 00
00 03 00 A8 00 00 00 20 00 20 00 00 00 00 18 B0 00 00 00 00
00 04 00 A8 00 00 00 08 00 18 00 00 00 00 20 B0 00 00 00 00
00 05 00 A8 00 00 00 08 00 18 00 00 00 00 22 30 00 00 00 00
FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Bitmap images. 2 bytes per pixel, color encoded like in palettes.