Changes
From Final Fantasy Inside
no edit summary
===Solution=Section 1: Skeleton ==
=== Bone struct ===
{| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"! style="background:rgb(204,204,204)" | Offset! style="background:rgb(204,204,204)" | Length! style="background:rgb(204,204,204)" | Description|-| 0| 2 bytes| Parent id|-| 2| 2 bytes| Bone size|-|style="background:rgb(255,255,204)" | 4|style="background:rgb(255,255,204)" | 44 bytes|style="background:rgb(255,255,204)" | Unknown (often empty)|} == Section 2: Model geometry == === Header (data sub table) === {| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"! style="background:rgb(204,204,204)" | Offset! style="background:rgb(204,204,204)" | Length! style="background:rgb(204,204,204)" | Description|-| 0| 4 bytes| Number of objects|-| 4| nbObjects * 4 bytes| Object Positions|} === Object Data === {| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"! style="background:rgb(204,204,204)" | Offset! style="background:rgb(204,204,204)" | Length! style="background:rgb(204,204,204)" | Description|-| 0| 2 bytes| Number of Vertices Data|-| 2| Varies * NbVerticesData| Vertices Data|-| Varies| absolutePosition % 4| Padding (0x00)|-| Varies| 2 bytes| Num triangles|-| Varies| 2 bytes| Num quads|-| Varies| 8 bytes| Padding (0x00)|-| Varies| numTriangles * 16 bytes| Triangles|-| Varies| numQuads * 20 bytes| Quads|-| Varies| 4 bytes| Total number of vertices (may be not visible)|} ==== Vertice Data ==== {| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"! style="background:rgb(204,204,204)" | Offset! style="background:rgb(204,204,204)" | Length! style="background:rgb(204,204,204)" | Description|-| 0| 2 bytes| Bone id|-| 2| 2 bytes| Number of vertices|-| 4| nbVertices * 6 bytes| Vertices (nbVertices * 3 shorts)|} ==== Useful structures ==== typedef struct { sint16 x, y, z; } vertice;(sizeof = 6) typedef struct { uint16 vertex_indexes[3]; uint8 texCoords1[2]; uint8 texCoords2[2]; uint16 textureID_related; uint8 texCoords3[2]; uint16 u; // textureID_related2 } triangle;(sizeof = 16) typedef struct { uint16 vertex_indexes[4]; uint8 texCoords1[2]; uint16 textureID_related; uint8 texCoords2[2]; uint16 u; // textureID_related2 uint8 texCoords3[2]; uint8 texCoords4[2]; } triangle;(sizeof = 20) == Section 3: Model animation == === Header (data sub table) === {| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"! style="background:rgb(204,204,204)" | Offset! style="background:rgb(204,204,204)" | Length! style="background:rgb(204,204,204)" | Description|-| 0| 4 bytes| Number of animations|-| 4| nbAnimations * 4 bytes| Animations Positions|} == Section 4: Unknown == Optionnal section, often empty. == Section 5: A.I. == Maybe A.I. scripts. === Header === {| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"! style="background:rgb(204,204,204)" | Offset! style="background:rgb(204,204,204)" | Length! style="background:rgb(204,204,204)" | Description|-| 0| 2 bytes| Number of scripts|-| 2| nbScripts * 2 bytes| Scripts Positions|} == Section 6: unknown == Can be empty. == Section 7: Informations & stats == TODO (interpreted at 94%) == Section 8: Battle scripts == == Section 9: Sounds == Contains AKAO sequences. == Section 10: Sounds == Contains AKAO sequences. == Section 11: Textures == Contains some [[FF7PSX/TechnicalTIM_format|Back to Technical Problems pageTIMs]]with size 128x128 (8bit paletized). {| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"! style="background:rgb(204,204,204)" | Offset! style="background:rgb(204,204,204)" | Length! style="background:rgb(204,204,204)" | Description|-| 0| 4 bytes| Number of TIMs|-| 4| nbTIMs * 4 bytes| TIMs Positions|-| 4 + nbTIMs * 4| 4 bytes| End of file|-| 8 + nbTIMs * 4| Varies * nbTIMs| TIMs|}