Changes

Jump to navigation Jump to search

FF8/FileFormat MCH

1,531 bytes added, 05:24, 23 May 2019
m
7 revisions imported
<small>Last UpdateAuthors: [[User:Koral|Koral]] 18, [http:21, 24 May 2009 (EDT)//forums.qhimm.com/index.php?topic=6961.msg86318#msg86318 JWP] and [http://forums.qhimm.com/index.php?topic=13261.msg184344#msg184344 Vehek]</small>
= MCH Field Character Models =
Each MCH file contains a skinned-animated model representing a character on the field or world Maps. There appear to be multiple files of the same character representing differnt Level of Details.
They usually contain multiple TIM textures (standard PSX textures), mesh geometry, bones, skeleton heirarchy information and skinning information. The whereabouts of the Bone Animation data is currently unknown.
<br />
= Accessing MCH Files =
<small>todo</small>
<br />
= MCH File Structure =
= MCH File Structure = Header ==
== Header ==<pre> 0x100 bytes [256 bytes] DWORD: Offsets to multiple Texture-Data Start: 0x00 Parse DWORDS until read value: 0xFFFFFFFF DWORD: Offset to Model Data
DWORD: Offsets to multiple Texture-Data Start: 0x00 Parse DWORDS until read value: 0xFFFFFFFF<br />
DWORD: Offset to Model == Texture-Data </pre> ==
== Texture-Data ==<pre>(for each Texture)[[PSX/TIM_format|TIM format]]
(for each Texture) Standard [TIM] format textures</pre>
<br />
== Model-Data ==<pre> Header: 0x40 bytes (64)
DWORD: number {| class="wikitable"! Offset! Length! Description|-| 0x00| 4 bytes| Number of Skeleton Bones DWORD: number |-| 0x04| 4 bytes| Number of Vertices DWORD|-| 0x08| 4 bytes| Number of texture animations|-| 0x0C| 4 bytes| Number of Faces|-| 0x10| 4 bytes| Number of Unknown data|-| 0x14| 4 bytes| Number of Skin objects|-| style="background: rgb(255,255,204)" | 0x18| style="background: rgb(unknown255,255,204)" | 4 bytes DWORD| style="background: number rgb(255,255,204)" | Unknown|-| 0x1C| 2 bytes| Triangle count|-| 0x1E| 2 bytes| Quad count|-| 0x20| 4 bytes| Offset of bones|-| 0x24| 4 bytes| Offset of vertices|-| 0x28| 4 bytes| Offset of texture animations|-| 0x2C| 4 bytes| Offset of Facesfaces|-| style="background: rgb(255,255,204)" | 0x30 DWORD| style="background: rgb(unknown255,255,204)" | 4 bytes DWORD| style="background: number rgb(255,255,204)" | Offset of Skin unknown data|-| 0x34| 4 bytes| Offset of skin objects|-| 0x38| 4 bytes| Offset of animation data|-| style="background: rgb(255,255,204)" | 0x3C| style="background: rgb(255,255,204)" | 4 bytes| style="background: rgb(255,255,204)" | Unknown|}
Skeleton Data: 0x40 bytes per bone, recurse through number of bones dictated in Header (for each bone) SHORT: parent bone (1-based) SHORT: (unknown) DWORD * 10: (unknown) SHORT: bone length DWORD * 15: (unknown)</pre>
<pre> Skeleton Vertex Data: 0x40 bytes per bone, recurse through number of bones dictated in Header (for each bonevertex) SHORT * 3: Vertex XYZ Position SHORT: (unknown) DWORD * 4: (unknown)
SHORT Texture-animations Data: parent bone (1-based) SHORT: ( struct { byte unknown) DWORD: ( byte total_textures? byte unknown) SHORT: bone length byte uSize byte vSize byte replacement_section_count UV_pair original_area_coords DWORD * 15: ( byte unknown)[2] UV_pair replacement_coords[replacement_section_count]</pre> };
<pre> struct face { Vertex Data: u32 opcode; 0x07060125 = triangle, 0907012d = Quad (for each BYTE unk[4]; SHORT unknown; //When bit 0x04 is set, sets semitransparency BYTE unk[2]; u16 verticies[4]; //vertex)id's u16 verticies1[4]; //Edge data??? u32 Vertex_Colours[4]; TextureMap TextureData[4]; // TextureMap = u16 with the first byte = u and the second byte = v u16 Padding; u16 textureIndex; u32 padding[2]; //64 bytes };
SHORT * 3 Unknown Data, Seems to split up the skin-objects, triangles, and quads: Vertex XYZ Position SHORT: (unknown) struct DWORD * 4: (unknown) { uint16 start_skinobject_index</pre> uint16 skinobject_count <pre> Face Data: (for each face)  DWORD: ( byte unknown) BYTE * 3: (unknown) BYTE: Polygon Type [0x2d = Quad, 0x25 = Triangle12] DWORD * 2: (unknown) uint16 start_triangle_index SHORT * 4: Indices per Face-Vertex uint16 triangle_count SHORT * 4: (unknown) uint16 start_quad_index BYTE * 4 * 4: Vertex Colour (RGBA) per Face-Vertex uint16 quad_count BYTE * 2 * 4: Vertex UV, (1st byte U, 2nd byte V) per Face-Vertexunknown2[8] DWORD * 12: (unknown) </pre> <pre> Skin-Object Data: (for each skin-object)  SHORT: Bone ID (1-based) SHORT: (unknown) SHORT: index of first vertex SHORT: number of vertices </pre>};
Skin-Object Data:
(for each skin-object)
SHORT: index of first vertex
SHORT: number of vertices
SHORT: Bone ID (1-based)
SHORT: (unknown)
<br />
<small>todo: notes on skinning, animation data</small>
  =MCH Model File List=
<small>todo</small>

Navigation menu